ATLAS Offline Software
Loading...
Searching...
No Matches
LVL1ResultRetriever.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7//#include <string>
9//#include "TrigSteeringEvent/TrigRoiDescriptor.h"
10
11//#include "TrigDecisionTool/ChainGroup.h"
12//#include "TrigDecisionTool/FeatureContainer.h"
13//#include "TrigDecisionTool/Feature.h"
14
17namespace JiveXML {
18
19
23 LVL1ResultRetriever::LVL1ResultRetriever(const std::string& type, const std::string& name, const IInterface* parent):
24 AthAlgTool(type, name, parent)
25 {
26 declareInterface<IDataRetriever>(this);
27 }
28
35
36 //be verbose
37 ATH_MSG_VERBOSE("initialize()");
38
39 //Try to retrieve the trig decision tool
40 if ( !m_trigDecTool.retrieve() ) {
41 ATH_MSG_FATAL("Could not retrieve TrigDecisionTool!");
42 return StatusCode::FAILURE;
43 }
44
45 // We define the chain groups relying on the name convention (i.e. all L1
46 // items start their name from "L1_", etc) In principle we would not have to do
47 // so as the TrigDecisionTool jobOptions defines these as public chain
48 // groups. This way, we are independant of jobOptions
49 m_all = m_trigDecTool->getChainGroup(".*");
50 m_allL1 = m_trigDecTool->getChainGroup("L1_.*");
51 m_allL2 = m_trigDecTool->getChainGroup("L2_.*");
52 m_allEF = m_trigDecTool->getChainGroup("EF_.*");
53 m_allHLT = m_trigDecTool->getChainGroup("HLT_.*");
54
55 return StatusCode::SUCCESS;
56 }
57
63 std::string& itemList, std::string& prescaleList) {
64
65 std::string sig_name;
66
67 //Get a list of L1 items
68 std::vector<std::string> chainList = chains->getListOfTriggers();
69 ATH_MSG_DEBUG("Number of items in chain is " << chainList.size());
70
71 for (auto &trigName : chainList){
72 // Make sure the item is not empty
73 // (can this actually happen ?!?
74 if ( trigName.empty() ) continue;
75
76 auto trigChain = m_trigDecTool->getChainGroup(trigName);
77 // getPrescale() returns 0.0 for the first event: trigger decision tool needs
78 // to internally cache the values prior to the event, but running from RAW the
79 // conditions algorithm only runs during the event. Hence the "live" loading of
80 // prescales are 1 event late - No trigger decisions for the first event
81 if ( std::abs(trigChain->getPrescale()-1.0) > 1e-5 ) continue;
82
83 //Output debug info
84 std::string myItem = trigName;
85 ATH_MSG_VERBOSE(" * item : name=" << myItem
86 << "; result = " << (trigChain->isPassed() ? "passed" : "failed")
87 << "; prescale = " << trigChain->getPrescale());
88
89 // replace HLT with EF (as AtlantisJava doesn't know 'HLT'):
90 if ( myItem.find("HLT",0) != std::string::npos){
91 myItem.replace(0,4,"EF_");
92 ATH_MSG_VERBOSE(trigName << " renamed into: " << myItem);
93 }
94
95 // prescale: see TWiki page TrigDecisionTool15
96
97 //Only add passed items
98 if ( trigChain->isPassed() ) {
99
100 //Add item to list
101 itemList += "-" + myItem;
102
103 // prescale factor
104 prescaleList += "-" + DataType( trigChain->getPrescale() ).toString();
105 }
106 }
107
108
109 //Mark empty item lists
110 if ( itemList.empty() ){ itemList = "empty"; }
111 if ( prescaleList.empty() ){ prescaleList = "empty"; }
112
113 //print debug information
114 ATH_MSG_DEBUG(" itemList: " << itemList);
115 ATH_MSG_DEBUG(" prescaleList: " << prescaleList);
116
117 return StatusCode::SUCCESS;
118 }
119
126 StatusCode LVL1ResultRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
127
128 //be verbose
129 ATH_MSG_VERBOSE("retrieve()");
130
131 //Get the item and prescale lists for all levels
132 std::string itemListL1="";
133 std::string prescaleListL1="";
134 std::string itemListL2="";
135 std::string prescaleListL2="";
136 std::string itemListEF="";
137 std::string prescaleListEF="";
138 std::string itemListHLT="";
139 std::string prescaleListHLT="";
140
141 //Get L1
142 getItemLists( m_allL1, itemListL1, prescaleListL1 ).ignore();
143 //Summarize L1 result
144 int flagL1Passed = m_allL1->isPassed();
145 ATH_MSG_DEBUG("Decision : Level-1 " << ((flagL1Passed)? "passed":"failed"));
146
147 //Get L2
148 getItemLists( m_allL2, itemListL2, prescaleListL2 ).ignore();
149 //Summarize L2 result
150 int flagL2Passed = m_allL2->isPassed();
151 ATH_MSG_DEBUG("Decision : Level-2 " << ((flagL2Passed)? "passed":"failed"));
152
153 //Get EF
154 getItemLists( m_allEF, itemListEF, prescaleListEF ).ignore();
155 //Summarize EF result
156 int flagEFPassed = m_allEF->isPassed();
157 ATH_MSG_DEBUG("Decision : EventFilter " << ((flagEFPassed)? "passed":"failed"));
158
159 //Get HLT
160 getItemLists( m_allHLT, itemListHLT, prescaleListHLT ).ignore();
161 //Summarize HLT result
162 int flagHLTPassed = m_allHLT->isPassed();
163 ATH_MSG_DEBUG("Decision : HLT " << ((flagHLTPassed)? "passed":"failed"));
164
165 //Do not write trigger info if we failed to obtain any of it
166 if ((itemListL1=="empty") && (itemListL2=="empty") && (itemListEF=="empty") && (itemListHLT=="empty") ){
167 ATH_MSG_INFO("All item lists empty, will not write out any data");
168 return StatusCode::SUCCESS;
169 }
170
171 //Store results in data list
172 DataVect itemListL1Vec; itemListL1Vec.push_back( DataType( itemListL1 ));
173 DataVect prescaleListL1Vec; prescaleListL1Vec.push_back( DataType( prescaleListL1 ));
174 DataVect itemListL2Vec; itemListL2Vec.push_back( DataType( itemListL2 ));
175 DataVect prescaleListL2Vec; prescaleListL2Vec.push_back( DataType( prescaleListL2 ));
176 DataVect itemListEFVec; itemListEFVec.push_back( DataType( itemListEF ));
177 DataVect prescaleListEFVec; prescaleListEFVec.push_back( DataType( prescaleListEF ));
178 DataVect itemListHLTVec; itemListHLTVec.push_back( DataType( itemListHLT ));
179 DataVect prescaleListHLTVec; prescaleListHLTVec.push_back( DataType( prescaleListHLT ));
180 DataVect passedTrigger; passedTrigger.push_back(DataType( flagHLTPassed )); //this is just a duplicate
181 DataVect passedL1; passedL1.push_back(DataType( flagL1Passed ));
182 DataVect passedL2; passedL2.push_back(DataType( flagL2Passed ));
183 DataVect passedEF; passedEF.push_back(DataType( flagHLTPassed )); // temporary.
184 DataVect passedHLT; passedHLT.push_back(DataType( flagHLTPassed ));
185 // placeholders only ! For backwards compatibility.
186 // Trigger energies moved to TriggerInfoRetriever
187 DataVect energySumEt; energySumEt.push_back(DataType( -1. ) );
188 DataVect energyEx; energyEx.push_back(DataType( -1. ) );
189 DataVect energyEy; energyEy.push_back(DataType( -1. ) );
190 DataVect energyEtMiss; energyEtMiss.push_back(DataType( -1. ) );
191
192 //Finally create data map and write out results
193 DataMap dataMap;
194 dataMap["ctpItemList"] = itemListL1Vec;
195 dataMap["prescaleListL1"] = prescaleListL1Vec;
196 dataMap["itemListL2"] = itemListL2Vec;
197 dataMap["prescaleListL2"] = prescaleListL2Vec;
198 dataMap["itemListEF"] = itemListHLTVec; // temporary. AtlantisJava doesn't know 'HLT' yet. jpt 23Jun15
199 dataMap["prescaleListEF"] = prescaleListHLTVec;
200 dataMap["passedTrigger"] = passedTrigger;
201 dataMap["passedL1"] = passedL1;
202 dataMap["passedL2"] = passedHLT; // temporary. AtlantisJava doesn't know 'HLT' yet. jpt 23Jun15
203 dataMap["passedEF"] = passedHLT; // temporary. AtlantisJava doesn't know 'HLT' yet. jpt 23Jun15
204 dataMap["energySumEt"] = energySumEt;
205 dataMap["energyEx"] = energyEx;
206 dataMap["energyEy"] = energyEy;
207 dataMap["energyEtMiss"] = energyEtMiss;
208
209 ATH_MSG_DEBUG(dataTypeName() << ": "<< itemListL1Vec.size());
210 //forward data to formating tool
211 return FormatTool->AddToEvent(dataTypeName(), "TrigDecision", &dataMap);
212 }
213}
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
const Trig::ChainGroup * m_allL1
const Trig::ChainGroup * m_allEF
const Trig::ChainGroup * m_all
the trigger chains
PublicToolHandle< Trig::TrigDecisionTool > m_trigDecTool
A handle to the TrigDecisionTool.
StatusCode initialize()
Initialize the tool.
const Trig::ChainGroup * m_allL2
LVL1ResultRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
const Trig::ChainGroup * m_allHLT
StatusCode getItemLists(const Trig::ChainGroup *chains, std::string &listName, std::string &prescaleName)
Subroutine for constructing the item list string.
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
virtual std::string dataTypeName() const
Return the name of the data type.
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
std::map< std::string, DataVect > DataMap
Definition DataType.h:59
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition DataType.h:58