306 {
307
308 MsgStream log(
msgSvc(), name());
309 log << MSG::INFO << " tof " << endreq;
310
311
313 double offset=0, t_quality=0, tOffset_b=0, tOffset_e=0;
314 int idtof , tofid_helix[30]={-9},idmatch[3][88]={0},idmatch_emc[3][88]={0} ,idt[15]={0},particleId[30]={0}, tofid_emc[2]={0}, module[20]={0};
315 int idetf, etfid_helix[30]={-9}, idetfmatch[3][36]={-9}, idmatch_etf_emc[3][36]={0}, etfid_emc[2]={0};
316 int ntot=0,in=-1,out=-1, emcflag1=0, emcflag2=0, tof_flag=0;
double bunchtime=
m_bunchtime_MC;
317 double meant[15]={0.},adc[15]={0.},
momentum[15]={0.},r_endtof[10]={0.};
318 double ttof[30]={0.},helztof[30]={0.0},mcztof=0.0,forevtime=0.0,backevtime=0.0,meantev[200]={0.},meantevup[200]={0.0},meantevdown[200]={0.0};
319 double t0forward=0,t0backward=0,t0forward_trk=0,t0backward_trk=0;
320 double t0forward_add=0,t0backward_add=0,t_Est=-999;
321 double thetaemc_rec[20]={0.},phiemc_rec[20]={0.},energy_rec[20]={0.},xemc_rec[20]={0.},yemc_rec[20]={0.},zemc_rec[20]={0.};
322 double r_endetf[10]={0.}, tetf[30]={0.}, helzetf[30]={0.}, helpathetf[36]={0.}, abmom2etf[36]={0.};
323
324 int nmatch1=0,nmatch2=0,nmatch_barrel=0,nmatch_end=0,nmatch_mdc=0, nmatch_barrel_1=0, nmatch_barrel_2=0,nmatch=0,ntofup=0,ntofdown=0;
325 double sum_EstimeMdc=0,sum_EstimeMdcMC=0;
326 int nbunch=0,tEstFlag=0,
runNo=0;
327 double helpath[88]={0.},helz[88]={0.},abmom2[88]={0.};
328 double mcTestime=0,trigtiming=0;
329 double mean_tdc_btof[2][88]={0.}, mean_tdc_etof[3][48]={0.}, mean_tdc_etf[3][36][12]={0.};
332 double Testime_fzisan= -999.;
333 int TestimeFlag_fzisan= -999;
334 double TestimeQuality_fzisan= -999.;
335 double Tof_t0Arr[500]={-999.};
336
337 bool useEtofScin = (
m_phase<3 );
338 bool useEtofMRPC = (
m_phase>2 );
339
340
341 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
342 if (!eventHeader) {
343 log << MSG::FATAL << "Could not find Event Header" << endreq;
344 return StatusCode::FAILURE;
345 }
346 log << MSG::INFO << "EsTimeAlg: retrieved event: " << eventHeader->eventNumber() << " run: " << eventHeader->runNumber() << endreq;
347 int eventNo=eventHeader->eventNumber();
348 runNo=eventHeader->runNumber();
349
357 }
359
370 g_bunchtime=8;
371 g_t0offset_b=2.0;
372 g_t0offset_e=2.0;
373 }
374
375 m_pass[0]++;
376 if(
m_evtNo==1 && m_pass[0]%1000 ==0){
377 cout<<"------------------- Events-----------------: "<<m_pass[0]<<endl;
378 }
379 if(
m_debug==4) cout<<
"m_userawtime: "<<m_userawtime<<endl;
380 if(
m_debug==4) cout<<
"EstTofCalibSvc est flag: "<<tofCaliSvc->
ValidInfo()<<endl;
381
383 log << MSG::ERROR << "EstTof Calibration Const is NOT correct! " << endreq;
384 return StatusCode:: FAILURE;
385 }
387 {
388 log << MSG::ERROR << "EstTof Calibration Const is Invalid! " << endreq;
389 return StatusCode::FAILURE;
390 }
392 else m_userawtime=0;
393
394 SmartDataPtr<RecEsTimeCol> aRecestimeCol(eventSvc(),"/Event/Recon/RecEsTimeCol");
395 if (!aRecestimeCol || aRecestimeCol->size()==0) {
396 if(
m_debug==4) log << MSG::INFO <<
"Could not find RecEsTimeCol from fzsian" << endreq;
397 }else{
398 RecEsTimeCol::iterator it_evt = aRecestimeCol->begin();
399 for(; it_evt!=aRecestimeCol->end(); it_evt++){
400 Testime_fzisan = (*it_evt)->getTest();
401 TestimeFlag_fzisan = (*it_evt)->getStat();
402 TestimeQuality_fzisan = (*it_evt)->getQuality();
403
404 log << MSG::INFO << "fzisan : Test = "<<(*it_evt)->getTest()
405 << ", Status = "<<(*it_evt)->getStat() <<endreq;
406
407 if(
m_ntupleflag && m_tuple2) g_Testime_fzisan = Testime_fzisan;
408 }}
409
410 std::string fullPath = "/Calib/EsTimeCal";
411 SmartDataPtr<CalibData::EsTimeCalibData> TEst(m_pCalibDataSvc, fullPath);
412 if(!TEst){ cout<<"ERROR EsTimeCalibData"<<endl;}
413 else{
414 int no = TEst->getTestCalibConstNo();
415
416
417
418
419
420 unsigned int inumber = 0;
421 unsigned int calibNo = TEst->getSize();
422 if( calibNo > 1 ) {
423 for( unsigned int i=0; i<calibNo; i++, inumber++ ) {
424 if( ( TEst->getRunTo(i) != -1 ) && ( TEst->getRunTo(i) < TEst->getRunFrom(i) ) ) {
425 log << MSG::ERROR << "EsTimeCal -- The " << inumber << "th calibration constatns is ABNORMAL! Run From is LARGER than RUN To!" << endreq;
426 return StatusCode::FAILURE;
427 }
428 if( ( TEst->getRunFrom(i) == TEst->getRunTo(i) ) && ( TEst->getEventFrom(i) != -1 ) && ( TEst->getEventTo(i) != -1 ) && ( TEst->getEventFrom(i) > TEst->getEventTo(i) ) ) {
429 log << MSG::ERROR << "EsTimeCal -- The " << inumber << "th calibration constatns is ABNORMAL! Event From is LARGER than Event To!" << endreq;
430 return StatusCode::FAILURE;
431 }
432 }
433
434 inumber = 0;
435 bool filled = false;
436 for( unsigned int i=0; i<calibNo; i++, inumber++ ) {
437 int runFrom = TEst->getRunFrom(i);
438 int runTo = TEst->getRunTo(i);
439 int eventFrom = TEst->getEventFrom(i);
440 int eventTo = TEst->getEventTo(i);
441 if( (
runNo == runFrom ) && ( ( eventFrom == -1 ) || (
eventNo >= eventFrom ) ) ) {
442 if( (
runNo < runTo ) || ( (
runNo == runTo ) && ( ( eventTo == -1 ) || (
eventNo <= eventTo ) ) ) ) {
443 filled = true;
444 break;
445 }
446 }
447 if(
runNo > runFrom ) {
448 if( (
runNo < runTo ) || ( (
runNo == runTo ) && ( ( eventTo == -1 ) || (
eventNo <= eventTo ) ) ) ) {
449 filled = true;
450 break;
451 }
452 }
453 }
454 if( !filled ) {
455 log << MSG::ERROR <<
"EsTimeCal -- For run number:" <<
runNo <<
", NO suitable calibration constant is found!" << endreq;
456 return StatusCode::FAILURE;
457 }
458 }
459
460 log<<MSG::INFO<<"offset barrel t0="<< TEst->getToffsetb(inumber)
461 <<", offset endcap t0="<< TEst->getToffsete(inumber)
462 <<", bunch time ="<<TEst->getBunchTime(inumber)
463 <<endreq;
464 tOffset_b = TEst->getToffsetb(inumber);
465 tOffset_e = TEst->getToffsete(inumber);
466 bunchtime = TEst->getBunchTime(inumber);
467 }
468
469 if(m_userawtime) {
470 tOffset_b=0;
471 tOffset_e=0;
472 }
473 else
474 {
479 }
480
482 {
484 }
485
487
488
489 int digiId;
491 SmartDataPtr<McParticleCol> mcParticleCol(eventSvc(),"/Event/MC/McParticleCol");
492 if (!mcParticleCol) {
493 log << MSG::INFO<< "Could not find McParticle" << endreq;
494 }
495 else{
496 McParticleCol::iterator iter_mc = mcParticleCol->begin();
497 digiId = 0;
498 ntrkMC = 0;
500
501 for (;iter_mc != mcParticleCol->end(); iter_mc++, digiId++) {
502 int statusFlags = (*iter_mc)->statusFlags();
503 int pid = (*iter_mc)->particleProperty();
504 log << MSG::INFO
505 << " MC ParticleId = " << pid
506 << " statusFlags = " << statusFlags
507 << " PrimaryParticle = " <<(*iter_mc)->primaryParticle()
508 << endreq;
510 g_theta0MC[ntrkMC] = (*iter_mc)->initialFourMomentum().theta();
511 g_phi0MC[ntrkMC] = (*iter_mc)->initialFourMomentum().phi();
512 g_pxMC[ntrkMC] = (*iter_mc)->initialFourMomentum().px()/1000;
513 g_pyMC[ntrkMC] = (*iter_mc)->initialFourMomentum().py()/1000;
514 g_pzMC[ntrkMC] = (*iter_mc)->initialFourMomentum().pz()/1000;
515 g_ptMC[ntrkMC] = sqrt(((*iter_mc)->initialFourMomentum().px())*((*iter_mc)->initialFourMomentum().px())+((*iter_mc)->initialFourMomentum().py())*((*iter_mc)->initialFourMomentum().py()))/1000;
516 }
517 if( pid >0 ) {
518 if(m_particleTable->particle( pid ))
charge = m_particleTable->particle( pid )->charge();
519 } else if ( pid <0 ) {
520 if(m_particleTable->particle( -pid )) {
521 charge = m_particleTable->particle( -pid )->charge();
523 }
524 } else {
525 log << MSG::WARNING << "wrong particle id, please check data" <<endreq;
526 }
527 log << MSG::DEBUG
528 <<
"MC ParticleId = " << pid <<
" charge = " <<
charge
529 << endreq;
530 if(
charge !=0 &&
abs(
cos((*iter_mc)->initialFourMomentum().theta()))<0.93){
531 ntrkMC++;
532 }
533 if(((*iter_mc)->primaryParticle())&&
m_ntupleflag && m_tuple2){
534 g_mcTestime=(*iter_mc)->initialPosition().t();
535 mcTestime=(*iter_mc)->initialPosition().t();
536 }
537 }
539 }
540 }
541 if (
m_debug) cout<<
"bunchtime: "<<bunchtime<<endl;
542
543 SmartDataPtr<RecMdcTrackCol> newtrkCol(eventSvc(),"/Event/Recon/RecMdcTrackCol");
544 if (!newtrkCol || newtrkCol->size()==0) {
545 log << MSG::INFO<< "Could not find RecMdcTrackCol" << endreq;
546 } else{
547 log << MSG::INFO << "Begin to check RecMdcTrackCol"<<endreq;
548 RecMdcTrackCol::iterator iter_trk = newtrkCol->begin();
549 for( ; iter_trk != newtrkCol->end(); iter_trk++){
550 log << MSG::DEBUG << "retrieved MDC track:"
551 << " Track Id: " << (*iter_trk)->trackId()
552 << " Phi0: " << (*iter_trk)->helix(0)
553 << " kappa: " << (*iter_trk)->helix(2)
554 << " Tanl: " << (*iter_trk)->helix(4)
555 << " Phi terminal: "<< (*iter_trk)->getFiTerm()
556 << endreq
557 << "Number of hits: "<< (*iter_trk)->getNhits()
558 << " Number of stereo hits " << (*iter_trk)->nster()
559 << endreq;
560 double kappa = (*iter_trk)->helix(2);
561 double tanl = (*iter_trk)->helix(4);
562 momentum[ntot] = 1./fabs(kappa) * sqrt(1.+tanl*tanl);
563 if((*iter_trk)->helix(3)>50.0) continue;
564 ntot++;
565 if (ntot>15) break;
566 }
567 }
568
569
570 int emctrk=0;
571 SmartDataPtr<RecEmcShowerCol> aShowerCol(eventSvc(),"/Event/Recon/RecEmcShowerCol");
572 if (!aShowerCol || aShowerCol->size()==0) {
573 log << MSG::WARNING << "Could not find RecEmcShowerCol" << endreq;
574 } else{
575 RecEmcShowerCol::iterator iShowerCol=aShowerCol->begin();
576 for(;iShowerCol!=aShowerCol->end();iShowerCol++,emctrk++){
577 if(emctrk>20) break;
578 phiemc_rec[emctrk]=(*iShowerCol)->position().phi();
579 thetaemc_rec[emctrk]=(*iShowerCol)->position().theta();
580 energy_rec[emctrk]=(*iShowerCol)->energy();
581 xemc_rec[emctrk]=(*iShowerCol)->x();
582 yemc_rec[emctrk]=(*iShowerCol)->y();
583 zemc_rec[emctrk]=(*iShowerCol)->z();
584 module[emctrk]=(*iShowerCol)->module();
585 }
586 }
587 for(int i=0; i<2; i++){
588 double fi_endtof = atan2(yemc_rec[i],xemc_rec[i] );
589 if( fi_endtof<0 ) { fi_endtof=2*3.141593+fi_endtof; }
590 if( module[i]==1 ) {
591 int Tofid = (int)(fi_endtof/(3.141593/44));
592 if(Tofid>87) Tofid=Tofid-88;
593 tofid_emc[i]=Tofid;
594 idmatch_emc[1][Tofid]=1;
595 }
596 else{
597 if( useEtofScin ) {
598 int Tofid =(int)(fi_endtof/(3.141593/24));
599 if( Tofid>47) Tofid=Tofid-48;
600 tofid_emc[i]= Tofid;
601 if(module[i]==2) idmatch_emc[2][Tofid]=1;
602 if(module[i]==0) idmatch_emc[0][Tofid]=1;
603 }
604 if( useEtofMRPC ) {
605 int Tofid = (int)(fi_endtof/(3.141593/18));
606 if( Tofid>35) Tofid=Tofid-36;
607 etfid_emc[i]= Tofid;
608 if(module[i]==2) idmatch_etf_emc[2][Tofid]=1;
609 if(module[i]==0) idmatch_etf_emc[0][Tofid]=1;
610 }
611 }
612 }
613
614 ntrk=0;
615 if (ntot > 0) {
616 RecMdcTrackCol::iterator iter_trk = newtrkCol->begin();
617 for( int idfztrk=0; iter_trk != newtrkCol->end(); iter_trk++,idfztrk++){
618 double mdcftrk[5];
619 mdcftrk[0] = (*iter_trk)->helix(0);
620 mdcftrk[1] = (*iter_trk)->helix(1);
621 mdcftrk[2] =-(*iter_trk)->helix(2);
622 mdcftrk[3] = (*iter_trk)->helix(3);
623 mdcftrk[4] = (*iter_trk)->helix(4);
624
625 if(optCosmic==0){
627
629
630
631
633 double z_emc = EmcHit.
Z_emc;
635 double phiemc_ext = EmcHit.
phi_emc;
636
637 for(
int t=0;
t<emctrk;
t++){
638 if((thetaemc_ext>=(thetaemc_rec[
t]-0.1)) && (thetaemc_ext<=(thetaemc_rec[
t]+0.1)) && (phiemc_ext>=(phiemc_rec[
t]-0.1)) && (phiemc_ext<=(phiemc_rec[
t]+0.1))){
639 if((energy_rec[
t])>=(0.85*
momentum[idfztrk]))
640 particleId[idfztrk]=1;
641 }
642 }
643 }
644
645 if(particleId[idfztrk]!=1){
646
647 SmartDataPtr<RecMdcDedxCol> newdedxCol(eventSvc(),"/Event/Recon/RecMdcDedxCol");
648 if (!newdedxCol || newdedxCol->size()==0) {
649 log << MSG::WARNING<< "Could not find RecMdcDedxCol" << endreq;
650 }
651 else{
652 RecMdcDedxCol::iterator it_dedx = newdedxCol->begin();
653 for( int npid=0; it_dedx != newdedxCol->end(); it_dedx++,npid++) {
654 log << MSG::INFO << "retrieved MDC dE/dx: "
655 << "dEdx Id: " << (*it_dedx)->trackId()
656 << " particle Id: "<< (*it_dedx)->particleType() <<endreq;
657 if((*it_dedx)->particleType() ==
proton){
658 particleId[npid]= 5;
659 }
660 if(
m_debug==4) cout<<
"dedx pid: "<<particleId[npid]<<endl;
661 }
662 }
663 }
664 }
665
666 idtof = -100;
667 idetf = -100;
669
670
672
673
675
677 if(tofpart < 0) continue;
678
679
680 bool useBarrelScin = ( tofpart==1 );
681 bool useEndcapScin = ( ( tofpart==0 || tofpart==2 ) && useEtofScin );
682 bool useEndcapMRPC = ( ( tofpart==0 || tofpart==2 ) && useEtofMRPC );
683
684 if( useBarrelScin || useEndcapScin ) {
685 idtof = TofHit.
Tofid;
686 tofid_helix[idfztrk] = TofHit.
Tofid;
687 }
688 if( useEndcapMRPC ) {
689 idetf = TofHit.
Etfid;
690 etfid_helix[idfztrk] = TofHit.
Etfid;
691 }
692
693 log << MSG::INFO << "helix to tof hit part: "<<tofpart<<" tof id: "<< idtof << " etf id:" << idetf << endreq;
694 if(
m_debug==4 ) cout <<
"helix to tof hit part, Id: "<<tofpart<<
" , "<< idtof <<endl;
695 if( ( useBarrelScin && idtof>=0 && idtof<=87 ) || ( useEndcapScin && idtof>=0 && idtof<=47 ) || ( useEndcapMRPC && idetf>=0 && idetf<=35 ) ) {
696
697 double abmom = 0.0;
698 if( useEndcapMRPC ) {
699 idetfmatch[tofpart][idetf]= 1;
701 helz[idetf] = TofHit.
Z_etf;
702 abmom = 1./fabs(TofHit.
Kappa) * sqrt(1.+TofHit.
Tanl*TofHit.
Tanl);
703 if(abmom<0.1) continue;
704 abmom2etf[idetf] = abmom*abmom;
705 r_endetf[idfztrk]= TofHit.
r_etf;
706 helzetf[idfztrk] = helz[idetf];
707 }
708
709 if( useBarrelScin || useEndcapScin ) {
710 idmatch[tofpart][idtof] = 1;
711 helpath[idtof] = TofHit.
Pathl;
712 helz[idtof] = TofHit.
Z_tof;
713 abmom = 1./fabs(TofHit.
Kappa) * sqrt(1.+TofHit.
Tanl*TofHit.
Tanl);
714 if(abmom<0.1) continue;
715 abmom2[idtof] = abmom*abmom;
717 helztof[idfztrk] = helz[idtof];
718 }
719
721 cout << "Scintillator info trk number=" << idfztrk << " tofpart=" << tofpart << " idtof=" << idtof << " helpath=" << helpath[idtof] << " helz=" << helz[idtof] << " abmom=" << abmom2[idtof] << " r=" << r_endtof[idfztrk] << " helztof=" << helz[idtof] << endl;
722 cout << "MRPC info trk number=" << idfztrk << " tofpart=" << tofpart << " idetf=" << idetf << " helpath=" << helpathetf[idetf] << " helz=" << helzetf[idetf] << " abmom=" << abmom2etf[idetf] << " r=" << r_endetf[idfztrk] << " helztof=" << helzetf[idetf] << endl;
723 }
724
725 double vel = 1.0e-6;
726 if( optCosmic==0 ) {
727
728 if( useEndcapMRPC ) {
729 if( particleId[idfztrk] == 1 ) {
730 tetf[idfztrk] = sqrt(
ELMAS2/abmom2etf[idetf]+1)* helpathetf[idetf]/
VLIGHT;
732 }
733 else if( particleId[idfztrk] == 5 ) {
734 tetf[idfztrk] = sqrt(
PROTONMAS2/abmom2etf[idetf]+1)* helpathetf[idetf]/
VLIGHT;
736 }
737 else {
738 tetf[idfztrk] = sqrt(
PIMAS2/abmom2etf[idetf]+1)* helpathetf[idetf]/
VLIGHT;
740 }
741 }
742
743 if( useBarrelScin || useEndcapScin ) {
744 if( particleId[idfztrk] == 1 ) {
745 ttof[idfztrk] = sqrt(
ELMAS2/abmom2[idtof]+1)* helpath[idtof]/
VLIGHT;
747 }
748 else if( particleId[idfztrk] == 5 ) {
751 }
752 else {
753 ttof[idfztrk] = sqrt(
PIMAS2/abmom2[idtof]+1)* helpath[idtof]/
VLIGHT;
755 }
756 }
757
758 }
759 else{
760
761 if( useEndcapMRPC ) {
762 tetf[idfztrk] = sqrt(
MUMAS2/abmom2etf[idetf]+1)* helpathetf[idetf]/
VLIGHT;
764 }
765
766 if( useBarrelScin || useEndcapMRPC ) {
767 ttof[idfztrk] = sqrt(
MUMAS2/abmom2[idtof]+1)* helpath[idtof]/
VLIGHT;
769 }
770 }
771
773 g_vel[idfztrk] = vel;
774 g_abmom[idfztrk] = abmom;
775 if( useEndcapMRPC ) {
776 g_ttof[idfztrk] = tetf[idfztrk];
777 }
778 if( useBarrelScin || useEndcapScin ) {
779 g_ttof[idfztrk] = ttof[idfztrk];
780 }
781 g_pid[idfztrk] = particleId[idfztrk];
782 }
783 }
784 ntrk++;
785 }
787 }
788
789
790
792 SmartDataPtr<TofMcHitCol> tofmcHitCol(eventSvc(),"/Event/MC/TofMcHitCol");
793 if (!tofmcHitCol) {
794 log << MSG::ERROR<< "Could not find McParticle" << endreq;
795
796 }
797 else{
798 TofMcHitCol::iterator iter_mctof = tofmcHitCol->begin();
799
800 for (;iter_mctof !=tofmcHitCol->end(); iter_mctof++, digiId++) {
801 log << MSG::INFO
802 << " TofMcHit Flight Time = " << (*iter_mctof)->getFlightTime()
803 << " zPosition = " << ((*iter_mctof)->getPositionZ())/10
804 << " xPosition = " <<((*iter_mctof)->getPositionX())/10
805 << " yPosition = " <<((*iter_mctof)->getPositionY())/10
806 << endreq;
807 }
808 }
809 }
810
811
813
814 for(TofDataVector::iterator iter2 = tofDigiVec.begin();iter2 != tofDigiVec.end(); iter2++) {
815 int barrelid;
816 int layerid;
817 int tofid;
818 int strip;
819
820 if( !( (*iter2)->is_mrpc() ) ) {
821 if( (*iter2)->barrel() ) {
822 barrelid = 1;
823 tofid = (*iter2)->tofId();
824 layerid = (*iter2)->layer();
825 if(layerid==1) tofid=tofid-88;
826 if( ((*iter2)->quality() & 0x5)==0x5 && (*iter2)->times()==1 ) {
827 double ftdc = (*iter2)->tdc1();
828 double btdc = (*iter2)->tdc2();
829 mean_tdc_btof[layerid][tofid]=(ftdc+btdc)/2;
830 }
831 else if( ((*iter2)->quality() & 0x5)==0x5 && (*iter2)->times()>1 ) {
832 double ftdc = (*iter2)->tdc1();
833 double btdc = (*iter2)->tdc2();
834 mean_tdc_btof[layerid][tofid]=(ftdc+btdc)/2;
835 }
836 }
837 else{
838 tofid = (*iter2)->tofId();
839 if(tofid<48) barrelid=0;
840 if(tofid>47) barrelid=2;
841 if(barrelid==2) tofid=tofid-48;
842
843 if((*iter2)->times()==1){
844 double ftdc= (*iter2)->tdc();
845 mean_tdc_etof[barrelid][tofid]=ftdc;
846 }
847 else if(((*iter2)->times()>1) && ((*iter2)->times()<5)){
848 double ftdc= (*iter2)->tdc();
849 mean_tdc_etof[barrelid][tofid]=ftdc;
850 }
851 }
852 }
853 else {
854 tofid = (*iter2)->tofId();
855 strip = (*iter2)->strip();
856 if( tofid<36 ) barrelid=0;
857 if( tofid>35 ) barrelid=2;
858 if(barrelid==2) tofid=tofid-36;
859 if( ((*iter2)->quality() & 0x5)==0x5 && (*iter2)->times()==1 ) {
860 double ftdc = (*iter2)->tdc1();
861 double btdc = (*iter2)->tdc2();
862 mean_tdc_etf[barrelid][tofid][strip]=(ftdc+btdc)/2;
863 }
864 else if( ((*iter2)->quality()&0x5)==0x5 && (*iter2)->times()>1 ) {
865 double ftdc = (*iter2)->tdc1();
866 double btdc = (*iter2)->tdc2();
867 mean_tdc_etf[barrelid][tofid][strip]=(ftdc+btdc)/2;
868 }
869 }
870 }
871
872 double difftof_b=100, difftof_e=100;
873 int tofid1=tofid_emc[0];
874 int tofid2=tofid_emc[1];
875 if( module[0]==1 && module[1]==1 ) {
876 for(int i=0; i<2; i++){
877 for(int m=0; m<2; m++){
878 for(int j=-2; j<3; j++){
879 for(int k=-2; k<3; k++){
880 int p=tofid1+j;
882 if(p<0) p=p+88;
883 if(p>87) p=p-88;
886 if(mean_tdc_btof[i][p]==0 || mean_tdc_btof[m][
q]==0)
continue;
887 double difftof_b_temp = mean_tdc_btof[i][p]-mean_tdc_btof[m][
q];
888 if(
abs(difftof_b_temp)<
abs(difftof_b )) difftof_b =difftof_b_temp;
890 }
891 }
892 }
893 }
894 }
895
896 if( useEtofMRPC ) {
897 if( module[0]!=1 && module[1]!=1 ) {
898 tofid1 = etfid_emc[0];
899 tofid2 = etfid_emc[1];
900 for(int i=-1; i<2; i++){
901 for(int j=-1; j<2; j++){
902 int m=tofid1+i;
904 if(m<0) m=36+m;
905 if(m>35) m=m-36;
908 if( mean_tdc_etf[0][m] && mean_tdc_etf[2][
n]){
909 double difftof_e_temp= mean_tdc_etf[0][m]-mean_tdc_etf[2][
n];
910 if(
abs(difftof_e_temp) <
abs(difftof_e)) difftof_e= difftof_e_temp;
912 }
913 }
914 }
915 }
916 }
917
918 if( useEtofScin ) {
919 if( module[0]!=1 && module[1]!=1 ) {
920 for(int i=-1; i<2; i++){
921 for(int j=-1; j<2; j++){
922 int m=tofid1+i;
924 if(m<0) m=48+m;
925 if(m>47) m=m-48;
928 if( mean_tdc_etof[0][m] && mean_tdc_etof[2][
n]){
929 double difftof_e_temp= mean_tdc_etof[0][m]-mean_tdc_etof[2][
n];
930 if(
abs(difftof_e_temp) <
abs(difftof_e)) difftof_e= difftof_e_temp;
932 }
933 }
934 }
935 }
936 }
937
939 else optCosmic=0;
940
941 digiId = 0;
942 unsigned int tofid;
943 unsigned int barrelid;
944 unsigned int layerid;
945 t0forward_add = 0;
946 t0backward_add = 0;
947 TofDataVector::iterator iter2 = tofDigiVec.begin();
948 for (;iter2 != tofDigiVec.end(); iter2++, digiId++){
949 log << MSG::INFO << "TOF digit No: " << digiId << endreq;
950 barrelid=(*iter2)->barrel();
951 if((*iter2)->barrel()==0) continue;
952 if( ((*iter2)->quality() & 0x5)==0x5 && (*iter2)->times()==1 ) {
953 tofid = (*iter2)->tofId();
954 layerid = (*iter2)->layer();
955 if(layerid==1) tofid=tofid-88;
956 log<< MSG::INFO
957 <<" TofId = "<<tofid
958 <<" barrelid = "<<barrelid
959 <<" layerid = "<<layerid
960 <<" ForwordADC = "<<(*iter2)->adc1()
961 <<" ForwordTDC = "<<(*iter2)->tdc1()
962 <<" BackwordADC = "<<(*iter2)->adc2()
963 <<" BackwordTDC = "<<(*iter2)->tdc2()
964 << endreq;
965
966 double ftdc = (*iter2)->tdc1();
967 double btdc = (*iter2)->tdc2();
968 if(
m_debug==4) cout<<
"barrel 1 ::layer, barrel, tofid, ftdc, btdc: "<<layerid<<
" , "<<barrelid<<
" , "<<tofid<<
" , "<<ftdc<<
" , "<<btdc<<endl;
969 double fadc = (*iter2)->adc1();
970 double badc = (*iter2)->adc2();
971 int idptof = ((tofid-1) == -1) ? 87 : tofid-1;
972 int idntof = ((tofid+1) == 88) ? 0 : tofid+1;
973 double ztof = fabs((ftdc-btdc)/2)*17.7 , ztof2 = ztof*ztof;
974 double mean_tdc = 0.5*(btdc+ftdc);
976
977 if(idmatch[barrelid][tofid]==1||idmatch[barrelid][idptof]==1||idmatch[barrelid][idntof]==1){
978 for(int i=0;i<=ntot;i++){
979 if(ttof[i]!=0 && ftdc>0){
980 if((tofid_helix[i] == tofid) || (tofid_helix[i] == idntof) ||(tofid_helix[i] == idptof)) {
981 if(barrelid==1 && helztof[i]<117 && helztof[i]>-117 ){
982 if (optCosmic && tofid<44) {
983 backevtime = -ttof[i] + (115 + helztof[i])*0.0566 + 12.;
984 forevtime = -ttof[i] + (115 - helztof[i])*0.0566 + 12.;
985 meantevup[ntofup]=(backevtime+forevtime)/2;
986 ntofup++;
987 }
988 else{
989 backevtime = ttof[i] + (115 + helztof[i])*0.0566 + 12.;
990 forevtime = ttof[i] + (115 - helztof[i])*0.0566 + 12.;
991 meantevdown[ntofdown]=(backevtime+forevtime)/2;
992 ntofdown++;
993 }
994 if( (*iter2)->adc1()<0.0 || (*iter2)->adc2()<0.0 || m_userawtime){
995 t0forward_trk = ftdc - forevtime ;
996 t0backward_trk = btdc - backevtime ;
997 }
998 else{
999 t0forward_trk = tofCaliSvc->
BTime1((*iter2)->adc1(), (*iter2)->tdc1(),helztof[i], (*iter2)->tofId())-ttof[i];
1000 t0backward_trk = tofCaliSvc->
BTime2((*iter2)->adc2(), (*iter2)->tdc2(),helztof[i], (*iter2)->tofId())-ttof[i];
1001 if (optCosmic && tofid<44) {
1002 t0forward_trk = tofCaliSvc->
BTime1((*iter2)->adc1(), (*iter2)->tdc1(),helztof[i], (*iter2)->tofId())+ttof[i];
1003 t0backward_trk = tofCaliSvc->
BTime2((*iter2)->adc2(), (*iter2)->tdc2(),helztof[i], (*iter2)->tofId())+ttof[i];
1004 }
1005 }
1006
1007 if(t0forward_trk<-3 || t0backward_trk<-3 || fabs(t0forward_trk-t0backward_trk)>15.0) continue;
1008 if(!
m_TofOpt&& nmatch_barrel!=0 && fabs((t0forward_trk+t0backward_trk)/2-(t0backward_add+t0forward_add)/2/nmatch_barrel)>11)
continue;
1009 if(
m_debug ==4 ) cout<<
" t0forward_trk, t0backward_trk: "<<t0forward_trk<<
" , "<<t0backward_trk<<endl;
1011 g_t0for[nmatch1] = t0forward_trk ;
1012 g_t0back[nmatch2] = t0backward_trk ;
1013 g_meantdc=(ftdc+btdc)/2;
1014 if(tofid<44) g_ntofup1++;
1015 else g_ntofdown1++;
1016 }
1017 meantev[nmatch]=(backevtime+forevtime)/2;
1018 t0forward_add += t0forward_trk;
1019 t0backward_add += t0backward_trk;
1020 if(nmatch>499) break;
1021 Tof_t0Arr[nmatch]=(t0forward_trk+t0backward_trk)/2.0;
1022 nmatch++;
1023 nmatch1=nmatch1+1;
1024 nmatch2=nmatch2+1;
1025 nmatch_barrel++;
1026 }
1027 }
1028 }
1029 }
1030 }
1031 }
1032 }
1033
1034 if(nmatch_barrel != 0 ){
1036 g_t0barrelTof=( t0forward_add/nmatch_barrel + t0backward_add/nmatch_barrel)/2;
1037 }
1038 tof_flag = 1;
1039 t_quality=1;
1040 }
1041
1042 if(nmatch_barrel==0){
1043 digiId = 0;
1044 t0forward_add = 0;
1045 t0backward_add = 0;
1046 for (TofDataVector::iterator iter2 = tofDigiVec.begin();iter2 != tofDigiVec.end(); iter2++, digiId++) {
1047 log << MSG::INFO << "TOF digit No: " << digiId << endreq;
1048 barrelid=(*iter2)->barrel();
1049 if((*iter2)->barrel()==0) continue;
1050 if( ((*iter2)->quality() & 0x5)==0x5 && (*iter2)->times()>1 ) {
1051 tofid = (*iter2)->tofId();
1052 layerid = (*iter2)->layer();
1053 if(layerid==1) tofid=tofid-88;
1054 log<< MSG::INFO
1055 <<" TofId = "<<tofid
1056 <<" barrelid = "<<barrelid
1057 <<" layerid = "<<layerid
1058 <<" ForwordADC = "<<(*iter2)->adc1()
1059 <<" ForwordTDC = "<<(*iter2)->tdc1()
1060 <<endreq;
1061 double ftdc= (*iter2)->tdc1();
1062 double btdc= (*iter2)->tdc2();
1063 double fadc= (*iter2)->adc1();
1064 double badc= (*iter2)->adc2();
1065 if(
m_debug==4) cout<<
"barrel 2 ::layer, barrel, tofid, ftdc, btdc: "<<layerid<<
" , "<<barrelid<<
" , "<<tofid<<
" , "<<ftdc<<
" , "<<btdc<<endl;
1066 int idptof = ((tofid-1) == -1) ? 87 : tofid-1;
1067 int idntof = ((tofid+1) == 88) ? 0 : tofid+1;
1068 if(idmatch[barrelid][tofid]==1||idmatch[barrelid][idptof]==1||idmatch[barrelid][idntof]==1){
1069 for(int i=0;i<=ntot;i++){
1070 if(ttof[i]!=0 && ftdc>0){
1071 if(tofid_helix[i] == tofid ||(tofid_helix[i] == idptof)||(tofid_helix[i] == idntof)){
1072 if(barrelid==1 && helztof[i]<117 && helztof[i]>-117 ){
1073 if (optCosmic && tofid<44) {
1074 backevtime = -ttof[i] + (115 + helztof[i])*0.0566 + 12.;
1075 forevtime = -ttof[i] + (115 - helztof[i])*0.0566 + 12.;
1076 meantevup[ntofup]=(backevtime+forevtime)/2;
1077 ntofup++;
1078 }
1079 else{
1080 backevtime = ttof[i] + (115 + helztof[i])*0.0566 + 12.;
1081 forevtime = ttof[i] + (115 - helztof[i])*0.0566 + 12.;
1082 meantevdown[ntofdown]=(backevtime+forevtime)/2;
1083 ntofdown++;
1084 }
1085 if( (*iter2)->adc1()<0.0 || (*iter2)->adc2()<0.0 || m_userawtime){
1086 t0forward_trk = ftdc - forevtime ;
1087 t0backward_trk = btdc - backevtime ;
1088 }
1089 else{
1090 t0forward_trk = tofCaliSvc->
BTime1((*iter2)->adc1(), (*iter2)->tdc1(),helztof[i], (*iter2)->tofId())-ttof[i];
1091 t0backward_trk = tofCaliSvc->
BTime2((*iter2)->adc2(), (*iter2)->tdc2(),helztof[i], (*iter2)->tofId())-ttof[i];
1092 if (optCosmic && tofid<44) {
1093 t0forward_trk = tofCaliSvc->
BTime1((*iter2)->adc1(), (*iter2)->tdc1(),helztof[i], (*iter2)->tofId())+ttof[i];
1094 t0backward_trk = tofCaliSvc->
BTime2((*iter2)->adc2(), (*iter2)->tdc2(),helztof[i], (*iter2)->tofId())+ttof[i];
1095 }
1096 }
1097
1098 if(t0forward_trk<-3 || t0backward_trk<-3 || fabs(t0forward_trk-t0backward_trk)>15.0) continue;
1099 if(!
m_TofOpt&&nmatch_barrel!=0 && fabs((t0forward_trk+t0backward_trk)/2-(t0backward_add+t0forward_add)/2/nmatch_barrel)>11)
continue;
1100 if(
m_debug == 4) cout<<
"t0forward_trk, t0backward_trk: "<<t0forward_trk<<
" , "<<t0backward_trk<<endl;
1102 g_t0for[nmatch1] = t0forward_trk ;
1103 g_t0back[nmatch2] = t0backward_trk ;
1104 g_meantdc=(ftdc+btdc)/2;
1105 if(tofid<44) g_ntofup1++;
1106 else g_ntofdown1++;
1107 }
1108 meantev[nmatch]=(backevtime+forevtime)/2;
1109 t0forward_add += t0forward_trk;
1110 t0backward_add += t0backward_trk;
1111 if(nmatch>499) break;
1112 Tof_t0Arr[nmatch]=(t0forward_trk+t0backward_trk)/2.0;
1113 nmatch++;
1114 nmatch1=nmatch1+1;
1115 nmatch2=nmatch2+1;
1116 nmatch_barrel++;
1117 }
1118 }
1119 }
1120 }
1121 }
1122 }
1123 }
1124 if(nmatch_barrel) tof_flag=2;
1125 }
1126
1127 if(ntot==0 || nmatch_barrel==0) {
1128 for (TofDataVector::iterator iter2 = tofDigiVec.begin();iter2 != tofDigiVec.end(); iter2++, digiId++) {
1129 log << MSG::INFO << "TOF digit No: " << digiId << endreq;
1130 barrelid=(*iter2)->barrel();
1131 if((*iter2)->barrel()==0) continue;
1132 if( ((*iter2)->quality() & 0x5)==0x5 && (*iter2)->times()==1 ) {
1133 tofid = (*iter2)->tofId();
1134 layerid = (*iter2)->layer();
1135 if(layerid==1) tofid=tofid-88;
1136 log<< MSG::INFO
1137 <<" TofId = "<<tofid
1138 <<" barrelid = "<<barrelid
1139 <<" layerid = "<<layerid
1140 <<" ForwordADC = "<<(*iter2)->adc1()
1141 <<" ForwordTDC = "<<(*iter2)->tdc1()
1142 <<endreq;
1143 double ftdc= (*iter2)->tdc1();
1144 double btdc= (*iter2)->tdc2();
1145 double fadc= (*iter2)->adc1();
1146 double badc= (*iter2)->adc2();
1147 if(
m_debug==4) cout<<
"barrel 3 ::layer, barrel, tofid, ftdc, btdc: "<<layerid<<
" , "<<barrelid<<
" , "<<tofid<<
" , "<<ftdc<<
" , "<<btdc<<endl;
1148 int idptof = ((tofid-1) == -1) ? 87 : tofid-1;
1149 int idntof = ((tofid+1) == 88) ? 0 : tofid+1;
1150 for(int i=0; i<2; i++){
1151 if(tofid_emc[i] == tofid || tofid_emc[i] == idptof || tofid_emc[i] == idntof){
1152 if(zemc_rec[0]||zemc_rec[1]){
1153 if(tofid ==tofid_emc[i] || tofid_emc[i]==idntof || tofid_emc[i]==idptof){
1154 if(ftdc>2000.|| module[i]!=1) continue;
1155 ttof[i]= sqrt(
ELMAS2/(
m_ebeam*
m_ebeam)+1)* sqrt(xemc_rec[i]*xemc_rec[i]+yemc_rec[i]*yemc_rec[i]+zemc_rec[i]*zemc_rec[i])/
VLIGHT;
1156 if(optCosmic==1 && tofid<44){
1157 backevtime = -ttof[i] + (115 + zemc_rec[i])*0.0566 + 12.;
1158 forevtime = -ttof[i] + (115 - zemc_rec[i])*0.0566 + 12.;
1159 meantevup[ntofup]=(backevtime+forevtime)/2;
1160 ntofup++;
1161 }
1162 else{
1163 backevtime = ttof[i] + (115 + zemc_rec[i])*0.0566 + 12.;
1164 forevtime = ttof[i] + (115 - zemc_rec[i])*0.0566 + 12.;
1165 meantevdown[ntofdown]=(backevtime+forevtime)/2;
1166 ntofdown++;
1167 }
1168 if( (*iter2)->adc1()<0.0 || (*iter2)->adc2()<0.0 || m_userawtime){
1169 t0forward_trk=ftdc-forevtime;
1170 t0backward_trk=btdc-backevtime;
1171 }
1172 else{
1173 t0forward_trk = tofCaliSvc->
BTime1((*iter2)->adc1(), (*iter2)->tdc1(),helztof[i], (*iter2)->tofId())-ttof[i];
1174 t0backward_trk = tofCaliSvc->
BTime2((*iter2)->adc2(), (*iter2)->tdc2(),helztof[i], (*iter2)->tofId())-ttof[i];
1175 if (optCosmic && tofid<44) {
1176 t0forward_trk = tofCaliSvc->
BTime1((*iter2)->adc1(), (*iter2)->tdc1(),helztof[i], (*iter2)->tofId())+ttof[i];
1177 t0backward_trk = tofCaliSvc->
BTime2((*iter2)->adc2(), (*iter2)->tdc2(),helztof[i], (*iter2)->tofId())+ttof[i];
1178 }
1179 }
1180
1181 if(t0forward_trk<-1 || t0backward_trk<-1 || fabs(t0forward_trk-t0backward_trk)>15.0) continue;
1182 if(!
m_TofOpt&&nmatch_barrel!=0 && fabs((t0forward_trk+t0backward_trk)/2-(t0backward_add+t0forward_add)/2/nmatch_barrel)>11)
continue;
1183 if(
m_debug == 4) cout<<
"t0forward_trk, t0backward_trk: "<<t0forward_trk<<
" , "<<t0backward_trk<<endl;
1184 meantev[nmatch]=(backevtime+forevtime)/2;
1185 t0forward_add += t0forward_trk;
1186 t0backward_add += t0backward_trk;
1187 if(nmatch>499) break;
1188 Tof_t0Arr[nmatch]=(t0forward_trk+t0backward_trk)/2.0;
1189 nmatch++;
1190 nmatch_barrel++;
1191 emcflag1=1;
1192 }
1193 }
1194 }
1195 }
1196 }
1197 }
1198 if(nmatch_barrel) tof_flag=3;
1199 }
1200
1201 if( nmatch_barrel != 0 ) {
1202 t0forward = t0forward_add/nmatch_barrel;
1203 t0backward = t0backward_add/nmatch_barrel;
1204 if(optCosmic==0){
1206 {
1208 }
1210 if(t_Est<0) t_Est=0;
1211 if(tof_flag==1) tEstFlag=111;
1212 else if(tof_flag==2) tEstFlag=121;
1213 else if(tof_flag==3) tEstFlag=131;
1214 }
1215 if(optCosmic){
1216 t_Est=(t0forward+t0backward)/2;
1217 if(tof_flag==1) tEstFlag=211;
1218 else if(tof_flag==2) tEstFlag=221;
1219 else if(tof_flag==3) tEstFlag=231;
1220 }
1221 if(
m_ntupleflag && m_tuple2) g_meant0=(t0forward+t0backward)/2;
1222 }
1223
1224
1225 digiId = 0;
1226 t0forward_add = 0;
1227 t0backward_add = 0;
1228
1229 if(nmatch_barrel==0){
1230 for (TofDataVector::iterator iter2 = tofDigiVec.begin();iter2 != tofDigiVec.end(); iter2++, digiId++) {
1231 log << MSG::INFO << "TOF digit No: " << digiId << endreq;
1232 barrelid=(*iter2)->barrel();
1233 if((*iter2)->barrel()==0) continue;
1234 if(((*iter2)->quality() & 0x5) ==0x4){
1235 tofid = (*iter2)->tofId();
1236 layerid = (*iter2)->layer();
1237 if(layerid==1) tofid=tofid-88;
1238 log<< MSG::INFO
1239 <<" TofId = "<<tofid
1240 <<" barrelid = "<<barrelid
1241 <<" layerid = "<<layerid
1242 <<" ForwordADC = "<<(*iter2)->adc1()
1243 <<" ForwordTDC = "<<(*iter2)->tdc1()
1244 <<endreq;
1245
1246 double ftdc= (*iter2)->tdc1();
1247 double fadc= (*iter2)->adc1();
1248 if(
m_debug==4) cout<<
"barrel 4 ::layer, barrel, tofid, ftdc: "<<layerid<<
" , "<<barrelid<<
" , "<<tofid<<
" , "<<ftdc<<endl;
1249 int idptof = ((tofid-1) == -1) ? 87 : tofid-1;
1250 int idntof = ((tofid+1) == 88) ? 0 : tofid+1;
1251 if(idmatch[barrelid][tofid]==1||idmatch[barrelid][idptof]==1||idmatch[barrelid][idntof]==1){
1252 for(int i=0;i<=ntot;i++){
1253 if(ttof[i]!=0 && ftdc>0){
1254 if(tofid_helix[i] == tofid ||(tofid_helix[i] == idptof) || (tofid_helix[i] == idntof)){
1255 if(barrelid==1 && helztof[i]<117 && helztof[i]>-117 ){
1256 if (optCosmic && tofid<44) {
1257 forevtime = -ttof[i] + (115 - helztof[i])*0.0566 + 12.;
1258 meantevup[ntofup]=forevtime;
1259 ntofup++;
1260 }
1261 else{
1262 forevtime = ttof[i] + (115 - helztof[i])*0.0566 + 12.;
1263 meantevdown[ntofdown]=forevtime;
1264 ntofdown++;
1265 }
1266 if( (*iter2)->adc1()<0.0 || m_userawtime){
1267 t0forward_trk = ftdc - forevtime ;
1268 }
1269 else{
1270 t0forward_trk = tofCaliSvc->
BTime1((*iter2)->adc1(), (*iter2)->tdc1(),helztof[i], (*iter2)->tofId())-ttof[i];
1271 }
1272
1273 if(t0forward_trk<-1) continue;
1274 if(!
m_TofOpt&&nmatch_barrel_1!=0 && fabs((t0forward_trk)-(t0forward_add)/nmatch_barrel_1)>11)
continue;
1275 if(
m_debug == 4) cout<<
"t0forward_trk: "<<t0forward_trk<<endl;
1277 g_t0for[nmatch1] = t0forward_trk ;
1278 g_meantdc=ftdc;
1279 if(tofid<44) g_ntofup1++;
1280 else g_ntofdown1++;
1281 }
1282 meantev[nmatch]=forevtime;
1283 t0forward_add += t0forward_trk;
1284
1285 if(nmatch>499) break;
1286 Tof_t0Arr[nmatch]=t0forward_trk;
1287 nmatch++;
1288 nmatch1++;
1289 nmatch_barrel_1++;
1290 }
1291 }
1292 }
1293 }
1294 }
1295 }
1296 else if(((*iter2)->quality() & 0x5) ==0x1){
1297 tofid = (*iter2)->tofId();
1298 layerid = (*iter2)->layer();
1299 if(layerid==1) tofid=tofid-88;
1300 log<< MSG::INFO
1301 <<" TofId = "<<tofid
1302 <<" barrelid = "<<barrelid
1303 <<" layerid = "<<layerid
1304 <<" BackwordADC = "<<(*iter2)->adc2()
1305 <<" BackwordTDC = "<<(*iter2)->tdc2()
1306 << endreq;
1307
1308 double btdc= (*iter2)->tdc2();
1309 if(
m_debug==4) cout<<
"barrel 5 ::layer, barrel, tofid, btdc: "<<layerid<<
" , "<<barrelid<<
" , "<<tofid<<
" , "<<btdc<<endl;
1310 double badc= (*iter2)->adc2();
1311 int idptof = ((tofid-1) == -1) ? 87 : tofid-1;
1312 int idntof = ((tofid+1) == 88) ? 0 : tofid+1;
1313 if(idmatch[barrelid][tofid]==1||idmatch[barrelid][idptof]==1||idmatch[barrelid][idntof]==1){
1314 for(int i=0;i<=ntot;i++){
1315 if(ttof[i]!=0 && btdc>0){
1316 if((tofid_helix[i] == tofid) || (tofid_helix[i] == idntof) ||(tofid_helix[i] == idptof)){
1317 if(barrelid==1 && helztof[i]<117 && helztof[i]>-117 ){
1318 if (optCosmic && tofid<44) {
1319 backevtime = -ttof[i] + (115 + helztof[i])*0.0566 + 12.;
1320 meantevup[ntofup]=backevtime;
1321 ntofup++;
1322 }
1323 else{
1324 backevtime = ttof[i] + (115 + helztof[i])*0.0566 + 12.;
1325 meantevdown[ntofdown]=backevtime;
1326 ntofdown++;
1327 }
1328
1329 if( (*iter2)->adc2()<0.0 || m_userawtime){
1330 t0backward_trk = btdc - backevtime ;
1331 }
1332 else{
1333 t0backward_trk = tofCaliSvc->
BTime2((*iter2)->adc2(), (*iter2)->tdc2(),helztof[i], (*iter2)->tofId())-ttof[i];
1334 }
1335
1336 if(t0backward_trk<-1) continue;
1337 if(!
m_TofOpt&&nmatch_barrel_2!=0 && fabs((t0backward_trk)-(t0backward_add)/nmatch_barrel_2)>11)
continue;
1338 if(
m_debug == 4) cout<<
"t0backward_trk: "<<t0backward_trk<<endl;
1340 g_t0back[nmatch2] = t0backward_trk ;
1341 g_meantdc=btdc;
1342 if(tofid<44) g_ntofup1++;
1343 else g_ntofdown1++;
1344 }
1345 meantev[nmatch]=backevtime;
1346 t0backward_add += t0backward_trk;
1347 if(nmatch>499) break;
1348 Tof_t0Arr[nmatch]=t0backward_trk;
1349 nmatch++;
1350 nmatch2++;
1351 nmatch_barrel_2++;
1352 }
1353 }
1354 }
1355 }
1356 }
1357 }
1358 }
1359 }
1360 if(nmatch_barrel_1 != 0 ){
1361 t0forward = t0forward_add/nmatch_barrel_1;
1362 if(optCosmic==0){
1364 {
1366 }
1368 if(t_Est<0) t_Est=0;
1369 tEstFlag=141;
1370 }
1371 else{
1372 t_Est=t0forward;
1373 tEstFlag=241;
1374 }
1376 }
1377 if(nmatch_barrel_2 != 0 ){
1378 t0backward = t0backward_add/nmatch_barrel_2;
1379 if(optCosmic==0){
1381 {
1383 }
1385 if(t_Est<0) t_Est=0;
1386 tEstFlag=141;
1387 }
1388 else{
1389 t_Est=t0backward;
1390 tEstFlag=241;
1391 }
1393 }
1394
1395 digiId = 0;
1396 t0forward_add = 0;
1397 t0backward_add = 0;
1398 if(nmatch_barrel==0){
1399 for (TofDataVector::iterator iter2 = tofDigiVec.begin();iter2 != tofDigiVec.end(); iter2++, digiId++) {
1400 log << MSG::INFO << "TOF digit No: " << digiId << endreq;
1401 barrelid=(*iter2)->barrel();
1402 if((*iter2)->barrel()!=0) continue;
1403 if((*iter2)->times()!=1) continue;
1404 tofid = (*iter2)->tofId();
1405
1406 if( !( (*iter2)->is_mrpc() ) ) {
1407 if( tofid<48 ) { barrelid=0; }
1408 if( tofid>47 ) { barrelid=2; }
1409 if( barrelid==2 ) { tofid=tofid-48; }
1410 }
1411
1412 else if( (*iter2)->is_mrpc() ) {
1415 if( barrelid==2 ) { tofid=tofid-36; }
1416 }
1417
1418 log<< MSG::INFO
1419 <<" is_mrpc = " << (*iter2)->is_mrpc()
1420 <<" TofId = "<< tofid
1421 <<" barrelid = "<< barrelid
1422 <<endreq
1423 <<" ForwordADC = "<< (*iter2)->adc()
1424 <<" ForwordTDC = "<< (*iter2)->tdc()
1425 << endreq;
1426 double ftdc= (*iter2)->tdc();
1427 double fadc= (*iter2)->adc();
1428 if(
m_debug ==4) cout<<
"endcap::single hit,barrelid,tofid,tdc: "<<barrelid<<
" , "<<tofid<<
" , "<<ftdc<<endl;
1429
1430
1431 if( !( (*iter2)->is_mrpc() ) && useEtofScin ) {
1432 int idptof = ((tofid-1) == -1) ? 47 : tofid-1;
1433 int idntof = ((tofid+1) == 48) ? 0 : tofid+1;
1434
1435 if(idmatch[barrelid][tofid]==1||idmatch[barrelid][idptof]==1||idmatch[barrelid][idntof]==1){
1436 for(int i=0;i<=ntot;i++){
1437 if(ttof[i]!=0 && ftdc>0 && ftdc<2000.){
1438 if((tofid_helix[i] == tofid) ||(tofid_helix[i] == idntof) ||(tofid_helix[i] == idptof)){
1439 if( barrelid==0 || barrelid==2 ){
1440 if( r_endtof[i]>=41 && r_endtof[i]<=90 ) {
1441 if( optCosmic && ( tofid<24 || ( tofid>48 && tofid<71 ) ) ) {
1442 forevtime = -ttof[i] + r_endtof[i]*0.09 + 12.2;
1443 meantevup[ntofup] = forevtime;
1444 ntofup++;
1445 }
1446 else {
1447 forevtime = ttof[i] + r_endtof[i]*0.09 + 12.2;
1448 meantevdown[ntofdown] = forevtime;
1449 ntofdown++;
1450 }
1451 if( (*iter2)->adc()<0.0 || m_userawtime){
1452 t0forward_trk = ftdc - forevtime;
1453 }
1454 else{
1455 t0forward_trk = tofCaliSvc->
ETime((*iter2)->adc(), (*iter2)->tdc(),r_endtof[i], (*iter2)->tofId())-ttof[i];
1456 }
1457
1458 if(t0forward_trk<-1.) continue;
1459 if( !
m_TofOpt && nmatch_end!=0 && fabs( t0forward_trk - t0forward_add/nmatch_end)>9 )
continue;
1460 t0forward_add += t0forward_trk;
1461 if(nmatch>499) break;
1462 Tof_t0Arr[nmatch]=t0forward_trk;
1463 meantev[nmatch]=forevtime/2;
1464 nmatch++;
1465 nmatch_end++;
1466 }
1467 }
1468 }
1469 if(
m_debug==4 ) { cout <<
"t0forward_trk:" << t0forward_trk << endl; }
1470 }
1471 }
1472 }
1473 }
1474
1475 if( (*iter2)->is_mrpc() && useEtofMRPC ) {
1476 if( ((*iter2)->quality() & 0x5)!=0x5 ) continue;
1477 double btdc= (*iter2)->tdc2();
1478 double badc= (*iter2)->adc2();
1479 int idptof = ((tofid-1) == -1) ? 35 : tofid-1;
1480 int idntof = ((tofid+1) == 36) ? 0 : tofid+1;
1481
1482 if( idetfmatch[barrelid][tofid]==1 || idetfmatch[barrelid][idptof]==1 || idetfmatch[barrelid][idntof]==1 ) {
1483 for( int i=0; i<=ntot; i++ ) {
1484 if( tetf[i]!=0 && ftdc>0 && ftdc<2000.) {
1485 if( etfid_helix[i]==tofid || etfid_helix[i]==idntof || etfid_helix[i] == idptof ) {
1486 if( barrelid==0 || barrelid==2 ) {
1487 if( r_endetf[i]>=41 && r_endetf[i]<=90 ) {
1488 if( optCosmic && ( tofid<18 || ( tofid>35 && tofid<54 ) ) ) {
1489 forevtime = -tetf[i] + 17.7;
1490 meantevup[ntofup] = forevtime;
1491 ntofup++;
1492 }
1493 else {
1494 forevtime = tetf[i] + 17.7;
1495 meantevdown[ntofdown] = forevtime;
1496 ntofdown++;
1497 }
1498 if( m_userawtime ) {
1499 double fbtdc = ( ftdc + btdc )/2.0;
1500 if( ftdc>0 && btdc<0 ) { fbtdc = ftdc; }
1501 else if( ftdc<0 && btdc>0 ) { fbtdc = btdc; }
1502 else if( ftdc<0 && btdc<0 ) continue;
1503 t0forward_trk = fbtdc - forevtime;
1504 }
1505 else {
1506 t0forward_trk = tofCaliSvc->
EtfTime( (*iter2)->tdc1(), (*iter2)->tdc2(), (*iter2)->tofId(), (*iter2)->strip() )-tetf[i];
1507 }
1508
1509 if( t0forward_trk<-1 ) continue;
1510 if(
m_TofOpt && nmatch_end!=0 && fabs(t0forward_trk-t0forward_add/nmatch_end)>9 )
continue;
1511 if(
m_debug == 4 ) { cout <<
"t0forward_trk:" << t0forward_trk << endl; }
1512 t0forward_add += t0forward_trk;
1513 if(nmatch>499) break;
1514 Tof_t0Arr[nmatch] = t0forward_trk;
1515 meantev[nmatch] = forevtime;
1516 nmatch++;
1517 nmatch_end++;
1518 }
1519 }
1520 }
1521 }
1522 }
1523 }
1524 }
1525 }
1526 if( nmatch_end ) { tof_flag=5; }
1527 }
1528
1529 if( nmatch_barrel==0 && nmatch_end==0 ) {
1530 for( TofDataVector::iterator iter2 = tofDigiVec.begin(); iter2 != tofDigiVec.end(); iter2++, digiId++ ) {
1531 barrelid=(*iter2)->barrel();
1532 if( (*iter2)->barrel()!=0 ) continue;
1533 if( (*iter2)->times()!=1 ) continue;
1534 tofid = (*iter2)->tofId();
1535
1536 if( !( (*iter2)->is_mrpc() ) ) {
1537 if( tofid<48 ) { barrelid=0; }
1538 if( tofid>47 ) { barrelid=2; }
1539 if( barrelid==2 ) { tofid=tofid-48; }
1540 }
1541
1542 else if( (*iter2)->is_mrpc() ) {
1545 if( barrelid==2 ) { tofid=tofid-36; }
1546 }
1547
1548 log<< MSG::INFO
1549 <<" is_mrpc = " << (*iter2)->is_mrpc()
1550 <<" TofId = "<< tofid
1551 <<" barrelid = "<< barrelid
1552 <<endreq
1553 <<" ForwordADC = "<< (*iter2)->adc()
1554 <<" ForwordTDC = "<< (*iter2)->tdc()
1555 << endreq;
1556 double ftdc= (*iter2)->tdc();
1557 double fadc= (*iter2)->adc();
1558 if(
m_debug ==4) cout<<
"endcap::single hit,barrelid,tofid,tdc: "<<barrelid<<
" , "<<tofid<<
" , "<<ftdc<<endl;
1559
1560
1561 if( !( (*iter2)->is_mrpc() ) && useEtofScin ) {
1562 int idptof = ((tofid-1) == -1) ? 47 : tofid-1;
1563 int idntof = ((tofid+1) == 48) ? 0 : tofid+1;
1564 for( int i=0; i<2; i++ ) {
1565 if( zemc_rec[0] || zemc_rec[1] ) {
1566 if( tofid==tofid_emc[i] || tofid_emc[i]==idntof || tofid_emc[i]==idptof ) {
1567 if( ftdc>2000. || module[i]==1 ) continue;
1569 r_endtof[i]=sqrt(xemc_rec[i]*xemc_rec[i]+yemc_rec[i]*yemc_rec[i]);
1570 if( optCosmic && ( tofid<24 || ( tofid>48 && tofid<71 ) ) ) {
1571 forevtime = -ttof[i] + r_endtof[i]*0.09 + 12.2;
1572 meantevup[ntofup] = forevtime;
1573 ntofup++;
1574 }
1575 else {
1576 forevtime = ttof[i] + r_endtof[i]*0.09 + 12.2;
1577 meantevdown[ntofdown] = forevtime;
1578 ntofdown++;
1579 }
1580 if( (*iter2)->adc()<0.0 || m_userawtime){
1581 t0forward_trk = ftdc - forevtime;
1582 }
1583 else{
1584 t0forward_trk = tofCaliSvc->
ETime((*iter2)->adc(), (*iter2)->tdc(),r_endtof[i], (*iter2)->tofId())-ttof[i];
1585 if(
m_debug ==4) cout<<
"emc flag t0forward_trk: "<<t0forward_trk<<endl;
1586 }
1587
1588 if( t0forward_trk<-1.) continue;
1589 if( !
m_TofOpt && nmatch_end!=0 && fabs( t0forward_trk - t0forward_add/nmatch_end)>9 )
continue;
1590 meantev[nmatch] = forevtime;
1591 t0forward_add += t0forward_trk;
1592 if(nmatch>499) break;
1593 Tof_t0Arr[nmatch] = t0forward_trk;
1594 nmatch++;
1595 nmatch_end++;
1596 emcflag2=1;
1597 }
1598 }
1599 }
1600 }
1601
1602 if( (*iter2)->is_mrpc() && useEtofMRPC ) {
1603 double btdc= (*iter2)->tdc2();
1604 double badc= (*iter2)->adc2();
1605 int idptof = ((tofid-1) == -1) ? 35 : tofid-1;
1606 int idntof = ((tofid+1) == 36) ? 0 : tofid+1;
1607 for( int i=0; i<2; i++ ) {
1608 if( zemc_rec[0] || zemc_rec[1] ) {
1609 if( tofid==etfid_emc[i] || etfid_emc[i]==idntof || etfid_emc[i]==idptof ) {
1610
1611 if( ftdc>2000.|| module[i]==1 ) continue;
1613 r_endetf[i] = sqrt(xemc_rec[i]*xemc_rec[i]+yemc_rec[i]*yemc_rec[i]);
1614 if( optCosmic && ( tofid<18 || ( tofid>35 && tofid<54 ) ) ) {
1615 forevtime = -tetf[i] + 17.7;
1616 meantevup[ntofup] = forevtime;
1617 ntofup++;
1618 }
1619 else {
1620 forevtime = tetf[i] + 17.7;
1621 meantevdown[ntofdown] = forevtime;
1622 ntofdown++;
1623 }
1624
1625 if( m_userawtime ) {
1626 double fbtdc = ( ftdc + btdc )/2.0;
1627 if( ftdc>0 && btdc<0 ) { fbtdc = ftdc; }
1628 else if( ftdc<0 && btdc>0 ) { fbtdc = btdc; }
1629 else if( ftdc<0 && btdc<0 ) continue;
1630 t0forward_trk = fbtdc - forevtime;
1631 }
1632 else {
1633 t0forward_trk = tofCaliSvc->
EtfTime( (*iter2)->tdc1(), (*iter2)->tdc2(), (*iter2)->tofId(), (*iter2)->strip() )-tetf[i];
1634 }
1635
1636 if( t0forward_trk<-1 ) continue;
1637 if( !
m_TofOpt && nmatch_end!=0 && fabs( t0forward_trk - t0forward_add/nmatch_end)>9 )
continue;
1638 if(
m_debug==4 ) { cout <<
"t0forward_trk:" << t0forward_trk << endl; }
1639 t0forward_add += t0forward_trk;
1640 if(nmatch>499) break;
1641 Tof_t0Arr[nmatch]=t0forward_trk;
1642 nmatch++;
1643 nmatch_end++;
1644 emcflag2=1;
1645 }
1646 }
1647 }
1648 }
1649 }
1650 if( nmatch_end ) { tof_flag=5; }
1651 }
1652
1653 if( nmatch_barrel==0 && nmatch_end==0 ) {
1654 for( TofDataVector::iterator iter2 = tofDigiVec.begin(); iter2 != tofDigiVec.end(); iter2++, digiId++ ) {
1655 log << MSG::INFO << "TOF digit No: " << digiId << endreq;
1656 barrelid = (*iter2)->barrel();
1657 if( (*iter2)->barrel()!=0 ) continue;
1658 if( (*iter2)->times()>1 && (*iter2)->times()<5 ) {
1659 tofid = (*iter2)->tofId();
1660
1661 if( !( (*iter2)->is_mrpc() ) ) {
1662 if( tofid<48 ) { barrelid=0; }
1663 if( tofid>47 ) { barrelid=2; }
1664 if( barrelid==2 ) { tofid=tofid-48; }
1665 }
1666
1667 else if( (*iter2)->is_mrpc() ) {
1670 if( barrelid==2 ) { tofid=tofid-36; }
1671 }
1672 log<< MSG::INFO
1673 <<" TofId = "<<tofid
1674 <<" barrelid = "<<barrelid
1675 <<endreq
1676 <<" ForwordADC = "<< (*iter2)->adc()
1677 <<" ForwordTDC = "<< (*iter2)->tdc()
1678 << endreq;
1679 double ftdc = (*iter2)->tdc();
1680 double fadc = (*iter2)->adc();
1681 if(
m_debug==4 ) { cout <<
"endcap::multi hit,barrelid,tofid,tdc: " << barrelid <<
" , " << tofid <<
" , " << ftdc << endl; }
1682
1683
1684 if( !( (*iter2)->is_mrpc() ) && useEtofScin ) {
1685 int idptof = ((tofid-1) == -1) ? 47 : tofid-1;
1686 int idntof = ((tofid+1) == 48) ? 0 : tofid+1;
1687
1688 if( idmatch[barrelid][tofid]==1 || idmatch[barrelid][idptof]==1 || idmatch[barrelid][idntof]==1 ) {
1689 for( int i=0; i<=ntot; i++ ) {
1690 if( ttof[i]!=0 && ftdc>0 ) {
1691 if( (tofid_helix[i]==tofid) || (tofid_helix[i]==idntof) || (tofid_helix[i]==idptof) ) {
1692 if( barrelid==0 || barrelid==2 ) {
1693 if( r_endtof[i]>=41 && r_endtof[i]<=90 ) {
1694 if( optCosmic && ( tofid<24 || ( tofid>48 && tofid<71 ) ) ) {
1695 forevtime = -ttof[i] + r_endtof[i]*0.09 + 12.2;
1696 meantevup[ntofup]=forevtime;
1697 ntofup++;
1698 }
1699 else{
1700 forevtime = ttof[i] + r_endtof[i]*0.09 + 12.2;
1701 meantevdown[ntofdown]=forevtime;
1702 ntofdown++;
1703 }
1704 if( (*iter2)->adc()<0.0 || m_userawtime){
1705 t0forward_trk=ftdc-forevtime;
1706 }
1707 else{
1708 t0forward_trk = tofCaliSvc->
ETime((*iter2)->adc(), (*iter2)->tdc(),r_endtof[i], (*iter2)->tofId())-ttof[i];
1709 }
1710
1711 if( t0forward_trk<-1.) continue;
1712 if( !
m_TofOpt && nmatch_end!=0 && fabs( t0forward_trk - t0forward_add/nmatch_end)>9 )
continue;
1713 meantev[nmatch] = forevtime;
1714 t0forward_add += t0forward_trk;
1715 if( nmatch>499 ) break;
1716 Tof_t0Arr[nmatch] = t0forward_trk;
1717 nmatch++;
1718 nmatch_end++;
1719 }
1720 }
1721 if(
m_debug==4 ) { cout <<
"t0forward_trk:" << t0forward_trk << endl; }
1722 }
1723 }
1724 }
1725 }
1726 }
1727
1728 if( (*iter2)->is_mrpc() && useEtofMRPC ) {
1729 double btdc= (*iter2)->tdc2();
1730 double badc= (*iter2)->adc2();
1731 int idptof = ((tofid-1) == -1) ? 35 : tofid-1;
1732 int idntof = ((tofid+1) == 36) ? 0 : tofid+1;
1733
1734 if( idetfmatch[barrelid][tofid]==1 || idetfmatch[barrelid][idptof]==1 || idetfmatch[barrelid][idntof]==1 ) {
1735 for( int i=0; i<=ntot; i++ ) {
1736 if( tetf[i]!=0 && ftdc>0 && ftdc<2000.) {
1737 if( etfid_helix[i]==tofid || etfid_helix[i]==idntof || etfid_helix[i] == idptof ) {
1738 if( barrelid==0 || barrelid==2 ) {
1739 if( r_endetf[i]>=41 && r_endetf[i]<=90 ) {
1740 if( optCosmic && ( tofid<18 || ( tofid>35 && tofid<54 ) ) ) {
1741 forevtime = -tetf[i] + 17.7;
1742 meantevup[ntofup] = forevtime;
1743 ntofup++;
1744 }
1745 else {
1746 forevtime = tetf[i] + 17.7;
1747 meantevdown[ntofdown] = forevtime;
1748 ntofdown++;
1749 }
1750 if( m_userawtime ) {
1751 double fbtdc = ( ftdc + btdc )/2.0;
1752 if( ftdc>0 && btdc<0 ) { fbtdc = ftdc; }
1753 else if( ftdc<0 && btdc>0 ) { fbtdc = btdc; }
1754 else if( ftdc<0 && btdc<0 ) continue;
1755 t0forward_trk = fbtdc - forevtime;
1756 }
1757 else {
1758 t0forward_trk = tofCaliSvc->
EtfTime( (*iter2)->tdc1(), (*iter2)->tdc2(), (*iter2)->tofId(), (*iter2)->strip() )-tetf[i];
1759 }
1760
1761 if( t0forward_trk<-1 ) continue;
1762 if( !
m_TofOpt && nmatch_end!=0 && fabs( t0forward_trk - t0forward_add/nmatch_end )>9 )
continue;
1763 if(
m_debug == 4 ) { cout <<
"t0forward_trk:" << t0forward_trk << endl; }
1764 t0forward_add += t0forward_trk;
1765 if(nmatch>499) break;
1766 Tof_t0Arr[nmatch] = t0forward_trk;
1767 meantev[nmatch] = forevtime;
1768 nmatch++;
1769 nmatch_end++;
1770 }
1771 }
1772 }
1773 }
1774 }
1775 }
1776 }
1777 }
1778 }
1779 if( nmatch_end ) { tof_flag=7; }
1780 }
1781
1783 g_nmatchbarrel = nmatch_barrel;
1784 g_nmatchbarrel_1 = nmatch_barrel_1;
1785 g_nmatchbarrel_2 = nmatch_barrel_2;
1786 g_nmatchend = nmatch_end;
1787 }
1788
1789 if( nmatch_end !=0 ) {
1790 t0forward = t0forward_add/nmatch_end;
1791 if( optCosmic==0 ) {
1794 }
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813 if(t_Est<0) t_Est=0;
1814 if(tof_flag==5) tEstFlag=151;
1815 else if(tof_flag==7) tEstFlag=171;
1816 if(emcflag2==1) tEstFlag=161;
1817
1818
1819
1820
1821
1822
1823
1824
1825 }
1826 if( optCosmic ) {
1827 t_Est=t0forward;
1828 if(tof_flag==5) tEstFlag=251;
1829 else if(tof_flag==7) tEstFlag=271;
1830 if(emcflag2==1) tEstFlag=261;
1831 }
1833 }
1834
1835 double t0_comp=-999;
1836 double T0=-999;
1837
1838 if(nmatch_barrel==0 && nmatch_end==0 &&
m_flag==1){
1839 double mhit[43][300]={0.};
1840 SmartDataPtr<MdcDigiCol> mdcDigiCol(eventSvc(),"/Event/Digi/MdcDigiCol");
1841 if (!mdcDigiCol) {
1842 log << MSG::INFO<< "Could not find MDC digi" << endreq;
1843 return StatusCode::FAILURE;
1844 }
1845
1847 StatusCode sc = service("MdcGeomSvc", mdcGeomSvc);
1848 if (sc != StatusCode::SUCCESS) {
1849 return StatusCode::FAILURE;
1850 }
1851
1852 MdcDigiCol::iterator iter1 = mdcDigiCol->begin();
1853 digiId = 0;
1855 int layerId;
1856 int wireId;
1857
1858 for (;iter1 != mdcDigiCol->end(); iter1++, digiId++) {
1859 mdcId = (*iter1)->identify();
1862
1864 mhit[layerId][wireId]-=1.28*(mdcGeomSvc->
Layer(layerId)->
Radius())/299.8;
1865
1866 mdcGeomSvc->
Wire(layerId,wireId);
1867
1868 double tof;
1869
1870 }
1871
1872 int Iused[43][300]={0},tmp=0;
1873 bool Lpat,Lpat11,Lpat12,Lpat2,Lpat31,Lpat32;
1874 double t0_all=0,t0_mean=0;
1875 double r[4]={0.};
1876 double chi2=999.0;
1877 double phi[4]={0.},corr[4]={0.},driftt[4]={0.};
1878 double ambig=1;
1879 double mchisq=50000;
1880
1881
1882 for(int i=5;i<10;i++){
1883
1884 double T1=0.5*0.1*(mdcGeomSvc->
Layer(4*i+0)->
PCSiz())/0.004;
1885 double T2=0.5*0.1*(mdcGeomSvc->
Layer(4*i+1)->
PCSiz())/0.004;
1886 double T3=0.5*0.1*(mdcGeomSvc->
Layer(4*i+2)->
PCSiz())/0.004;
1887 double T4=0.5*0.1*(mdcGeomSvc->
Layer(4*i+3)->
PCSiz())/0.004;
1892 double r0=r[0]-r[1]-(r[2]-r[1])/2;
1893 double r1=-(r[2]-r[1])/2;
1894 double r2=(r[2]-r[1])/2;
1895 double r3=r[3]-r[2]+(r[2]-r[1])/2;
1896
1897 for(
int j=0;j<mdcGeomSvc->
Layer(i*4+3)->
NCell();j++){
1898
1899 int Icp=0;
1900 Icp=j-1;
1901 if(Icp<0) Icp=mdcGeomSvc->
Layer(i*4+3)->
NCell();
1902
1903 Lpat=(mhit[4*i][j]!=0) && (mhit[4*i][Icp]==0) &&( mhit[4*i][j+1]==0) && (Iused[4*i][j]==0);
1904 if(Lpat==1){
1905
1906 }
1907 if(Lpat){
1908 Lpat11=(mhit[4*i+1][Icp]==0)&&(Iused[4*i+1][j]==0)&&(mhit[4*i+1][j]!=0)&&(mhit[4*i+1][j+1]==0);
1909 Lpat12=(mhit[4*i+1][j]==0)&&(Iused[4*i+1][j+1]==0)&&(mhit[4*i+1][j+1]!=0)&&(mhit[4*i+1][j+2]==0);
1910 Lpat2=(mhit[4*i+2][Icp]==0)&&(Iused[4*i+2][j]==0)&&(mhit[4*i+2][j]!=0)&&(mhit[4*i+2][j+1]==0);
1911 Lpat31=(mhit[4*i+3][Icp]==0)&&(Iused[4*i+3][j]==0)&&(mhit[4*i+3][j]!=0)&&(mhit[4*i+3][j+1]==0);
1912 Lpat32=(mhit[4*i+3][j]==0)&&(Iused[4*i+3][j+1]==0)&&(mhit[4*i+3][j+1]!=0)&&(mhit[4*i+3][j+2]==0);
1913
1914 if(Lpat11 && Lpat2 && Lpat31 ){
1915
1916 Iused[4*i+0][j]=1;
1917 Iused[4*i+1][j]=1;
1918 Iused[4*i+2][j]=1;
1919 Iused[4*i+3][j]=1;
1920 double t_i = mhit[4*i+0][j]+mhit[4*i+2][j];
1921 double t_j = mhit[4*i+1][j]+mhit[4*i+3][j];
1922 double l_j = T2+T4;
1923 double r_i = r0+r2;
1924 double r_j = r1+r3;
1925 double r_2k= r0*r0+r1*r1+r2*r2+r3*r3;
1926 double rt_i = r0*mhit[4*i+0][j]+r2*mhit[4*i+2][j];
1927 double rt_j = r1*mhit[4*i+1][j]+r3*mhit[4*i+3][j];
1928 double rl_j = r1*T2+r3*T4;
1929
1930 double deno= 4*r_2k-2*(r_i*r_i+r_j*r_j);
1931
1932 if (deno!=0){
1933 double Pa=(4*(rt_i-rt_j+rl_j)-(t_i+t_j-l_j)*(r_i-r_j)-(t_i-t_j+l_j)*(r_i+r_j))/deno;
1934 double Pb= 0.25*(t_i-t_j+l_j-(r_i+r_j) * Pa);
1935 double Ang=fabs(90.-fabs(atan(Pa)*180./3.141593));
1936
1937 t0_all+= (-0.25*((r_i-r_j)*Pa-t_i-t_j+l_j));
1938
1939 double chi2_tmp;
1940 for(int t0c=0;t0c<17;t0c+=8){
1941 chi2_tmp=(mhit[4*i+0][j]-t0c-r0 * Pa-Pb)*(mhit[4*i+0][j]-t0c-r0 * Pa-Pb)+(T2-mhit[4*i+1][j]+t0c-r1 * Pa-Pb)*(T2-mhit[4*i+1][j]+t0c-r1 * Pa-Pb)+(mhit[4*i+2][j]-t0c-r2 * Pa-Pb)*(mhit[4*i+2][j]-t0c-r2 * Pa-Pb) + (T4-mhit[4*i+3][j]+t0c-r3 * Pa-Pb)*(T4-mhit[4*i+3][j]+t0c-r3 * Pa-Pb);
1942 if(chi2_tmp<chi2){
1943 chi2=chi2_tmp;
1944 t0_comp=t0c;
1945 }
1946 }
1947 tmp+=1;
1948 }
1949
1950
1951 for(int tmpT0=0;tmpT0<17;tmpT0+=8){
1952 driftt[0]=mhit[4*i+0][j]-tmpT0;
1953 driftt[1]=mhit[4*i+1][j]-tmpT0;
1954 driftt[2]=mhit[4*i+2][j]-tmpT0;
1955 driftt[3]=mhit[4*i+3][j]-tmpT0;
1956
1957 phi[0]=j*2*3.14159265/(mdcGeomSvc->
Layer(i*4)->
NCell())+2*3.14159265/(mdcGeomSvc->
Layer(i*4+1)->
NCell())/2;
1958 phi[1]=j*2*3.14159265/(mdcGeomSvc->
Layer(i*4+1)->
NCell());
1959 phi[2]=j*2*3.14159265/(mdcGeomSvc->
Layer(i*4+2)->
NCell())+2*3.14159265/(mdcGeomSvc->
Layer(i*4+1)->
NCell())/2;
1960 phi[3]=j*2*3.14159265/(mdcGeomSvc->
Layer(i*4+3)->
NCell());
1961 phi[0]-=ambig*driftt[0]*0.004/r[0];
1962 phi[1]+=ambig*driftt[1]*0.004/r[1];
1963 phi[2]-=ambig*driftt[2]*0.004/r[2];
1964 phi[3]+=ambig*driftt[3]*0.004/r[3];
1965 double s1, sx, sy, sxx, sxy;
1966 double delinv, denom;
1975 s1 = sx = sy = sxx = sxy = 0.0;
1976 double chisq = 0.0;
1977 for (int ihit = 0; ihit < 4; ihit++) {
1981 sy += phi[ihit] *
weight;
1982 sxx +=
x[ihit] * (
x[ihit] *
weight);
1983 sxy += phi[ihit] * (
x[ihit] *
weight);
1984 }
1985 double resid[4]={0.};
1986
1987 denom = s1 * sxx - sx * sx;
1988 delinv = (denom == 0.0) ? 1.e20 : 1. / denom;
1989 double intercept = (sy * sxx - sx * sxy) * delinv;
1990 double slope = (s1 * sxy - sx * sy) * delinv;
1991
1992
1993 for (int ihit = 0; ihit < 4; ihit++) {
1994 resid[ihit] = ( phi[ihit] - intercept -
slope *
x[ihit] );
1995 chisq += resid[ihit] * resid[ihit]/(
sigma*
sigma) ;
1996 }
1997 if(chisq<mchisq){
1998 mchisq=chisq;
1999 T0=tmpT0;
2000 }
2001 }
2002 }
2003 if(Lpat12 && Lpat2 && Lpat32){
2004 Iused[4*i+0][j]=1;
2005 Iused[4*i+1][j+1]=1;
2006 Iused[4*i+2][j]=1;
2007 Iused[4*i+3][j+1]=1;
2008
2009 double t_i = mhit[4*i+0][j]+mhit[4*i+2][j];
2010 double t_j = mhit[4*i+1][j+1]+mhit[4*i+3][j+1];
2011 double l_j = T2+T4;
2012 double r_i = r0+r2;
2013 double r_j = r1+r3;
2014 double r_2k= r0*r0+r1*r1+r2*r2+r3*r3;
2015 double rt_i = r0*mhit[4*i+0][j]+r2*mhit[4*i+2][j];
2016 double rt_j = r1*mhit[4*i+1][j+1]+r3*mhit[4*i+3][j+1];
2017 double rl_j = r1*T2+r3*T4;
2018 double deno= 4*r_2k-2*(r_i*r_i+r_j*r_j);
2019
2020 if (deno!=0){
2021 double Pa=(4*(rt_i-rt_j+rl_j)-(t_i+t_j-l_j)*(r_i-r_j)-(t_i-t_j+l_j)*(r_i+r_j))/deno;
2022 double Pb= 0.25*(t_i-t_j+l_j-(r_i+r_j) * Pa);
2023 double Ang=fabs(90.-fabs(atan(Pa)*180./3.141593));
2024 t0_all+= (-0.25*((r_i-r_j)*Pa-t_i-t_j+l_j));
2025 tmp+=1;
2026 double chi2_tmp;
2027
2028 for(int t0c=0;t0c<17;t0c+=8){
2029 chi2_tmp=(mhit[4*i+0][j]-t0c-r0 * Pa-Pb)*(mhit[4*i+0][j]-t0c-r0 * Pa-Pb)+(T2-mhit[4*i+1][j+1]+t0c-r1 * Pa-Pb)*(T2-mhit[4*i+1][j+1]+t0c-r1 * Pa-Pb)+(mhit[4*i+2][j]-t0c-r2 * Pa-Pb)*(mhit[4*i+2][j]-t0c-r2 * Pa-Pb) + (T4-mhit[4*i+3][j+1]+t0c-r3 * Pa-Pb)*(T4-mhit[4*i+3][j+1]+t0c-r3 * Pa-Pb);
2030
2031 if(chi2_tmp<chi2){
2032 chi2=chi2_tmp;
2033 t0_comp=t0c;
2034 }
2035 }
2036 }
2037
2038
2039
2040 for(int tmpT0=0;tmpT0<17;tmpT0+=8){
2041 driftt[0]=mhit[4*i+0][j]-tmpT0;
2042 driftt[1]=mhit[4*i+1][j+1]-tmpT0;
2043 driftt[2]=mhit[4*i+2][j]-tmpT0;
2044 driftt[3]=mhit[4*i+3][j+1]-tmpT0;
2045
2046 phi[0]=j*2*3.14159265/(mdcGeomSvc->
Layer(i*4)->
NCell())+2*3.14159265/(mdcGeomSvc->
Layer(i*4+1)->
NCell())/2;
2047 phi[1]=j*2*3.14159265/(mdcGeomSvc->
Layer(i*4+1)->
NCell());
2048 phi[2]=j*2*3.14159265/(mdcGeomSvc->
Layer(i*4+2)->
NCell())+2*3.14159265/(mdcGeomSvc->
Layer(i*4+1)->
NCell())/2;
2049 phi[3]=j*2*3.14159265/(mdcGeomSvc->
Layer(i*4+3)->
NCell());
2050 phi[0]-=ambig*driftt[0]*0.004/r[0];
2051 phi[1]+=ambig*driftt[1]*0.004/r[1];
2052 phi[2]-=ambig*driftt[2]*0.004/r[2];
2053 phi[3]+=ambig*driftt[3]*0.004/r[3];
2054 double s1, sx, sy, sxx, sxy;
2055 double delinv, denom;
2064 s1 = sx = sy = sxx = sxy = 0.0;
2065 double chisq = 0.0;
2066 for (int ihit = 0; ihit < 4; ihit++) {
2070 sy += phi[ihit] *
weight;
2071 sxx +=
x[ihit] * (
x[ihit] *
weight);
2072 sxy += phi[ihit] * (
x[ihit] *
weight);
2073 }
2074 double resid[4]={0.};
2075
2076 denom = s1 * sxx - sx * sx;
2077 delinv = (denom == 0.0) ? 1.e20 : 1. / denom;
2078 double intercept = (sy * sxx - sx * sxy) * delinv;
2079 double slope = (s1 * sxy - sx * sy) * delinv;
2080
2081
2082 for (int ihit = 0; ihit < 4; ihit++) {
2083 resid[ihit] = ( phi[ihit] - intercept -
slope *
x[ihit] );
2084 chisq += resid[ihit] * resid[ihit]/(
sigma*
sigma) ;
2085 }
2086
2087 if(chisq<mchisq){
2088 mchisq=chisq;
2089 T0=tmpT0;
2090 }
2091 }
2092 }
2093 }
2094 }
2095 }
2096
2097 if(tmp!=0){
2098 t0_mean=t0_all/tmp;
2099 }
2101
2102 t_Est=T0 + tOffset_b;
2103 tEstFlag=2;
2104 }
2106 g_t0=t0_comp;
2107 g_T0=T0;
2108 }
2109 if(nmatch_barrel==0 && nmatch_end==0 && nmatch_barrel_1==0&&nmatch_barrel_2==0&&m_mdcCalibFunSvc&&
m_flag==2){
2110
2111 log << MSG::INFO << " mdc " << endreq;
2112
2113#define MXWIRE 6860
2114#define MXTKHIT 6860
2115#define MXTRK 15
2116
2117
2119
2120
2121 int nhits_ax = 0;
2122 int nhits_ax2 = 0;
2123 int nhits_st = 0;
2124 int nhits_st2 = 0;
2125
2129 double toft;
2130 double prop;
2131 double t0_minus_TDC[
MXWIRE];
2132
2133 double T0_cal=-230;
2134 double Mdc_t0Arr[500];
2135
2136 int expmc=1;
2137 double scale=1.;
2138 int expno, runno;
2139 ndriftt=0;
2140
2141
2142
2143
2146 }
2147
2148 SmartDataPtr<RecMdcTrackCol> newtrkCol(eventSvc(),"/Event/Recon/RecMdcTrackCol");
2149 if (!newtrkCol || newtrkCol->size()==0) {
2150 log << MSG::INFO<< "Could not find RecMdcTrackCol" << endreq;
2151 return StatusCode::SUCCESS;
2152 }
2153 log << MSG::INFO << "Begin to check RecMdcTrackCol"<<endreq;
2154
2155 RecMdcTrackCol::iterator iter_trk = newtrkCol->begin();
2156
2157 for( int tempntrack=0; iter_trk != newtrkCol->end(); iter_trk++,tempntrack++) {
2158 log << MSG::DEBUG << "retrieved MDC track:"
2159 << " Track Id: " << (*iter_trk)->trackId()
2160 << " Dr: " <<(*iter_trk)->helix(0)
2161 << " Phi0: " << (*iter_trk)->helix(1)
2162 << " kappa: " << (*iter_trk)->helix(2)
2163 << " Dz: " << (*iter_trk)->helix(3)
2164 << " Tanl: " << (*iter_trk)->helix(4)
2165 << " Phi terminal: "<< (*iter_trk)->getFiTerm()
2166 << endreq
2167 << "Number of hits: "<< (*iter_trk)->getNhits()
2168 << " Number of stereo hits " << (*iter_trk)->nster()
2169 << endreq;
2170
2171
2173 HepVector a(5,0);
2174
2175 a[0] = (*iter_trk)->helix(0);
2176 a[1] = (*iter_trk)->helix(1);
2177 a[2] = (*iter_trk)->helix(2);
2178 a[3] = (*iter_trk)->helix(3);
2179 a[4] = (*iter_trk)->helix(4);
2180
2181
2183
2184 double phi0 = a[1];
2185 double kappa =
abs(a[2]);
2186 double dirmag = sqrt(1. + a[4]*a[4]);
2187
2188 double mom =
abs(dirmag/kappa);
2189 double beta=mom/sqrt(mom*mom+
PIMAS2);
2190 if (particleId[tempntrack]== 1) { beta=mom/sqrt(mom*mom+
ELMAS2);}
2191 if(particleId[tempntrack]== 5) { beta=mom/sqrt(mom*mom+
PROTONMAS2);}
2192
2193
2194 Helix helix0(pivot0,a);
2195 double rho = helix0.radius();
2196 double unit_s =
abs(rho * dirmag);
2197
2198 helix0.ignoreErrorMatrix();
2200 double xc= hcen(0);
2201 double yc= hcen(1);
2202
2203 if( xc==0.0 && yc==0.0 ) continue;
2204
2205 double direction =1.;
2206 if(optCosmic!=0) {
2207 double phi = atan2(helix0.momentum(0.).y(),helix0.momentum(0.).x());
2208 if(phi> 0. && phi <=
M_PI) direction=-1.;
2209 }
2210
2212 StatusCode sc = service("MdcGeomSvc", mdcGeomSvc);
2213 double zeast;
2214 double zwest;
2215 double m_vp[43]={0.}, m_zst[43]={0.};
2216 for(int lay=0; lay<43; lay++){
2219
2220
2221 if(lay < 8) m_vp[lay] = 220.0;
2222 else m_vp[lay] = 240.0;
2223
2224 if( 0 == (lay % 2) ){
2225 m_zst[lay] = zwest;
2226 } else{
2227 m_zst[lay] = zeast;
2228 }
2229 }
2230
2231
2232 log << MSG::DEBUG << "hitList of this track:" << endreq;
2233 HitRefVec gothits = (*iter_trk)->getVecHits();
2234 HitRefVec::iterator it_gothit = gothits.begin();
2235 for( ; it_gothit != gothits.end(); it_gothit++){
2236
2237 log << MSG::DEBUG << "hits Id: "<<(*it_gothit)->getId()
2238 <<
" hits MDC layerId wireId " <<
MdcID::layer((*it_gothit)->getMdcId())
2240 << endreq
2241 << " hits TDC " <<(*it_gothit)->getTdc()
2242 << endreq;
2243
2246 double tdc=(*it_gothit)->getTdc() ;
2247
2248 double trkchi2=(*iter_trk)->chi2();
2249 if(trkchi2>100)continue;
2250 double hitChi2=(*it_gothit)->getChisqAdd();
2251 HepVector helix_par = (*iter_trk)->helix();
2252 HepSymMatrix helixErr=(*iter_trk)->err();
2253
2254 if((layer>=8&&layer<=19) ||(layer>=36&&layer<=42)){
2255
2256
2257
2258
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270 if(Estparam.
MDC_Inner()==0 && layer <=3)
continue;
2271
2272 double xw = GeoRef->
Forward().x()/10;
2273 double yw = GeoRef->
Forward().y()/10;
2274
2276 helix0.pivot(pivot1);
2277 double zw=helix0.a()[3];
2278
2279
2280 double dphi = (-xc*(xw-xc)-yc*(yw-yc)) /
2281 sqrt((xc*xc+yc*yc)*((xw-xc)*(xw-xc)+(yw-yc)*(yw-yc)));
2282 dphi = acos(dphi);
2283 double pathtof =
abs(unit_s * dphi);
2284 if (kappa!=0) {
2285 toft = pathtof/
VLIGHT/beta;
2286 } else {
2288 }
2289
2290
2291
2292
2293
2295 if (zw <(GeoRef->
Forward().z())/10) zw =(GeoRef->
Forward().z())/10;
2296
2297 double slant = GeoRef ->
Slant();
2299
2300 double Tw = 0;
2301
2302
2303
2304
2305
2306 double driftt;
2307 double dummy;
2308 int lr=2;
2309
2310 double p[3];
2311 p[0]=helix0.momentum(0.).x();
2312 p[1]=helix0.momentum(0.).y();
2313 double pos[2];
2314 pos[0]=xw; pos[1]=yw;
2316
2317
2318
2319 double dist = 0.;
2320
2321 dist=(m_mdcUtilitySvc->
doca(layer, wid, helix_par, helixErr))*10.0;
2322
2323 if(dist<0.) lr=1;
2324 else lr=0;
2325 dist=fabs(dist);
2326 if(dist> 0.4*(mdcGeomSvc->
Layer(layer))->PCSiz())
continue;
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344 int idummy;
2345
2347 else {
2348 double entrance=(*it_gothit)->getEntra();
2349 driftt = m_mdcCalibFunSvc->
distToDriftTime(dist, layer, wid,lr,entrance);
2350 }
2352 {
2353 T0_cal=m_mdcCalibFunSvc->
getT0(layer, wid)+m_mdcCalibFunSvc->
getTimeWalk(layer,tdc);
2354 }
2355
2356 double zprop = fabs(zw - m_zst[layer]);
2357 double tp = zprop / m_vp[layer];
2358
2359 if(driftt>tdc) continue;
2360 double difft=tdc-driftt-toft-tp-T0_cal;
2361 if(ndriftt>=500) break;
2362 if(
difft<-10)
continue;
2363 Mdc_t0Arr[ndriftt]=
difft;
2364
2365 sum_EstimeMdc=sum_EstimeMdc+
difft;
2366 ndriftt++;
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376 double tev= -t0_minus_TDC[wid]+ driftt;
2377 if(Estparam.
MDC_Tof() !=0) tev += direction*toft;
2378 if(Estparam.
MDC_Prop()!=0) tev += prop;
2379
2380
2381
2382
2383 nhits_ax++;
2384 tev_ax[nhits_ax-1]=tev;
2385
2386 if(Estparam.
MDC_Debug()!=0) log << MSG::INFO <<
"*** tev ***" <<tev <<endreq;
2387 double driftt_mea = t0_minus_TDC[wid];
2388
2389 if(
abs(driftt - driftt_mea)<75.) {
2390
2391 nhits_ax2++;
2392 if(Estparam.
MDC_Debug()!=0) log << MSG::INFO <<
"*** tev2 ***" <<tev <<endreq;
2393 }
2394 }
2395
2396
2397 else if(((layer>=4&&layer<=7)||(layer>=20&&layer<=35))&&
m_useSw){
2398
2400 StatusCode sc = service("MdcGeomSvc", mdcGeomSvc);
2402
2403
2404
2405
2406 double bx= GeoRef->
Backward().x()/10;
2407 double by= GeoRef->
Backward().y()/10;
2408 double bz= GeoRef->
Backward().z()/10;
2409 double fx= GeoRef->
Forward().x()/10;
2410 double fy= GeoRef->
Forward().y()/10;
2411 double fz= GeoRef->
Forward().z()/10;
2412
2413
2414
2417
2418 Hep3Vector wire = (CLHEP::Hep3Vector)bck - (CLHEP::Hep3Vector)fwd;
2420 helix0.pivot(try1);
2421 HepPoint3D try2 = (helix0.x(0).z() - bck.z())/ wire.z() * wire + bck;
2422 helix0.pivot(try2);
2423 HepPoint3D try3 = (helix0.x(0).z() - bck.z())/ wire.z() * wire + bck;
2424 helix0.pivot(try3);
2425
2426 double xh = helix0.x(0.).x();
2427 double yh = helix0.x(0.).y();
2428 double z = helix0.x(0.).z();
2429
2430
2431 double dphi = (-xc*(xh-xc)-yc*(yh-yc)) /
2432 sqrt((xc*xc+yc*yc)*((xh-xc)*(xh-xc)+(yh-yc)*(yh-yc)));
2433 dphi = acos(dphi);
2434 double pathtof =
abs(unit_s * dphi);
2435 if (kappa!=0) {
2436 toft = pathtof/
VLIGHT/beta;
2437 } else {
2439 }
2440
2441
2442
2443 if (z != 9999.) {
2444
2445 if(z < fz ) z = fz;
2446
2447 if(z > bz ) z = bz;
2448 double slant = GeoRef->
Slant();
2450 } else {
2451 prop = 0.;
2452 }
2453
2454
2455 double Tw = 0;
2456
2457
2458
2459
2460
2461 double driftt=0;
2462 double dummy;
2463
2464 double xw = fx + (bx-fx)/(bz-fz)*(z-fz);
2465 double yw = fy + (by-fy)/(bz-fz)*(z-fz);
2466
2468 helix0.pivot(pivot1);
2469
2470 double zw=helix0.a()[3];
2471
2472 int lr=2;
2473
2474 double p[3];
2475 p[0]=helix0.momentum(0.).x();
2476 p[1]=helix0.momentum(0.).y();
2477 double pos[2];
2478 pos[0]=xw; pos[1]=yw;
2480
2481
2482
2483 double dist=0.;
2484
2485 dist=(m_mdcUtilitySvc->
doca(layer, wid, helix_par, helixErr))*10.0;
2486
2487 if(dist<0.) lr=1;
2488 else lr=0;
2489 dist=fabs(dist);
2490 if(dist> 0.4*(mdcGeomSvc->
Layer(layer))->PCSiz())
continue;
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2509 else {
2510 double entrance=(*it_gothit)->getEntra();
2511 driftt = m_mdcCalibFunSvc->
distToDriftTime(dist, layer, wid,lr,entrance);
2512 }
2514 {
2515 T0_cal=m_mdcCalibFunSvc->
getT0(layer, wid)+m_mdcCalibFunSvc->
getTimeWalk(layer,tdc);
2516 }
2517
2518 double zprop = fabs(zw - m_zst[layer]);
2519 double tp = zprop / m_vp[layer];
2520
2521 if(driftt>tdc) continue;
2522 double difft=tdc-driftt-toft-tp-T0_cal;
2523 if(
difft<-10)
continue;
2524 if(ndriftt>=500) break;
2525 Mdc_t0Arr[ndriftt]=
difft;
2526
2527
2528
2529 sum_EstimeMdc=sum_EstimeMdc+
difft;
2530 ndriftt++;
2531
2532
2533
2534
2535 double tev= -t0_minus_TDC[wid]+ driftt;
2536 if(Estparam.
MDC_Tof() !=0) tev += direction*toft;
2537 if(Estparam.
MDC_Prop()!=0) tev += prop;
2538
2539
2540
2541
2542
2543
2544 nhits_st++;
2545 tev_st[nhits_st-1]= tev;
2546
2547 if(Estparam.
MDC_Debug()!=0) log << MSG::INFO <<
"*** tev_st ***" <<tev <<endreq;
2548 double driftt_mea = t0_minus_TDC[wid];
2549
2550 if(
abs(driftt - driftt_mea) <75.) {
2551
2552 nhits_st2++;
2553 if(Estparam.
MDC_Debug()!=0) log << MSG::INFO <<
"*** tev_st2 ***" <<tev <<endreq;
2554 }
2555 }
2556
2557 }
2558 nmatch_mdc++;
2559 }
2560
2561
2563 if(ndriftt!=0){
2565 sum_EstimeMdc=Opt_new(Mdc_t0Arr,ndriftt,400.0);
2566 }
2567 else { sum_EstimeMdc= sum_EstimeMdc/ndriftt;}
2568 if(
m_ntupleflag && m_tuple2) g_EstimeMdc=sum_EstimeMdc;
2569 t_Est=sum_EstimeMdc + tOffset_b;
2570 if(t_Est<0) t_Est=0;
2571 if(optCosmic==0){
2572 tEstFlag=102;
2573 nbunch=((int)(t_Est-offset))/bunchtime;
2574
2575 if((t_Est-offset-nbunch*bunchtime)>(bunchtime/2)) nbunch=nbunch+1;
2576 t_Est=nbunch*bunchtime+offset + tOffset_b;
2577
2578
2579
2580
2581
2582
2583
2584
2585 }
2586 if(optCosmic){
2587 t_Est=sum_EstimeMdc;
2588 tEstFlag=202;
2589 }
2590 }
2592 }
2593
2594 if(t_Est!=-999){
2595
2596 if((!
m_beforrec) && (Testime_fzisan != t_Est) ){
2597 if(tEstFlag==211) tEstFlag=213;
2598 if(tEstFlag==212) tEstFlag=216;
2599 if(tEstFlag==111) tEstFlag=113;
2600 if(tEstFlag==112) tEstFlag=116;
2601 }
2602
2603 if( optCosmic ){
2604 StatusCode scStoreTds = storeTDS(t_Est,tEstFlag,t_quality);
2605 if (scStoreTds!=StatusCode::SUCCESS){ return scStoreTds; }
2606 }else if(!optCosmic){
2607 StatusCode scStoreTds = storeTDS(t_Est,tEstFlag,t_quality);
2608 if (scStoreTds!=StatusCode::SUCCESS){ return scStoreTds; }
2609 }
2610 }else{
2611
2613
2614
2615 double segTest = Testime_fzisan + tOffset_b;
2616 int segFlag = TestimeFlag_fzisan;
2617 double segQuality = TestimeQuality_fzisan;
2618 StatusCode scStoreTds = storeTDS(segTest,segFlag,segQuality);
2619 if (scStoreTds!=StatusCode::SUCCESS){ return scStoreTds; }
2620 }
2621 }
2622
2623
2624
2625 SmartDataPtr<RecEsTimeCol> arecestimeCol(eventSvc(),"/Event/Recon/RecEsTimeCol");
2626 if (!arecestimeCol) {
2627 if(
m_debug==4) log << MSG::WARNING <<
"Could not find RecEsTimeCol" << endreq;
2628 return( StatusCode::SUCCESS);
2629 }
2630 RecEsTimeCol::iterator iter_evt = arecestimeCol->begin();
2631 for(; iter_evt!=arecestimeCol->end(); iter_evt++){
2632 log << MSG::INFO
2633 << "Test = "<<(*iter_evt)->getTest()
2634 << ", Status = "<<(*iter_evt)->getStat()
2635 <<endreq;
2637 g_Testime=(*iter_evt)->getTest();
2638 }
2639
2640 }
2641
2643 if(m_tuple2){
2644 for(g_ntofdown=0;g_ntofdown<ntofdown;g_ntofdown++){ g_meantevdown[g_ntofdown]=meantevdown[g_ntofdown];}
2645 for(g_ntofup=0;g_ntofup<ntofup;g_ntofup++){ g_meantevup[g_ntofup]=meantevup[g_ntofup];}
2646 g_nmatch_tot=nmatch;
2647 m_estFlag=tEstFlag;
2648 m_estTime=t_Est;
2649 StatusCode status = m_tuple2->write();
2650 if (!status.isSuccess()) {
2651 log << MSG::ERROR << "Can't fill ntuple!" << endreq;
2652 }
2653 }
2654 if(m_tuple9){
2655 for(g_nmatch=0;g_nmatch<nmatch;g_nmatch++)
2656 {
2657 g_meantev[g_nmatch]=meantev[g_nmatch];
2658 }
2659 StatusCode status = m_tuple9->write();
2660 if (!status.isSuccess()) {
2661 log << MSG::ERROR << "Can't fill ntuple!" << endreq;
2662 }
2663 }
2664 }
2665 return StatusCode::SUCCESS;
2666 }
**********INTEGER nmxhep !maximum number of particles DOUBLE PRECISION vhep INTEGER jdahep COMMON hepevt $ !serial number $ !number of particles $ !status code $ !particle ident KF $ !parent particles $ !childreen particles $ !four momentum
std::vector< TofData * > TofDataVector
double cos(const BesAngle a)
SmartRefVector< RecMdcHit > HitRefVec
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
*********Class see also m_nmax DOUBLE PRECISION m_MasPhot DOUBLE PRECISION m_phsu DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_r2 DOUBLE PRECISION m_WtMass INTEGER m_nmax INTEGER m_Nevgen INTEGER m_IsFSR INTEGER m_MarTot *COMMON c_KarFin $ !Output file $ !Event serial number $ !alpha QED at Thomson limit $ !minimum energy at CMS for remooval $ !infrared dimensionless $ !dummy photon IR regulator $ !crude photon multiplicity enhancement factor *EVENT $ !MC crude volume of PhhSpace *Sfactors $ !YFS formfactor IR part only $ !YFS formfactor non IR finite part $ !mass weight
int Emc_Get(double, int, double[])
void pathlCut(double pathl_max)
double ztofCutmin() const
double ztofCutmax() const
virtual const double BTime1(double ADC, double TDC, double zHit, unsigned id)=0
virtual const double BTime2(double ADC, double TDC, double zHit, unsigned id)=0
virtual StatusCode chooseConstants(int run, int event)=0
virtual const double ETime(double ADC, double TDC, double rHit, unsigned id)=0
virtual const double EtfTime(double ADC1, double ADC2, double TDC1, double TDC2, unsigned int id, unsigned int strip)=0
virtual const bool ValidInfo()=0
virtual const MdcGeoLayer *const Layer(unsigned id)=0
virtual const MdcGeoWire *const Wire(unsigned id)=0
virtual TofDataVector & tofDataVectorEstime()=0
double distToDriftTime(double dist, int layid, int cellid, int lr, double entrance=0.0) const
double getT0(int layid, int cellid) const
double getTimeWalk(int layid, double Q) const
double Radius(void) const
HepPoint3D Forward(void) const
HepPoint3D Backward(void) const
static int layer(const Identifier &id)
Values of different levels (failure returns 0)
static int wire(const Identifier &id)
double doca(int layer, int cell, const HepVector helix, const HepSymMatrix errMat, bool passCellRequired=true, bool doSag=true) const
static double MdcTime(int timeChannel)
static double TofTime(unsigned int timeChannel)
int TofFz_Get(double, int, double[])
void ztofCut(double ztof_min, double ztof_max)
void pathlCut(double pathl_max)
static int endcap(const Identifier &id)