/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/Pi0RecAlg/Pi0RecAlg-00-00-06/src/Pi0RecAlg.cxx

Go to the documentation of this file.
00001 #include "GaudiKernel/MsgStream.h"
00002 #include "GaudiKernel/SmartDataPtr.h"
00003 
00004 #include "EventModel/EventHeader.h"
00005 #include "EvtRecEvent/EvtRecEvent.h"
00006 #include "EvtRecEvent/EvtRecTrack.h"
00007 #include "EvtRecEvent/EvtRecPi0.h"
00008 #include "VertexFit/KinematicFit.h"
00009 #include "Pi0RecAlg/Pi0RecAlg.h"
00010 #include "Pi0RecAlg/MakeGroupList.h"
00011 const double xmpi0 =  0.13497;
00012 
00013 //*******************************************************************************************
00014 Pi0RecAlg::Pi0RecAlg(const std::string& name, ISvcLocator* pSvcLocator) :
00015         Algorithm(name, pSvcLocator)
00016 {
00017         //Declare the properties
00018         declareProperty("EMinOfBarrel",       _pi0_cut.MinEnergyOfBarrelPhoton = 0.025);
00019         declareProperty("EMinOfEndcap",       _pi0_cut.MinEnergyOfEndcapPhoton = 0.045);
00020         declareProperty("Angle",       _pi0_cut.MinAngle = 20);
00021         declareProperty("TimeLimit",       _pi0_cut.TimeLimit = 20);
00022 
00023         declareProperty("Pi0MinMass",       _pi0_cut.MinMass = 0.10);
00024         declareProperty("Pi0MaxMass",       _pi0_cut.MaxMass = 0.18);
00025         declareProperty("ChisqCut",         _pi0_cut.Chisq = 50.0);
00026 }
00027 
00028 //******************************************************************************************
00029 StatusCode Pi0RecAlg::initialize() {
00030 
00031         MsgStream log(msgSvc(), name());
00032         log << MSG::INFO << "in initialize()" <<endreq;
00033 
00034         return StatusCode::SUCCESS;
00035 }
00036 
00037 
00038 //*********************************************************************************************
00039 StatusCode Pi0RecAlg::execute() {
00040 
00041         MsgStream log(msgSvc(), name());
00042         log << MSG::INFO << "in execute()" <<endreq;
00043 
00044         // get event header, eventlist and tracklist from TDS
00045         SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00046         SmartDataPtr<EvtRecEvent> recEvt(eventSvc(), EventModel::EvtRec::EvtRecEvent);
00047         SmartDataPtr<EvtRecTrackCol> recTrkCol(eventSvc(),  EventModel::EvtRec::EvtRecTrackCol);
00048 
00049         bool save2TDS = false;
00050         SmartDataPtr<EvtRecPi0Col> recPi0Col(eventSvc(), EventModel::EvtRec::EvtRecPi0Col);
00051         if ( !recPi0Col ) {
00052                 recPi0Col = new EvtRecPi0Col;
00053                 save2TDS = true;
00054         }
00055         using namespace Pi0;
00056         //   std::cout<<"**********************************************"<<std::endl;
00057         static Criteria cri_inv(_pi0_cut.MinMass, _pi0_cut.MaxMass);
00058        
00059         //static KFitCriteria cri_kfit;
00060 
00061         UserPi0Cut::SetForTrack(recEvt, recTrkCol);
00062 
00063 //      Pi0::make_gamma_list(recEvt, recTrkCol);
00064         Pi0::make_gamma_list(_pi0_cut);
00065         Pi0::make_pi0_list(Pi0::GetDefaultGammaList());
00066         //              Pi0::print_gamma_list(Pi0::GetDefaultGammaList());
00067         Pi0::apply_criteria(cri_inv);
00068         Pi0::GetCandidatePi0List().sort(high_momentum());
00069         //      Pi0::print_pi0_list(Pi0::GetCandidatePi0List());
00070         Pi0::Pi0ListToTDS(Pi0::GetCandidatePi0List(), recPi0Col);
00071         //   std::cout<<"**********************************************"<<std::endl;
00072         if ( save2TDS ) {
00073                 StatusCode sc = eventSvc()->registerObject(EventModel::EvtRec::EvtRecPi0Col, recPi0Col);
00074                 if ( sc.isFailure() ) {
00075                         log << MSG::ERROR << "could not register EvtRecPi0Col in TDS" <<endreq;
00076                         return StatusCode::FAILURE;
00077                 }
00078         }
00079         return StatusCode::SUCCESS;
00080 }
00081 
00082 
00083 //********************************************************************************************
00084 StatusCode Pi0RecAlg::finalize() {
00085 
00086         MsgStream log(msgSvc(), name());
00087         log << MSG::INFO << "in finalize()" << endreq;
00088 
00089         return StatusCode::SUCCESS;
00090 }
00091 
00092 HepLorentzVector Pi0RecAlg::getP4(RecEmcShower* gTrk) {
00093 
00094         double eraw = gTrk->energy();
00095         double phi =  gTrk->phi();
00096         double the =  gTrk->theta();
00097 
00098         return HepLorentzVector( eraw * sin(the) * cos(phi),
00099                         eraw * sin(the) * sin(phi),
00100                         eraw * cos(the),
00101                         eraw );
00102 }
00103 
00104 //   KinematicFit * kmfit = KinematicFit::instance();
00105 
00106 //
00107 //  Set up the pi0's list
00108 //
00109 /*   for(int i1 = recEvt->totalCharged(); i1 < (recEvt->totalTracks()-1); i1++) {
00110      EvtRecTrack* g1Trk = *(recTrkCol->begin() + i1);
00111      if ( !g1Trk->isPhoton() ) continue;
00112      RecEmcShower* g1Shower = g1Trk->emcShower();
00113      HepLorentzVector g1P4 = getP4(g1Shower);
00114 
00115      for(int i2 = i1+1; i2 < recEvt->totalTracks(); i2++) {
00116      EvtRecTrack* g2Trk = *(recTrkCol->begin() + i2);
00117      if ( !g2Trk->isPhoton() ) continue;
00118      RecEmcShower* g2Shower = g2Trk->emcShower();
00119      HepLorentzVector g2P4 = getP4(g2Shower);
00120 
00121      HepLorentzVector p2g = g1P4 + g2P4;
00122      if ( p2g.m() < m_minmass_cut ) continue;
00123      if ( p2g.m() > m_maxmass_cut ) continue;
00124 
00125      kmfit->init();
00126      kmfit->setIterNumber(1);
00127      kmfit->AddTrack(0, 0.0, g1Shower);
00128      kmfit->AddTrack(1, 0.0, g2Shower);
00129      kmfit->AddResonance(0, xmpi0, 0, 1);
00130      if ( !kmfit->Fit(0) ) continue;
00131      kmfit->BuildVirtualParticle(0);
00132      if ( kmfit->chisq(0) > m_chisq_cut ) continue;
00133 
00134      double e1 = (kmfit->pfit(0)).e();
00135      double e2 = (kmfit->pfit(1)).e();
00136      HepLorentzVector ppi0 = kmfit->pfit(0) + kmfit->pfit(1);
00137      double f = (e1-e2)/ppi0.rho();
00138      if ( fabs(f) > m_costheta_cut ) continue;
00139 
00140      EvtRecPi0* recPi0 = new EvtRecPi0();
00141      recPi0->setRawMass(p2g.restMass());
00142      recPi0->setChisq(kmfit->chisq(0));
00143      recPi0->setFcos(f);
00144      if ( g1P4.e() >= g2P4.e() ) {
00145      recPi0->setHiPfit(kmfit->pfit(0));
00146      recPi0->setLoPfit(kmfit->pfit(1));
00147      recPi0->setHiEnGamma(g1Trk);
00148      recPi0->setLoEnGamma(g2Trk);
00149      }
00150      else {
00151      recPi0->setHiPfit(kmfit->pfit(1));
00152      recPi0->setLoPfit(kmfit->pfit(0));
00153      recPi0->setHiEnGamma(g2Trk);
00154      recPi0->setLoEnGamma(g1Trk);
00155      }
00156 
00157      recPi0Col->push_back(recPi0);
00158      }
00159      }*/
00160 
00161 //   std::cout<<"**********************************************"<<std::endl;
00162 /*   std::cout<<"A(";
00163      for(int i1 = 0; i1 < (recEvt->totalTracks()); i1++) 
00164      {
00165      EvtRecTrack* g1Trk = *(recTrkCol->begin() + i1);
00166      std::cout<<g1Trk->trackId()<<", ";
00167      }
00168      std::cout<<")"<<std::endl;
00169      std::cout<<"N(";
00170      for(int i1 = recEvt->totalCharged(); i1 < (recEvt->totalTracks()); i1++) 
00171      {
00172      EvtRecTrack* g1Trk = *(recTrkCol->begin() + i1);
00173      std::cout<<g1Trk->trackId()<<", ";
00174      }
00175      std::cout<<")"<<std::endl;
00176      std::cout<<"C(";
00177      for(int i1 = 0; i1 < recEvt->totalCharged(); i1++) 
00178      {
00179      EvtRecTrack* g1Trk = *(recTrkCol->begin() + i1);
00180      std::cout<<g1Trk->trackId()<<", ";
00181      }
00182      std::cout<<")"<<std::endl;*/

Generated on Tue Nov 29 23:13:46 2016 for BOSS_7.0.2 by  doxygen 1.4.7