BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
IniCalib Class Reference

#include <IniCalib.h>

Inheritance diagram for IniCalib:

Public Member Functions

 IniCalib ()
 ~IniCalib ()
void init (TObjArray *hlist, MdcCosGeom *pGeom)
void mergeHist (TFile *fhist)
void calib (MdcCalibConst *calconst, TObjArray *newXtList, TObjArray *r2tList)
Public Member Functions inherited from CalibBase
 CalibBase ()
virtual ~CalibBase ()

Detailed Description

Definition at line 11 of file IniCalib.h.

Constructor & Destructor Documentation

◆ IniCalib()

IniCalib::IniCalib ( )

Definition at line 8 of file IniCalib.cpp.

8{ cout << "Calibration type: IniCalib" << endl; }

◆ ~IniCalib()

IniCalib::~IniCalib ( )

Definition at line 10 of file IniCalib.cpp.

10{}

Member Function Documentation

◆ calib()

void IniCalib::calib ( MdcCalibConst * calconst,
TObjArray * newXtList,
TObjArray * r2tList )
virtual

Implements CalibBase.

Definition at line 167 of file IniCalib.cpp.

167 {
168 int lay;
169 int wir;
170 double t0Fit[NLAYER];
171 double t0Cal[NLAYER];
172 double tmax[NLAYER];
173 double initT0 = gInitT0;
174
175 int fitTminFg[NLAYER];
176 int fitTmaxFg[NLAYER];
177 double chisq;
178 double ndf;
179 double chindfTmin[NLAYER];
180 double chindfTmax[NLAYER];
181 char funname[200];
182
183 // fit Tmin
184 TF1* ftmin[NLAYER];
185 for ( lay = 0; lay < NLAYER; lay++ )
186 {
187 fitTminFg[lay] = 0;
188 chindfTmin[lay] = -1;
189 sprintf( funname, "ftmin%02d", lay );
190 ftmin[lay] = new TF1( funname, funTmin, 0, 150, 6 );
191
192 if ( 1 == gFgCalib[lay] )
193 {
194 Stat_t nEntryTot = 0;
195 for ( int ibin = 1; ibin <= 25; ibin++ )
196 {
197 Stat_t entry = m_htraw[lay]->GetBinContent( ibin );
198 nEntryTot += entry;
199 }
200 double c0Ini = (double)nEntryTot / 25.0;
201 double c1Ini = ( m_htraw[lay]->GetMaximum() ) - c0Ini;
202
203 ftmin[lay]->SetParameter( 0, c0Ini );
204 ftmin[lay]->SetParameter( 1, c1Ini );
205 ftmin[lay]->SetParameter( 2, 0 );
206 ftmin[lay]->SetParameter( 4, initT0 );
207 ftmin[lay]->SetParameter( 5, 1 );
208
209 m_htraw[lay]->Fit( funname, "Q", "", gTminFitRange[lay][0], gTminFitRange[lay][1] );
210 gStyle->SetOptFit( 11 );
211 chisq = ftmin[lay]->GetChisquare();
212 ndf = ftmin[lay]->GetNDF();
213 chindfTmin[lay] = chisq / ndf;
214 if ( chindfTmin[lay] < gTminFitChindf )
215 {
216 fitTminFg[lay] = 1;
217 t0Fit[lay] = ftmin[lay]->GetParameter( 4 );
218 t0Fit[lay] += gT0Shift;
219 t0Cal[lay] = t0Fit[lay] - gTimeShift;
220 }
221 }
222
223 if ( 0 == fitTminFg[lay] )
224 {
225 wir = m_pGeom->getWire( lay, 0 )->getWireId();
226 t0Cal[lay] = calconst->getT0( wir );
227 t0Fit[lay] = t0Cal[lay] + gTimeShift;
228 }
229 }
230
231 // fit Tmax
232 TF1* ftmax[NLAYER];
233 for ( lay = 0; lay < NLAYER; lay++ )
234 {
235 fitTmaxFg[lay] = 0;
236 chindfTmax[lay] = -1;
237 sprintf( funname, "ftmax%02d", lay );
238 ftmax[lay] = new TF1( funname, funTmax, 250, 500, 4 );
239
240 if ( 1 == gFgCalib[lay] )
241 {
242 ftmax[lay]->SetParameter( 2, gInitTm[lay] );
243 ftmax[lay]->SetParameter( 3, 10 );
244
245 m_htraw[lay]->Fit( funname, "Q+", "", gTmaxFitRange[lay][0], gTmaxFitRange[lay][1] );
246 gStyle->SetOptFit( 11 );
247 chisq = ftmax[lay]->GetChisquare();
248 ndf = ftmax[lay]->GetNDF();
249 chindfTmax[lay] = chisq / ndf;
250 if ( chindfTmax[lay] < gTmaxFitChindf )
251 {
252 fitTmaxFg[lay] = 1;
253 tmax[lay] = ftmax[lay]->GetParameter( 2 );
254 }
255 }
256
257 if ( 0 == fitTmaxFg[lay] )
258 { tmax[lay] = ( calconst->getXtpar( lay, 0, 0, 6 ) ) + t0Fit[lay]; }
259 }
260
261 // output for check
262 ofstream ft0( "iniT0.dat" );
263 for ( lay = 0; lay < NLAYER; lay++ )
264 {
265 ft0 << setw( 5 ) << lay << setw( 3 ) << fitTminFg[lay] << setw( 12 ) << t0Cal[lay]
266 << setw( 12 ) << t0Fit[lay] << setw( 12 ) << chindfTmin[lay] << setw( 5 )
267 << fitTmaxFg[lay] << setw( 12 ) << tmax[lay] << setw( 12 ) << tmax[lay] - t0Fit[lay]
268 << setw( 12 ) << chindfTmax[lay] << endl;
269 }
270 ft0.close();
271 cout << "iniT0.dat was written." << endl;
272
273 // set T0
274 int i;
275 int nwire = m_pGeom->getWireSize();
276 for ( i = 0; i < nwire; i++ )
277 {
278 lay = m_pGeom->getWire( i )->getLayerId();
279 if ( 1 == gFgCalib[lay] )
280 {
281 calconst->resetT0( i, t0Cal[lay] );
282 calconst->resetDelT0( i, 0.0 );
283 }
284 }
285
286 if ( 0 == gFgIniCalConst )
287 {
288 // set X-T
289 int lr;
290 int iEntr;
291 int ord;
292 double xtpar;
293 double xtini[8] = { 0, 0.03, 0, 0, 0, 0, 999.9, 0 };
294 for ( lay = 0; lay < NLAYER; lay++ )
295 {
296 if ( 1 != gFgCalib[lay] ) continue;
297
298 for ( iEntr = 0; iEntr < NENTRXT; iEntr++ )
299 {
300 for ( lr = 0; lr < NLR; lr++ )
301 {
302 for ( ord = 0; ord < NXTPAR; ord++ )
303 {
304 if ( 6 == ord ) { xtpar = tmax[lay] - t0Fit[lay]; }
305 else { xtpar = xtini[ord]; }
306 calconst->resetXtpar( lay, iEntr, lr, ord, xtpar );
307 }
308 }
309 }
310 }
311
312 // set Q-T
313 for ( lay = 0; lay < NLAYER; lay++ )
314 {
315 calconst->resetQtpar0( lay, 0.0 );
316 calconst->resetQtpar1( lay, 0.0 );
317 }
318
319 // set S-D
320 int bin;
321 double sdpar = 0.18; // mm
322 for ( lay = 0; lay < NLAYER; lay++ )
323 {
324 for ( iEntr = 0; iEntr < NENTRSD; iEntr++ )
325 {
326 for ( lr = 0; lr < 2; lr++ )
327 {
328 for ( bin = 0; bin < NSDBIN; bin++ )
329 { calconst->resetSdpar( lay, iEntr, lr, bin, sdpar ); }
330 }
331 }
332 }
333 }
334 else if ( 2 == gFgIniCalConst )
335 {
336 int lr;
337 int iEntr;
338 double xtpar;
339 for ( lay = 0; lay < NLAYER; lay++ )
340 {
341 for ( iEntr = 0; iEntr < NENTRXT; iEntr++ )
342 {
343 for ( lr = 0; lr < NLR; lr++ )
344 {
345 xtpar = tmax[lay] - t0Fit[lay];
346 calconst->resetXtpar( lay, iEntr, lr, 6, xtpar );
347 }
348 }
349 }
350 }
351
352 renameHist();
353 for ( lay = 0; lay < NLAYER; lay++ )
354 {
355 delete ftmin[lay];
356 delete ftmax[lay];
357 }
358}
sprintf(cut, "kal_costheta0_em>-0.93&&kal_costheta0_em<0.93&&kal_pxy0_em>=0.05+%d*0.1&&kal_" "pxy0_em<0.15+%d*0.1&&NGch>=2", j, j)
*******INTEGER m_nBinMax INTEGER m_NdiMax !No of bins in histogram for cell exploration division $ !Last vertex $ !Last active cell $ !Last cell in buffer $ !No of sampling when dividing cell $ !No of function total $ !Flag for random ceel for $ !Flag for type of for WtMax $ !Flag which decides whether vertices are included in the sampling $ entire domain is hyp !Maximum effective eevents per bin
Definition FoamA.h:85
double gInitTm[NLAYER]
double gTminFitRange[NLAYER][2]
double gTmaxFitRange[NLAYER][2]
void resetQtpar0(int lay, double val)
void resetSdpar(int lay, int entr, int lr, int bin, double val)
void resetXtpar(int lay, int entr, int lr, int order, double val)
void resetQtpar1(int lay, double val)
double getT0(int wireid) const
void resetDelT0(int wireid, double val)
double getXtpar(int lay, int entr, int lr, int order)
void resetT0(int wireid, double val)

