CMS 3D CMS Logo

SiStripPopConHandlerUnitTestGain.h
Go to the documentation of this file.
1 #ifndef SISTRIPPOPCON_UNITTEST_HANDLER_GAIN_H
2 #define SISTRIPPOPCON_UNITTEST_HANDLER_GAIN_H
3 
9 
12 
16 
17 #include <sstream>
18 #include <vector>
19 #include <string>
20 #include <iostream>
21 #include <typeinfo>
22 #include <ctime>
23 
24 #include "CLHEP/Random/RandFlat.h"
25 #include "CLHEP/Random/RandGauss.h"
26 
30 
31 namespace popcon {
32 
33  template <typename T>
35  public:
36  enum DataType { UNDEFINED = 0, _Cabling = 1, _Pedestal = 2, _Noise = 3, _Threshold = 4, _BadStrip = 5, _Gain = 6 };
37 
38  //---------------------------------------
39  //
41  : m_name(pset.getUntrackedParameter<std::string>("name", "SiStripPopPopConConfigDbObjHandler")),
42  m_since(pset.getUntrackedParameter<uint32_t>("since", 5)),
43  m_debugMode(pset.getUntrackedParameter<bool>("debug", true)){};
44 
45  //---------------------------------------
46  //
48 
49  //---------------------------------------
50  //
51  void getNewObjects() override {
52  edm::LogInfo("SiStripPopPopConConfigDbObjHandler") << "[getNewObjects] for PopCon application " << m_name;
53 
54  if (m_debugMode) {
55  std::stringstream ss;
56  ss << "\n\n------- " << m_name << " - > getNewObjects\n";
57  if (this->tagInfo().size) {
58  //check whats already inside of database
59  ss << "got offlineInfo" << this->tagInfo().name << ", size " << this->tagInfo().size << " "
60  << this->tagInfo().token << " , last object valid since " << this->tagInfo().lastInterval.first
61  << " token " << this->tagInfo().lastPayloadToken << "\n\n UserText " << this->userTextLog()
62  << "\n LogDBEntry \n"
63  << this->logDBEntry().logId << "\n"
64  << this->logDBEntry().destinationDB << "\n"
65  << this->logDBEntry().provenance << "\n"
66  << this->logDBEntry().usertext << "\n"
67  << this->logDBEntry().iovtag << "\n"
68  << this->logDBEntry().iovtimetype << "\n"
69  << this->logDBEntry().payloadIdx << "\n"
70  << this->logDBEntry().payloadClass << "\n"
71  << this->logDBEntry().payloadToken << "\n"
72  << this->logDBEntry().exectime << "\n"
73  << this->logDBEntry().execmessage << "\n"
74  << "\n\n-- user text "
75  << this->logDBEntry().usertext.substr(this->logDBEntry().usertext.find_last_of("@"));
76  } else {
77  ss << " First object for this tag ";
78  }
79  edm::LogInfo("SiStripPopPopConConfigDbObjHandler") << ss.str();
80  }
81  if (isTransferNeeded())
83 
84  edm::LogInfo("SiStripPopPopConConfigDbObjHandler")
85  << "[getNewObjects] for PopCon application " << m_name << " Done\n--------------\n";
86  }
87 
88  //---------------------------------------
89  //
90  std::string id() const override { return m_name; }
91 
92  private:
93  //methods
94 
96  if (typeid(T) == typeid(SiStripFedCabling)) {
97  edm::LogInfo("SiStripPopPopConConfigDbObjHandler")
98  << "[getDataType] for PopCon application " << m_name << " " << typeid(T).name();
99  return _Cabling;
100  }
101  return UNDEFINED;
102  }
103 
104  //---------------------------------------
105  //
107  edm::LogInfo("SiStripPopPopConConfigDbObjHandler") << "[isTransferNeeded] checking for transfer" << std::endl;
108  std::stringstream ss_logdb, ss;
109  std::stringstream ss1;
110 
111  //get log information from previous upload
112  if (this->tagInfo().size)
113  ss_logdb << this->logDBEntry().usertext.substr(this->logDBEntry().usertext.find_last_of("@"));
114  else
115  ss_logdb << "";
116 
117  ss << "@ " << clock();
118 
119  if (!strcmp(ss.str().c_str(), ss_logdb.str().c_str())) {
120  //string are equal, no need to do transfer
121  edm::LogInfo("SiStripPopPopConConfigDbObjHandler")
122  << "[isTransferNeeded] the selected conditions are already uploaded in the last iov ("
123  << this->tagInfo().lastInterval.first << ") open for the object " << this->logDBEntry().payloadClass
124  << " in the db " << this->logDBEntry().destinationDB << " parameters: " << ss.str()
125  << "\n NO TRANSFER NEEDED";
126  return false;
127  }
128  this->m_userTextLog = ss.str();
129  edm::LogInfo("SiStripPopPopConConfigDbObjHandler")
130  << "[isTransferNeeded] the selected conditions will be uploaded: " << ss.str() << "\n A- " << ss.str()
131  << "\n B- " << ss_logdb.str() << "\n Fine";
132 
133  return true;
134  }
135 
136  //---------------------------------------
137  //
138  void setForTransfer() {
139  edm::LogInfo("SiStripPopPopConConfigDbObjHandler")
140  << "[setForTransfer] " << m_name << " getting data to be transferred " << std::endl;
141 
142  T* obj = nullptr;
143 
144  fillObject(obj);
145 
146  if (!this->tagInfo().size)
147  m_since = 1;
148  else if (m_debugMode)
149  m_since = this->tagInfo().lastInterval.first + 1;
150 
151  if (obj != nullptr) {
152  edm::LogInfo("SiStripPopPopConConfigDbObjHandler") << "setting since = " << m_since << std::endl;
153  this->m_to_transfer.push_back(std::make_pair(obj, m_since));
154  } else {
155  edm::LogError("SiStripPopPopConConfigDbObjHandler")
156  << "[setForTransfer] " << m_name << " : NULL pointer of obj " << typeid(T).name()
157  << " reported by SiStripCondObjBuilderFromDb\n Transfer aborted" << std::endl;
158  }
159  }
160 
161  private:
162  // data members
164  unsigned long long m_since;
167 
168  void fillObject(T*& obj) {
169  std::cout << __LINE__ << std::endl;
170 
171  if (typeid(T) == typeid(SiStripApvGain)) {
172  std::cout << __LINE__ << std::endl;
173 
174  obj = new SiStripApvGain();
175 
176  edm::FileInPath fp_("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat");
178 
179  const std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>& DetInfos = reader.getAllData();
180 
181  int count = -1;
182  for (std::map<uint32_t, SiStripDetInfoFileReader::DetInfo>::const_iterator it = DetInfos.begin();
183  it != DetInfos.end();
184  it++) {
185  count++;
186  //Generate Gains for det detid
187  SiStripApvGain::InputVector inputApvGain;
188  for (int apv = 0; apv < it->second.nApvs; ++(++apv)) {
189  float MeanTick = 555.;
190  float RmsTick = 55.;
191 
192  float tick = CLHEP::RandGauss::shoot(MeanTick, RmsTick);
193 
194  if (count < 6)
195  edm::LogInfo("SiStripGainBuilder") << "detid " << it->first << " \t"
196  << " APV " << apv << " \t" << tick << " \t" << std::endl;
197  inputApvGain.push_back(tick); //APV0
198  inputApvGain.push_back(tick); //APV1
199  }
200 
201  SiStripApvGain::Range gain_range(inputApvGain.begin(), inputApvGain.end());
202  if (!obj->put(it->first, gain_range))
203  edm::LogError("SiStripGainBuilder") << "[SiStripGainBuilder::analyze] detid already exists" << std::endl;
204  }
205  }
206  }
207  };
208 
209 } // namespace popcon
210 
211 #endif //SISTRIPPOPCON_UNITTEST_HANDLER_H
edm::Service< SiStripCondObjBuilderFromDb > condObjBuilder
size
Write out results.
std::string const & userTextLog() const
unsigned long long logId
Definition: Types.h:91
std::string provenance
Definition: Types.h:93
std::string payloadToken
Definition: Types.h:100
size_t size
Definition: Types.h:76
std::string execmessage
Definition: Types.h:102
reader
Definition: DQM.py:105
std::string name
Definition: Types.h:72
cond::ValidityInterval lastInterval
Definition: Types.h:74
std::string payloadClass
Definition: Types.h:99
cond::LogDBEntry_t const & logDBEntry() const
std::pair< ContainerIterator, ContainerIterator > Range
SiStripPopConHandlerUnitTestGain(const edm::ParameterSet &pset)
std::string destinationDB
Definition: Types.h:92
std::string exectime
Definition: Types.h:101
std::string lastPayloadToken
Definition: Types.h:75
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
std::vector< float > InputVector
unsigned int payloadIdx
Definition: Types.h:97
std::string fullPath() const
Definition: FileInPath.cc:163
std::string usertext
Definition: Types.h:94
long double T
std::string token
Definition: Types.h:73
cond::TagInfo_t const & tagInfo() const
std::string iovtimetype
Definition: Types.h:96
std::string iovtag
Definition: Types.h:95