ATLAS Offline Software
EMDatabaseID.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include <cstdlib>
6 #include <iostream>
7 #include <sstream>
8 #include <utility>
9 
11 
13 {
14  clear();
15 }
16 
18 {
19  // clear();
20  set(ob);
21 }
22 
23 EMDatabaseID::EMDatabaseID(const std::string& s)
24 {
25  // clear();
26  setUniqueID(s);
27 }
28 
31 {
32  if (id.SimSWV.empty()) set(id.Object, id.Container, id.Type, id.Channel, id.Author, id.RecoSWV, id.Tag, id.runStart, id.runEnd);
33  else set(id.Object, id.Container, id.Type, id.Channel, id.Author, id.RecoSWV, id.Tag, id.SimSWV);
34 }
35 
36 EMDatabaseID::EMDatabaseID(const std::string& Object, const std::string& Container, const std::string& Type, const std::string& Channel, const std::string& Author, const std::string& RecoSWV, const std::string& Tag, long start, long end)
37 {
38  // clear(); // not needed; set overwrites everything
39  set(Object, Container, Type, Channel, Author, RecoSWV, Tag, start, end);
40 }
41 
42 EMDatabaseID::EMDatabaseID(const std::string& Object, const std::string& Container, const std::string& Type, const std::string& Channel, const std::string& Author, const std::string& RecoSWV, const std::string& Tag, const std::string& SimSWV)
43 {
44  // clear();
45  set(Object, Container, Type, Channel, Author, RecoSWV, Tag, SimSWV);
46 }
47 
48 EMDatabaseID::EMDatabaseID(const std::string& Object, const std::string& Type, const std::string& Tag)
49 {
50  // clear();
51  set(Object, "", Type, "", "", "", Tag, "");
52 }
53 
55 {
56  clear();
57 }
58 
60 {
61  set(ob);
62  return *this;
63 }
64 
66 {
67  if (m_idDes.Object != ob.m_idDes.Object) return false;
68  if (m_idDes.Container != ob.m_idDes.Container) return false;
69  if (m_idDes.Type != ob.m_idDes.Type) return false;
70  if (m_idDes.Channel != ob.m_idDes.Channel) return false;
71  if (m_idDes.Author != ob.m_idDes.Author) return false;
72  if (m_idDes.RecoSWV != ob.m_idDes.RecoSWV) return false;
73  if (m_idDes.Tag != ob.m_idDes.Tag) return false;
74  if (m_idDes.runStart != ob.m_idDes.runStart) return false;
75  if (m_idDes.runEnd != ob.m_idDes.runEnd) return false;
76  if (m_idDes.SimSWV != ob.m_idDes.SimSWV) return false;
77  return true;
78 }
79 
81 {
82  if ((m_idDes.Object != ob.m_idDes.Object) && (!ob.m_idDes.Object.empty()) && (!m_idDes.Object.empty())) return false;
83  if ((m_idDes.Container!= ob.m_idDes.Container) && (!ob.m_idDes.Container.empty()) && (!m_idDes.Container.empty())) return false;
84  if ((m_idDes.Type != ob.m_idDes.Type) && (!ob.m_idDes.Type.empty()) && (!m_idDes.Type.empty())) return false;
85  if ((m_idDes.Channel != ob.m_idDes.Channel) && (!ob.m_idDes.Channel.empty()) && (!m_idDes.Channel.empty())) return false;
86  if ((m_idDes.Author != ob.m_idDes.Author) && (!ob.m_idDes.Author.empty()) && (!m_idDes.Author.empty())) return false;
87  if ((m_idDes.RecoSWV != ob.m_idDes.RecoSWV) && (!ob.m_idDes.RecoSWV.empty()) && (!m_idDes.RecoSWV.empty())) return false;
88  if ((m_idDes.Tag != ob.m_idDes.Tag) && (!ob.m_idDes.Tag.empty()) && (!m_idDes.Tag.empty())) return false;
89  return true;
90 }
91 
93 {
94  m_idDes = ob.m_idDes;
95 }
96 
97 void EMDatabaseID::set(const std::string& Object, const std::string& Container, const std::string& Type, const std::string& Channel, const std::string& Author, const std::string& RecoSWV, const std::string& Tag, long start, long end)
98 {
99  m_idDes.Object = beautify(Object);
104  m_idDes.RecoSWV = beautify(RecoSWV);
105  m_idDes.Tag = beautify(Tag);
107  m_idDes.runEnd = end;
108  m_idDes.SimSWV = "";
109 }
110 
111 void EMDatabaseID::set(const std::string& Object, const std::string& Container, const std::string& Type, const std::string& Channel, const std::string& Author, const std::string& RecoSWV, const std::string& Tag, const std::string& SimSWV)
112 {
113  m_idDes.Object = beautify(Object);
118  m_idDes.RecoSWV = beautify(RecoSWV);
119  m_idDes.Tag = beautify(Tag);
120  m_idDes.runStart = 0;
121  m_idDes.runEnd = 0;
122  m_idDes.SimSWV = beautify(SimSWV);
123 }
124 
125 // for object retrieval
126 void EMDatabaseID::set(const std::string& Object, const std::string& Type, const std::string& Tag)
127 {
128  set(Object, "", Type, "", "", "", Tag, "");
129 }
130 
132 {
133  m_idDes.Object = "";
134  m_idDes.Container = "";
135  m_idDes.Type = "";
136  m_idDes.Channel = "";
137  m_idDes.Author = "";
138  m_idDes.RecoSWV = "";
139  m_idDes.Tag = "";
140  m_idDes.runStart = 0;
141  m_idDes.runEnd = 0;
142  m_idDes.SimSWV = "";
143 }
144 
146 {
147  return !m_idDes.SimSWV.empty();
148 }
149 
151 {
152  if (m_idDes.Object.empty()) return false;
153  if (m_idDes.Container.empty()) return false;
154  if (m_idDes.Type.empty()) return false;
155  if (m_idDes.Channel.empty()) return false;
156  if (m_idDes.Author.empty()) return false;
157  if (m_idDes.RecoSWV.empty()) return false;
158  if (m_idDes.Tag.empty()) return false;
159  if ((m_idDes.runStart==0) && (m_idDes.runEnd==0) && (m_idDes.SimSWV.empty())) return false;
160  return true;
161 }
162 
163 std::string EMDatabaseID::getUniqueID() const
164 {
165  if (!isComplete())
166  {
167  std::cout<<"EMDatabaseID::Error: Request UniqueID for non complete object."<<std::endl;
168  return "";
169  }
170  std::string s;
171  s = object() + "_" + container() + "_" + type() + "_" + channel() + "_" + author() + "_" + recoSWV() + "_" + tag();
172  if (isMCData()) s+="_MC"+m_idDes.SimSWV;
173  else s=s+"_Run-"+intToString(runStart())+"-"+intToString(runEnd());
174  return s;
175 }
176 
177 bool EMDatabaseID::setUniqueID(const std::string& s)
178 {
179  std::string n;
180  int step=0;
181  for (char i : s)
182  {
183  if (i=='_')
184  {
185  step++;
186  if (step==1) object(n);
187  if (step==2) container(n);
188  if (step==3) type(n);
189  if (step==4) channel(n);
190  if (step==5) author(n);
191  if (step==6) recoSWV(n);
192  if (step==7) tag(n);
193  n="";
194  } else
195  {
196  n+=i;
197  }
198  }
199  step++;
200  if (step==8)
201  {
202  if (setRunOrMCSWV(n)!=0) return true;
203  }
204  std::cout<<"EMDatabaseID::Warning: Set UniqueID-String is non complete."<<std::endl;
205  //clear();
206  return false;
207 }
208 
210 {
211  if (n.substr(0, 2)=="MC")
212  {
213  n=n.erase(0, 2);
214  simSWV(n);
215  return 1;
216  }
217  if (n.substr(0, 3)=="Run")
218  {
219  n=n.erase(0, 3);
220  int start = 0;
221  int end = 0;
222  std::string::size_type pos = n.find ('-');
223  if (pos != std::string::npos) {
224  start = atoi (n.substr(1, pos-1).c_str());
225  end = atoi (n.substr(pos+1, n.size()).c_str());
226  }
227  else {
228  pos = 0;
229  end = atoi (n.c_str());
230  }
231  run(start,end);
232  return 2;
233  }
234  return 0;
235 }
236 
237 std::string EMDatabaseID::beautify(const std::string& s)
238 {
239  std::string n;
240  for (char i : s) if ((i!=' ') && (i!='_') && (i!='/') && (i!='\\')) n+=i;
241  return n;
242 }
243 
244 std::string EMDatabaseID::intToString(long l)
245 {
246  // std::string s;
247  std::stringstream out;
248  out << l;
249  return out.str();
250 }
251 
252 std::string EMDatabaseID::getCoolChannel() const
253 {
254  return (object() + "_" + type());
255 }
256 
EMDatabaseIDDescriptor::runStart
long runStart
Additonal User Information, ...; in egamma used for parametrization: "ClusterEta ClusterE".
Definition: EMDatabaseID.h:32
EMDatabaseID::type
std::string type() const
Access to single identifier.
Definition: EMDatabaseID.h:109
EMDatabaseID
Definition: EMDatabaseID.h:39
EMDatabaseID::m_idDes
EMDatabaseIDDescriptor m_idDes
Definition: EMDatabaseID.h:152
athena_checkUpload.Tag
string Tag
Definition: athena_checkUpload.py:189
EMDatabaseIDDescriptor::Container
std::string Container
Object: Muon, IDTrack, Electron, Tau, Jet, ...
Definition: EMDatabaseID.h:26
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
EMDatabaseID::getCoolChannel
std::string getCoolChannel() const
Definition: EMDatabaseID.cxx:252
LArBadChanBlobUtils::Channel
Identifier32::value_type Channel
Definition: LArBadChanBlobUtils.h:24
EMDatabaseIDDescriptor::SimSWV
std::string SimSWV
Run Number, where the data analysis has stopped.
Definition: EMDatabaseID.h:34
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
EMDatabaseID::clear
void clear()
Clear all ID-informations.
Definition: EMDatabaseID.cxx:131
EMDatabaseID::recoSWV
std::string recoSWV() const
Access to single identifier.
Definition: EMDatabaseID.h:115
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
EMDatabaseIDDescriptor::Type
std::string Type
Container: StacoMuonCollection, Trigger_MU20, ElectronAODCollection.
Definition: EMDatabaseID.h:27
EMDatabaseID::getUniqueID
std::string getUniqueID() const
Returns the unique ID-String of this Object.
Definition: EMDatabaseID.cxx:163
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
EMDatabaseID::isInSubgroup
bool isInSubgroup(const EMDatabaseID &ob) const
Returns true if the given Identifiers in the parameter ob agree with the given object.
Definition: EMDatabaseID.cxx:80
EMDatabaseID::isComplete
bool isComplete() const
Return true, if all 7/8 Identifiers have been initialized.
Definition: EMDatabaseID.cxx:150
EMDatabaseID::~EMDatabaseID
~EMDatabaseID()
Destructor.
Definition: EMDatabaseID.cxx:54
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
EMDatabaseID::isMCData
bool isMCData() const
Returns true, if this is an identifier for a MC-determined Performance Quantaty.
Definition: EMDatabaseID.cxx:145
Container
storage of the time histories of all the cells
EMDatabaseID::channel
std::string channel() const
Access to single identifier.
Definition: EMDatabaseID.h:111
EMDatabaseID::runEnd
long runEnd() const
Access to single identifier.
Definition: EMDatabaseID.h:121
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
EMDatabaseID::operator=
EMDatabaseID & operator=(const EMDatabaseID &ob)
= operator
Definition: EMDatabaseID.cxx:59
EMDatabaseID::operator==
bool operator==(const EMDatabaseID &ob) const
== operator: returns true if all Identifiers of the two objects coincide.
Definition: EMDatabaseID.cxx:65
EMDatabaseIDDescriptor::Object
std::string Object
Definition: EMDatabaseID.h:25
EMDatabaseID::object
std::string object() const
Access to single identifier.
Definition: EMDatabaseID.h:105
xAODType
Definition: ObjectType.h:13
EMDatabaseID::set
void set(const EMDatabaseID &ob)
Set given ID to this object.
Definition: EMDatabaseID.cxx:92
EMDatabaseID::author
std::string author() const
Access to single identifier.
Definition: EMDatabaseID.h:113
EMDatabaseIDDescriptor::runEnd
long runEnd
Run Number, where the data analysis has started.
Definition: EMDatabaseID.h:33
EMDatabaseIDDescriptor::Tag
std::string Tag
SoftwareVersionForReconstruction: 14.0.12, ...
Definition: EMDatabaseID.h:31
EMDatabaseID::EMDatabaseID
EMDatabaseID()
Default constructor.
Definition: EMDatabaseID.cxx:12
EMDatabaseID::beautify
static std::string beautify(const std::string &s)
deletes characters '_',' ','/' and '\' out of the string
Definition: EMDatabaseID.cxx:237
EMDatabaseID::runStart
long runStart() const
Access to single identifier.
Definition: EMDatabaseID.h:119
EMDatabaseID.h
EMDatabaseID::container
std::string container() const
Access to single identifier.
Definition: EMDatabaseID.h:107
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
EMDatabaseIDDescriptor::Author
std::string Author
Channel: Zmumu, Zee, JPsi, TTbarSemiLeptonic.
Definition: EMDatabaseID.h:29
EMDatabaseID::simSWV
std::string simSWV()
Access to single identifier.
Definition: EMDatabaseID.h:123
EMDatabaseID::run
void run(long start, long end)
Access to single identifier.
Definition: EMDatabaseID.h:96
EMDatabaseIDDescriptor::Channel
std::string Channel
Type: Efficiency, Scale/Resolution, Fake, ...
Definition: EMDatabaseID.h:28
LArCellBinning.step
step
Definition: LArCellBinning.py:158
EMDatabaseID::intToString
static std::string intToString(long l)
converts int to string
Definition: EMDatabaseID.cxx:244
CxxUtils::atoi
int atoi(std::string_view str)
Helper functions to unpack numbers decoded in string into integers and doubles The strings are requir...
Definition: Control/CxxUtils/Root/StringUtils.cxx:85
EMDatabaseIDDescriptor
Definition: EMDatabaseID.h:24
EMDatabaseID::setUniqueID
bool setUniqueID(const std::string &s)
Set the unique ID-String and initialize the object.
Definition: EMDatabaseID.cxx:177
ParticleJetParams::Author
Author
Definition: ParticleJetParamDefs.h:33
EMDatabaseID::tag
std::string tag() const
Access to single identifier.
Definition: EMDatabaseID.h:117
EMDatabaseID::setRunOrMCSWV
int setRunOrMCSWV(std::string s)
converts the given string to runNumbers or Softwareversion.
Definition: EMDatabaseID.cxx:209
EMDatabaseIDDescriptor::RecoSWV
std::string RecoSWV
Author: PerformanceGroup, PrivateMSchott, ....
Definition: EMDatabaseID.h:30