ATLAS Offline Software
Loading...
Searching...
No Matches
AnalysisConfigMT_Ntuple Class Reference

#include <AnalysisConfigMT_Ntuple.h>

Inheritance diagram for AnalysisConfigMT_Ntuple:
Collaboration diagram for AnalysisConfigMT_Ntuple:

Public Member Functions

 AnalysisConfigMT_Ntuple (const std::vector< std::string > &chainNames, const std::string &outputFileName="TrkNtuple.root", double tauEtCutOffline=0.0, int TruthPdgId=0, bool keepAllEvents_=false, int parentTruthId=0)
virtual ~AnalysisConfigMT_Ntuple ()
void set_fiducial_radius (double d)
void set_ptmin (double d)
size_t get_jets (Trig::FeatureContainer::combination_const_iterator citr, std::vector< TrackTrigObject > &objects, const std::string &key="")
 retrieve the jets from the Roi
void addTestChain (const std::string &chainName, const std::string &type, const std::string &key)
void addReferenceChain (const std::string &chainName, const std::string &type, const std::string &key)
void addSelectionChain (const std::string &chainName, const std::string &type, const std::string &key)
void addTestFilter (TrackFilter *filter)
void addReferenceFilter (TrackFilter *filter)
void addSelectionFilter (TrackFilter *filter)
virtual void initialize (AthReentrantAlgorithm *p, ToolHandle< Trig::TrigDecisionTool > *tdt)
virtual void execute ()
const std::string & name () const
const std::string testChains () const
const std::string referenceChains () const
const std::string selectionChains () const
const TrackAnalysisanalysis () const
void setMCTruth (bool b=true)
bool mcTruth () const
void setBeamX (double d)
void setBeamY (double d)
void setBeamZ (double d)
double beamX () const
double beamY () const
double beamZ () const
bool genericFlag () const
void setGenericFlag (bool b)
const std::string & releaseData () const
void keepAllEvents (bool b)
void setUseHighestPT (bool b)
bool getUseHighestPT () const
void setVtxIndex (int i)
int getVtxIndex () const
bool filterOnRoi () const
bool setFilterOnRoi (bool b)
void setRequireDecision (bool b)
bool requireDecision () const

Protected Member Functions

virtual void loop ()
virtual void book ()
 setup the analysis the analysis, retrieve the tools etc
virtual void finalize ()
 finalise the analysis - take ratios for efficiencies etc
std::pair< typename Collection::const_iterator, typename Collection::const_iterator > getCollection (const ElementLink< TrigRoiDescriptorCollection > &roi_link, const std::string &key="")
 new MT feature access
bool select (std::vector< TIDA::Vertex > &vertices, xAOD::VertexContainer::const_iterator vtx_start, xAOD::VertexContainer::const_iterator vtx_end)
bool selectTracks (TrigTrackSelector *selector, const ElementLink< TrigRoiDescriptorCollection > &roi_link, const std::string &key="")
StatusCode retrieve (Collection const *&collection, const std::string &key="")
bool selectTracksNotEmpty (TrigTrackSelector *selector, const std::string &key)
std::vector< double > getBeamspot (const std::string &key)
unsigned processElectrons (TrigTrackSelector &selectorRef, std::vector< TrackTrigObject > *elevec=0, const unsigned int selection=0, bool raw_track=false, double ETOffline=0, const std::string &containerName="ElectronAODCollection")
 select offline electrons
unsigned processMuons (TrigTrackSelector &selectorRef, const unsigned int selection=0, double ETOffline=0, const std::string &containerName="StacoMuonCollection")
 select offlinqe muons
unsigned processTaus (TrigTrackSelector &selectorRef, std::vector< TrackTrigObject > *tauvec=0, const unsigned selection=0, int requireNtracks=0, double EtCutOffline=0, const std::string &containerName="TauRecContainer")
 select offline taus

Protected Attributes

bool m_useBeamCondSvc
TIDA::Eventm_event
TFile * m_File
TTree * m_Tree
TDirectory * m_Dir
std::vector< ChainStringm_chainNames
bool m_doOffline
bool m_doVertices
bool m_doMuons
bool m_doMuonsSP
std::vector< std::string > m_muonType
std::vector< bool > m_muonIsLRT
std::vector< std::string > m_electronType
std::vector< std::string > m_rawElectrons
std::vector< bool > m_electronIsLRT
std::vector< std::string > m_tauType
std::vector< std::string > m_tauProngs
std::vector< std::string > m_vertexType
bool m_doBjets
bool m_hasTruthMap
bool m_tauEtCutOffline
std::string m_outputFileName
int m_TruthPdgId
bool m_finalised
bool m_printInfo
int m_parentTruthPdgId
AthReentrantAlgorithmm_provider
ToolHandle< Trig::TrigDecisionTool > * m_tdt
std::string m_analysisInstanceName
std::vector< std::vector< std::string > > m_types
std::vector< std::vector< std::string > > m_keys
std::string m_refChainName
std::string m_refChainKey
std::string m_testChainName
std::string m_testChainKey
std::vector< std::vector< TrackFilter * > > m_filters
TrigTrackSelectorm_selectorRef
TrigTrackSelectorm_selectorTest
TrigTrackSelectorm_selectorSel
TrackAssociatorm_associator
TrackAnalysism_analysis
bool m_mcTruth
double m_beamX
double m_beamY
double m_beamZ
int m_genericFlag
std::string m_releaseData
bool m_keepAllEvents
bool m_useHighestPT
int m_vtxIndex
bool m_filterOnRoi
bool m_requireDecision

Private Member Functions

std::set< std::string > get_configured_chains ()

Private Attributes

double m_fiducial_radius
double m_ptmin

Detailed Description

Definition at line 24 of file AnalysisConfigMT_Ntuple.h.

Constructor & Destructor Documentation

◆ AnalysisConfigMT_Ntuple()

AnalysisConfigMT_Ntuple::AnalysisConfigMT_Ntuple ( const std::vector< std::string > & chainNames,
const std::string & outputFileName = "TrkNtuple.root",
double tauEtCutOffline = 0.0,
int TruthPdgId = 0,
bool keepAllEvents_ = false,
int parentTruthId = 0 )
inline

Definition at line 35 of file AnalysisConfigMT_Ntuple.h.

36 :
37 AnalysisConfig_Ntuple( chainNames, outputFileName, tauEtCutOffline, TruthPdgId, keepAllEvents_ , parentTruthId),
39 m_ptmin(1000)
40 { }
static const std::string outputFileName
AnalysisConfig_Ntuple(const std::vector< std::string > &chainNames, const std::string &outputFileName="TrkNtuple.root", double tauEtCutOffline=0.0, int TruthPdgId=0, bool keepAllEvents=false, int parentTruthPdgId=0)

◆ ~AnalysisConfigMT_Ntuple()

virtual AnalysisConfigMT_Ntuple::~AnalysisConfigMT_Ntuple ( )
inlinevirtual

Definition at line 42 of file AnalysisConfigMT_Ntuple.h.

42{ }

Member Function Documentation

◆ addReferenceChain()

void T_AnalysisConfig< AthReentrantAlgorithm >::addReferenceChain ( const std::string & chainName,
const std::string & type,
const std::string & key )
inlineinherited

Definition at line 203 of file T_AnalysisConfig.h.

203 {
204 m_chainNames[1].push_back(chainName); m_types[1].push_back(type); m_keys[1].push_back(key);
205 }
std::vector< std::vector< std::string > > m_chainNames
std::vector< std::vector< std::string > > m_types
std::vector< std::vector< std::string > > m_keys

◆ addReferenceFilter()

void T_AnalysisConfig< AthReentrantAlgorithm >::addReferenceFilter ( TrackFilter * filter)
inlineinherited

Definition at line 212 of file T_AnalysisConfig.h.

212{ m_filters[1].push_back(filter); }
std::vector< std::vector< TrackFilter * > > m_filters

◆ addSelectionChain()

void T_AnalysisConfig< AthReentrantAlgorithm >::addSelectionChain ( const std::string & chainName,
const std::string & type,
const std::string & key )
inlineinherited

Definition at line 207 of file T_AnalysisConfig.h.

207 {
208 m_chainNames[2].push_back(chainName); m_types[2].push_back(type); m_keys[2].push_back(key);
209 }

◆ addSelectionFilter()

void T_AnalysisConfig< AthReentrantAlgorithm >::addSelectionFilter ( TrackFilter * filter)
inlineinherited

Definition at line 213 of file T_AnalysisConfig.h.

213{ m_filters[2].push_back(filter); }

◆ addTestChain()

void T_AnalysisConfig< AthReentrantAlgorithm >::addTestChain ( const std::string & chainName,
const std::string & type,
const std::string & key )
inlineinherited

Definition at line 199 of file T_AnalysisConfig.h.

199 {
200 m_chainNames[0].push_back(chainName); m_types[0].push_back(type); m_keys[0].push_back(key);
201 }

◆ addTestFilter()

void T_AnalysisConfig< AthReentrantAlgorithm >::addTestFilter ( TrackFilter * filter)
inlineinherited

Definition at line 211 of file T_AnalysisConfig.h.

211{ m_filters[0].push_back(filter); }

◆ analysis()

const TrackAnalysis * T_AnalysisConfig< AthReentrantAlgorithm >::analysis ( ) const
inlineinherited

Definition at line 258 of file T_AnalysisConfig.h.

◆ beamX()

double T_AnalysisConfig< AthReentrantAlgorithm >::beamX ( ) const
inlineinherited

Definition at line 266 of file T_AnalysisConfig.h.

◆ beamY()

double T_AnalysisConfig< AthReentrantAlgorithm >::beamY ( ) const
inlineinherited

Definition at line 267 of file T_AnalysisConfig.h.

◆ beamZ()

double T_AnalysisConfig< AthReentrantAlgorithm >::beamZ ( ) const
inlineinherited

Definition at line 268 of file T_AnalysisConfig.h.

◆ book()

void AnalysisConfig_Ntuple::book ( )
protectedvirtualinherited

setup the analysis the analysis, retrieve the tools etc

flag should be called m_fileIsNotOpen really, so is if m_fileIsNotOpen open file, if !m_fileIsNotOpen, then close file etc

save the current directory so we can return there after

create a brand new ntple

update the ntple from the file

go back to original directory

Reimplemented from T_AnalysisConfig< AthReentrantAlgorithm >.

Definition at line 188 of file AnalysisConfig_Ntuple.cxx.

