Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

NeutralDReconstruction Class Reference

#include <NeutralDReconstruction.h>

List of all members.

Public Member Functions

StatusCode execute ()
StatusCode execute ()
StatusCode finalize ()
StatusCode finalize ()
vector< string > getlist (string &filename)
vector< string > getlist (string &filename)
StatusCode initialize ()
StatusCode initialize ()
 NeutralDReconstruction (const std::string &name, ISvcLocator *pSvcLocator)
 NeutralDReconstruction (const std::string &name, ISvcLocator *pSvcLocator)
void pidtag (vector< int >, vector< int >, CDChargedKaonList &, CDChargedPionList &, EvtRecDTag *)
void pidtag (vector< int >, vector< int >, CDChargedKaonList &, CDChargedPionList &, EvtRecDTag *)
void saveD0Info (CDDecayList::iterator, double, int, int, EvtRecDTag *)
void saveD0Info (CDDecayList::iterator, double, int, int, EvtRecDTag *)
void savetrack (vector< int >, vector< int >, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecDTag *)
void savetrack (vector< int >, vector< int >, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecDTag *)

Private Member Functions

StatusCode registerEvtRecDTagCol (EvtRecDTagCol *dtagCol, MsgStream &log)
StatusCode registerEvtRecDTagCol (EvtRecDTagCol *dtagCol, MsgStream &log)

Private Attributes

vector< string > chanlist
vector< string > chanlist
double m_beamE
bool m_debug
string m_decaylist
int m_ievt
int m_irun
int m_nChrg
int m_nKaon
int m_nKs
int m_nNeu
int m_nPi0
int m_nPion
bool m_ReadBeamEFromDB
ReadBeamInfFromDb m_readDb


Constructor & Destructor Documentation

NeutralDReconstruction::NeutralDReconstruction const std::string &  name,
ISvcLocator *  pSvcLocator
 

00055                                                                                              :
00056 Algorithm(name, pSvcLocator)  {
00057   //Declare the properties
00058   declareProperty( "debug",           m_debug = false );
00059   declareProperty( "ReadBeamEFromDB", m_ReadBeamEFromDB = false );
00060   declareProperty( "BeamE",           m_beamE = 1.8865 );
00061   declareProperty( "D0List",          m_decaylist = "test.txt" );
00062 }

NeutralDReconstruction::NeutralDReconstruction const std::string &  name,
ISvcLocator *  pSvcLocator
 


Member Function Documentation

StatusCode NeutralDReconstruction::execute  ) 
 

StatusCode NeutralDReconstruction::execute  ) 
 

