44 #ifndef CEXMC_HISTO_MANAGER_HH
45 #define CEXMC_HISTO_MANAGER_HH
52 #include <G4String.hh>
58 #ifdef CEXMC_USE_ROOTQT
64 class CexmcHistoManagerMessenger;
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,
117 class CexmcHistoManager
120 typedef std::vector< TH1 * > CexmcHistoVector;
122 typedef std::map< CexmcHistoType, CexmcHistoVector > CexmcHistosMap;
124 typedef CexmcHistosMap::value_type CexmcHistoPair;
126 struct CexmcHistoAxisData
128 CexmcHistoAxisData() : nBins( 0 ), nBinsMin( 0 ), nBinsMax( 0 )
133 nBins( nBins ), nBinsMin( nBinsMin ), nBinsMax( nBinsMax )
143 typedef std::vector< CexmcHistoAxisData > CexmcHistoAxes;
152 struct CexmcHistoData
155 type( CexmcHistoType_SIZE ), impl( Cexmc_TH1F ),
156 isARHisto( false ), isARRec( false ), triggerType(
CexmcTPT )
159 CexmcHistoData( CexmcHistoType type, CexmcHistoImpl impl,
160 bool isARHisto,
bool isARRec,
163 const CexmcHistoAxes & axes ) :
164 type( type ), impl( impl ), isARHisto( isARHisto ),
165 isARRec( isARRec ), triggerType( triggerType ), name( name ),
166 title( title ), axes( axes )
187 static CexmcHistoManager * Instance(
void );
189 static void Destroy(
void );
194 ~CexmcHistoManager();
203 void Add( CexmcHistoType histoType,
unsigned int index,
206 void Add( CexmcHistoType histoType,
unsigned int index,
G4double x,
209 void Add( CexmcHistoType histoType,
unsigned int index,
G4double x,
212 void Add( CexmcHistoType histoType,
unsigned int index,
G4int binX,
215 void List(
void )
const;
219 #ifdef CEXMC_USE_ROOTQT
220 void Draw(
const G4String & histoName,
221 const G4String & histoDrawOptions =
"" );
225 void AddHistoMenu(
const G4String & handle,
226 const G4String & label =
"Histograms" );
228 void SetDrawOptions1D(
const G4String & value );
230 void SetDrawOptions2D(
const G4String & value );
232 void SetDrawOptions3D(
const G4String & value );
236 void SetVerboseLevel(
G4int value );
238 G4int GetVerboseLevel(
void )
const;
241 void AddHisto(
const CexmcHistoData & data,
244 void CreateHisto( CexmcHistoVector & histoVector,
247 const CexmcHistoAxes & axes );
249 #ifdef CEXMC_USE_ROOTQT
258 TDirectoryFile * outFile;
261 CexmcHistosMap histos;
275 #ifdef CEXMC_USE_ROOTQT
277 TQtWidget * rootCanvas;
279 G4bool areLiveHistogramsEnabled;
281 G4bool isHistoMenuInitialized;
295 CexmcHistoManagerMessenger * messenger;
298 static CexmcHistoManager *
instance;
302 inline void CexmcHistoManager::SetVerboseLevel(
G4int value )
304 verboseLevel = value;
308 inline G4int CexmcHistoManager::GetVerboseLevel(
void )
const
314 inline void CexmcHistoManager::AddHistoMenu(
const G4String & handle,
317 histoMenuHandle = handle;
318 histoMenuLabel = label;
322 inline void CexmcHistoManager::SetDrawOptions1D(
const G4String & value )
324 drawOptions1D = value;
328 inline void CexmcHistoManager::SetDrawOptions2D(
const G4String & value )
330 drawOptions2D = value;
334 inline void CexmcHistoManager::SetDrawOptions3D(
const G4String & value )
336 drawOptions3D = value;
void Print(const std::vector< T > &data)
static G4UIterminal * session
const G4double x[NPOINTSGL]
std::vector< CexmcAngularRange > CexmcAngularRangeList
static MCTruthManager * instance
G4bool isInitialized()
Check if the generator is initialized.
void Add(G4int Elements, T *To, T *A1, T *A2=NULL)
Add two arrays together.