228 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
229 MsgStream log(
msgSvc,
"MdcCalib" );
230 log << MSG::INFO <<
"MdcCalib::initialize()" << endmsg;
233 m_mdcGeomSvc = mdcGeomSvc;
234 m_mdcFunSvc = mdcFunSvc;
235 m_mdcUtilitySvc = mdcUtilitySvc;
245 m_nlayer = m_mdcGeomSvc->getLayerSize();
247 for ( lay = 0; lay < m_nlayer; lay++ )
248 { m_radii[lay] = m_mdcGeomSvc->Layer( lay )->Radius(); }
249 ofstream fwpc(
"wirelog.txt" );
252 m_xe[wir] = m_mdcGeomSvc->Wire( wir )->Backward().x();
253 m_ye[wir] = m_mdcGeomSvc->Wire( wir )->Backward().y();
254 m_ze[wir] = m_mdcGeomSvc->Wire( wir )->Backward().z();
255 m_xw[wir] = m_mdcGeomSvc->Wire( wir )->Forward().x();
256 m_yw[wir] = m_mdcGeomSvc->Wire( wir )->Forward().y();
257 m_zw[wir] = m_mdcGeomSvc->Wire( wir )->Forward().z();
258 fwpc << setw( 6 ) << wir << setw( 15 ) << m_xe[wir] << setw( 15 ) << m_ye[wir]
259 << setw( 15 ) << m_ze[wir] << setw( 15 ) << m_xw[wir] << setw( 15 ) << m_yw[wir]
260 << setw( 15 ) << m_zw[wir] << endl;
264 m_fdcom =
new TFolder(
"common",
"common" );
265 m_hlist->Add( m_fdcom );
267 m_effNtrk =
new TH1F(
"effNtrk",
"", 43, -0.5, 42.5 );
268 m_fdcom->Add( m_effNtrk );
270 m_effNtrkRecHit =
new TH1F(
"effNtrkRecHit",
"", 43, -0.5, 42.5 );
271 m_fdcom->Add( m_effNtrkRecHit );
273 m_hresAllInc =
new TH1F(
"HResAllInc",
"", 200, -1.0, 1.0 );
274 m_fdcom->Add( m_hresAllInc );
276 m_hresAllExc =
new TH1F(
"HResAllExc",
"", 200, -1.0, 1.0 );
277 m_fdcom->Add( m_hresAllExc );
279 m_hresAllAve =
new TH1F(
"HResAllAve",
"", 200, -1.0, 1.0 );
280 m_fdcom->Add( m_hresAllAve );
282 m_hresInnInc =
new TH1F(
"HResInnInc",
"", 200, -1.0, 1.0 );
283 m_fdcom->Add( m_hresInnInc );
285 m_hresInnExc =
new TH1F(
"HResInnExc",
"", 200, -1.0, 1.0 );
286 m_fdcom->Add( m_hresInnExc );
288 m_hresStpInc =
new TH1F(
"HResStpInc",
"", 200, -1.0, 1.0 );
289 m_fdcom->Add( m_hresStpInc );
291 m_hresStpExc =
new TH1F(
"HResStpExc",
"", 200, -1.0, 1.0 );
292 m_fdcom->Add( m_hresStpExc );
294 m_hresOutInc =
new TH1F(
"HResOutInc",
"", 200, -1.0, 1.0 );
295 m_fdcom->Add( m_hresOutInc );
297 m_hresOutExc =
new TH1F(
"HResOutExc",
"", 200, -1.0, 1.0 );
298 m_fdcom->Add( m_hresOutExc );
300 m_hresAllExcUp =
new TH1F(
"HResAllExcUp",
"", 200, -1.0, 1.0 );
301 m_fdcom->Add( m_hresAllExcUp );
303 m_hresAllExcDw =
new TH1F(
"HResAllExcDw",
"", 200, -1.0, 1.0 );
304 m_fdcom->Add( m_hresAllExcDw );
306 m_hresInnExcUp =
new TH1F(
"HResInnExcUp",
"", 200, -1.0, 1.0 );
307 m_fdcom->Add( m_hresInnExcUp );
309 m_hresInnExcDw =
new TH1F(
"HResInnExcDw",
"", 200, -1.0, 1.0 );
310 m_fdcom->Add( m_hresInnExcDw );
312 m_hresStpExcUp =
new TH1F(
"HResStpExcUp",
"", 200, -1.0, 1.0 );
313 m_fdcom->Add( m_hresStpExcUp );
315 m_hresStpExcDw =
new TH1F(
"HResStpExcDw",
"", 200, -1.0, 1.0 );
316 m_fdcom->Add( m_hresStpExcDw );
318 m_hresOutExcUp =
new TH1F(
"HResOutExcUp",
"", 200, -1.0, 1.0 );
319 m_fdcom->Add( m_hresOutExcUp );
321 m_hresOutExcDw =
new TH1F(
"HResOutExcDw",
"", 200, -1.0, 1.0 );
322 m_fdcom->Add( m_hresOutExcDw );
324 m_fdResQ =
new TFolder(
"ResQ",
"ResQ" );
325 m_hlist->Add( m_fdResQ );
326 for (
int i = 0; i < 14; i++ )
328 sprintf( hname,
"resoAll_qbin%02d", i );
329 m_hresAveAllQ[i] =
new TH1F( hname,
"", 200, -1, 1 );
330 m_fdResQ->Add( m_hresAveAllQ[i] );
332 sprintf( hname,
"resoOut_qbin%02d", i );
333 m_hresAveOutQ[i] =
new TH1F( hname,
"", 200, -1, 1 );
334 m_fdResQ->Add( m_hresAveOutQ[i] );
336 for ( lay = 0; lay < 43; lay++ )
338 for (
int i = 0; i < 14; i++ )
340 sprintf( hname,
"resoLay%02d_qbin%02d", lay, i );
341 m_hresAveLayQ[lay][i] =
new TH1F( hname,
"", 200, -1, 1 );
342 m_fdResQ->Add( m_hresAveLayQ[lay][i] );
346 for (
int iEs = 0; iEs < m_param.nEsFlag; iEs++ )
348 sprintf( hname,
"Tes_%d", m_param.esFlag[iEs] );
349 m_hTes[iEs] =
new TH1F( hname,
"", 750, 0, 1500 );
350 m_fdcom->Add( m_hTes[iEs] );
353 m_hbbTrkFlg =
new TH1F(
"BbTrkFlg",
"", 100, 0, 6 );
354 m_fdcom->Add( m_hbbTrkFlg );
356 m_hTesAll =
new TH1F(
"TesAll",
"", 2000, 0, 2000 );
357 m_fdcom->Add( m_hTesAll );
359 m_hTesGood =
new TH1F(
"TesGood",
"", 2000, 0, 2000 );
360 m_fdcom->Add( m_hTesGood );
362 m_hTesAllFlag =
new TH1F(
"TesAllFlag",
"", 300, -0.5, 299.5 );
363 m_fdcom->Add( m_hTesAllFlag );
365 m_hTesRec =
new TH1F(
"TesRec",
"", 2000, 0, 2000 );
366 m_fdcom->Add( m_hTesRec );
368 m_hTesCalFlag =
new TH1F(
"TesCalFlag",
"", 2000, 0, 2000 );
369 m_fdcom->Add( m_hTesCalFlag );
371 m_hTesCalUse =
new TH1F(
"TesCalUse",
"", 2000, 0, 2000 );
372 m_fdcom->Add( m_hTesCalUse );
374 m_hnRawHit =
new TH1F(
"nRawHit",
"", 6797, -0.5, 6796.5 );
375 m_fdcom->Add( m_hnRawHit );
377 m_hpt =
new TH1F(
"HPt",
"", nbinMom, 0, 3 );
378 m_fdcom->Add( m_hpt );
380 m_hptPos =
new TH1F(
"HPtPos",
"", nbinMom, 0, 3 );
381 m_fdcom->Add( m_hptPos );
383 m_hptNeg =
new TH1F(
"HPtNeg",
"", nbinMom, 0, 3 );
384 m_fdcom->Add( m_hptNeg );
386 m_hp =
new TH1F(
"HP",
"", nbinMom, 0, 3 );
387 m_fdcom->Add( m_hp );
389 m_hp_cms =
new TH1F(
"HPCMS",
"", nbinMom, 0, 3 );
390 m_fdcom->Add( m_hp_cms );
392 m_hpMax =
new TH1F(
"HPMax",
"", nbinMom, 0, 3 );
393 m_fdcom->Add( m_hpMax );
395 m_hpMaxCms =
new TH1F(
"HPMax_Cms",
"", nbinMom, 0, 3 );
396 m_fdcom->Add( m_hpMaxCms );
398 m_hpPos =
new TH1F(
"HP_Pos",
"", nbinMom, 0, 3 );
399 m_fdcom->Add( m_hpPos );
401 m_hpNeg =
new TH1F(
"HP_Neg",
"", nbinMom, 0, 3 );
402 m_fdcom->Add( m_hpNeg );
404 m_hpPoscms =
new TH1F(
"HP_Pos_cms",
"", nbinMom, 0, 3 );
405 m_fdcom->Add( m_hpPoscms );
407 m_hpNegcms =
new TH1F(
"HP_Neg_cms",
"", nbinMom, 0, 3 );
408 m_fdcom->Add( m_hpNegcms );
410 m_hp_cut =
new TH1F(
"HPCut",
"", nbinMom, 0, 3 );
411 m_fdcom->Add( m_hp_cut );
413 m_hchisq =
new TH1F(
"Chisq",
"", 10, 0, 100 );
414 m_fdcom->Add( m_hchisq );
416 m_hnTrk =
new TH1F(
"HNtrack",
"HNtrack", 10, -0.5, 9.5 );
417 m_fdcom->Add( m_hnTrk );
419 m_hnTrkCal =
new TH1F(
"HNtrackCal",
"HNtrackCal", 10, -0.5, 9.5 );
420 m_fdcom->Add( m_hnTrkCal );
422 m_hnhitsRec =
new TH1F(
"HNhitsRec",
"", 100, -0.5, 99.5 );
423 m_fdcom->Add( m_hnhitsRec );
425 m_hnhitsRecInn =
new TH1F(
"HNhitsInnRec",
"", 60, 0.5, 60.5 );
426 m_fdcom->Add( m_hnhitsRecInn );
428 m_hnhitsRecStp =
new TH1F(
"HNhitsStpRec",
"", 60, 0.5, 60.5 );
429 m_fdcom->Add( m_hnhitsRecStp );
431 m_hnhitsRecOut =
new TH1F(
"HNhitsOutRec",
"", 60, 0.5, 60.5 );
432 m_fdcom->Add( m_hnhitsRecOut );
434 m_hnhitsCal =
new TH1F(
"HNhitsCal",
"", 100, -0.5, 99.5 );
435 m_fdcom->Add( m_hnhitsCal );
437 m_hnhitsCalInn =
new TH1F(
"HNhitsCalInn",
"", 60, 0.5, 60.5 );
438 m_fdcom->Add( m_hnhitsCalInn );
440 m_hnhitsCalStp =
new TH1F(
"HNhitsCalStp",
"", 60, 0.5, 60.5 );
441 m_fdcom->Add( m_hnhitsCalStp );
443 m_hnhitsCalOut =
new TH1F(
"HNhitsCalOut",
"", 60, 0.5, 60.5 );
444 m_fdcom->Add( m_hnhitsCalOut );
446 m_wirehitmap =
new TH1F(
"Wire_HitMap",
"Wire_HitMap", 6796, -0.5, 6795.5 );
447 m_fdcom->Add( m_wirehitmap );
449 m_layerhitmap =
new TH1F(
"Layer_HitMap",
"Layer_HitMap", 43, -0.5, 42.5 );
450 m_fdcom->Add( m_layerhitmap );
452 m_hnoisephi =
new TH1F(
"phi_noise",
"", 100, 0, 6.284 );
453 m_fdcom->Add( m_hnoisephi );
455 m_hnoiselay =
new TH1F(
"Layer_noise",
"Layer_noise", 43, -0.5, 42.5 );
456 m_fdcom->Add( m_hnoiselay );
458 m_hnoisenhits =
new TH1F(
"nhits_noise",
"nhits_noise", 6796, -0.5, 6795.5 );
459 m_fdcom->Add( m_hnoisenhits );
461 m_hratio =
new TH1F(
"ratio",
"", 100, 0, 1 );
462 m_fdcom->Add( m_hratio );
464 m_hdr =
new TH1F(
"dr",
"", 2000, -100, 100 );
465 m_fdcom->Add( m_hdr );
467 m_hphi0 =
new TH1F(
"phi0",
"", 100, 0, 6.284 );
468 m_fdcom->Add( m_hphi0 );
470 m_hkap =
new TH1F(
"kappa",
"", 400, -50, 50 );
471 m_fdcom->Add( m_hkap );
473 m_hdz =
new TH1F(
"dz",
"", 2000, -500, 500 );
474 m_fdcom->Add( m_hdz );
476 m_htanl =
new TH1F(
"tanl",
"", 200, -5, 5 );
477 m_fdcom->Add( m_htanl );
479 m_hcosthe =
new TH1F(
"costheta",
"", 200, -1, 1 );
480 m_fdcom->Add( m_hcosthe );
482 m_hcostheNeg =
new TH1F(
"costhetaNeg",
"", 200, -1, 1 );
483 m_fdcom->Add( m_hcostheNeg );
485 m_hcosthePos =
new TH1F(
"costhetaPos",
"", 200, -1, 1 );
486 m_fdcom->Add( m_hcosthePos );
488 m_hx0 =
new TH1F(
"x0",
"", 100, -10, 10 );
489 m_fdcom->Add( m_hx0 );
491 m_hy0 =
new TH1F(
"y0",
"", 100, -10, 10 );
492 m_fdcom->Add( m_hy0 );
494 m_hdelZ0 =
new TH1F(
"delta_z0",
"", 100, -50, 50 );
495 m_fdcom->Add( m_hdelZ0 );
497 m_grX0Y0 =
new TGraph();
498 m_grX0Y0->SetName(
"x0y0" );
499 m_fdcom->Add( m_grX0Y0 );
501 m_hitEffAll =
new TH1F(
"hitEffAll",
"", 6800, -0.5, 6799.5 );
502 m_fdcom->Add( m_hitEffAll );
504 m_hitEffRaw =
new TH1F(
"hitEffRaw",
"", 6800, -0.5, 6799.5 );
505 m_fdcom->Add( m_hitEffRaw );
507 m_hitEffRec =
new TH1F(
"hitEffRec",
"", 6800, -0.5, 6799.5 );
508 m_fdcom->Add( m_hitEffRec );
511 m_fdTime =
new TFolder(
"time",
"time" );
512 m_hlist->Add( m_fdTime );
514 for ( lay = 0; lay < m_nlayer; lay++ )
516 sprintf( hname,
"Traw%02d", lay );
517 m_htraw[lay] =
new TH1F( hname,
"", 1000, 0, 2000 );
518 m_fdTime->Add( m_htraw[lay] );
520 sprintf( hname,
"Tdr%02d", lay );
521 m_htdr[lay] =
new TH1F( hname,
"", 510, -10, 500 );
522 m_fdTime->Add( m_htdr[lay] );
524 for ( lr = 0; lr < 2; lr++ )
526 sprintf( hname,
"Tdr%02d_lr%01d", lay, lr );
527 m_htdrlr[lay][lr] =
new TH1F( hname,
"", 510, -10, 500 );
528 m_fdTime->Add( m_htdrlr[lay][lr] );
533 m_fdAdc =
new TFolder(
"adc",
"adc" );
534 m_hlist->Add( m_fdAdc );
536 for ( lay = 0; lay < m_nlayer; lay++ )
538 sprintf( hname,
"adc%02d", lay );
539 m_hadc[lay] =
new TH1F( hname,
"", 1500, 0, 3000 );
540 m_fdAdc->Add( m_hadc[lay] );
543 m_fdres =
new TFolder(
"resolution",
"resolution" );
544 m_hlist->Add( m_fdres );
546 m_fdresAve =
new TFolder(
"resAve",
"resAve" );
547 m_hlist->Add( m_fdresAve );
549 for ( lay = 0; lay < m_nlayer; lay++ )
551 sprintf( hname,
"Reso%02dInc", lay );
552 m_hresInc[lay] =
new TH1F( hname,
"", 1000, -5, 5 );
553 m_fdres->Add( m_hresInc[lay] );
555 sprintf( hname,
"Reso%02dExc", lay );
556 m_hresExc[lay] =
new TH1F( hname,
"", 1000, -5, 5 );
557 m_fdres->Add( m_hresExc[lay] );
559 sprintf( hname,
"Reso%02d", lay );
560 m_hresAve[lay] =
new TH1F( hname,
"", 1000, -5, 5 );
561 m_fdresAve->Add( m_hresAve[lay] );
563 for ( lr = 0; lr < 2; lr++ )
565 sprintf( hname,
"Reso%02dInc_lr%01d", lay, lr );
567 m_hreslrInc[lay][lr] =
new TH1F( hname,
"", 1000, -5, 5 );
568 m_fdres->Add( m_hreslrInc[lay][lr] );
570 sprintf( hname,
"Reso%02dExc_lr%01d", lay, lr );
572 m_hreslrExc[lay][lr] =
new TH1F( hname,
"", 1000, -5, 5 );
573 m_fdres->Add( m_hreslrExc[lay][lr] );
575 sprintf( hname,
"Reso%02d_lr%01d", lay, lr );
577 m_hreslrAve[lay][lr] =
new TH1F( hname,
"", 1000, -5, 5 );
578 m_fdresAve->Add( m_hreslrAve[lay][lr] );
580 for (
int phi = 0; phi < 20; phi++ )
582 sprintf( hname,
"ResoPhi%02d_phi%02d", lay, phi );
583 m_hresphi[lay][phi] =
new TH1F( hname,
"", 200, -1, 1 );
584 m_fdres->Add( m_hresphi[lay][phi] );
589 m_fdmomPhi =
new TFolder(
"momPhi",
"momPhi" );
590 m_hlist->Add( m_fdmomPhi );
596 m_ppPhi[
bin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
597 m_fdmomPhi->Add( m_ppPhi[
bin] );
600 m_pnPhi[
bin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
601 m_fdmomPhi->Add( m_pnPhi[
bin] );
604 m_ppPhiCms[
bin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
605 m_fdmomPhi->Add( m_ppPhiCms[
bin] );
608 m_pnPhiCms[
bin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
609 m_fdmomPhi->Add( m_pnPhiCms[
bin] );
611 for ( thbin = 0; thbin < NThetaBin; thbin++ )
613 sprintf( hname,
"hPpos_theta%02d_phi%02d", thbin,
bin );
614 m_ppThePhi[thbin][
bin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
615 m_fdmomPhi->Add( m_ppThePhi[thbin][
bin] );
617 sprintf( hname,
"hPneg_theta%02d_phi%02d", thbin,
bin );
618 m_pnThePhi[thbin][
bin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
619 m_fdmomPhi->Add( m_pnThePhi[thbin][
bin] );
621 sprintf( hname,
"hPposCms_theta%02d_phi%02d", thbin,
bin );
622 m_ppThePhiCms[thbin][
bin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
623 m_fdmomPhi->Add( m_ppThePhiCms[thbin][
bin] );
625 sprintf( hname,
"hPnegCms_theta%02d_phi%02d", thbin,
bin );
626 m_pnThePhiCms[thbin][
bin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
627 m_fdmomPhi->Add( m_pnThePhiCms[thbin][
bin] );
630 for ( thbin = 0; thbin < NThetaBin; thbin++ )
632 sprintf( hname,
"hPpos_the%02d", thbin );
633 m_ppThe[thbin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
634 m_fdmomPhi->Add( m_ppThe[thbin] );
636 sprintf( hname,
"hPneg_the%02d", thbin );
637 m_pnThe[thbin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
638 m_fdmomPhi->Add( m_pnThe[thbin] );
640 sprintf( hname,
"hPposCms_the%02d", thbin );
641 m_ppTheCms[thbin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
642 m_fdmomPhi->Add( m_ppTheCms[thbin] );
644 sprintf( hname,
"hPnegCms_the%02d", thbin );
645 m_pnTheCms[thbin] =
new TH1F( hname,
"", nbinMom, 0.0, 3.0 );
646 m_fdmomPhi->Add( m_pnTheCms[thbin] );
650 m_fdres2d =
new TFolder(
"res2d",
"res2d" );
651 m_hlist->Add( m_fdres2d );
656 for ( lay = 0; lay < m_nlayer; lay++ )
660 for ( lr = 0; lr < 2; lr++ )
664 sprintf( hname,
"r2d%02d_%02d_%01d_%02dInc", lay, iEntr, lr,
bin );
665 hist =
new TH1F( hname,
"", 200, -1, 1 );
666 m_hr2dInc.push_back( hist );
667 m_fdres2d->Add( hist );
669 sprintf( hname,
"r2d%02d_%02d_%01d_%02dExc", lay, iEntr, lr,
bin );
670 hist =
new TH1F( hname,
"", 200, -1, 1 );
671 m_hr2dExc.push_back( hist );
672 m_fdres2d->Add( hist );
674 key = getHresId( lay, iEntr, lr,
bin );
682 m_fdres2t =
new TFolder(
"res2t",
"res2t" );
685 for ( lay = 0; lay < m_nlayer; lay++ )
689 for ( lr = 0; lr < 2; lr++ )
693 sprintf( hname,
"r2t%02d_%02d_%01d_%02d", lay, iEntr, lr,
bin );
694 m_hr2t[lay][iEntr][lr][
bin] =
new TH1F( hname,
"", 600, -3, 3 );
695 m_fdres2t->Add( m_hr2t[lay][iEntr][lr][
bin] );
702 Gaudi::svcLocator()->service(
"NTupleSvc",
ntupleSvc );
703 for ( lay = 0; lay < m_nlayer; lay++ )
705 sprintf( hname,
"FILE136/xt%02d", lay );
707 if ( nt ) m_xtTuple[lay] = nt;
710 m_xtTuple[lay] =
ntupleSvc->book( hname, CLID_ColumnWiseTuple,
"MdcXtNtuple" );
711 if ( m_xtTuple[lay] )
713 m_xtTuple[lay]->addItem(
"cel", m_cel[lay] );
714 m_xtTuple[lay]->addItem(
"lr", m_lr[lay] );
715 m_xtTuple[lay]->addItem(
"run", m_run[lay] );
716 m_xtTuple[lay]->addItem(
"evt", m_evt[lay] );
717 m_xtTuple[lay]->addItem(
"doca", m_doca[lay] );
718 m_xtTuple[lay]->addItem(
"dm", m_dm[lay] );
719 m_xtTuple[lay]->addItem(
"tdr", m_tdr[lay] );
720 m_xtTuple[lay]->addItem(
"tdc", m_tdc[lay] );
721 m_xtTuple[lay]->addItem(
"entr", m_entr[lay] );
722 m_xtTuple[lay]->addItem(
"zhit", m_zhit[lay] );
723 m_xtTuple[lay]->addItem(
"qhit", m_qhit[lay] );
724 m_xtTuple[lay]->addItem(
"p", m_p[lay] );
725 m_xtTuple[lay]->addItem(
"pt", m_pt[lay] );
726 m_xtTuple[lay]->addItem(
"phi0", m_phi0[lay] );
727 m_xtTuple[lay]->addItem(
"tanl", m_tanl[lay] );
728 m_xtTuple[lay]->addItem(
"hitphi", m_hitphi[lay] );
731 { log << MSG::FATAL <<
"Cannot book Xt N-tuple:" << long( m_xtTuple[lay] ) << endmsg; }
735 if ( 5 == m_param.particle )
737 sprintf( hname,
"FILE136/cosmic" );
739 if ( nt ) m_cosmic = nt;
742 m_cosmic =
ntupleSvc->book( hname, CLID_ColumnWiseTuple,
"MdcXtNtuple" );
745 m_cosmic->addItem(
"pUp", m_pUpcos );
746 m_cosmic->addItem(
"pDw", m_pDwcos );
747 m_cosmic->addItem(
"ptUp", m_ptUpcos );
748 m_cosmic->addItem(
"ptDw", m_ptDwcos );
749 m_cosmic->addItem(
"phiUp", m_phiUpcos );
750 m_cosmic->addItem(
"phiDw", m_phiDwcos );
751 m_cosmic->addItem(
"drUp", m_drUpcos );
752 m_cosmic->addItem(
"drDw", m_drDwcos );
753 m_cosmic->addItem(
"dzUp", m_dzUpcos );
754 m_cosmic->addItem(
"dzDw", m_dzDwcos );
755 m_cosmic->addItem(
"ctheUp", m_ctheUpcos );
756 m_cosmic->addItem(
"ctheDw", m_ctheDwcos );
757 m_cosmic->addItem(
"nhitUp", m_nhitUpcos );
758 m_cosmic->addItem(
"nhitDw", m_nhitDwcos );
759 m_cosmic->addItem(
"char", m_chargecos );
760 m_cosmic->addItem(
"tesfg", m_tesFlagcos );
761 m_cosmic->addItem(
"tes", m_tescos );
769 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
770 MsgStream log(
msgSvc,
"MdcCalib" );
771 log << MSG::DEBUG <<
"MdcCalib::fillHist()" << endmsg;
804 double ecm = m_param.ecm;
805 double xboost = m_param.boostPar[0] * ecm;
806 double yboost = m_param.boostPar[1];
807 double zboost = m_param.boostPar[2];
818 double zminus = 9999.0;
819 double zplus = -9999.0;
837 int ntrk =
event->getNTrk();
852 if ( !fgReadWireEff )
856 int ncel = m_mdcGeomSvc->Layer( lay )->NCell();
857 for ( cel = 0; cel < ncel; cel++ )
859 double eff = m_mdcFunSvc->getWireEff( lay, cel );
860 if ( eff > 0.5 ) m_fgGoodWire[lay][cel] =
true;
861 else m_fgGoodWire[lay][cel] =
false;
862 int wireid = m_mdcGeomSvc->Wire( lay, cel )->Id();
864 cout <<
"dead channel: " << setw( 5 ) << lay << setw( 5 ) << cel << setw( 8 )
868 fgReadWireEff =
true;
870 ofstream fwpc(
"wirelog_align.txt" );
873 m_xe[wir] = m_mdcGeomSvc->Wire( wir )->Backward().x();
874 m_ye[wir] = m_mdcGeomSvc->Wire( wir )->Backward().y();
875 m_ze[wir] = m_mdcGeomSvc->Wire( wir )->Backward().z();
876 m_xw[wir] = m_mdcGeomSvc->Wire( wir )->Forward().x();
877 m_yw[wir] = m_mdcGeomSvc->Wire( wir )->Forward().y();
878 m_zw[wir] = m_mdcGeomSvc->Wire( wir )->Forward().z();
879 fwpc << setw( 6 ) << wir << setw( 15 ) << m_xe[wir] << setw( 15 ) << m_ye[wir]
880 << setw( 15 ) << m_ze[wir] << setw( 15 ) << m_xw[wir] << setw( 15 ) << m_yw[wir]
881 << setw( 15 ) << m_zw[wir] << endl;
886 int nRawHit =
event->getNRawHitTQ();
887 m_hnRawHit->Fill( nRawHit );
889 IDataProviderSvc* eventSvc = NULL;
890 Gaudi::svcLocator()->service(
"EventDataSvc", eventSvc );
892 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc,
"/Event/EventHeader" );
895 log << MSG::FATAL <<
"Could not find Event Header" << endmsg;
896 return ( StatusCode::FAILURE );
898 int iRun = eventHeader->runNumber();
899 int iEvt = eventHeader->eventNumber();
901 int esTimeflag =
event->getEsFlag();
902 double tes =
event->getTes();
903 bool esCutFg =
event->getEsCutFlag();
904 int iEs =
event->getNesCutFlag();
906 if ( -1 != esTimeflag )
908 SmartDataPtr<RecMdcTrackCol> newtrkCol( eventSvc,
"/Event/Recon/RecMdcTrackCol" );
911 log << MSG::ERROR <<
"Could not find RecMdcTrackCol" << endmsg;
912 return ( StatusCode::FAILURE );
918 RecMdcTrackCol::iterator it_trk = newtrkCol->begin();
919 for ( ; it_trk != newtrkCol->end(); it_trk++ )
921 double mass = 0.000511;
922 HepLorentzVector p4 = ( *it_trk )->p4(
mass );
923 icharge = ( *it_trk )->charge();
924 if ( icharge > 0 ) p4p.push_back( p4 );
925 else p4m.push_back( p4 );
927 if ( 1 == p4p.size() * p4m.size() )
929 double dang = p4p[0].vect().angle( p4m[0].vect() );
930 m_hbbTrkFlg->Fill( 1 );
931 if ( dang > 2.94 ) { m_hbbTrkFlg->Fill( 2 ); }
934 m_hTesAll->Fill( tes );
937 if ( -1 == esTimeflag )
return -1;
938 m_hTesGood->Fill( tes );
939 m_hTesAllFlag->Fill( esTimeflag );
940 if ( ntrk > 0 ) m_hTesRec->Fill( tes );
941 if ( ( iEs >= 0 ) && ( iEs < m_param.nEsFlag ) ) m_hTes[iEs]->Fill( tes );
943 if ( esCutFg ) m_hTesCalFlag->Fill( tes );
950 if ( lay < 8 ) m_docaMax[lay] = m_param.maxDocaInner;
951 else m_docaMax[lay] = m_param.maxDocaOuter;
957 for ( i = 0; i < 200; i++ ) trkFlag[i] =
false;
962 double hitphiplus = 9999.0;
963 double hitthetaplus = 9999.0;
964 double hitphiminus = -9999.0;
965 double hitthetaminus = -9999.0;
973 m_hnTrk->Fill( ntrk );
974 if ( ( ntrk < m_param.nTrkCut[0] ) || ( ntrk > m_param.nTrkCut[1] ) )
980 for ( i = 0; i < ntrk; i++ )
984 rectrk =
event->getRecTrk( i );
986 m_hnhitsRec->Fill( nhitRec );
988 for ( lay = 0; lay <
MdcCalNLayer; lay++ ) { fgHitLay[lay] =
false; }
993 for ( k = 0; k < nhitRec; k++ )
999 fgHitLay[lay] =
true;
1001 if ( lay < 8 ) nhitRecInn++;
1002 else if ( lay < 20 ) nhitRecStp++;
1005 m_hnhitsRecInn->Fill( nhitRecInn );
1006 m_hnhitsRecStp->Fill( nhitRecStp );
1007 m_hnhitsRecOut->Fill( nhitRecOut );
1010 pt = rectrk->
getPt();
1014 p4 = rectrk->
getP4();
1015 HepLorentzVector psip( xboost, yboost, zboost, ecm );
1016 Hep3Vector boostv = psip.boostVector();
1017 p4.boost( -boostv );
1020 if ( phicms < 0 ) phicms +=
PI2;
1021 thetacms = p4.theta();
1022 costheCMS =
cos( thetacms );
1023 if ( pt < 0 )
p_cms *= -1.0;
1028 if ( ( costheCMS < m_param.costheCut[0] ) || ( costheCMS > m_param.costheCut[1] ) )
1035 dr = rectrk->
getDr();
1036 if ( fabs( dr ) > m_param.drCut )
1043 dz = rectrk->
getDz();
1044 if ( fabs( dz ) > m_param.dzCut )
1051 if ( ( fabs( p ) < m_param.pCut[0] ) || ( fabs( p ) > m_param.pCut[1] ) )
1059 if ( p < 0 ) charge = -1;
1060 if ( (
abs( m_param.charge ) == 1 ) && ( charge != m_param.charge ) ) {
continue; }
1068 if ( fgHitLay[lay] ) nhitlay++;
1070 if ( nhitlay < m_param.nHitLayCut )
1077 if ( nhitRec < m_param.nHitCut )
1092 int cellTrkPass[43];
1093 bool fgPass = getCellTrkPass( event, i, cellTrkPass );
1094 for ( lay = 0; lay < m_nlayer; lay++ )
1098 if ( ( 15 == lay ) || ( 16 == lay ) || ( 18 == lay ) || ( 19 == lay ) || ( 40 == lay ) ||
1099 ( 41 == lay ) || ( 42 == lay ) )
1101 int iCell = cellTrkPass[lay];
1102 if ( fgPass && ( iCell >= 0 ) && m_fgGoodWire[lay][iCell] ) m_effNtrk->Fill( lay );
1103 else fgAdd[lay] = 1;
1105 else { m_effNtrk->Fill( lay ); }
1110 m_hchisq->Fill( chisq );
1115 m_hptPos->Fill( pt );
1117 m_hp_cms->Fill(
p_cms );
1119 m_hpPoscms->Fill(
p_cms );
1123 m_hpt->Fill( -1.0 * pt );
1124 m_hptNeg->Fill( -1.0 * pt );
1125 m_hp->Fill( -1.0 * p );
1126 m_hp_cms->Fill( -1.0 *
p_cms );
1127 m_hpNeg->Fill( -1.0 * p );
1128 m_hpNegcms->Fill( -1.0 *
p_cms );
1132 pTrk[i] = fabs( p );
1133 pTrkcms[i] = fabs(
p_cms );
1136 dr = rectrk->
getDr();
1139 dz = rectrk->
getDz();
1141 lamda = atan( tanl );
1142 theta =
HFPI - lamda;
1145 m_hphi0->Fill( phi0 );
1146 m_hkap->Fill( kap );
1148 m_htanl->Fill( tanl );
1149 m_hcosthe->Fill(
cos( theta ) );
1150 if ( pt > 0 ) m_hcosthePos->Fill(
cos( theta ) );
1151 else m_hcostheNeg->Fill(
cos( theta ) );
1153 philab = phi0 +
HFPI;
1154 if ( philab >
PI2 ) philab -=
PI2;
1157 phiBin = (int)( philab / m_phiWid );
1158 phiBinCms = (int)( phicms / m_phiWid );
1159 theBin = (int)( (
cos( theta ) + 1.0 ) / m_theWid );
1160 theBinCms = (int)( (
cos( thetacms ) + 1.0 ) / m_theWid );
1161 if ( phiBin < 0 ) phiBin = 0;
1162 if ( phiBin >= NPhiBin ) phiBin = NPhiBin - 1;
1163 if ( phiBinCms < 0 ) phiBinCms = 0;
1164 if ( phiBinCms >= NPhiBin ) phiBinCms = NPhiBin - 1;
1165 if ( theBin < 0 ) theBin = 0;
1166 if ( theBin >= NThetaBin ) theBin = NThetaBin - 1;
1167 if ( theBinCms < 0 ) theBinCms = 0;
1168 if ( theBinCms >= NThetaBin ) theBinCms = NThetaBin - 1;
1172 m_ppPhi[phiBin]->Fill( p );
1173 m_ppPhiCms[phiBinCms]->Fill(
p_cms );
1174 m_ppThe[theBin]->Fill( p );
1175 m_ppTheCms[theBinCms]->Fill(
p_cms );
1176 m_ppThePhi[theBin][phiBin]->Fill( p );
1177 m_ppThePhiCms[theBinCms][phiBinCms]->Fill(
p_cms );
1181 m_pnPhi[phiBin]->Fill( -1.0 * p );
1182 m_pnPhiCms[phiBinCms]->Fill( -1.0 *
p_cms );
1183 m_pnThe[theBin]->Fill( -1.0 * p );
1184 m_pnTheCms[theBinCms]->Fill( -1.0 *
p_cms );
1185 m_pnThePhi[theBin][phiBin]->Fill( -1.0 * p );
1186 m_pnThePhiCms[theBinCms][phiBinCms]->Fill( -1.0 *
p_cms );
1189 x0 = dr *
cos( phi0 );
1190 y0 = dr *
sin( phi0 );
1193 if ( m_nGrPoint < 10000 )
1195 m_grX0Y0->SetPoint( m_nGrPoint, x0, y0 );
1203 phibinm = phiBinCms;
1209 phibinp = phiBinCms;
1220 for ( k = 0; k < nhitRec; k++ )
1226 lr = rechit->
getLR();
1234 wir = m_mdcGeomSvc->Wire( lay, cel )->Id();
1236 m_cel[lay] = (long)cel;
1237 m_lr[lay] = (long)lr;
1244 m_entr[lay] = entr * 180.0 / 3.14;
1245 m_zhit[lay] = rechit->
getZhit();
1246 m_qhit[lay] = rechit->
getQhit();
1255 ( m_zhit[lay] - m_zw[wir] ) * ( m_xe[wir] - m_xw[wir] ) / ( m_ze[wir] - m_zw[wir] ) +
1258 ( m_zhit[lay] - m_zw[wir] ) * ( m_ye[wir] - m_yw[wir] ) / ( m_ze[wir] - m_zw[wir] ) +
1260 rr = sqrt( ( xx * xx ) + ( yy * yy ) );
1261 dphi = fabs( doca ) / m_radii[lay];
1263 if ( yy >= 0 ) wphi = acos( xx / rr );
1264 else wphi =
PI2 - acos( xx / rr );
1265 if ( 1 == lr ) hitphi = wphi + dphi;
1266 else hitphi = wphi - dphi;
1267 if ( hitphi < 0 ) hitphi +=
PI2;
1268 else if ( hitphi >
PI2 ) hitphi -=
PI2;
1270 m_hitphi[lay] = hitphi;
1272 if ( ( fabs( doca ) > m_docaMax[lay] ) || ( fabs( resiExc ) > m_param.resiCut[lay] ) )
1275 if ( m_param.fgAdjacLayerCut )
1279 if ( !fgHitLay[1] )
continue;
1281 else if ( 42 == lay )
1283 if ( !fgHitLay[41] )
continue;
1287 if ( ( !fgHitLay[lay - 1] ) && ( !fgHitLay[lay + 1] ) )
continue;
1290 if ( m_param.fgBoundLayerCut && m_layBound[lay] &&
1291 ( ( !fgHitLay[lay - 1] ) || ( !fgHitLay[lay + 1] ) ) )
1296 if ( ( 1 == m_param.hitStatCut ) && ( 1 != stat ) )
continue;
1299 if ( ( 1 == m_param.fillNtuple ) && ( m_nEvtNtuple < m_param.nEvtNtuple ) )
1300 { m_xtTuple[lay]->write(); }
1302 if ( 1 == m_param.hitStatCut )
1304 if ( ( 0 == fgAdd[lay] ) && ( 1 == stat ) )
1306 m_effNtrkRecHit->Fill( lay );
1312 if ( 0 == fgAdd[lay] )
1314 m_effNtrkRecHit->Fill( lay );
1320 if ( lay < 8 ) nhitCalInn++;
1321 else if ( lay < 20 ) nhitCalStp++;
1324 m_wirehitmap->Fill( wir );
1325 m_layerhitmap->Fill( lay );
1327 m_htraw[lay]->Fill( traw );
1328 m_htdr[lay]->Fill( tdr );
1329 m_htdrlr[lay][lr]->Fill( tdr );
1330 m_hadc[lay]->Fill( qhit );
1332 m_hresAllInc->Fill( resiInc );
1333 m_hresAllExc->Fill( resiExc );
1334 double resiAve = 0.5 * ( resiInc + resiExc );
1335 m_hresAllAve->Fill( resiAve );
1336 if ( yy > 0 ) m_hresAllExcUp->Fill( resiExc );
1337 else m_hresAllExcDw->Fill( resiExc );
1341 m_hresInnInc->Fill( resiInc );
1342 m_hresInnExc->Fill( resiExc );
1343 if ( yy > 0 ) m_hresInnExcUp->Fill( resiExc );
1344 else m_hresInnExcDw->Fill( resiExc );
1346 else if ( lay < 20 )
1348 m_hresStpInc->Fill( resiInc );
1349 m_hresStpExc->Fill( resiExc );
1350 if ( yy > 0 ) m_hresStpExcUp->Fill( resiExc );
1351 else m_hresStpExcDw->Fill( resiExc );
1355 m_hresOutInc->Fill( resiInc );
1356 m_hresOutExc->Fill( resiExc );
1357 if ( yy > 0 ) m_hresOutExcUp->Fill( resiExc );
1358 else m_hresOutExcDw->Fill( resiExc );
1361 int qbin = (int)( ( qhit - 100.0 ) / 100.0 );
1362 if ( qbin >= 0 && qbin < 14 )
1364 m_hresAveAllQ[qbin]->Fill( resiAve );
1365 m_hresAveLayQ[lay][qbin]->Fill( resiAve );
1366 if ( lay > 7 ) m_hresAveOutQ[qbin]->Fill( resiAve );
1369 if ( ( !m_param.cosmicDwTrk ) || ( m_param.cosmicDwTrk && ( yy < 0 ) ) )
1371 m_hresInc[lay]->Fill( resiInc );
1372 m_hreslrInc[lay][lr]->Fill( resiInc );
1373 m_hresExc[lay]->Fill( resiExc );
1374 m_hreslrExc[lay][lr]->Fill( resiExc );
1375 m_hresAve[lay]->Fill( resiAve );
1376 m_hreslrAve[lay][lr]->Fill( resiAve );
1379 int iPhi = (int)( hitphi * 20.0 /
PI2 );
1380 if ( iPhi >= 20 ) iPhi = 19;
1381 m_hresphi[lay][iPhi]->Fill( ( resiInc + resiExc ) * 0.5 );
1384 bin = (int)( fabs( rechit->
getDmeas() ) / m_dwid );
1385 iEntr = m_mdcFunSvc->getSdEntrIndex( entr );
1386 if ( 1 == m_nEntr[lay] ) { iEntr = 0; }
1387 else if ( 2 == m_nEntr[lay] )
1389 if ( entr > 0.0 ) iEntr = 1;
1392 else if ( 3 == m_nEntr[lay] )
1394 double entrBinWid = 0.174532925;
1395 iEntr = (int)( fabs( entr ) / entrBinWid );
1396 if ( iEntr > 2 ) iEntr = 2;
1400 key = getHresId( lay, iEntr, lr,
bin );
1401 if ( 1 == m_mapr2d.count(
key ) )
1403 hid = m_mapr2d[
key];
1404 m_hr2dInc[hid]->Fill( resiInc );
1405 m_hr2dExc[hid]->Fill( resiExc );
1409 if ( ( tdr > 0 ) && ( tdr < 750 ) )
1411 if ( tdr < 300 )
bin = (int)( tdr / 10.0 );
1412 else bin = (int)( ( tdr - 300.0 ) / 30.0 ) + 29;
1413 m_hr2t[lay][iEntr][lr][
bin]->Fill( resiExc );
1417 m_hnhitsCal->Fill( nhitCal );
1418 m_hnhitsCalInn->Fill( nhitCalInn );
1419 m_hnhitsCalStp->Fill( nhitCalStp );
1420 m_hnhitsCalOut->Fill( nhitCalOut );
1422 m_hnTrkCal->Fill( ntrkCal );
1425 if ( pTrk[0] > pTrk[1] ) m_hpMax->Fill( pTrk[0] );
1426 else m_hpMax->Fill( pTrk[1] );
1428 if ( pTrkcms[0] > pTrkcms[1] ) m_hpMaxCms->Fill( pTrkcms[0] );
1429 else m_hpMaxCms->Fill( pTrkcms[1] );
1431 if ( ntrkCal > 0 ) m_hTesCalUse->Fill( tes );
1434 if ( ( fabs( zminus ) < 9000.0 ) && ( fabs( zplus ) < 9000.0 ) ) delZ0 = zplus - zminus;
1435 m_hdelZ0->Fill( delZ0 );
1437 if ( 1 == pp.size() * pm.size() )
1439 HepLorentzVector ptot = pp[0] + pm[0];
1440 bool fourmomcut =
false;
1443 fourmomcut = ( fabs( ptot.x() - 0.04 ) < 0.026 ) && ( fabs( ptot.y() ) < 0.026 ) &&
1444 ( fabs( ptot.z() - 0.005 ) < 0.036 ) && ( fabs( ptot.e() - ecm ) < 0.058 );
1449 HepLorentzVector psip( xboost, yboost, zboost, ecm );
1450 Hep3Vector boostv = psip.boostVector();
1451 pp[0].boost( -boostv );
1452 pm[0].boost( -boostv );
1453 m_hp_cut->Fill( pp[0].rho() );
1454 m_hp_cut->Fill( pm[0].rho() );
1459 for ( i = 0; i < ntrk; i++ ) pTrk[i] = ( event->
getRecTrk( i ) )->getP();
1460 if ( ( 5 == m_param.particle ) && ( 2 == ntrk ) && ( fabs( pTrk[0] ) < 5 ) &&
1461 ( fabs( pTrk[1] ) < 5 ) )
1466 m_tesFlagcos = esTimeflag;
1467 for ( i = 0; i < ntrk; i++ )
1469 rectrk =
event->getRecTrk( i );
1474 lamda = atan( tanl );
1475 theta =
HFPI - lamda;
1477 if ( phi0 < ( 2.0 *
HFPI ) )
1480 m_pUpcos = rectrk->
getP();
1481 m_ptUpcos = rectrk->
getPt();
1483 m_drUpcos = rectrk->
getDr();
1484 m_dzUpcos = rectrk->
getDz();
1485 m_ctheUpcos =
cos( theta );
1490 m_pDwcos = rectrk->
getP();
1491 m_ptDwcos = rectrk->
getPt();
1493 m_drDwcos = rectrk->
getDr();
1494 m_dzDwcos = rectrk->
getDz();
1495 m_ctheDwcos =
cos( theta );
1497 if ( m_pDwcos > 0 ) m_chargecos = 1;
1498 else m_chargecos = 0;
1504 if ( 1 == m_param.fgCalDetEffi ) calDetEffi();
1520 Gaudi::svcLocator()->service(
"MessageSvc",
msgSvc );
1521 MsgStream log(
msgSvc,
"MdcCalib" );
1522 log << MSG::DEBUG <<
"MdcCalib::updateConst()" << endmsg;
1536 ofstream feffi(
"MdcLayerEffi.dat" );
1537 for ( lay = 0; lay < m_nlayer; lay++ )
1539 double effNtrk = m_effNtrk->GetBinContent( lay + 1 );
1540 double effGoodHit = m_effNtrkRecHit->GetBinContent( lay + 1 );
1541 nGoodAll += effGoodHit;
1542 if ( lay < 8 ) nGoodInn += effGoodHit;
1543 else if ( lay < 20 ) nGoodStp += effGoodHit;
1544 else nGoodOut += effGoodHit;
1547 if ( lay < 8 ) nTotInn += effNtrk;
1548 else if ( lay < 20 ) nTotStp += effNtrk;
1549 else nTotOut += effNtrk;
1551 effi = (double)effGoodHit / (
double)effNtrk;
1552 effErr = sqrt( effi * ( 1 - effi ) / (
double)effNtrk );
1553 feffi << setw( 5 ) << lay << setw( 15 ) << effi << setw( 15 ) << effErr << setw( 15 )
1554 << effGoodHit << setw( 15 ) << effNtrk << endl;
1556 double effiAll = (double)nGoodAll / (
double)( nTotAll );
1557 double errAll = sqrt( effiAll * ( 1 - effiAll ) / (
double)( nTotAll ) );
1558 double effiInn = (double)nGoodInn / (
double)( nTotInn );
1559 double errInn = sqrt( effiInn * ( 1 - effiInn ) / (
double)( nTotInn ) );
1560 double effiStp = (double)nGoodStp / (
double)( nTotStp );
1561 double errStp = sqrt( effiStp * ( 1 - effiStp ) / (
double)( nTotStp ) );
1562 double effiOut = (double)nGoodOut / (
double)( nTotOut );
1563 double errOut = sqrt( effiOut * ( 1 - effiOut ) / (
double)( nTotOut ) );
1565 <<
"EffiAll: " << setw( 15 ) << effiAll << setw( 15 ) << errAll << setw( 15 )
1566 << nGoodAll << setw( 15 ) << nTotAll << endl;
1568 <<
"EffiInn: " << setw( 15 ) << effiInn << setw( 15 ) << errInn << setw( 15 )
1569 << nGoodInn << setw( 15 ) << nTotInn << endl;
1571 <<
"EffiStp: " << setw( 15 ) << effiStp << setw( 15 ) << errStp << setw( 15 )
1572 << nGoodStp << setw( 15 ) << nTotStp << endl;
1574 <<
"EffiOut: " << setw( 15 ) << effiOut << setw( 15 ) << errOut << setw( 15 )
1575 << nGoodOut << setw( 15 ) << nTotOut << endl;
1579 if ( 0 != m_param.fgCalDetEffi )
1581 int nHitAll[] = { 0, 0 };
1582 int nHitInn[] = { 0, 0 };
1583 int nHitStp[] = { 0, 0 };
1584 int nHitOut[] = { 0, 0 };
1585 ofstream feff2(
"MdcHitEffi.dat" );
1586 for ( lay = 0; lay < m_nlayer; lay++ )
1588 nHitAll[0] += m_hitNum[lay][0];
1589 nHitAll[1] += m_hitNum[lay][1];
1592 nHitInn[0] += m_hitNum[lay][0];
1593 nHitInn[1] += m_hitNum[lay][1];
1595 else if ( lay < 20 )
1597 nHitStp[0] += m_hitNum[lay][0];
1598 nHitStp[1] += m_hitNum[lay][1];
1602 nHitOut[0] += m_hitNum[lay][0];
1603 nHitOut[1] += m_hitNum[lay][1];
1606 effi = (double)m_hitNum[lay][1] / (
double)m_hitNum[lay][0];
1607 effErr = sqrt( effi * ( 1 - effi ) / (
double)m_hitNum[lay][0] );
1608 feff2 << setw( 5 ) << lay << setw( 15 ) << effi << setw( 15 ) << effErr << setw( 15 )
1609 << m_hitNum[lay][1] << setw( 15 ) << m_hitNum[lay][0] << endl;
1611 effiAll = (double)nHitAll[1] / (
double)nHitAll[0];
1612 errAll = sqrt( effiAll * ( 1 - effiAll ) ) / (double)nHitAll[0];
1613 effiInn = (double)nHitInn[1] / (
double)nHitInn[0];
1614 errInn = sqrt( effiInn * ( 1 - effiInn ) ) / (double)nHitInn[0];
1615 effiStp = (double)nHitStp[1] / (
double)nHitStp[0];
1616 errStp = sqrt( effiStp * ( 1 - effiStp ) ) / (double)nHitStp[0];
1617 effiOut = (double)nHitOut[1] / (
double)nHitOut[0];
1618 errOut = sqrt( effiOut * ( 1 - effiOut ) ) / (double)nHitOut[0];
1620 <<
"EffiAll: " << setw( 15 ) << effiAll << setw( 15 ) << errAll << setw( 15 )
1621 << nHitAll[1] << setw( 15 ) << nHitAll[0] << endl;
1623 <<
"EffiInn: " << setw( 15 ) << effiInn << setw( 15 ) << errInn << setw( 15 )
1624 << nHitInn[1] << setw( 15 ) << nHitInn[0] << endl;
1626 <<
"EffiStp: " << setw( 15 ) << effiStp << setw( 15 ) << errStp << setw( 15 )
1627 << nHitStp[1] << setw( 15 ) << nHitStp[0] << endl;
1629 <<
"EffiOut: " << setw( 15 ) << effiOut << setw( 15 ) << errOut << setw( 15 )
1630 << nHitOut[1] << setw( 15 ) << nHitOut[0] << endl;
1644 if ( m_param.calSigma )
1646 ofstream fr2d(
"logr2d.dat" );
1647 for ( lay = 0; lay < m_nlayer; lay++ )
1649 for ( iEntr = 0; iEntr < m_nEntr[lay]; iEntr++ )
1651 for ( lr = 0; lr < 2; lr++ )
1653 fr2d << setw( 3 ) << lay << setw( 3 ) << iEntr << setw( 3 ) << lr << endl;
1654 for (
bin = 0;
bin < m_nBin[lay];
bin++ )
1656 key = getHresId( lay, iEntr, lr,
bin );
1657 hid = m_mapr2d[
key];
1659 if ( 1 == m_param.resiType )
1661 entry = m_hr2dExc[hid]->GetEntries();
1664 m_hr2dExc[hid]->Fit(
"gaus",
"Q" );
1665 sigm[
bin] = m_hr2dExc[hid]->GetFunction(
"gaus" )->GetParameter( 2 );
1667 else if ( entry > 100 ) { sigm[
bin] = m_hr2dExc[hid]->GetRMS(); }
1668 else { sigm[
bin] = 0.2; }
1672 entry = m_hr2dInc[hid]->GetEntries();
1675 m_hr2dInc[hid]->Fit(
"gaus",
"Q" );
1676 sigm[
bin] = m_hr2dInc[hid]->GetFunction(
"gaus" )->GetParameter( 2 );
1678 else if ( entry > 100 ) { sigm[
bin] = m_hr2dInc[hid]->GetRMS(); }
1679 else { sigm[
bin] = 0.2; }
1681 if ( sigm[
bin] < 0.05 ) sigm[
bin] = 0.05;
1685 { sigm[
bin] = sigm[m_nBin[lay] - 1]; }
1689 if ( 1 == m_param.fgCalib[lay] )
1693 if ( 1 == m_nEntr[lay] )
1695 for ( i = 0; i < 6; i++ ) calconst->
resetSdpar( lay, i, lr,
bin, sigm[
bin] );
1697 else if ( 2 == m_nEntr[lay] )
1701 for ( i = 0; i < 3; i++ )
1708 for ( i = 3; i < 6; i++ )
1716 fr2d << setw( 5 ) <<
bin << setw( 15 ) << sigm[
bin] << endl;