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
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
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 }
00255
00256
00257 return StatusCode::SUCCESS;
00258 }
|