15 : TGoodRunsList(
"noname")
22 , TNamed(
name,
"notitle")
35 Bool_t
same = this->HasSameGRLInfo(
other);
36 if (m_checkGRLInfo ||
other.GetCheckGRLInfo()) {
39 m_logger <<
kWARNING <<
"Incompatible NamedLumiRanges: " <<
GEndl;
41 other.Summary(kFALSE);
48 for (
const auto& othermditem :
other.GetMetaData()) {
49 auto thismditem = m_metadata.find(othermditem.first);
50 if (thismditem == m_metadata.end()) {
51 m_metadata.insert(othermditem);
53 auto& nameStr = othermditem.first;
54 auto& thisvaluestr = thismditem->second;
55 if (thisvaluestr != othermditem.second) {
56 if (nameStr ==
"RunList") {
59 thisvaluestr +=
" | ";
61 thisvaluestr += othermditem.second;
68 std::map<Int_t,Root::TGoodRun>::const_iterator itr;
70 for (itr = diffgrl.begin(); itr!=diffgrl.end(); ++itr) {
71 if (this->
find(itr->first)!=this->end()) {
73 if (!grun.
IsEmpty()) (*this)[itr->first] = grun;
74 }
else if (!itr->second.IsEmpty()) {
75 (*this)[itr->first] = itr->second;
86 overlapgrl.SetName(
"Overlap of GRLs");
89 Bool_t
same = this->HasSameGRLInfo(
other);
90 if (m_checkGRLInfo ||
other.GetCheckGRLInfo()) {
93 m_logger <<
kWARNING <<
"Incompatible NamedLumiRanges: " <<
GEndl;
95 other.Summary(kFALSE);
96 m_logger <<
kWARNING <<
"Returning empty GoodRunsList." <<
GEndl;
101 overlapgrl.SetName(this->GetName());
107 std::map<Int_t,Root::TGoodRun>::const_iterator itr = this->
begin();
108 for (; itr!=this->
end(); ++itr) {
113 overlapgrl[itr->first] = grun;
126 sumgrl.SetName(
"Sum of GRLs");
129 Bool_t
same = this->HasSameGRLInfo(
other);
130 if (m_checkGRLInfo ||
other.GetCheckGRLInfo()) {
133 m_logger <<
kWARNING <<
"Incompatible NamedLumiRanges: " <<
GEndl;
135 other.Summary(kFALSE);
136 m_logger <<
kWARNING <<
"Returning empty GoodRunsList." <<
GEndl;
141 sumgrl.SetName(this->GetName());
146 std::map<Int_t,Root::TGoodRun>::const_iterator itr;
148 for (itr = this->
begin(); itr!=this->
end(); ++itr) {
151 if (!grun.
IsEmpty()) sumgrl[itr->first] = grun;
152 }
else if (!itr->second.IsEmpty()) {
153 sumgrl[itr->first] = itr->second;
157 for (itr =
other.begin(); itr!=
other.end(); ++itr) {
158 if (sumgrl.find(itr->first)==sumgrl.end() && !itr->second.IsEmpty()) {
159 sumgrl[itr->first] = itr->second;
170 return other.GetPartNotIn(*
this);
178 notinother.SetName(
"Difference of GRLs");
181 Bool_t
same = this->HasSameGRLInfo(
other);
182 if (m_checkGRLInfo ||
other.GetCheckGRLInfo()) {
185 m_logger <<
kWARNING <<
"Incompatible NamedLumiRanges: " <<
GEndl;
187 other.Summary(kFALSE);
188 m_logger <<
kWARNING <<
"Returning empty GoodRunsList." <<
GEndl;
193 notinother.SetName(this->GetName());
198 std::map<Int_t,Root::TGoodRun>::const_iterator itr;
200 for (itr = this->
begin(); itr!=this->
end(); ++itr) {
203 if (!notinrun.
IsEmpty()) notinother[itr->first] = notinrun;
204 }
else if (!itr->second.IsEmpty()) {
205 notinother[itr->first] = itr->second;
216 return ( this->
find(runnr)!=this->
end() );
223 const auto run = this->
find(runnr);
224 return (
run!=this->
end() &&
run->second.HasLB( lumiblocknr ) );
231 std::map<TString,TString>::const_iterator itr = m_metadata.begin();
232 for (; itr!=m_metadata.end(); ++itr) {
233 TString triggername = itr->first;
234 triggername.ToLower();
235 if (triggername.BeginsWith(
"trigger") && itr->second.Length()>0)
return kTRUE;
245 bool isEmpty = overlapgrl.
IsEmpty();
260 m_logger <<
kINFO <<
"Version: " << m_version <<
GEndl;
261 std::map<TString,TString>::const_iterator titr = m_metadata.begin();
262 for (titr = m_metadata.begin(); titr!=m_metadata.end(); ++titr)
263 m_logger <<
kINFO <<
"Metadata: " << (titr->first) <<
" : " << (titr->second) <<
GEndl;
269 std::map<Int_t,Root::TGoodRun>::const_iterator itr = this->
begin();
270 std::map<Int_t,Root::TGoodRun>::const_iterator
end = this->
end();
271 for (; itr!=
end; ++itr) itr->second.Summary();
286 std::vector<Root::TGoodRun>
289 std::vector<Root::TGoodRun>
runlist;
296 std::vector<std::string>
299 std::vector<std::string> triggerchains;
301 for (
const auto& [
key,
value] : m_metadata) {
302 TString triggername =
key;
303 triggername.ToLower();
304 if (triggername.BeginsWith(
"trigger") &&
value.Length()>0) triggerchains.push_back(
value.Data());
306 return triggerchains;
310 std::vector<std::string>
313 std::vector<std::string> streamlist;
315 for (
const auto& [
key,
value] : m_metadata) {
316 TString streamname =
key;
317 streamname.ToLower();
318 if (streamname.BeginsWith(
"stream") &&
value.Length()>0) streamlist.push_back(
value.Data());
331 same =
same && (TString(this->GetName())==TString(
other.GetName())) ;
333 m_logger <<
kDEBUG <<
"Incompatible names: <" << this->GetName() <<
"> <" <<
other.GetName() <<
">" <<
GEndl;
339 m_logger <<
kDEBUG <<
"Incompatible versions: <" << this->GetVersion() <<
"> <" <<
other.GetVersion() <<
">" <<
GEndl;
344 std::map<TString,TString>::const_iterator mitr = this->GetMetaData().find(
"RQTSVNVersion");
345 std::map<TString,TString>::const_iterator oitr =
other.GetMetaData().find(
"RQTSVNVersion");
346 if ( mitr==this->GetMetaData().
end() && oitr==
other.GetMetaData().end() ) {
348 }
else if ( mitr!=this->GetMetaData().
end() && oitr!=
other.GetMetaData().end() ) {
349 same =
same && ( mitr->second==oitr->second );
350 if (!
same) { m_logger <<
kDEBUG <<
"Incompatible run query versions: " << mitr->first
351 <<
" : <" << mitr->second <<
"> <" << oitr->second <<
">" <<
GEndl; }
352 }
else {
same=kFALSE; }
378 if (this->
empty())
return kTRUE;
380 Bool_t isEmpty(kTRUE);
381 std::map< Int_t, TGoodRun >::const_iterator litr = this->
begin();
382 for (; litr!=this->
end() && isEmpty; ++litr)
383 isEmpty = isEmpty && litr->second.IsEmpty();
392 if (this->IsEmpty())
return "grl_empty";
394 Int_t beginrun(-1),
endrun(-1), beginlb(-1), endlb(-1);
401 beginlb = begingr.begin()->Begin();
405 endlb = endgr.rbegin()->End();
408 return Form(
"grl_%d.%d-%d.%d",beginrun,beginlb,
endrun,endlb);
415 if (
runnr<0 || lumiblocknr<0)
return;
416 if (this->HasRunLumiBlock(
runnr,lumiblocknr))
return;
419 if (itr==this->
end()) {
421 itr = this->
find(runnr);
424 itr->second.AddLB(lumiblocknr);