#include <DigammaPreSelect.h>
Public Member Functions | |
DigammaPreSelect (const std::string &name, ISvcLocator *pSvcLocator) | |
StatusCode | initialize () |
StatusCode | execute () |
StatusCode | finalize () |
int | selectedType () const |
int | selectedTrkID1 () const |
int | selectedTrkID2 () const |
Private Member Functions | |
RecEmcShower * | matched (int TrkID) const |
double | Angle2ClosestShower (int ShowerID) |
Private Attributes | |
double | m_vr0cut |
double | m_vz0cut |
double | m_lowEnergyShowerCut |
double | m_highEnergyShowerCut |
double | m_matchThetaCut |
double | m_matchPhiCut |
double | m_highMomentumCut |
double | m_EoPMaxCut |
double | m_EoPMinCut |
double | m_minAngShEnergyCut |
double | m_minAngCut |
double | m_acolliCut |
double | m_eNormCut |
double | m_pNormCut |
int | m_BarrelOrEndcap |
bool | m_output |
double | m_oneProngMomentumCut |
int | m_selectedType |
int | m_selectedTrkID1 |
int | m_selectedTrkID2 |
long int | m_events |
long int | m_rejected |
int | m_oneProngsSelected |
int | m_twoProngsMatchedSelected |
int | m_twoProngsOneMatchedSelected |
NTuple::Tuple * | m_tuple1 |
NTuple::Item< double > | m_trk1_p |
NTuple::Item< double > | m_trk1_theta |
NTuple::Item< double > | m_trk1_phi |
NTuple::Item< double > | m_sh1_ene |
NTuple::Item< double > | m_sh1_theta |
NTuple::Item< double > | m_sh1_phi |
NTuple::Item< double > | m_trk2_p |
NTuple::Item< double > | m_trk2_theta |
NTuple::Item< double > | m_trk2_phi |
NTuple::Item< double > | m_sh2_ene |
NTuple::Item< double > | m_sh2_theta |
NTuple::Item< double > | m_sh2_phi |
NTuple::Item< double > | m_di_the |
NTuple::Item< double > | m_di_phi |
NTuple::Item< double > | m_etot |
NTuple::Item< double > | m_pNorm |
NTuple::Item< double > | m_eNorm |
NTuple::Item< double > | m_acolli |
NTuple::Item< double > | m_mdc_hit |
NTuple::Tuple * | m_tuple2 |
NTuple::Item< double > | m_sh_ene |
NTuple::Item< double > | m_sh_theta |
NTuple::Item< double > | m_sh_phi |
Definition at line 11 of file DigammaPreSelect.h.
DigammaPreSelect::DigammaPreSelect | ( | const std::string & | name, | |
ISvcLocator * | pSvcLocator | |||
) |
Definition at line 41 of file DigammaPreSelect.cxx.
References m_acolliCut, m_BarrelOrEndcap, m_eNormCut, m_EoPMaxCut, m_EoPMinCut, m_highEnergyShowerCut, m_highMomentumCut, m_lowEnergyShowerCut, m_matchPhiCut, m_matchThetaCut, m_minAngCut, m_minAngShEnergyCut, m_oneProngMomentumCut, m_output, m_pNormCut, m_vr0cut, and m_vz0cut.
00041 : 00042 Algorithm(name, pSvcLocator) { 00043 00044 //Declare the properties 00045 00046 declareProperty ("Vr0cut", m_vr0cut=1.0); // suggest cut: |z0|<5cm && r0<1cm 00047 declareProperty ("Vz0cut", m_vz0cut=5.0); 00048 00049 declareProperty ("lowEnergyShowerCut", m_lowEnergyShowerCut=0.1); 00050 declareProperty ("highEnergyShowerCut", m_highEnergyShowerCut=0.5); 00051 declareProperty ("matchThetaCut", m_matchThetaCut = 0.2); 00052 declareProperty ("matchPhiCut", m_matchPhiCut = 0.2); 00053 00054 declareProperty ("highMomentumCut", m_highMomentumCut = 0.5); 00055 declareProperty ("EoPMaxCut", m_EoPMaxCut =1.3); 00056 declareProperty ("EoPMinCut", m_EoPMinCut = 0.6); 00057 declareProperty ("minAngShEnergyCut", m_minAngShEnergyCut = 0.2); 00058 declareProperty ("minAngCut", m_minAngCut = 0.3); 00059 declareProperty ("acolliCut", m_acolliCut = 0.03); 00060 declareProperty ("eNormCut", m_eNormCut = 0.5); 00061 declareProperty ("pNormCut", m_pNormCut = 0.5); 00062 declareProperty ("BarrelOrEndcap", m_BarrelOrEndcap = 1); 00063 declareProperty ("Output", m_output = false); 00064 declareProperty ("oneProngMomentumCut", m_oneProngMomentumCut =1.2); 00065 00066 }
double DigammaPreSelect::Angle2ClosestShower | ( | int | ShowerID | ) | [private] |
StatusCode DigammaPreSelect::execute | ( | ) |
Definition at line 136 of file DigammaPreSelect.cxx.
References EmcID::barrel_ec(), Bes_Common::DEBUG, EventModel::EvtRec::EvtRecEvent, EventModel::EvtRec::EvtRecTrackCol, genRecEmupikp::i, Bes_Common::INFO, m_BarrelOrEndcap, m_di_phi, m_di_the, m_etot, m_events, m_output, m_sh1_ene, m_sh1_phi, m_sh1_theta, m_sh2_ene, m_sh2_phi, m_sh2_theta, m_tuple1, msgSvc(), EmcID::phi_module(), PI, selected, and EmcID::theta_module().
00136 { 00137 00138 setFilterPassed(false); 00139 00140 MsgStream log(msgSvc(), name()); 00141 log << MSG::INFO << "in execute()" << endreq; 00142 00143 m_events++; 00144 00145 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader"); 00146 if(!eventHeader) 00147 { 00148 cout<<" eventHeader "<<endl; 00149 return StatusCode::FAILURE; 00150 } 00151 00152 int run=eventHeader->runNumber(); 00153 int event=eventHeader->eventNumber(); 00154 if(event%1000==0) cout<<" run,event: "<<run<<","<<event<<endl; 00155 00156 SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent); 00157 if(!evtRecEvent ) { 00158 cout<<" evtRecEvent "<<endl; 00159 return StatusCode::FAILURE; 00160 } 00161 00162 log << MSG::DEBUG <<"ncharg, nneu, tottks = " 00163 << evtRecEvent->totalCharged() << " , " 00164 << evtRecEvent->totalNeutral() << " , " 00165 << evtRecEvent->totalTracks() <<endreq; 00166 SmartDataPtr<EvtRecTrackCol> evtRecTrkCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol); 00167 if(!evtRecTrkCol){ 00168 cout<<" evtRecTrkCol "<<endl; 00169 return StatusCode::FAILURE; 00170 } 00171 00172 Vint iGood; 00173 iGood.clear(); 00174 00175 double ene5x5,theta,phi,eseed; 00176 double showerX,showerY,showerZ; 00177 long int thetaIndex,phiIndex; 00178 00179 RecEmcID showerId; 00180 unsigned int npart; 00181 00182 Vint ipip, ipim; 00183 ipip.clear(); 00184 ipim.clear(); 00185 Vp4 ppip, ppim; 00186 ppip.clear(); 00187 ppim.clear(); 00188 00189 vector<RecEmcShower* > GoodShowers; 00190 GoodShowers.clear(); 00191 double etot=0; 00192 for(int i = 0; i< evtRecEvent->totalTracks(); i++) { 00193 if(i>=evtRecTrkCol->size()) break; 00194 EvtRecTrackIterator itTrk=evtRecTrkCol->begin() + i; 00195 if((*itTrk)->isEmcShowerValid()) { 00196 RecEmcShower *theShower = (*itTrk)->emcShower(); 00197 etot+=theShower->e5x5(); 00198 showerId = theShower->getShowerId(); 00199 npart = EmcID::barrel_ec(showerId); 00200 ene5x5=theShower->e5x5(); 00201 thetaIndex=EmcID::theta_module(showerId); 00202 phiIndex=EmcID::phi_module(showerId); 00203 if (ene5x5>0.4&&ene5x5<4&&npart==1&&(m_BarrelOrEndcap==1)){ 00204 GoodShowers.push_back(theShower); 00205 iGood.push_back((*itTrk)->trackId()); 00206 } 00207 else if (ene5x5>0.4&&ene5x5<4&&(npart==2||npart==0)&&(m_BarrelOrEndcap==2)){ 00208 GoodShowers.push_back(theShower); 00209 iGood.push_back((*itTrk)->trackId()); 00210 } 00211 else if (ene5x5>0.4&&ene5x5<4&&(m_BarrelOrEndcap==0)){ 00212 GoodShowers.push_back(theShower); 00213 iGood.push_back((*itTrk)->trackId()); 00214 } 00215 } 00216 // good photon cut will be set here 00217 } 00218 // Finish Good Photon Selection 00219 // 00220 00221 double MaxE(0), MaxPhi, MaxThe; 00222 int MaxId; 00223 double SecE(0), SecPhi, SecThe; 00224 for(int i=0; i<GoodShowers.size(); i++) { 00225 RecEmcShower *theShower = GoodShowers[i]; 00226 double eraw = theShower->energy(); 00227 if(eraw> MaxE) { 00228 MaxId =i; 00229 MaxE =eraw; 00230 MaxPhi = theShower->phi(); 00231 MaxThe = theShower->theta(); 00232 } 00233 } 00234 for(int i=0; i<GoodShowers.size(); i++) { 00235 RecEmcShower *theShower = GoodShowers[i]; 00236 double eraw = theShower->energy(); 00237 if(i!=MaxId&&eraw>SecE) { 00238 SecE =eraw; 00239 SecPhi = theShower->phi(); 00240 SecThe = theShower->theta(); 00241 } 00242 } 00243 00244 double dphi = (fabs(MaxPhi-SecPhi)-PI)*180./PI; 00245 double dthe = (fabs(MaxThe+SecThe)-PI)*180./PI; 00246 if(GoodShowers.size()>=2&&SecE>1.0&&dphi>-4&&dphi<2&&abs(dthe)<3&&etot>2.7) { 00247 setFilterPassed(true); 00248 selected++; 00249 } 00250 00251 if(m_output) { 00252 m_etot=etot; 00253 m_sh1_ene = MaxE; 00254 m_sh1_theta = MaxThe; 00255 m_sh1_phi = MaxPhi; 00256 m_sh2_ene = SecE; 00257 m_sh2_theta = SecThe; 00258 m_sh2_phi = SecPhi; 00259 m_di_phi = dphi; 00260 m_di_the = dthe; 00261 m_tuple1->write(); 00262 } 00263 00264 return StatusCode::SUCCESS; 00265 00266 }
StatusCode DigammaPreSelect::finalize | ( | ) |
Definition at line 269 of file DigammaPreSelect.cxx.
References Bes_Common::INFO, m_events, msgSvc(), and selected.
00269 { 00270 00271 MsgStream log(msgSvc(), name()); 00272 log << MSG::INFO << "in finalize()" << endmsg; 00273 cout<<"total events: "<<m_events<<endl; 00274 cout<<"selected digamma: "<<selected<<endl; 00275 00276 return StatusCode::SUCCESS; 00277 }
StatusCode DigammaPreSelect::initialize | ( | ) |
Definition at line 69 of file DigammaPreSelect.cxx.
References calibUtil::ERROR, Bes_Common::INFO, m_acolli, m_di_phi, m_di_the, m_etot, m_events, m_mdc_hit, m_oneProngsSelected, m_output, m_rejected, m_selectedTrkID1, m_selectedTrkID2, m_sh1_ene, m_sh1_phi, m_sh1_theta, m_sh2_ene, m_sh2_phi, m_sh2_theta, m_sh_ene, m_sh_phi, m_sh_theta, m_tuple1, m_tuple2, m_twoProngsMatchedSelected, m_twoProngsOneMatchedSelected, msgSvc(), and ntupleSvc().
00069 { 00070 MsgStream log(msgSvc(), name()); 00071 00072 log << MSG::INFO << "in initialize()" << endmsg; 00073 00074 if(m_output) { 00075 StatusCode status; 00076 NTuplePtr nt1(ntupleSvc(), "FILE1/bhabha"); 00077 if ( nt1 ) m_tuple1 = nt1; 00078 else { 00079 m_tuple1 = ntupleSvc()->book ("FILE1/bhabha", CLID_ColumnWiseTuple, "N-Tuple example"); 00080 if ( m_tuple1 ) { 00081 status = m_tuple1->addItem ("sh1_ene",m_sh1_ene); 00082 status = m_tuple1->addItem ("sh1_theta", m_sh1_theta); 00083 status = m_tuple1->addItem ("sh1_phi", m_sh1_phi); 00084 status = m_tuple1->addItem ("sh2_ene",m_sh2_ene); 00085 status = m_tuple1->addItem ("sh2_theta", m_sh2_theta); 00086 status = m_tuple1->addItem ("sh2_phi", m_sh2_phi); 00087 status = m_tuple1->addItem ("di_phi", m_di_phi); 00088 status = m_tuple1->addItem ("di_the", m_di_the); 00089 status = m_tuple1->addItem ("acolli", m_acolli); 00090 status = m_tuple1->addItem ("mdc_hit", m_mdc_hit); 00091 status = m_tuple1->addItem ("etot", m_etot); 00092 00093 } 00094 else { 00095 log << MSG::ERROR << " Cannot book N-tuple:" << long(m_tuple1) << endmsg; 00096 return StatusCode::FAILURE; 00097 } 00098 } 00099 00100 00101 NTuplePtr nt2(ntupleSvc(), "FILE1/bha1"); 00102 if ( nt2 ) m_tuple2 = nt2; 00103 else { 00104 m_tuple2 = ntupleSvc()->book ("FILE1/bha1", CLID_ColumnWiseTuple, "N-Tuple example"); 00105 if ( m_tuple2 ) { 00106 status = m_tuple2->addItem ("sh_ene",m_sh_ene); 00107 status = m_tuple2->addItem ("sh_theta", m_sh_theta); 00108 status = m_tuple2->addItem ("sh_phi", m_sh_phi); 00109 } 00110 else { 00111 log << MSG::ERROR << " Cannot book N-tuple:" << long(m_tuple2) << endmsg; 00112 return StatusCode::FAILURE; 00113 } 00114 } 00115 } 00116 00117 00118 // 00119 //--------end of book-------- 00120 // 00121 00122 m_rejected=0; 00123 m_events=0; 00124 m_oneProngsSelected=0; 00125 m_twoProngsMatchedSelected=0; 00126 m_twoProngsOneMatchedSelected=0; 00127 m_selectedTrkID1=999; 00128 m_selectedTrkID2=999; 00129 00130 log << MSG::INFO << "successfully return from initialize()" <<endmsg; 00131 return StatusCode::SUCCESS; 00132 00133 }
RecEmcShower* DigammaPreSelect::matched | ( | int | TrkID | ) | const [private] |
int DigammaPreSelect::selectedTrkID1 | ( | ) | const [inline] |
Definition at line 23 of file DigammaPreSelect.h.
References m_selectedTrkID1.
00024 { 00025 return m_selectedTrkID1; 00026 }
int DigammaPreSelect::selectedTrkID2 | ( | ) | const [inline] |
Definition at line 27 of file DigammaPreSelect.h.
References m_selectedTrkID2.
00028 { 00029 return m_selectedTrkID2; 00030 }
int DigammaPreSelect::selectedType | ( | ) | const [inline] |
Definition at line 19 of file DigammaPreSelect.h.
References m_selectedType.
00020 { 00021 return m_selectedType; 00022 }
NTuple::Item<double> DigammaPreSelect::m_acolli [private] |
double DigammaPreSelect::m_acolliCut [private] |
int DigammaPreSelect::m_BarrelOrEndcap [private] |
NTuple::Item<double> DigammaPreSelect::m_di_phi [private] |
NTuple::Item<double> DigammaPreSelect::m_di_the [private] |
NTuple::Item<double> DigammaPreSelect::m_eNorm [private] |
Definition at line 94 of file DigammaPreSelect.h.
double DigammaPreSelect::m_eNormCut [private] |
double DigammaPreSelect::m_EoPMaxCut [private] |
double DigammaPreSelect::m_EoPMinCut [private] |
NTuple::Item<double> DigammaPreSelect::m_etot [private] |
long int DigammaPreSelect::m_events [private] |
number of events passed
Definition at line 63 of file DigammaPreSelect.h.
Referenced by execute(), finalize(), and initialize().
double DigammaPreSelect::m_highEnergyShowerCut [private] |
double DigammaPreSelect::m_highMomentumCut [private] |
double DigammaPreSelect::m_lowEnergyShowerCut [private] |
double DigammaPreSelect::m_matchPhiCut [private] |
double DigammaPreSelect::m_matchThetaCut [private] |
NTuple::Item<double> DigammaPreSelect::m_mdc_hit [private] |
double DigammaPreSelect::m_minAngCut [private] |
double DigammaPreSelect::m_minAngShEnergyCut [private] |
double DigammaPreSelect::m_oneProngMomentumCut [private] |
int DigammaPreSelect::m_oneProngsSelected [private] |
bool DigammaPreSelect::m_output [private] |
Definition at line 54 of file DigammaPreSelect.h.
Referenced by DigammaPreSelect(), execute(), and initialize().
NTuple::Item<double> DigammaPreSelect::m_pNorm [private] |
Definition at line 93 of file DigammaPreSelect.h.
double DigammaPreSelect::m_pNormCut [private] |
long int DigammaPreSelect::m_rejected [private] |
number of events rejected
Definition at line 66 of file DigammaPreSelect.h.
Referenced by initialize().
int DigammaPreSelect::m_selectedTrkID1 [private] |
int DigammaPreSelect::m_selectedTrkID2 [private] |
int DigammaPreSelect::m_selectedType [private] |
NTuple::Item<double> DigammaPreSelect::m_sh1_ene [private] |
NTuple::Item<double> DigammaPreSelect::m_sh1_phi [private] |
NTuple::Item<double> DigammaPreSelect::m_sh1_theta [private] |
NTuple::Item<double> DigammaPreSelect::m_sh2_ene [private] |
NTuple::Item<double> DigammaPreSelect::m_sh2_phi [private] |
NTuple::Item<double> DigammaPreSelect::m_sh2_theta [private] |
NTuple::Item<double> DigammaPreSelect::m_sh_ene [private] |
NTuple::Item<double> DigammaPreSelect::m_sh_phi [private] |
NTuple::Item<double> DigammaPreSelect::m_sh_theta [private] |
NTuple::Item<double> DigammaPreSelect::m_trk1_p [private] |
Definition at line 76 of file DigammaPreSelect.h.
NTuple::Item<double> DigammaPreSelect::m_trk1_phi [private] |
Definition at line 78 of file DigammaPreSelect.h.
NTuple::Item<double> DigammaPreSelect::m_trk1_theta [private] |
Definition at line 77 of file DigammaPreSelect.h.
NTuple::Item<double> DigammaPreSelect::m_trk2_p [private] |
Definition at line 83 of file DigammaPreSelect.h.
NTuple::Item<double> DigammaPreSelect::m_trk2_phi [private] |
Definition at line 85 of file DigammaPreSelect.h.
NTuple::Item<double> DigammaPreSelect::m_trk2_theta [private] |
Definition at line 84 of file DigammaPreSelect.h.
NTuple::Tuple* DigammaPreSelect::m_tuple1 [private] |
NTuple::Tuple* DigammaPreSelect::m_tuple2 [private] |
int DigammaPreSelect::m_twoProngsMatchedSelected [private] |
int DigammaPreSelect::m_twoProngsOneMatchedSelected [private] |
double DigammaPreSelect::m_vr0cut [private] |
double DigammaPreSelect::m_vz0cut [private] |