188 {
189
190 m_provider->msg(MSG::INFO) << "AnalysisConfig_Ntuple::book() name " << name() << endmsg;
191
195 if ( !m_finalised ) {
196 m_provider->msg(MSG::INFO) << "AnalysisConfig_Ntuple::book() not booking " << name() << endmsg;
197 return;
198 }
199
200
201
202 // get the TriggerDecisionTool
203
204 if( m_tdt->retrieve().isFailure() ) {
205 m_provider->msg(MSG::FATAL) << " Unable to retrieve the TrigDecisionTool: Please check job options file" << endmsg;
206 // return StatusCode::FAILURE;
207 return;
208 }
209
210 m_provider->msg(MSG::INFO) << "␛[91;1m" << " Successfully retrieved the TrigDecisionTool" << "␛[m" << endmsg;
211 m_provider->msg(MSG::INFO) << "␛[91;1m" << " booking ntuple" << "␛[m" << endmsg;
212 m_provider->msg(MSG::INFO) << "␛[91;1m" << " trying to create new ntple file" << "␛[m" << endmsg;
213
215 TDirectory* dir = gDirectory;
216
217 static std::atomic<bool> first_open = true;
218
219 std::string outputFileName = m_outputFileName;
220
221 if ( genericFlag() ) {
222 static std::atomic<int> file_index = 0;
223 std::string::size_type pos = outputFileName.find(".root");
224 if ( pos != std::string::npos ) outputFileName.erase(pos, outputFileName.size());
225 char file_label[64];
226 sprintf( file_label, "-%04d.root", file_index++ );
227 outputFileName += file_label;
228 }
229
230 m_provider->msg(MSG::INFO) << "book() Writing to file " << outputFileName << endmsg;
231
232 if ( first_open || genericFlag() ) {
234 m_File = new TFile( outputFileName.c_str(), "recreate");
235
236 TTree* dataTree = new TTree("dataTree", "dataTree");
237 TString releaseData(m_releaseData.c_str());
238 dataTree->Branch( "ReleaseMetaData", "TString", &releaseData);
239 dataTree->Fill();
240 dataTree->Write("", TObject::kOverwrite);
241 delete dataTree;
242
243
244 m_Tree = new TTree("tree", "tree");
245 m_Tree->Branch( "TIDA::Event", "TIDA::Event", m_event, 6400, 1 );
246
247
248 }
249 else {
251 m_File = new TFile( outputFileName.c_str(), "update");
252 m_Tree = (TTree *)m_File->Get("tree");
253 m_Tree->SetBranchAddress( "TIDA::Event", &m_event );
254 }
255
257
258 first_open = false;
259
260
261 m_provider->msg(MSG::DEBUG) << "change directory " << name() << " " << dir->GetName() << endmsg;
262
263 // std::cout << "change directory " << name() << " " << dir->GetName() << std::endl;
265 dir->cd();
266
267 // gDirectory->pwd();
268
269 m_finalised = false; // flag we have an open file that is not yet finalised
270
271 m_provider->msg(MSG::INFO) << "AnalysisConfig_Ntuple::book() exiting" << endmsg;
272
273}
#define endmsg
ToolHandle< Trig::TrigDecisionTool > * m_tdt

◆ execute()

virtual void T_AnalysisConfig< AthReentrantAlgorithm >::execute ( )
inlinevirtualinherited

Definition at line 225 of file T_AnalysisConfig.h.

225 {
226 if ( !m_provider ) std::cerr << "ERROR T_AnalysisConfig::execute() called without initialising" << std::endl;
227 loop();
228 }

◆ filterOnRoi()

bool T_AnalysisConfig< AthReentrantAlgorithm >::filterOnRoi ( ) const
inlineinherited

Definition at line 284 of file T_AnalysisConfig.h.

◆ finalize()

void AnalysisConfig_Ntuple::finalize ( )
protectedvirtualinherited

finalise the analysis - take ratios for efficiencies etc

NB: flag this round the other way for multiple files

flag that we have finalised and closed this file

Reimplemented from T_AnalysisConfig< AthReentrantAlgorithm >.

Definition at line 279 of file AnalysisConfig_Ntuple.cxx.

279 {
280
281 // gDirectory->pwd();
282
283
285 if ( m_finalised ) {
286 m_provider->msg(MSG::INFO) << "AnalysisConfig_Ntuple::finalise() flagged, not finalising " << m_provider->name() << "\t" << m_Tree->GetEntries() << " entries" << endmsg;
287 return;
288 }
289
290 m_provider->msg(MSG::INFO) << "AnalysisConfig_Ntuple::finalise() writing " << m_provider->name() << "\t" << m_Tree->GetEntries() << " entries" << endmsg;
291
292 TDirectory* directory = gDirectory;
293
294 // std::cout << "change directory " << name() << " " << m_Dir->GetName() << std::endl;
295
296 m_provider->msg(MSG::DEBUG) << "change directory " << name() << " " << m_Dir->GetName() << endmsg;
297
298
299 m_Dir->cd();
300
301 // gDirectory->pwd();
302
303 m_Tree->Write("", TObject::kOverwrite);
304
305 // m_File->Write();
306 if ( m_File ) m_File->Close();
307
308
309 m_finalised = true;
310
311 // m_Tree "belongs" to the m_File so was (possibly) deleted on the m_File->Close();
312 // so don't delete it !
313 // delete m_Tree;
314 delete m_File;
315
316 m_Tree = 0;
317 m_File = 0;
318
319 // f.Write();
320 // f.Close();
321
322 // std::cout << "change directory " << name() << " " << directory->GetName() << std::endl;
323
324 directory->cd();
325
326 // gDirectory->pwd();
327
328}
str directory
Definition DeMoScan.py:78

◆ genericFlag()

bool T_AnalysisConfig< AthReentrantAlgorithm >::genericFlag ( ) const
inlineinherited

Definition at line 270 of file T_AnalysisConfig.h.

◆ get_configured_chains()

std::set< std::string > AnalysisConfigMT_Ntuple::get_configured_chains ( )
private

handle wildcard chain selection - but only the first time

get chain

get matching chains

replace wildcard with actual matching chains ...

if this has a cosmic chain, set the fiducial radius to be very large to allow the production vertex of the cosmic to be included

Definition at line 43 of file AnalysisConfigMT_Ntuple.cxx.

43 {
44 std::set<std::string> chains;
45 const std::vector<std::string> configuredChains = (*m_tdt)->getListOfTriggers("L2_.*, EF_.*, HLT_.*");
46
47 if (m_provider->msg().level() <= MSG::VERBOSE) {
48 m_provider->msg(MSG::VERBOSE) << "␛[91;1m" << configuredChains.size() << " Configured Chains" << "␛[m" << endmsg;
49 }
50
51 for ( unsigned i=0 ; i<configuredChains.size() ; i++ ) {
52 if (m_provider->msg().level() <= MSG::VERBOSE) {
53 m_provider->msg(MSG::VERBOSE) << "␛[91;1m" << "Chain " << configuredChains[i] << " (ACN)␛[m" << endmsg;
54 }
55 chains.insert( configuredChains[i] );
56 }
57
58 std::vector<ChainString> chainNames;
59 std::vector<ChainString>::iterator chainitr = m_chainNames.begin();
60
62 while ( chainitr!=m_chainNames.end() ) {
63
65 ChainString& chainName = (*chainitr);
66
68
69 std::vector<std::string> selectChains;
70 selectChains.clear();
71 if ( chainitr->head()=="" ) selectChains.push_back("");
72 else selectChains = (*m_tdt)->getListOfTriggers( chainName.head() );
73
74 for ( unsigned iselected=0 ; iselected<selectChains.size() ; iselected++ ) {
75
76 selectChains[iselected] = chainName.subs( selectChains[iselected] );
77
79 chainNames.push_back( ChainString(selectChains[iselected]) );
80
81 m_provider->msg(MSG::INFO) << "␛[91;1m" << "Matching chain " << selectChains[iselected] << "␛[m" << endmsg;
82
85 if ( selectChains[iselected].find("cosmic")!=std::string::npos ) m_fiducial_radius = 1e10;
86
87 }
88
89 ++chainitr;
90 }
91
92 m_chainNames = chainNames;
93 return chains;
94}
#define endmsg
std::vector< ChainString > m_chainNames
std::string subs(std::string s) const
const std::string & head() const
Definition ChainString.h:33
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138

◆ get_jets()

size_t AnalysisConfig_Ntuple::get_jets ( Trig::FeatureContainer::combination_const_iterator citr,
std::vector< TrackTrigObject > & objects,
const std::string & key = "" )
inherited

retrieve the jets from the Roi

Definition at line 134 of file AnalysisConfig_Ntuple.cxx.

135 {
136
137 objects.clear();
138
139 const std::vector< Trig::Feature<xAOD::JetContainer> > jetfeatures = citr->get<xAOD::JetContainer>( key, TrigDefs::alsoDeactivateTEs );
140
141 if ( jetfeatures.empty() ) return 0;
142
143 for ( size_t ifeature=0 ; ifeature<jetfeatures.size() ; ifeature++ ) {
144 Trig::Feature<xAOD::JetContainer> jetfeature = jetfeatures.at(ifeature);
145
146 if ( jetfeature.empty() ) continue;
147
148 const xAOD::JetContainer* jets = jetfeature.cptr();
149
150 if ( jets == 0 ) continue;
151
153
154 for ( int j=0 ; jitr!=jets->end() ; ++jitr, j++ ) {
155
156 const xAOD::Jet* ajet = (*jitr);
157
158 long unsigned jetid = (unsigned long)ajet;
159
160 TrackTrigObject jet = TrackTrigObject( ajet->eta(), ajet->phi(), ajet->pt(), 0, ajet->type(), jetid );
161
162 objects.push_back( jet );
163
164 }
165 }
166
167 return objects.size();
168
169}
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838
const T * cptr() const
explicit conversion to object
Definition Feature.h:171
bool empty() const
test method to check if the object is truly there
Definition Feature.h:197
virtual double phi() const
The azimuthal angle ( ) of the particle.
Definition Jet_v1.cxx:54
virtual double pt() const
The transverse momentum ( ) of the particle.
Definition Jet_v1.cxx:44
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition Jet_v1.cxx:49
virtual Type::ObjectType type() const
The type of the object as a simple enumeration.
Definition Jet_v1.cxx:85
Jet_v1 Jet
Definition of the current "jet version".
JetContainer_v1 JetContainer
Definition of the current "jet container version".

◆ getBeamspot()

std::vector< double > T_AnalysisConfig< AthReentrantAlgorithm >::getBeamspot ( const std::string & key)
inlineprotectedinherited

Definition at line 634 of file T_AnalysisConfig.h.

634 {
635 const Collection* collection = 0;
637
638 if ( key!="" ) {
639 if ( m_provider->evtStore()->template contains<Collection>( key ) ) {
641 if( sc.isSuccess() && collection ) {
642 m_provider->msg(MSG::DEBUG) << "SG Collection->size() " << collection->size() << " (" << key << ")" << endmsg;
643
646 if ( trackitr!=trackend ) {
647 v.resize(3);
648 v[0] = (*trackitr)->vx();
649 v[1] = (*trackitr)->vy();
650 v[2] = (*trackitr)->vz();
651 return v;
652 } // only need to look at the first track
653 }
654 }
655 }
656 return v;
657 }
StatusCode retrieve(Collection const *&collection, const std::string &key="")

◆ getCollection()

std::pair< typename Collection::const_iterator, typename Collection::const_iterator > T_AnalysisConfig< AthReentrantAlgorithm >::getCollection ( const ElementLink< TrigRoiDescriptorCollection > & roi_link,
const std::string & key = "" )
inlineprotectedinherited

new MT feature access

will need this printout for debugging the feature access, so leave this commented until it has been properly debugged, then it can be removed

will not use the te name here, but keep it on just the same for the time being, for subsequent development

Definition at line 299 of file T_AnalysisConfig.h.

300 {
301
304 // std::cout << "try " << key << "\t" << m_provider->evtStore()->template transientContains<Collection>(key) << std::endl;
305
310 size_t pos = key_collection.find("/");
311 if ( pos!=std::string::npos ) {
312 key_collection = key.substr( pos+1, key.size()-pos );
313 key_tename = key.substr( 0, pos );
314 }
315
318
320
322 const std::string* keyStr = m_provider->evtStore()->keyToString(roi_link.key(), checkCLID);
323 m_provider->msg(MSG::DEBUG) << "Requesting range over (" << key << ") associated to ROI from " << (keyStr == nullptr ? "UNKNOWN" : *keyStr) << endmsg;
324
325 itrpair = (*m_tdt)->associateToEventView( handle, roi_link );
326
327 return itrpair;
328 }

◆ getUseHighestPT()

