83 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
84 MsgStream log(
msgSvc,
"IniMdcCalib" );
85 log << MSG::INFO <<
"IniMdcCalib::initialize()" << endmsg;
88 m_mdcGeomSvc = mdcGeomSvc;
89 m_mdcFunSvc = mdcFunSvc;
90 m_mdcUtilitySvc = mdcUtilitySvc;
98 m_nWire = m_mdcGeomSvc->getWireSize();
99 m_nLayer = m_mdcGeomSvc->getLayerSize();
101 m_fdcom =
new TFolder(
"Common",
"Common" );
102 m_hlist->Add( m_fdcom );
104 m_fdTmap =
new TFolder(
"Thitmap",
"Thitmap" );
105 m_hlist->Add( m_fdTmap );
107 m_fdTraw =
new TFolder(
"Traw",
"Traw" );
108 m_hlist->Add( m_fdTraw );
110 m_fdTrawCel =
new TFolder(
"TrawCell",
"TrawCell" );
111 m_hlist->Add( m_fdTrawCel );
113 m_fdTrawTes =
new TFolder(
"TrawTes",
"TrawTes" );
114 m_hlist->Add( m_fdTrawTes );
116 m_fdQmap =
new TFolder(
"Qhitmap",
"Qhitmap" );
117 m_hlist->Add( m_fdQmap );
119 m_fdQraw =
new TFolder(
"Qraw",
"Qraw" );
120 m_hlist->Add( m_fdQraw );
122 m_fdQrawCel =
new TFolder(
"QrawCell",
"QrawCell" );
123 m_hlist->Add( m_fdQrawCel );
125 m_hLayerHitmapT =
new TH1F(
"T_Hitmap_Layer",
"", 43, -0.5, 42.5 );
126 m_fdcom->Add( m_hLayerHitmapT );
128 m_hWireHitMapT =
new TH1F(
"T_Hitmap_Wire",
"", 6796, -0.5, 6795.5 );
129 m_fdcom->Add( m_hWireHitMapT );
131 m_hLayerHitmapQ =
new TH1F(
"Q_Hitmap_Layer",
"", 43, -0.5, 42.5 );
132 m_fdcom->Add( m_hLayerHitmapQ );
134 m_hWireHitMapQ =
new TH1F(
"Q_Hitmap_Wire",
"", 6796, -0.5, 6795.5 );
135 m_fdcom->Add( m_hWireHitMapQ );
138 for ( iEs = 0; iEs < m_param.nEsFlag; iEs++ )
140 sprintf( hname,
"Tes_%d", m_param.esFlag[iEs] );
141 m_hTes[iEs] =
new TH1F( hname,
"", 2000, 0, 2000 );
142 m_fdcom->Add( m_hTes[iEs] );
145 m_hTesAllFlag =
new TH1F(
"TesAllFlag",
"", 300, -0.5, 299.5 );
146 m_fdcom->Add( m_hTesAllFlag );
148 m_hTesAll =
new TH1F(
"TesAll",
"", 2000, 0, 2000 );
149 m_fdcom->Add( m_hTesAll );
151 m_hTesCal =
new TH1F(
"TesCal",
"", 2000, 0, 2000 );
152 m_fdcom->Add( m_hTesCal );
154 m_hTesFlag =
new TH1F(
"Tes_Flag",
"", 300, -0.5, 299.5 );
155 m_fdcom->Add( m_hTesFlag );
159 double tdcmax = 20000;
163 double trawmax = 2000;
165 for ( lay = 0; lay < m_nLayer; lay++ )
167 ncel = m_mdcGeomSvc->Layer( lay )->NCell();
169 sprintf( hname,
"T_hitmap_Lay%02d", lay );
170 m_hlaymapT[lay] =
new TH1F( hname,
"", ncel, -0.5, (
float)ncel - 0.5 );
171 m_fdTmap->Add( m_hlaymapT[lay] );
173 sprintf( hname,
"TDC_Lay%02d", lay );
174 m_htdc[lay] =
new TH1F( hname,
"", tdcNbin, tdcmin, tdcmax );
175 m_fdTraw->Add( m_htdc[lay] );
177 sprintf( hname,
"Traw_Lay%02d", lay );
178 m_htraw[lay] =
new TH1F( hname,
"", trawNbin, trawmin, trawmax );
179 m_fdTraw->Add( m_htraw[lay] );
181 for ( iEs = 0; iEs < m_param.nEsFlag; iEs++ )
183 sprintf( hname,
"TDC_Lay%02d_Tes%d", lay, m_param.esFlag[iEs] );
184 m_htdcTes[lay][iEs] =
new TH1F( hname,
"", tdcNbin, tdcmin, tdcmax );
185 m_fdTrawTes->Add( m_htdcTes[lay][iEs] );
187 sprintf( hname,
"Traw_Lay%02d_Tes%d", lay, m_param.esFlag[iEs] );
188 m_htrawTes[lay][iEs] =
new TH1F( hname,
"", trawNbin, trawmin, trawmax );
189 m_fdTrawTes->Add( m_htrawTes[lay][iEs] );
192 sprintf( hname,
"Q_hitmap_Lay%02d", lay );
193 m_hlaymapQ[lay] =
new TH1F( hname,
"", ncel, -0.5, (
float)ncel - 0.5 );
194 m_fdQmap->Add( m_hlaymapQ[lay] );
196 sprintf( hname,
"Qraw_Lay%02d", lay );
197 m_hqraw[lay] =
new TH1F( hname,
"", 2000, 0, 4000 );
198 m_fdQraw->Add( m_hqraw[lay] );
203 lay = m_mdcGeomSvc->Wire( wir )->Layer();
204 cel = m_mdcGeomSvc->Wire( wir )->Cell();
206 sprintf( hname,
"Traw_%02d_%03d_%04d", lay, cel, wir );
207 m_htrawCel[wir] =
new TH1F( hname,
"", trawNbin, trawmin, trawmax );
208 m_fdTrawCel->Add( m_htrawCel[wir] );
210 sprintf( hname,
"Qraw_%02d_%03d_%04d", lay, cel, wir );
211 m_hqrawCel[wir] =
new TH1F( hname,
"", 2000, 0, 4000 );
212 m_fdQrawCel->Add( m_hqrawCel[wir] );
218 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
219 MsgStream log(
msgSvc,
"IniMdcCalib" );
220 log << MSG::DEBUG <<
"IniMdcCalib::fillHist()" << endmsg;
233 IDataProviderSvc* eventSvc = NULL;
234 Gaudi::svcLocator()->service(
"EventDataSvc", eventSvc );
236 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc,
"/Event/EventHeader" );
239 log << MSG::FATAL <<
"Could not find Event Header" << endmsg;
240 return ( StatusCode::FAILURE );
242 int iRun = eventHeader->runNumber();
243 int iEvt = eventHeader->eventNumber();
246 double tes = -9999.0;
248 SmartDataPtr<RecEsTimeCol> aevtimeCol( eventSvc,
"/Event/Recon/RecEsTimeCol" );
249 if ( ( !aevtimeCol ) || ( aevtimeCol->size() == 0 ) )
256 RecEsTimeCol::iterator iter_evt = aevtimeCol->begin();
257 for ( ; iter_evt != aevtimeCol->end(); iter_evt++ )
259 tes = ( *iter_evt )->getTest();
260 esTimeflag = ( *iter_evt )->getStat();
264 m_hTesAllFlag->Fill( esTimeflag );
265 m_hTesAll->Fill( tes );
266 m_hTesFlag->Fill( esTimeflag );
268 for (
int iEs = 0; iEs < m_param.nEsFlag; iEs++ )
270 if ( esTimeflag == m_param.esFlag[iEs] )
272 m_hTes[iEs]->Fill( tes );
277 bool fgFillTes =
false;
278 if ( !m_param.esCut ) { fgFillTes =
true; }
279 else if ( ( nTesFlag > -1 ) && ( tes > m_param.tesMin ) && ( tes < m_param.tesMax ) )
280 { fgFillTes =
true; }
282 if ( fgFillTes ) m_hTesCal->Fill( tes );
287 SmartDataPtr<MdcDigiCol> mdcDigiCol( eventSvc,
"/Event/Digi/MdcDigiCol" );
288 if ( !mdcDigiCol ) { log << MSG::FATAL <<
"Could not find event" << endmsg; }
290 MdcDigiCol::iterator
iter = mdcDigiCol->begin();
292 for ( ;
iter != mdcDigiCol->end();
iter++, digiId++ )
295 id = ( aDigi )->identify();
299 wir = m_mdcGeomSvc->Wire( lay, cel )->Id();
301 tdc = ( aDigi )->getTimeChannel();
302 adc = ( aDigi )->getChargeChannel();
303 fgOverFlow = ( aDigi )->getOverflow();
305 if ( ( ( fgOverFlow & 1 ) != 0 ) || ( ( fgOverFlow & 12 ) != 0 ) ||
313 m_hLayerHitmapT->Fill( lay );
314 m_hWireHitMapT->Fill( wir );
315 m_hlaymapT[lay]->Fill( cel );
317 m_hLayerHitmapQ->Fill( lay );
318 m_hWireHitMapQ->Fill( wir );
319 m_hlaymapQ[lay]->Fill( cel );
324 traw += m_param.timeShift;
326 m_htdc[lay]->Fill( tdc );
327 m_htraw[lay]->Fill( traw );
328 m_hqraw[lay]->Fill( qraw );
332 m_htdcTes[lay][nTesFlag]->Fill( tdc );
333 m_htrawTes[lay][nTesFlag]->Fill( traw );
336 m_htrawCel[wir]->Fill( traw );
337 m_hqrawCel[wir]->Fill( qraw );
347 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
348 MsgStream log(
msgSvc,
"IniMdcCalib" );
349 log << MSG::DEBUG <<
"IniMdcCalib::updateConst()" << endmsg;
356 double initT0 = m_param.initT0;
370 for ( lay = 0; lay < m_nLayer; lay++ )
373 chindfTmin[lay] = -1;
374 sprintf( funname,
"ftmin%02d", lay );
375 ftmin[lay] =
new TF1( funname, funTmin, 0, 150, 6 );
377 if ( 1 == m_param.fgCalib[lay] )
379 Stat_t nEntryTot = 0;
380 for (
int ibin = 1; ibin <= 25; ibin++ )
382 Stat_t entry = m_htraw[lay]->GetBinContent( ibin );
385 double c0Ini = (double)nEntryTot / 25.0;
386 double c1Ini = ( m_htraw[lay]->GetMaximum() ) - c0Ini;
388 ftmin[lay]->SetParameter( 0, c0Ini );
389 ftmin[lay]->SetParameter( 1, c1Ini );
390 ftmin[lay]->SetParameter( 2, 0 );
391 ftmin[lay]->SetParameter( 4, initT0 );
392 ftmin[lay]->SetParameter( 5, 2 );
394 m_htraw[lay]->Fit( funname,
"Q",
"", m_param.tminFitRange[lay][0],
395 m_param.tminFitRange[lay][1] );
396 chisq = ftmin[lay]->GetChisquare();
397 gStyle->SetOptFit( 11 );
398 ndf = ftmin[lay]->GetNDF();
399 chindfTmin[lay] = chisq / ndf;
400 if ( chindfTmin[lay] < m_param.tminFitChindf )
403 t0Fit[lay] = ftmin[lay]->GetParameter( 4 );
404 t0Fit[lay] += m_param.t0Shift;
405 t0Cal[lay] = t0Fit[lay] - m_param.timeShift;
409 if ( 0 == fitTminFg[lay] )
411 wir = m_mdcGeomSvc->Wire( lay, 0 )->Id();
412 t0Cal[lay] = calconst->
getT0( wir );
413 t0Fit[lay] = t0Cal[lay] + m_param.timeShift;
419 for ( lay = 0; lay < m_nLayer; lay++ )
422 chindfTmax[lay] = -1;
423 sprintf( funname,
"ftmax%02d", lay );
424 ftmax[lay] =
new TF1( funname, funTmax, 250, 500, 4 );
426 if ( 1 == m_param.fgCalib[lay] )
428 ftmax[lay]->SetParameter( 2, m_param.initTm[lay] );
429 ftmax[lay]->SetParameter( 3, 10 );
431 m_htraw[lay]->Fit( funname,
"Q+",
"", m_param.tmaxFitRange[lay][0],
432 m_param.tmaxFitRange[lay][1] );
433 gStyle->SetOptFit( 11 );
434 chisq = ftmax[lay]->GetChisquare();
435 ndf = ftmax[lay]->GetNDF();
436 chindfTmax[lay] = chisq / ndf;
437 if ( chindfTmax[lay] < m_param.tmaxFitChindf )
440 tmax[lay] = ftmax[lay]->GetParameter( 2 );
444 if ( 0 == fitTmaxFg[lay] )
445 { tmax[lay] = ( calconst->
getXtpar( lay, 0, 0, 6 ) ) + t0Fit[lay]; }
449 ofstream ft0(
"iniT0.dat" );
450 for ( lay = 0; lay < m_nLayer; lay++ )
452 ft0 << setw( 5 ) << lay << setw( 3 ) << fitTminFg[lay] << setw( 12 ) << t0Cal[lay]
453 << setw( 12 ) << t0Fit[lay] << setw( 12 ) << chindfTmin[lay] << setw( 5 )
454 << fitTmaxFg[lay] << setw( 12 ) << tmax[lay] << setw( 12 ) << tmax[lay] - t0Fit[lay]
455 << setw( 12 ) << chindfTmax[lay] << endl;
458 cout <<
"iniT0.dat was written." << endl;
462 int nwire = m_mdcGeomSvc->getWireSize();
463 for ( i = 0; i < nwire; i++ )
465 lay = m_mdcGeomSvc->Wire( i )->Layer();
466 if ( 1 == m_param.fgCalib[lay] )
468 calconst->
resetT0( i, t0Cal[lay] );
473 if ( 0 == m_param.fgIniCalConst )
480 double xtini[8] = { 0, 0.03, 0, 0, 0, 0, 999.9, 0 };
481 for ( lay = 0; lay < m_nLayer; lay++ )
483 if ( 1 != m_param.fgCalib[lay] )
continue;
491 if ( 6 == ord ) { xtpar = tmax[lay] - t0Fit[lay]; }
492 else { xtpar = xtini[ord]; }
493 calconst->
resetXtpar( lay, iEntr, lr, ord, xtpar );
500 for ( lay = 0; lay < m_nLayer; lay++ )
508 double sdpar = m_param.initSigma;
509 for ( lay = 0; lay < m_nLayer; lay++ )
513 for ( lr = 0; lr < 2; lr++ )
521 else if ( 2 == m_param.fgIniCalConst )
526 for ( lay = 0; lay < m_nLayer; lay++ )
532 xtpar = tmax[lay] - t0Fit[lay];
533 calconst->
resetXtpar( lay, iEntr, lr, 6, xtpar );