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

DsReconstruction Class Reference

#include <DsReconstruction.h>

List of all members.

Public Member Functions

 DsReconstruction (const std::string &name, ISvcLocator *pSvcLocator)
 DsReconstruction (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode execute ()
StatusCode execute ()
StatusCode finalize ()
StatusCode finalize ()
vector< string > getlist (string &filename)
vector< string > getlist (string &filename)
StatusCode initialize ()
StatusCode initialize ()
void pidtag (vector< int >, vector< int >, CDChargedKaonList &, CDChargedPionList &, EvtRecDTag *)
void pidtag (vector< int >, vector< int >, CDChargedKaonList &, CDChargedPionList &, EvtRecDTag *)
void saveDsInfo (CDDecayList::iterator, double, int, EvtRecDTag *)
void saveDsInfo (CDDecayList::iterator, double, 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

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

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

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


Member Function Documentation

StatusCode DsReconstruction::execute  ) 
 

StatusCode DsReconstruction::execute  ) 
 

00095                                      {
00096   MsgStream log(msgSvc(), name());
00097   log << MSG::INFO << "in execute()" << endreq;
00098 
00099   StatusCode sc;
00100 
00102   // Read REC data
00104   SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00105   int event= eventHeader->eventNumber();
00106   // if ( m_debug || ( (event & 0x3FF) == 0 ) )
00107   //std::cout << "event: " << event << std::endl;
00108 
00109   SmartDataPtr<EvtRecEvent> recEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
00110   SmartDataPtr<EvtRecTrackCol> recTrackCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
00111   log << MSG::DEBUG << "run and event = " << eventHeader->runNumber()
00112                                         << " " << eventHeader->eventNumber() << endreq;
00113   log << MSG::DEBUG <<"ncharg, nneu, tottks = "
00114           << recEvent->totalCharged() << " , "
00115           << recEvent->totalNeutral() << " , "
00116       << recEvent->totalTracks() <<endreq;
00117   
00118   EvtRecTrackIterator charged_begin = recTrackCol->begin();
00119   EvtRecTrackIterator charged_end = charged_begin + recEvent->totalCharged();
00120 
00121   EvtRecTrackIterator neutral_begin = recTrackCol->begin()+recEvent->totalCharged();
00122   EvtRecTrackIterator neutral_end = recTrackCol->begin()+recEvent->totalTracks();
00123 
00124   
00125   SmartDataPtr<EvtRecPi0Col> recPi0Col(eventSvc(), "/Event/EvtRec/EvtRecPi0Col");
00126   if ( ! recPi0Col ) {
00127     log << MSG::FATAL << "Could not find EvtRecPi0Col" << endreq;
00128     return StatusCode::FAILURE;
00129   }
00130 
00131   SmartDataPtr<EvtRecEtaToGGCol> recEtaToGGCol(eventSvc(), "/Event/EvtRec/EvtRecEtaToGGCol");
00132   if ( ! recEtaToGGCol ) {
00133     log << MSG::FATAL << "Could not find EvtRecEtaToGGCol" << endreq;
00134     return StatusCode::FAILURE;
00135   }
00136   
00137 
00138   SmartDataPtr<EvtRecVeeVertexCol> recVeeVertexCol(eventSvc(), "/Event/EvtRec/EvtRecVeeVertexCol");
00139   if ( ! recVeeVertexCol ) {
00140     log << MSG::FATAL << "Could not find EvtRecVeeVertexCol" << endreq;
00141     return StatusCode::FAILURE;
00142   }
00143   
00144   
00145   SmartDataPtr<EvtRecDTagCol> recDTagCol(eventSvc(), EventModel::EvtRec::EvtRecDTagCol);
00146   if (!recDTagCol) {
00147     log << MSG::FATAL << "EvtRecDTagCol is not registered yet" << endreq;
00148      return StatusCode::FAILURE;
00149   }
00150   //registered in DTag.cxx
00151   /*
00152     if (!recDTagCol) {
00153     recDTagCol = new EvtRecDTagCol;
00154     sc = registerEvtRecDTagCol(recDTagCol, log);
00155     if (sc != StatusCode::SUCCESS) {
00156     return sc;
00157     }
00158     }
00159   */
00160   
00161   
00163   //reconstruct particle lists
00165   
00166   pionSelector.setpidtype(0);
00167   kaonSelector.setpidtype(0);
00168   CDChargedPionList pionList(charged_begin, charged_end, pionSelector);
00169   CDChargedKaonList kaonList(charged_begin, charged_end, kaonSelector);
00170   CDPhotonList      photonList(neutral_begin, neutral_end, photonSelector);
00171   CDKsList          ksList(ksSelector);
00172   dc_fill(ksList,  recVeeVertexCol->begin(), recVeeVertexCol->end());
00173   
00174   CDPi0List         pi0List(pi0Selector);
00175   dc_fill(pi0List, recPi0Col->begin(), recPi0Col->end());
00176   
00177   CDEtaList         etaList(etatoGGSelector);
00178   dc_fill(etaList, recEtaToGGCol->begin(), recEtaToGGCol->end());
00179 
00180   //pion/kaon list with PID
00181   pionSelector.setpidtype(1);
00182   kaonSelector.setpidtype(1);
00183   CDChargedPionList pionList_tight(charged_begin, charged_end, pionSelector);
00184   CDChargedKaonList kaonList_tight(charged_begin, charged_end, kaonSelector);
00185 
00186 
00187   int run  = eventHeader->runNumber();
00188   m_ievt  = eventHeader->eventNumber();
00189   m_nChrg = recEvent->totalCharged();
00190   m_nNeu  = recEvent->totalNeutral();
00191   m_nPion = pionList.size();
00192   m_nKaon = kaonList.size();
00193   m_nPi0  = pi0List.size();
00194   m_nKs   = ksList.size();
00195   
00196   
00198   // get beam energy
00200   
00201  
00202   if(m_ReadBeamEFromDB && run>0 && m_irun!=run){
00203     m_irun=run;
00204     m_beamE=m_readDb.getbeamE(m_irun,m_beamE);
00205   }
00206   double ebeam=m_beamE;
00207  
00209   //reconstruct decay lists
00211   
00212   
00213   for(int list=0;list<chanlist.size();list++){
00214     
00215     string channel=chanlist[list];
00216     vector<int> numchan;
00217     dsSelector.setebeam(ebeam);
00218     CDDecayList decaylist(dsSelector);
00219 
00220     //K+/-: 1, Pi+/-:2,  Pi0:3, Eta: 4, Ks:5, eta'(pipieta):6, eta'(rhogamma):7
00221     //the fist element of the vector stands for decay mode,
00222     //the rest will be particles, and size of the vector minus 1 will be number of daughers.
00223     
00224     if(channel=="DstoKsK") {
00225       numchan.push_back( EvtRecDTag::kDstoKsK );
00226       numchan.push_back(5);
00227       numchan.push_back(1);
00228       decaylist=ksList* kaonList.plus();
00229     }
00230     else if(channel=="DstoKKPi") {
00231       numchan.push_back( EvtRecDTag::kDstoKKPi );
00232       numchan.push_back(1);
00233       numchan.push_back(1);
00234       numchan.push_back(2);
00235       decaylist=kaonList.minus()* kaonList.plus()* pionList.plus();
00236     }
00237     else if(channel=="DstoKsKPi0") {
00238       numchan.push_back( EvtRecDTag::kDstoKsKPi0 );
00239       numchan.push_back(5);
00240       numchan.push_back(1);
00241       numchan.push_back(3);
00242       decaylist=ksList* kaonList.plus()* pi0List;
00243     }
00244     else if(channel=="DstoKsKsPi") {
00245       numchan.push_back( EvtRecDTag::kDstoKsKsPi );
00246       numchan.push_back(5);
00247       numchan.push_back(5);
00248       numchan.push_back(2);
00249       decaylist=ksList* ksList* pionList.plus();
00250     }
00251     else if(channel=="DstoKKPiPi0") {
00252       numchan.push_back( EvtRecDTag::kDstoKKPiPi0 );
00253       numchan.push_back(1);
00254       numchan.push_back(1);
00255       numchan.push_back(2);
00256       numchan.push_back(3);
00257       decaylist=kaonList.minus()* kaonList.plus()* pionList.plus()* pi0List;
00258     }
00259     else if(channel=="DstoKsKplusPiPi") {
00260       numchan.push_back( EvtRecDTag::kDstoKsKplusPiPi );
00261       numchan.push_back(5);
00262       numchan.push_back(1);
00263       numchan.push_back(2);
00264       numchan.push_back(2);
00265       decaylist=ksList* kaonList.plus()* pionList.plus()* pionList.minus();
00266     }
00267     else if(channel=="DstoKsKminusPiPi") {
00268       numchan.push_back( EvtRecDTag::kDstoKsKminusPiPi );
00269       numchan.push_back(5);
00270       numchan.push_back(1);
00271       numchan.push_back(2);
00272       numchan.push_back(2);
00273       decaylist=ksList* kaonList.minus()* pionList.plus()* pionList.plus();
00274     }
00275     else if(channel=="DstoKKPiPiPi") {
00276       numchan.push_back( EvtRecDTag::kDstoKKPiPiPi );
00277       numchan.push_back(1);
00278       numchan.push_back(1);
00279       numchan.push_back(2);
00280       numchan.push_back(2);
00281       numchan.push_back(2);
00282       decaylist=kaonList.minus()* kaonList.plus()* pionList.plus()* pionList.plus()* pionList.minus();
00283     }
00284     else if(channel=="DstoPiPi0") {
00285       numchan.push_back( EvtRecDTag::kDstoPiPi0 );
00286       numchan.push_back(2);
00287       numchan.push_back(3);
00288       decaylist=pionList.plus()* pi0List;
00289     }
00290     else if(channel=="DstoPiPiPi") {
00291       numchan.push_back( EvtRecDTag::kDstoPiPiPi );
00292       numchan.push_back(2);
00293       numchan.push_back(2);
00294       numchan.push_back(2);
00295       decaylist=pionList.plus()* pionList.plus()* pionList.minus();
00296     }
00297     else if(channel=="DstoPiPiPiPi0") {
00298       numchan.push_back( EvtRecDTag::kDstoPiPiPiPi0 );
00299       numchan.push_back(2);
00300       numchan.push_back(2);
00301       numchan.push_back(2);
00302       numchan.push_back(3);
00303       decaylist=pionList.plus()* pionList.plus()* pionList.minus()* pi0List;
00304     }
00305     else if(channel=="DstoPiPiPiPiPi") {
00306       numchan.push_back( EvtRecDTag::kDstoPiPiPiPiPi );
00307       numchan.push_back(2);
00308       numchan.push_back(2);
00309       numchan.push_back(2);
00310       numchan.push_back(2);
00311       numchan.push_back(2);
00312       decaylist=pionList.plus()* pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus();
00313     }
00314     else if(channel=="DstoPiPiPiPiPiPi0") {
00315       numchan.push_back( EvtRecDTag::kDstoPiPiPiPiPiPi0 );
00316       numchan.push_back(2);
00317       numchan.push_back(2);
00318       numchan.push_back(2);
00319       numchan.push_back(2);
00320       numchan.push_back(2);
00321       numchan.push_back(3);
00322       decaylist=pionList.plus()* pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus()* pi0List;
00323     }
00324     else if(channel=="DstoPiEta") {
00325       numchan.push_back( EvtRecDTag::kDstoPiEta );
00326       numchan.push_back(2);
00327       numchan.push_back(4);
00328       decaylist=pionList.plus()* etaList;
00329     }
00330     else if(channel=="DstoPiPi0Eta") {
00331       numchan.push_back( EvtRecDTag::kDstoPiPi0Eta );
00332       numchan.push_back(2);
00333       numchan.push_back(3);
00334       numchan.push_back(4);
00335       decaylist=pionList.plus()* pi0List* etaList;
00336     }
00337     else if(channel=="DstoPiPiPiEta") {
00338       numchan.push_back( EvtRecDTag::kDstoPiPiPiEta );
00339       numchan.push_back(2);
00340       numchan.push_back(2);
00341       numchan.push_back(2);
00342       numchan.push_back(4);
00343       decaylist=pionList.plus()* pionList.plus()* pionList.minus()* etaList;
00344     }
00345     else if(channel=="DstoPiEPPiPiEta") {
00346       numchan.push_back( EvtRecDTag::kDstoPiEPPiPiEta );
00347       numchan.push_back(2);
00348       numchan.push_back(6);
00349       CDDecayList epList(eptoPiPiEtaSelector);
00350       epList=pionList.plus()* pionList.minus()* etaList;
00351       decaylist=pionList.plus()* epList;
00352      }
00353     else if(channel=="DstoPiPi0EPPiPiEta") {
00354       numchan.push_back( EvtRecDTag::kDstoPiPi0EPPiPiEta );
00355       numchan.push_back(2);
00356       numchan.push_back(3);
00357       numchan.push_back(6);
00358       CDDecayList epList(eptoPiPiEtaSelector);
00359       epList=pionList.plus()* pionList.minus()* etaList;
00360       decaylist=pionList.plus()* pi0List* epList;
00361      }
00362     else if(channel=="DstoPiEPRhoGam") {
00363       numchan.push_back( EvtRecDTag::kDstoPiEPRhoGam );
00364       numchan.push_back(2);
00365       numchan.push_back(7);
00366       CDDecayList rhoList(rhotoPiPiSelector);
00367       rhoList=pionList.plus()* pionList.minus();
00368       CDDecayList epList(eptoRhoGamSelector);
00369       epList=rhoList* photonList;
00370       decaylist=pionList.plus()* epList;
00371      }
00372     else if(channel=="DstoPiPi0EPRhoGam") {
00373       numchan.push_back( EvtRecDTag::kDstoPiPi0EPRhoGam );
00374       numchan.push_back(2);
00375       numchan.push_back(3);
00376       numchan.push_back(7);
00377       CDDecayList rhoList(rhotoPiPiSelector);
00378       rhoList=pionList.plus()* pionList.minus();
00379       CDDecayList epList(eptoRhoGamSelector);
00380       epList=rhoList* photonList;
00381       decaylist=pionList.plus()* pi0List* epList;
00382      }
00383     else if(channel=="DstoKsPi") {
00384       numchan.push_back( EvtRecDTag::kDstoKsPi );
00385       numchan.push_back(5);
00386       numchan.push_back(2);
00387       decaylist=ksList* pionList.plus();
00388     }
00389     else if(channel=="DstoKsPiPi0") {
00390       numchan.push_back( EvtRecDTag::kDstoKsPiPi0 );
00391       numchan.push_back(5);
00392       numchan.push_back(2);
00393       numchan.push_back(3);
00394       decaylist=ksList* pionList.plus()* pi0List;
00395     }
00396     else if(channel=="DstoKPiPi") {
00397       numchan.push_back( EvtRecDTag::kDstoKPiPi );
00398       numchan.push_back(1);
00399       numchan.push_back(2);
00400       numchan.push_back(2);
00401       decaylist=kaonList.plus()* pionList.plus()* pionList.minus();
00402     }
00403     else if(channel=="DstoKPiPiPi0") {
00404       numchan.push_back( EvtRecDTag::kDstoKPiPiPi0 );
00405       numchan.push_back(1);
00406       numchan.push_back(2);
00407       numchan.push_back(2);
00408       numchan.push_back(3);
00409       decaylist=kaonList.plus()* pionList.plus()* pionList.minus()* pi0List;
00410     }
00411     else if(channel=="DstoKKK") {
00412       numchan.push_back( EvtRecDTag::kDstoKKK );
00413       numchan.push_back(1);
00414       numchan.push_back(1);
00415       numchan.push_back(1);
00416       decaylist=kaonList.minus()* kaonList.plus()* kaonList.plus();
00417     }
00418 
00419     CDDecayList::iterator D_begin =decaylist.particle_begin();
00420     CDDecayList::iterator D_end   =decaylist.particle_end();
00421 
00422     for ( CDDecayList::iterator it = D_begin; it != D_end; it++ ) {
00423       
00424       EvtRecDTag* recDTag = new EvtRecDTag;
00425       recDTag->setdecayMode( (EvtRecDTag::DecayMode)numchan[0] );
00426       
00427       vector<int> trackid, showerid;
00428       vector<int> kaonid, pionid;
00429       int numofchildren=numchan.size()-1;
00430 
00431       for(int i=0; i< numofchildren;i++){
00432         
00433         const CDCandidate& daughter=(*it).particle().child(i);
00434         
00435         if(numchan[i+1]==1){
00436           const EvtRecTrack* track=daughter.track();
00437           trackid.push_back(track->trackId());
00438           kaonid.push_back(track->trackId());
00439         }
00440         else if(numchan[i+1]==2){
00441           const EvtRecTrack* track=daughter.track();
00442           trackid.push_back(track->trackId());
00443           pionid.push_back(track->trackId());
00444         }
00445         else if ( numchan[i+1]==3){
00446           const EvtRecTrack* hiEnGamma=daughter.navPi0()->hiEnGamma();
00447           const EvtRecTrack* loEnGamma=daughter.navPi0()->loEnGamma();
00448           showerid.push_back(hiEnGamma->trackId());
00449           showerid.push_back(loEnGamma->trackId());
00450         }
00451         else if ( numchan[i+1]==4){
00452           const EvtRecTrack* hiEnGamma=daughter.navEta()->hiEnGamma();
00453           const EvtRecTrack* loEnGamma=daughter.navEta()->loEnGamma();
00454           showerid.push_back(hiEnGamma->trackId());
00455           showerid.push_back(loEnGamma->trackId());
00456         }
00457         else if ( numchan[i+1]==5){
00458           EvtRecVeeVertex* aKsCand = const_cast<EvtRecVeeVertex*>( daughter.navKshort() );
00459           EvtRecTrack* pion1Trk = aKsCand->daughter(0);
00460           EvtRecTrack* pion2Trk = aKsCand->daughter(1);    
00461           trackid.push_back(pion1Trk->trackId());
00462           trackid.push_back(pion2Trk->trackId());
00463         }
00464         else if (numchan[i+1]==6){
00465           const CDCandidate& apion = daughter.decay().child(0);
00466           const CDCandidate& spion = daughter.decay().child(1);
00467           const CDCandidate& eta = daughter.decay().child(2);
00468           const EvtRecTrack* apiontrk = apion.track();
00469           const EvtRecTrack* spiontrk = spion.track();
00470           const EvtRecTrack* hiEnGamma=eta.navEta()->hiEnGamma();
00471           const EvtRecTrack* loEnGamma=eta.navEta()->loEnGamma();
00472           
00473           trackid.push_back(apiontrk->trackId());
00474           trackid.push_back(spiontrk->trackId());
00475           showerid.push_back(hiEnGamma->trackId());
00476           showerid.push_back(loEnGamma->trackId());
00477           
00478         }
00479         else if (numchan[i+1]==7){
00480           const CDCandidate& rho = daughter.decay().child(0);
00481           const CDCandidate& apion = rho.decay().child(0);
00482           const CDCandidate& spion = rho.decay().child(1);
00483           const CDCandidate& gamma = daughter.decay().child(1);
00484           
00485           const EvtRecTrack* apiontrk = apion.track();
00486           const EvtRecTrack* spiontrk = spion.track();
00487           const EvtRecTrack* gammatrk = gamma.photon();
00488           
00489           
00490           trackid.push_back(apiontrk->trackId());
00491           trackid.push_back(spiontrk->trackId());
00492           showerid.push_back(gammatrk->trackId());
00493 
00494         }
00495         
00496 
00497       }//end of filling track and shower ids
00498       
00499       
00500       saveDsInfo(it, ebeam, numofchildren, recDTag);
00501       savetrack(trackid,showerid,charged_begin,charged_end,neutral_begin,neutral_end,recDTag);
00502       pidtag(kaonid,pionid,kaonList_tight, pionList_tight,recDTag);
00503      
00504       trackid.clear();
00505       showerid.clear();
00506       kaonid.clear();
00507       pionid.clear();
00508       
00509       
00510 
00511       //write dtag object out
00512       recDTagCol->push_back(recDTag);
00513       
00514     }//end of decaylist iterator
00515 
00516     numchan.clear();
00517 
00518   }//end of reconstrucing all D+ decay lists
00519 
00520     
00521 
00522   return StatusCode::SUCCESS;
00523 }

