47 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
48 MsgStream log(
msgSvc,
"GrXtMdcCalib" );
49 log << MSG::INFO <<
"GrXtMdcCalib::initialize()" << endmsg;
52 m_mdcGeomSvc = mdcGeomSvc;
53 m_mdcFunSvc = mdcFunSvc;
54 m_mdcUtilitySvc = mdcUtilitySvc;
63 m_fdXt =
new TFolder(
"fdXtGr",
"fdXtGr" );
64 m_hlist->Add( m_fdXt );
66 m_haxis =
new TH2F(
"axis",
"", 50, 0, 300, 50, 0, 9 );
67 m_haxis->SetStats( 0 );
68 m_fdXt->Add( m_haxis );
74 for ( iLR = 0; iLR <
MdcCalLR; iLR++ )
76 m_nhit[lay][iEntr][iLR] = 0;
78 sprintf( hname,
"grXt%02d_%02d_lr%01d", lay, iEntr, iLR );
79 m_grxt[lay][iEntr][iLR] =
new TGraph();
80 m_grxt[lay][iEntr][iLR]->SetName( hname );
81 m_grxt[lay][iEntr][iLR]->SetMarkerStyle( 10 );
82 m_grxt[lay][iEntr][iLR]->SetLineColor( 10 );
83 m_fdXt->Add( m_grxt[lay][iEntr][iLR] );
91 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
92 MsgStream log(
msgSvc,
"GrXtMdcCalib" );
93 log << MSG::DEBUG <<
"GrXtMdcCalib::fillHist()" << endmsg;
98 bool esCutFg =
event->getEsCutFlag();
99 if ( !esCutFg )
return -1;
122 if ( lay < 8 ) m_docaMax[lay] = m_param.maxDocaInner;
123 else m_docaMax[lay] = m_param.maxDocaOuter;
132 int ntrk =
event->getNTrk();
133 for ( i = 0; i < ntrk; i++ )
136 rectrk =
event->getRecTrk( i );
140 dr = rectrk->
getDr();
141 if ( fabs( dr ) > m_param.drCut )
continue;
144 dz = rectrk->
getDz();
145 if ( fabs( dz ) > m_param.dzCut )
continue;
147 for ( lay = 0; lay <
MdcCalNLayer; lay++ ) { fgHitLay[lay] =
false; }
149 for ( k = 0; k < nhit; k++ )
155 fgHitLay[lay] =
true;
162 if ( !fgTrk )
continue;
167 if ( fgHitLay[lay] ) nhitlay++;
169 if ( nhitlay < m_param.nHitLayCut )
continue;
171 for ( k = 0; k < nhit; k++ )
177 iLR = rechit->
getLR();
181 if ( ( fabs( doca ) > m_docaMax[lay] ) || ( fabs( resi ) > m_param.resiCut[lay] ) )
186 if ( !fgHitLay[1] )
continue;
188 else if ( 42 == lay )
190 if ( !fgHitLay[41] )
continue;
194 if ( ( !fgHitLay[lay - 1] ) && ( !fgHitLay[lay + 1] ) )
continue;
197 iEntr = m_mdcFunSvc->getXtEntrIndex( entrance );
201 if ( m_nhit[lay][iEntr][iLR] < m_maxNhit )
203 m_grxt[lay][iEntr][iLR]->SetPoint( m_nhit[lay][iEntr][iLR], tdr, fabs( doca ) );
204 m_nhit[lay][iEntr][iLR]++;
208 if ( m_nhit[lay][iEntr][2] < m_maxNhit )
210 m_grxt[lay][iEntr][2]->SetPoint( m_nhit[lay][iEntr][2], tdr, fabs( doca ) );
211 m_nhit[lay][iEntr][2]++;
222 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
223 MsgStream log(
msgSvc,
"GrXtMdcCalib" );
224 log << MSG::INFO <<
"GrXtMdcCalib::updateConst()" << endmsg;
230 TF1* fxtDr =
new TF1(
"fxtDr",
xtfun, 0, 300, 6 );
231 TF1* fxtEd =
new TF1(
"fxtEd",
xtedge, 150, 500, 1 );
232 if ( 1 == m_param.fixXtC0 ) fxtDr->FixParameter( 0, 0 );
238 for (
int lr = 0; lr <
MdcCalLR; lr++ )
240 m_fgFit[lay][iEntr][lr] =
false;
241 if ( 0 == m_param.fgCalib[lay] )
continue;
243 if ( m_nhit[lay][iEntr][lr] > 1000 )
245 TMAX = calconst->
getXtpar( lay, iEntr, lr, 6 );
247 m_grxt[lay][iEntr][lr]->Fit(
"fxtDr",
"Q+",
"", 0, TMAX );
249 for ( ord = 0; ord < 6; ord++ )
250 { xtpar[lay][iEntr][lr][ord] = fxtDr->GetParameter( ord ); }
251 xtpar[lay][iEntr][lr][6] = TMAX;
254 for ( ord = 0; ord < 6; ord++ )
255 DMAX += xtpar[lay][iEntr][lr][ord] * pow( TMAX, ord );
257 m_grxt[lay][iEntr][lr]->Fit(
"fxtEd",
"Q+",
"", TMAX, TMAX + 300 );
258 xtpar[lay][iEntr][lr][7] = fxtEd->GetParameter( 0 );
259 if ( xtpar[lay][iEntr][lr][7] < 0.0 ) xtpar[lay][iEntr][lr][7] = 0.0;
260 m_fgFit[lay][iEntr][lr] =
true;
271 ofstream fxtlog(
"xtlog" );
276 for (
int lr = 0; lr <
MdcCalLR; lr++ )
278 fxtlog << setw( 3 ) << lay << setw( 3 ) << iEntr << setw( 3 ) << lr;
281 if ( m_fgFit[lay][iEntr][lr] )
284 for ( ord = 0; ord < 8; ord++ )
285 calconst->
resetXtpar( lay, iEntr, lr, ord, xtpar[lay][iEntr][lr][ord] );
290 if ( -1 != iEntrNew )
293 for ( ord = 0; ord < 8; ord++ )
294 { calconst->
resetXtpar( lay, iEntr, lr, ord, xtpar[lay][iEntrNew][lr][ord] ); }
297 fxtlog << setw( 3 ) << fgUpdate;
298 for ( ord = 0; ord < 8; ord++ )
300 double par = calconst->
getXtpar( lay, iEntr, lr, ord );
301 fxtlog << setw( 14 ) << par;
309 cout <<
"Xt update finished. File xtlog was written." << endl;
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)