00096                                            {
00097   MsgStream log(msgSvc(), name());
00098   log << MSG::INFO << "in execute()" << endreq;
00099 
00100   StatusCode sc;
00101 
00103   // Read REC data
00105   SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00106   int event= eventHeader->eventNumber();
00107   // if ( m_debug || ( (event & 0x3FF) == 0 ) )
00108   //std::cout << "event: " << event << std::endl;
00109 
00110   SmartDataPtr<EvtRecEvent> recEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
00111   SmartDataPtr<EvtRecTrackCol> recTrackCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
00112   log << MSG::DEBUG << "run and event = " << eventHeader->runNumber()
00113                                         << " " << eventHeader->eventNumber() << endreq;
00114   log << MSG::DEBUG <<"ncharg, nneu, tottks = "
00115           << recEvent->totalCharged() << " , "
00116           << recEvent->totalNeutral() << " , "
00117       << recEvent->totalTracks() <<endreq;
00118   
00119   EvtRecTrackIterator charged_begin = recTrackCol->begin();
00120   EvtRecTrackIterator charged_end = charged_begin + recEvent->totalCharged();
00121 
00122   EvtRecTrackIterator neutral_begin = recTrackCol->begin()+recEvent->totalCharged();
00123   EvtRecTrackIterator neutral_end = recTrackCol->begin()+recEvent->totalTracks();
00124 
00125   
00126   SmartDataPtr<EvtRecPi0Col> recPi0Col(eventSvc(), "/Event/EvtRec/EvtRecPi0Col");
00127   if ( ! recPi0Col ) {
00128     log << MSG::FATAL << "Could not find EvtRecPi0Col" << endreq;
00129     return StatusCode::FAILURE;
00130   }
00131 
00132 
00133   
00134   SmartDataPtr<EvtRecEtaToGGCol> recEtaToGGCol(eventSvc(), "/Event/EvtRec/EvtRecEtaToGGCol");
00135   if ( ! recEtaToGGCol ) {
00136     log << MSG::FATAL << "Could not find EvtRecEtaToGGCol" << endreq;
00137     return StatusCode::FAILURE;
00138   }
00139   
00140 
00141   SmartDataPtr<EvtRecVeeVertexCol> recVeeVertexCol(eventSvc(), "/Event/EvtRec/EvtRecVeeVertexCol");
00142    if ( ! recVeeVertexCol ) {
00143      log << MSG::FATAL << "Could not find EvtRecVeeVertexCol" << endreq;
00144      return StatusCode::FAILURE;
00145    }
00146    
00147 
00148   SmartDataPtr<EvtRecDTagCol> recDTagCol(eventSvc(), EventModel::EvtRec::EvtRecDTagCol);
00149   if (!recDTagCol) {
00150     log << MSG::FATAL << "EvtRecDTagCol is not registered in TDS" << endreq;
00151     return StatusCode::FAILURE;
00152   }
00153   
00154   //registered in the parent file DTag.cxx
00155   /*
00156     if (!recDTagCol) {
00157     recDTagCol = new EvtRecDTagCol;
00158     sc = registerEvtRecDTagCol(recDTagCol, log);
00159     if (sc != StatusCode::SUCCESS) {
00160     return sc;
00161     }
00162     }
00163   */
00164   
00166   //reconstruct particle lists
00168   
00169   pionSelector.setpidtype(0);
00170   kaonSelector.setpidtype(0);
00171   CDChargedPionList pionList(charged_begin, charged_end, pionSelector);
00172   CDChargedKaonList kaonList(charged_begin, charged_end, kaonSelector);
00173   CDPhotonList      photonList(neutral_begin, neutral_end, photonSelector);
00174   CDKsList          ksList(ksSelector);
00175   dc_fill(ksList,  recVeeVertexCol->begin(), recVeeVertexCol->end());
00176   
00177   CDPi0List         pi0List(pi0Selector);
00178   dc_fill(pi0List, recPi0Col->begin(), recPi0Col->end());
00179 
00180   CDEtaList         etaList(etatoGGSelector);
00181   dc_fill(etaList, recEtaToGGCol->begin(), recEtaToGGCol->end());
00182   
00183   
00184   //pion/kaon list with PID
00185   pionSelector.setpidtype(1);
00186   kaonSelector.setpidtype(1);
00187   CDChargedPionList pionList_tight(charged_begin, charged_end, pionSelector);
00188   CDChargedKaonList kaonList_tight(charged_begin, charged_end, kaonSelector);
00189 
00190   int run  = eventHeader->runNumber();
00191   m_ievt  = eventHeader->eventNumber();
00192   m_nChrg = recEvent->totalCharged();
00193   m_nNeu  = recEvent->totalNeutral();
00194   m_nPion = pionList.size();
00195   m_nKaon = kaonList.size();
00196   m_nPi0  = pi0List.size();
00197   m_nKs   = ksList.size();
00198   
00200   // get beam energy
00202   
00203 
00204   if(m_ReadBeamEFromDB && run>0 && m_irun!=run){
00205     m_irun=run;
00206     m_beamE=m_readDb.getbeamE(m_irun, m_beamE);
00207   }
00208   double ebeam=m_beamE;
00209     
00211   //reconstruct decay lists
00213   
00214   bool isFlavorMode=false;
00215   
00216   for(int list=0;list<chanlist.size();list++){
00217  
00218     string channel=chanlist[list];
00219     vector<int> numchan;
00220     neutralDSelector.setebeam(ebeam);
00221     CDDecayList decaylist(neutralDSelector);
00222     
00223     
00224     //K+/-: 1, Pi+/-:2,  Pi0:3, Eta: 4, Ks:5, Eta'(pipiEta):6, Eta'(rhogam):7
00225     //the fist element of the vector stands for decay mode,
00226     //the rest will be particles, and size of the vector minus 1 will be number of daughers.
00227     //the first particle in the vector will be used to get charm
00228     
00229     if(channel=="D0toKPi") {
00230       numchan.push_back( EvtRecDTag::kD0toKPi );
00231       numchan.push_back(1);
00232       numchan.push_back(2);
00233       decaylist=kaonList.minus() * pionList.plus();
00234       isFlavorMode=true;
00235     }
00236     else if(channel=="D0toKPiPi0"){
00237       numchan.push_back( EvtRecDTag::kD0toKPiPi0);
00238       numchan.push_back(1);
00239       numchan.push_back(2);
00240       numchan.push_back(3);
00241       decaylist=kaonList.minus() * pionList.plus() * pi0List;
00242       isFlavorMode=true;
00243     }
00244     else if(channel=="D0toKPiPi0Pi0"){
00245       numchan.push_back( EvtRecDTag::kD0toKPiPi0Pi0);
00246       numchan.push_back(1);
00247       numchan.push_back(2);
00248       numchan.push_back(3);
00249       numchan.push_back(3);
00250       decaylist=kaonList.minus() * pionList.plus() * pi0List * pi0List;
00251       isFlavorMode=true;
00252     }
00253     else if(channel=="D0toKPiPiPi"){
00254       numchan.push_back( EvtRecDTag::kD0toKPiPiPi);
00255       numchan.push_back(1);
00256       numchan.push_back(2);
00257       numchan.push_back(2);
00258       numchan.push_back(2);
00259       decaylist=kaonList.minus()* pionList.plus()* pionList.plus() * pionList.minus();
00260       isFlavorMode=true;
00261     }
00262     else if(channel=="D0toKPiPiPiPi0"){
00263       numchan.push_back( EvtRecDTag::kD0toKPiPiPiPi0);
00264       numchan.push_back(1);
00265       numchan.push_back(2);
00266       numchan.push_back(2);
00267       numchan.push_back(2);
00268       numchan.push_back(3);
00269       decaylist=kaonList.minus()* pionList.plus()* pionList.plus()* pionList.minus()* pi0List;
00270       isFlavorMode=true;
00271     }
00272     else if(channel=="D0toKPiEta"){
00273       numchan.push_back( EvtRecDTag::kD0toKPiEta);
00274       numchan.push_back(1);
00275       numchan.push_back(2);
00276       numchan.push_back(4);
00277       decaylist=kaonList.minus() * pionList.plus() * etaList;
00278       isFlavorMode=true;
00279     }
00280     else if(channel=="D0toKsKPi"){
00281       numchan.push_back( EvtRecDTag::kD0toKsKPi);
00282       numchan.push_back(5);
00283       numchan.push_back(1);
00284       numchan.push_back(2);
00285       decaylist=ksList* kaonList.minus()* pionList.plus();
00286     }
00287     else if(channel=="D0toKsKPiPi0"){
00288       numchan.push_back( EvtRecDTag::kD0toKsKPiPi0);
00289       numchan.push_back(5);
00290       numchan.push_back(1);
00291       numchan.push_back(2);
00292       numchan.push_back(3);
00293       decaylist=ksList* kaonList.minus() * pionList.plus()* pi0List;
00294     }
00295     else if(channel=="D0toKsPiPi"){
00296       numchan.push_back( EvtRecDTag::kD0toKsPiPi);
00297       numchan.push_back(5);
00298       numchan.push_back(2);
00299       numchan.push_back(2);
00300       decaylist=ksList* pionList.plus()* pionList.minus();
00301     }
00302     else if(channel=="D0toKsPiPiPi0"){
00303       numchan.push_back( EvtRecDTag::kD0toKsPiPiPi0);
00304       numchan.push_back(5);
00305       numchan.push_back(2);
00306       numchan.push_back(2);
00307       numchan.push_back(3);
00308       decaylist=ksList* pionList.plus()* pionList.minus()* pi0List;
00309     }
00310     else if(channel=="D0toKsPi0"){
00311       numchan.push_back( EvtRecDTag::kD0toKsPi0);
00312       numchan.push_back(5);
00313       numchan.push_back(3);
00314       decaylist=ksList* pi0List;
00315     }
00316     else if(channel=="D0toPiPiPi0"){
00317       numchan.push_back( EvtRecDTag::kD0toPiPiPi0);
00318       numchan.push_back(2);
00319       numchan.push_back(2);
00320       numchan.push_back(3);
00321       decaylist=pionList.plus()* pionList.minus()* pi0List;
00322     }
00323     else if(channel=="D0toPiPi"){
00324       numchan.push_back( EvtRecDTag::kD0toPiPi);
00325       numchan.push_back(2);
00326       numchan.push_back(2);
00327       decaylist=pionList.plus()* pionList.minus(); 
00328     }
00329     else if(channel=="D0toKK"){
00330       numchan.push_back( EvtRecDTag::kD0toKK);
00331       numchan.push_back(1);
00332       numchan.push_back(1);
00333       decaylist=kaonList.minus()* kaonList.plus(); 
00334     }
00335     else if(channel=="D0toKKPi0"){
00336       numchan.push_back( EvtRecDTag::kD0toKKPi0);
00337       numchan.push_back(1);
00338       numchan.push_back(1);
00339       numchan.push_back(3);
00340       decaylist=kaonList.minus()* kaonList.plus()* pi0List; 
00341     }
00342     else if(channel=="D0toPi0Pi0"){
00343       numchan.push_back( EvtRecDTag::kD0toPi0Pi0);
00344       numchan.push_back(3);
00345       numchan.push_back(3);
00346       decaylist=pi0List* pi0List; 
00347     }
00348     else if(channel=="D0toKsKs"){
00349       numchan.push_back( EvtRecDTag::kD0toKsKs);
00350       numchan.push_back(5);
00351       numchan.push_back(5);
00352       decaylist=ksList* ksList;
00353     }
00354     else if(channel=="D0toKsKsPi0"){
00355       numchan.push_back( EvtRecDTag::kD0toKsKsPi0);
00356       numchan.push_back(5);
00357       numchan.push_back(5);
00358       numchan.push_back(3);
00359       decaylist=ksList* ksList* pi0List;
00360     }
00361     else if(channel=="D0toKsPi0Pi0"){
00362       numchan.push_back( EvtRecDTag::kD0toKsPi0Pi0);
00363       numchan.push_back(5);
00364       numchan.push_back(3);
00365       numchan.push_back(3);
00366       decaylist=ksList* pi0List* pi0List;
00367     }
00368     else if(channel=="D0toKsKK"){
00369       numchan.push_back( EvtRecDTag::kD0toKsKK);
00370       numchan.push_back(5);
00371       numchan.push_back(1);
00372       numchan.push_back(1);
00373       decaylist=ksList* kaonList.minus()* kaonList.plus();
00374     }
00375     else if(channel=="D0toKsEta"){
00376       numchan.push_back( EvtRecDTag::kD0toKsEta);
00377       numchan.push_back(5);
00378       numchan.push_back(4);
00379       decaylist=ksList* etaList;
00380     }
00381     else if(channel=="D0toPi0Pi0Pi0"){
00382       numchan.push_back( EvtRecDTag::kD0toPi0Pi0Pi0);
00383       numchan.push_back(3);
00384       numchan.push_back(3);
00385       numchan.push_back(3);
00386       decaylist=pi0List* pi0List* pi0List;
00387     }
00388     else if(channel=="D0toKsKsKs"){
00389       numchan.push_back( EvtRecDTag::kD0toKsKsKs);
00390       numchan.push_back(5);
00391       numchan.push_back(5);
00392       numchan.push_back(5);
00393       decaylist=ksList* ksList* ksList;
00394     }
00395     else if(channel=="D0toPiPiPiPi"){
00396       numchan.push_back( EvtRecDTag::kD0toPiPiPiPi);
00397       numchan.push_back(2);
00398       numchan.push_back(2);
00399       numchan.push_back(2);
00400       numchan.push_back(2);
00401       decaylist=pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus();
00402     }
00403     else if(channel=="D0toPiPiPi0Pi0"){
00404       numchan.push_back( EvtRecDTag::kD0toPiPiPi0Pi0);
00405       numchan.push_back(2);
00406       numchan.push_back(2);
00407       numchan.push_back(3);
00408       numchan.push_back(3);
00409       decaylist=pionList.plus()* pionList.minus()* pi0List* pi0List;
00410     }
00411     else if(channel=="D0toKKPiPi"){
00412       numchan.push_back( EvtRecDTag::kD0toKKPiPi);
00413       numchan.push_back(1);
00414       numchan.push_back(1);
00415       numchan.push_back(2);
00416       numchan.push_back(2);
00417       decaylist=kaonList.minus()* kaonList.plus()* pionList.plus()* pionList.minus();
00418     }
00419     else if(channel=="D0toKKPi0Pi0"){
00420       numchan.push_back( EvtRecDTag::kD0toKKPi0Pi0);
00421       numchan.push_back(1);
00422       numchan.push_back(1);
00423       numchan.push_back(3);
00424       numchan.push_back(3);
00425       decaylist=kaonList.minus()* kaonList.plus()* pi0List* pi0List;
00426     }
00427     else if(channel=="D0toKsKsPiPi"){
00428       numchan.push_back( EvtRecDTag::kD0toKsKsPiPi);
00429       numchan.push_back(5);
00430       numchan.push_back(5);
00431       numchan.push_back(2);
00432       numchan.push_back(2);
00433       decaylist=ksList* ksList* pionList.plus()* pionList.minus();
00434     }
00435     else if(channel=="D0toPiPiPiPiPi0"){
00436       numchan.push_back( EvtRecDTag::kD0toPiPiPiPiPi0);
00437       numchan.push_back(2);
00438       numchan.push_back(2);
00439       numchan.push_back(2);
00440       numchan.push_back(2);
00441       numchan.push_back(3);
00442       decaylist=pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus()* pi0List;
00443     }
00444     else if(channel=="D0toKsPiPiPiPi"){
00445       numchan.push_back( EvtRecDTag::kD0toKsPiPiPiPi);
00446       numchan.push_back(5);
00447       numchan.push_back(2);
00448       numchan.push_back(2);
00449       numchan.push_back(2);
00450       numchan.push_back(2);
00451       decaylist=ksList* pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus();
00452     }
00453     else if(channel=="D0toKKPiPiPi0"){
00454       numchan.push_back( EvtRecDTag::kD0toKKPiPiPi0);
00455       numchan.push_back(1);
00456       numchan.push_back(1);
00457       numchan.push_back(2);
00458       numchan.push_back(2);
00459       numchan.push_back(3);
00460       decaylist=kaonList.minus()* kaonList.plus()* pionList.plus()* pionList.minus()* pi0List;
00461     }
00462     else if(channel=="D0toKsPi0Eta"){
00463       numchan.push_back( EvtRecDTag::kD0toKsPi0Eta);
00464       numchan.push_back(5);
00465       numchan.push_back(3);
00466       numchan.push_back(4);
00467       decaylist=ksList* pi0List* etaList;
00468     }
00469     else if(channel=="D0toKsEPPiPiEta"){
00470       numchan.push_back( EvtRecDTag::kD0toKsEPPiPiEta);
00471       numchan.push_back(5);
00472       numchan.push_back(6);
00473       CDDecayList epList(eptoPiPiEtaSelector);
00474       epList=pionList.plus()* pionList.minus()* etaList;
00475       decaylist= ksList* epList;
00476     }
00477     else if(channel=="D0toKsEPRhoGam"){
00478       numchan.push_back( EvtRecDTag::kD0toKsEPRhoGam);
00479       numchan.push_back(5);
00480       numchan.push_back(7);
00481       CDDecayList rhoList(rhotoPiPiSelector);
00482       rhoList=pionList.plus()* pionList.minus();
00483       CDDecayList epList(eptoRhoGamSelector);
00484       epList=rhoList* photonList;
00485       decaylist= ksList* epList;
00486     }
00487     
00488 
00489     CDDecayList::iterator D_begin =decaylist.particle_begin();
00490     CDDecayList::iterator D_end   =decaylist.particle_end();
00491     
00492     for ( CDDecayList::iterator it = D_begin; it != D_end; it++ ) {
00493       
00494       EvtRecDTag* recDTag = new EvtRecDTag;
00495       recDTag->setdecayMode( (EvtRecDTag::DecayMode)numchan[0] );
00496      
00497       
00498       vector<int> trackid, showerid;
00499       vector<int> kaonid, pionid;
00500       int charm=0;
00501       int numofchildren=numchan.size()-1;
00502       
00503       for(int i=0; i< numofchildren;i++){
00504         
00505         const CDCandidate& daughter=(*it).particle().child(i);
00506         if(isFlavorMode && i==0)
00507           charm=-daughter.charge();
00508         
00509         if(numchan[i+1]==1){
00510           const EvtRecTrack* track=daughter.track();
00511           trackid.push_back(track->trackId());
00512           kaonid.push_back(track->trackId());
00513         }
00514         else if(numchan[i+1]==2){
00515           const EvtRecTrack* track=daughter.track();
00516           trackid.push_back(track->trackId());
00517           pionid.push_back(track->trackId());
00518         }
00519         else if ( numchan[i+1]==3){
00520           const EvtRecTrack* hiEnGamma=daughter.navPi0()->hiEnGamma();
00521           const EvtRecTrack* loEnGamma=daughter.navPi0()->loEnGamma();
00522           showerid.push_back(hiEnGamma->trackId());
00523           showerid.push_back(loEnGamma->trackId());
00524         }
00525         else if ( numchan[i+1]==4){
00526           const EvtRecTrack* hiEnGamma=daughter.navEta()->hiEnGamma();
00527           const EvtRecTrack* loEnGamma=daughter.navEta()->loEnGamma();
00528           showerid.push_back(hiEnGamma->trackId());
00529           showerid.push_back(loEnGamma->trackId());
00530         }
00531         else if ( numchan[i+1]==5){
00532           EvtRecVeeVertex* aKsCand = const_cast<EvtRecVeeVertex*>( daughter.navKshort() );
00533           EvtRecTrack* pion1Trk = aKsCand->daughter(0);
00534           EvtRecTrack* pion2Trk = aKsCand->daughter(1);    
00535           trackid.push_back(pion1Trk->trackId());
00536           trackid.push_back(pion2Trk->trackId());
00537         }
00538         else if (numchan[i+1]==6){
00539           const CDCandidate& apion = daughter.decay().child(0);
00540           const CDCandidate& spion = daughter.decay().child(1);
00541           const CDCandidate& eta = daughter.decay().child(2);
00542           const EvtRecTrack* apiontrk = apion.track();
00543           const EvtRecTrack* spiontrk = spion.track();
00544           const EvtRecTrack* hiEnGamma=eta.navEta()->hiEnGamma();
00545           const EvtRecTrack* loEnGamma=eta.navEta()->loEnGamma();
00546           
00547           trackid.push_back(apiontrk->trackId());
00548           trackid.push_back(spiontrk->trackId());
00549           showerid.push_back(hiEnGamma->trackId());
00550           showerid.push_back(loEnGamma->trackId());
00551           
00552         }
00553         else if (numchan[i+1]==7){
00554           const CDCandidate& rho = daughter.decay().child(0);
00555           const CDCandidate& gamma = daughter.decay().child(1);  
00556           const CDCandidate& apion = rho.decay().child(0);
00557           const CDCandidate& spion = rho.decay().child(1);
00558           
00559           
00560           const EvtRecTrack* apiontrk = apion.track();
00561           const EvtRecTrack* spiontrk = spion.track();
00562           const EvtRecTrack* gammatrk = gamma.photon();
00563           
00564           
00565           trackid.push_back(apiontrk->trackId());
00566           trackid.push_back(spiontrk->trackId());
00567           showerid.push_back(gammatrk->trackId());
00568 
00569         }
00570         
00571 
00572       }//end of filling track and shower ids
00573       
00574       
00575       saveD0Info(it, ebeam, charm, numofchildren, recDTag);
00576       savetrack(trackid,showerid,charged_begin,charged_end,neutral_begin,neutral_end,recDTag);
00577       pidtag(kaonid,pionid,kaonList_tight, pionList_tight,recDTag);
00578       
00579       
00580       trackid.clear();
00581       showerid.clear();
00582       kaonid.clear();
00583       pionid.clear();
00584 
00585       
00586       //write recdtag out
00587       recDTagCol->push_back(recDTag);
00588       
00589     } //end of decay list iterator
00590     
00591     numchan.clear();
00592     
00593   } //end of reconstrucing all D0 decay lists
00594 
00595     
00596   return StatusCode::SUCCESS;
00597 }

