14 #include "GaudiKernel/MsgStream.h"
28 , m_rejectanybrl(false)
29 , m_eventselectormode(false)
31 declareProperty(
"GoodRunsListVec",
m_goodrunslistVec,
"list of input xml files" );
33 declareProperty(
"BoolOperation",
m_boolop );
35 declareProperty(
"RejectBlackRunsInEventSelector",
m_rejectanybrl =
false );
46 if (m_grlcollection!=0)
delete m_grlcollection;
47 if (m_brlcollection!=0)
delete m_brlcollection;
48 if (m_reader!=0)
delete m_reader;
51 while ( ! m_dqformula.empty() ) {
53 TFormula* form = (*itr).second;
54 m_dqformula.erase(itr);
68 if (!m_goodrunslistVec.empty() || !m_blackrunslistVec.empty())
76 for (itr=m_goodrunslistVec.begin(); itr!=m_goodrunslistVec.end(); ++itr) {
79 if ( itr->find(
'/')==0 || itr->find(
'$')==0 || itr->find(
'.')==0 || itr->find(
':')!=string::npos ) {
80 fname = gSystem->ExpandPathName( itr->c_str() );
87 return StatusCode::FAILURE;
90 for (itr=m_blackrunslistVec.begin(); itr!=m_blackrunslistVec.end(); ++itr) {
93 if ( itr->find(
'/')==0 || itr->find(
'$')==0 || itr->find(
'.')==0 || itr->find(
':')!=string::npos ) {
94 fname = gSystem->ExpandPathName( itr->c_str() );
101 return StatusCode::FAILURE;
105 if ( !m_goodrunslistVec.empty() ) {
107 for (itr=m_goodrunslistVec.begin(); itr!=m_goodrunslistVec.end(); ++itr) {
110 if ( itr->find(
'/')==0 || itr->find(
'$')==0 || itr->find(
'.')==0 || itr->find(
':')!=string::npos ) {
111 fname = gSystem->ExpandPathName( itr->c_str() );
116 m_reader->AddXMLFile(
fname);
118 m_reader->Interpret();
120 *m_grlcollection = m_reader->GetMergedGRLCollection(
static_cast<Root::BoolOperation>(m_boolop));
122 if ( !m_blackrunslistVec.empty() ) {
124 for (itr=m_blackrunslistVec.begin(); itr!=m_blackrunslistVec.end(); ++itr) {
127 if ( itr->find(
'/')==0 || itr->find(
'$')==0 || itr->find(
'.')==0 || itr->find(
':')!=string::npos ) {
128 fname = gSystem->ExpandPathName( itr->c_str() );
133 m_reader->AddXMLFile(
fname);
135 m_reader->Interpret();
137 *m_brlcollection = m_reader->GetMergedGRLCollection(
static_cast<Root::BoolOperation>(m_boolop));
140 return StatusCode::SUCCESS;
151 int lumiBlockNr = pEvent.lumi_block();
156 " ; lumiblock number = " << lumiBlockNr <<
168 pass = this->passRunLB(
runNumber,lumiBlockNr);
177 const std::vector<std::string>& brlnameVec )
181 const EventContext& ctx = Gaudi::Hive::currentContext();
184 int runNumber = ctx.eventID().run_number();
185 int lumiBlockNr = ctx.eventID().lumi_block();
186 int timeStamp = ctx.eventID().time_stamp();
190 " ; lumiblock number = " << lumiBlockNr <<
202 pass = this->passRunLB(
runNumber,lumiBlockNr,grlnameVec,brlnameVec);
211 const std::vector<std::string>& grlnameVec,
212 const std::vector<std::string>& brlnameVec )
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.");
229 }
else if (!brlnameVec.empty()) {
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);
238 ATH_MSG_DEBUG (
"passRunLB() :: Event rejected by specific black runs list.");
244 if (!grlnameVec.empty()) {
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);
253 ATH_MSG_DEBUG (
"passRunLB() :: Event accepted by specific good runs list.");
257 }
else if (m_grlcollection->HasRunLumiBlock(
runNumber,lumiBlockNr)) {
258 ATH_MSG_DEBUG (
"passRunLB() :: Event accepted by (_any_ of) merged good runs list.");
262 ATH_MSG_DEBUG (
"passRunLB() :: Event rejected, not in (any) good runs list.");
271 return StatusCode::SUCCESS;
300 if (m_registry.find(
name)!=m_registry.end()) {
301 ATH_MSG_WARNING (
"registerGRLSelector() :: GRL selector with name <" <<
name <<
"> already registered. Return false.");
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)?");
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)?");
329 ATH_MSG_DEBUG (
"registerGRLSelector() :: GRL selector with name <" <<
name <<
"> registered.");
330 m_registry[
name] =
vvPair(grlnameVec,brlnameVec);