1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
#ifndef Alignment_TrackerAlignment_AlignableModifier_H
#define Alignment_TrackerAlignment_AlignableModifier_H
#include <vector>
#include <string>
#include <utility>
#include "CondFormats/Alignment/interface/Definitions.h"
/// AlignableModifier is a helper class to modify the Alignables.
///
/// Configuration parameters are defined in this class.
class Alignable;
namespace CLHEP {
class DRand48Engine;
}
namespace edm {
class ParameterSet;
}
class AlignableModifier {
public:
/// Constructor
AlignableModifier();
/// Destructor
~AlignableModifier();
/// Modify given set of alignables according to parameters
bool modify(Alignable* alignable, const edm::ParameterSet& pSet);
/// Check if given parameter should be propagated
bool isPropagated(const std::string& parameterName) const;
/// Move alignable in global space according to parameters
void moveAlignable(Alignable* alignable, bool random, bool gaussian, float sigmaX, float sigmaY, float sigmaZ);
/// Move alignable in local space according to parameters
void moveAlignableLocal(Alignable* alignable, bool random, bool gaussian, float sigmaX, float sigmaY, float sigmaZ);
/// Rotate alignable in global space according to parameters
void rotateAlignable(
Alignable* alignable, bool random, bool gaussian, float sigmaPhiX, float sigmaPhiY, float sigmaPhiZ);
/// Rotate alignable in local space according to parameters
void rotateAlignableLocal(
Alignable* alignable, bool random, bool gaussian, float sigmaPhiX, float sigmaPhiY, float sigmaPhiZ);
/// Add the AlignmentPositionError (in global frame) to Alignable
void addAlignmentPositionError(Alignable* alignable, float dx, float dy, float dz);
/// Add the AlignmentPositionError (in local frame) to Alignable
void addAlignmentPositionErrorLocal(Alignable* alignable, float dx, float dy, float dz);
/// Add alignment position error resulting from rotation in global frame
void addAlignmentPositionErrorFromRotation(Alignable* alignable, float phiX, float phiY, float phiZ);
/// Add alignment position error resulting from rotation in local frame
void addAlignmentPositionErrorFromLocalRotation(Alignable* alignable, float phiX, float phiY, float phiZ);
/// Add alignment position error resulting from rotation in global frame
void addAlignmentPositionErrorFromRotation(Alignable* alignable, align::RotationType&);
/// Add alignment position error resulting from rotation in local frame
void addAlignmentPositionErrorFromLocalRotation(Alignable* alignable, align::RotationType&);
/// Decodes string and sets distribution accordingly ('fixed', 'flat' or 'gaussian').
void setDistribution(const std::string& distr);
/// Resets the generator seed according to the argument.
void setSeed(long seed);
/// Return a vector of random numbers (gaussian distribution)
const std::vector<float> gaussianRandomVector(float sigmaX, float sigmaY, float sigmaZ) const;
/// Return a vector of random numbers (flat distribution)
const std::vector<float> flatRandomVector(float sigmaX, float sigmaY, float sigmaZ) const;
/// Randomise all entries in 'rnd':
/// - either from gaussian with width rnd[i]
/// - or from flat distribution between -rnd[i] and rnd[i]
void randomise(std::vector<double>& rnd, bool gaussian) const;
private:
typedef std::pair<std::string, std::vector<double> > DeformationMemberType;
void addDeformation(
Alignable* alignable, const DeformationMemberType& deformation, bool random, bool gaussian, double scale);
/// Unique random number generator
CLHEP::DRand48Engine* theDRand48Engine;
/// Initialisation of all parameters
void init_();
int m_modified; // Indicates if a modification was performed
// All parameters (see AlignableModifier::init() for definitions)
std::string distribution_;
bool random_, gaussian_, setError_;
bool setRotations_, setTranslations_;
long seed_;
double scaleError_, scale_;
double phiX_, phiY_, phiZ_;
double phiXlocal_, phiYlocal_, phiZlocal_;
double dX_, dY_, dZ_;
double dXlocal_, dYlocal_, dZlocal_;
DeformationMemberType deformation_;
double twist_, shear_;
};
#endif //AlignableModifier_H
|