bool T_AnalysisConfig< AthReentrantAlgorithm >::getUseHighestPT ( ) const
inlineinherited

Definition at line 279 of file T_AnalysisConfig.h.

◆ getVtxIndex()

int T_AnalysisConfig< AthReentrantAlgorithm >::getVtxIndex ( ) const
inlineinherited

Definition at line 282 of file T_AnalysisConfig.h.

◆ initialize()

virtual void T_AnalysisConfig< AthReentrantAlgorithm >::initialize ( AthReentrantAlgorithm * p,
ToolHandle< Trig::TrigDecisionTool > * tdt )
inlinevirtualinherited

Definition at line 216 of file T_AnalysisConfig.h.

216 {
217 m_provider = p;
218 m_tdt = tdt;
219 if ( m_tdt==0 ) m_analysis->initialise();
220
221 }

◆ keepAllEvents()

void T_AnalysisConfig< AthReentrantAlgorithm >::keepAllEvents ( bool b)
inlineinherited

◆ loop()

void AnalysisConfigMT_Ntuple::loop ( )
protectedvirtual

list the configured chains once

FIXME: should really have hardcoded limits encoded as const variables

use wide |eta|<5 range to allow for ITk studies also

check whether the chains have actually run, otherwise there's no point doing anything

bomb out if no chains passed and not told to keep all events

finished loop over chains

bomb out if no chains passed and not told to keep all events and found no offline objects

for Monte Carlo get the truth particles if requested to do so

AOD

anything else?

anything else?

anything else?

get (offline) reference tracks

get offline tracks

get the offline vertices into our structure

add offline Vertices to the Offline chain

add the truth particles if needed

offline object counters // std::vector<TrackTrigObject> tidaVertexTracks;

now add the offline tracks

navigate through the requested storegate TEST chains

keep this printout here, but commented for usefull debug purposes ...

get the chain, collection and TE names and track index

here we only want collections with no specified chain name, then we look in storegate for the collections directly

now retrieve any verttices for the analysis

MT Vertex access

new electron selection

hmm, if we stored the types as a map it would be more straightforward than having to stick all this in a loop

get muons

get muons

new tau selection

hmm, if we stored the types as a map it would be more straightforward than having to stick all this in a loop

use same threshold for 1 and 3 prong ??

only add a tau collection if there are actually the relevant tausCH

get the chain name

and the name of the collection (if any)

now decide whether we want all the TEs for this chain, or just those that are still active

if the chain did not pass, skip this chain completely

new MT TDT feature access

a hack to fetch back the Rois with "_probe" in the name if the standard named RoiDescriptors are not actually present for this chain ...

count of how many rois processed so far

if no rois for this chain then move along

create the analysis chain

I really, really hate range based loops ...

don't extract any additional rois if a superRoi is requested: In this case, the superRoi would be shared between the different chains

check this is not a spurious TDT match

get the tracks

useful diagnostic - leave in place ... m_provider->msg(MSG::INFO) << "TIDARoi " << *roi_tmp << "\tcollectionName: " << collectionName << endmsg;

this should never be the case, and we should only run this bit of code once the first time round the loop anyhow

fetch vertices if available ...

MT Vertex access

Reimplemented from AnalysisConfig_Ntuple.

Definition at line 97 of file AnalysisConfigMT_Ntuple.cxx.

