Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/ChargeExchangeMC/include/CexmcHistoManager.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 /*
 27  * =============================================================================
 28  *
 29  *       Filename:  CexmcHistoManager.hh
 30  *
 31  *    Description:  histograming manager (singleton)
 32  *
 33  *        Version:  1.0
 34  *        Created:  26.11.2009 20:55:16
 35  *       Revision:  none
 36  *       Compiler:  gcc
 37  *
 38  *         Author:  Alexey Radkov (), 
 39  *        Company:  PNPI
 40  *
 41  * =============================================================================
 42  */
 43 
 44 #ifndef CEXMC_HISTO_MANAGER_HH
 45 #define CEXMC_HISTO_MANAGER_HH
 46 
 47 #ifdef CEXMC_USE_ROOT
 48 
 49 #include <vector>
 50 #include <map>
 51 #include <Rtypes.h>
 52 #include <G4String.hh>
 53 #include "CexmcAngularRange.hh"
 54 #include "CexmcCommon.hh"
 55 
 56 class  TDirectoryFile;
 57 class  TH1;
 58 #ifdef CEXMC_USE_ROOTQT
 59 class  TQtWidget;
 60 class  TList;
 61 class  G4UIsession;
 62 class  G4UIQt;
 63 #endif
 64 class  CexmcHistoManagerMessenger;
 65 
 66 
 67 enum  CexmcHistoType
 68 {
 69     CexmcMomentumBP_TPT_Histo,
 70     CexmcMomentumBP_RT_Histo,
 71     CexmcMomentumIP_TPT_Histo,
 72     CexmcTPInMonitor_TPT_Histo,
 73     CexmcTPInTarget_TPT_Histo,
 74     CexmcTPInTarget_RT_Histo,
 75     CexmcRecMasses_EDT_Histo,
 76     CexmcRecMasses_RT_Histo,
 77     CexmcAbsorbedEnergy_EDT_Histo,
 78     CexmcAbsorbedEnergy_RT_Histo,
 79     CexmcHistoType_ARReal_START,
 80     CexmcRecMassOP_ARReal_RT_Histo = CexmcHistoType_ARReal_START,
 81     CexmcRecMassNOP_ARReal_RT_Histo,
 82     CexmcOPDPAtLeftCalorimeter_ARReal_EDT_Histo,
 83     CexmcOPDPAtRightCalorimeter_ARReal_EDT_Histo,
 84     CexmcOPDPAtLeftCalorimeter_ARReal_RT_Histo,
 85     CexmcOPDPAtRightCalorimeter_ARReal_RT_Histo,
 86     CexmcRecOPDPAtLeftCalorimeter_ARReal_EDT_Histo,
 87     CexmcRecOPDPAtRightCalorimeter_ARReal_EDT_Histo,
 88     CexmcRecOPDPAtLeftCalorimeter_ARReal_RT_Histo,
 89     CexmcRecOPDPAtRightCalorimeter_ARReal_RT_Histo,
 90     CexmcKinEnAtLeftCalorimeter_ARReal_TPT_Histo,
 91     CexmcKinEnAtRightCalorimeter_ARReal_TPT_Histo,
 92     CexmcKinEnAtLeftCalorimeter_ARReal_RT_Histo,
 93     CexmcKinEnAtRightCalorimeter_ARReal_RT_Histo,
 94     CexmcAbsEnInLeftCalorimeter_ARReal_EDT_Histo,
 95     CexmcAbsEnInRightCalorimeter_ARReal_EDT_Histo,
 96     CexmcAbsEnInLeftCalorimeter_ARReal_RT_Histo,
 97     CexmcAbsEnInRightCalorimeter_ARReal_RT_Histo,
 98     CexmcMissEnFromLeftCalorimeter_ARReal_RT_Histo,
 99     CexmcMissEnFromRightCalorimeter_ARReal_RT_Histo,
100     CexmcKinEnOP_LAB_ARReal_TPT_Histo,
101     CexmcKinEnOP_LAB_ARReal_RT_Histo,
102     CexmcAngleOP_SCM_ARReal_TPT_Histo,
103     CexmcAngleOP_SCM_ARReal_RT_Histo,
104     CexmcRecAngleOP_SCM_ARReal_RT_Histo,
105     CexmcDiffAngleOP_SCM_ARReal_RT_Histo,
106     CexmcOpenAngle_ARReal_TPT_Histo,
107     CexmcOpenAngle_ARReal_RT_Histo,
108     CexmcRecOpenAngle_ARReal_RT_Histo,
109     CexmcDiffOpenAngle_ARReal_RT_Histo,
110     CexmcTPInTarget_ARReal_TPT_Histo,
111     CexmcTPInTarget_ARReal_RT_Histo,
112     CexmcHistoType_ARReal_END = CexmcTPInTarget_ARReal_RT_Histo,
113     CexmcHistoType_SIZE
114 };
115 
116 
117 class  CexmcHistoManager
118 {
119     private:
120         typedef std::vector< TH1 * >                          CexmcHistoVector;
121 
122         typedef std::map< CexmcHistoType, CexmcHistoVector >  CexmcHistosMap;
123 
124         typedef CexmcHistosMap::value_type                    CexmcHistoPair;
125 
126         struct  CexmcHistoAxisData
127         {
128             CexmcHistoAxisData() : nBins( 0 ), nBinsMin( 0 ), nBinsMax( 0 )
129             {}
130 
131             CexmcHistoAxisData( Int_t  nBins_, Double_t  nBinsMin_,
132                                 Double_t  nBinsMax_ ) :
133                 nBins( nBins_ ), nBinsMin( nBinsMin_ ), nBinsMax( nBinsMax_ )
134             {}
135 
136             Int_t     nBins;
137 
138             Double_t  nBinsMin;
139 
140             Double_t  nBinsMax;
141         };
142 
143         typedef std::vector< CexmcHistoAxisData >             CexmcHistoAxes;
144 
145         enum  CexmcHistoImpl
146         {
147             Cexmc_TH1F,
148             Cexmc_TH2F,
149             Cexmc_TH3F
150         };
151 
152         struct  CexmcHistoData
153         {
154             CexmcHistoData() :
155                 type( CexmcHistoType_SIZE ), impl( Cexmc_TH1F ),
156                 isARHisto( false ), isARRec( false ), triggerType( CexmcTPT )
157             {}
158 
159             CexmcHistoData( CexmcHistoType  type_, CexmcHistoImpl  impl_,
160                             bool  isARHisto_, bool  isARRec_,
161                             CexmcTriggerType  triggerType_,
162                             const G4String &  name_, const G4String &  title_,
163                             const CexmcHistoAxes &  axes_ ) :
164                 type( type_ ), impl( impl_ ), isARHisto( isARHisto_ ),
165                 isARRec( isARRec_ ), triggerType( triggerType_ ), name( name_ ),
166                 title( title_ ), axes( axes_ )
167             {}
168 
169             CexmcHistoType    type;
170 
171             CexmcHistoImpl    impl;
172 
173             bool              isARHisto;
174 
175             bool              isARRec;
176 
177             CexmcTriggerType  triggerType;
178 
179             G4String          name;
180 
181             G4String          title;
182 
183             CexmcHistoAxes    axes;
184         };
185 
186     public:
187         static CexmcHistoManager *  Instance( void );
188 
189         static void                 Destroy( void );
190 
191     private:
192         CexmcHistoManager();
193 
194         ~CexmcHistoManager();
195 
196     public:
197         void  Initialize( void );
198 
199         void  SetupARHistos( const CexmcAngularRangeList &  aRanges );
200 
201         void  AddARHistos( const CexmcAngularRange &  aRange );
202 
203         void  Add( CexmcHistoType  histoType, unsigned int  index,
204                    G4double  x );
205 
206         void  Add( CexmcHistoType  histoType, unsigned int  index, G4double  x,
207                    G4double  y );
208 
209         void  Add( CexmcHistoType  histoType, unsigned int  index, G4double  x,
210                    G4double  y, G4double  z );
211 
212         void  Add( CexmcHistoType  histoType, unsigned int  index, G4int  binX,
213                    G4int  binY, G4double  value );
214 
215         void  List( void ) const;
216 
217         void  Print( const G4String &  value );
218 
219 #ifdef CEXMC_USE_ROOTQT
220         void  Draw( const G4String &  histoName,
221                     const G4String &  histoDrawOptions = "" );
222 
223         void  EnableLiveHistograms( G4UIsession *  session, G4bool  on = true );
224 
225         void  AddHistoMenu( const G4String &  handle,
226                             const G4String &  label = "Histograms" );
227 
228         void  SetDrawOptions1D( const G4String &  value );
229 
230         void  SetDrawOptions2D( const G4String &  value );
231 
232         void  SetDrawOptions3D( const G4String &  value );
233 #endif
234 
235     public:
236         void   SetVerboseLevel( G4int  value );
237 
238         G4int  GetVerboseLevel( void ) const;
239 
240     private:
241         void  AddHisto( const CexmcHistoData &  data,
242                     const CexmcAngularRange &  aRange = CexmcAngularRange() );
243 
244         void  CreateHisto( CexmcHistoVector &  histoVector,
245                            CexmcHistoImpl  histoImpl, const G4String &  name,
246                            const G4String &  title,
247                            const CexmcHistoAxes &  axes );
248 
249 #ifdef CEXMC_USE_ROOTQT
250         void  BuildMenuTree( G4UIQt *  session, const G4String &  menu,
251                              TList *  ls );
252 
253         void  AddSubmenu( G4UIQt *  session, const G4String &  parent,
254                           const G4String &  name, const G4String &  label );
255 #endif
256 
257     private:
258         TDirectoryFile *              outFile;
259 
260     private:
261         CexmcHistosMap                histos;
262 
263         bool                          isInitialized;
264 
265         G4String                      opName;
266 
267         G4String                      nopName;
268 
269         G4double                      opMass;
270 
271         G4double                      nopMass;
272 
273         G4int                         verboseLevel;
274 
275 #ifdef CEXMC_USE_ROOTQT
276     private:
277         TQtWidget *                   rootCanvas;
278 
279         G4bool                        areLiveHistogramsEnabled;
280 
281         G4bool                        isHistoMenuInitialized;
282 
283         G4String                      drawOptions1D;
284 
285         G4String                      drawOptions2D;
286 
287         G4String                      drawOptions3D;
288 
289         G4String                      histoMenuHandle;
290 
291         G4String                      histoMenuLabel;
292 #endif
293 
294     private:
295         CexmcHistoManagerMessenger *  messenger;
296 
297     private:
298         static CexmcHistoManager *    instance;
299 };
300 
301 
302 inline void  CexmcHistoManager::SetVerboseLevel( G4int  value )
303 {
304     verboseLevel = value;
305 }
306 
307 
308 inline G4int  CexmcHistoManager::GetVerboseLevel( void ) const
309 {
310     return verboseLevel;
311 }
312 
313 #ifdef CEXMC_USE_ROOTQT
314 
315 inline void  CexmcHistoManager::AddHistoMenu( const G4String &  handle,
316                                               const G4String &  label )
317 {
318     histoMenuHandle = handle;
319     histoMenuLabel = label;
320 }
321 
322 
323 inline void  CexmcHistoManager::SetDrawOptions1D( const G4String &  value )
324 {
325     drawOptions1D = value;
326 }
327 
328 
329 inline void  CexmcHistoManager::SetDrawOptions2D( const G4String &  value )
330 {
331     drawOptions2D = value;
332 }
333 
334 
335 inline void  CexmcHistoManager::SetDrawOptions3D( const G4String &  value )
336 {
337     drawOptions3D = value;
338 }
339 #endif //CEXMC_USE_ROOTQT
340 #endif
341 
342 #endif
343 
344