StatusCode DsReconstruction::finalize  ) 
 

StatusCode DsReconstruction::finalize  ) 
 

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

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

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

00654                                                          {
00655 
00656   string channel;
00657   vector<string> temp;
00658   
00659   ifstream inFile;
00660  
00661   inFile.open(filename.c_str());
00662   if (!inFile) {
00663     cout << "Unable to open decay list file";
00664     exit(1); // terminate with error
00665   }
00666     
00667   while (inFile >> channel) {
00668     temp.push_back(channel);
00669   }
00670     
00671   inFile.close();
00672   
00673   return temp;
00674   
00675 }

StatusCode DsReconstruction::initialize  ) 
 

StatusCode DsReconstruction::initialize  ) 
 

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

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

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

00603                                                                                                                                                  {
00604 
00605   bool iskaon=false,ispion=false;
00606   
00607   
00608   // save track ids which passed pion/kaon cuts
00609 
00610   for (CDChargedKaonList::iterator kit = kaonList.particle_begin(); kit != kaonList.particle_end(); kit++) {
00611     recDTag->addKaonId( (*kit).particle().track() );
00612   }
00613 
00614   for (CDChargedPionList::iterator pit = pionList.particle_begin(); pit != pionList.particle_end(); pit++) {
00615     recDTag->addPionId( (*pit).particle().track() );
00616   }
00617   
00618 
00619   
00620   for(int i=0; i<kaonid.size(); i++){
00621     bool ithkaon=false;
00622     for (CDChargedKaonList::iterator kit = kaonList.particle_begin(); kit != kaonList.particle_end(); kit++) {
00623       if((*kit).particle().track()->trackId()==kaonid[i]){
00624         ithkaon=true;
00625         break;
00626       }
00627     }
00628     if(!ithkaon) break;
00629     if(i==kaonid.size()-1)
00630       iskaon=true;
00631   }
00632 
00633   for(int i=0; i<pionid.size(); i++){
00634     bool ithpion=false;
00635     for (CDChargedPionList::iterator pit = pionList.particle_begin(); pit != pionList.particle_end(); pit++) {
00636       if((*pit).particle().track()->trackId()==pionid[i]){
00637         ithpion=true;
00638         break;
00639       }
00640     }
00641     if(!ithpion) break;
00642     if(i==pionid.size()-1)
00643       ispion=true;
00644   }
00645   
00646 
00647   if( iskaon && ispion)
00648     recDTag->settype( EvtRecDTag::Tight );
00649   else if( (kaonid.size()==0 && ispion) || (pionid.size()==0 && iskaon))
00650     recDTag->settype( EvtRecDTag::Tight );
00651 }

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

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

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