97 {
98
99 m_provider->msg(MSG::DEBUG) << "␛[91;1m" << "AnalysisConfigMT_Ntuple::loop() for " << m_analysisInstanceName
100 << " compiled " << __DATE__ << " " << __TIME__ << "\t: " << date() << "␛[m" << endmsg;
101
102
103 bool foundOffline = false;
104
105 // get (offline) beam position
106 double xbeam = 0;
107 double ybeam = 0;
108 double zbeam = 0;
109 std::vector<double> beamline;
110
111
112 // get (online) beam position
113 double xbeam_online = 0;
114 double ybeam_online = 0;
115 double zbeam_online = 0;
116
117 std::vector<double> beamline_online;
118
119 // m_provider->msg(MSG::INFO) << " offline beam position\tx=" << xbeam << "\ty=" << ybeam << "\tz=" << zbeam << endmsg;
120 // m_provider->msg(MSG::INFO) << " online beam position\tx=" << xbeam_online << "\ty=" << ybeam_online << "\tz=" << zbeam_online << endmsg;
121
123 static const std::set<std::string> configuredHLTChains = get_configured_chains();
124
125 Filter_AcceptAll filter;
128 Filter_etaPT filterRef(5,500);
130 Filter_etaPT filter_etaPT(5.0,m_ptmin);
131 Filter_pdgIdpTeta filter_pdgIdpTeta(m_TruthPdgId,5.0,m_ptmin); // |eta|<5, pt>m_ptmin
132
133 TrackFilter* truthFilter = &filter_etaPT;
134
135 TrigTrackSelector selectorTruth( truthFilter, m_fiducial_radius, m_TruthPdgId, m_parentTruthPdgId);
136
137 TrigTrackSelector selectorRef( &filter_etaPT );
138 TrigTrackSelector selectorTest( &filter );
139
140 TIDAVertexBuilder vertexBuilder;
141
142 if ( xbeam!=0 || ybeam!=0 ) {
143 selectorTruth.setBeamline( xbeam, ybeam, zbeam );
144 selectorRef.setBeamline( xbeam, ybeam, zbeam );
145 }
146
147 if ( xbeam_online!=0 || ybeam_online!=0 ) {
148 selectorTest.setBeamline( xbeam_online, ybeam_online, zbeam_online );
149 }
150
151 selectorTruth.correctTracks( true );
152 selectorRef.correctTracks( true );
153 selectorTest.correctTracks( true );
154
155
156 // clear the ntuple TIDA::Event class
157 m_event->clear();
158
159 const xAOD::EventInfo* pEventInfo = 0;
160
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;
166 double mu_val = 0;
167
168 if ( retrieve(pEventInfo, "EventInfo").isFailure() ) {
169 m_provider->msg(MSG::DEBUG) << "Failed to get EventInfo " << endmsg;
170 }
171 else {
172 run_number = pEventInfo->runNumber();
173 event_number = pEventInfo->eventNumber();
174 lumi_block = pEventInfo->lumiBlock();
175 time_stamp = pEventInfo->timeStamp();
176 bunch_crossing_id = pEventInfo->bcid();
177 mu_val = pEventInfo->averageInteractionsPerCrossing();
178 }
179
180 m_provider->msg(MSG::DEBUG) << "run " << run_number
181 << "\tevent " << event_number
182 << "\tlb " << lumi_block << endmsg;
183
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);
189 m_event->mu(mu_val);
190
191 // build a chain group on the fly and use the reference
192 const Trig::ChainGroup* L2chain=(*m_tdt)->getChainGroup("L2_.*");
193 const Trig::ChainGroup* EFchain=(*m_tdt)->getChainGroup("EF_.*");
194 const Trig::ChainGroup* HLTchain=(*m_tdt)->getChainGroup("HLT_.*");
195
196 m_provider->msg(MSG::DEBUG) << "␛[91;1m"
197 << "L2 pass " << L2chain->isPassed() << "\t"
198 << "EF pass " << EFchain->isPassed() << "\t"
199 << "HLT pass " << HLTchain->isPassed() << "␛[m"
200 << endmsg;
201
204
205 bool analyse = false;
206
207 unsigned decisiontype = TrigDefs::Physics;
208
210
211 int passed_chains = 0;
212
213 m_provider->msg(MSG::DEBUG) << "Checking " << m_chainNames.size() << " chains" << endmsg;
214
215 if ( m_chainNames.empty() ) {
216 m_provider->msg(MSG::WARNING) << "No chains to check" << endmsg;
217 return;
218 }
219
220 for ( unsigned ichain=0 ; ichain<m_chainNames.size() ; ichain++ ) {
221
222 std::string chainName = m_chainNames[ichain].head();
223
224 // Only for trigger chains
225
226 if (chainName.find("L2") == std::string::npos &&
227 chainName.find("EF") == std::string::npos &&
228 chainName.find("HLT") == std::string::npos ) continue;
229
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"
233 << endmsg;
234 continue;
235 }
236
237 if ( m_chainNames[ichain].passed() ) decisiontype = TrigDefs::Physics;
238 else decisiontype = TrigDefs::includeFailedDecisions;
239
240 std::string roistring = "";
241 if ( m_chainNames[ichain].roi()!="" ) roistring += "\troi " + m_chainNames[ichain].roi();
242
243 bool passPhysics = (*m_tdt)->isPassed(chainName);
244
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;
249
250 if ( (*m_tdt)->isPassed(chainName, decisiontype ) || !m_chainNames[ichain].passed() ) {
251 analyse = true;
252 passed_chains++;
253 }
254
255 }
256
257
258
261 if ( !analyse && !m_keepAllEvents && !foundOffline ) {
262 m_provider->msg(MSG::DEBUG) << "No chains passed unprescaled - not processing this event: " << run_number << " " << event_number << " " << lumi_block << endmsg;
263 return;
264 }
265
266
267 m_provider->msg(MSG::DEBUG) << "Chains passed " << passed_chains << endmsg;
268
269
271
272 // const TruthParticleContainer* mcpartTES = 0;
273
274 selectorTruth.clear();
275
276 m_provider->msg(MSG::DEBUG) << "MC Truth flag " << m_mcTruth << endmsg;
277 const TrigInDetTrackTruthMap* truthMap = 0;
278
279 if ( m_mcTruth) {
280 m_provider->msg(MSG::DEBUG) << "getting Truth" << endmsg;
281 if ( retrieve(truthMap, "TrigInDetTrackTruthMap").isFailure()) {
282 m_hasTruthMap = false;
283 }
284 else {
285 m_hasTruthMap = true;
286 }
287 if (m_provider->evtStore()->contains<TruthParticleContainer>("INav4MomTruthEvent")) {
288 //ESD
289 selectTracks<TruthParticleContainer>( &selectorTruth, "INav4MomTruthEvent" );
290 }
291 else if (m_provider->evtStore()->contains<TruthParticleContainer>("SpclMC")) {
293 selectTracks<TruthParticleContainer>( &selectorTruth, "SpclMC");
294 }
295 else if (m_provider->evtStore()->contains<TruthParticleContainer>("")) {
297 selectTracks<TruthParticleContainer>( &selectorTruth, "");
298 }
299 else if (m_provider->evtStore()->contains<xAOD::TruthParticleContainer>("TruthParticles")) {
301 selectTracks<xAOD::TruthParticleContainer>( &selectorTruth, "TruthParticles" );
302 }
303 else if (m_provider->evtStore()->contains<xAOD::TruthParticleContainer>("")) {
305 selectTracks<xAOD::TruthParticleContainer>( &selectorTruth, "" );
306 }
307 else {
308 m_provider->msg(MSG::WARNING) << "Truth not found - none whatsoever!" << endmsg;
309 }
310 }
311
312
313 // clear the ntuple TIDA::Event class
314 m_event->clear();
315
317
319
320 m_provider->msg(MSG::DEBUG) << " Offline tracks " << endmsg;
321
322 selectorRef.clear();
323
324 if (m_provider->evtStore()->contains<xAOD::TrackParticleContainer>("InDetTrackParticles")) {
325 selectTracks<xAOD::TrackParticleContainer>( &selectorRef, "InDetTrackParticles" );
326 }
327 else if (m_provider->evtStore()->contains<Rec::TrackParticleContainer>("TrackParticleCandidate")) {
328 selectTracks<Rec::TrackParticleContainer>( &selectorRef, "TrackParticleCandidate" );
329 }
330 else {
331 m_provider->msg(MSG::WARNING) << " Offline tracks not found " << endmsg;
332 }
333
334
336 for ( size_t iv=0; iv<m_vertexType.size(); iv++ ) {
337
338 std::vector<TIDA::Vertex> vertices;
339
340 std::string vertexType = "PrimaryVertices";
341 std::string vertexChainname = "Vertex";
342 if ( m_vertexType[iv]!="" ) {
344 vertexChainname += ":" + vertexType;
345 }
346
347 m_provider->msg(MSG::VERBOSE) << "fetching offline AOD vertex container with key " << vertexType << endmsg;
348
349 const xAOD::VertexContainer* xaodVtxCollection = 0;
350
351 if ( retrieve( xaodVtxCollection, vertexType ).isFailure()) {
352 if (m_provider->msg().level() <= MSG::WARNING) m_provider->msg(MSG::WARNING) << "xAOD vertex container not found with key " << vertexType << endmsg;
353 }
354
355 if ( xaodVtxCollection!=0 ) {
356
357 m_provider->msg(MSG::DEBUG) << "xAOD vertex container " << vertexType << " found with " << xaodVtxCollection->size() << " entries" << endmsg;
358
359 // Vertex types in some secondary vertex collections are not properly set and are all 0,
360 // allow these vertices if primary vertices are not used
361 if ( vertexType.find("SecVtx") != std::string::npos ) {
362 vertices = vertexBuilder.select( xaodVtxCollection, &selectorRef.tracks(), true );
363 }
364 else {
365 vertices = vertexBuilder.select( xaodVtxCollection, &selectorRef.tracks() );
366 }
367 }
368
369 // now add the offline vertices
370 if ( m_doOffline || m_doVertices ) {
371 m_event->addChain( vertexChainname );
372 m_event->back().addRoi(TIDARoiDescriptor(true));
373 m_event->back().back().addVertices( vertices );
374 }
375 }
376
378
380
381 if ( m_mcTruth ) {
382 m_event->addChain( "Truth" );
383 m_event->back().addRoi(TIDARoiDescriptor(true));
384 m_event->back().back().addTracks(selectorTruth.tracks());
385 }
386
387#if 0
389 for ( unsigned i=0 ; i<vertices.size() ; i++ ) {
390 m_provider->msg(MSG::DEBUG) << "vertex " << i << " " << vertices[i] << endmsg;
391 m_event->addVertex(vertices[i]);
392 }
393#endif
394
396
397 int Noff = 0;
398 int Nmu = 0;
399 int Nel = 0;
400 int Ntau = 0;
401
403
404 if ( m_doOffline ) {
405
406 m_event->addChain( "Offline" );
407 m_event->back().addRoi(TIDARoiDescriptor(true));
408 m_event->back().back().addTracks(selectorRef.tracks());
409
410 if ( selectorRef.getBeamX()!=0 || selectorRef.getBeamY()!=0 || selectorRef.getBeamZ()!=0 ) {
411 std::vector<double> beamline_;
412 beamline_.push_back( selectorRef.getBeamX() );
413 beamline_.push_back( selectorRef.getBeamY() );
414 beamline_.push_back( selectorRef.getBeamZ() );
415 m_event->back().back().addUserData(beamline_);
416 }
417
418
419 Noff = selectorRef.tracks().size();
420
421 m_provider->msg(MSG::DEBUG) << "ref tracks.size() " << selectorRef.tracks().size() << endmsg;
422 for ( int ii=selectorRef.tracks().size() ; ii-- ; ) m_provider->msg(MSG::DEBUG) << " ref track " << ii << " " << *selectorRef.tracks()[ii] << endmsg;
423
424 }
425
427 for ( unsigned ichain=0 ; ichain<m_chainNames.size() ; ichain++ ) {
428
430 // m_provider->msg(MSG::INFO)<< "chain:\t" << m_chainNames[ichain] << endmsg;
431
433 std::string chainname = m_chainNames[ichain].head();
434 std::string collectionname = m_chainNames[ichain].tail();
435 std::string vtx_name = m_chainNames[ichain].vtx();
436
437
438 if ( chainname!="" ) continue;
439 if ( collectionname=="" ) continue;
440
441 chainname = collectionname;
442 if ( vtx_name!="" ) chainname += ":" + vtx_name;
443
444 // useful debug information - leave this here
445
448
449 selectorTest.clear();
450
451 bool found = false;
452
453 std::string collection_test = collectionname;
454 size_t pos = collectionname.find("/");
455 if ( pos!=std::string::npos ) collection_test = collectionname.substr( pos+1, collectionname.size()-pos );
456
457 if (m_provider->evtStore()->contains<Rec::TrackParticleContainer>(collection_test)) {
458 found = selectTracks<Rec::TrackParticleContainer>( &selectorTest, collectionname );
459 }
460 else if (m_provider->evtStore()->contains<xAOD::TrackParticleContainer>(collection_test)) {
461 found = selectTracks<xAOD::TrackParticleContainer>( &selectorTest, collectionname );
462 }
463 else if (m_provider->evtStore()->contains<TrigInDetTrackCollection>(collection_test)) {
464 found = selectTracks<TrigInDetTrackCollection>( &selectorTest, collectionname );
465 }
466 else if (m_provider->evtStore()->contains<TrackCollection>(collection_test)) {
467 found = selectTracks<TrackCollection>( &selectorTest, collectionname );
468 }
469 else {
470 m_provider->msg(MSG::WARNING) << "\tcollection " << collectionname << " not found" << endmsg;
471 }
472
473
475
476 std::vector<TIDA::Vertex> tidavertices;
477
478 m_provider->msg(MSG::DEBUG) << "\tFetch xAOD::VertexContainer with key " << vtx_name << endmsg;
479
480 if ( vtx_name!="" ) {
481
482 m_provider->msg(MSG::DEBUG) << "\tFetch xAOD::VertexContainer with key " << vtx_name << endmsg;
483
485
486 const xAOD::VertexContainer* xaodVtxCollection = 0;
487
488 if ( retrieve( xaodVtxCollection, vtx_name ).isFailure() ) {
489 if (m_provider->msg().level() <= MSG::WARNING) m_provider->msg(MSG::WARNING) << "xAOD vertex container not found with key " << vtx_name << endmsg;
490 }
491
492 if ( xaodVtxCollection!=0 ) {
493
494 m_provider->msg(MSG::DEBUG) << "\txAOD::VertexContainer found with size " << xaodVtxCollection->size()
495 << "\t" << vtx_name << endmsg;
496
497 // Vertex types in some secondary vertex collections are not properly set and are all 0,
498 // allow these vertices if primary vertices are not used
499 if ( vtx_name.find("SecVtx") != std::string::npos ) {
500 tidavertices = vertexBuilder.select( xaodVtxCollection, 0, true );
501 }
502 else {
503 tidavertices = vertexBuilder.select( xaodVtxCollection );
504 }
505 }
506
507 }
508
509
510 if ( found ) {
511
512 m_event->addChain( chainname );
513 m_event->back().addRoi(TIDARoiDescriptor(true));
514 if ( vtx_name!="" ) m_event->back().back().addVertices( tidavertices );
515 m_event->back().back().addTracks(selectorTest.tracks());
516
517 if ( selectorTest.getBeamX()!=0 || selectorTest.getBeamY()!=0 || selectorTest.getBeamZ()!=0 ) {
518 std::vector<double> beamline_;
519 beamline_.push_back( selectorTest.getBeamX() );
520 beamline_.push_back( selectorTest.getBeamY() );
521 beamline_.push_back( selectorTest.getBeamZ() );
522 m_event->back().back().addUserData(beamline_);
523 }
524
525 int Ntest = selectorTest.tracks().size();
526
527 m_provider->msg(MSG::DEBUG) << "collection " << collectionname << "\ttest tracks.size() " << Ntest << endmsg;
528 for ( int ii=Ntest ; ii-- ; ) m_provider->msg(MSG::DEBUG) << " test track " << ii << " " << *selectorTest.tracks()[ii] << endmsg;
529 }
530 }
531
532
533 std::string ElectronRef[7] = {
534 "",
535 "TightCB", "MediumCB", "LooseCB",
536 "TightLH", "MediumLH", "LooseLH" };
537
538
540
541 for ( size_t ielec=0 ; ielec<m_electronType.size() ; ielec++ ) {
544
545 int itype = -1;
546 for ( int it=0 ; it<7 ; it++ ) if ( m_electronType[ielec]==ElectronRef[it] ) itype = it;
547 if ( itype<0 ) continue;
548
549 std::vector<TrackTrigObject> elevec;
550
551 std::string echain = std::string("Electrons");
552 if (m_electronIsLRT[ielec]) echain = std::string("LRTElectrons");
553
554 int Nel_ = processElectrons( selectorRef, &elevec, itype, ( m_rawElectrons[ielec]=="raw" ? true : false ), 0.0, echain );
555
556 if ( Nel_ < 1 ) continue;
557
558 Nel += Nel_;
559
560 if ( m_electronType[ielec]!="" ) echain += "_" + m_electronType[ielec];
561 if ( m_rawElectrons[ielec]=="raw" ) echain += "_raw";
562
563 m_event->addChain( echain );
564 m_event->back().addRoi(TIDARoiDescriptor(true));
565 m_event->back().back().addTracks(selectorRef.tracks());
566 m_event->back().back().addObjects( elevec );
567
568 if ( selectorRef.getBeamX()!=0 || selectorRef.getBeamY()!=0 || selectorRef.getBeamZ()!=0 ) {
569 std::vector<double> beamline_;
570 beamline_.push_back( selectorRef.getBeamX() );
571 beamline_.push_back( selectorRef.getBeamY() );
572 beamline_.push_back( selectorRef.getBeamZ() );
573 m_event->back().back().addUserData(beamline_);
574 }
575
576 }
577
578
579 std::string MuonRef[5] = { "", "Tight", "Medium", "Loose", "VeryLoose" };
580
582 for ( size_t imuon=0 ; imuon<m_muonType.size() ; imuon++ ) {
583
584 m_provider->msg(MSG::DEBUG) << "fetching offline muons " << endmsg;
585
586 int muonType = -1;
587 for ( int it=0 ; it<5 ; it++ ) if ( m_muonType[imuon] == MuonRef[it] ) muonType=it;
588 if ( muonType<0 ) continue;
589
590 std::string mchain = "Muons";
591 if (m_muonIsLRT[imuon]) mchain = "MuonsLRT";
592
593 int Nmu_ = processMuons( selectorRef, muonType, 0, mchain );
594
595 if ( Nmu_ < 1 ) continue;
596
597 Nmu += Nmu_;
598
599 m_provider->msg(MSG::DEBUG) << "found " << Nmu << " offline muons " << endmsg;
600
601 if ( m_muonType[imuon]!="" ) mchain += "_" + m_muonType[imuon];
602
603 m_event->addChain(mchain);
604 m_event->back().addRoi(TIDARoiDescriptor(true));
605 m_event->back().back().addTracks(selectorRef.tracks());
606
607 if ( selectorRef.getBeamX()!=0 || selectorRef.getBeamY()!=0 || selectorRef.getBeamZ()!=0 ) {
608 std::vector<double> beamline_;
609 beamline_.push_back( selectorRef.getBeamX() );
610 beamline_.push_back( selectorRef.getBeamY() );
611 beamline_.push_back( selectorRef.getBeamZ() );
612 m_event->back().back().addUserData(beamline_);
613 }
614
615 m_provider->msg(MSG::DEBUG) << "ref muon tracks.size() " << selectorRef.tracks().size() << endmsg;
616 for ( int ii=selectorRef.tracks().size() ; ii-- ; ) m_provider->msg(MSG::DEBUG) << " ref muon track " << ii << " " << *selectorRef.tracks()[ii] << endmsg;
617 }
618
619
621 if ( m_doMuonsSP ) {
622
623 m_provider->msg(MSG::DEBUG) << "fetching offline muons " << endmsg;
624
625 int muonType = 0;
626
627 Nmu += processMuons( selectorRef, muonType );
628
629 m_provider->msg(MSG::DEBUG) << "found " << Nmu << " offline muons " << endmsg;
630
631 m_event->addChain("MuonsSP");
632 m_event->back().addRoi(TIDARoiDescriptor(true));
633 m_event->back().back().addTracks(selectorRef.tracks());
634
635 m_provider->msg(MSG::DEBUG) << "ref muon tracks.size() " << selectorRef.tracks().size() << endmsg;
636 for ( int ii=selectorRef.tracks().size() ; ii-- ; ) m_provider->msg(MSG::DEBUG) << " ref muon track " << ii << " " << *selectorRef.tracks()[ii] << endmsg;
637 }
638
639
640
642 std::string TauRef[4] = { "", "Tight", "Medium", "Loose" };
643
644
645 for ( size_t itau=0 ; itau<m_tauType.size() ; itau++ ) {
648
649 int itype = -1;
650 for ( int it=0 ; it<4 ; it++ ) if ( m_tauType[itau]==TauRef[it] ) itype = it;
651 if ( itype<0 ) continue;
652
654 int requireNtracks = 0;
655 if ( m_tauProngs[itau]=="3Prong" ) requireNtracks = 3;
656 if ( m_tauProngs[itau]=="1Prong" ) requireNtracks = 1;
657
658 std::vector<TrackTrigObject> tauvec;
659
660 int Ntau_ = processTaus( selectorRef, &tauvec, itype, requireNtracks, 20000 );
661
662 Ntau += Ntau_;
663
664 if ( Ntau_ > 0 ) {
667
668 std::string tchain = std::string("Taus");
669 if ( m_tauType[itau] != "" ) tchain += "_" + m_tauType[itau];
670 if ( m_tauProngs[itau] != "" ) tchain += "_" + m_tauProngs[itau];
671
672 m_event->addChain( tchain );
673 m_event->back().addRoi(TIDARoiDescriptor(true));
674 m_event->back().back().addTracks(selectorRef.tracks());
675 m_event->back().back().addObjects( tauvec ) ;
676
677 if ( selectorRef.getBeamX()!=0 || selectorRef.getBeamY()!=0 || selectorRef.getBeamZ()!=0 ) {
678 std::vector<double> beamline_;
679 beamline_.push_back( selectorRef.getBeamX() );
680 beamline_.push_back( selectorRef.getBeamY() );
681 beamline_.push_back( selectorRef.getBeamZ() );
682 m_event->back().back().addUserData(beamline_);
683 }
684
685 }
686 }
687
688 if ( Nmu==0 && Noff==0 && Nel==0 && Ntau==0 ) m_provider->msg(MSG::DEBUG) << "No offline objects found " << endmsg;
689 else foundOffline = true;
690
691
692 // now loop over all relevant chains to get the trigger tracks...
693
694 for ( unsigned ichain=0 ; ichain<m_chainNames.size() ; ichain++ ) {
695
696 // create chains for ntpl
697
699 const std::string& chainName = m_chainNames[ichain].head();
700
702 const std::string& collectionName = m_chainNames[ichain].tail();
703
704 if( chainName.find("L2_")==std::string::npos &&
705 chainName.find("EF_")==std::string::npos &&
706 chainName.find("HLT_")==std::string::npos ) continue;
707
708 if ( m_chainNames[ichain].passed() ) decisiontype = TrigDefs::Physics;
709 else decisiontype = TrigDefs::includeFailedDecisions;
710
711
712 m_provider->msg(MSG::DEBUG) << "chain " << chainName
713 << "\tprescale " << (*m_tdt)->getPrescale(chainName)
714 << "\tpass " << (*m_tdt)->isPassed(chainName) << " physics "
715 << " (req dec " << (*m_tdt)->isPassed(chainName, decisiontype ) << " dec type " << decisiontype << ")"
716 << endmsg;
717
720
722 if ( !(*m_tdt)->isPassed( chainName, decisiontype ) ) continue;
723
725
726
727 std::string roi_key = m_chainNames[ichain].roi();
728 std::string vtx_name = m_chainNames[ichain].vtx();
729
730
731#if 0
736
737
738 if ( roi_name!="" ) {
739
740 std::string roi_name_tmp = roi_name;
741 std::string roi_tename = "";
742
743 if ( roi_name.find("/")!=std::string::npos ) {
744 roi_name_tmp = roi_name.substr( roi_name.find("/")+1, roi_name.size()-roi_name.find("/") );
745 roi_tename = roi_name.substr( 0, roi_name.find("/") );
746 }
747
748 roist = comb->get<TrigRoiDescriptor>( roi_name_tmp, decisiontype, roi_tename );
749
750 if ( roist.size()>0 ) {
751 for ( unsigned ir=0 ; ir<roist.size() ; ir++ ) m_provider->msg(MSG::DEBUG) << "\t\tRetrieved roi " << roi_name << "\t" << *roist[ir].cptr() << endmsg;
752 }
753 else {
754 m_provider->msg(MSG::WARNING) << "\t\tRequested roi " << roi_name << " not found" << endmsg;
755 }
756
757 }
758 else {
759 roist = comb->get<TrigRoiDescriptor>("forID1");
760 if ( roist.empty() ) roist = comb->get<TrigRoiDescriptor>("forID");
761 if ( roist.empty() ) roist = comb->get<TrigRoiDescriptor>("");
762 if ( roist.empty() ) roist = comb->get<TrigRoiDescriptor>("initialRoI");
763 }
764#endif
765
766
767 unsigned feature_type = TrigDefs::lastFeatureOfType;
768
769 if ( roi_key!="" ) feature_type = TrigDefs::allFeaturesOfType;
770
771 int leg = -1;
772
773 if ( m_chainNames[ichain].element()!="" ) {
774 leg = std::atoi(m_chainNames[ichain].element().c_str());
775 }
776
777
778 std::string rgex = roi_key;
779
780 std::vector< TrigCompositeUtils::LinkInfo<TrigRoiDescriptorCollection> > rois =
781 (*m_tdt)->template features<TrigRoiDescriptorCollection>( Trig::FeatureRequestDescriptor( chainName,
782 decisiontype,
783 rgex,
784 feature_type,
785 "roi",
786 leg ) );
787
790 if ( rois.empty() ) {
791 if ( !rgex.empty() ) {
792 rgex += "_probe";
793 rois = (*m_tdt)->template features<TrigRoiDescriptorCollection>( Trig::FeatureRequestDescriptor( chainName,
794 decisiontype,
795 rgex,
796 feature_type,
797 "roi",
798 leg ) );
799 }
800 }
801
802 int iroi = 0;
803
805
806 if ( rois.size()==0 ) continue;
807
809
810 m_event->addChain( m_chainNames[ichain] );
811
812 TIDA::Chain& chain = m_event->back();
813
815 for ( const TrigCompositeUtils::LinkInfo<TrigRoiDescriptorCollection>& roi_info : rois ) {
816
817 iroi++;
818
822
823 if ( roi_key=="SuperRoi" && iroi>1 ) continue;
824
825 if ( roi_key.find("JetSuper")!=std::string::npos && iroi>1 ) continue;
826
827 const ElementLink<TrigRoiDescriptorCollection> roi_link = roi_info.link;
828
830 if ( roi_key!="" && roi_link.dataID()!=rgex ) continue;
831
832 const TrigRoiDescriptor* const* roiptr = roi_link.cptr();
833
834 if ( roiptr == 0 ) {
835 // std::cerr << "\treadback link is null DAMMIT !!!" << std::endl;
836 continue;
837 }
838
839 if (m_provider->msg().level() <= MSG::VERBOSE) {
840 m_provider->msg(MSG::VERBOSE) << " RoI descriptor for seeded chain " << chainName << " " << **roiptr << endmsg;
841 }
842
843 TIDARoiDescriptor* roi_tmp = new TIDARoiDescriptor( TIDARoiDescriptorBuilder(**roiptr) );
844
846
849
852
853 selectorTest.clear();
854
855
856 if ( chainName.find("HLT_")!=std::string::npos ) {
857 if ( selectTracks<xAOD::TrackParticleContainer>( &selectorTest, roi_link, collectionName ) );
858 else {
859 if (m_provider->msg().level() <= MSG::DEBUG) {
860 m_provider->msg(MSG::WARNING) << "\tNo track collection " << collectionName << " found" << endmsg;
861 }
862 }
863 }
864
866
867 std::vector<TIDA::Vertex> tidavertices;
868
869 if ( vtx_name!="" ) {
870
871 m_provider->msg(MSG::DEBUG) << "\tFetch xAOD::VertexContainer for chain " << chainName << " with key " << vtx_name << endmsg;
872
874
877
878 if ( vtx_itrpair.first == vtx_itrpair.second ) {
879 if ( m_provider->msg().level() <= MSG::DEBUG ) {
880 m_provider->msg(MSG::WARNING) << "\tNo xAOD::Vertex for chain " << chainName << " for key " << vtx_name << endmsg;
881 }
882 }
883 else {
884
885 m_provider->msg(MSG::DEBUG) << "\txAOD::VertexContainer found with size " << (vtx_itrpair.second - vtx_itrpair.first)
886 << "\t" << vtx_name << endmsg;
887
888 // Vertex types in some secondary vertex collections are not properly set and are all 0,
889 // allow these vertices if primary vertices are not used
890 if ( vtx_name.find("SecVtx") != std::string::npos ) {
891 tidavertices = vertexBuilder.select( vtx_itrpair.first, vtx_itrpair.second, &selectorRef.tracks(), true );
892 }
893 else {
894 tidavertices = vertexBuilder.select( vtx_itrpair.first, vtx_itrpair.second, &selectorTest.tracks() );
895 }
896 }
897 }
898
899#if 0
901 // now get the jets if they are present
902 std::vector<TrackTrigObject> jets;
903 if ( chainName.find("HLT_j")!=std::string::npos ) {
904 if ( get_jets( comb, jets ) == 0 ) m_provider->msg(MSG::WARNING) << "\tjets could not be retrieved " << endmsg;
905 }
906#endif
907
908 const std::vector<TIDA::Track*>& testTracks = selectorTest.tracks();
909 m_provider->msg(MSG::DEBUG) << "\ttest tracks.size() " << testTracks.size() << endmsg;
910 for (unsigned int ii=0; ii < testTracks.size(); ii++) {
911 m_provider->msg(MSG::DEBUG) << " test track " << ii << "for chain " << chainName + ":" + collectionName << " " << *testTracks[ii] << endmsg;
912 }
913
914
915 // only add chain if there are any rois - also add beamline position for postprocessing
916
917
918 if ( roi_tmp == 0 ) {
919 if ( testTracks.size()>0 ) m_provider->msg(MSG::WARNING) << "\ttest tracks.size() " << testTracks.size() << "found but no roi!!!" << endmsg;
920 roi_tmp = new TIDARoiDescriptor(true);
921 }
922
923 chain.addRoi( *roi_tmp );
924
925 chain.back().addTracks(testTracks);
926 chain.back().addVertices(tidavertices);
927
928#if 0
930 if ( chainName.find("HLT_j")!=std::string::npos ) chain.back().addObjects( jets );
931#endif
932
933 if ( selectorTest.getBeamX()!=0 || selectorTest.getBeamY()!=0 || selectorTest.getBeamZ()!=0 ) {
934 std::vector<double> beamline_;
935 beamline_.push_back( selectorTest.getBeamX() );
936 beamline_.push_back( selectorTest.getBeamY() );
937 beamline_.push_back( selectorTest.getBeamZ() );
938 chain.back().addUserData(beamline_);
939 }
940
941 delete roi_tmp;
942 roi_tmp = 0;
943
944 }
945
946 }
947
948#if 0
950
951 {
953
954 if ( filterOnRoi() || m_ptmin>0 ) {
955
956 TIDA::Chain* offline = 0;
957
958 std::vector<std::string> chainnames = m_event->chainnames();
959
961
962 for ( size_t ic=chainnames.size() ; ic-- ; ) {
963 if ( chainnames[ic] == "Offline" ) {
964 offline = &(m_event->chains()[ic]);
965 break;
966 }
967 }
968
969 if ( offline ) {
970
971 std::vector<TIDA::Chain>& chains = m_event->chains();
972 std::vector<TIDA::Chain>::iterator citr = chains.begin();
973
974 std::vector<std::pair<double,double> > philims;
975
976 for ( ; citr!=chains.end() ; ++citr ) {
977 if ( citr->name().find("HLT_")!=std::string::npos ) {
978 for ( size_t ir=0 ; ir<citr->size() ; ir++ ) {
979 TIDARoiDescriptor& roi = citr->rois()[ir].roi();
980 if ( roi.composite() ) {
981 for ( size_t isub=0 ; isub<roi.size() ; isub++ ) {
982 philims.push_back( std::pair<double,double>( roi[isub]->phiMinus(), roi[isub]->phiPlus() ) );
983 }
984 }
985 else philims.push_back( std::pair<double,double>( roi.phiMinus(), roi.phiPlus() ) );
986 }
987 }
988 }
989
990 remove_duplicates( philims );
991
992 for ( size_t iroi=0 ; iroi<offline->size() ; iroi++ ) {
993
994 std::vector<TIDA::Track>& tracks = offline->rois()[iroi].tracks();
995
998 // size_t Noffline = tracks.size();
999
1000 for ( std::vector<TIDA::Track>::iterator it=tracks.begin() ; it<tracks.end() ; ) {
1001 bool inc = true;
1002 if ( m_ptmin>0 ) {
1003 if ( std::fabs(it->pT())<m_ptmin ) { inc=false; tracks.erase( it ); }
1004 }
1005 if ( inc && filterOnRoi() ) {
1006 bool remove_track = true;
1007 for ( size_t isub=0 ; isub<philims.size() ; isub++ ) {
1008
1009 if ( philims[isub].first < philims[isub].second ) {
1010 if ( it->phi()>=philims[isub].first && it->phi()<=philims[isub].second ) {
1011 remove_track = false;
1012 break;
1013 }
1014 }
1015 else {
1016 if ( it->phi()>=philims[isub].first || it->phi()<=philims[isub].second ) {
1017 remove_track = false;
1018 break;
1019 }
1020 }
1021 }
1022 if ( remove_track ) { inc=false; tracks.erase( it ); }
1023 }
1024 if ( inc ) ++it;
1025 }
1026
1029 // m_provider->msg(MSG::DEBUG) << "TIDA::Roi offline track reduction: " << Noffline << " -> " << tracks.size() << endmsg;
1030
1031 }
1032
1033 }
1034
1035 }
1036 }
1037
1038#endif
1039
1040 if ( m_Tree ) m_Tree->Fill();
1041
1042}
void remove_duplicates(std::vector< T > &vec)
bool passed(DecisionID id, const DecisionIDContainer &)
checks if required decision ID is in the set of IDs in the container
Athena::TPCnvVers::Current TruthParticleContainer
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Current TrigInDetTrackCollection
Athena::TPCnvVers::Current TrigRoiDescriptor
TrigInDetTrackTruthMap
std::set< std::string > get_configured_chains()
std::vector< std::string > m_tauType
std::vector< std::string > m_muonType
size_t get_jets(Trig::FeatureContainer::combination_const_iterator citr, std::vector< TrackTrigObject > &objects, const std::string &key="")
retrieve the jets from the Roi
std::vector< std::string > m_tauProngs
std::vector< std::string > m_electronType
std::vector< std::string > m_rawElectrons
std::vector< bool > m_electronIsLRT
std::vector< bool > m_muonIsLRT
std::vector< std::string > m_vertexType
size_type size() const noexcept
Returns the number of elements in the collection.
double phiPlus() const
double phiMinus() const
bool composite() const
composite RoI methods
static std::vector< TIDA::Vertex > select(const xAOD::VertexContainer *xAODVertices, const std::vector< TIDA::Track * > *trackCollection=0, bool useType0=false, bool require_tracks=true)
std::pair< typename Collection::const_iterator, typename Collection::const_iterator > getCollection(const ElementLink< TrigRoiDescriptorCollection > &roi_link, const std::string &key="")
unsigned processElectrons(TrigTrackSelector &selectorRef, std::vector< TrackTrigObject > *elevec=0, const unsigned int selection=0, bool raw_track=false, double ETOffline=0, const std::string &containerName="ElectronAODCollection")
bool selectTracks(TrigTrackSelector *selector, const ElementLink< TrigRoiDescriptorCollection > &roi_link, const std::string &key="")
unsigned processTaus(TrigTrackSelector &selectorRef, std::vector< TrackTrigObject > *tauvec=0, const unsigned selection=0, int requireNtracks=0, double EtCutOffline=0, const std::string &containerName="TauRecContainer")
unsigned processMuons(TrigTrackSelector &selectorRef, const unsigned int selection=0, double ETOffline=0, const std::string &containerName="StacoMuonCollection")
bool isPassed(unsigned int condition=TrigDefs::Physics) const
tells if chain group passed
uint32_t lumiBlock() const
The current event's luminosity block number.
uint32_t bcid() const
The bunch crossing ID of the event.
float averageInteractionsPerCrossing() const
Average interactions per crossing for all BCIDs - for out-of-time pile-up.
uint32_t timeStamp() const
POSIX time in seconds from 1970. January 1st.
uint32_t runNumber() const
The current event's run number.
uint64_t eventNumber() const
The current event's event number.
int ir
counter of the current depth
Definition fastadd.cxx:49
std::string date()
sadly, includes a return at the end
Definition hcg.cxx:58
static const unsigned int includeFailedDecisions
Run3 synonym of alsoDeactivateTEs.
static const unsigned int lastFeatureOfType
Run 3 "enum". Only return the final feature along each route through the navigation.
static const unsigned int allFeaturesOfType
Run 3 "enum". Return all features along legs (still with type and container checks)
EventInfo_v1 EventInfo
Definition of the latest event info version.
VertexContainer_v1 VertexContainer
Definition of the current "Vertex container version".
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
TruthParticleContainer_v1 TruthParticleContainer
Declare the latest version of the truth particle container.

