14 #include "GaudiKernel/MsgStream.h"
29 , m_rejectanybrl(false)
30 , m_eventselectormode(false)
32 declareInterface<IGoodRunsListSelectorTool>(
this);
33 declareInterface<IAthenaEvtLoopPreSelectTool>(
this);
51 if (m_grlcollection!=0)
delete m_grlcollection;
52 if (m_brlcollection!=0)
delete m_brlcollection;
53 if (m_reader!=0)
delete m_reader;
56 while ( ! m_dqformula.empty() ) {
58 TFormula* form = (*itr).second;
59 m_dqformula.erase(itr);
71 return StatusCode::SUCCESS;
74 return AthAlgTool::queryInterface( riid, ppvIf );
86 if (!m_goodrunslistVec.empty() || !m_blackrunslistVec.empty() || m_usecool)
94 for (itr=m_goodrunslistVec.begin(); itr!=m_goodrunslistVec.end() && !m_usecool; ++itr) {
97 if ( itr->find(
"/")==0 || itr->find(
"$")==0 || itr->find(
".")==0 || itr->find(
":")!=string::npos ) {
98 fname = gSystem->ExpandPathName( itr->c_str() );
105 return StatusCode::FAILURE;
108 for (itr=m_blackrunslistVec.begin(); itr!=m_blackrunslistVec.end() && !m_usecool; ++itr) {
111 if ( itr->find(
"/")==0 || itr->find(
"$")==0 || itr->find(
".")==0 || itr->find(
":")!=string::npos ) {
112 fname = gSystem->ExpandPathName( itr->c_str() );
119 return StatusCode::FAILURE;
123 if ( !m_goodrunslistVec.empty() ) {
125 for (itr=m_goodrunslistVec.begin(); itr!=m_goodrunslistVec.end() && !m_usecool; ++itr) {
128 if ( itr->find(
"/")==0 || itr->find(
"$")==0 || itr->find(
".")==0 || itr->find(
":")!=string::npos ) {
129 fname = gSystem->ExpandPathName( itr->c_str() );
134 m_reader->AddXMLFile(
fname);
136 m_reader->Interpret();
138 *m_grlcollection = m_reader->GetMergedGRLCollection(
static_cast<Root::BoolOperation>(m_boolop));
140 if ( !m_blackrunslistVec.empty() ) {
142 for (itr=m_blackrunslistVec.begin(); itr!=m_blackrunslistVec.end() && !m_usecool; ++itr) {
145 if ( itr->find(
"/")==0 || itr->find(
"$")==0 || itr->find(
".")==0 || itr->find(
":")!=string::npos ) {
146 fname = gSystem->ExpandPathName( itr->c_str() );
151 m_reader->AddXMLFile(
fname);
153 m_reader->Interpret();
155 *m_brlcollection = m_reader->GetMergedGRLCollection(
static_cast<Root::BoolOperation>(m_boolop));
158 return StatusCode::SUCCESS;
169 int lumiBlockNr = pEvent.lumi_block();
174 " ; lumiblock number = " << lumiBlockNr <<
186 pass = this->passRunLB(
runNumber,lumiBlockNr);
195 const std::vector<std::string>& brlnameVec )
199 const EventContext& ctx = Gaudi::Hive::currentContext();
202 int runNumber = ctx.eventID().run_number();
203 int lumiBlockNr = ctx.eventID().lumi_block();
204 int timeStamp = ctx.eventID().time_stamp();
208 " ; lumiblock number = " << lumiBlockNr <<
220 pass = this->passRunLB(
runNumber,lumiBlockNr,grlnameVec,brlnameVec);
229 const std::vector<std::string>& grlnameVec,
230 const std::vector<std::string>& brlnameVec )
241 if ( m_rejectanybrl && m_eventselectormode ) {
242 if ( m_brlcollection->HasRunLumiBlock(
runNumber,lumiBlockNr) ) {
243 ATH_MSG_DEBUG (
"passRunLB() :: Event rejected by (_any_ of) merged black runs list.");
247 }
else if (!brlnameVec.empty()) {
249 std::vector<Root::TGoodRunsList>::const_iterator brlitr;
250 for (
unsigned int i=0;
i<brlnameVec.size() && !reject; ++
i) {
251 brlitr = m_brlcollection->find(brlnameVec[
i]);
252 if (brlitr!=m_brlcollection->end())
253 reject = brlitr->HasRunLumiBlock(
runNumber,lumiBlockNr);
256 ATH_MSG_DEBUG (
"passRunLB() :: Event rejected by specific black runs list.");
262 if (!grlnameVec.empty()) {
264 std::vector<Root::TGoodRunsList>::const_iterator grlitr;
265 for (
unsigned int i=0;
i<grlnameVec.size() && !pass; ++
i) {
266 grlitr = m_grlcollection->find(grlnameVec[
i]);
267 if (grlitr!=m_grlcollection->end())
268 pass = grlitr->HasRunLumiBlock(
runNumber,lumiBlockNr);
271 ATH_MSG_DEBUG (
"passRunLB() :: Event accepted by specific good runs list.");
275 }
else if (m_grlcollection->HasRunLumiBlock(
runNumber,lumiBlockNr)) {
276 ATH_MSG_DEBUG (
"passRunLB() :: Event accepted by (_any_ of) merged good runs list.");
280 ATH_MSG_DEBUG (
"passRunLB() :: Event rejected, not in (any) good runs list.");
289 return StatusCode::SUCCESS;
318 if (m_registry.find(
name)!=m_registry.end()) {
319 ATH_MSG_WARNING (
"registerGRLSelector() :: GRL selector with name <" <<
name <<
"> already registered. Return false.");
324 if (!brlnameVec.empty()) {
325 std::vector<Root::TGoodRunsList>::const_iterator brlitr;
326 for (
unsigned int i=0;
i<brlnameVec.size(); ++
i) {
327 brlitr = m_brlcollection->find(brlnameVec[
i]);
328 if (brlitr==m_brlcollection->end()) {
329 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)?");
336 if (!grlnameVec.empty()) {
337 std::vector<Root::TGoodRunsList>::const_iterator grlitr;
338 for (
unsigned int i=0;
i<grlnameVec.size(); ++
i) {
339 grlitr = m_grlcollection->find(grlnameVec[
i]);
340 if (grlitr==m_grlcollection->end()) {
341 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)?");
347 ATH_MSG_DEBUG (
"registerGRLSelector() :: GRL selector with name <" <<
name <<
"> registered.");
348 m_registry[
name] =
vvPair(grlnameVec,brlnameVec);