diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/CMakeLists.txt b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/CMakeLists.txt index 42fef727f708b5ce2e2ce4c9799f8efb496f91f5..92d3652112c5ef490b74434bbc4fea4c26f907c5 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/CMakeLists.txt +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/CMakeLists.txt @@ -8,6 +8,7 @@ atlas_subdir( TrigInDetAnalysisExample ) # Declare the package's dependencies: atlas_depends_on_subdirs( PUBLIC Event/EventInfo + Event/xAOD/xAODEventInfo Generators/GeneratorObjects InnerDetector/InDetConditions/InDetBeamSpotService PhysicsAnalysis/TruthParticleID/McParticleEvent diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/Analysis_Tier0.h b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/Analysis_Tier0.h index 0bba597d1db00eca6d95a399e5a55deff41806cd..41bd5cdf91c5a79d4be00242207d500659d75ff5 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/Analysis_Tier0.h +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/Analysis_Tier0.h @@ -13,6 +13,8 @@ #include "TrigInDetAnalysis/TrackAnalysis.h" #include "TrigInDetAnalysis/TIDDirectory.h" +#include "TrigInDetAnalysisExample/VtxAnalysis.h" + class Analysis_Tier0 : public TrackAnalysis { public: @@ -25,6 +27,10 @@ class Analysis_Tier0 : public TrackAnalysis { const std::vector<TIDA::Track*>& testTracks, TrackAssociator* associator); + + virtual void execute_vtx(const std::vector<TIDA::Vertex*>& vtx0, + const std::vector<TIDA::Vertex*>& vtx1 ); + virtual void finalise(); void setvertices(int numvtx) {m_nVtx = numvtx;} @@ -151,6 +157,8 @@ class Analysis_Tier0 : public TrackAnalysis { bool m_debug; + VtxAnalysis* m_vtxanal; + }; diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/T_AnalysisConfig_Tier0.h b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/T_AnalysisConfig_Tier0.h index 891cdf3dcca7353e6459f461158a5b0e6ead4ac7..cd0bb7c308bb79ba1ad1e2810f0691ef404d29af 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/T_AnalysisConfig_Tier0.h +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/T_AnalysisConfig_Tier0.h @@ -32,6 +32,7 @@ #include "TrigInDetAnalysisUtils/T_AnalysisConfig.h" #include "TrigInDetAnalysisExample/Analysis_Tier0.h" +#include "TrigInDetAnalysisExample/VtxAnalysis.h" #include "TrigInDetAnalysisExample/ChainString.h" #include "TTree.h" @@ -49,6 +50,7 @@ #include "EventInfo/EventInfo.h" #include "EventInfo/EventID.h" +#include "xAODEventInfo/EventInfo.h" @@ -220,10 +222,9 @@ protected: std::vector<std::string> configuredChains = (*(m_tdt))->getListOfTriggers("L2_.*, EF_.*, HLT_.*"); - if(m_provider->msg().level() <= MSG::VERBOSE) { + if(m_provider->msg().level() <= MSG::INFO) { for ( unsigned i=0 ; i<configuredChains.size() ; i++ ) { - if( m_provider->msg().level() <= MSG::VERBOSE) - m_provider->msg(MSG::VERBOSE) << "Chain " << configuredChains[i] << endreq; + m_provider->msg(MSG::INFO) << "Chain " << configuredChains[i] << endreq; } } @@ -266,6 +267,7 @@ protected: if ( chainName.extra()!="" ) selectChains[iselected] += ":index="+chainName.extra(); if ( chainName.element()!="" ) selectChains[iselected] += ":te="+chainName.element(); if ( chainName.roi()!="" ) selectChains[iselected] += ":roi="+chainName.roi(); + if ( chainName.vtx()!="" ) selectChains[iselected] += ":vtx="+chainName.vtx(); if ( !chainName.passed() ) selectChains[iselected] += ";DTE"; /// replace wildcard with actual matching chains ... @@ -326,7 +328,11 @@ protected: m_event->clear(); /// (obviously) get the event info +#ifndef XAODTRACKING_TRACKPARTICLE_H const EventInfo* pEventInfo; +#else + const xAOD::EventInfo* pEventInfo; +#endif unsigned run_number = 0; unsigned event_number = 0; unsigned lumi_block = 0; @@ -337,12 +343,22 @@ protected: if ( m_provider->evtStore()->retrieve(pEventInfo).isFailure() ) { m_provider->msg(MSG::WARNING) << "Failed to get EventInfo " << endreq; } else { + +#ifndef XAODTRACKING_TRACKPARTICLE_H run_number = pEventInfo->event_ID()->run_number(); event_number = pEventInfo->event_ID()->event_number(); lumi_block = pEventInfo->event_ID()->lumi_block(); time_stamp = pEventInfo->event_ID()->time_stamp(); bunch_crossing_id = pEventInfo->event_ID()->bunch_crossing_id(); mu_val = pEventInfo->averageInteractionsPerCrossing(); +#else + run_number = pEventInfo->runNumber(); + event_number = pEventInfo->eventNumber(); + lumi_block = pEventInfo->lumiBlock(); + time_stamp = pEventInfo->timeStamp(); + bunch_crossing_id = pEventInfo->bcid(); + mu_val = pEventInfo->averageInteractionsPerCrossing(); +#endif } if(m_provider->msg().level() <= MSG::VERBOSE){ @@ -373,31 +389,36 @@ protected: bool analyse = false; + // Check HLTResult + for ( unsigned ichain=0 ; ichain<m_chainNames.size() ; ichain++ ) { const std::string& chainname = m_chainNames[ichain].head(); //Only for trigger chains if ( chainname.find("L2") == std::string::npos && - chainname.find("EF") == std::string::npos && - chainname.find("HLT") == std::string::npos ) continue; - + chainname.find("EF") == std::string::npos && + chainname.find("HLT") == std::string::npos ) continue; + if ( m_provider->msg().level() <= MSG::DEBUG ) { m_provider->msg(MSG::DEBUG) << "Chain " << chainname << "\tpass " << (*m_tdt)->isPassed(chainname) << "\tpres " << (*m_tdt)->getPrescale(chainname) << endreq; } - + if ( (*(m_tdt))->isPassed(chainname) || (*(m_tdt))->getPrescale(chainname) ) analyse = true; - + } first = false; - - + if ( (*m_tdt)->ExperimentalAndExpertMethods()->isHLTTruncated() ) { + m_provider->msg(MSG::WARNING) << "HLTResult truncated, skipping event" << endreq; + return; + } + if ( !this->m_keepAllEvents && !analyse ) { - m_provider->msg(MSG::VERBOSE) << "No chains passed unprescaled - not processing this event" << endreq; + m_provider->msg(MSG::INFO) << "No chains passed unprescaled - not processing this event" << endreq; if(m_provider->msg().level() <= MSG::VERBOSE) m_provider->msg(MSG::VERBOSE) << "No chains passed unprescaled - not processing this event" << endreq; return; @@ -431,6 +452,10 @@ protected: /// get the offline vertices into our structure std::vector<TIDA::Vertex> vertices; + std::vector<TIDA::Vertex> vertices_rec; + + +#ifndef XAODTRACKING_TRACKPARTICLE_H const VxContainer* primaryVtxCollection; @@ -445,18 +470,56 @@ protected: for ( ; vtxitr != primaryVtxCollection->end(); ++vtxitr) { if ( (*vtxitr)->vxTrackAtVertex()->size()>0 ) { vertices.push_back( TIDA::Vertex( (*vtxitr)->recVertex().position().x(), - (*vtxitr)->recVertex().position().y(), - (*vtxitr)->recVertex().position().z(), - 0,0,0, - (*vtxitr)->vxTrackAtVertex()->size() ) ); + (*vtxitr)->recVertex().position().y(), + (*vtxitr)->recVertex().position().z(), + 0,0,0, + (*vtxitr)->vxTrackAtVertex()->size() ) ); } } } - + // filter_vertex.setVertex(vertices); } } +#else + + //std::vector<TIDA::Vertex> vertices; + + m_provider->msg(MSG::INFO) << "fetching AOD Primary vertex container" << endreq; + + const xAOD::VertexContainer* xaodVtxCollection = 0; + + if ( m_provider->evtStore()->retrieve( xaodVtxCollection, "PrimaryVertices" ).isFailure()) { + m_provider->msg(MSG::WARNING) << "xAOD Primary vertex container not found with key " << "PrimaryVertices" << endreq; + } + + if ( xaodVtxCollection!=0 ) { + + m_provider->msg(MSG::INFO) << "xAOD Primary vertex container " << xaodVtxCollection->size() << " entries" << endreq; + + xAOD::VertexContainer::const_iterator vtxitr = xaodVtxCollection->begin(); + for ( ; vtxitr != xaodVtxCollection->end(); vtxitr++ ) { + if ( (*vtxitr)->nTrackParticles()>0 ) { + vertices.push_back( TIDA::Vertex( (*vtxitr)->x(), + (*vtxitr)->y(), + (*vtxitr)->z(), + /// variances + (*vtxitr)->covariancePosition()(Trk::x,Trk::x), + (*vtxitr)->covariancePosition()(Trk::y,Trk::y), + (*vtxitr)->covariancePosition()(Trk::z,Trk::z), + (*vtxitr)->nTrackParticles(), + /// quality + (*vtxitr)->chiSquared(), + (*vtxitr)->numberDoF() ) ); + } + } + } + + +#endif + + // std::cout << "here " << __LINE__ << std::endl; /// add the truth particles if needed @@ -506,8 +569,9 @@ protected: // std::string& chainname = chains[ichain]; const std::string& chainname = m_chainNames[ichain].head(); + const std::string& key = m_chainNames[ichain].tail(); + const std::string& vtx_name = m_chainNames[ichain].vtx(); - const std::string& key = m_chainNames[ichain].tail(); unsigned _decisiontype = TrigDefs::Physics; unsigned decisiontype; @@ -581,8 +645,8 @@ protected: // std::vector< Trig::Feature<TrigRoiDescriptor> > initRois = c->get<TrigRoiDescriptor>("forID", TrigDefs::alsoDeactivateTEs); std::vector< Trig::Feature<TrigRoiDescriptor> > initRois; - - std::string roi_key = m_chainNames[ichain].roi(); + + std::string roi_key = m_chainNames[ichain].roi(); if ( roi_key!="" ) { initRois = c->get<TrigRoiDescriptor>(roi_key, decisiontype ); @@ -689,12 +753,62 @@ protected: if ( roiInfo ) delete roiInfo; + /// get vertex information + + /// now also add xAOD vertices + + if ( vtx_name!="" ) { + + m_provider->msg(MSG::INFO) << "\tFetch xAOD::VertexContainer for chain " << chainName << " with key " << vtx_name << endreq; + + std::vector< Trig::Feature<xAOD::VertexContainer> > xaodtrigvertices = c->get<xAOD::VertexContainer>(vtx_name); + + if ( xaodtrigvertices.empty() ) { + m_provider->msg(MSG::WARNING) << "\tNo xAOD::VertexContainer for chain " << chainName << " for key " << vtx_name << endreq; + } + else { + + m_provider->msg(MSG::INFO) << "\txAOD::VertexContainer found with size " << xaodtrigvertices.size() << "\t" << vtx_name << endreq; + + for ( unsigned iv=0 ; iv<xaodtrigvertices.size() ; iv++ ) { + + const xAOD::VertexContainer* vert = xaodtrigvertices[iv].cptr(); + + m_provider->msg(MSG::INFO) << "\t" << iv << " xAOD VxContainer for " << chainName << " " << vert << " key " << vtx_name << endreq; + + xAOD::VertexContainer::const_iterator vtxitr = vert->begin(); + + for ( ; vtxitr != vert->end(); ++vtxitr) { + if ( (*vtxitr)->nTrackParticles()>0 ) { + // vertices_rec.push_back( TIDA::Vertex( (*vtxitr)->x(), + chain.back().addVertex( TIDA::Vertex( (*vtxitr)->x(), + (*vtxitr)->y(), + (*vtxitr)->z(), + /// variances + (*vtxitr)->covariancePosition()(Trk::x,Trk::x), + (*vtxitr)->covariancePosition()(Trk::y,Trk::y), + (*vtxitr)->covariancePosition()(Trk::z,Trk::z), + (*vtxitr)->nTrackParticles(), + /// quality + (*vtxitr)->chiSquared(), + (*vtxitr)->numberDoF() ) ); + } + } + } + + } + + } /// retrieve online vertices + } if(m_provider->msg().level() <= MSG::VERBOSE) { m_provider->msg(MSG::VERBOSE) << "event: " << *m_event << endreq; } + + /// now loop pver the rois (again) + for ( unsigned iroi=0 ; iroi<chain.size() ; iroi++ ) { m_selectorRef->clear(); @@ -957,13 +1071,26 @@ protected: m_associator->match( ref_tracks, test_tracks ); _analysis->execute( ref_tracks, test_tracks, m_associator ); + + if ( vtx_name!="" ) { + /// get vertices for this roi - have to copy to a vector<Vertex*> + std::vector<TIDA::Vertex> vr = chain.rois().at(iroi).vertices(); + std::vector<TIDA::Vertex*> vtx_rec; + for ( unsigned iv=0 ; iv<vr.size() ; iv++ ) vtx_rec.push_back( &vr[iv] ); + + std::vector<TIDA::Vertex*> vtx; + for ( unsigned iv=0 ; iv<vertices.size() ; iv++ ) vtx.push_back( &vertices[iv] ); + + _analysis->execute_vtx( vtx, vtx_rec ); + } + } if ( _analysis->debug() ) { m_provider->msg(MSG::INFO) << "Missing track for " << m_chainNames[ichain] - << "\trun " << run_number - << "\tevent " << event_number - << "\tlb " << lumi_block << endreq; + << "\trun " << run_number + << "\tevent " << event_number + << "\tlb " << lumi_block << endreq; } } @@ -975,6 +1102,7 @@ protected: } + virtual void book() { if(m_provider->msg().level() <= MSG::VERBOSE) @@ -1053,6 +1181,7 @@ protected: if ( chainName.extra()!="" ) selectChains[iselected] += ":"+chainName.extra(); if ( chainName.element()!="" ) selectChains[iselected] += ":"+chainName.element(); if ( chainName.roi()!="" ) selectChains[iselected] += ":"+chainName.roi(); + if ( chainName.vtx()!="" ) selectChains[iselected] += ":"+chainName.vtx(); if ( !chainName.passed() ) selectChains[iselected] += ";DTE"; /// replace wildcard with actual matching chains ... diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/VtxAnalysis.h b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/VtxAnalysis.h new file mode 100644 index 0000000000000000000000000000000000000000..7a8de9902b43a4dd16bb6ca65e70de0d3e32684a --- /dev/null +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/TrigInDetAnalysisExample/VtxAnalysis.h @@ -0,0 +1,112 @@ +// emacs: this is -*- c++ -*- +// +// @file VtxAnalysis.h +// +// +// +// Copyright (C) 2015 M.Sutton (sutt@cern.ch) +// +// $Id: VtxAnalysis.h, v0.0 Sun 9 Aug 2015 00:02:23 CEST sutt $ + + +#ifndef VTXANALYSIS_H +#define VTXANALYSIS_H + +#include <iostream> +// #include <map> +#include <vector> + +#include "TrigInDetAnalysis/VertexAnalysis.h" +#include "TrigInDetAnalysis/TIDDirectory.h" + +#include "TH1F.h" +#include "TProfile.h" + +class VtxAnalysis : public VertexAnalysis { + +public: + + VtxAnalysis( const std::string& n ); + + virtual ~VtxAnalysis() { if ( mdir ) delete mdir; } + + void initialise(); + + void execute(const std::vector<TIDA::Vertex*>& vtx0, + const std::vector<TIDA::Vertex*>& vtx1 ); + + void finalise(); + + void addHistogram( TH1* h ) { + // std::string name = h->GetName(); + // m_histos.insert( std::map<std::string, TObject*>::value_type( name, h) ); + m_histos.push_back( h ); + } + + + void addHistogram( TProfile* h ) { + // std::string name = h->GetName(); + // m_histos.insert( std::map<std::string, TObject*>::value_type( name, h) ); + m_profs.push_back( h ); + } + + // void addHistogram( TProfile* h ) { + // std::string name = h->GetName(); + // m_effhistos.insert( std::map<std::string, TProfile*>::value_type( name, h) ); + // } + + std::vector<TH1*> objects() { return m_histos; } + std::vector<TProfile*> profs() { return m_profs; } + +private: + + // std::map<std::string, TObject*> m_histos; + std::vector<TH1*> m_histos; + std::vector<TProfile*> m_profs; + // std::map<std::string, TProfile*> m_effhistos; + +private: + + bool m_initialised; + + TIDDirectory* mdir; + + TH1F* hnvtx; + TH1F* hzed; + TH1F* hntrax; + + TH1F* hnvtx_rec; + TH1F* hzed_rec; + TH1F* hntrax_rec; + + TH1F* hzed_res; + + TProfile* rdz_vs_zed; + TProfile* rdz_vs_ntrax; + TProfile* rdz_vs_nvtx; + TProfile* rdz_vs_mu; + + TProfile* eff_zed; + TProfile* eff_ntrax; + TProfile* eff_nvtx; + TProfile* eff_mu; + +}; + + +inline std::ostream& operator<<( std::ostream& s, const VtxAnalysis& ) { + return s; +} + + +#endif // VTXANALYSIS_H + + + + + + + + + + diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/cmt/requirements b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/cmt/requirements index ee57b14403db5ce18d781e2f33edf009d1007178..d79e735f7103f37925d5fedb209e586dac13d0e8 100755 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/cmt/requirements +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/cmt/requirements @@ -1,6 +1,5 @@ package TrigInDetAnalysisExample - # ============================================================================================ public @@ -29,6 +28,7 @@ use tauEvent tauEvent-* Reconstruction use AtlasHepMC AtlasHepMC-* External use EventInfo EventInfo-* Event +use xAODEventInfo xAODEventInfo-* Event/xAOD use GeneratorObjects GeneratorObjects-* Generators use McParticleEvent McParticleEvent-* PhysicsAnalysis/TruthParticleID diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx index 7e9e7199475ec3839d51f159da27c8110fb22ed6..243a32539ce7ce11f382e7e0e7ddab6680663514 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/AnalysisConfig_Ntuple.cxx @@ -22,6 +22,8 @@ #include "EventInfo/EventInfo.h" #include "EventInfo/EventID.h" +#include "xAODEventInfo/EventInfo.h" + #include "TrigInDetAnalysis/TIDDirectory.h" #include "TrigInDetAnalysisUtils/TIDARoiDescriptorBuilder.h" @@ -194,9 +196,9 @@ void AnalysisConfig_Ntuple::loop() { std::vector<std::string> configuredChains = (*m_tdt)->getListOfTriggers("L2_.*, EF_.*, HLT_.*"); - m_provider->msg(MSG::DEBUG) << "[91;1m" << configuredChains.size() << " Configured Chains" << "[m" << endreq; + m_provider->msg(MSG::INFO) << "[91;1m" << configuredChains.size() << " Configured Chains" << "[m" << endreq; for ( unsigned i=0 ; i<configuredChains.size() ; i++ ) { - m_provider->msg(MSG::DEBUG) << "[91;1m" << "Chain " << configuredChains[i] << " (ACN)[m" << endreq; + m_provider->msg(MSG::INFO) << "[91;1m" << "Chain " << configuredChains[i] << " (ACN)[m" << endreq; configuredHLTChains.insert( configuredChains[i] ); } @@ -292,7 +294,12 @@ void AnalysisConfig_Ntuple::loop() { m_event->clear(); +#if 0 const EventInfo* pEventInfo = 0; +#else + const xAOD::EventInfo* pEventInfo = 0; +#endif + unsigned run_number = 0; unsigned event_number = 0; @@ -306,12 +313,21 @@ void AnalysisConfig_Ntuple::loop() { m_provider->msg(MSG::DEBUG) << "Failed to get EventInfo " << endreq; } else { +#if 0 run_number = pEventInfo->event_ID()->run_number(); event_number = pEventInfo->event_ID()->event_number(); lumi_block = pEventInfo->event_ID()->lumi_block(); time_stamp = pEventInfo->event_ID()->time_stamp(); bunch_crossing_id = pEventInfo->event_ID()->bunch_crossing_id(); mu_val = pEventInfo->averageInteractionsPerCrossing(); +#else + run_number = pEventInfo->runNumber(); + event_number = pEventInfo->eventNumber(); + lumi_block = pEventInfo->lumiBlock(); + time_stamp = pEventInfo->timeStamp(); + bunch_crossing_id = pEventInfo->bcid(); + mu_val = pEventInfo->averageInteractionsPerCrossing(); +#endif } m_provider->msg(MSG::INFO) << "run " << run_number @@ -350,6 +366,8 @@ void AnalysisConfig_Ntuple::loop() { << endreq; + + std::vector<std::string> _conf = (*m_tdt)->getListOfTriggers("HLT_.*"); m_provider->msg(MSG::INFO) << endreq; @@ -359,8 +377,8 @@ void AnalysisConfig_Ntuple::loop() { for ( unsigned ic=0 ; ic<_conf.size() ; ic++ ) { bool p = (*m_tdt)->isPassed( _conf[ic] ); - if ( p ) m_provider->msg(MSG::INFO) << "[91;1m" << " Configured Chain " << _conf[ic] << " " << p << "[m" << endreq; - else m_provider->msg(MSG::INFO) << " Configured Chain " << _conf[ic] << " " << p << endreq; + if ( p ) m_provider->msg(MSG::INFO) << "[91;1m" << " Configured Chain " << _conf[ic] << " " << p << "\tpassed <<<<" << "[m" << endreq; + else m_provider->msg(MSG::INFO) << " Configured Chain " << _conf[ic] << " " << p << "\t not passed" << endreq; } @@ -878,13 +896,6 @@ void AnalysisConfig_Ntuple::loop() { m_doElectrons_tightLH, m_doElectrons_mediumLH, m_doElectrons_looseLH }; for ( int ielec=0 ; ielec<7 ; ielec++ ) { - /// Fixme: not sure if this code is correct - it always adds selectorRef.tracks() - /// so presumbably only ever *one* of the m_doElectrons can be set, otherwise - /// something is messed up here - /// get electrons - // - // CK: Maybe just add a check that you don't have more than one m_doElectrons as - // as true, and throw an error if there is more than one as true? if ( ElectronTypes[ielec] ) { Nel = processElectrons( selectorRef, ielec ); /// m_event->addChain( ElectronRef[ielec] ); @@ -941,10 +952,8 @@ void AnalysisConfig_Ntuple::loop() { m_doTaus_tight_1Prong, m_doTaus_medium_1Prong, m_doTaus_loose_1Prong }; for ( int itau=0 ; itau<4 ; itau++ ) { - // CK: See comments for doElectrons section above for possible issues with the looping - // functionality here if ( TauTypes_1Prong[itau] ) { - Ntau1 = processTaus( selectorRef,false, 20000, itau ); + Ntau1 = processTaus( selectorRef, false, itau, 25000 ); m_event->addChain( TauRef_1Prong[itau] ); m_event->back().addRoi(TIDARoiDescriptor(true)); m_event->back().back().addTracks(selectorRef.tracks()); diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/Analysis_Tier0.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/Analysis_Tier0.cxx index 9e020615826919de25e3a176e8e9cf62e6ded0c2..05b02732f3b787c1804b46db2e8b581747a989c9 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/Analysis_Tier0.cxx +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/Analysis_Tier0.cxx @@ -8,10 +8,12 @@ Analysis_Tier0::Analysis_Tier0(const std::string& name, double pTCut, double etaCut, double d0Cut, double z0Cut) : - TrackAnalysis(name), m_pTCut(pTCut), m_etaCut(etaCut), m_d0Cut(d0Cut), m_z0Cut(z0Cut), m_debug(false) { ;} + TrackAnalysis(name), m_pTCut(pTCut), m_etaCut(etaCut), m_d0Cut(d0Cut), m_z0Cut(z0Cut), m_debug(false) { } void Analysis_Tier0::initialise() { + // std::cout << "Analysis_Tier0::initialise() name " << name() << std::endl; + m_debug = false; h_chain = new TH1D( "Chain", name().c_str(), 1, 0, 1 ); @@ -232,6 +234,23 @@ void Analysis_Tier0::initialise() { // addHistogram( h2d_d0vsphi ); // addHistogram( h2d_d0vsphi_rec ); + m_vtxanal = 0; + +#if 0 + /// vertex analyses if required ... + if ( name().find("vtx")!=std::string::npos || name().find("Vtx")!=std::string::npos ) { + m_vtxanal = new VtxAnalysis("VTX"); + store().insert( m_vtxanal, "VTX" ); + + /// initialise the vtx analysis + m_vtxanal->initialise(); + + /// store the historams + for ( unsigned i=0 ; i<m_vtxanal->objects().size() ; i++ ) addHistogram( m_vtxanal->objects()[i] ); + for ( unsigned i=0 ; i<m_vtxanal->profs().size() ; i++ ) addHistogram( m_vtxanal->profs()[i] ); + } +#endif + } @@ -393,8 +412,14 @@ void Analysis_Tier0::execute(const std::vector<TIDA::Track*>& referenceTracks, -void Analysis_Tier0::finalise() { +void Analysis_Tier0::execute_vtx(const std::vector<TIDA::Vertex*>& vtx0, + const std::vector<TIDA::Vertex*>& vtx1 ) { + if ( m_vtxanal ) m_vtxanal->execute( vtx0, vtx1 ); +} + +void Analysis_Tier0::finalise() { + if ( m_vtxanal ) m_vtxanal->finalise(); } diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestBase.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestBase.cxx index a83f5c7d481256965e1cbce3c942b5870c9ce082..8dc43bf2d2e9fc329417fe96899dbaa55129d351 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestBase.cxx +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestBase.cxx @@ -154,6 +154,13 @@ StatusCode TrigTestBase::book(bool newEventsBlock, bool newLumiBlock, bool newRu msg(MSG::INFO) << "TrigTestBase::book() " << gDirectory->GetName() << endreq; +#ifdef ManagedMonitorToolBase_Uses_API_201401 + bool newEventsBlock = newEventsBlockFlag(); + bool newLumiBlock = newLumiBlockFlag(); + bool newRun = newRunFlag(); +#endif + + msg(MSG::DEBUG) << "TrigTestBase::book() SUTT buildNtuple " << m_buildNtuple << "\tNewEventBlock " << newEventsBlock << "\tNewLumiBlock " << newLumiBlock @@ -428,9 +435,12 @@ StatusCode TrigTestBase::proc(bool /*endOfEventsBlock*/, bool /*endOfLumiBlock*/ #endif // StatusCode TrigTestBase::procHistograms() { +#ifdef ManagedMonitorToolBase_Uses_API_201401 + bool endOfRun = endOfRunFlag(); +#endif msg(MSG::INFO) << " ----- enter proc() ----- " << endreq; - if ( m_initialisePerRun && endOfRun) { + if ( m_initialisePerRun && endOfRun ) { for ( unsigned i=0 ; i<m_sequences.size() ; i++ ) m_sequences[i]->finalize(); m_fileopen = false; } diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestMonToolAC.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestMonToolAC.cxx index 16084873143520303dc9fd3a8ac7448b1bed958f..9e3e7c1c78164b56fc7c863f3a7772b8f1e09a14 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestMonToolAC.cxx +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestMonToolAC.cxx @@ -153,6 +153,11 @@ StatusCode TrigTestMonToolAC::book(bool newEventsBlock, bool newLumiBlock, bool msg(MSG::INFO) << "TrigTestMonToolAC::book() " << gDirectory->GetName() << endreq; +#ifdef ManagedMonitorToolBase_Uses_API_201401 + bool newEventsBlock = newEventsBlockFlag(); + bool newLumiBlock = newLumiBlockFlag(); + bool newRun = newRunFlag(); +#endif msg(MSG::DEBUG) << "TrigTestMonToolAC::book() SUTT buildNtuple " << m_buildNtuple << "\tNewEventBlock " << newEventsBlock @@ -324,6 +329,10 @@ StatusCode TrigTestMonToolAC::proc() { StatusCode TrigTestMonToolAC::proc(bool /* endOfEventsBlock*/, bool /* endOfLumiBlock*/, bool endOfRun) { #endif +#ifdef ManagedMonitorToolBase_Uses_API_201401 + bool endOfRun = endOfRunFlag(); +#endif + msg(MSG::DEBUG) << " ----- enter proc() ----- " << endreq; msg(MSG::DEBUG) << " ----- initialisePerRun: " << m_initialisePerRun << "\tendOfRun: " << endOfRun << " -----" << endreq; diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestPhysValMon.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestPhysValMon.cxx index 01eec2a770558ba5abb122af3f2939341c2fb40a..a9789b5549b7d9268fff79995e77ee1ddf4b20e7 100644 --- a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestPhysValMon.cxx +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/TrigTestPhysValMon.cxx @@ -51,12 +51,14 @@ StatusCode TrigTestPhysValMon::bookHistograms(bool newEventsBlock, bool newLumiB ATH_MSG_DEBUG("TrigTestPhysValMon::bookHistograms() " << gDirectory->GetName()); - ATH_MSG_INFO("TrigTestPhysValMon::bookHistograms() " - << "\tbuildNtuple " << m_buildNtuple - << "\tNewEventBlock " << newEventsBlock - << "\tNewLumiBlock " << newLumiBlock - << "\tNewRun " << newRun); + + ATH_MSG_INFO("TrigTestPhysValMon::bookHistograms()"); + // << "\tbuildNtuple " << m_buildNtuple + // << "\tNewEventBlock " << newEventsBlock + // << "\tNewLumiBlock " << newLumiBlock + // << "\tNewRun " << newRun); + #ifdef ManagedMonitorToolBase_Uses_API_201401 StatusCode sc = TrigTestBase::book(); #else diff --git a/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/VtxAnalysis.cxx b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/VtxAnalysis.cxx new file mode 100644 index 0000000000000000000000000000000000000000..bdb82ff5727f3e7b98026d5678cce4fd2abad839 --- /dev/null +++ b/Trigger/TrigAnalysis/TrigInDetAnalysisExample/src/VtxAnalysis.cxx @@ -0,0 +1,150 @@ +// +// @file VtxAnalysis.cxx +// +// +// @author M.Sutton +// +// Copyright (C) 2015 M.Sutton (sutt@cern.ch) +// +// $Id: VtxAnalysis.cxx, v0.0 Sun 9 Aug 2015 21:53:46 CEST sutt $ + + +#include "TrigInDetAnalysisExample/VtxAnalysis.h" + +#include "TrigInDetAnalysisUtils/VertexMatcher.h" + + +VtxAnalysis::VtxAnalysis( const std::string& n ) : VertexAnalysis( n ), m_initialised(false), mdir(0) { } + + +void VtxAnalysis::initialise() { + + m_initialised = true; + + // std::cout << "VtxAnalysis::initialise() " << name() << std::endl; + + + mdir = new TIDDirectory(name()); + mdir->push(); + + hnvtx = new TH1F( "nvtx", ";number of vertices", 100, -0.5, 100.5 ); + hzed = new TH1F( "zed", ";vtx z [mm]", 200, -300, 300 ); + hntrax = new TH1F( "ntrax", ";number of tracks", 201, -0.5, 200.5 ); + + addHistogram( hnvtx ); + addHistogram( hzed ); + addHistogram( hntrax ); + + + hnvtx_rec = new TH1F( "nvtx_rec", ";number of vertices", 100, -0.5, 100.5 ); + hzed_rec = new TH1F( "zed_rec", ";vtx z [mm]", 200, -300, 300 ); + hntrax_rec = new TH1F( "ntrax_rec", ";number of tracks", 201, -0.5, 200.5 ); + + addHistogram( hnvtx_rec ); + addHistogram( hzed_rec ); + addHistogram( hntrax_rec ); + + hzed_res = new TH1F( "zed_res", "Delta z [mm]", 400, -10, 10 ); + + addHistogram( hzed_res ); + + rdz_vs_zed = new TProfile( "rdz_vs_zed", "rdz_vs_zed; vtx z [mm];z residual [mm]", 100, -300, 300 ); + rdz_vs_ntrax = new TProfile( "rdz_vs_ntrax", "rdz_vs_ntrax;number of tracks;z residual [mm]", 200, -0.5, 200.5 ); + rdz_vs_nvtx = new TProfile( "rdz_vs_nvtx", "rdz_vs_nvtx;number of vertices;z residual [mm]", 51, -0.125, 50.125 ); + + addHistogram( rdz_vs_zed ); + addHistogram( rdz_vs_ntrax ); + addHistogram( rdz_vs_nvtx ); + + // rdz_vs_mu = new TProfile( "rdz_vs_mu", 30, 0, 30, 400, -20, 20 ); + + eff_zed = new TProfile( "zed_eff", "zed_eff;efficiency [%];offline vtx z [mm]", 200, -300, 300 ); + eff_ntrax = new TProfile( "ntrax_eff", "ntrax_eff;number of tracks;efficiency [%]", 201, -0.5, 200.5 ); + eff_nvtx = new TProfile( "nvtx_eff", "nvtx_eff;number of vertices;efficiency [%]", 100, -0.5, 100.5 ); + // eff_mu = new Efficiency( hmu, "mu_eff" ); + + addHistogram( eff_zed ); + addHistogram( eff_ntrax ); + addHistogram( eff_nvtx ); + + mdir->pop(); + +} + + +void VtxAnalysis::execute( const std::vector<TIDA::Vertex*>& vtx0, + const std::vector<TIDA::Vertex*>& vtx1 ) { + + + if ( !m_initialised ) return; + + // if ( vtx1.size()<2 ) return; + +#if 1 + std::cout << "VtxAnalysis::execute() " << name() + << "\tvtx0.size() " << vtx0.size() + << "\tvtx1.size() " << vtx1.size() + << std::endl; +#endif + + + VertexMatcher m("vtx_matcher", 10 ); + + m.match( vtx0, vtx1 ); + + hnvtx->Fill( vtx0.size() ); + hnvtx_rec->Fill( vtx1.size() ); + + // for ( unsigned i=0 ; i<vtx0.size() ; i++ ) { + for ( unsigned i=0 ; i<vtx0.size() ; i++ ) { + + if ( i>0 ) break; + + std::cout << i << "\tref z " << vtx0[i]->z(); + + hzed->Fill( vtx0[i]->z() ); + hntrax->Fill( vtx0[i]->Ntracks() ); + + const TIDA::Vertex* mv = m.matched( vtx0[i] ); + + if ( mv ) { + + std::cout << "\ttest z " << mv->z() << " : delta z " << (mv->z()-vtx0[i]->z()) << std::endl; + + /// ah ha ! can fill some silly old histograms here + /// ... + + hzed_rec->Fill( mv->z() ); + hntrax_rec->Fill( mv->Ntracks() ); + + hzed_res->Fill( mv->z() - vtx0[i]->z() ); + + rdz_vs_zed->Fill( vtx0[i]->z(), mv->z() - vtx0[i]->z() ); + rdz_vs_ntrax->Fill( vtx0[i]->Ntracks(), mv->z() - vtx0[i]->z() ); + rdz_vs_nvtx->Fill( vtx0.size(), mv->z() - vtx0[i]->z() ); /// this isn't really legitimate + + eff_zed->Fill( vtx0[i]->z(), 1 ); + eff_ntrax->Fill( vtx0[i]->Ntracks(), 1 ); + eff_nvtx->Fill( vtx0.size(), 1 ); + + } + else { + std::cout << "\t" << "------" << std::endl; + + eff_zed->Fill( vtx0[i]->z(), 0 ); + eff_ntrax->Fill( vtx0[i]->Ntracks(), 0 ); + eff_nvtx->Fill( vtx0.size(), 0 ); + + } + + } + +} + + + + +void VtxAnalysis::finalise() { + std::cout << "VtxAnalysis::finalise() " << name() << std::endl; +} +