◆ mcTruth()

bool T_AnalysisConfig< AthReentrantAlgorithm >::mcTruth ( ) const
inlineinherited

Definition at line 261 of file T_AnalysisConfig.h.

261{ return m_mcTruth; }

◆ name()

const std::string & T_AnalysisConfig< AthReentrantAlgorithm >::name ( ) const
inlineinherited

Definition at line 235 of file T_AnalysisConfig.h.

◆ processElectrons()

unsigned T_AnalysisConfig< AthReentrantAlgorithm >::processElectrons ( TrigTrackSelector & selectorRef,
std::vector< TrackTrigObject > * elevec = 0,
const unsigned int selection = 0,
bool raw_track = false,
double ETOffline = 0,
const std::string & containerName = "ElectronAODCollection" )
inlineprotectedinherited

select offline electrons

Definition at line 703 of file T_AnalysisConfig.h.

713 {
714
715 m_provider->msg(MSG::DEBUG) << "Fetching offline electrons: " << containerName << endmsg;
716
717 selectorRef.clear();
718
719# ifdef XAODTRACKING_TRACKPARTICLE_H
721# else
723# endif
724
725
726 const Container* container = 0;
727
728 if( ! m_provider->evtStore()->template contains<Container>(containerName) ) {
729 m_provider->msg(MSG::WARNING) << "Error No Electron Container " << containerName << " !" << endmsg;
730 return 0;
731 }
732
734 if( sc.isFailure() || !container ) {
735 m_provider->msg(MSG::WARNING) << "Error retrieving container: " << containerName << " !" << endmsg;
736 return 0;
737 }
738
739 m_provider->msg(MSG::DEBUG) << "Event with " << container->size() << " Electron object(s) " << endmsg;
740
743
744 for( ; elec!=elec_end ; ++elec ){
745 //m_provider->msg(MSG::DEBUG) << " Electron " << (*elec)
746 // << ", eta " << (*elec)->eta()
747 // << ", phi " << (*elec)->phi()
748 // << ", ET " << (*elec)->pt()
749 // << ", author " << (*elec)->author()
750 // << ", trackParticle " << (*elec)->trackParticle()
751 // << ", conversion " << (*elec)->conversion()
752 // << ", mediumPP " << ((*elec)->isem(egammaPID::ElectronMediumPP)==0)
753 // << endmsg;
754
755 bool good_electron = false;
756# ifdef XAODTRACKING_TRACKPARTICLE_H
758# else
760# endif
761
762 if (good_electron) {
763 const xAOD::Electron_v1& eleduff = *(*elec);
764 long unsigned eleid = (unsigned long)(&eleduff) ;
765 TrackTrigObject eleobj = TrackTrigObject( (*elec)->eta(),
766 (*elec)->phi(),
767 (*elec)->pt(),
768 0,
769 (*elec)->type(),
770 eleid );
771
772 bool trk_added ;
774 else trk_added = selectorRef.selectTrack( (*elec)->trackParticle() );
775
776 if (trk_added) eleobj.addChild( selectorRef.tracks().back()->id() );
777 if (elevec) elevec->push_back( eleobj );
778 }
779 }
780
781 return selectorRef.tracks().size();
782 }
bool isGoodOffline(const Analysis::Electron &elec)

