CMS 3D CMS Logo

EntryAngleAffAngles.cc
Go to the documentation of this file.
1 // COCOA class implementation file
2 //Id: EntryLengthAffAngles.C
3 //CAT: Model
4 //
5 // History: v1.0
6 // Pedro Arce
7 
11 
12 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
14  : EntryAngle( type )
15 {
16 }
17 
18 
19 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
21 {
22  ALIstring nn = "Angles ";
23  nn += name;
24  setName( nn );
25 }
26 
27 
28 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
29 //@@
30 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
32 {
33  XYZcoor coor = XCoor;
34  ALIint namelength = name().length()-1;
35  //- std::cout << this << "ENtryAnglesAffAngle" << name_ << namelength <<std::endl;
36  if ( name_[namelength] == 'X' ) {
37  coor = XCoor;
38  } else if ( name_[namelength] == 'Y' ) {
39  coor = YCoor;
40  } else if ( name_[namelength] == 'Z' ) {
41  coor = ZCoor;
42  }
43 
45  if(gomgr->GlobalOptions()["rotateAroundLocal"] == 0) {
47  }else {
49  }
50 
51 }
52 
53 
54 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
56 {
57  ALIint namelength = name().length()-1;
58  //- std::cout << this << "ENtryAnglesAffAngle" << name_ << namelength <<std::endl;
59  if ( name_[namelength] == 'X' ) {
60  //- std::cout << "displaX";
62  } else if ( name_[namelength] == 'Y' ) {
63  //- std::cout << "displaY";
65  } else if ( name_[namelength] == 'Z' ) {
67  }
68 
69 }
70 
71 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
73 {
74  ALIint namelength = name().length()-1;
75  if(ALIUtils::debug >= 5) std::cout << this << "ENtryAnglesAffAngle displaceOriginalOriginal" << name_ <<std::endl;
76  if ( name_[namelength] == 'X' ) {
77  //- std::cout << "displaX";
79  } else if ( name_[namelength] == 'Y' ) {
80  //- std::cout << "displaY";
82  } else if ( name_[namelength] == 'Z' ) {
84  }
85 
86 }
87 
88 
89 
90 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
92 {
93 
94  // std::cout << " EntryAngleAffAngles::valueDisplaced() parent " << OptOCurrent()->parent()->name() << std::endl;
95  // ALIUtils::dumprm( OptOCurrent()->parent()->rmGlob() , " parent RmGlob ");
96  if(ALIUtils::debug >= 5) {
97  std::cout << " EntryAngleAffAngles::valueDisplaced() parent opto " << OptOCurrent()->parent()->name() << std::endl;
98  ALIUtils::dumprm( OptOCurrent()->rmGlob() , " RmGlob ");
99  ALIUtils::dumprm( OptOCurrent()->rmGlobOriginal() , " RmGlobOriginal ");
100  ALIUtils::dumprm( OptOCurrent()->parent()->rmGlobOriginal() , " parent RmGlobOriginal ");
101  }
102 
103  CLHEP::HepRotation diffRm = OptOCurrent()->rmGlob() * OptOCurrent()->rmGlobOriginal().inverse();
104  CLHEP::HepRotation rmLocal = diffRm * OptOCurrent()->parent()->rmGlobOriginal().inverse();
105  std::vector<double> localrot = OptOCurrent()->getRotationAnglesFromMatrix( rmLocal, OptOCurrent()->CoordinateEntryList() );
106  if(ALIUtils::debug >= 5) {
107  ALIUtils::dumprm( diffRm , " diffRm ");
108  ALIUtils::dumprm( rmLocal , " rmLocal ");
109  std::cout << " localrot " << localrot[0] << " " << localrot[1] << " " << localrot[2] << std::endl;
110  }
111 
112  if( name() == "angles_X" ) {
113  return localrot[0];
114  }else if( name() == "angles_Y" ) {
115  return localrot[1];
116  }else if( name() == "angles_Z" ) {
117  return localrot[2];
118  }
119 
120  /*
121  CLHEP::HepRotation rmLocalOrig = OptOCurrent()->parent()->rmGlobOriginal().inverse() * OptOCurrent()->rmGlobOriginal();
122 
123  CLHEP::HepRotation rmLocal = OptOCurrent()->parent()->rmGlob().inverse() * OptOCurrent()->rmGlob();
124  std::vector<double> localrot = OptOCurrent()->getRotationAnglesFromMatrix( rmLocal, OptOCurrent()->CoordinateEntryList() );
125 
126  std::cout << " localrot " << localrot[0] << " " << localrot[1] << " " << localrot[2] << std::endl;
127  std::cout << " localrotorig " << localrotorig[0] << " " << localrotorig[1] << " " << localrotorig[2] << std::endl;
128  ALIdouble diff;
129  CLHEP::Hep3Vector Xaxis(0.,0.,1.);
130  Xaxis = OptOCurrent()->parent()->rmGlob() * Xaxis;
131  CLHEP::Hep3Vector XaxisOrig(0.,0.,1.);
132  XaxisOrig = OptOCurrent()->parent()->rmGlobOriginal() * XaxisOrig;
133 
134  diff = fabs( checkDiff( Xaxis, XaxisOrig, localrot, localrotorig ) );
135 
136  //maybe X is not a good axis because the rotation is done precisely around X
137  if( diff <= 1.E-9 ){
138  CLHEP::Hep3Vector Yaxis(0.,1.,0.);
139  Yaxis = OptOCurrent()->parent()->rmGlob() * Yaxis;
140  CLHEP::Hep3Vector YaxisOrig(0.,1.,0.);
141  YaxisOrig = OptOCurrent()->parent()->rmGlobOriginal() * YaxisOrig;
142 
143  diff = fabs( checkDiff( Yaxis, YaxisOrig, localrot, localrotorig ) );
144  }
145 
146  return diff;
147  */
148 
149  return 0.; // to avoid warning
150 }
151 
152 
153 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
154 ALIdouble EntryAngleAffAngles::checkDiff( const CLHEP::Hep3Vector& _axis, const CLHEP::Hep3Vector& _axisOrig, const std::vector<double>& localrot, const std::vector<double>& localrotorig ) const
155 {
156  CLHEP::Hep3Vector axis = _axis;
157  CLHEP::Hep3Vector axisOrig = _axisOrig;
158  int inam = 0;
159  if( name() == "angles_X" ) {
160  inam = 1;
161  }else if( name() == "angles_Y" ) {
162  inam = 2;
163  }else if( name() == "angles_Z" ) {
164  inam = 3;
165  }
166  switch( inam ){
167  case 1:
168  axis.rotateX( localrot[0] );
169  axisOrig.rotateX( localrotorig[0] );
170  case 2:
171  axis.rotateY( localrot[1] );
172  axisOrig.rotateY( localrotorig[1] );
173  case 3:
174  axis.rotateZ( localrot[2] );
175  axisOrig.rotateZ( localrotorig[2] );
176  break;
177  }
178 
179  ALIdouble ang = axis.angle( axisOrig );
180 
181  /* }else if( name() == "angles_Y" ) {
182  return localrot[1] - localrotorig[1];
183  }else if( name() == "angles_Z" ) {
184  return localrot[2] - localrotorig[2];
185  }*/
186 
187  return ang;
188 }
189 
190 
type
Definition: HCALResponse.h:21
long double ALIdouble
Definition: CocoaGlobals.h:11
void displaceRmGlobOriginalOriginal(const OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
static void dumprm(const CLHEP::HepRotation &rm, const std::string &msg, std::ostream &out=std::cout)
Definition: ALIUtils.cc:77
int ALIint
Definition: CocoaGlobals.h:15
void setName(const ALIstring &name)
Definition: Entry.h:75
static ALIint debug
Definition: ALIUtils.h:36
void displace(ALIdouble disp) override
static GlobalOptionMgr * getInstance()
virtual void FillName(const ALIstring &name)
XYZcoor
Definition: OpticalObject.h:33
const CLHEP::HepRotation & rmGlob() const
void displaceRmGlobAroundGlobal(OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
ALIdouble valueDisplaced() const override
void displaceRmGlobAroundLocal(OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
void displaceOriginal(ALIdouble disp) override
const OpticalObject * parent() const
Definition: OpticalObject.h:62
void displaceRmGlobOriginal(const OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
EntryAngleAffAngles(const ALIstring &type)
const ALIstring & name() const
Definition: Entry.h:52
const CLHEP::HepRotation & rmGlobOriginal() const
ALIstring name_
Definition: Entry.h:101
std::string ALIstring
Definition: CocoaGlobals.h:9
std::vector< double > getRotationAnglesFromMatrix(CLHEP::HepRotation &rmLocal, const std::vector< Entry * > &entries) const
const ALIstring & name() const
Definition: OpticalObject.h:60
OpticalObject * OptOCurrent() const
Definition: Entry.h:61
std::map< ALIstring, ALIdouble, std::less< ALIstring > > & GlobalOptions()
ALIdouble checkDiff(const CLHEP::Hep3Vector &axis, const CLHEP::Hep3Vector &axisOrig, const std::vector< double > &localrot, const std::vector< double > &localrotorig) const
void displaceOriginalOriginal(ALIdouble disp) override