00091 {
00092 MsgStream log(msgSvc(), name());
00093 log << MSG::INFO << "in execute()" << endreq;
00094
00095 StatusCode sc;
00096
00098
00100 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
00101 int event= eventHeader->eventNumber();
00102
00103
00104
00105 SmartDataPtr<EvtRecEvent> recEvent(eventSvc(), EventModel::EvtRec::EvtRecEvent);
00106 SmartDataPtr<EvtRecTrackCol> recTrackCol(eventSvc(), EventModel::EvtRec::EvtRecTrackCol);
00107 log << MSG::DEBUG << "run and event = " << eventHeader->runNumber()
00108 << " " << eventHeader->eventNumber() << endreq;
00109 log << MSG::DEBUG <<"ncharg, nneu, tottks = "
00110 << recEvent->totalCharged() << " , "
00111 << recEvent->totalNeutral() << " , "
00112 << recEvent->totalTracks() <<endreq;
00113
00114 EvtRecTrackIterator charged_begin = recTrackCol->begin();
00115 EvtRecTrackIterator charged_end = charged_begin + recEvent->totalCharged();
00116
00117 EvtRecTrackIterator neutral_begin = recTrackCol->begin()+recEvent->totalCharged();
00118 EvtRecTrackIterator neutral_end = recTrackCol->begin()+recEvent->totalTracks();
00119
00120
00121 SmartDataPtr<EvtRecPi0Col> recPi0Col(eventSvc(), "/Event/EvtRec/EvtRecPi0Col");
00122 if ( ! recPi0Col ) {
00123 log << MSG::FATAL << "Could not find EvtRecPi0Col" << endreq;
00124 return StatusCode::FAILURE;
00125 }
00126
00127
00128 SmartDataPtr<EvtRecEtaToGGCol> recEtaToGGCol(eventSvc(), "/Event/EvtRec/EvtRecEtaToGGCol");
00129 if ( ! recEtaToGGCol ) {
00130 log << MSG::FATAL << "Could not find EvtRecEtaToGGCol" << endreq;
00131 return StatusCode::FAILURE;
00132 }
00133
00134
00135 SmartDataPtr<EvtRecVeeVertexCol> recVeeVertexCol(eventSvc(), "/Event/EvtRec/EvtRecVeeVertexCol");
00136 if ( ! recVeeVertexCol ) {
00137 log << MSG::FATAL << "Could not find EvtRecVeeVertexCol" << endreq;
00138 return StatusCode::FAILURE;
00139 }
00140
00141
00142 SmartDataPtr<EvtRecDTagCol> recDTagCol(eventSvc(), EventModel::EvtRec::EvtRecDTagCol);
00143 if (!recDTagCol) {
00144 log << MSG::FATAL << "EvtRecDTagCol is not registered yet" << endreq;
00145 return StatusCode::FAILURE;
00146 }
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00159
00161 pionSelector.setpidtype(0);
00162 kaonSelector.setpidtype(0);
00163 CDChargedPionList pionList(charged_begin, charged_end, pionSelector);
00164 CDChargedKaonList kaonList(charged_begin, charged_end, kaonSelector);
00165
00166
00167 CDKsList ksList(ksSelector);
00168 dc_fill(ksList, recVeeVertexCol->begin(), recVeeVertexCol->end());
00169
00170 CDPi0List pi0List(pi0Selector);
00171 dc_fill(pi0List, recPi0Col->begin(), recPi0Col->end());
00172
00173 CDEtaList etaList(etatoGGSelector);
00174 dc_fill(etaList, recEtaToGGCol->begin(), recEtaToGGCol->end());
00175
00176
00177 pionSelector.setpidtype(1);
00178 kaonSelector.setpidtype(1);
00179 CDChargedPionList pionList_tight(charged_begin, charged_end, pionSelector);
00180 CDChargedKaonList kaonList_tight(charged_begin, charged_end, kaonSelector);
00181
00182
00183
00184 int run = eventHeader->runNumber();
00185 m_ievt = eventHeader->eventNumber();
00186 m_nChrg = recEvent->totalCharged();
00187 m_nNeu = recEvent->totalNeutral();
00188 m_nPion = pionList.size();
00189 m_nKaon = kaonList.size();
00190 m_nPi0 = pi0List.size();
00191 m_nKs = ksList.size();
00192
00193
00195
00197
00198
00199
00200 if(m_ReadBeamEFromDB && run>0 && m_irun!=run){
00201 m_irun=run;
00202 m_beamE=m_readDb.getbeamE(m_irun,m_beamE);
00203 }
00204 double ebeam=m_beamE;
00205
00206
00208
00210
00211
00212 for(int list=0;list<chanlist.size();list++){
00213
00214 string channel=chanlist[list];
00215 vector<int> numchan;
00216 chargedDSelector.setebeam(ebeam);
00217 CDDecayList decaylist(chargedDSelector);
00218
00219
00220
00221
00222
00223 if(channel=="DptoKPiPi") {
00224 numchan.push_back( EvtRecDTag::kDptoKPiPi );
00225 numchan.push_back(1);
00226 numchan.push_back(2);
00227 numchan.push_back(2);
00228 decaylist=kaonList.minus()* pionList.plus()* pionList.plus();
00229 }
00230 else if(channel=="DptoKPiPiPi0") {
00231 numchan.push_back( EvtRecDTag::kDptoKPiPiPi0 );
00232 numchan.push_back(1);
00233 numchan.push_back(2);
00234 numchan.push_back(2);
00235 numchan.push_back(3);
00236 decaylist=kaonList.minus()* pionList.plus()* pionList.plus()* pi0List;
00237 }
00238 else if(channel=="DptoKsPi") {
00239 numchan.push_back( EvtRecDTag::kDptoKsPi );
00240 numchan.push_back(5);
00241 numchan.push_back(2);
00242 decaylist=ksList* pionList.plus();
00243 }
00244 else if(channel=="DptoKsPiPi0") {
00245 numchan.push_back( EvtRecDTag::kDptoKsPiPi0 );
00246 numchan.push_back(5);
00247 numchan.push_back(2);
00248 numchan.push_back(3);
00249 decaylist=ksList* pionList.plus()* pi0List;
00250 }
00251 else if(channel=="DptoKsPiPiPi") {
00252 numchan.push_back( EvtRecDTag::kDptoKsPiPiPi );
00253 numchan.push_back(5);
00254 numchan.push_back(2);
00255 numchan.push_back(2);
00256 numchan.push_back(2);
00257 decaylist=ksList* pionList.plus()* pionList.plus()* pionList.minus();
00258 }
00259 else if(channel=="DptoKKPi") {
00260 numchan.push_back( EvtRecDTag::kDptoKKPi );
00261 numchan.push_back(1);
00262 numchan.push_back(1);
00263 numchan.push_back(2);
00264 decaylist=kaonList.minus()* kaonList.plus()* pionList.plus();
00265 }
00266 else if(channel=="DptoPiPi0") {
00267 numchan.push_back( EvtRecDTag::kDptoPiPi0 );
00268 numchan.push_back(2);
00269 numchan.push_back(3);
00270 decaylist=pionList.plus()* pi0List;
00271 }
00272 else if(channel=="DptoKPi0") {
00273 numchan.push_back( EvtRecDTag::kDptoKPi0 );
00274 numchan.push_back(1);
00275 numchan.push_back(3);
00276 decaylist=kaonList.plus()* pi0List;
00277 }
00278 else if(channel=="DptoKsK") {
00279 numchan.push_back( EvtRecDTag::kDptoKsK );
00280 numchan.push_back(5);
00281 numchan.push_back(1);
00282 decaylist=ksList* kaonList.plus();
00283 }
00284 else if(channel=="DptoPiPiPi") {
00285 numchan.push_back( EvtRecDTag::kDptoPiPiPi );
00286 numchan.push_back(2);
00287 numchan.push_back(2);
00288 numchan.push_back(2);
00289 decaylist=pionList.plus()* pionList.plus()* pionList.minus() ;
00290 }
00291 else if(channel=="DptoPiPi0Pi0") {
00292 numchan.push_back( EvtRecDTag::kDptoPiPi0Pi0 );
00293 numchan.push_back(2);
00294 numchan.push_back(3);
00295 numchan.push_back(3);
00296 decaylist=pionList.plus()* pi0List* pi0List;
00297 }
00298 else if(channel=="DptoKsKsPi") {
00299 numchan.push_back( EvtRecDTag::kDptoKsKsPi );
00300 numchan.push_back(5);
00301 numchan.push_back(5);
00302 numchan.push_back(2);
00303 decaylist=ksList* ksList* pionList.plus();
00304 }
00305 else if(channel=="DptoKsKPi0") {
00306 numchan.push_back( EvtRecDTag::kDptoKsKPi0 );
00307 numchan.push_back(5);
00308 numchan.push_back(1);
00309 numchan.push_back(3);
00310 decaylist=ksList* kaonList.plus()* pi0List;
00311 }
00312 else if(channel=="DptoKsKsK") {
00313 numchan.push_back( EvtRecDTag::kDptoKsKsK );
00314 numchan.push_back(5);
00315 numchan.push_back(5);
00316 numchan.push_back(1);
00317 decaylist=ksList* ksList* kaonList.plus();
00318 }
00319 else if(channel=="DptoPiPiPiPi0") {
00320 numchan.push_back( EvtRecDTag::kDptoPiPiPiPi0 );
00321 numchan.push_back(2);
00322 numchan.push_back(2);
00323 numchan.push_back(2);
00324 numchan.push_back(3);
00325 decaylist=pionList.plus()* pionList.plus()* pionList.minus()* pi0List;
00326 }
00327 else if(channel=="DptoKsPiPi0Pi0") {
00328 numchan.push_back( EvtRecDTag::kDptoKsPiPi0Pi0 );
00329 numchan.push_back(5);
00330 numchan.push_back(2);
00331 numchan.push_back(3);
00332 numchan.push_back(3);
00333 decaylist=ksList* pionList.plus()* pi0List* pi0List;
00334 }
00335 else if(channel=="DptoKsKplusPiPi") {
00336 numchan.push_back( EvtRecDTag::kDptoKsKplusPiPi );
00337 numchan.push_back(5);
00338 numchan.push_back(1);
00339 numchan.push_back(2);
00340 numchan.push_back(2);
00341 decaylist=ksList* kaonList.plus()* pionList.plus()* pionList.minus();
00342 }
00343 else if(channel=="DptoKsKminusPiPi") {
00344 numchan.push_back( EvtRecDTag::kDptoKsKminusPiPi );
00345 numchan.push_back(5);
00346 numchan.push_back(1);
00347 numchan.push_back(2);
00348 numchan.push_back(2);
00349 decaylist=ksList* kaonList.minus()* pionList.plus()* pionList.plus();
00350 }
00351 else if(channel=="DptoKKPiPi0") {
00352 numchan.push_back( EvtRecDTag::kDptoKKPiPi0 );
00353 numchan.push_back(1);
00354 numchan.push_back(1);
00355 numchan.push_back(2);
00356 numchan.push_back(3);
00357 decaylist=kaonList.minus()* kaonList.plus()* pionList.plus()* pi0List;
00358 }
00359 else if(channel=="DptoPiPiPiPiPi") {
00360 numchan.push_back( EvtRecDTag::kDptoPiPiPiPiPi );
00361 numchan.push_back(2);
00362 numchan.push_back(2);
00363 numchan.push_back(2);
00364 numchan.push_back(2);
00365 numchan.push_back(2);
00366 decaylist=pionList.plus()* pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus();
00367 }
00368 else if(channel=="DptoKPiPiPiPi") {
00369 numchan.push_back( EvtRecDTag::kDptoKPiPiPiPi );
00370 numchan.push_back(1);
00371 numchan.push_back(2);
00372 numchan.push_back(2);
00373 numchan.push_back(2);
00374 numchan.push_back(2);
00375 decaylist=kaonList.plus()* pionList.plus()* pionList.plus()* pionList.minus()* pionList.minus();
00376 }
00377 else if(channel=="DptoPiEta") {
00378 numchan.push_back( EvtRecDTag::kDptoPiEta );
00379 numchan.push_back(2);
00380 numchan.push_back(4);
00381 decaylist=pionList.plus()* etaList;
00382 }
00383 else if(channel=="DptoKsPiEta") {
00384 numchan.push_back( EvtRecDTag::kDptoKsPiEta );
00385 numchan.push_back(5);
00386 numchan.push_back(2);
00387 numchan.push_back(4);
00388 decaylist=ksList* pionList.plus()* etaList;
00389 }
00390
00391 CDDecayList::iterator D_begin =decaylist.particle_begin();
00392 CDDecayList::iterator D_end =decaylist.particle_end();
00393
00394 for ( CDDecayList::iterator it = D_begin; it != D_end; it++ ) {
00395
00396 EvtRecDTag* recDTag = new EvtRecDTag;
00397 recDTag->setdecayMode( (EvtRecDTag::DecayMode)numchan[0] );
00398
00399 vector<int> trackid, showerid;
00400 vector<int> kaonid, pionid;
00401 int numofchildren=numchan.size()-1;
00402
00403 for(int i=0; i< numofchildren;i++){
00404
00405 const CDCandidate& daughter=(*it).particle().child(i);
00406
00407 if(numchan[i+1]==1){
00408 const EvtRecTrack* track=daughter.track();
00409 trackid.push_back(track->trackId());
00410 kaonid.push_back(track->trackId());
00411 }
00412 else if(numchan[i+1]==2){
00413 const EvtRecTrack* track=daughter.track();
00414 trackid.push_back(track->trackId());
00415 pionid.push_back(track->trackId());
00416 }
00417 else if ( numchan[i+1]==3){
00418 const EvtRecTrack* hiEnGamma=daughter.navPi0()->hiEnGamma();
00419 const EvtRecTrack* loEnGamma=daughter.navPi0()->loEnGamma();
00420 showerid.push_back(hiEnGamma->trackId());
00421 showerid.push_back(loEnGamma->trackId());
00422 }
00423 else if ( numchan[i+1]==4){
00424 const EvtRecTrack* hiEnGamma=daughter.navEta()->hiEnGamma();
00425 const EvtRecTrack* loEnGamma=daughter.navEta()->loEnGamma();
00426 showerid.push_back(hiEnGamma->trackId());
00427 showerid.push_back(loEnGamma->trackId());
00428 }
00429 else if ( numchan[i+1]==5){
00430 EvtRecVeeVertex* aKsCand = const_cast<EvtRecVeeVertex*>( daughter.navKshort() );
00431 EvtRecTrack* pion1Trk = aKsCand->daughter(0);
00432 EvtRecTrack* pion2Trk = aKsCand->daughter(1);
00433 trackid.push_back(pion1Trk->trackId());
00434 trackid.push_back(pion2Trk->trackId());
00435 }
00436
00437 }
00438
00439
00440 saveDpInfo(it, ebeam, numofchildren, recDTag);
00441 savetrack(trackid,showerid,charged_begin,charged_end,neutral_begin,neutral_end,recDTag);
00442 pidtag(kaonid,pionid,kaonList_tight, pionList_tight,recDTag);
00443
00444 trackid.clear();
00445 showerid.clear();
00446 kaonid.clear();
00447 pionid.clear();
00448
00449
00450
00451 recDTagCol->push_back(recDTag);
00452
00453 }
00454
00455 numchan.clear();
00456
00457 }
00458
00459
00460
00461 return StatusCode::SUCCESS;
00462 }