BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Muc/MucCalib/include/MucCalib/MucCalibMgr.h
Go to the documentation of this file.
1//------------------------------------------------------------------------------|
2// [File ]: MucCalibMgr.h |
3// [Brief ]: Header file of MucCalibMgr class for encapsulation |
4// [Author]: Xie Yuguang, <ygxie@mail.ihep.ac.cn> |
5// [Date ]: Mar 28, 2006 |
6//------------------------------------------------------------------------------|
7
8#ifndef MUC_CALIB_MGR_H
9#define MUC_CALIB_MGR_H
10
11#include <fstream>
12#include <iostream>
13#include <time.h>
14#include <vector>
15
16#include "GaudiKernel/IAIDATupleSvc.h"
17#include "GaudiKernel/IDataProviderSvc.h"
18#include "GaudiKernel/IMessageSvc.h"
19#include "GaudiKernel/INTupleSvc.h"
20#include "GaudiKernel/MsgStream.h"
21#include "GaudiKernel/NTuple.h"
22
23#include "TCanvas.h"
24#include "TDirectory.h"
25#include "TF1.h"
26#include "TFile.h"
27#include "TFolder.h"
28#include "TGraphErrors.h"
29#include "TH1F.h"
30#include "TH2F.h"
31#include "TObjArray.h"
32#include "TTree.h"
33
34#include "MucCalib/MucBoxCal.h"
35#include "MucCalib/MucIdTransform.h"
36#include "MucCalib/MucMark.h"
37#include "MucCalib/MucStripCal.h"
38#include "MucCalib/MucStructConst.h"
39
40using namespace std;
41
42class MucCalibMgr {
43
44public:
45 MucCalibMgr( std::vector<double> jobInfo, std::vector<int> configInfo,
46 std::string outputFile );
48
49 // for initialize
50 StatusCode InitNtuple();
51 StatusCode InitHisto();
52 StatusCode InitArea();
53
54 // for execute
55 StatusCode DimuSelect();
56 StatusCode ReadEvent();
57 StatusCode CheckEvent();
58 StatusCode FillEvent();
59
60 // for finalize
61 StatusCode AnalyseEffAndNoise();
62 StatusCode AnalyseCluster();
63 StatusCode AnalyseRes();
64
65 StatusCode SaveConst();
66 StatusCode EndRun();
67
68protected:
69 StatusCode InitOnlineHisto();
70 StatusCode InitHistoLV0();
71 StatusCode InitHistoLV1();
72 StatusCode InitHistoLV2();
73 StatusCode Init2DEffHisto();
74 StatusCode InitClusterHisto();
75 StatusCode InitResHisto();
76 StatusCode InitConstTree();
77
78 StatusCode FillDigi( int part, int segment, int layer, int strip );
79 StatusCode FillExpHit( int part, int segment, int layer, int strip );
80 StatusCode FillEffHit( int part, int segment, int layer, int strip );
81 StatusCode FillNosHit( int part, int segment, int layer, int strip );
82 StatusCode FillCluster( int part, int segment, int layer, int size );
83
84 StatusCode EffAndNoiseLV0();
85 StatusCode EffAndNoiseLV1();
86 StatusCode EffAndNoiseLV2();
87 StatusCode PadEff();
88
89 StatusCode ClearOnlineHisto();
90 StatusCode ClearHistoLV0();
91 StatusCode ClearHistoLV1();
92 StatusCode ClearHistoLV2();
93 StatusCode Clear2DEffHisto();
94 StatusCode ClearClusterHisto();
95 StatusCode ClearResHisto();
96 StatusCode ClearConstTree();
97
98public:
99 IMessageSvc* msgSvc;
100 INTupleSvc* ntupleSvc;
101 IDataProviderSvc* eventSvc;
102
103private:
104 double m_vs; // BOSS version
105 double m_hv; // high voltage, default = 7200V
106 double m_th; // threshold, default = 75mV
107 double m_er; // event rate, default = 4000Hz
108 double m_tag; // input event type 0:Anything(default), 1:Dimu,
109 // 2:RandomTrg, 3:Cosmic ray, 4:Ppjuu, 5:Other
110 int m_recMode; // rec mode flag, 0:ExtTrk(default), 1:SelfTrk, 2: combine
111 int m_usePad; // calculate pad eff flag, 0: no(default), other: yes
112 int m_effWindow; // eff window for tracking in eff calibration, default = 4
113 int m_clusterMode; // flag for cluster building method, 0: no build, 1: basic(default), 2/3:
114 // other
115 int m_clusterSave; // flag for cluster output, 0: no save(default), 1: save
116 int m_checkEvent; // flag for checking event or not, 0: not check(default), 1: check
117 int m_dimuSelect; // flag for selecting dimu event or not, 0: no(default), 1: yes
118 int m_dimuOnly; // flag for using dimu event only or not, 0: no(default), 1: yes
119
120 string m_outputFile; // calibration constants output file name
121 ofstream* m_fdata; // cluster data output file, enable if m_clusterMode != 0
122 clock_t m_jobStart,
123 m_jobFinish; // for time assumption, start at constructor, end at SaveConst()
124 clock_t m_evtBegin,
125 m_evtEnd; // for event processing time, start at ReadEvent(), end at FillEvent()
126
127 // Calibration results for total events
128 // 0-efficiency, 1-eff err, 2-noise, 3-area(cm^2), 4-Cluster(number of strip), 5-track number
129 double m_layerResults[6][LAYER_MAX];
130 double m_boxResults[6][BOX_MAX];
131 double m_stripResults[6][STRIP_MAX];
132
133 int m_currentRun;
134 long m_currentEvent;
135 int m_eventTag; // tag of event 0: all(default), 1: dimu
136 // Digi and hit container for total events
137 // 0-digi number, 1-rec track number, 2-efficiency hit number,
138 // 3-incidental and noise hit number, 4-rec/fit hit number
139 long m_record[PART_MAX][SEGMENT_MAX][LAYER_MAX][STRIP_INBOX_MAX][5];
140
141 // Digi or hit mark collection for one event
142 MucMark* m_ptrMucMark;
143 mark_col m_digiCol; // container of digis in an event
144 mark_col m_expHitCol; // container of fitting hits in all rec tracks in an event
145 mark_col m_calHitCol; // container of fired hits in a rec track,fresh each track
146 mark_col m_effHitCol; // container of fired hits in all rec tracks in an event
147 mark_col m_nosHitCol; // container of digis not in all rec tracks in an event
148
149 mark_col m_segDigiCol[PART_MAX][SEGMENT_MAX]; // container of digis in segment of part
150 vector<mark_col> m_clusterCol; // container of clusters in all digits of an event
151 vector<float> m_lineResCol; // container of residual by line fit
152 vector<float> m_quadResCol; // container of residual by quad fit
153 vector<float> m_extrResCol; // container of residual by extrapolation
154
155 // Muc id transformer
156 MucIdTransform* m_ptrIdTr;
157
158 // TGraph for eff with error bar
159 TGraphErrors* m_geLayerEff;
160 TGraphErrors* m_geBoxEff;
161 TGraphErrors* m_geStripEff;
162 TCanvas* m_cv[CALIB_LV_MAX];
163
164 // Histogram containers for efficiency and lost
165 // Hit map for online check
166 TH1F* m_hHitMapBarrel_Lay[B_LAY_NUM]; // fill according to layer(map per layer)
167 TH1F* m_hHitMapEndcap_Lay[2][E_LAY_NUM];
168 TH1F* m_hHitMapBarrel_Seg[B_SEG_NUM]; // fill according to segmemt(map per segment)
169 TH1F* m_hHitMapEndcap_Seg[2][E_SEG_NUM];
170
171 // Nhit vs event for online check
172 TH1F* m_hHitVsEvent;
173
174 // Distance between Ext track hit and Muc track hit on the first inner layer for online check
175 TH1F* m_hTrackDistance;
176
177 // Diff of phi angles of two tracks(dimuon event)
178 TH1F* m_hTrackPosPhiDiff;
179 TH1F* m_hTrackMomPhiDiff;
180 // Diff of theta angles of two tracks(dimuon event)
181 TH1F* m_hTrackPosThetaDiff;
182 TH1F* m_hTrackMomThetaDiff;
183
184 // PhiDiff VS ThetaDiff for dimuon event
185 TH2F* m_hDimuTracksPosDiff;
186 TH2F* m_hDimuTracksMomDiff;
187
188 // Phi VS costheta for online check
189 TH2F* m_hPhiCosTheta;
190
191 // Spacial resolution
192 TH1F* m_hBarrelResDist[B_LAY_NUM]; // barrel spacial resolution
193 TH1F* m_hEndcapResDist[E_LAY_NUM]; // endcap spacial resolution
194 TH1F* m_hBarrelResComp[2]; // barrel spacial resolution vs layer
195 TH1F* m_hEndcapResComp[2]; // ebdcao soacuak resikytuib vs layer
196
197 // 2D histogram for eff map
198 TH2F* m_h2DExpMap[PART_MAX][SEGMENT_MAX][LAYER_MAX];
199 TH2F* m_h2DHitMap[PART_MAX][SEGMENT_MAX][LAYER_MAX];
200 TH2F* m_h2DEffMap[PART_MAX][SEGMENT_MAX][LAYER_MAX];
201 TObjArray* m_histArray;
202
203 // LV0
204 TH1F* m_hBrLayerFire; // only barrel
205 TH1F* m_hEcLayerFire; // only endcap
206
207 TH1F* m_hLayerFire; // all
208 TH1F* m_hLayerExpHit;
209 TH1F* m_hLayerEffHit;
210 TH1F* m_hLayerNosHit;
211 TH1F* m_hLayerEff;
212 TH1F* m_hLayerNosRatio;
213 TH1F* m_hLayerArea;
214 TH1F* m_hLayerNos;
215 TH1F* m_hLayerCnt;
216
217 // LV1
218 TH1F* m_hBoxFire;
219 TH1F* m_hBoxExpHit;
220 TH1F* m_hBoxEffHit;
221 TH1F* m_hBoxNosHit;
222 TH1F* m_hBoxEff;
223 TH1F* m_hBoxNosRatio;
224 TH1F* m_hBoxArea;
225 TH1F* m_hBoxNos;
226 TH1F* m_hBoxCnt;
227
228 // LV2
229 TH1F* m_hStripFireMap[BOX_MAX];
230 TH1F* m_hStripExpHitMap[BOX_MAX];
231 TH1F* m_hStripEffHitMap[BOX_MAX];
232 TH1F* m_hStripNosHitMap[BOX_MAX];
233 TH1F* m_hStripEffMap[BOX_MAX];
234 TH1F* m_hStripNosRatioMap[BOX_MAX];
235 TH1F* m_hStripFire;
236 TH1F* m_hStripExpHit;
237 TH1F* m_hStripEffHit;
238 TH1F* m_hStripNosHit;
239 TH1F* m_hStripEff;
240 TH1F* m_hStripNosRatio;
241 TH1F* m_hStripArea;
242 TH1F* m_hStripNos;
243 TH1F* m_hStripCnt;
244
245 // Histograms for cluster
246 TH1F* m_hLayerCluster[LAYER_MAX];
247 TH1F* m_hLayerClusterCmp;
248 TH1F* m_hBoxCluster[BOX_MAX];
249 TH1F* m_hBoxClusterCmp;
250
251 // Tree for constant root file
252 TTree* m_tJobLog;
253 TTree* m_tStatLog;
254 TTree* m_tLayConst;
255 TTree* m_tBoxConst;
256 TTree* m_tStrConst;
257
258 // Job log tree
259 int m_fStartRun; // the id of run start
260 int m_fEndRun; // the id of run end
261 double m_fTotalDAQTime; // total DAQ time
262 double m_fTotalJobTime; // total job time
263 double m_fCalibLayerNum; // the number of layers calibrated
264 double m_fCalibBoxNum; // the number of boxes calibrated
265 double m_fCalibStripNum; // the number of strips calibrated
266 double m_fTotalEvent; // total events
267 double m_fTotalDigi; // total MUC digis
268 double m_fTotalExpHit; // total rec hits
269 double m_fTotalEffHit; // total eff hits
270 double m_fTotalNosHit; // total incidental/noise hits
271 double m_fTotalClstNum; // total number of clusters
272 double m_fTotalStripArea; // total area of strips
273 double m_fLayerCoverage; // layer calibrated coverage
274 double m_fBoxCoverage; // layer calibrated coverage
275 double m_fStripCoverage; // layer calibrated coverage
276
277 // Layer constants tree, level 0
278 double m_fLayerId;
279 double m_fLayerEff;
280 double m_fLayerEffErr;
281 double m_fLayerNosRatio;
282 double m_fLayerDigi;
283 double m_fLayerNos;
284 double m_fLayerCnt;
285 double m_fLayerExpHit;
286 double m_fLayerEffHit;
287 double m_fLayerNosHit;
288 double m_fLayerCluster;
289 double m_fLayerTrkNum;
290
291 // Box constants tree, level 1
292 double m_fBoxId;
293 double m_fBoxPart;
294 double m_fBoxSegment;
295 double m_fBoxLayer;
296 double m_fBoxEff;
297 double m_fBoxEffErr;
298 double m_fBoxNosRatio;
299 double m_fBoxDigi;
300 double m_fBoxNos;
301 double m_fBoxCnt;
302 double m_fBoxExpHit;
303 double m_fBoxEffHit;
304 double m_fBoxNosHit;
305 double m_fBoxCluster;
306 double m_fBoxTrkNum;
307
308 // Strip constants tree, level 2
309 double m_fStripId;
310 double m_fStripPart;
311 double m_fStripSegment;
312 double m_fStripLayer;
313 double m_fStripEff;
314 double m_fStripEffErr;
315 double m_fStripNosRatio;
316 double m_fStripDigi;
317 double m_fStripNos;
318 double m_fStripCnt;
319 double m_fStripExpHit;
320 double m_fStripEffHit;
321 double m_fStripNosHit;
322 double m_fStripTrkNum;
323
324 // N-tuple
325 NTuple::Tuple* m_eventLogTuple; // Event info
326 NTuple::Item<double> m_ntEventId;
327 NTuple::Item<double> m_ntEventTag;
328 NTuple::Item<double> m_ntEsTime;
329 NTuple::Item<double> m_ntDigiNum;
330 NTuple::Item<double> m_ntTrackNum;
331 NTuple::Item<double> m_ntExpHitNum;
332 NTuple::Item<double> m_ntEffHitNum;
333 NTuple::Item<double> m_ntNosHitNum;
334 NTuple::Item<double> m_ntClusterNum;
335 NTuple::Item<double> m_ntEventTime; // run time of a event
336
337 NTuple::Tuple* m_mdcTrkInfoTuple; // Mdc track info
338 NTuple::Item<long> m_charge;
339 NTuple::Item<double> m_mdcpx;
340 NTuple::Item<double> m_mdcpy;
341 NTuple::Item<double> m_mdcpz;
342 NTuple::Item<double> m_mdcpt;
343 NTuple::Item<double> m_mdcpp;
344 NTuple::Item<double> m_mdcphi;
345 NTuple::Item<double> m_mdctheta;
346
347 NTuple::Tuple* m_trackInfoTuple; // Track info
348 NTuple::Item<double> m_ntTrackEvent;
349 NTuple::Item<double> m_ntTrackTag;
350 NTuple::Item<double> m_ntTrackHits;
351 NTuple::Item<double> m_ntTrackSegFly;
352 NTuple::Item<double> m_ntTrackLayFlyA;
353 NTuple::Item<double> m_ntTrackLayFlyB;
354 NTuple::Item<double> m_ntTrackLayFlyC;
355 NTuple::Item<double> m_trkRecMode;
356 NTuple::Item<double> m_chi2;
357 NTuple::Item<double> m_px;
358 NTuple::Item<double> m_py;
359 NTuple::Item<double> m_pz;
360 NTuple::Item<double> m_pt;
361 NTuple::Item<double> m_pp;
362 NTuple::Item<double> m_r;
363 NTuple::Item<double> m_cosTheta;
364 NTuple::Item<double> m_theta;
365 NTuple::Item<double> m_phi;
366 NTuple::Item<double> m_depth;
367 NTuple::Item<double> m_brLastLayer;
368 NTuple::Item<double> m_ecLastLayer;
369 NTuple::Item<double> m_totalHits;
370 NTuple::Item<double> m_totalLayers;
371 NTuple::Item<double> m_maxHitsInLayer;
372
373 NTuple::Tuple* m_trackDiffTuple; // Track collinearity
374 NTuple::Item<double> m_ntDimuTag;
375 NTuple::Item<double> m_ntPosPhiDiff;
376 NTuple::Item<double> m_ntPosThetaDiff;
377 NTuple::Item<double> m_ntMomPhiDiff;
378 NTuple::Item<double> m_ntMomThetaDiff;
379
380 NTuple::Tuple* m_clusterSizeTuple; // Cluster size total
381 NTuple::Item<double> m_ntClusterSize;
382
383 NTuple::Tuple* m_effWindowTuple; // EFF_WINDOW
384 NTuple::Item<double> m_ntEffWindow;
385
386 /*
387 NTuple::Tuple* m_resInfoTuple; // Res info
388 NTuple::Item<long> m_nExpNum;
389 NTuple::Array<double> m_res;
390 NTuple::Array<long> m_resPart;
391 NTuple::Array<long> m_resSegment;
392 NTuple::Array<long> m_resLayer;
393 NTuple::Array<bool> m_resFired;
394 */
395
396 NTuple::Tuple* m_resInfoTuple; // Res info
397 NTuple::Item<double> m_lineRes;
398 NTuple::Item<double> m_quadRes;
399 NTuple::Item<double> m_extrRes;
400 NTuple::Item<long> m_resPart;
401 NTuple::Item<long> m_resSegment;
402 NTuple::Item<long> m_resLayer;
403 NTuple::Item<long> m_resFired;
404 NTuple::Item<long> m_resMode;
405};
406
407#endif
StatusCode ClearHistoLV2()
StatusCode InitResHisto()
StatusCode FillEffHit(int part, int segment, int layer, int strip)
StatusCode DimuSelect()
StatusCode InitOnlineHisto()
StatusCode Init2DEffHisto()
StatusCode SaveConst()
StatusCode FillExpHit(int part, int segment, int layer, int strip)
StatusCode ClearResHisto()
StatusCode ClearHistoLV0()
StatusCode ClearClusterHisto()
StatusCode AnalyseCluster()
StatusCode ClearHistoLV1()
StatusCode PadEff()
StatusCode InitHistoLV1()
StatusCode InitHistoLV2()
StatusCode InitClusterHisto()
StatusCode FillCluster(int part, int segment, int layer, int size)
StatusCode ClearOnlineHisto()
StatusCode InitHisto()
StatusCode FillEvent()
StatusCode EffAndNoiseLV2()
MucCalibMgr(std::vector< double > jobInfo, std::vector< int > configInfo, std::string outputFile)
StatusCode InitHistoLV0()
StatusCode EndRun()
StatusCode ReadEvent()
StatusCode EffAndNoiseLV1()
StatusCode AnalyseRes()
StatusCode CheckEvent()
StatusCode FillNosHit(int part, int segment, int layer, int strip)
StatusCode EffAndNoiseLV0()
StatusCode InitConstTree()
StatusCode ClearConstTree()
StatusCode InitArea()
StatusCode AnalyseEffAndNoise()
StatusCode InitNtuple()
StatusCode Clear2DEffHisto()
StatusCode FillDigi(int part, int segment, int layer, int strip)