#include <DDecay.h>
Public Member Functions | |
DDecay (const std::string &name, ISvcLocator *pSvcLocator) | |
DDecay (const std::string &name, ISvcLocator *pSvcLocator) | |
StatusCode | execute () |
StatusCode | execute () |
StatusCode | finalize () |
StatusCode | finalize () |
StatusCode | initialize () |
StatusCode | initialize () |
Private Attributes | |
NTuple::Item< double > | m_charge |
NTuple::Item< double > | m_charge |
NTuple::Item< double > | m_charm |
NTuple::Item< double > | m_charm |
NTuple::Item< double > | m_deltae |
NTuple::Item< double > | m_deltae |
NTuple::Item< double > | m_e |
NTuple::Item< double > | m_e |
NTuple::Item< double > | m_ksd |
NTuple::Item< double > | m_ksd |
NTuple::Item< double > | m_ksmass |
NTuple::Item< double > | m_ksmass |
NTuple::Item< double > | m_ksmode |
NTuple::Item< double > | m_ksmode |
NTuple::Item< double > | m_mass |
NTuple::Item< double > | m_mass |
NTuple::Item< double > | m_mBC |
NTuple::Item< double > | m_mBC |
NTuple::Item< double > | m_mode |
NTuple::Item< double > | m_mode |
NTuple::Item< double > | m_ntrk |
NTuple::Item< double > | m_ntrk |
NTuple::Item< double > | m_numofchildren |
NTuple::Item< double > | m_numofchildren |
NTuple::Item< double > | m_pi0mass |
NTuple::Item< double > | m_pi0mass |
NTuple::Item< double > | m_pi0mode |
NTuple::Item< double > | m_pi0mode |
NTuple::Tuple * | m_tuple1 |
NTuple::Tuple * | m_tuple1 |
NTuple::Tuple * | m_tuple2 |
NTuple::Tuple * | m_tuple2 |
NTuple::Tuple * | m_tuple3 |
NTuple::Tuple * | m_tuple3 |
NTuple::Tuple * | m_tuple4 |
NTuple::Tuple * | m_tuple4 |
NTuple::Item< double > | m_type |
NTuple::Item< double > | m_type |
NTuple::Item< double > | m_vr0 |
NTuple::Item< double > | m_vr0 |
NTuple::Item< double > | m_vx0 |
NTuple::Item< double > | m_vx0 |
NTuple::Item< double > | m_vy0 |
NTuple::Item< double > | m_vy0 |
NTuple::Item< double > | m_vz0 |
NTuple::Item< double > | m_vz0 |
|
00050 : 00051 Algorithm(name, pSvcLocator){ 00052 00053 }
|
|
|
|
|
|
Accessing Ks list Accessing pi0 list pi0 information Access pi0 children ONLY Break out of loop if tag mode has one pi0 child Ks information Needed to reject Lambda (and conversion?) combinations ONLY Break out of loop if tag mode has one Ks child 00140 { 00141 00142 MsgStream log(msgSvc(), name()); 00143 log << MSG::INFO << "in execute()" << endreq; 00144 00145 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader"); 00146 int runNo=eventHeader->runNumber(); 00147 int eventNo=eventHeader->eventNumber(); 00148 00149 cout<<"**************************************"<<endl; 00150 cout<<"event "<<eventNo<<endl; 00151 cout<<"**************************************"<<endl; 00152 00154 SmartDataPtr<EvtRecVeeVertexCol> evtRecVeeVertexCol(eventSvc(), "/Event/EvtRec/EvtRecVeeVertexCol"); 00155 if ( ! evtRecVeeVertexCol ) { 00156 log << MSG::FATAL << "Could not find EvtRecVeeVertexCol" << endreq; 00157 return StatusCode::FAILURE; 00158 } 00159 00161 SmartDataPtr<EvtRecPi0Col> recPi0Col(eventSvc(), "/Event/EvtRec/EvtRecPi0Col"); 00162 if ( ! recPi0Col ) { 00163 log << MSG::FATAL << "Could not find EvtRecPi0Col" << endreq; 00164 return StatusCode::FAILURE; 00165 } 00166 00167 00168 //get primary vertex from db 00169 Hep3Vector xorigin(0,0,0); 00170 IVertexDbSvc* vtxsvc; 00171 Gaudi::svcLocator()->service("VertexDbSvc", vtxsvc); 00172 if (vtxsvc->isVertexValid()) { 00173 00174 //vertex[0] = vx; vertex[1]= vy; vertex[2] = vz; 00175 double* vertex = vtxsvc->PrimaryVertex(); 00176 xorigin.setX(vertex[0]); 00177 xorigin.setY(vertex[1]); 00178 xorigin.setZ(vertex[2]); 00179 } 00180 00181 00182 //**************************** 00183 00184 //use util tool to get dtaglist 00185 00186 DTagTool dtagTool; 00187 if( dtagTool.isDTagListEmpty() ){ 00188 cout<<"no D candidates found"<<endl; 00189 return StatusCode::SUCCESS; 00190 } 00191 00192 DTagToolIterator iter_begin = dtagTool.modes_begin(); 00193 DTagToolIterator iter_end =dtagTool.modes_end(); 00194 00195 00196 int nCharge = 0; 00197 00198 00199 //test to get one mode only 00200 cout<<"test single mode search :"<< EvtRecDTag::kD0toKPi<<endl; 00201 00202 vector<int> mode = dtagTool.mode( EvtRecDTag::kD0toKPi ); 00203 cout<<" there are "<< mode.size() <<" candidates for this mode" <<endl; 00204 00205 for( int i=0; i < mode.size(); i++){ 00206 00207 DTagToolIterator iter= dtagTool.modes_begin()+ mode[i]; 00208 cout<<"No."<<i+1<<" candidate deltaE is : "<< (*iter)->deltaE()<<endl; 00209 00210 } 00211 00212 00213 //loop the whole DTag lists, do all kinds of fit in side the loop 00214 00215 for (DTagToolIterator iter_dtag=iter_begin; iter_dtag != iter_end; iter_dtag++){ 00216 00217 //decay mode name 00218 cout<<"***********"<<endl; 00219 cout<<"***********"<<endl; 00220 dtagTool<< iter_dtag; 00221 00222 00223 //**************************************************** 00224 //mode D0 to KPi only 00225 //**************************************************** 00226 00227 if((*iter_dtag)->decayMode()==EvtRecDTag::kD0toKPi) { 00228 00229 HepLorentzVector p4=(*iter_dtag)->p4(); 00230 p4.boost(-0.011,0,0); 00231 00232 Hep3Vector p3=p4.v(); 00233 00234 m_mode=(*iter_dtag)->decayMode(); 00235 m_type=(*iter_dtag)->type(); 00236 m_charge=(*iter_dtag)->charge(); 00237 m_charm=(*iter_dtag)->charm(); 00238 m_numofchildren=(*iter_dtag)->numOfChildren(); 00239 m_mass=(*iter_dtag)->mass(); 00240 m_mBC=(*iter_dtag)->mBC(); 00241 m_e=(*iter_dtag)->beamE(); 00242 m_deltae=(*iter_dtag)->deltaE(); 00243 00244 SmartRefVector<EvtRecTrack> tracks=(*iter_dtag)->tracks(); 00245 SmartRefVector<EvtRecTrack> othertracks=(*iter_dtag)->otherTracks(); 00246 SmartRefVector<EvtRecTrack> othershowers=(*iter_dtag)->otherShowers(); 00247 m_ntrk=othertracks.size(); 00248 00249 m_tuple4->write(); 00250 00251 00252 RecMdcKalTrack *mdcKalTrk1 = tracks[0]->mdcKalTrack(); 00253 RecMdcKalTrack *mdcKalTrk2 = tracks[1]->mdcKalTrack(); 00254 cout<<"same side track 1 charge is:"<<mdcKalTrk1->charge()<<endl; 00255 cout<<"same side track 2 charge is:"<<mdcKalTrk2->charge()<<endl; 00256 00257 for(int tk=0; tk<othertracks.size(); tk++){ 00258 RecMdcTrack *mdcTrk = othertracks[tk]->mdcTrack(); 00259 double pch=mdcTrk->p(); 00260 double x0=mdcTrk->x(); 00261 double y0=mdcTrk->y(); 00262 double z0=mdcTrk->z(); 00263 double phi0=mdcTrk->helix(1); 00264 double xp=xorigin.x(); 00265 double yp=xorigin.y(); 00266 double Rxy=(x0-xp)*cos(phi0)+(y0-yp)*sin(phi0); 00267 00268 m_vx0=x0; 00269 m_vy0=y0; 00270 m_vz0=z0; 00271 m_vr0=Rxy; 00272 m_tuple1->write(); 00273 nCharge += mdcTrk->charge(); 00274 00275 std::cout<<"other side track ID is: "<<othertracks[tk]->trackId()<<std::endl; 00276 00277 if(dtagTool.isPion(othertracks[tk]) ) 00278 cout<<"it is pion"<<endl; 00279 if(dtagTool.isKaon(othertracks[tk]) ) 00280 cout<<"it is kaon"<<endl; 00281 00282 //std::cout<<"momentum="<<pch<<", x0="<<x0<<std::endl; 00283 00284 } //end of looping charged othertracks 00285 00286 for(int i=0; i<othershowers.size(); i++){ 00287 //RecEmcShower *shr = othershowers[i]->emcShower(); 00288 //std::cout<<"shower ID is: "<<othershowers[i]->trackId()<<std::endl; 00289 } 00290 00291 } //end of D0 to K Pi mode 00292 00293 00294 00295 //**************************************************** 00296 //mode D0 to KPiPi0 only 00297 //**************************************************** 00298 if((*iter_dtag)->decayMode()==EvtRecDTag::kD0toKPiPi0) { 00299 00300 m_mode=(*iter_dtag)->decayMode(); 00301 m_type=(*iter_dtag)->type(); 00302 m_charge=(*iter_dtag)->charge(); 00303 m_charm=(*iter_dtag)->charm(); 00304 m_numofchildren=(*iter_dtag)->numOfChildren(); 00305 m_mass=(*iter_dtag)->mass(); 00306 m_mBC=(*iter_dtag)->mBC(); 00307 m_e=(*iter_dtag)->beamE(); 00308 m_deltae=(*iter_dtag)->deltaE(); 00309 00310 SmartRefVector<EvtRecTrack> othertracks=(*iter_dtag)->otherTracks(); 00311 m_ntrk=othertracks.size(); 00312 00313 m_tuple4->write(); 00314 00316 SmartRefVector<EvtRecTrack> showers=(*iter_dtag)->showers(); 00317 00318 for(EvtRecPi0Col::iterator pi0Itr = recPi0Col->begin(); 00319 pi0Itr < recPi0Col->end(); pi0Itr++){ 00320 00322 EvtRecTrack* heGammaTrk = const_cast<EvtRecTrack*>((*pi0Itr)->hiEnGamma()); 00323 EvtRecTrack* leGammaTrk = const_cast<EvtRecTrack*>((*pi0Itr)->loEnGamma()); 00324 00325 int heGammaTrkId = heGammaTrk->trackId(); 00326 int leGammaTrkId = leGammaTrk->trackId(); 00327 00328 if((heGammaTrkId != showers[0]->trackId())&& 00329 (heGammaTrkId != showers[1]->trackId())) continue; 00330 if((leGammaTrkId != showers[0]->trackId())&& 00331 (leGammaTrkId != showers[1]->trackId())) continue; 00332 00333 const RecEmcShower* heGamma = heGammaTrk->emcShower(); 00334 const RecEmcShower* leGamma = leGammaTrk->emcShower(); 00335 00336 cout<<"pi0Mass: " << (*pi0Itr)->unconMass() << endl; 00337 cout<<" E(high): " << heGamma->energy() << endl; 00338 cout<<" E(low) : " << leGamma->energy() << endl; 00339 00340 m_pi0mass = (*pi0Itr)->unconMass(); 00341 m_pi0mode = (*iter_dtag)->decayMode(); 00342 m_tuple3->write(); 00343 00345 break; 00346 00347 } // End "pi0Itr" FOR Loop 00348 00349 }// end of D0 to KPIPI0 00350 00351 00352 //**************************************************** 00353 //mode D0 to KsPiPi only 00354 //**************************************************** 00355 if((*iter_dtag)->decayMode()==EvtRecDTag::kD0toKsPiPi) { 00356 00357 m_mode=(*iter_dtag)->decayMode(); 00358 m_type=(*iter_dtag)->type(); 00359 m_charge=(*iter_dtag)->charge(); 00360 m_charm=(*iter_dtag)->charm(); 00361 m_numofchildren=(*iter_dtag)->numOfChildren(); 00362 m_mass=(*iter_dtag)->mass(); 00363 m_mBC=(*iter_dtag)->mBC(); 00364 m_e=(*iter_dtag)->beamE(); 00365 m_deltae=(*iter_dtag)->deltaE(); 00366 00367 SmartRefVector<EvtRecTrack> othertracks=(*iter_dtag)->otherTracks(); 00368 m_ntrk=othertracks.size(); 00369 00370 m_tuple4->write(); 00371 00373 SmartRefVector<EvtRecTrack> tracks=(*iter_dtag)->tracks(); 00374 00375 for(EvtRecVeeVertexCol::iterator ksItr = evtRecVeeVertexCol->begin(); 00376 ksItr < evtRecVeeVertexCol->end(); ksItr++){ 00377 00379 if((*ksItr)->vertexId() != 310) continue; 00380 00381 EvtRecTrack* aKsChild1Trk = (*ksItr)->daughter(0); 00382 EvtRecTrack* aKsChild2Trk = (*ksItr)->daughter(1); 00383 00384 int ksChild1TrkId = aKsChild1Trk->trackId(); 00385 int ksChild2TrkId = aKsChild2Trk->trackId(); 00386 00387 if((ksChild1TrkId != tracks[0]->trackId())&& 00388 (ksChild1TrkId != tracks[1]->trackId())) continue; 00389 if((ksChild2TrkId != tracks[0]->trackId())&& 00390 (ksChild2TrkId != tracks[1]->trackId())) continue; 00391 00392 cout<<"ksMass: " << (*ksItr)->mass() << endl; 00393 00394 Hep3Vector ks_D3(0,0,0); 00395 ks_D3.set((*ksItr)->w()[4],(*ksItr)->w()[5],(*ksItr)->w()[6]); 00396 00397 m_ksmass = (*ksItr)->mass(); 00398 m_ksd = ks_D3.mag(); 00399 m_ksmode = (*iter_dtag)->decayMode(); 00400 m_tuple2->write(); 00401 00403 break; 00404 00405 } // End "ksItr" FOR Loop 00406 00407 }// end of D0 to KSpipi 00408 00409 00410 //**************************************************** 00411 //mode D+ to K- pi+ pi- only 00412 //**************************************************** 00413 if((*iter_dtag)->decayMode()==EvtRecDTag::kDptoKPiPi) { 00414 00415 m_mode=(*iter_dtag)->decayMode(); 00416 m_type=(*iter_dtag)->type(); 00417 m_charge=(*iter_dtag)->charge(); 00418 m_charm=(*iter_dtag)->charm(); 00419 m_numofchildren=(*iter_dtag)->numOfChildren(); 00420 m_mass=(*iter_dtag)->mass(); 00421 m_mBC=(*iter_dtag)->mBC(); 00422 m_e=(*iter_dtag)->beamE(); 00423 m_deltae=(*iter_dtag)->deltaE(); 00424 00425 SmartRefVector<EvtRecTrack> othertracks=(*iter_dtag)->otherTracks(); 00426 m_ntrk=othertracks.size(); 00427 00428 m_tuple4->write(); 00429 }// end of Dp to K pi pi 00430 00431 //**************************************************** 00432 //mode Ds to Ks pi+ only 00433 //**************************************************** 00434 if((*iter_dtag)->decayMode()==EvtRecDTag::kDstoKsPi) { 00435 00436 m_mode=(*iter_dtag)->decayMode(); 00437 m_type=(*iter_dtag)->type(); 00438 m_charge=(*iter_dtag)->charge(); 00439 m_charm=(*iter_dtag)->charm(); 00440 m_numofchildren=(*iter_dtag)->numOfChildren(); 00441 m_mass=(*iter_dtag)->mass(); 00442 m_mBC=(*iter_dtag)->mBC(); 00443 m_e=(*iter_dtag)->beamE(); 00444 m_deltae=(*iter_dtag)->deltaE(); 00445 00446 SmartRefVector<EvtRecTrack> othertracks=(*iter_dtag)->otherTracks(); 00447 m_ntrk=othertracks.size(); 00448 00449 m_tuple4->write(); 00450 }// end of Ds to Ks pi 00451 00452 00453 } //end of looping over the entire DTag list 00454 00455 00456 //************************ 00457 cout<<"**************"<<endl; 00458 cout<<"**************"<<endl; 00459 cout<<"test print only D0/Dp/Ds modes"<<endl; 00460 00461 //looop only D0 modes 00462 vector<int> d0itindex= dtagTool.D0modes(); 00463 for( int i=0; i< d0itindex.size(); i++){ 00464 DTagToolIterator iter= dtagTool.modes_begin()+d0itindex[i]; 00465 cout<<"No."<<i+1<<" D0 mode is :"<< (*iter)->decayMode()<<endl; 00466 } 00467 00468 //loop only Dp modes 00469 vector<int> dpitindex= dtagTool.Dpmodes(); 00470 for( int i=0; i< dpitindex.size(); i++){ 00471 DTagToolIterator iter= dtagTool.modes_begin()+dpitindex[i]; 00472 cout<<"No."<<i+1<<" Dp mode is :"<< (*iter)->decayMode()<<endl; 00473 } 00474 00475 //loop only Ds modes 00476 vector<int> dsitindex= dtagTool.Dsmodes(); 00477 for( int i=0; i< dsitindex.size(); i++){ 00478 DTagToolIterator iter= dtagTool.modes_begin()+dsitindex[i]; 00479 cout<<"No."<<i+1<<" Ds mode is :"<< (*iter)->decayMode()<<endl; 00480 } 00481 00482 00483 //check single tag 00484 //************************ 00485 cout<<"**************"<<endl; 00486 cout<<"**************"<<endl; 00487 cout<<"test single tag "<<endl; 00488 00489 if( dtagTool.findSTag( EvtRecDTag::kD0toKPi , +1 ) ) 00490 cout<<" find single tag mode: "<< (*dtagTool.stag())->decayMode() <<endl; 00491 00492 //check double tag 00493 //************************ 00494 cout<<"**************"<<endl; 00495 cout<<"**************"<<endl; 00496 cout<<"test double tag "<<endl; 00497 if( dtagTool.findDTag( EvtRecDTag::kD0toKPi , +1, EvtRecDTag::kD0toKPi, -1 ) ){ 00498 cout<<" find double tag mode 1: "<< (*dtagTool.dtag1())->decayMode() <<endl; 00499 cout<<" find double tag mode 2: "<< (*dtagTool.dtag2())->decayMode() <<endl; 00500 } 00501 00502 dtagTool.clear(); 00503 00504 } //end of execute()
|
|
|
|
00509 { 00510 MsgStream log(msgSvc(), name()); 00511 log << MSG::INFO << "in finalize()" << endmsg; 00512 return StatusCode::SUCCESS; 00513 }
|
|
|
|
00055 { 00056 00057 MsgStream log(msgSvc(), name()); 00058 00059 log << MSG::INFO << "in initialize()" << endmsg; 00060 00061 StatusCode status; 00062 NTuplePtr nt1(ntupleSvc(), "FILE1/vxyz"); 00063 if ( nt1 ) m_tuple1 = nt1; 00064 else { 00065 m_tuple1 = ntupleSvc()->book ("FILE1/vxyz", CLID_ColumnWiseTuple, "track N-Tuple example"); 00066 if ( m_tuple1 ) { 00067 status = m_tuple1->addItem ("vx0", m_vx0); 00068 status = m_tuple1->addItem ("vy0", m_vy0); 00069 status = m_tuple1->addItem ("vz0", m_vz0); 00070 status = m_tuple1->addItem ("vr0", m_vr0); 00071 } 00072 else { 00073 log << MSG::ERROR << " Cannot book N-tuple:" << long(m_tuple1) << endmsg; 00074 return StatusCode::FAILURE; 00075 } 00076 } 00077 00078 NTuplePtr nt2(ntupleSvc(), "FILE1/ks"); 00079 if ( nt2 ) m_tuple2 = nt2; 00080 else { 00081 m_tuple2 = ntupleSvc()->book ("FILE1/ks", CLID_ColumnWiseTuple, "ks N-Tuple example"); 00082 if ( m_tuple2 ) { 00083 status = m_tuple2->addItem ("ksmass", m_ksmass); 00084 status = m_tuple2->addItem ("ksd", m_ksd); 00085 status = m_tuple2->addItem ("ksmode", m_ksmode); 00086 } 00087 else { 00088 log << MSG::ERROR << " Cannot book N-tuple:" << long(m_tuple2) << endmsg; 00089 return StatusCode::FAILURE; 00090 } 00091 } 00092 00093 NTuplePtr nt3(ntupleSvc(), "FILE1/pi0"); 00094 if ( nt3 ) m_tuple3 = nt3; 00095 else { 00096 m_tuple3 = ntupleSvc()->book ("FILE1/pi0", CLID_ColumnWiseTuple, "pi0 N-Tuple example"); 00097 if ( m_tuple3 ) { 00098 status = m_tuple3->addItem ("pi0mass", m_pi0mass); 00099 status = m_tuple3->addItem ("pi0mode", m_pi0mode); 00100 } 00101 else { 00102 log << MSG::ERROR << " Cannot book N-tuple:" << long(m_tuple3) << endmsg; 00103 return StatusCode::FAILURE; 00104 } 00105 } 00106 00107 NTuplePtr nt4(ntupleSvc(), "FILE1/tagD"); 00108 if ( nt4 ) m_tuple4 = nt4; 00109 else { 00110 m_tuple4 = ntupleSvc()->book ("FILE1/tagD", CLID_ColumnWiseTuple, "DTag N-Tuple example"); 00111 if ( m_tuple4 ) { 00112 status = m_tuple4->addItem ("mode", m_mode); 00113 status = m_tuple4->addItem ("type", m_type); 00114 status = m_tuple4->addItem ("charge", m_charge); 00115 status = m_tuple4->addItem ("charm", m_charm); 00116 status = m_tuple4->addItem ("numofchildren", m_numofchildren); 00117 status = m_tuple4->addItem ("mass", m_mass); 00118 status = m_tuple4->addItem ("mBC", m_mBC); 00119 status = m_tuple4->addItem ("deltaE", m_deltae); 00120 status = m_tuple4->addItem ("E", m_e); 00121 status = m_tuple4->addItem ("notherTrk", m_ntrk); 00122 } 00123 else { 00124 log << MSG::ERROR << " Cannot book N-tuple:" << long(m_tuple4) << endmsg; 00125 return StatusCode::FAILURE; 00126 } 00127 } 00128 00129 00130 // 00131 //--------end of book-------- 00132 // 00133 00134 log << MSG::INFO << "successfully return from initialize()" <<endmsg; 00135 return StatusCode::SUCCESS; 00136 00137 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|