StatusCode NeutralDReconstruction::finalize  ) 
 

StatusCode NeutralDReconstruction::finalize  ) 
 

00076                                             {
00077   MsgStream log(msgSvc(), name());
00078   log << MSG::INFO << "in finalize()" << endreq;
00079 
00080   chanlist.clear();
00081   
00082   return StatusCode::SUCCESS;
00083 }

vector<string> NeutralDReconstruction::getlist string &  filename  ) 
 

vector< string > NeutralDReconstruction::getlist string &  filename  ) 
 

00728                                                                {
00729 
00730   string channel;
00731   vector<string> temp;
00732   
00733   ifstream inFile;
00734  
00735   inFile.open(filename.c_str());
00736   if (!inFile) {
00737     cout << "Unable to open decay list file";
00738     exit(1); // terminate with error
00739   }
00740     
00741   while (inFile >> channel) {
00742     temp.push_back(channel);
00743   }
00744     
00745   inFile.close();
00746   
00747   return temp;
00748   
00749 }

StatusCode NeutralDReconstruction::initialize  ) 
 

StatusCode NeutralDReconstruction::initialize  ) 
 

00065                                               {
00066   MsgStream log(msgSvc(), name());
00067   log << MSG::INFO << "in initialize()" <<endreq;
00068   
00069   m_irun=-100;
00070   chanlist=getlist(m_decaylist);
00071   
00072   return StatusCode::SUCCESS;
00073 }

