33 throw cms::Exception(
"TypeMismatch") <<
"Argument is not an AlignableMuon";
72 double scale_ = 0, scaleError_ = 0, phiX_ = 0, phiY_ = 0, phiZ_ = 0;
73 double dX_ = 0, dY_ = 0, dZ_ = 0;
75 std::ostringstream
error;
78 for ( std::vector<std::string>::iterator iParam = parameterNames.begin(); iParam != parameterNames.end(); iParam++ ) {
79 if ( (*iParam) ==
"scale" ) scale_ = Parameters.
getParameter<
double>( *iParam );
81 else if ( (*iParam) ==
"scaleError" ) scaleError_ = Parameters.
getParameter<
double>( *iParam );
82 else if ( (*iParam) ==
"phiX" ) phiX_ = Parameters.
getParameter<
double>( *iParam );
83 else if ( (*iParam) ==
"phiY" ) phiY_ = Parameters.
getParameter<
double>( *iParam );
84 else if ( (*iParam) ==
"phiZ" ) phiZ_ = Parameters.
getParameter<
double>( *iParam );
85 else if ( (*iParam) ==
"dX" ) dX_ = Parameters.
getParameter<
double>( *iParam );
86 else if ( (*iParam) ==
"dY" ) dY_ = Parameters.
getParameter<
double>( *iParam );
87 else if ( (*iParam) ==
"dZ" ) dZ_ = Parameters.
getParameter<
double>( *iParam );
90 if ( !error.str().length() ) error <<
"Unknown parameter name(s): ";
91 error <<
" " << *iParam;
95 param.push_back(scale_); param.push_back(scaleError_);
96 param.push_back(phiX_); param.push_back(phiY_);
97 param.push_back(phiZ_); param.push_back(dX_);
98 param.push_back(dY_); param.push_back(dZ_);
99 if( distribution_ ==
"gaussian" )
101 else if ( distribution_ ==
"flat" )
103 else if ( distribution_ ==
"fix" )
115 double scale_ = param[0];
double scaleError_ = param[1];
116 double phiX_ = param[2];
double phiY_ = param[3];
double phiZ_ = param[4];
117 double dX_ = param[5];
double dY_ = param[6];
double dZ_ = param[7];
118 double dist_ = param[8];
120 double dx = scale_*dX_;
double dy = scale_*dY_;
double dz = scale_*dZ_;
121 double phix = scale_*phiX_;
double phiy = scale_*phiY_;
double phiz = scale_*phiZ_;
122 double errorx = scaleError_*dX_;
double errory = scaleError_*dY_;
double errorz = scaleError_*dZ_;
123 double errorphix = scaleError_*phiX_;
double errorphiy = scaleError_*phiY_;
double errorphiz = scaleError_*phiZ_;
125 errorDisp.push_back(errorx); errorDisp.push_back(errory); errorDisp.push_back(errorz);
127 errorRotation.push_back(errorphix); errorRotation.push_back(errorphiy); errorRotation.push_back(errorphiz);
132 for(std::vector<Alignable *>::iterator iter = DTchambers.begin(); iter != DTchambers.end(); ++iter) {
134 index[myId.wheel()+2][myId.station()-1][myId.sector()-1] =
counter;
138 for(
int sector = 0; sector < 12; sector++) {
144 disp.push_back(disp_[0]); disp.push_back(disp_[1]); disp.push_back(disp_[2]);
145 rotation.push_back(rotation_[0]); rotation.push_back(rotation_[1]); rotation.push_back(rotation_[2]);
146 }
else if (dist_ == 1) {
149 disp.push_back(disp_[0]); disp.push_back(disp_[1]); disp.push_back(disp_[2]);
150 rotation.push_back(rotation_[0]); rotation.push_back(rotation_[1]); rotation.push_back(rotation_[2]);
152 disp.push_back(dx); disp.push_back(dy); disp.push_back(dz);
153 rotation.push_back(phix); rotation.push_back(phiy); rotation.push_back(phiz);
158 if(sector == 3 &&
station == 3) {
161 }
else if(sector == 9 &&
station == 3) {
177 double scale_ = param[0];
double scaleError_ = param[1];
178 double phiX_ = param[2];
double phiY_ = param[3];
double phiZ_ = param[4];
179 double dX_ = param[5];
double dY_ = param[6];
double dZ_ = param[7];
180 double dist_ = param[8];
182 double dx = scale_*dX_;
double dy = scale_*dY_;
double dz = scale_*dZ_;
183 double phix = scale_*phiX_;
double phiy = scale_*phiY_;
double phiz = scale_*phiZ_;
184 double errorx = scaleError_*dX_;
double errory = scaleError_*dY_;
double errorz = scaleError_*dZ_;
185 double errorphix = scaleError_*phiX_;
double errorphiy = scaleError_*phiY_;
double errorphiz = scaleError_*phiZ_;
187 errorDisp.push_back(errorx); errorDisp.push_back(errory); errorDisp.push_back(errorz);
189 errorRotation.push_back(errorphix); errorRotation.push_back(errorphiy); errorRotation.push_back(errorphiz);
191 int index[2][4][4][36];
192 int sector_index[2][4][4][36];
195 for(std::vector<Alignable *>::iterator iter = CSCchambers.begin(); iter != CSCchambers.end(); ++iter) {
196 CSCDetId myId((*iter)->geomDetId().rawId());
197 index[myId.endcap()-1][myId.station()-1][myId.ring()-1][myId.chamber()-1] =
counter;
203 for(
int sector = 1; sector < 7; sector++) {
209 disp.push_back(disp_[0]); disp.push_back(disp_[1]); disp.push_back(disp_[2]);
210 rotation.push_back(rotation_[0]); rotation.push_back(rotation_[1]); rotation.push_back(rotation_[2]);
211 }
else if (dist_ == 1) {
214 disp.push_back(disp_[0]); disp.push_back(disp_[1]); disp.push_back(disp_[2]);
215 rotation.push_back(rotation_[0]); rotation.push_back(rotation_[1]); rotation.push_back(rotation_[2]);
217 disp.push_back(dx); disp.push_back(dy); disp.push_back(dz);
218 rotation.push_back(phix); rotation.push_back(phiy); rotation.push_back(phiz);
225 r_ring[0] = 0; r_ring[1] = 3;
227 r_ring[0] = 1; r_ring[1] = 2;
229 for(
int r_counter = 0; r_counter < 2; r_counter++) {
262 double scale_ = param[0];
double scaleError_ = param[1];
263 double phiX_ = param[2];
double phiY_ = param[3];
double phiZ_ = param[4];
264 double dX_ = param[5];
double dY_ = param[6];
double dZ_ = param[7];
265 double dist_ = param[8];
266 double dx = scale_*dX_;
double dy = scale_*dY_;
double dz = scale_*dZ_;
267 double phix = scale_*phiX_;
double phiy = scale_*phiY_;
double phiz = scale_*phiZ_;
268 double errorx = scaleError_*dX_;
double errory = scaleError_*dY_;
double errorz = scaleError_*dZ_;
269 double errorphix = scaleError_*phiX_;
double errorphiy = scaleError_*phiY_;
double errorphiz = scaleError_*phiZ_;
276 disp.push_back(disp_[0]); disp.push_back(disp_[1]); disp.push_back(disp_[2]);
277 rotation.push_back(rotation_[0]); rotation.push_back(rotation_[1]); rotation.push_back(rotation_[2]);
278 }
else if (dist_ == 1) {
281 disp.push_back(disp_[0]); disp.push_back(disp_[1]); disp.push_back(disp_[2]);
282 rotation.push_back(rotation_[0]); rotation.push_back(rotation_[1]); rotation.push_back(rotation_[2]);
284 disp.push_back(dx); disp.push_back(dy); disp.push_back(dz);
285 rotation.push_back(phix); rotation.push_back(phiy); rotation.push_back(phiz);
287 for(std::vector<Alignable *>::iterator iter = DTbarrel.begin(); iter != DTbarrel.end(); ++iter) {
293 for(std::vector<Alignable *>::iterator iter = CSCendcaps.begin(); iter != CSCendcaps.end(); ++iter) {
312 disp[0] += dispRot.
x(); disp[1] += dispRot.y(); disp[2] += dispRot.z();
T getParameter(std::string const &) const
Entry const & retrieve(char const *) const
edm::ParameterSet theScenario
Misalignment scenario to apply (from config file)
AlignableModifier theMuonModifier
void setSeed(long seed)
Resets the generator seed according to the argument.
align::Alignables CSCChambers()
void moveCSCSectors(const edm::ParameterSet &scenario)
this special method allows to move a CSCsector by a same amount
void addAlignmentPositionError(Alignable *alignable, float dx, float dy, float dz)
Add the AlignmentPositionError (in global frame) to Alignable.
AlignableMuon * theAlignableMuon
Pointer to alignable Muon object.
align::Alignables DTBarrel()
const std::vector< float > gaussianRandomVector(float sigmaX, float sigmaY, float sigmaZ) const
Return a vector of random numbers (gaussian distribution)
void moveMuon(const edm::ParameterSet &scenario)
this special method allows to move the complete muon system by a same amount
void moveChamberInSector(Alignable *, const align::Scalars &, const align::Scalars &, const align::Scalars &, const align::Scalars &)
void moveAlignable(Alignable *alignable, bool random, bool gaussian, float sigmaX, float sigmaY, float sigmaZ)
Move alignable in global space according to parameters.
align::Scalars extractParameters(const edm::ParameterSet &, const char *)
align::Alignables CSCEndcaps()
vector< ParameterSet > Parameters
static int sectorFromTriggerLabels(int TriggerSector, int TriggerSubSector, int station)
align::Alignables DTChambers()
std::vector< Scalar > Scalars
MuonScenarioBuilder(Alignable *alignable)
Constructor.
Allows conversion between type and name, and vice-versa.
std::vector< std::string > getParameterNames() const
const std::vector< float > flatRandomVector(float sigmaX, float sigmaY, float sigmaZ) const
Return a vector of random numbers (flat distribution)
void decodeMovements_(const edm::ParameterSet &pSet, const std::vector< Alignable * > &alignables)
Decode movements defined in given parameter set for given set of alignables.
void moveDTSectors(const edm::ParameterSet &scenario)
This special method allows to move a DTsector by a same amount.
void rotateAlignable(Alignable *alignable, bool random, bool gaussian, float sigmaPhiX, float sigmaPhiY, float sigmaPhiZ)
Rotate alignable in global space according to parameters.
AlignableModifier theModifier
Helper class for random movements.
Base class to build a scenario from configuration and apply to either tracker or muon.
static int triggerSectorFromLabels(int station, int ring, int chamber)
void addAlignmentPositionErrorFromRotation(Alignable *alignable, float phiX, float phiY, float phiZ)
Add alignment position error resulting from rotation in global frame.
static int triggerSubSectorFromLabels(int station, int chamber)
static std::atomic< unsigned int > counter
void applyScenario(const edm::ParameterSet &scenario) override
Apply misalignment scenario to the Muon.
const PositionType & globalPosition() const
Return the global position of the object.
int theModifierCounter
Counter for applied modification.
Constructor of the full muon geometry.
bool hasParameter_(const std::string &name, const edm::ParameterSet &pSet) const
Check if given parameter exists in parameter set.
const BasicVectorType & basicVector() const
edm::ParameterSet getParameterSet_(const std::string &name, const edm::ParameterSet &pSet) const