#include <DsReconstruction.h>
Public Member Functions | |
DsReconstruction (const std::string &name, ISvcLocator *pSvcLocator) | |
StatusCode | initialize () |
StatusCode | execute () |
StatusCode | finalize () |
void | saveDsInfo (CDDecayList::iterator, double, int, EvtRecDTag *) |
void | savetrack (vector< int >, vector< int >, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecTrackIterator, EvtRecDTag *) |
vector< string > | getlist (string &filename) |
void | pidtag (vector< int >, vector< int >, CDChargedKaonList &, CDChargedPionList &, EvtRecDTag *) |
Private Member Functions | |
StatusCode | registerEvtRecDTagCol (EvtRecDTagCol *dtagCol, MsgStream &log) |
Private Attributes | |
bool | m_debug |
int | m_irun |
int | m_ievt |
int | m_nChrg |
int | m_nNeu |
int | m_nPion |
int | m_nKaon |
int | m_nPi0 |
int | m_nKs |
string | m_decaylist |
vector< string > | chanlist |
double | m_beamE |
Hep3Vector | m_beta |
bool | m_ReadBeamEFromDB |
bool | m_usecalibBeamE |
bool | m_usevertexfit |
ReadBeamInfFromDb | m_readDb |
IMeasuredEcmsSvc * | ecmsSvc |
bool | m_RdMeasuredEcms |
Definition at line 21 of file DsReconstruction.h.
DsReconstruction::DsReconstruction | ( | const std::string & | name, | |
ISvcLocator * | pSvcLocator | |||
) |
Definition at line 56 of file DsReconstruction.cxx.
References m_beamE, m_debug, m_decaylist, m_RdMeasuredEcms, m_ReadBeamEFromDB, m_usecalibBeamE, and m_usevertexfit.
00056 : 00057 Algorithm(name, pSvcLocator) { 00058 //Declare the properties 00059 declareProperty( "debug", m_debug = false ); 00060 declareProperty( "ReadBeamEFromDB", m_ReadBeamEFromDB = false ); 00061 declareProperty( "UseCalibBeamE", m_usecalibBeamE = false ); 00062 declareProperty( "UseVertexfit", m_usevertexfit = false ); 00063 declareProperty( "BeamE", m_beamE=2.015 ); 00064 declareProperty( "DsList", m_decaylist = "test.txt" ); 00065 declareProperty("ReadMeasuredEcms", m_RdMeasuredEcms = false);// Read ecms from database (Wu Lianjin) 00066 }
StatusCode DsReconstruction::execute | ( | ) |
Definition at line 113 of file DsReconstruction.cxx.
References chanlist, EvtRecVeeVertex::daughter(), dc_fill(), Bes_Common::DEBUG, CDCandidate::decay(), dsSelector, ebeam, ecmsSvc, eptoPiPiEta3PiSelector, eptoPiPiEtaSelector, eptoRhoGamSelector, etatoGGSelector, etatoPiPiPi0Selector, EventModel::EvtRec::EvtRecDTagCol, EventModel::EvtRec::EvtRecEvent, EventModel::EvtRec::EvtRecTrackCol, Bes_Common::FATAL, ReadBeamInfFromDb::getbeamE(), ReadBeamInfFromDb::getbeta(), IMeasuredEcmsSvc::getInfo(), IMeasuredEcmsSvc::getPx(), IMeasuredEcmsSvc::getPy(), IMeasuredEcmsSvc::getPz(), EvtRecPi0::hiEnGamma(), EvtRecEtaToGG::hiEnGamma(), genRecEmupikp::i, Bes_Common::INFO, IMeasuredEcmsSvc::isReadDBValid(), IMeasuredEcmsSvc::isRunNoValid(), IVertexDbSvc::isVertexValid(), kaonSelector, EvtRecDTag::kDstoKKK, EvtRecDTag::kDstoKKPi, EvtRecDTag::kDstoKKPiPi0, EvtRecDTag::kDstoKKPiPiPi, EvtRecDTag::kDstoKPiPi, EvtRecDTag::kDstoKPiPiPi0, EvtRecDTag::kDstoKsK, EvtRecDTag::kDstoKsKminusPiPi, EvtRecDTag::kDstoKsKPi0, EvtRecDTag::kDstoKsKplusPiPi, EvtRecDTag::kDstoKsKsPi, EvtRecDTag::kDstoKsPi, EvtRecDTag::kDstoKsPiPi0, EvtRecDTag::kDstoPiEPPiPiEta, EvtRecDTag::kDstoPiEPPiPiEtaPiPiPi0, EvtRecDTag::kDstoPiEPRhoGam, EvtRecDTag::kDstoPiEta, EvtRecDTag::kDstoPiEtaPiPiPi0, EvtRecDTag::kDstoPiPi0, EvtRecDTag::kDstoPiPi0EPPiPiEta, EvtRecDTag::kDstoPiPi0EPPiPiEtaPiPiPi0, EvtRecDTag::kDstoPiPi0EPRhoGam, EvtRecDTag::kDstoPiPi0Eta, EvtRecDTag::kDstoPiPi0EtaPiPiPi0, EvtRecDTag::kDstoPiPiPi, EvtRecDTag::kDstoPiPiPiEta, EvtRecDTag::kDstoPiPiPiEtaPiPiPi0, EvtRecDTag::kDstoPiPiPiPi0, EvtRecDTag::kDstoPiPiPiPi0Pi0, EvtRecDTag::kDstoPiPiPiPiPi, EvtRecDTag::kDstoPiPiPiPiPiPi0, ksSelector, EvtRecPi0::loEnGamma(), EvtRecEtaToGG::loEnGamma(), m_beamE, m_beta, m_ievt, m_irun, m_nChrg, m_nKaon, m_nKs, m_nNeu, m_nPi0, m_nPion, m_RdMeasuredEcms, m_ReadBeamEFromDB, m_readDb, m_usecalibBeamE, m_usevertexfit, EvtRecVeeVertex::mass(), dchain::ChargedVisibleList< Charged, CandidateClass >::minus(), msgSvc(), CDCandidate::navEta(), CDCandidate::navPi0(), dchain::DecayList< DecayClass, CandidateClass >::particle_begin(), dchain::DecayList< DecayClass, CandidateClass >::particle_end(), CDCandidate::photon(), photonSelector, pi0Selector, pidtag(), pionSelector, dchain::ChargedVisibleList< Charged, CandidateClass >::plus(), IVertexDbSvc::PrimaryVertex(), rhotoPiPiSelector, saveDsInfo(), savetrack(), utility::SecondaryVFit(), DsSelector::setbeta(), ReadBeamInfFromDb::setcalib(), DsSelector::setebeam(), LocalKaonSelector::setpidtype(), LocalPionSelector::setpidtype(), dchain::CandidateList< CandidateClass >::size(), deljobs::string, CDCandidate::track(), EvtRecTrack::trackId(), and utility::vfit().
00113 { 00114 MsgStream log(msgSvc(), name()); 00115 log << MSG::INFO << "in execute()" << endreq; 00116 00117 StatusCode sc; 00118 00120 // Read REC data 00122 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader"); 00123 int event= eventHeader->eventNumber(); 00124 // if ( m_debug || ( (event & 0x3FF) == 0 ) ) 00125 //std::cout << "event: " << event << std::endl; 00126 00127 SmartDataPtr<EvtRecEvent> recEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent); 00128 SmartDataPtr<EvtRecTrackCol> recTrackCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol); 00129 log << MSG::DEBUG << "run and event = " << eventHeader->runNumber() 00130 << " " << eventHeader->eventNumber() << endreq; 00131 log << MSG::DEBUG <<"ncharg, nneu, tottks = " 00132 << recEvent->totalCharged() << " , " 00133 << recEvent->totalNeutral() << " , " 00134 << recEvent->totalTracks() <<endreq; 00135 00136 EvtRecTrackIterator charged_begin = recTrackCol->begin(); 00137 EvtRecTrackIterator charged_end = charged_begin + recEvent->totalCharged(); 00138 00139 EvtRecTrackIterator neutral_begin = recTrackCol->begin()+recEvent->totalCharged(); 00140 EvtRecTrackIterator neutral_end = recTrackCol->begin()+recEvent->totalTracks(); 00141 00142 00143 SmartDataPtr<EvtRecPi0Col> recPi0Col(eventSvc(), "/Event/EvtRec/EvtRecPi0Col"); 00144 if ( ! recPi0Col ) { 00145 log << MSG::FATAL << "Could not find EvtRecPi0Col" << endreq; 00146 return StatusCode::FAILURE; 00147 } 00148 00149 SmartDataPtr<EvtRecEtaToGGCol> recEtaToGGCol(eventSvc(), "/Event/EvtRec/EvtRecEtaToGGCol"); 00150 if ( ! recEtaToGGCol ) { 00151 log << MSG::FATAL << "Could not find EvtRecEtaToGGCol" << endreq; 00152 return StatusCode::FAILURE; 00153 } 00154 00155 00156 SmartDataPtr<EvtRecVeeVertexCol> recVeeVertexCol(eventSvc(), "/Event/EvtRec/EvtRecVeeVertexCol"); 00157 if ( ! recVeeVertexCol ) { 00158 log << MSG::FATAL << "Could not find EvtRecVeeVertexCol" << endreq; 00159 return StatusCode::FAILURE; 00160 } 00161 00162 00163 SmartDataPtr<EvtRecDTagCol> recDTagCol(eventSvc(), EventModel::EvtRec::EvtRecDTagCol); 00164 if (!recDTagCol) { 00165 log << MSG::FATAL << "EvtRecDTagCol is not registered yet" << endreq; 00166 return StatusCode::FAILURE; 00167 } 00168 00169 00170 //get primary vertex from db 00171 Hep3Vector xorigin(0,0,0); 00172 IVertexDbSvc* vtxsvc; 00173 Gaudi::svcLocator()->service("VertexDbSvc", vtxsvc); 00174 if (vtxsvc->isVertexValid()) { 00175 00176 //vertex[0] = vx; vertex[1]= vy; vertex[2] = vz; 00177 double* vertex = vtxsvc->PrimaryVertex(); 00178 xorigin.setX(vertex[0]); 00179 xorigin.setY(vertex[1]); 00180 xorigin.setZ(vertex[2]); 00181 } 00182 utility util; 00183 00184 00185 //registered in DTag.cxx 00186 /* 00187 if (!recDTagCol) { 00188 recDTagCol = new EvtRecDTagCol; 00189 sc = registerEvtRecDTagCol(recDTagCol, log); 00190 if (sc != StatusCode::SUCCESS) { 00191 return sc; 00192 } 00193 } 00194 */ 00195 00196 00198 //reconstruct particle lists 00200 00201 pionSelector.setpidtype(0); 00202 kaonSelector.setpidtype(0); 00203 CDChargedPionList pionList(charged_begin, charged_end, pionSelector); 00204 CDChargedKaonList kaonList(charged_begin, charged_end, kaonSelector); 00205 CDPhotonList photonList(neutral_begin, neutral_end, photonSelector); 00206 00207 CDKsList ksList(ksSelector); 00208 dc_fill(ksList, recVeeVertexCol->begin(), recVeeVertexCol->end()); 00209 00210 00211 // do a secondary vertex fit and cut on the results 00212 map<EvtRecVeeVertex*, vector< double > > fitinfo; 00213 for( CDKsList::iterator ksit = ksList.particle_begin(); ksit != ksList.particle_end(); ++ksit ){ 00214 EvtRecVeeVertex* ks = const_cast<EvtRecVeeVertex*>( (*ksit).particle().navKshort() ); 00215 fitinfo[ks] = util.SecondaryVFit(ks, vtxsvc); 00216 } 00217 00218 CDPi0List pi0List(pi0Selector); 00219 dc_fill(pi0List, recPi0Col->begin(), recPi0Col->end()); 00220 00221 CDEtaList etaList(etatoGGSelector); 00222 dc_fill(etaList, recEtaToGGCol->begin(), recEtaToGGCol->end()); 00223 00224 //pion/kaon list with PID 00225 pionSelector.setpidtype(1); 00226 kaonSelector.setpidtype(1); 00227 CDChargedPionList pionList_tight(charged_begin, charged_end, pionSelector); 00228 CDChargedKaonList kaonList_tight(charged_begin, charged_end, kaonSelector); 00229 00230 00231 int run = eventHeader->runNumber(); 00232 m_ievt = eventHeader->eventNumber(); 00233 m_nChrg = recEvent->totalCharged(); 00234 m_nNeu = recEvent->totalNeutral(); 00235 m_nPion = pionList.size(); 00236 m_nKaon = kaonList.size(); 00237 m_nPi0 = pi0List.size(); 00238 m_nKs = ksList.size(); 00239 00240 00242 // get beam energy and beta 00244 //=========================================Wu Lianjin adds 00245 if(m_RdMeasuredEcms&&m_irun!=run){ 00246 if(ecmsSvc->isReadDBValid(run)) m_beamE=ecmsSvc->getInfo(run); 00247 if(ecmsSvc->isRunNoValid(run)){ 00248 m_beta.setX(ecmsSvc->getPx(run)); 00249 m_beta.setY(ecmsSvc->getPy(run)); 00250 m_beta.setZ(ecmsSvc->getPz(run)); 00251 } 00252 } 00253 log << MSG::INFO << "MeasuredEcmsSvc: " <<m_beamE<< endreq; 00254 //========================================= 00255 00256 if(m_ReadBeamEFromDB && m_irun!=run){ 00257 m_irun=run; 00258 if(m_usecalibBeamE) 00259 m_readDb.setcalib(true); 00260 m_beamE=m_readDb.getbeamE(m_irun,m_beamE); 00261 if(run>0) 00262 m_beta=m_readDb.getbeta(); 00263 //cout<<"use beam E from data base:"<<m_beamE<<endl; 00264 } 00265 double ebeam=m_beamE; 00266 00268 //reconstruct decay lists 00270 00271 00272 for(int list=0;list<chanlist.size();list++){ 00273 00274 string channel=chanlist[list]; 00275 vector<int> numchan; 00276 dsSelector.setebeam(ebeam); 00277 dsSelector.setbeta(m_beta); 00278 CDDecayList decaylist(dsSelector); 00279 00280 //K+/-: 1, Pi+/-:2, Pi0:3, 00281 //Eta: 4, Ks:5, 00282 //eta'(pipieta): 6, 00283 //eta'(rhogamma): 7 00284 //eta'(pipieta(pipipi0)): 8 00285 //eta(pipipi0): 9, 00286 //the fist element of the vector stands for decay mode, 00287 //the rest will be particles, and size of the vector minus 1 will be number of daughers. 00288 00289 if(channel=="DstoKsK") { 00290 numchan.push_back( EvtRecDTag::kDstoKsK ); 00291 numchan.push_back(5); 00292 numchan.push_back(1); 00293 decaylist=ksList* kaonList.plus(); 00294 } 00295 else if(channel=="DstoKKPi") { 00296 numchan.push_back( EvtRecDTag::kDstoKKPi ); 00297 numchan.push_back(1); 00298 numchan.push_back(1); 00299 numchan.push_back(2); 00300 decaylist=kaonList.minus()* kaonList.plus()* pionList.plus(); 00301 } 00302 else if(channel=="DstoKsKPi0") { 00303 numchan.push_back( EvtRecDTag::kDstoKsKPi0 ); 00304 numchan.push_back(5); 00305 numchan.push_back(1); 00306 numchan.push_back(3); 00307 decaylist=ksList* kaonList.plus()* pi0List; 00308 } 00309 else if(channel=="DstoKsKsPi") { 00310 numchan.push_back( EvtRecDTag::kDstoKsKsPi ); 00311 numchan.push_back(5); 00312 numchan.push_back(5); 00313 numchan.push_back(2); 00314 decaylist=ksList* ksList* pionList.plus(); 00315 } 00316 else if(channel=="DstoKKPiPi0") { 00317 numchan.push_back( EvtRecDTag::kDstoKKPiPi0 ); 00318 numchan.push_back(1); 00319 numchan.push_back(1); 00320 numchan.push_back(2); 00321 numchan.push_back(3); 00322 decaylist=kaonList.minus()* kaonList.plus()* pionList.plus()* pi0List; 00323 } 00324 else if(channel=="DstoKsKplusPiPi") { 00325 numchan.push_back( EvtRecDTag::kDstoKsKplusPiPi ); 00326 numchan.push_back(5); 00327 numchan.push_back(1); 00328 numchan.push_back(2); 00329 numchan.push_back(2); 00330 decaylist=ksList* kaonList.plus()* pionList.plus()* pionList.minus(); 00331 } 00332 else if(channel=="DstoKsKminusPiPi") { 00333 numchan.push_back( EvtRecDTag::kDstoKsKminusPiPi ); 00334 numchan.push_back(5); 00335 numchan.push_back(1); 00336 numchan.push_back(2); 00337 numchan.push_back(2); 00338 decaylist=ksList* kaonList.minus()* pionList.plus()* pionList.plus(); 00339 } 00340 else if(channel=="DstoKKPiPiPi") { 00341 numchan.push_back( EvtRecDTag::kDstoKKPiPiPi ); 00342 numchan.push_back(1); 00343 numchan.push_back(1); 00344 numchan.push_back(2); 00345 numchan.push_back(2); 00346 numchan.push_back(2); 00347 decaylist=kaonList.minus()* kaonList.plus()* pionList.plus()* pionList.plus()* pionList.minus(); 00348 } 00349 else if(channel=="DstoPiPi0") { 00350 numchan.push_back( EvtRecDTag::kDstoPiPi0 ); 00351 numchan.push_back(2); 00352 numchan.push_back(3); 00353 decaylist=pionList.plus()* pi0List; 00354 } 00355 else if(channel=="DstoPiPiPi") { 00356 numchan.push_back( EvtRecDTag::kDstoPiPiPi ); 00357 numchan.push_back(2); 00358 numchan.push_back(2); 00359 numchan.push_back(2); 00360 decaylist=pionList.plus()* pionList.plus()* pionList.minus(); 00361 } 00362 else if(channel=="DstoPiPiPiPi0") { 00363 numchan.push_back( EvtRecDTag::kDstoPiPiPiPi0 ); 00364 numchan.push_back(2); 00365 numchan.push_back(2); 00366 numchan.push_back(2); 00367 numchan.push_back(3); 00368 decaylist=pionList.plus()* pionList.plus()* pionList.minus()* pi0List; 00369 } 00370 else if(channel=="DstoPiPiPiPiPi") { 00371 numchan.push_back( EvtRecDTag::kDstoPiPiPiPiPi ); 00372 numchan.push_back(2); 00373 numchan.push_back(2); 00374 numchan.push_back(2); 00375 numchan.push_back(2); 00376 numchan.push_back(2); 00377 decaylist=pionList.plus()* pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus(); 00378 } 00379 else if(channel=="DstoPiPiPiPiPiPi0") { 00380 numchan.push_back( EvtRecDTag::kDstoPiPiPiPiPiPi0 ); 00381 numchan.push_back(2); 00382 numchan.push_back(2); 00383 numchan.push_back(2); 00384 numchan.push_back(2); 00385 numchan.push_back(2); 00386 numchan.push_back(3); 00387 decaylist=pionList.plus()* pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus()* pi0List; 00388 } 00389 else if(channel=="DstoPiPiPiPi0Pi0") { // <------------- NEW MODE 00390 numchan.push_back( EvtRecDTag::kDstoPiPiPiPi0Pi0 ); 00391 numchan.push_back(2); 00392 numchan.push_back(2); 00393 numchan.push_back(2); 00394 numchan.push_back(3); 00395 numchan.push_back(3); 00396 decaylist=pionList.plus()* pionList.plus()* pionList.minus()* pi0List* pi0List; 00397 } 00398 else if(channel=="DstoPiEta") { 00399 numchan.push_back( EvtRecDTag::kDstoPiEta ); 00400 numchan.push_back(2); 00401 numchan.push_back(4); 00402 decaylist=pionList.plus()* etaList; 00403 } 00404 else if(channel=="DstoPiEtaPiPiPi0") { // <------------- NEW MODE 00405 numchan.push_back( EvtRecDTag::kDstoPiEtaPiPiPi0 ); 00406 numchan.push_back(2); 00407 numchan.push_back(9); 00408 CDDecayList EtaList(etatoPiPiPi0Selector); 00409 EtaList=pionList.plus()* pionList.minus()* pi0List; 00410 decaylist=pionList.plus()* EtaList; 00411 } 00412 else if(channel=="DstoPiPi0Eta") { 00413 numchan.push_back( EvtRecDTag::kDstoPiPi0Eta ); 00414 numchan.push_back(2); 00415 numchan.push_back(3); 00416 numchan.push_back(4); 00417 decaylist=pionList.plus()* pi0List* etaList; 00418 } 00419 else if(channel=="DstoPiPi0EtaPiPiPi0") { // <---------- NEW MODE 00420 numchan.push_back( EvtRecDTag::kDstoPiPi0EtaPiPiPi0 ); 00421 numchan.push_back(2); 00422 numchan.push_back(3); 00423 numchan.push_back(9); 00424 CDDecayList EtaList(etatoPiPiPi0Selector); 00425 EtaList=pionList.plus()* pionList.minus()* pi0List; 00426 decaylist=pionList.plus()* pi0List* EtaList; 00427 } 00428 else if(channel=="DstoPiPiPiEta") { 00429 numchan.push_back( EvtRecDTag::kDstoPiPiPiEta ); 00430 numchan.push_back(2); 00431 numchan.push_back(2); 00432 numchan.push_back(2); 00433 numchan.push_back(4); 00434 decaylist=pionList.plus()* pionList.plus()* pionList.minus()* etaList; 00435 } 00436 else if(channel=="DstoPiPiPiEtaPiPiPi0") { // <---------- NEW MODE 00437 numchan.push_back( EvtRecDTag::kDstoPiPiPiEtaPiPiPi0 ); 00438 numchan.push_back(2); 00439 numchan.push_back(2); 00440 numchan.push_back(2); 00441 numchan.push_back(9); 00442 CDDecayList EtaList(etatoPiPiPi0Selector); 00443 EtaList=pionList.plus()* pionList.minus()* pi0List; 00444 decaylist=pionList.plus()* pionList.plus()* pionList.minus()* EtaList; 00445 } 00446 else if(channel=="DstoPiEPPiPiEta") { 00447 numchan.push_back( EvtRecDTag::kDstoPiEPPiPiEta ); 00448 numchan.push_back(2); 00449 numchan.push_back(6); 00450 CDDecayList epList(eptoPiPiEtaSelector); 00451 epList=pionList.plus()* pionList.minus()* etaList; 00452 decaylist=pionList.plus()* epList; 00453 } 00454 else if(channel=="DstoPiPi0EPPiPiEta") { 00455 numchan.push_back( EvtRecDTag::kDstoPiPi0EPPiPiEta ); 00456 numchan.push_back(2); 00457 numchan.push_back(3); 00458 numchan.push_back(6); 00459 CDDecayList epList(eptoPiPiEtaSelector); 00460 epList=pionList.plus()* pionList.minus()* etaList; 00461 decaylist=pionList.plus()* pi0List* epList; 00462 } 00463 else if(channel=="DstoPiEPPiPiEtaPiPiPi0") {// <------------- New mode: 470 eta'(pipieta, eta->pipipi0) 00464 numchan.push_back( EvtRecDTag::kDstoPiEPPiPiEtaPiPiPi0 ); 00465 numchan.push_back(2); 00466 numchan.push_back(8); 00467 CDDecayList EtaList(etatoPiPiPi0Selector); 00468 EtaList=pionList.plus()* pionList.minus()* pi0List; 00469 CDDecayList EtapList(eptoPiPiEta3PiSelector); 00470 EtapList=pionList.plus()* pionList.minus()* EtaList; 00471 decaylist=pionList.plus()* EtapList; 00472 } 00473 else if(channel=="DstoPiPi0EPPiPiEtaPiPiPi0") { //<------------ New mode: 471 eta'(pipieta, eta->pipipi0) 00474 numchan.push_back( EvtRecDTag::kDstoPiPi0EPPiPiEtaPiPiPi0 ); 00475 numchan.push_back(2); 00476 numchan.push_back(3); 00477 numchan.push_back(8); 00478 CDDecayList EtaList(etatoPiPiPi0Selector); 00479 EtaList=pionList.plus()* pionList.minus()* pi0List; 00480 CDDecayList EtapList(eptoPiPiEta3PiSelector); 00481 EtapList=pionList.plus()* pionList.minus()* EtaList; 00482 decaylist=pionList.plus()* pi0List* EtapList; 00483 } 00484 00485 else if(channel=="DstoPiEPRhoGam") { 00486 numchan.push_back( EvtRecDTag::kDstoPiEPRhoGam ); 00487 numchan.push_back(2); 00488 numchan.push_back(7); 00489 CDDecayList rhoList(rhotoPiPiSelector); 00490 rhoList=pionList.plus()* pionList.minus(); 00491 CDDecayList epList(eptoRhoGamSelector); 00492 epList=rhoList* photonList; 00493 decaylist=pionList.plus()* epList; 00494 } 00495 else if(channel=="DstoPiPi0EPRhoGam") { 00496 numchan.push_back( EvtRecDTag::kDstoPiPi0EPRhoGam ); 00497 numchan.push_back(2); 00498 numchan.push_back(3); 00499 numchan.push_back(7); 00500 CDDecayList rhoList(rhotoPiPiSelector); 00501 rhoList=pionList.plus()* pionList.minus(); 00502 CDDecayList epList(eptoRhoGamSelector); 00503 epList=rhoList* photonList; 00504 decaylist=pionList.plus()* pi0List* epList; 00505 } 00506 else if(channel=="DstoKsPi") { 00507 numchan.push_back( EvtRecDTag::kDstoKsPi ); 00508 numchan.push_back(5); 00509 numchan.push_back(2); 00510 decaylist=ksList* pionList.plus(); 00511 } 00512 else if(channel=="DstoKsPiPi0") { 00513 numchan.push_back( EvtRecDTag::kDstoKsPiPi0 ); 00514 numchan.push_back(5); 00515 numchan.push_back(2); 00516 numchan.push_back(3); 00517 decaylist=ksList* pionList.plus()* pi0List; 00518 } 00519 else if(channel=="DstoKPiPi") { 00520 numchan.push_back( EvtRecDTag::kDstoKPiPi ); 00521 numchan.push_back(1); 00522 numchan.push_back(2); 00523 numchan.push_back(2); 00524 decaylist=kaonList.plus()* pionList.plus()* pionList.minus(); 00525 } 00526 else if(channel=="DstoKPiPiPi0") { 00527 numchan.push_back( EvtRecDTag::kDstoKPiPiPi0 ); 00528 numchan.push_back(1); 00529 numchan.push_back(2); 00530 numchan.push_back(2); 00531 numchan.push_back(3); 00532 decaylist=kaonList.plus()* pionList.plus()* pionList.minus()* pi0List; 00533 } 00534 else if(channel=="DstoKKK") { 00535 numchan.push_back( EvtRecDTag::kDstoKKK ); 00536 numchan.push_back(1); 00537 numchan.push_back(1); 00538 numchan.push_back(1); 00539 decaylist=kaonList.minus()* kaonList.plus()* kaonList.plus(); 00540 } 00541 00542 CDDecayList::iterator D_begin =decaylist.particle_begin(); 00543 CDDecayList::iterator D_end =decaylist.particle_end(); 00544 00545 for ( CDDecayList::iterator it = D_begin; it != D_end; it++ ) { 00546 00547 EvtRecDTag* recDTag = new EvtRecDTag; 00548 recDTag->setdecayMode( (EvtRecDTag::DecayMode)numchan[0] ); 00549 00550 vector<int> trackid, showerid; 00551 vector<int> kaonid, pionid; 00552 int numofchildren=numchan.size()-1; 00553 00554 for(int i=0; i< numofchildren;i++){ 00555 00556 const CDCandidate& daughter=(*it).particle().child(i); 00557 00558 if(numchan[i+1]==1){ 00559 const EvtRecTrack* track=daughter.track(); 00560 trackid.push_back(track->trackId()); 00561 kaonid.push_back(track->trackId()); 00562 } 00563 else if(numchan[i+1]==2){ 00564 const EvtRecTrack* track=daughter.track(); 00565 trackid.push_back(track->trackId()); 00566 pionid.push_back(track->trackId()); 00567 } 00568 else if ( numchan[i+1]==3){ 00569 const EvtRecTrack* hiEnGamma=daughter.navPi0()->hiEnGamma(); 00570 const EvtRecTrack* loEnGamma=daughter.navPi0()->loEnGamma(); 00571 showerid.push_back(hiEnGamma->trackId()); 00572 showerid.push_back(loEnGamma->trackId()); 00573 } 00574 else if ( numchan[i+1]==4){ 00575 const EvtRecTrack* hiEnGamma=daughter.navEta()->hiEnGamma(); 00576 const EvtRecTrack* loEnGamma=daughter.navEta()->loEnGamma(); 00577 showerid.push_back(hiEnGamma->trackId()); 00578 showerid.push_back(loEnGamma->trackId()); 00579 } 00580 else if ( numchan[i+1]==5){ 00581 EvtRecVeeVertex* aKsCand = const_cast<EvtRecVeeVertex*>( daughter.navKshort() ); 00582 00583 // fill fit info 00584 recDTag->addToFitInfo(aKsCand->mass(),fitinfo[aKsCand][0],fitinfo[aKsCand][1],fitinfo[aKsCand][2]); 00585 // fill tracks 00586 EvtRecTrack* pion1Trk = aKsCand->daughter(0); 00587 EvtRecTrack* pion2Trk = aKsCand->daughter(1); 00588 trackid.push_back(pion1Trk->trackId()); 00589 trackid.push_back(pion2Trk->trackId()); 00590 } 00591 else if (numchan[i+1]==6){ 00592 const CDCandidate& apion = daughter.decay().child(0); 00593 const CDCandidate& spion = daughter.decay().child(1); 00594 const CDCandidate& eta = daughter.decay().child(2); 00595 const EvtRecTrack* apiontrk = apion.track(); 00596 const EvtRecTrack* spiontrk = spion.track(); 00597 const EvtRecTrack* hiEnGamma=eta.navEta()->hiEnGamma(); 00598 const EvtRecTrack* loEnGamma=eta.navEta()->loEnGamma(); 00599 00600 trackid.push_back(apiontrk->trackId()); 00601 trackid.push_back(spiontrk->trackId()); 00602 showerid.push_back(hiEnGamma->trackId()); 00603 showerid.push_back(loEnGamma->trackId()); 00604 00605 } 00606 else if (numchan[i+1]==7){ 00607 const CDCandidate& rho = daughter.decay().child(0); 00608 const CDCandidate& apion = rho.decay().child(0); 00609 const CDCandidate& spion = rho.decay().child(1); 00610 const CDCandidate& gamma = daughter.decay().child(1); 00611 00612 const EvtRecTrack* apiontrk = apion.track(); 00613 const EvtRecTrack* spiontrk = spion.track(); 00614 const EvtRecTrack* gammatrk = gamma.photon(); 00615 00616 00617 trackid.push_back(apiontrk->trackId()); 00618 trackid.push_back(spiontrk->trackId()); 00619 showerid.push_back(gammatrk->trackId()); 00620 00621 } 00622 else if (numchan[i+1]==8){ // <------------ NEW PART FOR ETAP TO PIPIETA TO PIPIPI0 00623 const CDCandidate& apion = daughter.decay().child(0); 00624 const CDCandidate& spion = daughter.decay().child(1); 00625 const CDCandidate& eta = daughter.decay().child(2); 00626 const CDCandidate& e0pion = eta.decay().child(0); 00627 const CDCandidate& e1pion = eta.decay().child(1); 00628 const CDCandidate& pi0 = eta.decay().child(2); 00629 00630 const EvtRecTrack* apiontrk = apion.track(); 00631 const EvtRecTrack* spiontrk = spion.track(); 00632 const EvtRecTrack* e0piontrk = e0pion.track(); 00633 const EvtRecTrack* e1piontrk = e1pion.track(); 00634 00635 const EvtRecTrack* hiEnGamma=pi0.navPi0()->hiEnGamma(); 00636 const EvtRecTrack* loEnGamma=pi0.navPi0()->loEnGamma(); 00637 00638 trackid.push_back(apiontrk->trackId()); 00639 trackid.push_back(spiontrk->trackId()); 00640 trackid.push_back(e0piontrk->trackId()); 00641 trackid.push_back(e1piontrk->trackId()); 00642 showerid.push_back(hiEnGamma->trackId()); 00643 showerid.push_back(loEnGamma->trackId()); 00644 00645 } 00646 else if (numchan[i+1]==9){ // <------- NEW PART FOR ETA TO PIPIPI0 00647 const CDCandidate& apion = daughter.decay().child(0); 00648 const CDCandidate& spion = daughter.decay().child(1); 00649 const CDCandidate& pi0 = daughter.decay().child(2); 00650 const EvtRecTrack* apiontrk = apion.track(); 00651 const EvtRecTrack* spiontrk = spion.track(); 00652 const EvtRecTrack* hiEnGamma=pi0.navPi0()->hiEnGamma(); 00653 const EvtRecTrack* loEnGamma=pi0.navPi0()->loEnGamma(); 00654 00655 trackid.push_back(apiontrk->trackId()); 00656 trackid.push_back(spiontrk->trackId()); 00657 showerid.push_back(hiEnGamma->trackId()); 00658 showerid.push_back(loEnGamma->trackId()); 00659 00660 } 00661 00662 00663 }//end of filling track and shower ids 00664 00665 00666 saveDsInfo(it, ebeam, numofchildren, recDTag); 00667 savetrack(trackid,showerid,charged_begin,charged_end,neutral_begin,neutral_end,recDTag); 00668 pidtag(kaonid,pionid,kaonList_tight, pionList_tight,recDTag); 00669 00670 00671 if(m_usevertexfit){ 00672 HepLorentzVector p4change_vfit=util.vfit(channel, kaonid, pionid, xorigin, charged_begin); 00673 recDTag->setp4(recDTag->p4()+p4change_vfit); 00674 } 00675 00676 00677 trackid.clear(); 00678 showerid.clear(); 00679 kaonid.clear(); 00680 pionid.clear(); 00681 00682 00683 00684 //write dtag object out 00685 recDTagCol->push_back(recDTag); 00686 00687 }//end of decaylist iterator 00688 00689 numchan.clear(); 00690 00691 }//end of reconstrucing all D+ decay lists 00692 00693 00694 00695 return StatusCode::SUCCESS; 00696 }
StatusCode DsReconstruction::finalize | ( | ) |
Definition at line 93 of file DsReconstruction.cxx.
References chanlist, Bes_Common::INFO, and msgSvc().
00093 { 00094 MsgStream log(msgSvc(), name()); 00095 log << MSG::INFO << "in finalize()" << endreq; 00096 00097 chanlist.clear(); 00098 00099 return StatusCode::SUCCESS; 00100 }
Definition at line 834 of file DsReconstruction.cxx.
References deljobs::string, and subSeperate::temp.
Referenced by initialize().
00834 { 00835 00836 string channel; 00837 vector<string> temp; 00838 00839 ifstream inFile; 00840 00841 inFile.open(filename.c_str()); 00842 if (!inFile) { 00843 cout << "Unable to open decay list file"; 00844 exit(1); // terminate with error 00845 } 00846 00847 while (inFile >> channel) { 00848 temp.push_back(channel); 00849 } 00850 00851 inFile.close(); 00852 00853 return temp; 00854 00855 }
StatusCode DsReconstruction::initialize | ( | ) |
Definition at line 69 of file DsReconstruction.cxx.
References chanlist, ecmsSvc, getlist(), Bes_Common::INFO, m_beta, m_decaylist, m_irun, m_RdMeasuredEcms, and msgSvc().
00069 { 00070 MsgStream log(msgSvc(), name()); 00071 log << MSG::INFO << "in initialize()" <<endreq; 00072 00073 m_irun=-100; 00074 m_beta.setX(0.011); 00075 m_beta.setY(0); 00076 m_beta.setZ(0); 00077 chanlist=getlist(m_decaylist); 00078 00079 //=====================================Wu Lianjin adds 00080 if(m_RdMeasuredEcms){ 00081 StatusCode status=serviceLocator()->service("MeasuredEcmsSvc", ecmsSvc, true); 00082 if(!status.isSuccess()){ 00083 std::cout<<"ERROR: Can not initial the IMeasuredEcmsSvc right"<<std::endl; 00084 return status; 00085 } 00086 } 00087 00088 //================================= 00089 return StatusCode::SUCCESS; 00090 }
void DsReconstruction::pidtag | ( | vector< int > | , | |
vector< int > | , | |||
CDChargedKaonList & | , | |||
CDChargedPionList & | , | |||
EvtRecDTag * | ||||
) |
Definition at line 779 of file DsReconstruction.cxx.
References EvtRecDTag::addKaonId(), EvtRecDTag::addPionId(), dchain::ChargedVisibleList< Charged, CandidateClass >::particle_begin(), and dchain::ChargedVisibleList< Charged, CandidateClass >::particle_end().
Referenced by execute().
00779 { 00780 00781 bool iskaon=false,ispion=false; 00782 00783 00784 // save track ids which passed pion/kaon cuts 00785 00786 for (CDChargedKaonList::iterator kit = kaonList.particle_begin(); kit != kaonList.particle_end(); kit++) { 00787 recDTag->addKaonId( (*kit).particle().track() ); 00788 } 00789 00790 for (CDChargedPionList::iterator pit = pionList.particle_begin(); pit != pionList.particle_end(); pit++) { 00791 recDTag->addPionId( (*pit).particle().track() ); 00792 } 00793 00794 00795 /* 00796 for(int i=0; i<kaonid.size(); i++){ 00797 bool ithkaon=false; 00798 for (CDChargedKaonList::iterator kit = kaonList.particle_begin(); kit != kaonList.particle_end(); kit++) { 00799 if((*kit).particle().track()->trackId()==kaonid[i]){ 00800 ithkaon=true; 00801 break; 00802 } 00803 } 00804 if(!ithkaon) break; 00805 if(i==kaonid.size()-1) 00806 iskaon=true; 00807 } 00808 00809 for(int i=0; i<pionid.size(); i++){ 00810 bool ithpion=false; 00811 for (CDChargedPionList::iterator pit = pionList.particle_begin(); pit != pionList.particle_end(); pit++) { 00812 if((*pit).particle().track()->trackId()==pionid[i]){ 00813 ithpion=true; 00814 break; 00815 } 00816 } 00817 if(!ithpion) break; 00818 if(i==pionid.size()-1) 00819 ispion=true; 00820 } 00821 00822 00823 if( iskaon && ispion) 00824 recDTag->settype( EvtRecDTag::Tight ); 00825 else if( (kaonid.size()==0 && ispion) || (pionid.size()==0 && iskaon)) 00826 recDTag->settype( EvtRecDTag::Tight ); 00827 else if( kaonid.size()==0 && pionid.size()==0 ) 00828 recDTag->settype( EvtRecDTag::Tight ); 00829 */ 00830 00831 }
StatusCode DsReconstruction::registerEvtRecDTagCol | ( | EvtRecDTagCol * | dtagCol, | |
MsgStream & | log | |||
) | [private] |
Definition at line 102 of file DsReconstruction.cxx.
References Bes_Common::FATAL.
00103 { 00104 StatusCode sc = eventSvc()->registerObject("/Event/EvtRec/EvtRecDTagCol", 00105 aNewEvtRecDTagCol); 00106 if (sc != StatusCode::SUCCESS) { 00107 log << MSG::FATAL << "Could not register EvtRecDTagCol in TDS!" << endreq; 00108 } 00109 return sc; 00110 }
void DsReconstruction::saveDsInfo | ( | CDDecayList::iterator | , | |
double | , | |||
int | , | |||
EvtRecDTag * | ||||
) |
Definition at line 699 of file DsReconstruction.cxx.
References EvtRecDTag::Loose, m_beta, mass, EvtRecDTag::setbeamE(), EvtRecDTag::setcharge(), EvtRecDTag::setcharm(), EvtRecDTag::setdeltaE(), EvtRecDTag::setmass(), EvtRecDTag::setmBC(), EvtRecDTag::setnumOfChildren(), EvtRecDTag::setp4(), EvtRecDTag::settype(), and EvtRecDTag::Tight.
Referenced by execute().
00699 { 00700 00701 double mass = (*it).particle().mass(); 00702 int charge= (*it).particle().charge(); 00703 HepLorentzVector p4((*it).particle().momentum(), (*it).particle().energy()); 00704 recDTag->setp4(p4); 00705 00706 p4.boost(-m_beta); 00707 double mbc2_CMS = ebeam*ebeam - p4.v().mag2(); 00708 double mbc_CMS = mbc2_CMS > 0 ? sqrt( mbc2_CMS ) : -10; 00709 double deltaE_CMS = p4.t() - ebeam; 00710 00711 if((*it).particle().userTag()==1) 00712 recDTag->settype( EvtRecDTag::Tight ); 00713 else 00714 recDTag->settype( EvtRecDTag::Loose ); 00715 recDTag->setcharge(charge); 00716 recDTag->setcharm(charge); 00717 recDTag->setnumOfChildren(numofchildren); 00718 recDTag->setmass(mass); 00719 recDTag->setmBC(mbc_CMS); 00720 recDTag->setbeamE(ebeam); 00721 recDTag->setdeltaE(deltaE_CMS); 00722 00723 }
void DsReconstruction::savetrack | ( | vector< int > | , | |
vector< int > | , | |||
EvtRecTrackIterator | , | |||
EvtRecTrackIterator | , | |||
EvtRecTrackIterator | , | |||
EvtRecTrackIterator | , | |||
EvtRecDTag * | ||||
) |
Definition at line 725 of file DsReconstruction.cxx.
References EvtRecDTag::addOtherShower(), EvtRecDTag::addOtherTrack(), EvtRecDTag::addShower(), EvtRecDTag::addTrack(), genRecEmupikp::i, and ganga-rec::j.
Referenced by execute().
00726 { 00727 00728 vector<EvtRecTrackIterator> trktemp; 00729 vector<EvtRecTrackIterator> shrtemp; 00730 00731 //fill tracks 00732 for(EvtRecTrackIterator trk=charged_begin; trk<charged_end;trk++){ 00733 00734 bool isothertrack=true; 00735 for(int i=0; i<trackid.size(); i++){ 00736 if( (*trk)->trackId()==trackid[i] ){ 00737 trktemp.push_back(trk); 00738 isothertrack=false; 00739 break; 00740 } 00741 } 00742 if(isothertrack) 00743 recDTag->addOtherTrack(*trk); 00744 } 00745 for(int i=0; i<trackid.size();i++){ 00746 for(int j=0; j<trktemp.size(); j++){ 00747 EvtRecTrackIterator trk=trktemp[j]; 00748 if( (*trk)->trackId()==trackid[i]) 00749 recDTag->addTrack(*trktemp[j]); 00750 } 00751 } 00752 00753 00754 //fill showers 00755 for(EvtRecTrackIterator shr=neutral_begin; shr<neutral_end;shr++){ 00756 bool isothershower=true; 00757 for(int i=0; i<showerid.size(); i++){ 00758 if( (*shr)->trackId()==showerid[i] ){ 00759 shrtemp.push_back(shr); 00760 isothershower=false; 00761 break; 00762 } 00763 } 00764 if(isothershower) 00765 recDTag->addOtherShower(*shr); 00766 } 00767 00768 for(int i=0; i<showerid.size();i++){ 00769 for(int j=0; j<shrtemp.size(); j++){ 00770 EvtRecTrackIterator shr=shrtemp[j]; 00771 if( (*shr)->trackId()==showerid[i]) 00772 recDTag->addShower(*shrtemp[j]); 00773 } 00774 } 00775 00776 00777 }
vector<string> DsReconstruction::chanlist [private] |
Definition at line 52 of file DsReconstruction.h.
Referenced by execute(), finalize(), and initialize().
IMeasuredEcmsSvc* DsReconstruction::ecmsSvc [private] |
double DsReconstruction::m_beamE [private] |
Hep3Vector DsReconstruction::m_beta [private] |
Definition at line 55 of file DsReconstruction.h.
Referenced by execute(), initialize(), and saveDsInfo().
bool DsReconstruction::m_debug [private] |
string DsReconstruction::m_decaylist [private] |
Definition at line 51 of file DsReconstruction.h.
Referenced by DsReconstruction(), and initialize().
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_RdMeasuredEcms [private] |
Definition at line 61 of file DsReconstruction.h.
Referenced by DsReconstruction(), execute(), and initialize().
bool DsReconstruction::m_ReadBeamEFromDB [private] |
ReadBeamInfFromDb DsReconstruction::m_readDb [private] |
bool DsReconstruction::m_usecalibBeamE [private] |
bool DsReconstruction::m_usevertexfit [private] |