◆ processMuons()

unsigned T_AnalysisConfig< AthReentrantAlgorithm >::processMuons ( TrigTrackSelector & selectorRef,
const unsigned int selection = 0,
double ETOffline = 0,
const std::string & containerName = "StacoMuonCollection" )
inlineprotectedinherited

select offlinqe muons

Definition at line 789 of file T_AnalysisConfig.h.

796 {
797
798# ifdef XAODTRACKING_TRACKPARTICLE_H
800# else
802# endif
803
804 m_provider->msg(MSG::DEBUG) << " Offline muons (" << containerName << ")" << endmsg;
805
806 selectorRef.clear();
807
808 const Container* container = 0;
809
810 if( ! m_provider->evtStore()->template contains<Container>(containerName) ) {
811 m_provider->msg(MSG::WARNING) << "Error No MuonCollection" << containerName << " !" << endmsg;
812 return 0;
813 }
814
816 if( sc.isFailure() || !container ) {
817 m_provider->msg(MSG::WARNING) << "Error retrieving " << containerName << " !" << endmsg;
818 return 0;
819 }
820
821 auto muon = container->begin();
822 auto muon_end = container->end();
823
824 // std::cout << "SUTT Offline muons " << container->size() << "\t threshold " << ETOffline << std::endl;
825
826 for( ; muon!=muon_end ; ++muon ){
827# ifdef XAODTRACKING_TRACKPARTICLE_H
828 if ( TIDA::isGoodOffline(*(*muon), selection, ETOffline ) ) selectorRef.selectTrack(*((*muon)->inDetTrackParticleLink()));
829# else
830 if ( TIDA::isGoodOffline(*(*muon)) ) selectorRef.selectTrack((*muon)->inDetTrackParticle());
831# endif
832 }
833
834
835 // std::cout << "SUTT found " << selectorRef.tracks().size() << " muons for " << containerName << std::endl;
836 m_provider->msg(MSG::DEBUG) << "found " << selectorRef.tracks().size() << " muons for " << containerName << endmsg;
837
838 return selectorRef.tracks().size();
839}