◆ init()

void IniCalib::init ( TObjArray * hlist,
MdcCosGeom * pGeom )
virtual

Implements CalibBase.

Definition at line 12 of file IniCalib.cpp.

12 {
13 m_pGeom = pGeom;
14 char hname[200];
15 m_fdcom = new TFolder( "mCommon", "mCommon" );
16 hlist->Add( m_fdcom );
17
18 m_fdTmap = new TFolder( "mThitmap", "mThitmap" );
19 hlist->Add( m_fdTmap );
20
21 m_fdTraw = new TFolder( "mTraw", "mTraw" );
22 hlist->Add( m_fdTraw );
23
24 m_fdTrawCel = new TFolder( "mTrawCell", "mTrawCell" );
25 hlist->Add( m_fdTrawCel );
26
27 m_fdQmap = new TFolder( "mQhitmap", "mQhitmap" );
28 hlist->Add( m_fdQmap );
29
30 m_fdQraw = new TFolder( "mQraw", "mQraw" );
31 hlist->Add( m_fdQraw );
32
33 m_fdQrawCel = new TFolder( "mQrawCell", "mQrawCell" );
34 hlist->Add( m_fdQrawCel );
35
36 m_hLayerHitmapT = new TH1F( "mT_Hitmap_Layer", "", 43, -0.5, 42.5 );
37 m_fdcom->Add( m_hLayerHitmapT );
38
39 m_hWireHitMapT = new TH1F( "mT_Hitmap_Wire", "", 6796, -0.5, 6795.5 );
40 m_fdcom->Add( m_hWireHitMapT );
41
42 m_hLayerHitmapQ = new TH1F( "mQ_Hitmap_Layer", "", 43, -0.5, 42.5 );
43 m_fdcom->Add( m_hLayerHitmapQ );
44
45 m_hWireHitMapQ = new TH1F( "mQ_Hitmap_Wire", "", 6796, -0.5, 6795.5 );
46 m_fdcom->Add( m_hWireHitMapQ );
47
48 m_hTesAll = new TH1F( "mTesAll", "", 750, 0, 1500 );
49 m_fdcom->Add( m_hTesAll );
50
51 m_hTesCal = new TH1F( "mTesCal", "", 750, 0, 1500 );
52 m_fdcom->Add( m_hTesCal );
53
54 m_hTesFlag = new TH1F( "mTes_Flag", "", 300, -0.5, 299.5 );
55 m_fdcom->Add( m_hTesFlag );
56
57 for ( int lay = 0; lay < NLAYER; lay++ )
58 {
59 int ncel = pGeom->getLayer( lay )->getNcell();
60
61 sprintf( hname, "mT_hitmap_Lay%02d", lay );
62 m_hlaymapT[lay] = new TH1F( hname, "", ncel, -0.5, (float)ncel - 0.5 );
63 m_fdTmap->Add( m_hlaymapT[lay] );
64
65 sprintf( hname, "mTDC_Lay%02d", lay );
66 m_htdc[lay] = new TH1F( hname, "", 800, 0, 20000 );
67 m_fdTraw->Add( m_htdc[lay] );
68
69 sprintf( hname, "mTraw_Lay%02d", lay );
70 m_htraw[lay] = new TH1F( hname, "", 500, 0, 1000 );
71 m_fdTraw->Add( m_htraw[lay] );
72
73 sprintf( hname, "mQ_hitmap_Lay%02d", lay );
74 m_hlaymapQ[lay] = new TH1F( hname, "", ncel, -0.5, (float)ncel - 0.5 );
75 m_fdQmap->Add( m_hlaymapQ[lay] );
76
77 sprintf( hname, "mQraw_Lay%02d", lay );
78 m_hqraw[lay] = new TH1F( hname, "", 2000, 0, 4000 );
79 m_fdQraw->Add( m_hqraw[lay] );
80 }
81
82 for ( int wir = 0; wir < NWIRE; wir++ )
83 {
84 int lay = m_pGeom->getWire( wir )->getLayerId();
85 int cel = m_pGeom->getWire( wir )->getCellId();
86
87 sprintf( hname, "mTraw_%02d_%03d_%04d", lay, cel, wir );
88 m_htrawCel[wir] = new TH1F( hname, "", 300, 0, 600 );
89 m_fdTrawCel->Add( m_htrawCel[wir] );
90
91 sprintf( hname, "mQraw_%02d_%03d_%04d", lay, cel, wir );
92 m_hqrawCel[wir] = new TH1F( hname, "", 2000, 0, 4000 );
93 m_fdQrawCel->Add( m_hqrawCel[wir] );
94 }
95}
const MdcCosLayer * getLayer(int ilay) const

