CMS 3D CMS Logo

SiStripGainFromAsciiFile.cc
Go to the documentation of this file.
4 
6 
8 
9 #include <iostream>
10 #include <fstream>
11 #include <sstream>
12 
14  : ConditionDBWriter<SiStripApvGain>(iConfig) {
15  Asciifilename_ = iConfig.getParameter<std::string>("InputFileName");
16  referenceValue_ = iConfig.getParameter<double>("referenceValue");
18  "file", edm::FileInPath("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"));
19 }
20 
22  edm::LogInfo("SiStripGainFromAsciiFile::~SiStripGainFromAsciiFile");
23 }
24 
25 std::unique_ptr<SiStripApvGain> SiStripGainFromAsciiFile::getNewObject() {
26  auto obj = std::make_unique<SiStripApvGain>();
27 
28  std::stringstream ss;
29  ss.str("");
30  ss << "[SiStripGainFromAsciiFile::getNewObject]\n Reading Ascii File\n";
31  FILE* infile = fopen(Asciifilename_.c_str(), "r");
32  char line[4096];
33  if (infile) {
34  while (fgets(line, 4096, infile) != nullptr) {
35  uint32_t detid;
36  ModuleGain MG;
37  MG.apv[0] = 0.0;
38  MG.apv[1] = 0.0;
39  MG.apv[2] = 0.0;
40  MG.apv[3] = 0.0;
41  MG.apv[4] = 0.0;
42  MG.apv[5] = 0.0;
43  char* saveptr;
44  char* pch = strtok_r(line, " ", &saveptr);
45  int Arg = 0;
46  while (pch != nullptr) {
47  if (Arg == 0) {
48  sscanf(pch, "%d", &detid);
49  } else if (Arg <= 6) {
50  sscanf(pch, "%f", &(MG.apv[Arg - 1]));
51  } else {
52  //nothing to do here
53  }
54  pch = strtok_r(nullptr, " ", &saveptr);
55  Arg++;
56  }
57  ss << detid << " " << MG.apv[0] << " " << MG.apv[1] << " " << MG.apv[2] << " " << MG.apv[3] << " " << MG.apv[4]
58  << " " << MG.apv[5] << std::endl;
59  GainsMap.insert(std::pair<unsigned int, ModuleGain>(detid, MG));
60  }
61  fclose(infile);
62  edm::LogInfo("SiStripGainFromAsciiFile") << ss.str();
63  } else {
64  edm::LogError("SiStripGainFromAsciiFile")
65  << " [SiStripGainFromAsciiFile::getNewObject] Error opening file " << Asciifilename_ << std::endl;
66  assert(0);
67  }
68 
70 
71  const std::vector<uint32_t>& DetIds = reader.getAllDetIds();
72 
73  ss.str("");
74  ss << "[SiStripGainFromAsciiFile::getNewObject]\n Filling SiStripApvGain object";
75  short nApvPair;
76  for (std::vector<uint32_t>::const_iterator it = DetIds.begin(); it != DetIds.end(); it++) {
77  ModuleGain MG;
78  if (DetId(*it).det() != DetId::Tracker)
79  continue;
80 
81  nApvPair = reader.getNumberOfApvsAndStripLength(*it).first / 2;
82 
83  ss << "Looking at detid " << *it << " nApvPairs " << nApvPair << std::endl;
84  auto iter = GainsMap.find(*it);
85  if (iter != GainsMap.end()) {
86  MG = iter->second;
87  ss << " " << MG.apv[0] << " " << MG.apv[1] << " " << MG.apv[2] << " " << MG.apv[3] << " " << MG.apv[4] << " "
88  << MG.apv[5] << std::endl;
89  } else {
90  ss << "Hard reset for detid " << *it << std::endl;
92  }
93 
94  std::vector<float> DetGainsVector;
95 
96  if (nApvPair == 2) {
97  DetGainsVector.push_back(MG.apv[0] / referenceValue_);
98  DetGainsVector.push_back(MG.apv[1] / referenceValue_);
99  DetGainsVector.push_back(MG.apv[2] / referenceValue_);
100  DetGainsVector.push_back(MG.apv[3] / referenceValue_);
101  } else if (nApvPair == 3) {
102  DetGainsVector.push_back(MG.apv[0] / referenceValue_);
103  DetGainsVector.push_back(MG.apv[1] / referenceValue_);
104  DetGainsVector.push_back(MG.apv[2] / referenceValue_);
105  DetGainsVector.push_back(MG.apv[3] / referenceValue_);
106  DetGainsVector.push_back(MG.apv[4] / referenceValue_);
107  DetGainsVector.push_back(MG.apv[5] / referenceValue_);
108  } else {
109  edm::LogError("SiStripGainFromAsciiFile") << " SiStripGainFromAsciiFile::getNewObject] ERROR for detid " << *it
110  << " not expected number of APV pairs " << nApvPair << std::endl;
111  }
112 
113  SiStripApvGain::Range range(DetGainsVector.begin(), DetGainsVector.end());
114  if (!obj->put(*it, range)) {
115  edm::LogError("SiStripGainFromAsciiFile")
116  << " [SiStripGainFromAsciiFile::getNewObject] detid already exists" << std::endl;
117  ss << " [SiStripGainFromAsciiFile::getNewObject] detid already exists" << std::endl;
118  }
119  }
120  edm::LogInfo("SiStripGainFromAsciiFile") << ss.str();
121 
122  return obj;
123 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
SiStripGainFromAsciiFile(const edm::ParameterSet &)
reader
Definition: DQM.py:105
std::pair< ContainerIterator, ContainerIterator > Range
std::unique_ptr< SiStripApvGain > getNewObject() override
std::unordered_map< unsigned int, ModuleGain > GainsMap
Definition: DetId.h:17
std::string fullPath() const
Definition: FileInPath.cc:163
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46