void DsReconstruction::saveDsInfo CDDecayList::iterator  ,
double  ,
int  ,
EvtRecDTag
 

void DsReconstruction::saveDsInfo CDDecayList::iterator  ,
double  ,
int  ,
EvtRecDTag
 

00526                                                                                                               {
00527   
00528   double mass = (*it).particle().mass();
00529   int charge= (*it).particle().charge();
00530   HepLorentzVector p4((*it).particle().momentum(), (*it).particle().energy());
00531   recDTag->setp4(p4);
00532   
00533   p4.boost(-0.011, 0, 0);
00534   double mbc2_CMS = ebeam*ebeam - p4.v().mag2();
00535   double mbc_CMS = mbc2_CMS > 0 ? sqrt( mbc2_CMS ) : -10;
00536   double deltaE_CMS = p4.t() - ebeam;
00537   
00538   recDTag->settype( EvtRecDTag::Loose );
00539   recDTag->setcharge(charge);
00540   recDTag->setcharm(charge);
00541   recDTag->setnumOfChildren(numofchildren);
00542   recDTag->setmass(mass);
00543   recDTag->setmBC(mbc_CMS);
00544   recDTag->setbeamE(ebeam);
00545   recDTag->setdeltaE(deltaE_CMS);
00546   
00547 }

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

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

