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

BesDChainExAlg Class Reference

#include <BesDChainExAlg.h>

List of all members.

Public Member Functions

 BesDChainExAlg (const std::string &name, ISvcLocator *pSvcLocator)
 BesDChainExAlg (const std::string &name, ISvcLocator *pSvcLocator)
StatusCode execute ()
StatusCode execute ()
StatusCode finalize ()
StatusCode finalize ()
StatusCode initialize ()
StatusCode initialize ()

Private Attributes

Chic2Selector chic2Selector
LocalKaonSelector kaonSelector
LocalKsSelector ksSelector
NTuple::Item< double > m_CandPhoton_Energy
NTuple::Item< double > m_CandPhoton_Energy
NTuple::Item< double > m_Chic2_Mass
NTuple::Item< double > m_Chic2_Mass
bool m_debug
NTuple::Item< long > m_ievt
NTuple::Item< long > m_ievt
NTuple::Item< long > m_irun
NTuple::Item< long > m_irun
NTuple::Item< double > m_Kaon_P
NTuple::Item< double > m_Kaon_P
NTuple::Item< double > m_Ks_Mass
NTuple::Item< double > m_Ks_Mass
NTuple::Item< double > m_KStar0_Mass
NTuple::Item< double > m_KStar0_Mass
NTuple::Item< long > m_nCandPhoton
NTuple::Item< long > m_nCandPhoton
NTuple::Item< long > m_nChrg
NTuple::Item< long > m_nChrg
NTuple::Item< long > m_nKaon
NTuple::Item< long > m_nKaon
NTuple::Item< long > m_nKs
NTuple::Item< long > m_nKs
NTuple::Item< long > m_nNeu
NTuple::Item< long > m_nNeu
NTuple::Item< long > m_nPi0
NTuple::Item< long > m_nPi0
NTuple::Item< long > m_nPion
NTuple::Item< long > m_nPion
NTuple::Tuple * m_nt
NTuple::Tuple * m_nt
NTuple::Item< double > m_Pi0_UnconMass
NTuple::Item< double > m_Pi0_UnconMass
NTuple::Item< double > m_Pion_P
NTuple::Item< double > m_Pion_P
LocalPhotonSelector photonSelector
LocalPionSelector pionSelector


Constructor & Destructor Documentation

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

00031                                                                               :
00032    Algorithm(name, pSvcLocator)
00033 {
00034    // Declare the properties  
00035    declareProperty( "debug",  m_debug = false );
00036 }

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


Member Function Documentation

StatusCode BesDChainExAlg::execute  ) 
 

StatusCode BesDChainExAlg::execute  ) 
 

Fill particle lists

General event information printed out if m_debug = TRUE

Construct decays

Loop over combinations

Per event information for NTuple

Access photon from psi2S -> gamma chi_c2 candidate

Access chi_c2 decay from psi2S -> gamma chi_c2 candidate

Access K decay from chi_c2 -> K- pi+ K*0 + c.c. candidate

Access pi decay from chi_c2 -> K- pi+ K*0 + c.c. candidate

Access K*0 decay from chi_c2 -> K- pi+ K*0 + c.c. candidate

Access Ks decay from K*0 -> Ks pi0 candidate

Access pi0 decay from K*0 -> Ks pi0 candidate

aPi0FromKStar0.mass() not useful, returned constrained M(pi0), better to access unconstrained M(gamma gamma)

