100 <<
" compiled " << __DATE__ <<
" " << __TIME__ <<
"\t: " <<
date() <<
"␛[m" <<
endmsg;
103 bool foundOffline =
false;
109 std::vector<double> beamline;
113 double xbeam_online = 0;
114 double ybeam_online = 0;
115 double zbeam_online = 0;
117 std::vector<double> beamline_online;
142 if ( xbeam!=0 || ybeam!=0 ) {
147 if ( xbeam_online!=0 || ybeam_online!=0 ) {
148 selectorTest.
setBeamline( xbeam_online, ybeam_online, zbeam_online );
161 unsigned run_number = 0;
162 unsigned long long event_number = 0;
163 unsigned lumi_block = 0;
164 unsigned bunch_crossing_id = 0;
165 unsigned time_stamp = 0;
168 if (
retrieve(pEventInfo,
"EventInfo").isFailure() ) {
176 bunch_crossing_id = pEventInfo->
bcid();
180 m_provider->msg(MSG::DEBUG) <<
"run " << run_number
181 <<
"\tevent " << event_number
182 <<
"\tlb " << lumi_block <<
endmsg;
184 m_event->run_number(run_number);
185 m_event->event_number(event_number);
186 m_event->lumi_block(lumi_block);
187 m_event->time_stamp(time_stamp);
188 m_event->bunch_crossing_id(bunch_crossing_id);
197 <<
"L2 pass " << L2chain->
isPassed() <<
"\t"
198 <<
"EF pass " << EFchain->
isPassed() <<
"\t"
199 <<
"HLT pass " << HLTchain->
isPassed() <<
"␛[m"
205 bool analyse =
false;
211 int passed_chains = 0;
220 for (
unsigned ichain=0 ; ichain<
m_chainNames.size() ; ichain++ ) {
226 if (chainName.find(
"L2") == std::string::npos &&
227 chainName.find(
"EF") == std::string::npos &&
228 chainName.find(
"HLT") == std::string::npos )
continue;
230 if ( configuredHLTChains.find(chainName)==configuredHLTChains.end() ) {
231 m_provider->msg(MSG::WARNING) <<
"␛[91;1m" <<
"Chain " << chainName
232 <<
" is not configured for this event" <<
"␛[m"
240 std::string roistring =
"";
243 bool passPhysics = (*m_tdt)->isPassed(chainName);
245 m_provider->msg(MSG::DEBUG) <<
"Chain " << chainName <<
"\troi " << roistring
246 <<
"\tpres " << (*m_tdt)->getPrescale(chainName)
247 << ( passPhysics ?
"␛[91;1m" :
"" ) <<
"\tpass physics " << passPhysics << ( passPhysics ?
"␛[m" :
"" )
248 <<
"\t: ( pass " << (*m_tdt)->isPassed(chainName, decisiontype ) <<
"\tdec type " << decisiontype <<
" ) " <<
endmsg;
250 if ( (*m_tdt)->isPassed(chainName, decisiontype ) || !
m_chainNames[ichain].passed() ) {
262 m_provider->msg(MSG::DEBUG) <<
"No chains passed unprescaled - not processing this event: " << run_number <<
" " << event_number <<
" " << lumi_block <<
endmsg;
274 selectorTruth.
clear();
302 m_provider->msg(MSG::WARNING) <<
"Truth not found - none whatsoever!" <<
endmsg;
329 std::vector<TIDA::Vertex> vertices;
331 std::string vertexType =
"PrimaryVertices";
332 std::string vertexChainname =
"Vertex";
335 vertexChainname +=
":" + vertexType;
338 m_provider->msg(MSG::VERBOSE) <<
"fetching offline AOD vertex container with key " << vertexType <<
endmsg;
342 if (
retrieve( xaodVtxCollection, vertexType ).isFailure()) {
343 if (
m_provider->msg().level() <= MSG::WARNING)
m_provider->msg(MSG::WARNING) <<
"xAOD vertex container not found with key " << vertexType <<
endmsg;
346 if ( xaodVtxCollection!=0 ) {
348 m_provider->msg(MSG::DEBUG) <<
"xAOD vertex container " << vertexType <<
" found with " << xaodVtxCollection->
size() <<
" entries" <<
endmsg;
352 if ( vertexType.find(
"SecVtx") != std::string::npos ) {
353 vertices = vertexBuilder.
select( xaodVtxCollection, &selectorRef.
tracks(),
true );
356 vertices = vertexBuilder.
select( xaodVtxCollection, &selectorRef.
tracks() );
362 m_event->addChain( vertexChainname );
364 m_event->back().back().addVertices( vertices );
380 for (
unsigned i=0 ; i<vertices.size() ; i++ ) {
381 m_provider->msg(MSG::DEBUG) <<
"vertex " << i <<
" " << vertices[i] <<
endmsg;
382 m_event->addVertex(vertices[i]);
397 m_event->addChain(
"Offline" );
402 std::vector<double> beamline_;
403 beamline_.push_back( selectorRef.
getBeamX() );
404 beamline_.push_back( selectorRef.
getBeamY() );
405 beamline_.push_back( selectorRef.
getBeamZ() );
406 m_event->back().back().addUserData(beamline_);
410 Noff = selectorRef.
tracks().size();
413 for (
int ii=selectorRef.
tracks().size() ; ii-- ; )
m_provider->msg(MSG::DEBUG) <<
" ref track " << ii <<
" " << *selectorRef.
tracks()[ii] <<
endmsg;
418 for (
unsigned ichain=0 ; ichain<
m_chainNames.size() ; ichain++ ) {
425 std::string collectionname =
m_chainNames[ichain].tail();
429 if ( chainname!=
"" )
continue;
430 if ( collectionname==
"" )
continue;
432 chainname = collectionname;
433 if ( vtx_name!=
"" ) chainname +=
":" + vtx_name;
440 selectorTest.
clear();
444 std::string collection_test = collectionname;
445 size_t pos = collectionname.find(
"/");
446 if ( pos!=std::string::npos ) collection_test = collectionname.substr( pos+1, collectionname.size()-pos );
455 m_provider->msg(MSG::WARNING) <<
"\tcollection " << collectionname <<
" not found" <<
endmsg;
461 std::vector<TIDA::Vertex> tidavertices;
463 m_provider->msg(MSG::DEBUG) <<
"\tFetch xAOD::VertexContainer with key " << vtx_name <<
endmsg;
465 if ( vtx_name!=
"" ) {
467 m_provider->msg(MSG::DEBUG) <<
"\tFetch xAOD::VertexContainer with key " << vtx_name <<
endmsg;
473 if (
retrieve( xaodVtxCollection, vtx_name ).isFailure() ) {
474 if (
m_provider->msg().level() <= MSG::WARNING)
m_provider->msg(MSG::WARNING) <<
"xAOD vertex container not found with key " << vtx_name <<
endmsg;
477 if ( xaodVtxCollection!=0 ) {
479 m_provider->msg(MSG::DEBUG) <<
"\txAOD::VertexContainer found with size " << xaodVtxCollection->
size()
480 <<
"\t" << vtx_name <<
endmsg;
484 if ( vtx_name.find(
"SecVtx") != std::string::npos ) {
485 tidavertices = vertexBuilder.
select( xaodVtxCollection, 0,
true );
488 tidavertices = vertexBuilder.
select( xaodVtxCollection );
497 m_event->addChain( chainname );
499 if ( vtx_name!=
"" )
m_event->back().back().addVertices( tidavertices );
503 std::vector<double> beamline_;
504 beamline_.push_back( selectorTest.
getBeamX() );
505 beamline_.push_back( selectorTest.
getBeamY() );
506 beamline_.push_back( selectorTest.
getBeamZ() );
507 m_event->back().back().addUserData(beamline_);
510 int Ntest = selectorTest.
tracks().size();
512 m_provider->msg(MSG::DEBUG) <<
"collection " << collectionname <<
"\ttest tracks.size() " << Ntest <<
endmsg;
513 for (
int ii=Ntest ; ii-- ; )
m_provider->msg(MSG::DEBUG) <<
" test track " << ii <<
" " << *selectorTest.
tracks()[ii] <<
endmsg;
518 std::string ElectronRef[7] = {
520 "TightCB",
"MediumCB",
"LooseCB",
521 "TightLH",
"MediumLH",
"LooseLH" };
531 for (
int it=0 ; it<7 ; it++ )
if (
m_electronType[ielec]==ElectronRef[it] ) itype = it;
532 if ( itype<0 )
continue;
534 std::vector<TrackTrigObject> elevec;
536 std::string echain = std::string(
"Electrons");
541 if ( Nel_ < 1 )
continue;
551 m_event->back().back().addObjects( elevec );
554 std::vector<double> beamline_;
555 beamline_.push_back( selectorRef.
getBeamX() );
556 beamline_.push_back( selectorRef.
getBeamY() );
557 beamline_.push_back( selectorRef.
getBeamZ() );
558 m_event->back().back().addUserData(beamline_);
564 std::string MuonRef[5] = {
"",
"Tight",
"Medium",
"Loose",
"VeryLoose" };
567 for (
size_t imuon=0 ; imuon<
m_muonType.size() ; imuon++ ) {
572 for (
int it=0 ; it<5 ; it++ )
if (
m_muonType[imuon] == MuonRef[it] ) muonType=it;
573 if ( muonType<0 )
continue;
575 std::string mchain =
"Muons";
578 int Nmu_ =
processMuons( selectorRef, muonType, 0, mchain );
580 if ( Nmu_ < 1 )
continue;
584 m_provider->msg(MSG::DEBUG) <<
"found " << Nmu <<
" offline muons " <<
endmsg;
593 std::vector<double> beamline_;
594 beamline_.push_back( selectorRef.
getBeamX() );
595 beamline_.push_back( selectorRef.
getBeamY() );
596 beamline_.push_back( selectorRef.
getBeamZ() );
597 m_event->back().back().addUserData(beamline_);
601 for (
int ii=selectorRef.
tracks().size() ; ii-- ; )
m_provider->msg(MSG::DEBUG) <<
" ref muon track " << ii <<
" " << *selectorRef.
tracks()[ii] <<
endmsg;
614 m_provider->msg(MSG::DEBUG) <<
"found " << Nmu <<
" offline muons " <<
endmsg;
621 for (
int ii=selectorRef.
tracks().size() ; ii-- ; )
m_provider->msg(MSG::DEBUG) <<
" ref muon track " << ii <<
" " << *selectorRef.
tracks()[ii] <<
endmsg;
627 std::string TauRef[4] = {
"",
"Tight",
"Medium",
"Loose" };
630 for (
size_t itau=0 ; itau<
m_tauType.size() ; itau++ ) {
635 for (
int it=0 ; it<4 ; it++ )
if (
m_tauType[itau]==TauRef[it] ) itype = it;
636 if ( itype<0 )
continue;
639 int requireNtracks = 0;
640 if (
m_tauProngs[itau]==
"3Prong" ) requireNtracks = 3;
641 if (
m_tauProngs[itau]==
"1Prong" ) requireNtracks = 1;
643 std::vector<TrackTrigObject> tauvec;
645 int Ntau_ =
processTaus( selectorRef, &tauvec, itype, requireNtracks, 20000 );
653 std::string tchain = std::string(
"Taus");
660 m_event->back().back().addObjects( tauvec ) ;
663 std::vector<double> beamline_;
664 beamline_.push_back( selectorRef.
getBeamX() );
665 beamline_.push_back( selectorRef.
getBeamY() );
666 beamline_.push_back( selectorRef.
getBeamZ() );
667 m_event->back().back().addUserData(beamline_);
673 if ( Nmu==0 && Noff==0 && Nel==0 && Ntau==0 )
m_provider->msg(MSG::DEBUG) <<
"No offline objects found " <<
endmsg;
674 else foundOffline =
true;
679 for (
unsigned ichain=0 ; ichain<
m_chainNames.size() ; ichain++ ) {
684 const std::string& chainName =
m_chainNames[ichain].head();
687 const std::string& collectionName =
m_chainNames[ichain].tail();
689 if( chainName.find(
"L2_")==std::string::npos &&
690 chainName.find(
"EF_")==std::string::npos &&
691 chainName.find(
"HLT_")==std::string::npos )
continue;
697 m_provider->msg(MSG::DEBUG) <<
"chain " << chainName
698 <<
"\tprescale " << (*m_tdt)->getPrescale(chainName)
699 <<
"\tpass " << (*m_tdt)->isPassed(chainName) <<
" physics "
700 <<
" (req dec " << (*m_tdt)->isPassed(chainName, decisiontype ) <<
" dec type " << decisiontype <<
")"
707 if ( !(*m_tdt)->isPassed( chainName, decisiontype ) )
continue;
723 if ( roi_name!=
"" ) {
725 std::string roi_name_tmp = roi_name;
726 std::string roi_tename =
"";
728 if ( roi_name.find(
"/")!=std::string::npos ) {
729 roi_name_tmp = roi_name.substr( roi_name.find(
"/")+1, roi_name.size()-roi_name.find(
"/") );
730 roi_tename = roi_name.substr( 0, roi_name.find(
"/") );
735 if ( roist.size()>0 ) {
736 for (
unsigned ir=0 ;
ir<roist.size() ;
ir++ )
m_provider->msg(MSG::DEBUG) <<
"\t\tRetrieved roi " << roi_name <<
"\t" << *roist[
ir].cptr() <<
endmsg;
739 m_provider->msg(MSG::WARNING) <<
"\t\tRequested roi " << roi_name <<
" not found" <<
endmsg;
759 leg = std::atoi(
m_chainNames[ichain].element().c_str());
763 std::string rgex = roi_key;
765 std::vector< TrigCompositeUtils::LinkInfo<TrigRoiDescriptorCollection> > rois =
775 if ( rois.empty() ) {
776 if ( !rgex.empty() ) {
791 if ( rois.size()==0 )
continue;
808 if ( roi_key==
"SuperRoi" && iroi>1 )
continue;
810 if ( roi_key.find(
"JetSuper")!=std::string::npos && iroi>1 )
continue;
815 if ( roi_key!=
"" && roi_link.
dataID()!=rgex )
continue;
824 if (
m_provider->msg().level() <= MSG::VERBOSE) {
825 m_provider->msg(MSG::VERBOSE) <<
" RoI descriptor for seeded chain " << chainName <<
" " << **roiptr <<
endmsg;
838 selectorTest.
clear();
841 if ( chainName.find(
"HLT_")!=std::string::npos || chainName.find(
"EF_")!=std::string::npos ) {
844 if (
m_provider->msg().level() <= MSG::DEBUG) {
845 m_provider->msg(MSG::WARNING) <<
"\tNo track collection " << collectionName <<
" found" <<
endmsg;
852 std::vector<TIDA::Vertex> tidavertices;
854 if ( vtx_name!=
"" ) {
856 m_provider->msg(MSG::DEBUG) <<
"\tFetch xAOD::VertexContainer for chain " << chainName <<
" with key " << vtx_name <<
endmsg;
863 if ( vtx_itrpair.first == vtx_itrpair.second ) {
864 if (
m_provider->msg().level() <= MSG::DEBUG ) {
865 m_provider->msg(MSG::WARNING) <<
"\tNo xAOD::Vertex for chain " << chainName <<
" for key " << vtx_name <<
endmsg;
870 m_provider->msg(MSG::DEBUG) <<
"\txAOD::VertexContainer found with size " << (vtx_itrpair.second - vtx_itrpair.first)
871 <<
"\t" << vtx_name <<
endmsg;
875 if ( vtx_name.find(
"SecVtx") != std::string::npos ) {
876 tidavertices = vertexBuilder.
select( vtx_itrpair.first, vtx_itrpair.second, &selectorRef.
tracks(),
true );
879 tidavertices = vertexBuilder.
select( vtx_itrpair.first, vtx_itrpair.second, &selectorTest.
tracks() );
887 std::vector<TrackTrigObject> jets;
888 if ( chainName.find(
"HLT_j")!=std::string::npos || chainName.find(
"EF_j")!=std::string::npos ) {
893 const std::vector<TIDA::Track*>& testTracks = selectorTest.
tracks();
894 m_provider->msg(MSG::DEBUG) <<
"\ttest tracks.size() " << testTracks.size() <<
endmsg;
895 for (
unsigned int ii=0; ii < testTracks.size(); ii++) {
896 m_provider->msg(MSG::DEBUG) <<
" test track " << ii <<
"for chain " << chainName +
":" + collectionName <<
" " << *testTracks[ii] <<
endmsg;
903 if ( roi_tmp == 0 ) {
904 if ( testTracks.size()>0 )
m_provider->msg(MSG::WARNING) <<
"\ttest tracks.size() " << testTracks.size() <<
"found but no roi!!!" <<
endmsg;
908 chain.addRoi( *roi_tmp );
910 chain.back().addTracks(testTracks);
911 chain.back().addVertices(tidavertices);
915 if ( chainName.find(
"HLT_j")!=std::string::npos ) chain.back().addObjects( jets );
919 std::vector<double> beamline_;
920 beamline_.push_back( selectorTest.
getBeamX() );
921 beamline_.push_back( selectorTest.
getBeamY() );
922 beamline_.push_back( selectorTest.
getBeamZ() );
923 chain.back().addUserData(beamline_);
943 std::vector<std::string> chainnames =
m_event->chainnames();
947 for (
size_t ic=chainnames.size() ; ic-- ; ) {
948 if ( chainnames[ic] ==
"Offline" ) {
956 std::vector<TIDA::Chain>& chains =
m_event->chains();
957 std::vector<TIDA::Chain>::iterator citr = chains.begin();
959 std::vector<std::pair<double,double> > philims;
961 for ( ; citr!=chains.end() ; ++citr ) {
962 if ( citr->name().find(
"HLT_")!=std::string::npos || citr->name().find(
"EF_")!=std::string::npos ) {
963 for (
size_t ir=0 ;
ir<citr->size() ;
ir++ ) {
966 for (
size_t isub=0 ; isub<roi.
size() ; isub++ ) {
967 philims.push_back( std::pair<double,double>( roi[isub]->phiMinus(), roi[isub]->phiPlus() ) );
970 else philims.push_back( std::pair<double,double>( roi.
phiMinus(), roi.
phiPlus() ) );
977 for (
size_t iroi=0 ; iroi<
offline->size() ; iroi++ ) {
979 std::vector<TIDA::Track>& tracks =
offline->rois()[iroi].tracks();
985 for ( std::vector<TIDA::Track>::iterator it=tracks.begin() ; it<tracks.end() ; ) {
988 if ( std::fabs(it->pT())<
m_ptmin ) { inc=
false; tracks.erase( it ); }
991 bool remove_track =
true;
992 for (
size_t isub=0 ; isub<philims.size() ; isub++ ) {
994 if ( philims[isub].first < philims[isub].second ) {
995 if ( it->phi()>=philims[isub].first && it->phi()<=philims[isub].second ) {
996 remove_track =
false;
1001 if ( it->phi()>=philims[isub].first || it->phi()<=philims[isub].second ) {
1002 remove_track =
false;
1007 if ( remove_track ) { inc=
false; tracks.erase( it ); }