00550                                                                                                                              {
00551 
00552   vector<EvtRecTrackIterator> trktemp;
00553   vector<EvtRecTrackIterator> shrtemp;
00554  
00555   //fill tracks
00556   for(EvtRecTrackIterator trk=charged_begin; trk<charged_end;trk++){
00557 
00558     bool isothertrack=true;
00559     for(int i=0; i<trackid.size(); i++){
00560       if( (*trk)->trackId()==trackid[i] ){
00561         trktemp.push_back(trk);
00562         isothertrack=false;
00563         break;
00564       }
00565     }
00566     if(isothertrack)
00567       recDTag->addOtherTrack(*trk);
00568   }
00569   for(int i=0; i<trackid.size();i++){
00570     for(int j=0; j<trktemp.size(); j++){
00571       EvtRecTrackIterator trk=trktemp[j];
00572       if( (*trk)->trackId()==trackid[i])
00573         recDTag->addTrack(*trktemp[j]);
00574     }
00575   }
00576 
00577   
00578   //fill showers
00579   for(EvtRecTrackIterator shr=neutral_begin; shr<neutral_end;shr++){
00580     bool isothershower=true;
00581     for(int i=0; i<showerid.size(); i++){
00582       if( (*shr)->trackId()==showerid[i] ){
00583         shrtemp.push_back(shr);
00584         isothershower=false;
00585         break;
00586       }
00587     }
00588     if(isothershower)
00589       recDTag->addOtherShower(*shr);
00590   }
00591 
00592   for(int i=0; i<showerid.size();i++){
00593     for(int j=0; j<shrtemp.size(); j++){
00594       EvtRecTrackIterator shr=shrtemp[j];
00595       if( (*shr)->trackId()==showerid[i])
00596         recDTag->addShower(*shrtemp[j]);
00597     }
00598   }
00599   
00600   
00601 }


Member Data Documentation

vector<string> DsReconstruction::chanlist [private]
 

vector<string> DsReconstruction::chanlist [private]
 

double DsReconstruction::m_beamE [private]
 

bool DsReconstruction::m_debug [private]
 

string DsReconstruction::m_decaylist [private]
 

int DsReconstruction::m_ievt [private]
 

int DsReconstruction::m_irun [private]
 

int DsReconstruction::m_nChrg [private]
 

int DsReconstruction::m_nKaon [private]
 

int DsReconstruction::m_nKs [private]
 

int DsReconstruction::m_nNeu [private]
 

int DsReconstruction::m_nPi0 [private]
 

int DsReconstruction::m_nPion [private]
 

bool DsReconstruction::m_ReadBeamEFromDB [private]
 

ReadBeamInfFromDb DsReconstruction::m_readDb [private]
 


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