00080                                    {
00081 
00082    MsgStream log(msgSvc(), name());
00083    log << MSG::INFO << "in execute()" << endreq;
00084 
00085    SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00086    if (!eventHeader) {
00087       log << MSG::FATAL << "Could not find Event Header" << endreq;
00088       return( StatusCode::FAILURE);
00089    }
00090 
00091    SmartDataPtr<EvtRecEvent> evtRecEvent(eventSvc(), "/Event/EvtRec/EvtRecEvent");
00092    if ( ! evtRecEvent ) {
00093       log << MSG::FATAL << "Could not find EvtRecEvent" << endreq;
00094       return StatusCode::FAILURE;
00095    }
00096 
00097    SmartDataPtr<EvtRecTrackCol> evtRecTrackCol( eventSvc(), "/Event/EvtRec/EvtRecTrackCol");
00098    if ( ! evtRecTrackCol ) {
00099       log << MSG::FATAL << "Could not find EvtRecTrackCol" << endreq;
00100       return StatusCode::FAILURE;
00101    }
00102 
00103    EvtRecTrackIterator track_begin = evtRecTrackCol->begin();
00104    EvtRecTrackIterator charged_begin = track_begin;
00105    EvtRecTrackIterator charged_end = track_begin + evtRecEvent->totalCharged();
00106 
00107    EvtRecTrackIterator neutral_begin = track_begin + evtRecEvent->totalCharged();
00108    EvtRecTrackIterator neutral_end = track_begin + evtRecEvent->totalTracks();
00109 
00110 
00111    SmartDataPtr<EvtRecPi0Col> evtRecPi0Col(eventSvc(), "/Event/EvtRec/EvtRecPi0Col");
00112    if ( ! evtRecPi0Col ) {
00113       log << MSG::FATAL << "Could not find EvtRecPi0Col" << endreq;
00114       return StatusCode::FAILURE;
00115    }
00116 
00117    SmartDataPtr<EvtRecVeeVertexCol> evtRecVeeVertexCol(eventSvc(), "/Event/EvtRec/EvtRecVeeVertexCol");
00118    if ( ! evtRecVeeVertexCol ) {
00119       log << MSG::FATAL << "Could not find EvtRecVeeVertexCol" << endreq;
00120       return StatusCode::FAILURE;
00121    }
00122 
00124    CDPhotonList      photonList(neutral_begin, neutral_end, photonSelector);
00125    //CDPhotonList      photonList(neutral_begin, neutral_end, phSelWithDang);
00126    CDChargedPionList pionList(charged_begin, charged_end, pionSelector);
00127    CDChargedKaonList kaonList(charged_begin, charged_end, kaonSelector);
00128 
00129    CDKsList          ksList(ksSelector);
00130    dc_fill(ksList,   evtRecVeeVertexCol->begin(), evtRecVeeVertexCol->end() );
00131 
00132    CDPi0List         pi0List;
00133    dc_fill(pi0List,  evtRecPi0Col->begin(), evtRecPi0Col->end() );
00134 
00135 
00137    int event = eventHeader->eventNumber();
00138    if ( m_debug || ( (event & 0x3FF) == 0 ) )
00139       std::cout << "event: " << event << std::endl;
00140 
00141    if ( m_debug ) {
00142       std::cout << " *** nCharged: " << evtRecEvent->totalCharged()
00143                 << "  nNeutral: " << evtRecEvent->totalNeutral()
00144                 << "  nPhotons: " << photonList.size()
00145                 << "  nPion: " << pionList.size()
00146                 << "  nKaon: " << kaonList.size()
00147                 << "  nPi0: " << pi0List.size()
00148                 << "  nKs: " << ksList.size()
00149                 << std::endl;
00150    }
00151 
00152    int irun        = eventHeader->runNumber();
00153    int ievt        = eventHeader->eventNumber();  
00154    int nChrg       = evtRecEvent->totalCharged();
00155    int nNeu        = evtRecEvent->totalNeutral();
00156    int nCandPhoton = photonList.size();
00157    int nPion       = pionList.size();
00158    int nKaon       = kaonList.size();
00159    int nPi0        = pi0List.size();
00160    int nKs         = ksList.size();
00161 
00162 
00165 
00166    CDDecayList KStar0ToKsPi0;
00167    //CDDecayList KStar0ToKsPi0(kStar0Selector);  // Uses K*0 selector above
00168    KStar0ToKsPi0 = ksList * pi0List;
00169 
00170    CDDecayList Chic2Candidate(chic2Selector);
00171    Chic2Candidate = kaonList.minus() * pionList.plus() * KStar0ToKsPi0;
00172 
00173    CDDecayList Psi2sCandidate;
00174    Psi2sCandidate = photonList * Chic2Candidate;
00175       
00177    CDDecayList::iterator psi2sEnd = Psi2sCandidate.particle_end();
00178    for ( CDDecayList::iterator it = Psi2sCandidate.particle_begin(); it != psi2sEnd; it++ ) {
00179 
00181      m_irun         = irun;
00182      m_ievt         = ievt;
00183      m_nChrg        = nChrg;
00184      m_nNeu         = nNeu;
00185      m_nCandPhoton  = nCandPhoton;
00186      m_nPion        = nPion;
00187      m_nKaon        = nKaon;
00188      m_nPi0         = nPi0;
00189      m_nKs          = nKs;
00190 
00191 
00193      const CDCandidate& aPhoton = (*it).particle().child(0);
00194      EvtRecTrack* aPhotonTrk = const_cast<EvtRecTrack*>(aPhoton.photon());
00195 
00196      if ( !aPhotonTrk->isEmcShowerValid() ) continue;
00197      RecEmcShower* emcPhotonTrk = aPhotonTrk->emcShower();     
00198      if ( m_debug )  std::cout << "Photon Energy = " << emcPhotonTrk->energy() << std::endl;
00199      m_CandPhoton_Energy = emcPhotonTrk->energy();
00200 
00201 
00203      const CDCandidate& aChic2 = (*it).particle().child(1);
00204      if ( m_debug )  std::cout << "M(chic2) = " << aChic2.mass() << std::endl;
00205      m_Chic2_Mass = aChic2.mass();
00206 
00207 
00209      const CDCandidate& aKaonFromChic2 = aChic2.decay().child(0);
00210 
00211      EvtRecTrack* aKaonFromChic2Trk = const_cast<EvtRecTrack*>(aKaonFromChic2.track());
00212      if ( !aKaonFromChic2Trk->isMdcKalTrackValid() ) continue;
00213      RecMdcKalTrack *mdcKaonFromChic2Trk = aKaonFromChic2Trk->mdcKalTrack();
00214 
00215      if ( m_debug )  std::cout << "K charge = " << mdcKaonFromChic2Trk->charge() << std::endl; 
00216      m_Kaon_P = mdcKaonFromChic2Trk->p();
00217 
00218 
00220      const CDCandidate& aPionFromChic2 = aChic2.decay().child(1);
00221 
00222      EvtRecTrack* aPionFromChic2Trk = const_cast<EvtRecTrack*>(aPionFromChic2.track()); 
00223      if ( !aPionFromChic2Trk->isMdcKalTrackValid() ) continue;
00224      RecMdcKalTrack *mdcPionFromChic2Trk = aPionFromChic2Trk->mdcKalTrack();
00225 
00226      if ( m_debug )  std::cout << "Pi charge = " << mdcPionFromChic2Trk->charge() << std::endl; 
00227      m_Pion_P = mdcPionFromChic2Trk->p();
00228 
00229 
00231      const CDCandidate& aKStar0FromChic2 = aChic2.decay().child(2);
00232      if ( m_debug )  std::cout << "M(K*0) = " << aKStar0FromChic2.mass() << std::endl;
00233      m_KStar0_Mass = aKStar0FromChic2.mass();
00234 
00235 
00237      const CDCandidate& aKsFromKStar0 = aKStar0FromChic2.decay().child(0);
00238      if ( m_debug )  std::cout << "M(Ks) = " << aKsFromKStar0.mass() << std::endl;
00239      m_Ks_Mass = aKsFromKStar0.mass();
00240 
00241 
00243      const CDCandidate& aPi0FromKStar0 = aKStar0FromChic2.decay().child(1);
00244      
00247      if ( m_debug )  std::cout << "M(pi0) uncon = " << aPi0FromKStar0.navPi0()->unconMass() 
00248                                << std::endl << std::endl;
00249      m_Pi0_UnconMass = aPi0FromKStar0.navPi0()->unconMass();
00250 
00251 
00252      m_nt->write();
00253 
00254     }  // End of "psi2sCand" FOR LOOP 
00255    
00256 
00257    return StatusCode::SUCCESS;
00258 }

