ATLAS Offline Software
TriggerInfoRetriever.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
7 #include <string>
8 
9 #include "CLHEP/Units/SystemOfUnits.h"
10 
12 
13 #include "EventInfo/EventInfo.h"
14 #include "EventInfo/EventID.h"
15 #include "EventInfo/TriggerInfo.h"
16 
17 namespace JiveXML {
18 
19  //--------------------------------------------------------------------------
20 
21  TriggerInfoRetriever::TriggerInfoRetriever(const std::string& type, const std::string& name, const IInterface* parent):
23  m_typeName("TriggerInfo")
24  {
25 
26  declareInterface<IDataRetriever>(this);
27  }
28 
29  //--------------------------------------------------------------------------
30 
31  StatusCode TriggerInfoRetriever::retrieve(ToolHandle<IFormatTool> &FormatTool) {
32 
33 // retrieve TriggerInfo
34  const EventInfo* eventInfo;
35  const TriggerInfo* trigger_info;
36 
37  if ( evtStore()->retrieve(eventInfo).isFailure() ) {
38  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No EventInfo found in SG" << endmsg;
39  return StatusCode::SUCCESS;
40  }
41  trigger_info = eventInfo->trigger_info();
42  if (trigger_info == 0){
43  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No TriggerInfo in EventInfo" << endmsg;
44  return StatusCode::SUCCESS;
45  }
46  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " Retrieved EventInfo and TriggerInfo" << endmsg;
47 
48  std::string triggerInfoStrL1="0";
49  std::string triggerInfoStrL2="0";
50  std::string triggerInfoStrEF="0";
51  std::string triggerInfoStreamTag="0";
52 
53 // Level-1 Missing-ET from LVL1_ROI:
54  DataVect energySumEtVec;
55  DataVect energyExVec;
56  DataVect energyEyVec;
57  DataVect energyEtMissVec;
58 
59 // TriggerInfo from EventInfo:
60  DataVect trigInfoStatusVec;
61  DataVect trigInfoExtL1IDVec;
62  DataVect trigInfoLvl1TypeVec;
63  DataVect trigInfoL1Vec;
64  DataVect trigInfoL2Vec;
65  DataVect trigInfoEFVec;
66  DataVect trigInfoStreamTagVec;
67 
68 // from: AtlasTest/DatabaseTest/AthenaPoolTest/AthenaPoolTestDataReader
69 
70  trigInfoStatusVec.push_back(DataType( trigger_info->statusElement() ) );
71  trigInfoExtL1IDVec.push_back(DataType( trigger_info->extendedLevel1ID() ) );
72  trigInfoLvl1TypeVec.push_back(DataType( trigger_info->level1TriggerType() ) );
73 
74 /*
75  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "Trigger info: status " << trigger_info->statusElement()
76  << " extLvl1ID " << trigger_info->extendedLevel1ID()
77  << " lvl1Type " << trigger_info->level1TriggerType()
78  << " lvl1Info ";
79 */
80  if ( trigger_info->level1TriggerInfo().size() > 0 ){
81  triggerInfoStrL1 = "-"; // item seperator
82  }
83  for (unsigned int i = 0; i < trigger_info->level1TriggerInfo().size(); ++i) {
84 // if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << trigger_info->level1TriggerInfo()[i] << " ";
85  triggerInfoStrL1 += DataType( trigger_info->level1TriggerInfo()[i]).toString() + "-";
86  }
87 
88  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " lvl2Info " << endmsg;
89  if ( trigger_info->level2TriggerInfo().size() > 0 ){
90  triggerInfoStrL2 = "-"; // item seperator
91  }
92  for (unsigned int i = 0; i < trigger_info->level2TriggerInfo().size(); ++i) {
93 // if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << trigger_info->level2TriggerInfo()[i] << " ";
94  triggerInfoStrL2 += DataType( trigger_info->level2TriggerInfo()[i] ).toString() + "-";
95  }
96 
97  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "EventFilterInfo " << endmsg;
98  if ( trigger_info->eventFilterInfo().size() > 0 ){
99  triggerInfoStrEF = "-"; // item seperator
100  }
101  for (unsigned int i = 0; i < trigger_info->eventFilterInfo().size(); ++i) {
102 // log << MSG::DEBUG << trigger_info->eventFilterInfo()[i] << " " ;
103  triggerInfoStrEF += DataType( trigger_info->eventFilterInfo()[i]).toString() + "-";
104  }
105 
106  if ( trigger_info->streamTags().size() > 0 ){
107  triggerInfoStreamTag = "-"; // item seperator
108  }
109  for (unsigned int i = 0; i < trigger_info->streamTags().size(); ++i) {
110  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << " i " << i << " name " << trigger_info->streamTags()[i].name()
111  << " type " << trigger_info->streamTags()[i].type()
112  << " ObeysLumi " << trigger_info->streamTags()[i].obeysLumiblock();
113 
120  //std::string myStreamTag = trigger_info->streamTags()[i].name();
121  //log << MSG::DEBUG << " myStreamTag was: " << myStreamTag << "+++"
122  // << " length: " << myStreamTag.size() << endmsg;
123  //if (myStreamTag.substr(0,2) == "L1" && myStreamTag.size() < 7 ){ myStreamTag = "L1";}
124  //log << MSG::DEBUG << " myStreamTag is: " << myStreamTag << "+++" << endmsg;
125  //triggerInfoStreamTag += myStreamTag + "_" +
126 
128  triggerInfoStreamTag += trigger_info->streamTags()[i].name() + "_" +
129  trigger_info->streamTags()[i].type() + "_";
130  if ( trigger_info->streamTags()[i].obeysLumiblock() ){ // is a boolean
131  triggerInfoStreamTag += "ObeysLumi";
132  }else{
133  triggerInfoStreamTag += "notObeysLumi";
134  }
135  if ( eventInfo->event_ID()->lumi_block() ){
136  triggerInfoStreamTag += "_lumiBlock";
137  triggerInfoStreamTag += DataType(eventInfo->event_ID()->lumi_block()).toString();
138  }else{
139  triggerInfoStreamTag += "_lumiBlockUnknown";
140  }
141  triggerInfoStreamTag += "-";
142  }
143 
144  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "trigInfoL1: " << triggerInfoStrL1 << endmsg;
145  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "trigInfoL2: " << triggerInfoStrL2 << endmsg;
146  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "trigInfoEF: " << triggerInfoStrEF << endmsg;
147  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "triggerInfoStreamTag: " << triggerInfoStreamTag << endmsg;
148 
149  trigInfoL1Vec.push_back(DataType( triggerInfoStrL1 ));
150  trigInfoL2Vec.push_back(DataType( triggerInfoStrL2 ));
151  trigInfoEFVec.push_back(DataType( triggerInfoStrEF ));
152  trigInfoStreamTagVec.push_back(DataType( triggerInfoStreamTag ));
153 
154  // Retrieve LVL1_ROI for trigger energies
155  // assume that eventInfo->triggerInfo _has_ to be present,
156  // but LVL1_ROI not present under all circumstances (ACR: muoncomm)
157  // Don't exit upon failed SG retrieval as usual.
158 
159  const LVL1_ROI * roi;
160  if ( evtStore()->retrieve(roi,"LVL1_ROI").isFailure() ) {
161  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "No LVL1_ROI for Trigger-MissingET found in SG, setting placeholders." << endmsg;
162 // return StatusCode::SUCCESS; // not here.
163  // placeholders:
164  energySumEtVec.push_back(DataType( -1. ) ); // means n/a
165  energyExVec.push_back(DataType( -1. ) );
166  energyEyVec.push_back(DataType( -1. ) );
167  energyEtMissVec.push_back(DataType( -1. ) );
168  }else{
169  if ( (roi->getEnergySumROIs()).size() != 0 ){ // catch empty container
170  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "TriggerInfo: LVL1_ROI for EnergySum retrieved" << endmsg;
171 
172  LVL1_ROI::energysums_type::const_iterator itES = (roi->getEnergySumROIs()).begin();
173  LVL1_ROI::energysums_type::const_iterator itESe = (roi->getEnergySumROIs()).end();
174  for (; itES != itESe; ++itES){
175  float Et = itES->getEnergyT()/CLHEP::GeV;
176  float Ex = itES->getEnergyX()/CLHEP::GeV;
177  float Ey = itES->getEnergyY()/CLHEP::GeV;
178  energySumEtVec.push_back(DataType( Et ) );
179  energyExVec.push_back(DataType( Ex ) );
180  energyEyVec.push_back(DataType( Ey ) );
181  float EtMiss = static_cast<long>(sqrt(static_cast<double>(Ex*Ex + Ey*Ey)));
182  energyEtMissVec.push_back(DataType( EtMiss ) );
183 
184  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "EnergySum from LVL1_ROI: X:" << Ex << ", Y:"
185  << Ey << ", T:" << Et << ", ETMiss:" << EtMiss << endmsg;
186  }
187  }else{ // empty container
188  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << "TriggerInfo: LVL1_ROI for EnergySum empty !" << endmsg;
189 
190  energySumEtVec.push_back(DataType( "-1" ) ); // means n/a
191  energyExVec.push_back(DataType( "-1" ) );
192  energyEyVec.push_back(DataType( "-1" ) );
193  energyEtMissVec.push_back(DataType( "-1" ) );
194  }
195  } // LVL1_ROI available ?
196 
197  DataMap myDataMap;
198  myDataMap["energySumEt"] = energySumEtVec;
199  myDataMap["energyEx"] = energyExVec;
200  myDataMap["energyEy"] = energyEyVec;
201  myDataMap["energyEtMiss"] = energyEtMissVec;
202  myDataMap["trigInfoStatus"] = trigInfoStatusVec;
203  myDataMap["trigInfoExtL1ID"] = trigInfoExtL1IDVec;
204  myDataMap["trigInfoLvl1Type"] = trigInfoLvl1TypeVec;
205  myDataMap["trigInfoL1"] = trigInfoL1Vec;
206  myDataMap["trigInfoL2"] = trigInfoL2Vec;
207  myDataMap["trigInfoEF"] = trigInfoEFVec;
208  myDataMap["trigInfoStreamTag"] = trigInfoStreamTagVec;
209 
210  if (msgLvl(MSG::DEBUG)) msg(MSG::DEBUG) << dataTypeName() << ": "<< trigInfoStatusVec.size() << endmsg;
211 
212  //forward data to formating tool
213  std::string emptyStr=""; // eventInfo has no SGKey
214  return FormatTool->AddToEvent(dataTypeName(), emptyStr, &myDataMap);
215  }
216 }
TriggerInfo::streamTags
const std::vector< StreamTag > & streamTags() const
get stream tags
Definition: TriggerInfo.cxx:158
JiveXML::TriggerInfoRetriever::dataTypeName
virtual std::string dataTypeName() const
Return the name of the data type.
Definition: TriggerInfoRetriever.h:28
JiveXML::DataVect
std::vector< DataType > DataVect
Defines a map with a key and a vector of DataType objects e.g.
Definition: DataType.h:58
DataType
OFFLINE_FRAGMENTS_NAMESPACE::PointerType DataType
Definition: RoIBResultByteStreamTool.cxx:25
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
TriggerInfo.h
This class contains trigger related information.
JiveXML::DataMap
std::map< std::string, DataVect > DataMap
Definition: DataType.h:59
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
JiveXML::TriggerInfoRetriever::TriggerInfoRetriever
TriggerInfoRetriever(const std::string &type, const std::string &name, const IInterface *parent)
Standard Constructor.
Definition: TriggerInfoRetriever.cxx:21
TriggerInfo::level1TriggerInfo
const std::vector< number_type > & level1TriggerInfo() const
get level1 trigger info
Definition: TriggerInfo.cxx:143
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
EventID.h
This class provides a unique identification for each event, in terms of run/event number and/or a tim...
lumiFormat.i
int i
Definition: lumiFormat.py:92
TriggerInfo::level2TriggerInfo
const std::vector< number_type > & level2TriggerInfo() const
get level2 trigger info
Definition: TriggerInfo.cxx:148
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
EventInfo::event_ID
EventID * event_ID()
the unique identification of the event.
Definition: EventInfo/EventInfo/EventInfo.h:210
LVL1_ROI.h
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TriggerInfo::level1TriggerType
number_type level1TriggerType() const
get level1 trigger type
Definition: TriggerInfo.cxx:138
LVL1_ROI
Top level AOD object storing LVL1 RoIs.
Definition: LVL1_ROI.h:43
JiveXML
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
Definition: BadLArRetriever.cxx:21
TriggerInfo
This class contains trigger related information.
Definition: TriggerInfo.h:77
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
LVL1_ROI::getEnergySumROIs
const energysums_type & getEnergySumROIs() const
Get all the energy sum RoIs in the event.
Definition: LVL1_ROI.h:71
EventInfo
This class provides general information about an event. Event information is provided by the accessor...
Definition: EventInfo/EventInfo/EventInfo.h:42
TriggerInfoRetriever.h
JiveXML::TriggerInfoRetriever::retrieve
virtual StatusCode retrieve(ToolHandle< IFormatTool > &FormatTool)
Retrieve all the data.
Definition: TriggerInfoRetriever.cxx:31
TriggerInfo::extendedLevel1ID
number_type extendedLevel1ID() const
get extended level1 ID
Definition: TriggerInfo.cxx:133
TriggerInfo::eventFilterInfo
const std::vector< number_type > & eventFilterInfo() const
get event filter trigger info
Definition: TriggerInfo.cxx:153
EventInfo::trigger_info
TriggerInfo * trigger_info()
trigger information (ptr may be NULL)
Definition: EventInfo/EventInfo/EventInfo.h:230
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
AthAlgTool
Definition: AthAlgTool.h:26
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
TriggerInfo::statusElement
number_type statusElement() const
get status element
Definition: TriggerInfo.cxx:128