File indexing completed on 2024-04-06 11:56:37
0001 #ifndef PEDESTEERER_H
0002 #define PEDESTEERER_H
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include <vector>
0017 #include <map>
0018 #include <set>
0019 #include <string>
0020
0021 #include <iosfwd>
0022
0023 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0024 #include "Alignment/CommonAlignment/interface/Utilities.h"
0025 #include "Alignment/CommonAlignment/interface/AlignableObjectId.h"
0026
0027 class Alignable;
0028 class AlignableTracker;
0029 class AlignableMuon;
0030 class AlignableExtras;
0031 class AlignmentParameterStore;
0032 class PedeLabelerBase;
0033 class PedeSteererWeakModeConstraints;
0034
0035
0036
0037 class PedeSteerer {
0038 public:
0039
0040
0041 PedeSteerer(AlignableTracker *aliTracker,
0042 AlignableMuon *aliMuon,
0043 AlignableExtras *aliExtras,
0044 AlignmentParameterStore *store,
0045 const PedeLabelerBase *labels,
0046 const edm::ParameterSet &config,
0047 const std::string &defaultDir,
0048 bool noSteerFiles);
0049
0050 ~PedeSteerer();
0051
0052
0053 bool isNoHiera(const Alignable *ali) const;
0054
0055
0056 void buildSubSteer(AlignableTracker *aliTracker, AlignableMuon *aliMuon, AlignableExtras *aliExtras);
0057
0058 std::string buildMasterSteer(const std::vector<std::string> &binaryFiles);
0059
0060 int runPede(const std::string &masterSteer) const;
0061
0062
0063 void correctToReferenceSystem();
0064 bool isCorrectToRefSystem(const align::Alignables &coordDefiners) const;
0065
0066 double cmsToPedeFactor(unsigned int parNum) const;
0067
0068 int parameterSign() const { return myParameterSign; }
0069
0070 const std::string &directory() const { return myDirectory; }
0071
0072 private:
0073 typedef std::map<const Alignable *, std::vector<float> > AlignablePresigmasMap;
0074
0075
0076
0077 bool checkParameterChoices(const align::Alignables &) const;
0078
0079
0080 unsigned int buildNoHierarchyCollection(const align::Alignables &);
0081
0082
0083
0084
0085 std::pair<unsigned int, unsigned int> fixParameters(const align::Alignables &, const std::string &file);
0086
0087
0088
0089 int fixParameter(Alignable *ali,
0090 unsigned int iRunRange,
0091 unsigned int iParam,
0092 char selector,
0093 std::ofstream *&filePtr,
0094 const std::string &fileName);
0095
0096
0097
0098 align::Alignables selectCoordinateAlis(const align::Alignables &) const;
0099
0100
0101 void defineCoordinates(const align::Alignables &, Alignable *aliMaster, const std::string &fileName);
0102
0103 unsigned int hierarchyConstraints(const align::Alignables &, const std::string &file);
0104 void hierarchyConstraint(const Alignable *ali, const align::Alignables &components, std::ofstream &file) const;
0105
0106
0107 unsigned int presigmas(const std::vector<edm::ParameterSet> &cffPresi,
0108 const std::string &fileName,
0109 const align::Alignables &,
0110 AlignableTracker *aliTracker,
0111 AlignableMuon *aliMuon,
0112 AlignableExtras *aliExtras);
0113
0114 unsigned int presigmasFile(const std::string &fileName,
0115 const align::Alignables &,
0116 const AlignablePresigmasMap &aliPresisMap);
0117
0118 std::string fileName(const std::string &addendum) const;
0119
0120 std::ofstream *createSteerFile(const std::string &name, bool addToList);
0121
0122
0123 const AlignmentParameterStore *myParameterStore;
0124 const PedeLabelerBase *myLabels;
0125 const AlignableObjectId alignableObjectId_;
0126
0127 const edm::ParameterSet myConfig;
0128 std::string myDirectory;
0129 std::string myRunDirectory;
0130 bool myNoSteerFiles;
0131 bool myIsSteerFileDebug;
0132 int myParameterSign;
0133 double theMinHieraConstrCoeff;
0134 unsigned int theMinHieraParPerConstr;
0135 unsigned int theConstrPrecision;
0136
0137 std::vector<std::string> mySteeringFiles;
0138
0139 std::set<const Alignable *> myNoHieraCollection;
0140 Alignable *theCoordMaster;
0141 align::Alignables theCoordDefiners;
0142 };
0143
0144 #endif