void NeutralDReconstruction::pidtag vector< int >  ,
vector< int >  ,
CDChargedKaonList ,
CDChargedPionList ,
EvtRecDTag
 

void NeutralDReconstruction::pidtag vector< int >  ,
vector< int >  ,
CDChargedKaonList ,
CDChargedPionList ,
EvtRecDTag
 

00676                                                                                                                                                        {
00677 
00678   bool iskaon=false,ispion=false;
00679   
00680   
00681   // save track ids which passed pion/kaon cuts
00682 
00683   for (CDChargedKaonList::iterator kit = kaonList.particle_begin(); kit != kaonList.particle_end(); kit++) {
00684     recDTag->addKaonId( (*kit).particle().track() );
00685   }
00686 
00687   for (CDChargedPionList::iterator pit = pionList.particle_begin(); pit != pionList.particle_end(); pit++) {
00688     recDTag->addPionId( (*pit).particle().track() );
00689   }
00690   
00691 
00692   
00693   for(int i=0; i<kaonid.size(); i++){
00694     bool ithkaon=false;
00695     for (CDChargedKaonList::iterator kit = kaonList.particle_begin(); kit != kaonList.particle_end(); kit++) {
00696       if((*kit).particle().track()->trackId()==kaonid[i]){
00697         ithkaon=true;
00698         break;
00699       }
00700     }
00701     if(!ithkaon) break;
00702     if(i==kaonid.size()-1)
00703       iskaon=true;
00704   }
00705 
00706   for(int i=0; i<pionid.size(); i++){
00707     bool ithpion=false;
00708     for (CDChargedPionList::iterator pit = pionList.particle_begin(); pit != pionList.particle_end(); pit++) {
00709       if((*pit).particle().track()->trackId()==pionid[i]){
00710         ithpion=true;
00711         break;
00712       }
00713     }
00714     if(!ithpion) break;
00715     if(i==pionid.size()-1)
00716       ispion=true;
00717   }
00718   
00719 
00720   if( iskaon && ispion)
00721     recDTag->settype( EvtRecDTag::Tight );
00722   else if( (kaonid.size()==0 && ispion) || (pionid.size()==0 && iskaon))
00723     recDTag->settype( EvtRecDTag::Tight );
00724   
00725 }

