ATLAS Offline Software
TagMetadataKey.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef TAGMETADATAKEY_H
6 #define TAGMETADATAKEY_H
7 
9 //
10 // @class TagMetadataKey
11 // @author Jack.Cranshaw@cern.ch
12 //
13 // Class to translate a key+qualifier into a string
14 // to use as a single key with CollectionMetadata.
15 // Followup tools can then 'key' off of the key or key+qualifier
16 // Example: r11111_thisStuff_bit6 key = thisStuff, qual = (r=11111,b=6)
17 //
19 
20 #include <algorithm>
21 #include <iostream>
22 #include <sstream>
23 #include <string>
24 
26 {
27 public:
28  //friend class ICollectionMetadataHelper;
29  static std::string sep() {return ";";}
30  static std::string keymark() {return "Key@";}
31  static std::string qualmark() {return "Qual@";}
32  static std::string iovmark() {return "IOV@";}
33  static std::string vermark() {return "Ver@";}
34 
36  TagMetadataKey(std::string key, std::string qual="", bool versioned=false);
37 
38  void setEncoded(bool flag);
39  void setKey(std::string key);
40  void setQual(std::string qual);
41  void setIOV(std::string iov);
42  void setVersion(std::string ver);
43 
44  bool isVersioned() {return m_verstat;}
45 
46  bool encoded() const;
47  std::string key() const;
48  std::string qual() const;
49  std::string iov() const;
50  std::string ver() const;
51 
52  bool fromString(std::string comp);
53  std::string toString() const;
54 
55 private:
56  std::string getpayload(const std::string key, const std::string comp);
57 
58  std::string m_key;
59  std::string m_qual;
60  std::string m_iov;
61  std::string m_ver;
62  bool m_verstat; // verstat is true if the key is ALLOWED to be versioned
63  bool m_encoded;
64 };
65 
66 inline
67 TagMetadataKey::TagMetadataKey() : m_verstat(false), m_encoded(true)
68 {}
69 
70 inline
71 TagMetadataKey::TagMetadataKey(std::string key, std::string qual, bool versioned) :
72  m_key(key), m_qual(qual), m_verstat(versioned), m_encoded(true)
73 {if (m_verstat) m_ver="0";}
74 
75 inline void
77 
78 inline void
80 
81 inline void
83 
84 inline void
86 
87 inline void
89 
90 inline bool
92 
93 inline std::string
94 TagMetadataKey::key() const {return m_key;}
95 
96 inline std::string
97 TagMetadataKey::qual() const {return m_qual;}
98 
99 inline std::string
100 TagMetadataKey::iov() const {return m_iov;}
101 
102 inline std::string
103 TagMetadataKey::ver() const {return m_ver;}
104 
105 inline bool
107 {
108  bool ready = false;
109  char sp = sep()[0];
110  int nseps = std::count(comp.begin(),comp.end(),sp);
111  // All marks should be denoted with an @
112  int nmarks = std::count(comp.begin(),comp.end(),'@');
113  //std::cout << "seps =" << nseps <<" marks=" << nmarks << std::endl;
114  if (nmarks > 0 && nseps == nmarks) {
115  // first check for key. if no key then ready is false
116  std::string payload = getpayload(keymark(),comp);
117  if (payload != "BAD") {
118  m_encoded=true;
119  m_key = payload;
120  // check for qualifier
122  if (payload != "BAD") m_qual = payload;
123  else m_qual.clear();
124  // check for iov
126  if (payload != "BAD") m_iov = payload;
127  else m_iov.clear();
128  // check for version
130  if (payload != "BAD") m_ver = payload;
131  else m_ver.clear();
132  ready = true;
133  }
134  }
135  else {
136  m_key = comp;
137  m_encoded = false;
138  std::cerr << "WARNING: No markers found in "
139  << comp << ". Treating as unencoded single key." << std::endl;
140  }
141  return ready;
142 }
143 
144 inline std::string
146 {
147  std::stringstream out;
148  if (m_encoded) {
149  out << keymark() << m_key << sep();
150  if (m_qual.size()>0) out << qualmark() << m_qual << sep();
151  if (m_iov.size()>0) out << iovmark() << m_iov << sep();
152  if (m_verstat && m_ver.size()>0) {
153  out << vermark() << m_ver << sep();
154  }
155  }
156  else out << m_key;
157  return out.str();
158 }
159 
160 inline std::string
161 TagMetadataKey::getpayload(const std::string key, const std::string comp)
162 {
163  std::string bad("BAD");
164  std::string payload;
165  // Look for named key being considered
166  std::string::size_type start = comp.find(key);
167  if (start != std::string::npos) {
168  // if key exists, then look for endmarker, need at least one after the @
169  // starting at key name position
170  std::string::size_type payend = comp.find(sep(),start);
171  std::string::size_type paystart = comp.find('@',start);
172  if (paystart<payend) {
173  // grab substring between @ and sep()
174  payload = comp.substr(start+keymark().size(),payend-start-keymark().size());
175  }
176  else {
177  std::cerr << "WARNING: missing sep() for key" << std::endl;
178  return bad;
179  }
180  }
181  return payload;
182 }
183 
184 #endif
bad
@ bad
Definition: SUSYToolsTester.cxx:95
plotting.yearwise_luminosity_vs_mu.comp
comp
Definition: yearwise_luminosity_vs_mu.py:24
TagMetadataKey::iovmark
static std::string iovmark()
Definition: TagMetadataKey.h:32
dqt_zlumi_alleff_HIST.iov
iov
Definition: dqt_zlumi_alleff_HIST.py:119
TagMetadataKey
Definition: TagMetadataKey.h:26
TagMetadataKey::setVersion
void setVersion(std::string ver)
Definition: TagMetadataKey.h:88
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
TagMetadataKey::qual
std::string qual() const
Definition: TagMetadataKey.h:97
TagMetadataKey::setEncoded
void setEncoded(bool flag)
Definition: TagMetadataKey.h:76
TagMetadataKey::TagMetadataKey
TagMetadataKey()
Definition: TagMetadataKey.h:67
TagMetadataKey::setIOV
void setIOV(std::string iov)
Definition: TagMetadataKey.h:85
TagMetadataKey::toString
std::string toString() const
Definition: TagMetadataKey.h:145
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
Pythia8_A14_NNPDF23LO_Var1Down_Common.ver
ver
Definition: Pythia8_A14_NNPDF23LO_Var1Down_Common.py:26
TagMetadataKey::m_ver
std::string m_ver
Definition: TagMetadataKey.h:61
TagMetadataKey::m_key
std::string m_key
Definition: TagMetadataKey.h:58
TagMetadataKey::m_encoded
bool m_encoded
Definition: TagMetadataKey.h:63
master.flag
bool flag
Definition: master.py:29
TagMetadataKey::fromString
bool fromString(std::string comp)
Definition: TagMetadataKey.h:106
TagMetadataKey::isVersioned
bool isVersioned()
Definition: TagMetadataKey.h:44
TagMetadataKey::setKey
void setKey(std::string key)
Definition: TagMetadataKey.h:79
TagMetadataKey::encoded
bool encoded() const
Definition: TagMetadataKey.h:91
TagMetadataKey::vermark
static std::string vermark()
Definition: TagMetadataKey.h:33
TagMetadataKey::m_iov
std::string m_iov
Definition: TagMetadataKey.h:60
PixelModuleFeMask_create_db.payload
string payload
Definition: PixelModuleFeMask_create_db.py:69
TagMetadataKey::key
std::string key() const
Definition: TagMetadataKey.h:94
TagMetadataKey::sep
static std::string sep()
Definition: TagMetadataKey.h:29
TagMetadataKey::qualmark
static std::string qualmark()
Definition: TagMetadataKey.h:31
TagMetadataKey::iov
std::string iov() const
Definition: TagMetadataKey.h:100
beamspotman.qual
qual
Definition: beamspotman.py:481
TagMetadataKey::m_qual
std::string m_qual
Definition: TagMetadataKey.h:59
TagMetadataKey::getpayload
std::string getpayload(const std::string key, const std::string comp)
Definition: TagMetadataKey.h:161
TagMetadataKey::setQual
void setQual(std::string qual)
Definition: TagMetadataKey.h:82
TagMetadataKey::m_verstat
bool m_verstat
Definition: TagMetadataKey.h:62
TagMetadataKey::ver
std::string ver() const
Definition: TagMetadataKey.h:103
TagMetadataKey::keymark
static std::string keymark()
Definition: TagMetadataKey.h:30
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37