test
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  PedeSuccess = false;
71  Movements = false;
72  Error = false;
73  Significant = false;
74  updateDB = false;
75  }
76  }
77  }
78 
79  } else {
80  edm::LogError("MillePedeFileReader") << "Could not read millepede log-file.";
81 
82  PedeSuccess = false;
83  Movements = false;
84  Error = false;
85  Significant = false;
86  updateDB = false;
87  Nrec = 0;
88  }
89 }
90 
93 {
94  std::ifstream resFile;
95  resFile.open(millePedeResFile_.c_str());
96 
97  if (resFile.is_open()) {
98  edm::LogInfo("MillePedeFileReader") << "Reading millepede result-file";
99  double Multiplier[6] = {10000.,10000.,10000.,1000000.,1000000.,1000000.};
100 
102  getline(resFile, line); // drop first line
103 
104  while (getline(resFile, line)) {
105  std::istringstream iss(line);
106 
107  std::vector<std::string> tokens;
109  while (iss >> token) {
110  tokens.push_back(token);
111  }
112 
113  if (tokens.size() > 4 /*3*/) {
114  PedeSuccess = true;
115 
116  int alignable = std::stoi(tokens[0]);
117  int alignableIndex = alignable % 10 - 1;
118 
119  double ObsMove = std::stof(tokens[3]) * Multiplier[alignableIndex];
120  double ObsErr = std::stof(tokens[4]) * Multiplier[alignableIndex];
121 
122  int det = -1;
123 
124  if (alignable >= 60 && alignable <= 69) {
125  det = 2; // TPBHalfBarrel (x+)
126  } else if (alignable >= 8780 && alignable <= 8789) {
127  det = 3; // TPBHalfBarrel (x-)
128  } else if (alignable >= 17520 && alignable <= 17529) {
129  det = 4; // TPEHalfCylinder (x+,z+)
130  } else if (alignable >= 22380 && alignable <= 22389) {
131  det = 5; // TPEHalfCylinder (x-,z+)
132  } else if (alignable >= 27260 && alignable <= 27269) {
133  det = 0; // TPEHalfCylinder (x+,z-)
134  } else if (alignable >= 32120 && alignable <= 32129) {
135  det = 1; //TPEHalfCylinder (x-,z-)
136  } else {
137  continue;
138  }
139 
140  if (alignableIndex == 0 && det >= 0 && det <= 5) {
141  Xobs[det] = ObsMove;
142  XobsErr[det] = ObsErr;
143  } else if (alignableIndex == 1 && det >= 0 && det <= 5) {
144  Yobs[det] = ObsMove;
145  YobsErr[det] = ObsErr;
146  } else if (alignableIndex == 2 && det >= 0 && det <= 5) {
147  Zobs[det] = ObsMove;
148  ZobsErr[det] = ObsErr;
149  } else if (alignableIndex == 3 && det >= 0 && det <= 5) {
150  tXobs[det] = ObsMove;
151  tXobsErr[det] = ObsErr;
152  } else if (alignableIndex == 4 && det >= 0 && det <= 5) {
153  tYobs[det] = ObsMove;
154  tYobsErr[det] = ObsErr;
155  } else if (alignableIndex == 5 && det >= 0 && det <= 5) {
156  tZobs[det] = ObsMove;
157  tZobsErr[det] = ObsErr;
158  }
159 
160  if (std::abs(ObsMove) > maxMoveCut_) {
161  Movements = false;
162  Error = false;
163  Significant = false;
164  updateDB = false;
165  HitMax = false;
166  continue;
167 
168  } else if (std::abs(ObsMove) > Cutoffs[alignableIndex]) {
169  Movements = true;
170 
171  if (std::abs(ObsErr) > maxErrorCut_) {
172  Error = false;
173  Significant = false;
174  updateDB = false;
175  HitErrorMax = true;
176  continue;
177  } else {
178  Error = true;
179  if (std::abs(ObsMove/ObsErr) > sigCut_) {
180  Significant = true;
181  }
182  }
183  }
184  updateDB = true;
185  }
186  }
187  } else {
188  edm::LogError("MillePedeFileReader") << "Could not read millepede result-file.";
189 
190  PedeSuccess = false;
191  Movements = false;
192  Error = false;
193  Significant = false;
194  updateDB = false;
195  Nrec = 0;
196  }
197 }
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
tuple logFile
Definition: heppy_check.py:39
MillePedeFileReader(const edm::ParameterSet &)