46 { numGraphs = numGraphs + ( *iter ); }
49 cout <<
"tofcalgsec::calib_barrel_sigma: the number of Graphs is NOT reasonable!!!"
54 m_name = string(
"calib_barrel_sigma" );
57 const double tbegin = -1.5;
58 const double tend = 1.5;
62 for (
unsigned int i = 0; i <
NBarrel; i++ )
65 for (
unsigned int j = 0; j <
nKind; j++ )
69 if ( j == 0 ) {
sprintf( hname,
"tleft-id%i-z%i", i, k ); }
70 else if ( j == 1 ) {
sprintf( hname,
"tright-id%i-z%i", i, k ); }
71 else if ( j == 2 ) {
sprintf( hname,
"t0-id%i-z%i", i, k ); }
72 else if ( j == 3 ) {
sprintf( hname,
"tplus-id%i-z%i", i, k ); }
73 else if ( j == 4 ) {
sprintf( hname,
"tminus-id%i-z%i", i, k ); }
74 m_histograms.push_back(
new TH1F( hname, hname, tbin, tbegin, tend ) );
76 m_fitresult.push_back( HepVector(
nParSigma, 0 ) );
86 zpos[i] =
zbegin + ( i + 0.5 ) * zstep;
87 zposerr[i] = 0.5 * zstep;
99 std::cout << setiosflags( ios::left ) << setw( 10 ) << icounter << setw( 8 ) <<
data->size()
100 << setw( 30 ) <<
name() << std::endl;
102 if (
data->size() > 0 )
104 std::vector<Record*>::iterator
iter =
data->begin();
105 for ( ;
iter !=
data->end();
iter++ ) { fillRecord( ( *
iter ), icounter ); }
107 fitHistogram( icounter );
108 fillGraph( icounter );
109 fitGraph( icounter );
111 if (
data->size() > 0 )
113 std::vector<Record*>::iterator
iter =
data->begin();
116 updateData( ( *
iter ), icounter );
117 fillRecordT0( ( *
iter ), icounter );
120 fitHistogramT0( icounter );
121 fillGraphT0( icounter );
122 fitGraphT0( icounter );
127void calib_barrel_sigma::fillRecord(
const Record* r,
unsigned int icounter ) {
129 double zhit = r->
zrhit();
130 if ( zhit < zbegin || zhit >
zend )
return;
131 int zbin =
static_cast<int>( ( zhit -
zbegin ) / zstep );
132 if ( zbin < 0 ) { zbin = 0; }
135 cout <<
"tofcalgsec::calib_barrel_sigma:fillRecord: zhit is out of range, zhit=" << zhit
136 <<
" zbin=" << zbin << endl;
142 ( *(
iter + number ) )->Fill( r->
tleft() );
150void calib_barrel_sigma::fitHistogram(
unsigned int icounter ) {
151 TF1* g =
new TF1(
"g",
"gaus" );
152 g->SetLineColor( 2 );
153 g->SetLineWidth( 1 );
155 std::vector<TH1F*>::iterator iter1 =
157 std::vector<HepVector>::iterator iter2 =
159 for (
unsigned int i = 0; i <
nKind; i++ )
165 ( *iter1 )->Fit( g,
"Q" );
166 ( *iter2 )[0] = g->GetParameter( 1 );
167 ( *iter2 )[1] = g->GetParError( 1 );
168 ( *iter2 )[2] = g->GetParameter( 2 );
169 ( *iter2 )[3] = g->GetParError( 2 );
179void calib_barrel_sigma::fillGraph(
unsigned int icounter ) {
181 char gname1[256], gname2[256];
189 std::vector<double> toffset, toffseterr;
190 std::vector<double> tsigma, tsigmaerr;
196 unsigned int number = 0;
197 std::vector<HepVector>::iterator
iter =
199 for (
unsigned int j = 0; j <
nKind; j++ )
201 if ( j == 0 ) {
sprintf( gname1,
"tleft-offset-tofid-%i", icounter ); }
202 else if ( j == 1 ) {
sprintf( gname1,
"tright-offset-tofid-%i", icounter ); }
203 else if ( j == 2 ) {
sprintf( gname1,
"t0-offset-tofid-%i", icounter ); }
204 else if ( j == 3 ) {
sprintf( gname1,
"tplus-offset-tofid-%i", icounter ); }
205 else if ( j == 4 ) {
sprintf( gname1,
"tminus-offset-tofid-%i", icounter ); }
208 std::vector<TH1F*>::iterator itgraph =
m_graphs.end() - 1;
213 toffset[k] = ( *(
iter + number ) )[0];
214 toffseterr[k] = ( *(
iter + number ) )[1];
215 ( *itgraph )->SetBinContent( k + 1, toffset[k] );
216 ( *itgraph )->SetBinError( k + 1, toffseterr[k] );
218 ( *itgraph )->SetMarkerSize( 1.5 );
219 if ( j == 0 || j == 3 )
221 ( *itgraph )->SetMarkerStyle( 20 );
222 ( *itgraph )->SetMarkerColor( 2 );
223 ( *itgraph )->SetMaximum( 0.15 );
224 ( *itgraph )->SetMinimum( -0.15 );
226 else if ( j == 1 || j == 4 )
228 ( *itgraph )->SetMarkerStyle( 21 );
229 ( *itgraph )->SetMarkerColor( 4 );
233 ( *itgraph )->SetMarkerStyle( 4 );
234 ( *itgraph )->SetMarkerColor( 2 );
238 for (
unsigned int j = 0; j <
nKind; j++ )
240 if ( j == 0 ) {
sprintf( gname2,
"tleft-sigma-tofid-%i", icounter ); }
241 else if ( j == 1 ) {
sprintf( gname2,
"tright-sigma-tofid-%i", icounter ); }
242 else if ( j == 2 ) {
sprintf( gname2,
"t0-sigma-tofid-%i", icounter ); }
243 else if ( j == 3 ) {
sprintf( gname2,
"tplus-sigma-tofid-%i", icounter ); }
244 else if ( j == 4 ) {
sprintf( gname2,
"tminus-sigma-tofid-%i", icounter ); }
246 std::vector<TH1F*>::iterator itgraph =
m_graphs.end() - 1;
251 tsigma[k] = ( *(
iter + number ) )[2];
252 tsigmaerr[k] = ( *(
iter + number ) )[3];
253 ( *itgraph )->SetBinContent( k + 1, tsigma[k] );
254 ( *itgraph )->SetBinError( k + 1, tsigmaerr[k] );
256 ( *itgraph )->SetMarkerSize( 1.5 );
257 if ( j == 0 || j == 3 )
259 ( *itgraph )->SetMarkerStyle( 20 );
260 ( *itgraph )->SetMarkerColor( 2 );
261 ( *itgraph )->SetMaximum( 0.3 );
262 ( *itgraph )->SetMinimum( 0.0 );
264 else if ( j == 1 || j == 4 )
266 ( *itgraph )->SetMarkerStyle( 21 );
267 ( *itgraph )->SetMarkerColor( 4 );
271 ( *itgraph )->SetMarkerStyle( 4 );
272 ( *itgraph )->SetMarkerColor( 2 );
276 sprintf( gname2,
"sigma-tofid-%i", icounter );
278 std::vector<TH1F*>::iterator itgraph =
m_graphs.end() - 1;
283 double sigMinus = ( *(
iter + number ) )[2];
285 double sigErrMinus = ( *(
iter + number ) )[3];
286 tsigma[k] = sqrt( sigPlus * sigPlus - sigMinus * sigMinus );
287 tsigmaerr[k] = sqrt( sigErrPlus * sigErrPlus + sigErrMinus * sigErrMinus );
288 ( *itgraph )->SetBinContent( k + 1, tsigma[k] );
289 ( *itgraph )->SetBinError( k + 1, tsigmaerr[k] );
291 ( *itgraph )->SetMarkerSize( 1.5 );
292 ( *itgraph )->SetMarkerStyle( 4 );
293 ( *itgraph )->SetMarkerColor( 2 );
298void calib_barrel_sigma::fitGraph(
unsigned int icounter ) {
300 TF1* fsingle =
new TF1(
"fsingle",
"pol4" );
301 fsingle->SetLineColor( 1 );
302 fsingle->SetLineWidth( 1 );
305 std::vector<TH1F*>::iterator itgraph =
308 fsingle->SetParameter( 0, 0.14 );
309 fsingle->SetParameter( 1, -4.0e-4 );
310 ( *itgraph )->Fit(
"fsingle",
"QR",
"",
zbegin,
zend );
312 for (
unsigned int i = 0; i < 5; i++ ) {
X[i] = fsingle->GetParameter( i ); }
314 fsingle->SetParameter( 0, 0.14 );
315 fsingle->SetParameter( 1, 4.0e-4 );
316 ( *( itgraph + 1 ) )->
Fit(
"fsingle",
"QR",
"",
zbegin,
zend );
317 for (
unsigned int i = 0; i < 5; i++ ) {
X[i + 5] = fsingle->GetParameter( i ); }
319 std::vector<HepVector>::iterator
iter =
m_result.begin() + icounter;
325void calib_barrel_sigma::updateData(
Record* r,
unsigned int icounter ) {
326 double zhit = r->
zrhit();
327 double t1 = r->
tleft();
330 double par1[5], par2[5];
331 std::vector<HepVector>::iterator
iter =
m_result.begin() + icounter;
332 for (
unsigned int i = 0; i < 5; i++ )
334 par1[i] = ( *iter )[i];
335 par2[i] = ( *iter )[i + 5];
338 double tsigma1 = par1[0] + par1[1] * zhit + par1[2] * pow( zhit, 2 ) +
339 par1[3] * pow( zhit, 3 ) + par1[4] * pow( zhit, 4 );
340 double tsigma2 = par2[0] + par2[1] * zhit + par2[2] * pow( zhit, 2 ) +
341 par2[3] * pow( zhit, 3 ) + par2[4] * pow( zhit, 4 );
344 double weight1 = ( tsigma2 * tsigma2 - tc * tc ) /
345 ( tsigma1 * tsigma1 + tsigma2 * tsigma2 - 2.0 * tc * tc );
346 double weight2 = ( tsigma1 * tsigma1 - tc * tc ) /
347 ( tsigma1 * tsigma1 + tsigma2 * tsigma2 - 2.0 * tc * tc );
348 double t0 = weight1 * t1 + weight2 * t2;
355void calib_barrel_sigma::fillRecordT0(
const Record* r,
unsigned int icounter ) {
356 double zhit = r->
zrhit();
357 if ( zhit < zbegin || zhit >
zend )
return;
358 int zbin =
static_cast<int>( ( zhit -
zbegin ) / zstep );
359 if ( zbin < 0 ) { zbin = 0; }
362 cout <<
"tofcalgsec::calib_barrel_sigma:fillRecordT0: zhit is out of range, zhit=" << zhit
363 <<
" zbin=" << zbin << endl;
369 ( *(
iter + number ) )->Fill( r->
t0() );
374void calib_barrel_sigma::fitHistogramT0(
unsigned int icounter ) {
375 TF1* g =
new TF1(
"g",
"gaus" );
376 g->SetLineColor( 2 );
377 g->SetLineWidth( 1 );
379 std::vector<TH1F*>::iterator iter1 =
381 std::vector<HepVector>::iterator iter2 =
383 for (
unsigned int j = 0; j <
nBinPerCounter; j++, iter1++, iter2++ )
385 ( *iter1 )->Fit( g,
"Q" );
386 ( *iter2 )[0] = g->GetParameter( 1 );
387 ( *iter2 )[1] = g->GetParError( 1 );
388 ( *iter2 )[2] = g->GetParameter( 2 );
389 ( *iter2 )[3] = g->GetParError( 2 );
395void calib_barrel_sigma::fillGraphT0(
unsigned int icounter ) {
396 char gname1[256], gname2[256];
404 std::vector<double> toffset, toffseterr;
405 std::vector<double> tsigma, tsigmaerr;
411 std::vector<HepVector>::iterator
iter =
415 toffset[k] = ( *(
iter + k ) )[0];
416 toffseterr[k] = ( *(
iter + k ) )[1];
417 tsigma[k] = ( *(
iter + k ) )[2];
418 tsigmaerr[k] = ( *(
iter + k ) )[3];
421 sprintf( gname1,
"offset-tofid-%i", icounter );
427 ( *itgraph )->SetBinContent( i + 1, toffset[i] );
428 ( *itgraph )->SetBinError( i + 1, toffseterr[i] );
431 sprintf( gname2,
"sigma-tofid-%i", icounter );
437 ( *itgraph )->SetBinContent( i + 1, tsigma[i] );
438 ( *itgraph )->SetBinError( i + 1, tsigmaerr[i] );
444void calib_barrel_sigma::fitGraphT0(
unsigned int icounter ) {
447 TF1* fdouble =
new TF1(
"fdouble",
"pol4",
zbegin,
zend );
448 fdouble->SetLineColor( 1 );
449 fdouble->SetLineWidth( 1 );
453 ( *itnumber ) + ( *( itnumber + 1 ) ) + 2;
454 ( *itgraph )->Fit(
"fdouble",
"Q",
"",
zbegin,
zend );
456 std::vector<HepVector>::iterator
iter =
m_result.begin() + icounter;
457 ( *iter )[10] = fdouble->GetParameter( 0 );
458 ( *iter )[11] = fdouble->GetParameter( 1 );
459 ( *iter )[12] = fdouble->GetParameter( 2 );
460 ( *iter )[13] = fdouble->GetParameter( 3 );
461 ( *iter )[14] = fdouble->GetParameter( 4 );
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)
std::vector< Record * > RecordSet
const unsigned int NBarrel
const int nGraphTotalSigma
std::vector< HepVector > m_result
const std::string & name() const
std::vector< TH1F * > m_histograms
unsigned int nBinPerCounter
std::vector< unsigned int > nGraphPerCanvasPerCounter
unsigned int nCanvasPerCounter
unsigned int nHistPerCounter
std::vector< TH1F * > m_graphs
TofCalibFit(bool isbarrel, const int npar)
std::vector< string > CanvasPerCounterName
calib_barrel_sigma(const unsigned int nzbin)
void calculate(RecordSet *&data, unsigned int icounter)