StatusCode BesDChainExAlg::finalize  ) 
 

StatusCode BesDChainExAlg::finalize  ) 
 

00261                                     {
00262 
00263    MsgStream log(msgSvc(), name());
00264    log << MSG::INFO << "in finalize()" << endreq;
00265 
00266    return StatusCode::SUCCESS;
00267 }

StatusCode BesDChainExAlg::initialize  ) 
 

StatusCode BesDChainExAlg::initialize  ) 
 

00039                                       {
00040 
00041    MsgStream log(msgSvc(), name());
00042    log << MSG::INFO << "in initialize()" << endreq;
00043 
00044    // Initialize ROOT tree
00045    NTuplePtr nt(ntupleSvc(), "FILE88/pi0hc");
00046    if ( nt ) m_nt = nt;
00047    else {
00048       m_nt = ntupleSvc()->book("FILE88/chic2ToKStar0KPi", CLID_ColumnWiseTuple, 
00049                                "psi(2S) -> gamma chi_c2, chi_c2 -> K*0 K- pi+ + c.c. decay");
00050    }
00051    if ( m_nt ) {
00052       m_nt->addItem("irun",  m_irun);
00053       m_nt->addItem("ievt",  m_ievt);
00054       m_nt->addItem("nChrg", m_nChrg);
00055       m_nt->addItem("nNeu",  m_nNeu);
00056       m_nt->addItem("nPion", m_nPion);
00057       m_nt->addItem("nKaon", m_nKaon);
00058       m_nt->addItem("nPi0",  m_nPi0);
00059       m_nt->addItem("nKs",   m_nKs);
00060 
00061       m_nt->addItem("nCandPhoton",   m_nCandPhoton);
00062       m_nt->addItem("photonEnergy",  m_CandPhoton_Energy);
00063       m_nt->addItem("chic2Mass",     m_Chic2_Mass);
00064       m_nt->addItem("kaonP",         m_Kaon_P);
00065       m_nt->addItem("pionP",         m_Pion_P);
00066       m_nt->addItem("KStar0Mass",    m_KStar0_Mass);
00067       m_nt->addItem("ksMass",        m_Ks_Mass);
00068       m_nt->addItem("pi0UnconMass",  m_Pi0_UnconMass);
00069 
00070    }
00071    else {
00072       log << MSG::ERROR << "  Cannot book N-tuple88: " << long(m_nt) << endreq;
00073       return StatusCode::FAILURE;
00074    }
00075 
00076    return StatusCode::SUCCESS;
00077 }


