File indexing completed on 2024-04-06 11:56:29
0001 #ifndef Alignment_MillePedeAlignmentAlgorithm_PedeLabelerBase_h
0002 #define Alignment_MillePedeAlignmentAlgorithm_PedeLabelerBase_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0016
0017 #include "Alignment/CommonAlignment/interface/AlignableObjectId.h"
0018 #include "Alignment/CommonAlignment/interface/Utilities.h"
0019 #include "Alignment/CommonAlignmentAlgorithm/interface/AlignmentAlgorithmBase.h"
0020 #include "TrackingTools/TrajectoryState/interface/TrajectoryStateOnSurface.h"
0021
0022 #include "CondFormats/Common/interface/Time.h"
0023
0024 #include <vector>
0025
0026 class Alignable;
0027 class AlignableTracker;
0028 class AlignableMuon;
0029 class AlignableExtras;
0030 class IntegratedCalibrationBase;
0031
0032
0033
0034 class PedeLabelerBase {
0035 public:
0036 using RunNumber = align::RunNumber;
0037 using RunRange = align::RunRange;
0038 using RunRanges = align::RunRanges;
0039
0040 class TopLevelAlignables {
0041 public:
0042 TopLevelAlignables(AlignableTracker *aliTracker, AlignableMuon *aliMuon, AlignableExtras *extras)
0043 : aliTracker_(aliTracker), aliMuon_(aliMuon), aliExtras_(extras) {}
0044 AlignableTracker *aliTracker_;
0045 AlignableMuon *aliMuon_;
0046 AlignableExtras *aliExtras_;
0047 };
0048
0049
0050 PedeLabelerBase(const TopLevelAlignables &alignables, const edm::ParameterSet &config);
0051 virtual ~PedeLabelerBase() {}
0052
0053 virtual void addCalibrations(const std::vector<IntegratedCalibrationBase *> &iCals);
0054
0055
0056
0057
0058 virtual unsigned int alignableLabel(const Alignable *alignable) const = 0;
0059
0060
0061
0062
0063 virtual unsigned int alignableLabelFromParamAndInstance(const Alignable *alignable,
0064 unsigned int param,
0065 unsigned int instance) const = 0;
0066 virtual unsigned int lasBeamLabel(unsigned int lasBeamId) const = 0;
0067
0068 virtual unsigned int parameterLabel(unsigned int aliLabel, unsigned int parNum) const = 0;
0069
0070
0071 virtual unsigned int parameterLabel(Alignable *alignable,
0072 unsigned int parNum,
0073 const AlignmentAlgorithmBase::EventInfo &eventInfo,
0074 const TrajectoryStateOnSurface &tsos) const = 0;
0075
0076 virtual bool hasSplitParameters(Alignable *alignable) const = 0;
0077
0078 virtual unsigned int numberOfParameterInstances(Alignable *alignable, int param = -1) const = 0;
0079
0080 virtual unsigned int maxNumberOfParameterInstances() const = 0;
0081
0082 unsigned int parameterInstanceOffset() const { return theParamInstanceOffset; }
0083
0084
0085 virtual unsigned int paramNumFromLabel(unsigned int paramLabel) const = 0;
0086
0087 virtual unsigned int alignableLabelFromLabel(unsigned int label) const = 0;
0088
0089
0090 virtual Alignable *alignableFromLabel(unsigned int label) const = 0;
0091
0092
0093 virtual unsigned int lasBeamIdFromLabel(unsigned int label) const = 0;
0094
0095
0096 virtual std::pair<IntegratedCalibrationBase *, unsigned int> calibrationParamFromLabel(unsigned int label) const;
0097
0098 virtual const RunRange &runRangeFromLabel(unsigned int label) const { return theOpenRunRange; }
0099
0100
0101 virtual unsigned int firstFreeLabel() const;
0102
0103
0104 virtual unsigned int calibrationLabel(const IntegratedCalibrationBase *calib, unsigned int paramNum) const;
0105 const AlignableTracker *alignableTracker() const { return topLevelAlignables_.aliTracker_; }
0106 const AlignableMuon *alignableMuon() const { return topLevelAlignables_.aliMuon_; }
0107 const AlignableExtras *alignableExtras() const { return topLevelAlignables_.aliExtras_; }
0108
0109 static const unsigned int theMaxNumParam;
0110 static const unsigned int theParamInstanceOffset;
0111 static const unsigned int theMinLabel;
0112
0113 protected:
0114
0115
0116 virtual unsigned int firstNonAlignableLabel() const;
0117
0118
0119 const AlignableObjectId &objectIdProvider() const { return alignableObjectId_; }
0120
0121 const RunRange theOpenRunRange;
0122
0123 private:
0124 const TopLevelAlignables topLevelAlignables_;
0125 const AlignableObjectId alignableObjectId_;
0126
0127
0128 std::vector<std::pair<IntegratedCalibrationBase *, unsigned int> > theCalibrationLabels;
0129 };
0130
0131 struct AlignableComparator {
0132 using is_transparent = void;
0133 bool operator()(Alignable *a, Alignable *b) const { return a < b; }
0134 bool operator()(Alignable *a, const Alignable *b) const { return a < b; }
0135 bool operator()(const Alignable *a, Alignable *b) const { return a < b; }
0136 };
0137
0138 #endif