File indexing completed on 2024-10-10 23:04:47
0001 #ifndef ALIGNMENT_MILLEPEDEALIGNMENTALGORITHM_INTERFACE_MILLEPEDEFILEREADER_H_
0002 #define ALIGNMENT_MILLEPEDEALIGNMENTALGORITHM_INTERFACE_MILLEPEDEFILEREADER_H_
0003
0004
0005 #include <array>
0006 #include <string>
0007 #include <iostream>
0008
0009
0010 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0011 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0012 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0013
0014
0015 #include "Alignment/MillePedeAlignmentAlgorithm/interface/PedeLabelerBase.h"
0016 #include "CondFormats/PCLConfig/interface/AlignPCLThresholdsHG.h"
0017 #include "Geometry/TrackerGeometryBuilder/interface/PixelTopologyMap.h"
0018
0019
0020 #include "CondFormats/SiPixelObjects/interface/SiPixelQuality.h"
0021
0022 struct mpPCLresults {
0023 private:
0024 bool m_isHG;
0025 bool m_isDBUpdated;
0026 bool m_isDBUpdateVetoed;
0027 int m_nRecords;
0028 int m_exitCode;
0029 std::string m_exitMessage;
0030 std::bitset<4> m_updateBits;
0031
0032 public:
0033 mpPCLresults(bool isDBUpdated,
0034 bool isDBUpdateVetoed,
0035 int nRecords,
0036 int exitCode,
0037 std::string exitMessage,
0038 std::bitset<4> updateBits,
0039 bool isHG)
0040 : m_isHG(isHG),
0041 m_isDBUpdated(isDBUpdated),
0042 m_isDBUpdateVetoed(isDBUpdateVetoed),
0043 m_nRecords(nRecords),
0044 m_exitCode(exitCode),
0045 m_exitMessage(exitMessage),
0046 m_updateBits(updateBits) {}
0047
0048 const bool isHighGranularity() { return m_isHG; }
0049 const bool getDBUpdated() { return m_isDBUpdated; }
0050 const bool getDBVetoed() { return m_isDBUpdateVetoed; }
0051 const bool exceedsThresholds() { return m_updateBits.test(0); }
0052 const bool exceedsCutoffs() { return m_updateBits.test(1); }
0053 const bool exceedsMaxError() { return m_updateBits.test(2); }
0054 const bool belowSignificance() { return m_updateBits.test(3); }
0055 const int getNRecords() { return m_nRecords; }
0056 const int getExitCode() { return m_exitCode; }
0057 const std::string getExitMessage() { return m_exitMessage; }
0058
0059 void print() {
0060 edm::LogInfo("MillePedeFileReader") << " is DB updated: " << m_isDBUpdated
0061 << " is DB update vetoed: " << m_isDBUpdateVetoed << " nRecords: " << m_nRecords
0062 << " exitCode: " << m_exitCode << " (" << m_exitMessage << ")" << std::endl;
0063 }
0064 };
0065
0066 class MillePedeFileReader {
0067
0068 public:
0069 explicit MillePedeFileReader(const edm::ParameterSet&,
0070 const std::shared_ptr<const PedeLabelerBase>&,
0071 const std::shared_ptr<const AlignPCLThresholdsHG>&,
0072 const std::shared_ptr<const PixelTopologyMap>&,
0073 const std::shared_ptr<const SiPixelQuality>&);
0074
0075 virtual ~MillePedeFileReader() = default;
0076
0077 static void fillPSetDescription(edm::ParameterSetDescription& desc);
0078
0079 void read();
0080 bool storeAlignments();
0081
0082 enum { SIZE_LG_STRUCTS = 6, SIZE_HG_STRUCTS = 820 };
0083
0084 const std::array<double, SIZE_LG_STRUCTS>& getXobs() const { return Xobs_; }
0085 const std::array<double, SIZE_LG_STRUCTS>& getXobsErr() const { return XobsErr_; }
0086 const std::array<double, SIZE_LG_STRUCTS>& getTXobs() const { return tXobs_; }
0087 const std::array<double, SIZE_LG_STRUCTS>& getTXobsErr() const { return tXobsErr_; }
0088
0089 const std::array<double, SIZE_LG_STRUCTS>& getYobs() const { return Yobs_; }
0090 const std::array<double, SIZE_LG_STRUCTS>& getYobsErr() const { return YobsErr_; }
0091 const std::array<double, SIZE_LG_STRUCTS>& getTYobs() const { return tYobs_; }
0092 const std::array<double, SIZE_LG_STRUCTS>& getTYobsErr() const { return tYobsErr_; }
0093
0094 const std::array<double, SIZE_LG_STRUCTS>& getZobs() const { return Zobs_; }
0095 const std::array<double, SIZE_LG_STRUCTS>& getZobsErr() const { return ZobsErr_; }
0096 const std::array<double, SIZE_LG_STRUCTS>& getTZobs() const { return tZobs_; }
0097 const std::array<double, SIZE_LG_STRUCTS>& getTZobsErr() const { return tZobsErr_; }
0098
0099 const std::array<double, SIZE_HG_STRUCTS>& getXobs_HG() const { return Xobs_HG_; }
0100 const std::array<double, SIZE_HG_STRUCTS>& getXobsErr_HG() const { return XobsErr_HG_; }
0101 const std::array<double, SIZE_HG_STRUCTS>& getTXobs_HG() const { return tXobs_HG_; }
0102 const std::array<double, SIZE_HG_STRUCTS>& getTXobsErr_HG() const { return tXobsErr_HG_; }
0103
0104 const std::array<double, SIZE_HG_STRUCTS>& getYobs_HG() const { return Yobs_HG_; }
0105 const std::array<double, SIZE_HG_STRUCTS>& getYobsErr_HG() const { return YobsErr_HG_; }
0106 const std::array<double, SIZE_HG_STRUCTS>& getTYobs_HG() const { return tYobs_HG_; }
0107 const std::array<double, SIZE_HG_STRUCTS>& getTYobsErr_HG() const { return tYobsErr_HG_; }
0108
0109 const std::array<double, SIZE_HG_STRUCTS>& getZobs_HG() const { return Zobs_HG_; }
0110 const std::array<double, SIZE_HG_STRUCTS>& getZobsErr_HG() const { return ZobsErr_HG_; }
0111 const std::array<double, SIZE_HG_STRUCTS>& getTZobs_HG() const { return tZobs_HG_; }
0112 const std::array<double, SIZE_HG_STRUCTS>& getTZobsErr_HG() const { return tZobsErr_HG_; }
0113
0114 const AlignPCLThresholdsHG::threshold_map getThresholdMap() const { return theThresholds_.get()->getThreshold_Map(); }
0115
0116 const int binariesAmount() const { return binariesAmount_; }
0117
0118 const mpPCLresults getResults() const {
0119 return mpPCLresults(updateDB_, vetoUpdateDB_, Nrec_, exitCode_, exitMessage_, updateBits_, isHG_);
0120 }
0121
0122 const std::map<std::string, std::array<bool, 6>>& getResultsHG() const { return fractionExceeded_; }
0123
0124 private:
0125
0126
0127
0128 enum class PclHLS : int {
0129 NotInPCL = -1,
0130 TPEHalfCylinderXplusZminus = 0,
0131 TPEHalfCylinderXminusZminus = 1,
0132 TPBHalfBarrelXplus = 2,
0133 TPBHalfBarrelXminus = 3,
0134 TPEHalfCylinderXplusZplus = 4,
0135 TPEHalfCylinderXminusZplus = 5,
0136 TPBLadderLayer1 = 6,
0137 TPBLadderLayer2 = 7,
0138 TPBLadderLayer3 = 8,
0139 TPBLadderLayer4 = 9,
0140 TPEPanelDisk1 = 10,
0141 TPEPanelDisk2 = 11,
0142 TPEPanelDisk3 = 12,
0143 TPEPanelDiskM1 = 13,
0144 TPEPanelDiskM2 = 14,
0145 TPEPanelDiskM3 = 15,
0146 };
0147
0148
0149
0150
0151 void readMillePedeEndFile();
0152 void readMillePedeLogFile();
0153 void readMillePedeResultFile();
0154 PclHLS getHLS(const Alignable*);
0155 std::string getStringFromHLS(PclHLS HLS);
0156 int getIndexForHG(align::ID id, PclHLS HLS);
0157 void initializeIndexHelper();
0158 bool isAlignableActive(const Alignable* alignable, const std::shared_ptr<const SiPixelQuality>& pixelQual);
0159
0160
0161
0162
0163
0164 const std::shared_ptr<const PedeLabelerBase> pedeLabeler_;
0165
0166
0167 const std::shared_ptr<const AlignPCLThresholdsHG> theThresholds_;
0168
0169
0170 const std::shared_ptr<const PixelTopologyMap> pixelTopologyMap_;
0171
0172
0173 const bool ignoreInactiveAlignables_;
0174
0175
0176 const std::shared_ptr<const SiPixelQuality> quality_;
0177
0178
0179 std::string dirName_;
0180
0181
0182 const std::string millePedeEndFile_;
0183 const std::string millePedeLogFile_;
0184 const std::string millePedeResFile_;
0185
0186
0187 static constexpr std::array<double, 6> multiplier_ = {{10000.,
0188 10000.,
0189 10000.,
0190 1000000.,
0191 1000000.,
0192 1000000.}};
0193
0194 bool updateDB_{false};
0195 bool vetoUpdateDB_{false};
0196 const bool isHG_;
0197
0198
0199
0200
0201
0202
0203 std::bitset<4> updateBits_;
0204
0205
0206 int binariesAmount_{0};
0207
0208
0209 std::map<std::string, std::array<bool, 6>> fractionExceeded_;
0210
0211 int Nrec_{0};
0212 int exitCode_{-1};
0213 std::string exitMessage_{""};
0214
0215 std::array<double, SIZE_LG_STRUCTS> Xobs_ = std::array<double, SIZE_LG_STRUCTS>();
0216 std::array<double, SIZE_LG_STRUCTS> XobsErr_ = std::array<double, SIZE_LG_STRUCTS>();
0217 std::array<double, SIZE_LG_STRUCTS> tXobs_ = std::array<double, SIZE_LG_STRUCTS>();
0218 std::array<double, SIZE_LG_STRUCTS> tXobsErr_ = std::array<double, SIZE_LG_STRUCTS>();
0219
0220 std::array<double, SIZE_LG_STRUCTS> Yobs_ = std::array<double, SIZE_LG_STRUCTS>();
0221 std::array<double, SIZE_LG_STRUCTS> YobsErr_ = std::array<double, SIZE_LG_STRUCTS>();
0222 std::array<double, SIZE_LG_STRUCTS> tYobs_ = std::array<double, SIZE_LG_STRUCTS>();
0223 std::array<double, SIZE_LG_STRUCTS> tYobsErr_ = std::array<double, SIZE_LG_STRUCTS>();
0224
0225 std::array<double, SIZE_LG_STRUCTS> Zobs_ = std::array<double, SIZE_LG_STRUCTS>();
0226 std::array<double, SIZE_LG_STRUCTS> ZobsErr_ = std::array<double, SIZE_LG_STRUCTS>();
0227 std::array<double, SIZE_LG_STRUCTS> tZobs_ = std::array<double, SIZE_LG_STRUCTS>();
0228 std::array<double, SIZE_LG_STRUCTS> tZobsErr_ = std::array<double, SIZE_LG_STRUCTS>();
0229
0230 std::array<double, SIZE_HG_STRUCTS> Xobs_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0231 std::array<double, SIZE_HG_STRUCTS> XobsErr_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0232 std::array<double, SIZE_HG_STRUCTS> tXobs_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0233 std::array<double, SIZE_HG_STRUCTS> tXobsErr_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0234
0235 std::array<double, SIZE_HG_STRUCTS> Yobs_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0236 std::array<double, SIZE_HG_STRUCTS> YobsErr_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0237 std::array<double, SIZE_HG_STRUCTS> tYobs_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0238 std::array<double, SIZE_HG_STRUCTS> tYobsErr_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0239
0240 std::array<double, SIZE_HG_STRUCTS> Zobs_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0241 std::array<double, SIZE_HG_STRUCTS> ZobsErr_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0242 std::array<double, SIZE_HG_STRUCTS> tZobs_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0243 std::array<double, SIZE_HG_STRUCTS> tZobsErr_HG_ = std::array<double, SIZE_HG_STRUCTS>();
0244
0245 std::unordered_map<PclHLS, std::pair<int, int>> indexHelper;
0246 };
0247
0248 const std::array<std::string, 8> coord_str = {{"X", "Y", "Z", "theta_X", "theta_Y", "theta_Z", "extra_DOF", "none"}};
0249 inline std::ostream& operator<<(std::ostream& os, const AlignPCLThresholdsHG::coordType& c) {
0250 if (c >= AlignPCLThresholdsHG::endOfTypes || c < AlignPCLThresholdsHG::X)
0251 return os << "unrecongnized coordinate";
0252 return os << coord_str[c];
0253 }
0254
0255 #endif