119 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
120 MsgStream log(
msgSvc,
"XtMdcCalib" );
121 log << MSG::DEBUG <<
"XtMdcCalib::fillHist()" << endmsg;
126 bool esCutFg =
event->getEsCutFlag();
127 if ( !esCutFg )
return -1;
154 if ( lay < 8 ) m_docaMax[lay] = m_param.maxDocaInner;
155 else m_docaMax[lay] = m_param.maxDocaOuter;
160 for ( iEntr = 0; iEntr < m_nEntr[lay]; iEntr++ )
162 for ( iLR = 0; iLR <
MdcCalLR; iLR++ )
165 if ( 0 == iEntr ) m_mdcFunSvc->getXtpar( lay, 8, iLR, xtpar );
166 else if ( 1 == iEntr ) m_mdcFunSvc->getXtpar( lay, 9, iLR, xtpar );
167 m_tm[lay][iEntr][iLR] = xtpar[6];
178 int ntrk =
event->getNTrk();
179 if ( ( ntrk < m_param.nTrkCut[0] ) || ( ntrk > m_param.nTrkCut[1] ) )
return -1;
180 for ( i = 0; i < ntrk; i++ )
182 rectrk =
event->getRecTrk( i );
186 dr = rectrk->
getDr();
187 if ( fabs( dr ) > m_param.drCut )
continue;
190 dz = rectrk->
getDz();
191 if ( fabs( dz ) > m_param.dzCut )
continue;
194 double p = rectrk->
getP();
195 if ( ( fabs( p ) < m_param.pCut[0] ) || ( fabs( p ) > m_param.pCut[1] ) )
continue;
198 double phi0 = rectrk->
getPhi0();
199 double phiTrk = phi0 + CLHEP::halfpi;
200 if ( phiTrk > CLHEP::twopi ) phiTrk -= CLHEP::twopi;
201 if ( m_param.cosmicDwTrk && ( phiTrk < CLHEP::pi ) )
continue;
203 for ( lay = 0; lay <
MdcCalNLayer; lay++ ) { fgHitLay[lay] =
false; }
205 for ( k = 0; k < nhit; k++ )
209 fgHitLay[lay] =
true;
215 if ( fgHitLay[lay] ) nhitlay++;
217 if ( nhitlay < m_param.nHitLayCut )
continue;
222 for ( k = 0; k < nhit; k++ )
227 iLR = rechit->
getLR();
233 if ( 1 != stat )
continue;
235 if ( ( fabs( doca ) > m_docaMax[lay] ) || ( fabs( resi ) > m_param.resiCut[lay] ) )
240 if ( !fgHitLay[1] )
continue;
242 else if ( 42 == lay )
244 if ( !fgHitLay[41] )
continue;
248 if ( ( !fgHitLay[lay - 1] ) && ( !fgHitLay[lay + 1] ) )
continue;
251 iEntr = m_mdcFunSvc->getXtEntrIndex( entrance );
252 if ( 1 == m_nEntr[lay] ) { iEntr = 0; }
253 else if ( 2 == m_nEntr[lay] )
255 if ( entrance > 0.0 ) iEntr = 1;
259 bin = (int)( tdr / m_tbinw );
263 if ( (
bin < m_nbin ) && ( 1 == m_hxtmap.count(
key ) ) )
266 m_hxt[hid]->Fill( resi );
271 if ( (
bin < m_nbin ) && ( 1 == m_hxtmap.count(
key ) ) )
274 m_hxt[hid]->Fill( resi );
277 if ( fabs( tdr - m_tm[lay][iEntr][iLR] ) < 5 )
280 if ( 1 == m_hxtmap.count(
key ) )
283 m_hxt[hid]->Fill( resi );
287 if ( 1 == m_hxtmap.count(
key ) )
290 m_hxt[hid]->Fill( resi );
303 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
304 MsgStream log(
msgSvc,
"XtMdcCalib" );
305 log << MSG::INFO <<
"XtMdcCalib::updateConst()" << endmsg;
335 Double_t arglist[10];
337 TMinuit* gmxt =
new TMinuit( 6 );
338 gmxt->SetPrintLevel( -1 );
339 gmxt->SetFCN(
fcnXT );
340 gmxt->SetErrorDef( 1.0 );
341 gmxt->mnparm( 0,
"xtpar0", 0, 0.1, 0, 0, ierflg );
342 gmxt->mnparm( 1,
"xtpar1", 0, 0.1, 0, 0, ierflg );
343 gmxt->mnparm( 2,
"xtpar2", 0, 0.1, 0, 0, ierflg );
344 gmxt->mnparm( 3,
"xtpar3", 0, 0.1, 0, 0, ierflg );
345 gmxt->mnparm( 4,
"xtpar4", 0, 0.1, 0, 0, ierflg );
346 gmxt->mnparm( 5,
"xtpar5", 0, 0.1, 0, 0, ierflg );
348 gmxt->mnexcm(
"SET NOW", arglist, 0, ierflg );
350 TMinuit* gmxtEd =
new TMinuit( 1 );
351 gmxtEd->SetPrintLevel( -1 );
353 gmxtEd->SetErrorDef( 1.0 );
354 gmxtEd->mnparm( 0,
"xtpar0", 0, 0.1, 0, 0, ierflg );
356 gmxtEd->mnexcm(
"SET NOW", arglist, 0, ierflg );
358 ofstream fxtlog(
"xtlog" );
359 for ( lay = 0; lay < m_nlayer; lay++ )
361 if ( 0 == m_param.fgCalib[lay] )
continue;
363 for ( iEntr = 0; iEntr < m_nEntr[lay]; iEntr++ )
365 for ( iLR = 0; iLR < m_nLR; iLR++ )
368 fxtlog <<
"Layer " << setw( 3 ) << lay << setw( 3 ) << iEntr << setw( 3 ) << iLR
371 for ( ord = 0; ord < m_nxtpar; ord++ )
374 if ( 0 == iEntr ) xtpar = calconst->
getXtpar( lay, 8, iLR, ord );
375 else if ( 1 == iEntr ) xtpar = calconst->
getXtpar( lay, 9, iLR, ord );
388 entry = m_hxt[hid]->GetEntries();
391 deltx = m_hxt[hid]->GetMean();
392 xerr = m_hxt[hid]->GetRMS();
396 if (
bin < m_nbin ) tbcen = ( (double)
bin + 0.5 ) * m_tbinw;
397 else tbcen = m_tm[lay][iEntr][iLR];
398 xcor =
xtFun( tbcen, xtini ) - deltx;
400 if ( ( tbcen <=
Tmax ) || (
bin == m_nbin ) )
403 XMEAS.push_back( xcor );
404 ERR.push_back( xerr );
410 ERRED.push_back( xerr );
412 fxtlog << setw( 3 ) <<
bin << setw( 15 ) << deltx << setw( 15 ) << xcor << setw( 15 )
413 << tbcen << setw( 15 ) << xerr << endl;
416 if (
XMEAS.size() < 12 )
429 for ( ord = 0; ord <= 5; ord++ )
431 arglist[0] = ord + 1;
432 arglist[1] = xtini[ord];
433 gmxt->mnexcm(
"SET PARameter", arglist, 2, ierflg );
437 if ( 1 == m_param.fixXtC0 )
441 gmxt->mnexcm(
"SET PARameter", arglist, 2, ierflg );
442 gmxt->mnexcm(
"FIX", arglist, 1, ierflg );
447 gmxt->mnexcm(
"MIGRAD", arglist, 2, ierflg );
448 gmxt->mnstat( fmin, edm, errdef, nvpar, nparx, istat );
450 fxtlog <<
"Xtpar: " << endl;
451 if ( ( 0 == ierflg ) && ( istat >= 2 ) )
453 for ( ord = 0; ord <= 5; ord++ )
455 gmxt->GetParameter( ord, xtpar, xterr );
459 if ( 1 == m_nEntr[lay] )
461 for ( i = 0; i < 18; i++ ) calconst->
resetXtpar( lay, i, iLR, ord, xtpar );
463 else if ( 2 == m_nEntr[lay] )
467 for ( i = 0; i < 9; i++ )
468 calconst->
resetXtpar( lay, i, iLR, ord, xtpar );
472 for ( i = 9; i < 18; i++ )
473 calconst->
resetXtpar( lay, i, iLR, ord, xtpar );
476 fxtlog << setw( 15 ) << xtpar << setw( 15 ) << xterr << endl;
481 for ( ord = 0; ord <= 5; ord++ )
482 { fxtlog << setw( 15 ) << xtini[ord] << setw( 15 ) <<
"0" << endl; }
484 fxtlog << setw( 15 ) <<
Tmax << setw( 15 ) <<
"0" << endl;
487 if ( 1 == m_param.fixXtC0 )
490 gmxt->mnexcm(
"REL", arglist, 1, ierflg );
499 arglist[1] = xtini[7];
500 gmxtEd->mnexcm(
"SET PARameter", arglist, 2, ierflg );
504 gmxtEd->mnexcm(
"MIGRAD", arglist, 2, ierflg );
505 gmxtEd->mnstat( fmin, edm, errdef, nvpar, nparx, istat );
507 if ( ( 0 == ierflg ) && ( istat >= 2 ) )
509 gmxtEd->GetParameter( 0, xtpar, xterr );
510 if ( xtpar < 0.0 ) xtpar = 0.0;
511 if ( m_param.fixXtEdge ) xtpar = xtini[7];
514 if ( 1 == m_nEntr[lay] )
516 for ( i = 0; i < 18; i++ ) calconst->
resetXtpar( lay, i, iLR, 7, xtpar );
518 else if ( 2 == m_nEntr[lay] )
522 for ( i = 0; i < 9; i++ ) calconst->
resetXtpar( lay, i, iLR, 7, xtpar );
526 for ( i = 9; i < 18; i++ ) calconst->
resetXtpar( lay, i, iLR, 7, xtpar );
529 fxtlog << setw( 15 ) << xtpar << setw( 15 ) << xterr << endl;
531 else { fxtlog << setw( 15 ) << xtini[7] << setw( 15 ) <<
"0" << endl; }
533 else { fxtlog << setw( 15 ) << xtini[7] << setw( 15 ) <<
"0" << endl; }
534 fxtlog <<
"Tm " << setw( 15 ) <<
Tmax <<
" Dmax " << setw( 15 ) <<
Dmax << endl;
549 cout <<
"Xt update finished" << endl;