00095 {
00096 MsgStream log(msgSvc(), name());
00097 log << MSG::INFO << "in execute()" << endreq;
00098
00099 StatusCode sc;
00100
00102
00104 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00105 int event= eventHeader->eventNumber();
00106
00107
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
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00163
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
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
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
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
00221
00222
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 }
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
00512 recDTagCol->push_back(recDTag);
00513
00514 }
00515
00516 numchan.clear();
00517
00518 }
00519
00520
00521
00522 return StatusCode::SUCCESS;
00523 }