◆ mergeHist()

void IniCalib::mergeHist ( TFile * fhist)
virtual

Implements CalibBase.

Definition at line 97 of file IniCalib.cpp.

97 {
98 TFolder* fdcom = (TFolder*)fhist->Get( "Common" );
99 TFolder* fdTmap = (TFolder*)fhist->Get( "Thitmap" );
100 TFolder* fdTraw = (TFolder*)fhist->Get( "Traw" );
101 TFolder* fdTrawCel = (TFolder*)fhist->Get( "TrawCell" );
102 TFolder* fdQmap = (TFolder*)fhist->Get( "Qhitmap" );
103 TFolder* fdQraw = (TFolder*)fhist->Get( "Qraw" );
104 TFolder* fdQrawCel = (TFolder*)fhist->Get( "QrawCell" );
105
106 char hname[200];
107 TH1F* hist;
108 hist = (TH1F*)fdcom->FindObjectAny( "T_Hitmap_Layer" );
109 m_hLayerHitmapT->Add( hist );
110
111 hist = (TH1F*)fdcom->FindObjectAny( "T_Hitmap_Wire" );
112 m_hWireHitMapT->Add( hist );
113
114 hist = (TH1F*)fdcom->FindObjectAny( "Q_Hitmap_Layer" );
115 m_hLayerHitmapQ->Add( hist );
116
117 hist = (TH1F*)fdcom->FindObjectAny( "Q_Hitmap_Wire" );
118 m_hWireHitMapQ->Add( hist );
119
120 hist = (TH1F*)fdcom->FindObjectAny( "TesAll" );
121 m_hTesAll->Add( hist );
122
123 hist = (TH1F*)fdcom->FindObjectAny( "TesCal" );
124 m_hTesCal->Add( hist );
125
126 hist = (TH1F*)fdcom->FindObjectAny( "Tes_Flag" );
127 m_hTesFlag->Add( hist );
128
129 for ( int lay = 0; lay < NLAYER; lay++ )
130 {
131 sprintf( hname, "T_hitmap_Lay%02d", lay );
132 hist = (TH1F*)fdTmap->FindObjectAny( hname );
133 m_hlaymapT[lay]->Add( hist );
134
135 sprintf( hname, "TDC_Lay%02d", lay );
136 hist = (TH1F*)fdTraw->FindObjectAny( hname );
137 m_htdc[lay]->Add( hist );
138
139 sprintf( hname, "Traw_Lay%02d", lay );
140 hist = (TH1F*)fdTraw->FindObjectAny( hname );
141 m_htraw[lay]->Add( hist );
142
143 sprintf( hname, "Q_hitmap_Lay%02d", lay );
144 hist = (TH1F*)fdQmap->FindObjectAny( hname );
145 m_hlaymapQ[lay]->Add( hist );
146
147 sprintf( hname, "Qraw_Lay%02d", lay );
148 hist = (TH1F*)fdQraw->FindObjectAny( hname );
149 m_hqraw[lay]->Add( hist );
150 }
151
152 for ( int wir = 0; wir < NWIRE; wir++ )
153 {
154 int lay = m_pGeom->getWire( wir )->getLayerId();
155 int cel = m_pGeom->getWire( wir )->getCellId();
156
157 sprintf( hname, "Traw_%02d_%03d_%04d", lay, cel, wir );
158 hist = (TH1F*)fdTrawCel->FindObjectAny( hname );
159 m_htrawCel[wir]->Add( hist );
160
161 sprintf( hname, "Qraw_%02d_%03d_%04d", lay, cel, wir );
162 hist = (TH1F*)fdQrawCel->FindObjectAny( hname );
163 m_hqrawCel[wir]->Add( hist );
164 }
165}

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