CGEM BOSS 6.6.5.h
BESIII Offline Software System
Loading...
Searching...
No Matches
TofCalibManager Class Reference

#include <TofCalibManager.h>

Public Member Functions

 ~TofCalibManager ()
 
TofDataSetdataSet ()
 
void addCalib (TofCalib *cal_item1, bool isbarrel)
 
void addCalib (TofCalibFit *cal_item2, bool isbarrel)
 
void doCalibration ()
 
void fillTxt (string &dir)
 
void fillRoot (string &dir)
 

Static Public Member Functions

static TofCalibManagergetManager ()
 

Protected Member Functions

 TofCalibManager ()
 

Detailed Description

Definition at line 7 of file TofCalibManager.h.

Constructor & Destructor Documentation

◆ TofCalibManager()

TofCalibManager::TofCalibManager ( )
protected

Definition at line 14 of file TofCalibManager.cxx.

14 {
15 m_dataset = new TofDataSet;
16 return;
17}

Referenced by getManager().

◆ ~TofCalibManager()

TofCalibManager::~TofCalibManager ( )

Definition at line 20 of file TofCalibManager.cxx.

20 {
21 if( !calib_barrel_item.empty() ) {
22 std::vector<TofCalib*>::iterator iter = calib_barrel_item.begin();
23 for( ; iter != calib_barrel_item.end(); iter++ ) {
24 if( (*iter) ) delete (*iter);
25 }
26 calib_barrel_item.clear();
27 }
28 if( !calib_endcap_item.empty() ) {
29 std::vector<TofCalib*>::iterator iter = calib_endcap_item.begin();
30 for( ; iter != calib_endcap_item.end(); iter++ ) {
31 if( (*iter) ) delete (*iter);
32 }
33 calib_endcap_item.clear();
34 }
35 if( !calibration_barrel_item.empty() ) {
36 std::vector<TofCalibFit*>::iterator iter = calibration_barrel_item.begin();
37 for( ; iter != calibration_barrel_item.end(); iter++ ) {
38 if( (*iter) ) delete (*iter);
39 }
40 calibration_barrel_item.clear();
41 }
42 if( !calibration_barrel_item2.empty() ) {
43 std::vector<TofCalibFit*>::iterator iter = calibration_barrel_item2.begin();
44 for( ; iter != calibration_barrel_item2.end(); iter++ ) {
45 if( (*iter) ) delete (*iter);
46 }
47 calibration_barrel_item2.clear();
48 }
49 if( !calibration_endcap_item.empty() ) {
50 std::vector<TofCalibFit*>::iterator iter = calibration_endcap_item.begin();
51 for( ; iter != calibration_endcap_item.end(); iter++ ) {
52 if( (*iter) ) delete (*iter);
53 }
54 calibration_endcap_item.clear();
55 }
56
57 delete m_dataset;
58 return;
59}
EvtStreamInputIterator< typename Generator::result_type > iter(Generator gen, int N=0)

Member Function Documentation

◆ addCalib() [1/2]

void TofCalibManager::addCalib ( TofCalib * cal_item1,
bool isbarrel )

Definition at line 62 of file TofCalibManager.cxx.

62 {
63 if( isbarrel ) {
64 calib_barrel_item.push_back(cal_item1);
65 }
66 else {
67 calib_endcap_item.push_back(cal_item1);
68 }
69 return;
70}

Referenced by tofcalgsec::finalize().

◆ addCalib() [2/2]

void TofCalibManager::addCalib ( TofCalibFit * cal_item2,
bool isbarrel )

Definition at line 73 of file TofCalibManager.cxx.

73 {
74 if( isbarrel ) {
75 if( cal_item2->name()=="calib_barrel_sigma" ) {
76 calibration_barrel_item2.push_back(cal_item2);
77 }
78 else {
79 calibration_barrel_item.push_back(cal_item2);
80 }
81 }
82 else {
83 calibration_endcap_item.push_back(cal_item2);
84 }
85 return;
86}
const string & name() const
Definition TofCalibFit.h:29

◆ dataSet()

TofDataSet * TofCalibManager::dataSet ( )
inline

Definition at line 16 of file TofCalibManager.h.

16{ return m_dataset; }

Referenced by tofcalgsec::execute(), and tofcalgsec::finalize().

◆ doCalibration()

void TofCalibManager::doCalibration ( )

Definition at line 89 of file TofCalibManager.cxx.

89 {
90
91 if( !calib_barrel_item.empty() || !calibration_barrel_item.empty() ) {
92 std::cout << "Begin barrel counters calibration..." << std::endl;
93 std::cout << setiosflags(ios::left) << setw(10) << "TOF ID" << setw(8) << "Entries" << setw(30) << "What Calibration" << std::endl;
94 HepVector tcorrelation;
95 for( unsigned int i=0; i<NBarrel; i++ ) {
96 RecordSet* barrelData = m_dataset->getBarrelData(i);
97 if( !calib_barrel_item.empty() ) {
98 std::vector<TofCalib*>::iterator iter1 = calib_barrel_item.begin();
99 for( ; iter1!=calib_barrel_item.end(); iter1++ ) {
100 (*iter1)->reset();
101 (*iter1)->calculate( barrelData, i );
102 }
103 }
104 if( !calibration_barrel_item.empty() ) {
105 std::vector<TofCalibFit*>::iterator iter2 = calibration_barrel_item.begin();
106 for( ; iter2!=calibration_barrel_item.end(); iter2++ ) {
107 (*iter2)->calculate( barrelData, i );
108 if( i==(NBarrel-1) ) {
109 if( (*iter2)->name()=="calib_barrel_common" ) {
110 tcorrelation = (*iter2)->tcorrelation();
111 }
112 }
113 }
114 }
115 }
116
117 for( unsigned int i=0; i<NBarrel; i++ ) {
118 RecordSet* barrelData = m_dataset->getBarrelData(i);
119 if( !calibration_barrel_item2.empty() ) {
120 std::vector<TofCalibFit*>::iterator iter2 = calibration_barrel_item2.begin();
121 for( ; iter2!=calibration_barrel_item2.end(); iter2++ ) {
122 if( i==0 ) {
123 if( (*iter2)->name()=="calib_barrel_sigma" ) {
124 (*iter2)->setTCorrelation( tcorrelation );
125 }
126 }
127 (*iter2)->calculate( barrelData, i );
128 }
129 }
130 }
131 }
132
133 if( !calib_endcap_item.empty() || !calibration_endcap_item.empty() ) {
134 std::cout << "Begin endcap counters calibration..." << std::endl;
135 std::cout << setiosflags(ios::left) << setw(10)<<"TOF ID" << setw(8) << "Entries" << setw(30) << "What Calibration" << std::endl;
136 for( unsigned int i=0; i<NEndcap; i++ ) {
137 RecordSet* endcapData = m_dataset->getEndcapData(i);
138 if( !calib_endcap_item.empty() ) {
139 std::vector<TofCalib*>::iterator iter1 = calib_endcap_item.begin();
140 for( ; iter1!=calib_endcap_item.end(); iter1++ ) {
141 (*iter1)->reset();
142 (*iter1)->calculate( endcapData, i );
143 }
144 }
145 if( !calibration_endcap_item.empty() ) {
146 std::vector<TofCalibFit*>::iterator iter2 = calibration_endcap_item.begin();
147 for( ; iter2!=calibration_endcap_item.end(); iter2++ ) {
148 (*iter2)->calculate( endcapData, i );
149 }
150 }
151 }
152 }
153
154 return;
155}
std::vector< Record * > RecordSet
Definition TofDataSet.h:89
const unsigned int NBarrel
Definition TofDataSet.h:12
const unsigned int NEndcap
Definition TofDataSet.h:13
RecordSet * getEndcapData(unsigned int i) const
Definition TofDataSet.h:99
RecordSet * getBarrelData(unsigned int i) const
Definition TofDataSet.h:98

Referenced by tofcalgsec::finalize().

◆ fillRoot()

void TofCalibManager::fillRoot ( string & dir)

Definition at line 203 of file TofCalibManager.cxx.

203 {
204 int count = 1;
205 char filename1[256];
206 sprintf( filename1, "%s/barrel%i.root", dir.c_str(), count );
207 TFile f1(filename1,"RECREATE");
208 TTree* ntbarrel = new TTree( "btrk", "barrel data after calibration" );
209
210 int run;
211 int event;
212 int tofid;
213 double qleft;
214 double qright;
215 double tleft;
216 double tright;
217 double zrhit;
218 double texp;
219 double path;
220 double phi;
221 double theta;
222 double p;
223 double t0;
224 double q0;
225 int hitcase;
226
227 ntbarrel->Branch( "run", &run, "run/I" );
228 ntbarrel->Branch( "event", &event, "event/I" );
229 ntbarrel->Branch( "tofid", &tofid, "tofid/I" );
230 ntbarrel->Branch( "qleft", &qleft, "qleft/D" );
231 ntbarrel->Branch( "qright", &qright, "qright/D" );
232 ntbarrel->Branch( "tleft", &tleft, "tleft/D" );
233 ntbarrel->Branch( "tright", &tright, "tright/D" );
234 ntbarrel->Branch( "zrhit", &zrhit, "zrhit/D" );
235 ntbarrel->Branch( "texp", &texp, "texp/D" );
236 ntbarrel->Branch( "path", &path, "path/D" );
237 ntbarrel->Branch( "phi", &phi, "phi/D" );
238 ntbarrel->Branch( "theta", &theta, "theta/D" );
239 ntbarrel->Branch( "p", &p, "p/D" );
240 ntbarrel->Branch( "t0", &t0, "t0/D" );
241 ntbarrel->Branch( "q0", &q0, "q0/D" );
242 ntbarrel->Branch( "hitcase",&hitcase,"hitcase/I");
243
244 int counter = 0;
245 std::cout << "begin to write..." << filename1 << std::endl;
246 for( unsigned int i=0; i<NBarrel; i++ ) {
247 std::cout << "\r\b Writing record ... " << (int((++counter)*100./NBarrel)) << "%";
248 RecordSet* barrelData = m_dataset->getBarrelData(i);
249 std::vector<Record*>::iterator iter = barrelData->begin();
250 for( ; iter!=barrelData->end(); iter++ ) {
251 run = (*iter)->run();
252 event = (*iter)->event();
253 tofid = (*iter)->tofid();
254 qleft = (*iter)->qleft();
255 qright = (*iter)->qright();
256 tleft = (*iter)->tleft();
257 tright = (*iter)->tright();
258 zrhit = (*iter)->zrhit();
259 texp = (*iter)->texp();
260 path = (*iter)->path();
261 phi = (*iter)->phi();
262 theta = (*iter)->theta();
263 p = (*iter)->p();
264 t0 = (*iter)->t0();
265 q0 = (*iter)->q0();
266 hitcase = (*iter)->hitcase();
267 ntbarrel->Fill();
268 }
269 }
270 std::cout << std::endl;
271 ntbarrel->Write();
272 delete ntbarrel;
273 f1.Close();
274
275 char filename2[256];
276 sprintf( filename2, "%s/endcap%i.root", dir.c_str(), count );
277 TFile f2(filename2,"RECREATE");
278 TTree* ntendcap = new TTree( "etrk", "endcap data after calibration" );
279
280 ntendcap->Branch( "run", &run, "run/I" );
281 ntendcap->Branch( "event", &event, "event/I" );
282 ntendcap->Branch( "tofid", &tofid, "tofid/I" );
283 ntendcap->Branch( "qleft", &qleft, "qleft/D" );
284 ntendcap->Branch( "qright", &qright, "qright/D" );
285 ntendcap->Branch( "tleft", &tleft, "tleft/D" );
286 ntendcap->Branch( "tright", &tright, "tright/D" );
287 ntendcap->Branch( "zrhit", &zrhit, "zrhit/D" );
288 ntendcap->Branch( "texp", &texp, "texp/D" );
289 ntendcap->Branch( "path", &path, "path/D" );
290 ntendcap->Branch( "phi", &phi, "phi/D" );
291 ntendcap->Branch( "theta", &theta, "theta/D" );
292 ntendcap->Branch( "p", &p, "p/D" );
293 ntendcap->Branch( "t0", &t0, "t0/D" );
294 ntendcap->Branch( "q0", &q0, "q0/D" );
295 ntendcap->Branch( "hitcase",&hitcase,"hitcase/I");
296
297 counter = 0;
298 std::cout << "begin to write..." << filename2 << std::endl;
299 for( unsigned int i=0; i<NEndcap; i++ ) {
300 std::cout << "\r\b Writing record ... " << (int((++counter)*100./NEndcap)) << "%";
301 RecordSet* endcapData = m_dataset->getEndcapData(i);
302 std::vector<Record*>::iterator iter = endcapData->begin();
303 for( ; iter!=endcapData->end(); iter++ ) {
304 run = (*iter)->run();
305 event = (*iter)->event();
306 tofid = (*iter)->tofid();
307 qleft = (*iter)->qleft();
308 qright = (*iter)->qright();
309 tleft = (*iter)->tleft();
310 tright = (*iter)->tright();
311 zrhit = (*iter)->zrhit();
312 texp = (*iter)->texp();
313 path = (*iter)->path();
314 phi = (*iter)->phi();
315 theta = (*iter)->theta();
316 p = (*iter)->p();
317 t0 = (*iter)->t0();
318 q0 = (*iter)->q0();
319 hitcase = (*iter)->hitcase();
320 ntendcap->Fill();
321 }
322 }
323 std::cout << std::endl;
324 ntendcap->Write();
325 delete ntendcap;
326 f2.Close();
327
328
329 if( !calibration_barrel_item.empty() ) {
330 std::vector<TofCalibFit*>::iterator iter = calibration_barrel_item.begin();
331 for( ; iter != calibration_barrel_item.end(); iter++ ) {
332 string fname = dir + string("/") + (*iter)->name() + string(".root");
333 (*iter)->fillRoot( fname.c_str() );
334 }
335 }
336 if( !calibration_barrel_item2.empty() ) {
337 std::vector<TofCalibFit*>::iterator iter = calibration_barrel_item2.begin();
338 for( ; iter != calibration_barrel_item2.end(); iter++ ) {
339 string fname = dir + string("/") + (*iter)->name() + string(".root");
340 (*iter)->fillRoot( fname.c_str() );
341 }
342 }
343
344 if( !calibration_endcap_item.empty() ) {
345 std::vector<TofCalibFit*>::iterator iter = calibration_endcap_item.begin();
346 for( ; iter != calibration_endcap_item.end(); iter++ ) {
347 string fname = dir + string("/") + (*iter)->name() + string(".root");
348 (*iter)->fillRoot( fname.c_str() );
349 }
350 }
351
352 return;
353}
TFile * f1
uint32_t count(const node_t &list)
Definition node.cxx:42

Referenced by tofcalgsec::finalize().

◆ fillTxt()

void TofCalibManager::fillTxt ( string & dir)

Definition at line 158 of file TofCalibManager.cxx.

158 {
159
160 if( !calib_barrel_item.empty() ) {
161 std::vector<TofCalib*>::iterator iter = calib_barrel_item.begin();
162 for( ; iter != calib_barrel_item.end(); iter++ ) {
163 string fname = dir + string("/") + (*iter)->name() + string(".txt");
164 (*iter)->fillTxt( fname.c_str() );
165 }
166 }
167
168 if( !calib_endcap_item.empty() ) {
169 std::vector<TofCalib*>::iterator iter = calib_endcap_item.begin();
170 for( ; iter != calib_endcap_item.end(); iter++ ) {
171 string fname = dir + string("/") + (*iter)->name() + string(".txt");
172 (*iter)->fillTxt( fname.c_str() );
173 }
174 }
175
176 if( !calibration_barrel_item.empty() ) {
177 std::vector<TofCalibFit*>::iterator iter = calibration_barrel_item.begin();
178 for( ; iter != calibration_barrel_item.end(); iter++ ) {
179 string fname = dir + string("/") + (*iter)->name() + string(".txt");
180 (*iter)->fillTxt( fname.c_str() );
181 }
182 }
183 if( !calibration_barrel_item2.empty() ) {
184 std::vector<TofCalibFit*>::iterator iter = calibration_barrel_item2.begin();
185 for( ; iter != calibration_barrel_item2.end(); iter++ ) {
186 string fname = dir + string("/") + (*iter)->name() + string(".txt");
187 (*iter)->fillTxt( fname.c_str() );
188 }
189 }
190
191 if( !calibration_endcap_item.empty() ) {
192 std::vector<TofCalibFit*>::iterator iter = calibration_endcap_item.begin();
193 for( ; iter != calibration_endcap_item.end(); iter++ ) {
194 string fname = dir + string("/") + (*iter)->name() + string(".txt");
195 (*iter)->fillTxt( fname.c_str() );
196 }
197 }
198
199 return;
200}

Referenced by tofcalgsec::finalize().

◆ getManager()

TofCalibManager * TofCalibManager::getManager ( )
static

Definition at line 6 of file TofCalibManager.cxx.

6 {
7 if( m_manager == 0 ) {
8 m_manager = new TofCalibManager;
9 }
10 return m_manager;
11}

Referenced by tofcalgsec::execute(), and tofcalgsec::finalize().


The documentation for this class was generated from the following files: