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 }
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
SiStripGainFromAsciiFile::fp_
edm::FileInPath fp_
Definition: SiStripGainFromAsciiFile.h:38
MessageLogger.h
SiStripGainFromAsciiFile::SiStripGainFromAsciiFile
SiStripGainFromAsciiFile(const edm::ParameterSet &)
Definition: SiStripGainFromAsciiFile.cc:13
SiStripGainFromAsciiFile::getNewObject
std::unique_ptr< SiStripApvGain > getNewObject() override
Definition: SiStripGainFromAsciiFile.cc:25
DetId::det
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
SiStripGainFromAsciiFile::GainsMap
std::unordered_map< unsigned int, ModuleGain > GainsMap
Definition: SiStripGainFromAsciiFile.h:40
SiStripGainFromAsciiFile::Asciifilename_
std::string Asciifilename_
Definition: SiStripGainFromAsciiFile.h:36
cms::cuda::assert
assert(be >=bs)
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
SiStripGainFromAsciiFile.h
SiStripDetInfoFileReader
Definition: SiStripDetInfoFileReader.h:30
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
DetId
Definition: DetId.h:17
edm::FileInPath
Definition: FileInPath.h:64
ConditionDBWriter
Definition: ConditionDBWriter.h:149
DQM.reader
reader
Definition: DQM.py:105
SiStripGainFromAsciiFile::ModuleGain::hard_reset
void hard_reset(float val)
Definition: SiStripGainFromAsciiFile.h:30
SiStripDetInfoFileReader.h
getGTfromDQMFile.obj
obj
Definition: getGTfromDQMFile.py:32
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SiStripGainFromAsciiFile::ModuleGain
Definition: SiStripGainFromAsciiFile.h:22
edm::ParameterSet
Definition: ParameterSet.h:47
DetId::Tracker
Definition: DetId.h:25
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
SiStripGainFromAsciiFile::~SiStripGainFromAsciiFile
~SiStripGainFromAsciiFile() override
Definition: SiStripGainFromAsciiFile.cc:21
DetId.h
SiStripApvGain::Range
std::pair< ContainerIterator, ContainerIterator > Range
Definition: SiStripApvGain.h:28
SiStripGainFromAsciiFile::referenceValue_
float referenceValue_
Definition: SiStripGainFromAsciiFile.h:37
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
timingPdfMaker.infile
infile
Definition: timingPdfMaker.py:350
ParameterSet.h
mps_splice.line
line
Definition: mps_splice.py:76
SiStripApvGain
Definition: SiStripApvGain.h:25
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:163
SiStripGainFromAsciiFile::ModuleGain::apv
float apv[6]
Definition: SiStripGainFromAsciiFile.h:23