◆ processTaus()

unsigned T_AnalysisConfig< AthReentrantAlgorithm >::processTaus ( TrigTrackSelector & selectorRef,
std::vector< TrackTrigObject > * tauvec = 0,
const unsigned selection = 0,
int requireNtracks = 0,
double EtCutOffline = 0,
const std::string & containerName = "TauRecContainer" )
inlineprotectedinherited

select offline taus

Definition at line 846 of file T_AnalysisConfig.h.

856 {
857
858# ifdef XAODTRACKING_TRACKPARTICLE_H
860# else
862# endif
863
864 selectorRef.clear();
865
866 const Container* container = 0;
867
868 selectorRef.clear();
869
870 m_provider->msg(MSG::DEBUG) << " Offline taus " << containerName << endmsg;
871
872 if ( !m_provider->evtStore()->template contains<Container>(containerName)) {
873 m_provider->msg(MSG::WARNING) << " Offline taus not found" << endmsg;
874 return 0;
875 }
876
878 if (sc != StatusCode::SUCCESS) {
879 m_provider->msg(MSG::WARNING) << " Offline tau retrieval not successful" << endmsg;
880 return 0;
881 }
882
885
886
887 for ( ; tau!=tau_end ; ++tau ) {
888
889# ifdef XAODTRACKING_TRACKPARTICLE_H
890 // unsigned N = (*tau)->nTracks();
891
892# ifndef XAODTAU_VERSIONS_TAUJET_V3_H
893 int N = (*tau)->nTracks();
894 // std::cout << "SUTT no tau detail " << N << "\t3prong: " << doThreeProng << std::endl;
895# else
896 int N=0;
897 (*tau)->detail( xAOD::TauJetParameters::nChargedTracks, N );
898 // std::cout << "SUTT tau detail: N " << N << "\t3prong: " << doThreeProng << std::endl;
899# endif
900
901# else
902 unsigned N = (*tau)->numTrack();
903# endif
904
905
906 bool good_tau = false;
907# ifdef XAODTRACKING_TRACKPARTICLE_H
909# else
911# endif
912
913 // std::cout << "SUTT tau ntracks: " << N << "\tgoodtau: " << good_tau << "\tpt: " << (*tau)->p4().Et() << "\t3prong: " << doThreeProng << std::endl;
914
915 if (good_tau){
916 const xAOD::TauJet_v3& duff = *(*tau);
917 long unsigned tauid = (unsigned long)(&duff) ;
918 TrackTrigObject tauobj = TrackTrigObject( (*tau)->eta(),
919 (*tau)->phi(),
920 (*tau)->pt(),
921 0,
922 (*tau)->type(),
923 tauid );
924
925 bool trk_added = false;
926
927 for ( unsigned i=N ; i-- ; ) {
928# ifdef XAODTAU_TAUTRACK_H
929
930 std::vector< ElementLink<xAOD::TrackParticleContainer> > alink = (*tau)->track(i)->trackLinks();
931
932 trk_added = false;
933
934 for ( size_t ilink=0 ; ilink<alink.size() ; ilink++ ) {
935 if ( alink[ilink].isValid() ) trk_added = selectorRef.selectTrack((*alink[ilink]));
936 }
938 // trk_added = selectorRef.selectTrack((*tau)->track(i)->track());
940# else
941 trk_added = selectorRef.selectTrack((*tau)->track(i));
942# endif
943 if ( trk_added ) tauobj.addChild( selectorRef.tracks().back()->id() );
944 }
945 if ( tauvec ) tauvec->push_back( tauobj );
946 }
947 }
948
949 return selectorRef.tracks().size();
950
951}
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition AtlasPID.h:878

◆ referenceChains()

const std::string T_AnalysisConfig< AthReentrantAlgorithm >::referenceChains ( ) const
inlineinherited

Definition at line 244 of file T_AnalysisConfig.h.

244 {
246 for(unsigned int i=0; i<m_chainNames[1].size(); i++)
247 name += (m_chainNames[1][i]+"::"+m_types[1][i]+"::"+m_keys[1][i]+" ");
248 return name;
249 }

◆ releaseData()

const std::string & T_AnalysisConfig< AthReentrantAlgorithm >::releaseData ( ) const
inlineinherited

Definition at line 273 of file T_AnalysisConfig.h.

273{ return m_releaseData; }

◆ requireDecision()

bool T_AnalysisConfig< AthReentrantAlgorithm >::requireDecision ( ) const
inlineinherited

Definition at line 288 of file T_AnalysisConfig.h.

◆ retrieve()

StatusCode T_AnalysisConfig< AthReentrantAlgorithm >::retrieve ( Collection const *& collection,
const std::string & key = "" )
inlineprotectedinherited

old implementation - leave in place until after the full validation ... return m_provider->evtStore()->retrieve( container, containerName);

commented code intentionally left for development purposes ... std::cout << "\t\t\t T_AnalysisConfig::selectTracks() - > TrackSelector" << std::endl;

Definition at line 573 of file T_AnalysisConfig.h.

573 {
576 if ( m_provider->evtStore()->template contains<Collection>( key ) ) {
578 if ( handle.isValid() ) {
581 collection = handle.cptr();
582 return StatusCode::SUCCESS;
583 }
584 }
585 return StatusCode::FAILURE;
586 }

◆ select()

bool T_AnalysisConfig< AthReentrantAlgorithm >::select ( std::vector< TIDA::Vertex > & vertices,
xAOD::VertexContainer::const_iterator vtx_start,
xAOD::VertexContainer::const_iterator vtx_end )
inlineprotectedinherited

variances

quality

Definition at line 342 of file T_AnalysisConfig.h.

344 {
345
347
348 for ( ; vtxitr!=vtx_end ; ++vtxitr ) {
349 if ( (*vtxitr)->vertexType()!=0 ) {
350 m_provider->msg(MSG::VERBOSE) << "\tvertex " << (*vtxitr)->z() << endmsg;
351
352 vertices.push_back( TIDA::Vertex( (*vtxitr)->x(),
353 (*vtxitr)->y(),
354 (*vtxitr)->z(),
356 (*vtxitr)->covariancePosition()(Trk::x,Trk::x),
357 (*vtxitr)->covariancePosition()(Trk::y,Trk::y),
358 (*vtxitr)->covariancePosition()(Trk::z,Trk::z),
359 (*vtxitr)->nTrackParticles(),
361 (*vtxitr)->chiSquared(),
362 (*vtxitr)->numberDoF() ) );
363
364 }
365 }
366
367 return true;
368 }

◆ selectionChains()

const std::string T_AnalysisConfig< AthReentrantAlgorithm >::selectionChains ( ) const
inlineinherited

Definition at line 251 of file T_AnalysisConfig.h.

251 {
253 for(unsigned int i=0; i<m_chainNames[2].size(); i++)
254 name += (m_chainNames[2][i]+"::"+m_types[2][i]+"::"+m_keys[2][i]+" ");
255 return name;
256 }

◆ selectTracks()

bool T_AnalysisConfig< AthReentrantAlgorithm >::selectTracks ( TrigTrackSelector * selector,
const ElementLink< TrigRoiDescriptorCollection > & roi_link,
const std::string & key = "" )
inlineprotectedinherited

will need this printout for debugging the feature access, so leave this commented until it has been properly debugged, then it can be removed

will not use the te name here, but keep it on just the same for the time being, for subsequent development

Definition at line 441 of file T_AnalysisConfig.h.

444 {
445
446
449 // std::cout << "try " << key << "\t" << m_provider->evtStore()->template transientContains<Collection>(key) << std::endl;
450
455 size_t pos = key_collection.find("/");
456 if ( pos!=std::string::npos ) {
457 key_collection = key.substr( pos+1, key.size()-pos );
458 key_tename = key.substr( 0, pos );
459 }
460
463
465
467 const std::string* keyStr = m_provider->evtStore()->keyToString(roi_link.key(), checkCLID);
468 m_provider->msg(MSG::DEBUG) << "Requesting range over (" << key << ") associated to ROI from " << (keyStr == nullptr ? "UNKNOWN" : *keyStr) << endmsg;
469
470 itrpair = (*m_tdt)->associateToEventView( handle, roi_link );
471
472 if ( itrpair.first != itrpair.second ) {
473 selector->selectTracks( itrpair.first, itrpair.second );
474 return true;
475 }
476 else {
477 m_provider->msg(MSG::DEBUG) << "TDT TrackFeature collection (" << key << ") is empty " << endmsg;
478 return false;
479 }
480 }

◆ selectTracksNotEmpty()

bool T_AnalysisConfig< AthReentrantAlgorithm >::selectTracksNotEmpty ( TrigTrackSelector * selector,
const std::string & key )
inlineprotectedinherited

Definition at line 608 of file T_AnalysisConfig.h.

608 {
609 const Collection* collection = nullptr;
610 if ( key.empty() ) return false;
611 if ( !m_provider->evtStore()->template contains<Collection>( key ) ) return false;
612
614
615 if ( !( sc.isSuccess() && collection ) ) return false;
616
617 m_provider->msg(MSG::DEBUG) << "SG Collection->size() " << collection->size() << " (" << key << ")" << endmsg;
618
619 // added to fix muon samples bug
620 if ( collection->size() == 0 ) {
621 m_provider->msg(MSG::WARNING) << "no particles in collection" << endmsg;
622 return false;
623 }
624
626 return true;
627 }

◆ set_fiducial_radius()

void AnalysisConfigMT_Ntuple::set_fiducial_radius ( double d)
inline

Definition at line 44 of file AnalysisConfigMT_Ntuple.h.

◆ set_ptmin()

void AnalysisConfigMT_Ntuple::set_ptmin ( double d)
inline

Definition at line 45 of file AnalysisConfigMT_Ntuple.h.

45{ m_ptmin = d; }

◆ setBeamX()

void T_AnalysisConfig< AthReentrantAlgorithm >::setBeamX ( double d)
inlineinherited

Definition at line 263 of file T_AnalysisConfig.h.

263{ m_beamX=d; }

◆ setBeamY()

void T_AnalysisConfig< AthReentrantAlgorithm >::setBeamY ( double d)
inlineinherited

Definition at line 264 of file T_AnalysisConfig.h.

264{ m_beamY=d; }

◆ setBeamZ()

void T_AnalysisConfig< AthReentrantAlgorithm >::setBeamZ ( double d)
inlineinherited

Definition at line 265 of file T_AnalysisConfig.h.

265{ m_beamZ=d; }

◆ setFilterOnRoi()

bool T_AnalysisConfig< AthReentrantAlgorithm >::setFilterOnRoi ( bool b)
inlineinherited

Definition at line 285 of file T_AnalysisConfig.h.

285{ return m_filterOnRoi=b; }

◆ setGenericFlag()

void T_AnalysisConfig< AthReentrantAlgorithm >::setGenericFlag ( bool b)
inlineinherited

Definition at line 271 of file T_AnalysisConfig.h.

271{ m_genericFlag=b; }

◆ setMCTruth()

