CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MillePedeFileReader.cc
Go to the documentation of this file.
1 /*** Header file ***/
3 
4 /*** system includes ***/
5 #include <cmath> // include floating-point std::abs functions
6 #include <fstream>
7 
8 /*** core framework functionality ***/
10 
11 
12 
13 //=============================================================================
14 //=== PUBLIC METHOD IMPLEMENTATION ===
15 //=============================================================================
16 
19  millePedeLogFile_(config.getParameter<std::string>("millePedeLogFile")),
20  millePedeResFile_(config.getParameter<std::string>("millePedeResFile")),
21 
22  sigCut_ (config.getParameter<double>("sigCut")),
23  Xcut_ (config.getParameter<double>("Xcut")),
24  tXcut_ (config.getParameter<double>("tXcut")),
25  Ycut_ (config.getParameter<double>("Ycut")),
26  tYcut_ (config.getParameter<double>("tYcut")),
27  Zcut_ (config.getParameter<double>("Zcut")),
28  tZcut_ (config.getParameter<double>("tZcut")),
29  maxMoveCut_ (config.getParameter<double>("maxMoveCut")),
30  maxErrorCut_(config.getParameter<double>("maxErrorCut"))
31 {
32 }
33 
35 ::read() {
36  readMillePedeLogFile();
37  readMillePedeResultFile();
38 }
39 
42  return updateDB;
43 }
44 
45 
46 
47 //=============================================================================
48 //=== PRIVATE METHOD IMPLEMENTATION ===
49 //=============================================================================
50 
53 {
54  std::ifstream logFile;
55  logFile.open(millePedeLogFile_.c_str());
56 
57  if (logFile.is_open()) {
58  edm::LogInfo("MillePedeFileReader") << "Reading millepede log-file";
60 
61  while (getline(logFile, line)) {
62  std::string Nrec_string = "NREC =";
63 
64  if (line.find(Nrec_string) != std::string::npos) {
65  std::istringstream iss(line);
66  std::string trash;
67  iss >> trash >> trash >> Nrec;
68 
69  if (Nrec < 25000) {
70  updateDB = false;
71  }
72  }
73  }
74 
75  } else {
76  edm::LogError("MillePedeFileReader") << "Could not read millepede log-file.";
77 
78  updateDB = false;
79  Nrec = 0;
80  }
81 }
82 
85 {
86  updateDB = false;
87  std::ifstream resFile;
88  resFile.open(millePedeResFile_.c_str());
89 
90  if (resFile.is_open()) {
91  edm::LogInfo("MillePedeFileReader") << "Reading millepede result-file";
92  double Multiplier[6] = {10000.,10000.,10000.,1000000.,1000000.,1000000.};
93 
95  getline(resFile, line); // drop first line
96 
97  while (getline(resFile, line)) {
98  std::istringstream iss(line);
99 
100  std::vector<std::string> tokens;
102  while (iss >> token) {
103  tokens.push_back(token);
104  }
105 
106  if (tokens.size() > 4 /*3*/) {
107 
108  int alignable = std::stoi(tokens[0]);
109  int alignableIndex = alignable % 10 - 1;
110 
111  double ObsMove = std::stof(tokens[3]) * Multiplier[alignableIndex];
112  double ObsErr = std::stof(tokens[4]) * Multiplier[alignableIndex];
113 
114  int det = -1;
115 
116  if (alignable >= 60 && alignable <= 69) {
117  det = 2; // TPBHalfBarrel (x+)
118  } else if (alignable >= 8780 && alignable <= 8789) {
119  det = 3; // TPBHalfBarrel (x-)
120  } else if (alignable >= 17520 && alignable <= 17529) {
121  det = 4; // TPEHalfCylinder (x+,z+)
122  } else if (alignable >= 22380 && alignable <= 22389) {
123  det = 5; // TPEHalfCylinder (x-,z+)
124  } else if (alignable >= 27260 && alignable <= 27269) {
125  det = 0; // TPEHalfCylinder (x+,z-)
126  } else if (alignable >= 32120 && alignable <= 32129) {
127  det = 1; //TPEHalfCylinder (x-,z-)
128  } else {
129  continue;
130  }
131 
132  if (alignableIndex == 0 && det >= 0 && det <= 5) {
133  Xobs[det] = ObsMove;
134  XobsErr[det] = ObsErr;
135  } else if (alignableIndex == 1 && det >= 0 && det <= 5) {
136  Yobs[det] = ObsMove;
137  YobsErr[det] = ObsErr;
138  } else if (alignableIndex == 2 && det >= 0 && det <= 5) {
139  Zobs[det] = ObsMove;
140  ZobsErr[det] = ObsErr;
141  } else if (alignableIndex == 3 && det >= 0 && det <= 5) {
142  tXobs[det] = ObsMove;
143  tXobsErr[det] = ObsErr;
144  } else if (alignableIndex == 4 && det >= 0 && det <= 5) {
145  tYobs[det] = ObsMove;
146  tYobsErr[det] = ObsErr;
147  } else if (alignableIndex == 5 && det >= 0 && det <= 5) {
148  tZobs[det] = ObsMove;
149  tZobsErr[det] = ObsErr;
150  }
151 
152  if (std::abs(ObsMove) > maxMoveCut_) {
153  updateDB = false;
154  break;
155 
156  } else if (std::abs(ObsMove) > Cutoffs[alignableIndex]) {
157 
158  if (std::abs(ObsErr) > maxErrorCut_) {
159  updateDB = false;
160  break;
161  } else {
162  if (std::abs(ObsMove/ObsErr) < sigCut_) {
163  continue;
164  }
165  }
166  updateDB = true;
167  }
168  }
169  }
170  } else {
171  edm::LogError("MillePedeFileReader") << "Could not read millepede result-file.";
172 
173  updateDB = false;
174  Nrec = 0;
175  }
176 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
tuple logFile
Definition: heppy_check.py:39
MillePedeFileReader(const edm::ParameterSet &)