StatusCode NeutralDReconstruction::registerEvtRecDTagCol EvtRecDTagCol dtagCol,
MsgStream &  log
[private]
 

StatusCode NeutralDReconstruction::registerEvtRecDTagCol EvtRecDTagCol dtagCol,
MsgStream &  log
[private]
 

00086                                                       {
00087   StatusCode sc = eventSvc()->registerObject("/Event/EvtRec/EvtRecDTagCol",
00088                                              aNewEvtRecDTagCol);
00089   if (sc != StatusCode::SUCCESS) {
00090     log << MSG::FATAL << "Could not register EvtRecDTagCol in TDS!" << endreq;
00091   }
00092   return sc;
00093 }

void NeutralDReconstruction::saveD0Info CDDecayList::iterator  ,
double  ,
int  ,
int  ,
EvtRecDTag
 

void NeutralDReconstruction::saveD0Info CDDecayList::iterator  ,
double  ,
int  ,
int  ,
EvtRecDTag
 

00599                                                                                                                                {
00600 
00601   double mass = (*it).particle().mass();
00602   HepLorentzVector p4((*it).particle().momentum(), (*it).particle().energy());
00603   recDTag->setp4(p4);
00604   
00605   p4.boost(-0.011, 0, 0);
00606   double mbc2_CMS = ebeam*ebeam - p4.v().mag2();
00607   double mbc_CMS = mbc2_CMS > 0 ? sqrt( mbc2_CMS ) : -10;
00608   double deltaE_CMS = p4.t() - ebeam;
00609   
00610   recDTag->settype( EvtRecDTag::Loose );
00611   recDTag->setcharge(0);
00612   recDTag->setcharm(charm);
00613   recDTag->setnumOfChildren(numofchildren);
00614   recDTag->setmass(mass);
00615   recDTag->setmBC(mbc_CMS);
00616   recDTag->setbeamE(ebeam);
00617   recDTag->setdeltaE(deltaE_CMS);
00618   
00619 }

