Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
GoodRunsListSelectorTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
10 #include "GoodRunsLists/StrUtil.h"
11 
13 
14 #include "GaudiKernel/MsgStream.h"
15 
16 #include "TFormula.h"
17 #include "TSystem.h"
18 
19 #include <sys/stat.h>
20 
21 using namespace std;
22 
23 GoodRunsListSelectorTool::GoodRunsListSelectorTool( const std::string& type, const std::string& name, const IInterface* parent )
24  : base_class( type, name, parent )
25  , m_reader(0)
26  , m_boolop(0)
27  , m_passthrough(true)
28  , m_rejectanybrl(false)
29  , m_eventselectormode(false)
30 {
31  declareProperty( "GoodRunsListVec", m_goodrunslistVec, "list of input xml files" );
32  declareProperty( "BlackRunsListVec", m_blackrunslistVec, "list of input xml files" );
33  declareProperty( "BoolOperation", m_boolop );
34  declareProperty( "PassThrough", m_passthrough = true);
35  declareProperty( "RejectBlackRunsInEventSelector", m_rejectanybrl = false );
36  declareProperty( "EventSelectorMode", m_eventselectormode = false );
37 
41 }
42 
43 
45 {
46  if (m_grlcollection!=0) delete m_grlcollection;
47  if (m_brlcollection!=0) delete m_brlcollection;
48  if (m_reader!=0) delete m_reader;
49 
50  // delete all the formula pntrs in the map
51  while ( ! m_dqformula.empty() ) {
52  std::map< std::string,TFormula* >::iterator itr= m_dqformula.begin();
53  TFormula* form = (*itr).second;
54  m_dqformula.erase(itr);
55  delete form;
56  }
57 }
58 
59 
62 {
63  ATH_MSG_DEBUG ("initialize() ");
64 
65  Root::TMsgLogger::SetMinLevel(static_cast<Root::TMsgLevel>(msgLevel()));
66 
68  if (!m_goodrunslistVec.empty() || !m_blackrunslistVec.empty())
69  m_passthrough=false;
70 
72  if (m_passthrough) ATH_MSG_WARNING ("Set to pass-through mode.");
73 
76  for (itr=m_goodrunslistVec.begin(); itr!=m_goodrunslistVec.end(); ++itr) {
77  //const char* fname;
78  std::string fname;
79  if ( itr->find('/')==0 || itr->find('$')==0 || itr->find('.')==0 || itr->find(':')!=string::npos ) {
80  fname = gSystem->ExpandPathName( itr->c_str() );
81  }
82  else {
83  fname = (PathResolverFindXMLFile( *itr ));
84  }
85  if ( !fileExists(fname.c_str()) ) {
86  ATH_MSG_ERROR ("Cannot open file : " << fname);
87  return StatusCode::FAILURE;
88  }
89  }
90  for (itr=m_blackrunslistVec.begin(); itr!=m_blackrunslistVec.end(); ++itr) {
91  //const char* fname;
92  std::string fname;
93  if ( itr->find('/')==0 || itr->find('$')==0 || itr->find('.')==0 || itr->find(':')!=string::npos ) {
94  fname = gSystem->ExpandPathName( itr->c_str() );
95  }
96  else {
97  fname = (PathResolverFindXMLFile( *itr ));
98  }
99  if ( !fileExists(fname.c_str()) ) {
100  ATH_MSG_ERROR ("Cannot open file : " << fname);
101  return StatusCode::FAILURE;
102  }
103  }
105  if ( !m_goodrunslistVec.empty() ) {
106  m_reader->Reset();
107  for (itr=m_goodrunslistVec.begin(); itr!=m_goodrunslistVec.end(); ++itr) {
108  //const char* fname;
109  std::string fname;
110  if ( itr->find('/')==0 || itr->find('$')==0 || itr->find('.')==0 || itr->find(':')!=string::npos ) {
111  fname = gSystem->ExpandPathName( itr->c_str() );
112  }
113  else {
114  fname = (PathResolverFindXMLFile( *itr ));
115  }
116  m_reader->AddXMLFile(fname);
117  }
118  m_reader->Interpret();
120  *m_grlcollection = m_reader->GetMergedGRLCollection(static_cast<Root::BoolOperation>(m_boolop));
121  }
122  if ( !m_blackrunslistVec.empty() ) {
123  m_reader->Reset();
124  for (itr=m_blackrunslistVec.begin(); itr!=m_blackrunslistVec.end(); ++itr) {
125  //const char* fname;
126  std::string fname;
127  if ( itr->find('/')==0 || itr->find('$')==0 || itr->find('.')==0 || itr->find(':')!=string::npos ) {
128  fname = gSystem->ExpandPathName( itr->c_str() );
129  }
130  else {
131  fname = (PathResolverFindXMLFile( *itr ));
132  }
133  m_reader->AddXMLFile(fname);
134  }
135  m_reader->Interpret();
137  *m_brlcollection = m_reader->GetMergedGRLCollection(static_cast<Root::BoolOperation>(m_boolop));
138  }
139 
140  return StatusCode::SUCCESS;
141 }
142 
143 
144 bool
145 GoodRunsListSelectorTool::passEvent(const EventIDBase& pEvent)
146 {
147  ATH_MSG_DEBUG ("passEvent() ");
148 
149  auto eventNumber = pEvent.event_number();
150  int runNumber = pEvent.run_number();
151  int lumiBlockNr = pEvent.lumi_block();
152  auto timeStamp = pEvent.time_stamp();
153 
154  ATH_MSG_DEBUG ("passEvent() :: run number = " << runNumber <<
155  " ; event number = " << eventNumber <<
156  " ; lumiblock number = " << lumiBlockNr <<
157  " ; timestamp = " << timeStamp
158  );
159 
161  bool pass(false);
162  if (m_passthrough) {
163  ATH_MSG_DEBUG ("passEvent() :: Pass through mode.");
164  pass = true;
165  }
167  else {
168  pass = this->passRunLB(runNumber,lumiBlockNr);
169  }
170 
171  return pass;
172 }
173 
174 
175 bool
176 GoodRunsListSelectorTool::passThisRunLB( const std::vector<std::string>& grlnameVec,
177  const std::vector<std::string>& brlnameVec )
178 {
179  ATH_MSG_DEBUG ("passThisRunLB() ");
180 
181  const EventContext& ctx = Gaudi::Hive::currentContext();
182 
183  int eventNumber = ctx.eventID().event_number();
184  int runNumber = ctx.eventID().run_number();
185  int lumiBlockNr = ctx.eventID().lumi_block();
186  int timeStamp = ctx.eventID().time_stamp();
187 
188  ATH_MSG_DEBUG ("passThisRunLB() :: run number = " << runNumber <<
189  " ; event number = " << eventNumber <<
190  " ; lumiblock number = " << lumiBlockNr <<
191  " ; timestamp = " << timeStamp
192  );
193 
195  bool pass(false);
196  if (m_passthrough) {
197  ATH_MSG_DEBUG ("passThisRunLB() :: Pass through mode.");
198  pass = true;
199  }
201  else {
202  pass = this->passRunLB(runNumber,lumiBlockNr,grlnameVec,brlnameVec);
203  }
204 
205  return pass;
206 }
207 
208 
209 bool
211  const std::vector<std::string>& grlnameVec,
212  const std::vector<std::string>& brlnameVec )
213 {
214  ATH_MSG_DEBUG ("passRunLB() ");
215 
217  if (m_passthrough) {
218  ATH_MSG_DEBUG ("passRunLB() :: Pass through mode.");
219  return true;
220  }
221 
223  if ( m_rejectanybrl && m_eventselectormode ) {
224  if ( m_brlcollection->HasRunLumiBlock(runNumber,lumiBlockNr) ) {
225  ATH_MSG_DEBUG ("passRunLB() :: Event rejected by (_any_ of) merged black runs list.");
226  return false;
227  }
229  } else if (!brlnameVec.empty()) {
230  bool reject(false);
231  std::vector<Root::TGoodRunsList>::const_iterator brlitr;
232  for (unsigned int i=0; i<brlnameVec.size() && !reject; ++i) {
233  brlitr = m_brlcollection->find(brlnameVec[i]);
234  if (brlitr!=m_brlcollection->end())
235  reject = brlitr->HasRunLumiBlock(runNumber,lumiBlockNr);
236  }
237  if (reject) {
238  ATH_MSG_DEBUG ("passRunLB() :: Event rejected by specific black runs list.");
239  return false;
240  }
241  }
242 
244  if (!grlnameVec.empty()) {
245  bool pass(false);
246  std::vector<Root::TGoodRunsList>::const_iterator grlitr;
247  for (unsigned int i=0; i<grlnameVec.size() && !pass; ++i) {
248  grlitr = m_grlcollection->find(grlnameVec[i]);
249  if (grlitr!=m_grlcollection->end())
250  pass = grlitr->HasRunLumiBlock(runNumber,lumiBlockNr);
251  }
252  if (pass) {
253  ATH_MSG_DEBUG ("passRunLB() :: Event accepted by specific good runs list.");
254  return true;
255  }
257  } else if (m_grlcollection->HasRunLumiBlock(runNumber,lumiBlockNr)) {
258  ATH_MSG_DEBUG ("passRunLB() :: Event accepted by (_any_ of) merged good runs list.");
259  return true;
260  }
261 
262  ATH_MSG_DEBUG ("passRunLB() :: Event rejected, not in (any) good runs list.");
263  return false;
264 }
265 
266 
269 {
270  ATH_MSG_DEBUG ("finalize() ");
271  return StatusCode::SUCCESS;
272 }
273 
274 
275 bool
277 {
278  struct stat info;
279  int ret = -1;
280 
281  //get the file attributes
282  ret = stat(fileName, &info);
283 
284  if(ret == 0) {
287  //if (info.st_size == 0) return false;
288  //else
289  return true;
290  } else {
292  return false;
293  }
294 }
295 
296 
297 bool
298 GoodRunsListSelectorTool::registerGRLSelector(const std::string& name, const std::vector<std::string>& grlnameVec, const std::vector<std::string>& brlnameVec)
299 {
300  if (m_registry.find(name)!=m_registry.end()) {
301  ATH_MSG_WARNING ("registerGRLSelector() :: GRL selector with name <" << name << "> already registered. Return false.");
302  return false;
303  }
304 
306  if (!brlnameVec.empty()) {
307  std::vector<Root::TGoodRunsList>::const_iterator brlitr;
308  for (unsigned int i=0; i<brlnameVec.size(); ++i) {
309  brlitr = m_brlcollection->find(brlnameVec[i]);
310  if (brlitr==m_brlcollection->end()) {
311  ATH_MSG_ERROR ("registerGRLSelector() :: requested BRL object with name <" << brlnameVec[i] << "> not found. Have you provided an object name from the BRL xml-file(s)?");
312  return false;
313  }
314  }
315  }
316 
318  if (!grlnameVec.empty()) {
319  std::vector<Root::TGoodRunsList>::const_iterator grlitr;
320  for (unsigned int i=0; i<grlnameVec.size(); ++i) {
321  grlitr = m_grlcollection->find(grlnameVec[i]);
322  if (grlitr==m_grlcollection->end()) {
323  ATH_MSG_ERROR ("registerGRLSelector() :: requested GRL object with name <" << grlnameVec[i] << "> not found. Have you provided an object name from the GRL xml-file(s)?");
324  return false;
325  }
326  }
327  }
328 
329  ATH_MSG_DEBUG ("registerGRLSelector() :: GRL selector with name <" << name << "> registered.");
330  m_registry[name] = vvPair(grlnameVec,brlnameVec);
331  return true;
332 }
grepfile.info
info
Definition: grepfile.py:38
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
Root::TGoodRunsListReader
Definition: TGoodRunsListReader.h:34
GoodRunsListSelectorTool::m_boolop
int m_boolop
Definition: GoodRunsListSelectorTool.h:78
TGRLCollection.h
GoodRunsListSelectorTool::m_grlcollection
Root::TGRLCollection * m_grlcollection
Definition: GoodRunsListSelectorTool.h:71
GoodRunsListSelectorTool::fileExists
bool fileExists(const char *fileName)
Definition: GoodRunsListSelectorTool.cxx:276
GoodRunsListSelectorTool::m_rejectanybrl
bool m_rejectanybrl
Definition: GoodRunsListSelectorTool.h:80
GoodRunsListSelectorTool::m_goodrunslistVec
std::vector< std::string > m_goodrunslistVec
Definition: GoodRunsListSelectorTool.h:68
GoodRunsListSelectorTool::~GoodRunsListSelectorTool
virtual ~GoodRunsListSelectorTool()
Definition: GoodRunsListSelectorTool.cxx:44
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
GoodRunsListSelectorTool::m_eventselectormode
bool m_eventselectormode
Definition: GoodRunsListSelectorTool.h:81
GoodRunsListSelectorTool::finalize
StatusCode finalize()
Finalize AlgTool.
Definition: GoodRunsListSelectorTool.cxx:268
vvPair
std::pair< std::vector< std::string >, std::vector< std::string > > vvPair
Definition: IGoodRunsListSelectorTool.h:13
GoodRunsListSelectorTool::passRunLB
bool passRunLB(int runNumber, int lumiBlockNr, const std::vector< std::string > &grlnameVec=std::vector< std::string >(), const std::vector< std::string > &brlnameVec=std::vector< std::string >())
called for each event by GoodRunsListSelectorAlg to decide if the event should be passed
Definition: GoodRunsListSelectorTool.cxx:210
FortranAlgorithmOptions.fileName
fileName
Definition: FortranAlgorithmOptions.py:13
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
GoodRunsListSelectorTool::registerGRLSelector
bool registerGRLSelector(const std::string &name, const std::vector< std::string > &grlnameVec, const std::vector< std::string > &brlnameVec)
register grl/brl combination
Definition: GoodRunsListSelectorTool.cxx:298
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
PathResolverFindXMLFile
std::string PathResolverFindXMLFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:374
Root::TMsgLevel
TMsgLevel
Definition: TMsgLogger.h:42
GoodRunsListSelectorTool::m_brlcollection
Root::TGRLCollection * m_brlcollection
Definition: GoodRunsListSelectorTool.h:72
test_pyathena.parent
parent
Definition: test_pyathena.py:15
xAOD::eventNumber
eventNumber
Definition: EventInfo_v1.cxx:124
CreateTrfArgs.fileExists
def fileExists(fp)
Definition: CreateTrfArgs.py:4
GoodRunsListSelectorTool::GoodRunsListSelectorTool
GoodRunsListSelectorTool(const std::string &, const std::string &, const IInterface *)
Definition: GoodRunsListSelectorTool.cxx:23
beamspotman.stat
stat
Definition: beamspotman.py:266
Root::TGRLCollection
Definition: TGRLCollection.h:29
GoodRunsListSelectorTool::passEvent
bool passEvent(const EventIDBase &pEvent)
called for each event by EventSelector to decide if the event should be passed
Definition: GoodRunsListSelectorTool.cxx:145
PathResolver.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
GoodRunsListSelectorTool::passThisRunLB
bool passThisRunLB(const std::vector< std::string > &grlnameVec=std::vector< std::string >(), const std::vector< std::string > &brlnameVec=std::vector< std::string >())
called for each event by GoodRunsListSelectorAlg to decide if the event should be passed
Definition: GoodRunsListSelectorTool.cxx:176
StrUtil.h
TGoodRunsListReader.h
xAOD::timeStamp
setEventNumber timeStamp
Definition: EventInfo_v1.cxx:128
python.AthDsoLogger.fname
string fname
Definition: AthDsoLogger.py:67
DeMoAtlasDataLoss.runNumber
string runNumber
Definition: DeMoAtlasDataLoss.py:64
GoodRunsListSelectorTool::m_blackrunslistVec
std::vector< std::string > m_blackrunslistVec
Definition: GoodRunsListSelectorTool.h:69
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
GoodRunsListSelectorTool.h
This file contains the class definition for the GoodRunsListSelectorTool class.
TMsgLogger.h
GoodRunsListSelectorTool::m_passthrough
bool m_passthrough
Definition: GoodRunsListSelectorTool.h:79
Root::BoolOperation
BoolOperation
Definition: TGRLCollection.h:27
GoodRunsListSelectorTool::initialize
StatusCode initialize()
Initialize AlgTool.
Definition: GoodRunsListSelectorTool.cxx:61
GoodRunsListSelectorTool::m_reader
Root::TGoodRunsListReader * m_reader
Definition: GoodRunsListSelectorTool.h:74
Root::TMsgLogger::SetMinLevel
static void SetMinLevel(TMsgLevel minLevel)
Definition: TMsgLogger.h:96