Member Data Documentation

Chic2Selector BesDChainExAlg::chic2Selector [private]
 

LocalKaonSelector BesDChainExAlg::kaonSelector [private]
 

LocalKsSelector BesDChainExAlg::ksSelector [private]
 

NTuple::Item<double> BesDChainExAlg::m_CandPhoton_Energy [private]
 

NTuple::Item<double> BesDChainExAlg::m_CandPhoton_Energy [private]
 

NTuple::Item<double> BesDChainExAlg::m_Chic2_Mass [private]
 

NTuple::Item<double> BesDChainExAlg::m_Chic2_Mass [private]
 

bool BesDChainExAlg::m_debug [private]
 

NTuple::Item<long> BesDChainExAlg::m_ievt [private]
 

NTuple::Item<long> BesDChainExAlg::m_ievt [private]
 

NTuple::Item<long> BesDChainExAlg::m_irun [private]
 

NTuple::Item<long> BesDChainExAlg::m_irun [private]
 

NTuple::Item<double> BesDChainExAlg::m_Kaon_P [private]
 

NTuple::Item<double> BesDChainExAlg::m_Kaon_P [private]
 

NTuple::Item<double> BesDChainExAlg::m_Ks_Mass [private]
 

NTuple::Item<double> BesDChainExAlg::m_Ks_Mass [private]
 

NTuple::Item<double> BesDChainExAlg::m_KStar0_Mass [private]
 

NTuple::Item<double> BesDChainExAlg::m_KStar0_Mass [private]
 

NTuple::Item<long> BesDChainExAlg::m_nCandPhoton [private]
 

NTuple::Item<long> BesDChainExAlg::m_nCandPhoton [private]
 

NTuple::Item<long> BesDChainExAlg::m_nChrg [private]
 

NTuple::Item<long> BesDChainExAlg::m_nChrg [private]
 

NTuple::Item<long> BesDChainExAlg::m_nKaon [private]
 

NTuple::Item<long> BesDChainExAlg::m_nKaon [private]
 

NTuple::Item<long> BesDChainExAlg::m_nKs [private]
 

NTuple::Item<long> BesDChainExAlg::m_nKs [private]
 

NTuple::Item<long> BesDChainExAlg::m_nNeu [private]
 

NTuple::Item<long> BesDChainExAlg::m_nNeu [private]
 

NTuple::Item<long> BesDChainExAlg::m_nPi0 [private]
 

NTuple::Item<long> BesDChainExAlg::m_nPi0 [private]
 

NTuple::Item<long> BesDChainExAlg::m_nPion [private]
 

NTuple::Item<long> BesDChainExAlg::m_nPion [private]
 

NTuple::Tuple* BesDChainExAlg::m_nt [private]
 

NTuple::Tuple* BesDChainExAlg::m_nt [private]
 

NTuple::Item<double> BesDChainExAlg::m_Pi0_UnconMass [private]
 

NTuple::Item<double> BesDChainExAlg::m_Pi0_UnconMass [private]
 

NTuple::Item<double> BesDChainExAlg::m_Pion_P [private]
 

NTuple::Item<double> BesDChainExAlg::m_Pion_P [private]
 

LocalPhotonSelector BesDChainExAlg::photonSelector [private]
 

LocalPionSelector BesDChainExAlg::pionSelector [private]
 


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