void T_AnalysisConfig< AthReentrantAlgorithm >::setMCTruth ( bool b = true)
inlineinherited

Definition at line 260 of file T_AnalysisConfig.h.

260{ m_mcTruth=b; }

◆ setRequireDecision()

void T_AnalysisConfig< AthReentrantAlgorithm >::setRequireDecision ( bool b)
inlineinherited

Definition at line 287 of file T_AnalysisConfig.h.

◆ setUseHighestPT()

void T_AnalysisConfig< AthReentrantAlgorithm >::setUseHighestPT ( bool b)
inlineinherited

Definition at line 278 of file T_AnalysisConfig.h.

278{ m_useHighestPT=b; }

◆ setVtxIndex()

void T_AnalysisConfig< AthReentrantAlgorithm >::setVtxIndex ( int i)
inlineinherited

Definition at line 281 of file T_AnalysisConfig.h.

281{ m_vtxIndex=i; }

◆ testChains()

const std::string T_AnalysisConfig< AthReentrantAlgorithm >::testChains ( ) const
inlineinherited

Definition at line 237 of file T_AnalysisConfig.h.

237 {
239 for(unsigned int i=0; i<m_chainNames[0].size(); i++)
240 name += (m_chainNames[0][i]+"::"+m_types[0][i]+"::"+m_keys[0][i]+" ");
241 return name;
242 }

Member Data Documentation

◆ m_analysis

TrackAnalysis* T_AnalysisConfig< AthReentrantAlgorithm >::m_analysis
protectedinherited

Definition at line 986 of file T_AnalysisConfig.h.

◆ m_analysisInstanceName

std::string T_AnalysisConfig< AthReentrantAlgorithm >::m_analysisInstanceName
protectedinherited

Definition at line 965 of file T_AnalysisConfig.h.

◆ m_associator

TrackAssociator* T_AnalysisConfig< AthReentrantAlgorithm >::m_associator
protectedinherited

Definition at line 985 of file T_AnalysisConfig.h.

◆ m_beamX

double T_AnalysisConfig< AthReentrantAlgorithm >::m_beamX
protectedinherited

Definition at line 990 of file T_AnalysisConfig.h.

◆ m_beamY

double T_AnalysisConfig< AthReentrantAlgorithm >::m_beamY
protectedinherited

Definition at line 990 of file T_AnalysisConfig.h.

◆ m_beamZ

double T_AnalysisConfig< AthReentrantAlgorithm >::m_beamZ
protectedinherited

Definition at line 990 of file T_AnalysisConfig.h.

◆ m_chainNames

std::vector<ChainString> AnalysisConfig_Ntuple::m_chainNames
protectedinherited

Definition at line 166 of file AnalysisConfig_Ntuple.h.

◆ m_Dir

TDirectory* AnalysisConfig_Ntuple::m_Dir
protectedinherited

Definition at line 164 of file AnalysisConfig_Ntuple.h.

◆ m_doBjets

bool AnalysisConfig_Ntuple::m_doBjets
protectedinherited

Definition at line 185 of file AnalysisConfig_Ntuple.h.

◆ m_doMuons

bool AnalysisConfig_Ntuple::m_doMuons
protectedinherited

Definition at line 170 of file AnalysisConfig_Ntuple.h.

◆ m_doMuonsSP

bool AnalysisConfig_Ntuple::m_doMuonsSP
protectedinherited

Definition at line 171 of file AnalysisConfig_Ntuple.h.

◆ m_doOffline

bool AnalysisConfig_Ntuple::m_doOffline
protectedinherited

Definition at line 168 of file AnalysisConfig_Ntuple.h.

◆ m_doVertices

bool AnalysisConfig_Ntuple::m_doVertices
protectedinherited

Definition at line 169 of file AnalysisConfig_Ntuple.h.

◆ m_electronIsLRT

std::vector<bool> AnalysisConfig_Ntuple::m_electronIsLRT
protectedinherited

Definition at line 178 of file AnalysisConfig_Ntuple.h.

◆ m_electronType

std::vector<std::string> AnalysisConfig_Ntuple::m_electronType
protectedinherited

Definition at line 176 of file AnalysisConfig_Ntuple.h.

◆ m_event

TIDA::Event* AnalysisConfig_Ntuple::m_event
protectedinherited

Definition at line 160 of file AnalysisConfig_Ntuple.h.

◆ m_fiducial_radius

double AnalysisConfigMT_Ntuple::m_fiducial_radius
private

Definition at line 55 of file AnalysisConfigMT_Ntuple.h.

◆ m_File

TFile* AnalysisConfig_Ntuple::m_File
protectedinherited

Definition at line 162 of file AnalysisConfig_Ntuple.h.

◆ m_filterOnRoi

bool T_AnalysisConfig< AthReentrantAlgorithm >::m_filterOnRoi
protectedinherited

Definition at line 1001 of file T_AnalysisConfig.h.

◆ m_filters

std::vector< std::vector<TrackFilter*> > T_AnalysisConfig< AthReentrantAlgorithm >::m_filters
protectedinherited

Definition at line 979 of file T_AnalysisConfig.h.

◆ m_finalised

bool AnalysisConfig_Ntuple::m_finalised
protectedinherited

Definition at line 193 of file AnalysisConfig_Ntuple.h.

◆ m_genericFlag

int T_AnalysisConfig< AthReentrantAlgorithm >::m_genericFlag
protectedinherited

Definition at line 992 of file T_AnalysisConfig.h.

◆ m_hasTruthMap

bool AnalysisConfig_Ntuple::m_hasTruthMap
protectedinherited

Definition at line 186 of file AnalysisConfig_Ntuple.h.

◆ m_keepAllEvents

bool T_AnalysisConfig< AthReentrantAlgorithm >::m_keepAllEvents
protectedinherited

Definition at line 995 of file T_AnalysisConfig.h.

◆ m_keys

std::vector< std::vector<std::string> > T_AnalysisConfig< AthReentrantAlgorithm >::m_keys
protectedinherited

Definition at line 970 of file T_AnalysisConfig.h.

◆ m_mcTruth

bool T_AnalysisConfig< AthReentrantAlgorithm >::m_mcTruth
protectedinherited

Definition at line 988 of file T_AnalysisConfig.h.

◆ m_muonIsLRT

std::vector<bool> AnalysisConfig_Ntuple::m_muonIsLRT
protectedinherited

Definition at line 174 of file AnalysisConfig_Ntuple.h.

◆ m_muonType

std::vector<std::string> AnalysisConfig_Ntuple::m_muonType
protectedinherited

Definition at line 173 of file AnalysisConfig_Ntuple.h.

◆ m_outputFileName

std::string AnalysisConfig_Ntuple::m_outputFileName
protectedinherited

Definition at line 189 of file AnalysisConfig_Ntuple.h.

◆ m_parentTruthPdgId

int AnalysisConfig_Ntuple::m_parentTruthPdgId
protectedinherited

Definition at line 201 of file AnalysisConfig_Ntuple.h.

◆ m_printInfo

bool AnalysisConfig_Ntuple::m_printInfo
protectedinherited

Definition at line 197 of file AnalysisConfig_Ntuple.h.

◆ m_provider

AthReentrantAlgorithm* T_AnalysisConfig< AthReentrantAlgorithm >::m_provider
protectedinherited

Definition at line 957 of file T_AnalysisConfig.h.

◆ m_ptmin

double AnalysisConfigMT_Ntuple::m_ptmin
private

Definition at line 56 of file AnalysisConfigMT_Ntuple.h.

◆ m_rawElectrons

std::vector<std::string> AnalysisConfig_Ntuple::m_rawElectrons
protectedinherited

Definition at line 177 of file AnalysisConfig_Ntuple.h.

◆ m_refChainKey

std::string T_AnalysisConfig< AthReentrantAlgorithm >::m_refChainKey
protectedinherited

Definition at line 973 of file T_AnalysisConfig.h.

◆ m_refChainName

std::string T_AnalysisConfig< AthReentrantAlgorithm >::m_refChainName
protectedinherited

Definition at line 972 of file T_AnalysisConfig.h.

◆ m_releaseData

std::string T_AnalysisConfig< AthReentrantAlgorithm >::m_releaseData
protectedinherited

Definition at line 993 of file T_AnalysisConfig.h.

◆ m_requireDecision

bool T_AnalysisConfig< AthReentrantAlgorithm >::m_requireDecision
protectedinherited

Definition at line 1003 of file T_AnalysisConfig.h.

◆ m_selectorRef

TrigTrackSelector* T_AnalysisConfig< AthReentrantAlgorithm >::m_selectorRef
protectedinherited

Definition at line 981 of file T_AnalysisConfig.h.

◆ m_selectorSel

TrigTrackSelector* T_AnalysisConfig< AthReentrantAlgorithm >::m_selectorSel
protectedinherited

Definition at line 983 of file T_AnalysisConfig.h.

◆ m_selectorTest

TrigTrackSelector* T_AnalysisConfig< AthReentrantAlgorithm >::m_selectorTest
protectedinherited

Definition at line 982 of file T_AnalysisConfig.h.

◆ m_tauEtCutOffline

bool AnalysisConfig_Ntuple::m_tauEtCutOffline
protectedinherited

Definition at line 187 of file AnalysisConfig_Ntuple.h.

◆ m_tauProngs

std::vector<std::string> AnalysisConfig_Ntuple::m_tauProngs
protectedinherited

Definition at line 181 of file AnalysisConfig_Ntuple.h.

◆ m_tauType

std::vector<std::string> AnalysisConfig_Ntuple::m_tauType
protectedinherited

Definition at line 180 of file AnalysisConfig_Ntuple.h.

◆ m_tdt

ToolHandle<Trig::TrigDecisionTool>* T_AnalysisConfig< AthReentrantAlgorithm >::m_tdt
protectedinherited

Definition at line 959 of file T_AnalysisConfig.h.

◆ m_testChainKey

std::string T_AnalysisConfig< AthReentrantAlgorithm >::m_testChainKey
protectedinherited

Definition at line 976 of file T_AnalysisConfig.h.

◆ m_testChainName

std::string T_AnalysisConfig< AthReentrantAlgorithm >::m_testChainName
protectedinherited

Definition at line 975 of file T_AnalysisConfig.h.

◆ m_Tree

TTree* AnalysisConfig_Ntuple::m_Tree
protectedinherited

Definition at line 163 of file AnalysisConfig_Ntuple.h.

◆ m_TruthPdgId

int AnalysisConfig_Ntuple::m_TruthPdgId
protectedinherited

Definition at line 191 of file AnalysisConfig_Ntuple.h.

◆ m_types

std::vector< std::vector<std::string> > T_AnalysisConfig< AthReentrantAlgorithm >::m_types
protectedinherited

Definition at line 969 of file T_AnalysisConfig.h.

◆ m_useBeamCondSvc

bool AnalysisConfig_Ntuple::m_useBeamCondSvc
protectedinherited

Definition at line 158 of file AnalysisConfig_Ntuple.h.

◆ m_useHighestPT

bool T_AnalysisConfig< AthReentrantAlgorithm >::m_useHighestPT
protectedinherited

Definition at line 997 of file T_AnalysisConfig.h.

◆ m_vertexType

std::vector<std::string> AnalysisConfig_Ntuple::m_vertexType
protectedinherited

Definition at line 183 of file AnalysisConfig_Ntuple.h.

◆ m_vtxIndex

int T_AnalysisConfig< AthReentrantAlgorithm >::m_vtxIndex
protectedinherited

Definition at line 999 of file T_AnalysisConfig.h.


The documentation for this class was generated from the following files: