File indexing completed on 2025-02-21 09:57:59
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef DD4HEP_ALIGNMENTSPROCESSOR_H
0014 #define DD4HEP_ALIGNMENTSPROCESSOR_H
0015
0016
0017 #include <DD4hep/ConditionsMap.h>
0018 #include <DD4hep/AlignmentData.h>
0019 #include <DD4hep/Alignments.h>
0020 #include <DD4hep/Printout.h>
0021
0022
0023 #include <memory>
0024
0025
0026 namespace dd4hep {
0027
0028
0029 namespace align {
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042 template <typename T> class AlignmentsProcessor : public Alignment::Processor {
0043 T& processor;
0044 public:
0045
0046 AlignmentsProcessor() = default;
0047
0048 AlignmentsProcessor(T& p) : processor(p) {}
0049
0050 AlignmentsProcessor(T&& p) = delete;
0051
0052 AlignmentsProcessor(AlignmentsProcessor&& copy) = default;
0053
0054 AlignmentsProcessor(const AlignmentsProcessor& copy) = default;
0055
0056 virtual ~AlignmentsProcessor() = default;
0057
0058 AlignmentsProcessor& operator=(const AlignmentsProcessor& copy) = default;
0059
0060 virtual int operator()(Alignment alignment) const override {
0061 return (processor)(alignment);
0062 }
0063 };
0064
0065 template <typename T> inline
0066 AlignmentsProcessor<typename std::remove_reference<T>::type> alignmentsProcessor(T&& obj)
0067 { return AlignmentsProcessor<typename std::remove_reference<T>::type>(obj); }
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081 template <typename T> class AlignmentsProcessorWrapper : public Alignment::Processor {
0082 std::unique_ptr<T> processor;
0083 public:
0084
0085 AlignmentsProcessorWrapper() = default;
0086
0087 AlignmentsProcessorWrapper(T* p) : processor(p) {}
0088
0089 AlignmentsProcessorWrapper(const AlignmentsProcessorWrapper& copy) = default;
0090
0091 virtual ~AlignmentsProcessorWrapper() = default;
0092
0093 AlignmentsProcessorWrapper& operator=(const AlignmentsProcessorWrapper& copy) = default;
0094
0095 virtual int operator()(Alignment c) const override {
0096 return (*(processor.get()))(c);
0097 }
0098 };
0099
0100 template <typename T> inline AlignmentsProcessorWrapper<T>* createProcessorWrapper(T* obj) {
0101 return new AlignmentsProcessorWrapper<T>(obj);
0102 }
0103
0104 template <typename T> inline AlignmentsProcessorWrapper<T> processorWrapper(T* obj) {
0105 return AlignmentsProcessorWrapper<T>(obj);
0106 }
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117 template <typename T> class DeltaCollector {
0118 public:
0119
0120 ConditionsMap& mapping;
0121
0122 T& deltas;
0123 public:
0124
0125 DeltaCollector(ConditionsMap& m, T& d) : mapping(m), deltas(d) {}
0126
0127 DeltaCollector(ConditionsMap& m, T&& p) = delete;
0128
0129 DeltaCollector(DeltaCollector&& copy) = default;
0130
0131 DeltaCollector(const DeltaCollector& copy) = default;
0132
0133 ~DeltaCollector() = default;
0134
0135 DeltaCollector& operator=(const DeltaCollector& copy) = default;
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145 virtual int operator()(DetElement de, int level=0) const final;
0146 };
0147
0148
0149 template <typename T> inline
0150 DeltaCollector<typename std::remove_reference<T>::type> deltaCollector(ConditionsMap& m, T&& deltas)
0151 { return DeltaCollector<typename std::remove_reference<T>::type>(m, deltas); }
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162 template <typename T> class AlignmentsCollector {
0163 public:
0164
0165 ConditionsMap& mapping;
0166
0167 T& alignments;
0168 public:
0169
0170 AlignmentsCollector(ConditionsMap& m, T& d) : mapping(m), alignments(d) {}
0171
0172 AlignmentsCollector(ConditionsMap& m, T&& p) = delete;
0173
0174 AlignmentsCollector(const AlignmentsCollector& copy) = default;
0175
0176 ~AlignmentsCollector() = default;
0177
0178 AlignmentsCollector& operator=(const AlignmentsCollector& copy) = default;
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188 virtual int operator()(DetElement de, int level=0) const final;
0189 };
0190
0191
0192 template <typename T> inline
0193 AlignmentsCollector<typename std::remove_reference<T>::type> alignmentsCollector(ConditionsMap& m, T&& alignments)
0194 { return AlignmentsCollector<typename std::remove_reference<T>::type>(m, alignments); }
0195
0196 }
0197 }
0198 #endif