BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
Pi0RecAlg.cxx
Go to the documentation of this file.
1#include "GaudiKernel/MsgStream.h"
2#include "GaudiKernel/SmartDataPtr.h"
3
4#include "EventModel/EventHeader.h"
5#include "EvtRecEvent/EvtRecEvent.h"
6#include "EvtRecEvent/EvtRecPi0.h"
7#include "EvtRecEvent/EvtRecTrack.h"
10#include "VertexFit/KinematicFit.h"
11const double xmpi0 = 0.13497;
12
14//*******************************************************************************************
15Pi0RecAlg::Pi0RecAlg( const std::string& name, ISvcLocator* pSvcLocator )
16 : Algorithm( name, pSvcLocator ) {
17 // Declare the properties
18 declareProperty( "EMinOfBarrel", _pi0_cut.MinEnergyOfBarrelPhoton = 0.025 );
19 declareProperty( "EMinOfEndcap", _pi0_cut.MinEnergyOfEndcapPhoton = 0.045 );
20 declareProperty( "Angle", _pi0_cut.MinAngle = 20 );
21 declareProperty( "TimeLimit", _pi0_cut.TimeLimit = 20 );
22
23 declareProperty( "Pi0MinMass", _pi0_cut.MinMass = 0.10 );
24 declareProperty( "Pi0MaxMass", _pi0_cut.MaxMass = 0.18 );
25 declareProperty( "ChisqCut", _pi0_cut.Chisq = 50.0 );
26}
27
28//******************************************************************************************
30
31 MsgStream log( msgSvc(), name() );
32 log << MSG::INFO << "in initialize()" << endmsg;
33
34 return StatusCode::SUCCESS;
35}
36
37//*********************************************************************************************
38StatusCode Pi0RecAlg::execute() {
39
40 MsgStream log( msgSvc(), name() );
41 log << MSG::INFO << "in execute()" << endmsg;
42
43 // get event header, eventlist and tracklist from TDS
44 SmartDataPtr<Event::EventHeader> eventHeader( eventSvc(), "/Event/EventHeader" );
45 SmartDataPtr<EvtRecEvent> recEvt( eventSvc(), EventModel::EvtRec::EvtRecEvent );
46 SmartDataPtr<EvtRecTrackCol> recTrkCol( eventSvc(), EventModel::EvtRec::EvtRecTrackCol );
47
48 bool save2TDS = false;
49 SmartDataPtr<EvtRecPi0Col> recPi0Col( eventSvc(), EventModel::EvtRec::EvtRecPi0Col );
50 if ( !recPi0Col )
51 {
52 recPi0Col = new EvtRecPi0Col;
53 save2TDS = true;
54 }
55 using namespace Pi0;
56 // std::cout<<"**********************************************"<<std::endl;
57 static Criteria cri_inv( _pi0_cut.MinMass, _pi0_cut.MaxMass );
58
59 // static KFitCriteria cri_kfit;
60
61 UserPi0Cut::SetForTrack( recEvt, recTrkCol );
62
63 // Pi0::make_gamma_list(recEvt, recTrkCol);
64 Pi0::make_gamma_list( _pi0_cut );
66 // Pi0::print_gamma_list(Pi0::GetDefaultGammaList());
67 Pi0::apply_criteria( cri_inv );
69 // Pi0::print_pi0_list(Pi0::GetCandidatePi0List());
71 // std::cout<<"**********************************************"<<std::endl;
72 if ( save2TDS )
73 {
74 StatusCode sc = eventSvc()->registerObject( EventModel::EvtRec::EvtRecPi0Col, recPi0Col );
75 if ( sc.isFailure() )
76 {
77 log << MSG::ERROR << "could not register EvtRecPi0Col in TDS" << endmsg;
78 return StatusCode::FAILURE;
79 }
80 }
81 return StatusCode::SUCCESS;
82}
83
84//********************************************************************************************
85StatusCode Pi0RecAlg::finalize() {
86
87 MsgStream log( msgSvc(), name() );
88 log << MSG::INFO << "in finalize()" << endmsg;
89
90 return StatusCode::SUCCESS;
91}
92
93HepLorentzVector Pi0RecAlg::getP4( RecEmcShower* gTrk ) {
94
95 double eraw = gTrk->energy();
96 double phi = gTrk->phi();
97 double the = gTrk->theta();
98
99 return HepLorentzVector( eraw * sin( the ) * cos( phi ), eraw * sin( the ) * sin( phi ),
100 eraw * cos( the ), eraw );
101}
102
103// KinematicFit * kmfit = KinematicFit::instance();
104
105//
106// Set up the pi0's list
107//
108/* for(int i1 = recEvt->totalCharged(); i1 < (recEvt->totalTracks()-1); i1++) {
109 EvtRecTrack* g1Trk = *(recTrkCol->begin() + i1);
110 if ( !g1Trk->isPhoton() ) continue;
111 RecEmcShower* g1Shower = g1Trk->emcShower();
112 HepLorentzVector g1P4 = getP4(g1Shower);
113
114 for(int i2 = i1+1; i2 < recEvt->totalTracks(); i2++) {
115 EvtRecTrack* g2Trk = *(recTrkCol->begin() + i2);
116 if ( !g2Trk->isPhoton() ) continue;
117 RecEmcShower* g2Shower = g2Trk->emcShower();
118 HepLorentzVector g2P4 = getP4(g2Shower);
119
120 HepLorentzVector p2g = g1P4 + g2P4;
121 if ( p2g.m() < m_minmass_cut ) continue;
122 if ( p2g.m() > m_maxmass_cut ) continue;
123
124 kmfit->init();
125 kmfit->setIterNumber(1);
126 kmfit->AddTrack(0, 0.0, g1Shower);
127 kmfit->AddTrack(1, 0.0, g2Shower);
128 kmfit->AddResonance(0, xmpi0, 0, 1);
129 if ( !kmfit->Fit(0) ) continue;
130 kmfit->BuildVirtualParticle(0);
131 if ( kmfit->chisq(0) > m_chisq_cut ) continue;
132
133 double e1 = (kmfit->pfit(0)).e();
134 double e2 = (kmfit->pfit(1)).e();
135 HepLorentzVector ppi0 = kmfit->pfit(0) + kmfit->pfit(1);
136 double f = (e1-e2)/ppi0.rho();
137 if ( fabs(f) > m_costheta_cut ) continue;
138
139 EvtRecPi0* recPi0 = new EvtRecPi0();
140 recPi0->setRawMass(p2g.restMass());
141 recPi0->setChisq(kmfit->chisq(0));
142 recPi0->setFcos(f);
143 if ( g1P4.e() >= g2P4.e() ) {
144 recPi0->setHiPfit(kmfit->pfit(0));
145 recPi0->setLoPfit(kmfit->pfit(1));
146 recPi0->setHiEnGamma(g1Trk);
147 recPi0->setLoEnGamma(g2Trk);
148 }
149 else {
150 recPi0->setHiPfit(kmfit->pfit(1));
151 recPi0->setLoPfit(kmfit->pfit(0));
152 recPi0->setHiEnGamma(g2Trk);
153 recPi0->setLoEnGamma(g1Trk);
154 }
155
156 recPi0Col->push_back(recPi0);
157 }
158 }*/
159
160// std::cout<<"**********************************************"<<std::endl;
161/* std::cout<<"A(";
162 for(int i1 = 0; i1 < (recEvt->totalTracks()); i1++)
163 {
164 EvtRecTrack* g1Trk = *(recTrkCol->begin() + i1);
165 std::cout<<g1Trk->trackId()<<", ";
166 }
167 std::cout<<")"<<std::endl;
168 std::cout<<"N(";
169 for(int i1 = recEvt->totalCharged(); i1 < (recEvt->totalTracks()); i1++)
170 {
171 EvtRecTrack* g1Trk = *(recTrkCol->begin() + i1);
172 std::cout<<g1Trk->trackId()<<", ";
173 }
174 std::cout<<")"<<std::endl;
175 std::cout<<"C(";
176 for(int i1 = 0; i1 < recEvt->totalCharged(); i1++)
177 {
178 EvtRecTrack* g1Trk = *(recTrkCol->begin() + i1);
179 std::cout<<g1Trk->trackId()<<", ";
180 }
181 std::cout<<")"<<std::endl;*/
DECLARE_COMPONENT(BesBdkRc)
ObjectVector< EvtRecPi0 > EvtRecPi0Col
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations xmb DOUBLE PRECISION xcb DOUBLE PRECISION xmpi0
Definition RRes.h:32
IMessageSvc * msgSvc()
StatusCode execute()
Definition Pi0RecAlg.cxx:38
Pi0RecAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition Pi0RecAlg.cxx:15
StatusCode finalize()
Definition Pi0RecAlg.cxx:85
StatusCode initialize()
Definition Pi0RecAlg.cxx:29
Pi0List & make_pi0_list(const GammaList &gamma_list)
GammaList & make_gamma_list(UserPi0Cut &cut)
void Pi0ListToTDS(const Pi0List &pi0list, EvtRecPi0Col *recPi0Col)
GammaList & GetDefaultGammaList()
Pi0List & GetCandidatePi0List()
Pi0List & apply_criteria(const Criteria &cri)
static void SetForTrack(EvtRecEvent *_recEvt, EvtRecTrackCol *_recTrkCol)
Definition Pi0Cut.h:91