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);