void NeutralDReconstruction::savetrack vector< int >  ,
vector< int >  ,
EvtRecTrackIterator  ,
EvtRecTrackIterator  ,
EvtRecTrackIterator  ,
EvtRecTrackIterator  ,
EvtRecDTag
 

void NeutralDReconstruction::savetrack vector< int >  ,
vector< int >  ,
EvtRecTrackIterator  ,
EvtRecTrackIterator  ,
EvtRecTrackIterator  ,
EvtRecTrackIterator  ,
EvtRecDTag
 

00622                                                                                                                              {
00623 
00624   vector<EvtRecTrackIterator> trktemp;
00625   vector<EvtRecTrackIterator> shrtemp;
00626  
00627   //fill tracks
00628   for(EvtRecTrackIterator trk=charged_begin; trk<charged_end;trk++){
00629 
00630     bool isothertrack=true;
00631     for(int i=0; i<trackid.size(); i++){
00632       if( (*trk)->trackId()==trackid[i] ){
00633         trktemp.push_back(trk);
00634         isothertrack=false;
00635         break;
00636       }
00637     }
00638     if(isothertrack)
00639       recDTag->addOtherTrack(*trk);
00640   }
00641   for(int i=0; i<trackid.size();i++){
00642     for(int j=0; j<trktemp.size(); j++){
00643       EvtRecTrackIterator trk=trktemp[j];
00644       if( (*trk)->trackId()==trackid[i])
00645         recDTag->addTrack(*trktemp[j]);
00646     }
00647   }
00648 
00649   
00650   //fill showers
00651   for(EvtRecTrackIterator shr=neutral_begin; shr<neutral_end;shr++){
00652     bool isothershower=true;
00653     for(int i=0; i<showerid.size(); i++){
00654       if( (*shr)->trackId()==showerid[i] ){
00655         shrtemp.push_back(shr);
00656         isothershower=false;
00657         break;
00658       }
00659     }
00660     if(isothershower)
00661       recDTag->addOtherShower(*shr);
00662   }
00663 
00664   for(int i=0; i<showerid.size();i++){
00665     for(int j=0; j<shrtemp.size(); j++){
00666       EvtRecTrackIterator shr=shrtemp[j];
00667       if( (*shr)->trackId()==showerid[i])
00668         recDTag->addShower(*shrtemp[j]);
00669     }
00670   }
00671   
00672   
00673 }


Member Data Documentation

vector<string> NeutralDReconstruction::chanlist [private]
 

vector<string> NeutralDReconstruction::chanlist [private]
 

double NeutralDReconstruction::m_beamE [private]
 

bool NeutralDReconstruction::m_debug [private]
 

string NeutralDReconstruction::m_decaylist [private]
 

int NeutralDReconstruction::m_ievt [private]
 

int NeutralDReconstruction::m_irun [private]
 

int NeutralDReconstruction::m_nChrg [private]
 

int NeutralDReconstruction::m_nKaon [private]
 

int NeutralDReconstruction::m_nKs [private]
 

int NeutralDReconstruction::m_nNeu [private]
 

int NeutralDReconstruction::m_nPi0 [private]
 

int NeutralDReconstruction::m_nPion [private]
 

bool NeutralDReconstruction::m_ReadBeamEFromDB [private]
 

ReadBeamInfFromDb NeutralDReconstruction::m_readDb [private]
 


The documentation for this class was generated from the following files:
Generated on Wed Feb 2 16:37:57 2011 for BOSS6.5.5 by  doxygen 1.3.9.1