CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
OptOOpticalSquare Class Reference

#include <OptOOpticalSquare.h>

Inheritance diagram for OptOOpticalSquare:
OpticalObject

Public Member Functions

void constructSolidShape () override
 
void detailedDeviatesLightRay (LightRay &lightray) override
 
void detailedTraversesLightRay (LightRay &lightray) override
 
void fastDeviatesLightRay (LightRay &lightray) override
 
void fastTraversesLightRay (LightRay &lightray) override
 
 OptOOpticalSquare ()
 
 OptOOpticalSquare (OpticalObject *parent, const ALIstring &type, const ALIstring &name, const ALIbool copy_data)
 
 ~OptOOpticalSquare () override
 
- Public Member Functions inherited from OpticalObject
void addCoordinateEntryToList (Entry *entry)
 
void addExtraEntryToList (Entry *entry)
 
void addExtraEntryValueOriginalOriginalToList (ALIdouble entry_value)
 
void addExtraEntryValueOriginalToList (ALIdouble entry_value)
 
void addExtraEntryValueToList (ALIdouble entry_value)
 
double addPii (double val)
 
double approxTo0 (double val)
 
CLHEP::HepRotation buildRmFromEntryValuesOriginalOriginal ()
 
const CLHEP::Hep3Vector & centreGlob () const
 
const CLHEP::Hep3Vector & centreGlobal () const
 
const CLHEP::Hep3Vector & centreGlobOriginal () const
 
const CLHEP::Hep3Vector & centreGlobOriginalOriginal () const
 
const CLHEP::Hep3Vector centreLocal () const
 
int checkMatrixEquations (double angleX, double angleY, double angleZ, CLHEP::HepRotation *rot=nullptr)
 
void construct ()
 
void constructFromOptAligInfo (const OpticalAlignInfo &oaInfo)
 
virtual void constructMaterial ()
 
const std::vector< Entry * > & CoordinateEntryList () const
 
void createComponentOptOsFromOptAlignInfo ()
 
virtual void defaultBehaviour (LightRay &lightray, Measurement &meas)
 
double diff2pi (double ang1, double ang2)
 
void displaceCentreGlob (const XYZcoor coor, const ALIdouble disp)
 
void displaceCentreGlob (const CLHEP::Hep3Vector &dispVec)
 
void displaceCentreGlobOriginal (const XYZcoor coor, const ALIdouble disp)
 
void displaceCentreGlobOriginal (const CLHEP::Hep3Vector &dispVec)
 
void displaceCentreGlobOriginalOriginal (const XYZcoor coor, const ALIdouble disp)
 
void displaceCentreGlobOriginalOriginal (const CLHEP::Hep3Vector &dispVec)
 
void displaceExtraEntry (const ALIuint entryNo, const ALIdouble disp)
 
void displaceExtraEntryOriginal (const ALIuint entryNo, const ALIdouble disp)
 
void displaceExtraEntryOriginalOriginal (const ALIuint entryNo, const ALIdouble disp)
 
void displaceRmGlobAroundGlobal (OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
 
void displaceRmGlobAroundLocal (OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
 
void displaceRmGlobOriginal (const OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
 
void displaceRmGlobOriginalOriginal (const OpticalObject *opto1stRotated, const XYZcoor coor, const ALIdouble disp)
 
bool eq2ang (double ang1, double ang2)
 
const std::vector< Entry * > & ExtraEntryList () const
 
const ALIint extraEntryNo (const ALIstring &entry_name) const
 
std::vector< ALIdouble > & ExtraEntryValueList ()
 
const std::vector< ALIdouble > & ExtraEntryValueOriginalList ()
 
const std::vector< ALIdouble > & ExtraEntryValueOriginalOriginalList ()
 
virtual void fillIguana ()
 
virtual void fillVRML ()
 
const ALIdouble findExtraEntryValue (const ALIstring &eename) const
 
const ALIbool findExtraEntryValueIfExists (const ALIstring &eename, ALIdouble &value) const
 
const ALIdouble findExtraEntryValueMustExist (const ALIstring &eename) const
 
const ALIuint getCmsswID () const
 
std::vector< ALIstringgetCoordinateFromOptAlignParam (const OpticalAlignParam &oaParam)
 
CLHEP::Hep3Vector getDisplacementInLocalCoordinates (const XYZcoor coor, const ALIdouble disp)
 
const double getEntryCentre (const XYZcoor coor) const
 
const double getEntryCentre (const ALIstring &coor) const
 
const double getEntryRMangle (const XYZcoor coor) const
 
const double getEntryRMangle (const ALIstring &coor) const
 
std::vector< double > getLocalRotationAngles (const std::vector< Entry *> &entries) const
 
CocoaMaterialElementarygetMaterial () const
 
ALIPlane getPlate (const ALIbool forwardPlate, const ALIbool applyWedge)
 
std::vector< double > getRotationAnglesFromMatrix (CLHEP::HepRotation &rmLocal, const std::vector< Entry *> &entries) const
 
std::vector< double > getRotationAnglesInOptOFrame (const OpticalObject *optoAncestor, const std::vector< Entry *> &entries) const
 
CocoaSolidShapegetSolidShape () const
 
CLHEP::Hep3Vector getZAxis ()
 
const ALIuint ID () const
 
const ALIstring longName () const
 
virtual void makeMeasurement (LightRay &lightray, Measurement &meas)
 
Measurementmeas ()
 
const ALIstringname () const
 
 OpticalObject ()
 
 OpticalObject (OpticalObject *parent, const ALIstring &type, const ALIstring &name, const ALIbool copy_data)
 
const OpticalObjectparent () const
 
virtual void participateInMeasurement (LightRay &lightray, Measurement &meas, const ALIstring &behav)
 
void propagateGlobalRMOriginalOriginalChangeToChildren (const CLHEP::HepRotation &rmorioriold, const CLHEP::HepRotation &rmoriorinew)
 
void resetGlobalCoordinates ()
 
void resetOriginalOriginalCoordinates ()
 
const CLHEP::HepRotation & rmGlob () const
 
const CLHEP::HepRotation & rmGlobOriginal () const
 
const CLHEP::HepRotation & rmGlobOriginalOriginal () const
 
const CLHEP::HepRotation rmLocal () const
 
void setCmsswID (ALIuint id)
 
void setExtraEntryValue (const ALIuint entryNo, const ALIdouble disp)
 
void setGlobalCoordinates ()
 
void setGlobalRMOriginalOriginal (const CLHEP::HepRotation &rmoriori)
 
void setID (ALIuint id)
 
void setMeas (Measurement *meas)
 set current measurement More...
 
void setOriginalEntryValues ()
 
void setRmGlobal (const CLHEP::HepRotation &rm)
 
void setRmGlobalOriginal (const CLHEP::HepRotation &rm)
 
void setType (const ALIstring &type)
 
const ALIstring shortName () const
 
const ALIstringtype () const
 
virtual void userDefinedBehaviour (LightRay &lightray, Measurement &meas, const ALIstring &behav)
 
virtual ~OpticalObject ()
 

Private Member Functions

void calculateFaces (ALIbool isDetailed)
 

Private Attributes

CLHEP::Hep3Vector faceP [5]
 
CLHEP::Hep3Vector faceV [5]
 

Additional Inherited Members

- Protected Member Functions inherited from OpticalObject
virtual void fillExtraEntry (std::vector< ALIstring > &wordlist)
 
- Protected Attributes inherited from OpticalObject
CocoaMaterialElementarytheMaterial
 
CocoaSolidShapetheSolidShape
 
ALIint verbose
 

Detailed Description

Definition at line 18 of file OptOOpticalSquare.h.

Constructor & Destructor Documentation

◆ OptOOpticalSquare() [1/2]

OptOOpticalSquare::OptOOpticalSquare ( )
inline

Definition at line 21 of file OptOOpticalSquare.h.

21 {};

◆ OptOOpticalSquare() [2/2]

OptOOpticalSquare::OptOOpticalSquare ( OpticalObject parent,
const ALIstring type,
const ALIstring name,
const ALIbool  copy_data 
)
inline

Definition at line 22 of file OptOOpticalSquare.h.

23  : OpticalObject(parent, type, name, copy_data){};
const ALIstring & name() const
Definition: OpticalObject.h:58
const OpticalObject * parent() const
Definition: OpticalObject.h:60

◆ ~OptOOpticalSquare()

OptOOpticalSquare::~OptOOpticalSquare ( )
inlineoverride

Definition at line 24 of file OptOOpticalSquare.h.

24 {};

Member Function Documentation

◆ calculateFaces()

void OptOOpticalSquare::calculateFaces ( ALIbool  isDetailed)
private

Definition at line 146 of file OptOOpticalSquare.cc.

References funct::cos(), gather_cfg::cout, ALIUtils::debug, ALIUtils::dump3v(), cuy::ii, and funct::sin().

146  {
147  ALIint numberOfFaces = 5;
148 
149  //----- useful variables
150  CLHEP::Hep3Vector opto_centre = centreGlob();
151  if (ALIUtils::debug >= 3)
152  std::cout << "opto_centre " << opto_centre << std::endl;
153  const ALIdouble hlen1 = findExtraEntryValueMustExist("length1") / 2.;
154  const ALIdouble hlen2 = findExtraEntryValueMustExist("length2") / 2.;
155  ALIdouble ang = 67.5 * acos(0.) / 90.;
156 
157  //- if( ALIUtils::debug >= 3) std::cout << "length 1 " << 2*hlen1 << " length 2 " << hlen2 * 2 << std::endl;
158  faceP[0] = CLHEP::Hep3Vector(0, 0, -hlen1);
159  faceV[0] = CLHEP::Hep3Vector(0, 0, -1);
160  faceP[1] = CLHEP::Hep3Vector(0, hlen1 - hlen2 * sin(ang), hlen1 + hlen2 * cos(ang));
161  faceV[1] = CLHEP::Hep3Vector(0, cos(ang), sin(ang));
162 
163  faceP[2] = CLHEP::Hep3Vector(0, -hlen1 - hlen2 * cos(ang), -hlen1 + hlen2 * sin(ang));
164  faceV[2] = CLHEP::Hep3Vector(0, -sin(ang), -cos(ang));
165  faceP[3] = CLHEP::Hep3Vector(0, hlen1, 0);
166  faceV[3] = CLHEP::Hep3Vector(0, 1, 0);
167 
168  // face of added piece (so that light when traversing finds parallel surfaces at entry and exit)
169  faceP[4] = CLHEP::Hep3Vector(0, 0, hlen1 + 2 * hlen2 * cos(ang));
170  faceV[4] = CLHEP::Hep3Vector(0, 0, 1);
171 
172  //--------- Put faces in global reference frame
173  CLHEP::HepRotation rmt = rmGlob();
174  ALIint ii;
175  if (ALIUtils::debug >= 3) {
176  std::cout << " optical_square centre" << opto_centre << std::endl;
177  }
178  for (ii = 0; ii < numberOfFaces; ii++) {
179  faceP[ii] = rmt * faceP[ii];
180  faceP[ii] += opto_centre;
181  faceV[ii] = rmt * faceV[ii];
182  if (ALIUtils::debug >= 3) {
183  std::cout << "point at face " << ii << ": " << faceP[ii] << std::endl;
184  std::cout << "normal at face " << ii << ": " << faceV[ii] << std::endl;
185  }
186  }
187 
188  //----------- Correct faces 1 & 2 by wedge: rotate each face normal 1/2 of the wedge around two axis perpendicular to normal
189  if (isDetailed) {
190  ALIdouble wedge, wedgeX, wedgeY;
191  const ALIbool wxy = findExtraEntryValueIfExists("wedge", wedge);
192  if (!wxy) {
193  wedgeX = findExtraEntryValue("wedgeX");
194  wedgeY = findExtraEntryValue("wedgeY");
195  } else {
196  wedgeX = wedge;
197  wedgeY = wedge;
198  }
199 
200  //----- One axis is along X axis for the two faces (X belong to both faces)
201  if (ALIUtils::debug >= 4)
202  std::cout << "OptOOpticalSquare calculateFaces: wedgeX " << wedgeX << " wedgeY " << wedgeY << std::endl;
203  CLHEP::Hep3Vector Axis1(1., 0., 0.);
204  Axis1 = rmt * Axis1;
205  if (ALIUtils::debug >= 4) {
206  ALIUtils::dump3v(faceV[1], "faceV[1] before wedge");
207  ALIUtils::dump3v(faceV[2], "faceV[2] before wedge");
208  }
209  faceV[1].rotate(0.5 * wedgeX, Axis1);
210  if (ALIUtils::debug >= 4)
211  ALIUtils::dump3v(Axis1, " Axis1 in faceV[1] ");
212  faceV[2].rotate(-0.5 * wedgeX, Axis1);
213  if (ALIUtils::debug >= 4) {
214  ALIUtils::dump3v(Axis1, " Axis1 in faceV[2] ");
215  ALIUtils::dump3v(faceV[1], "faceV[1] after wedge X");
216  ALIUtils::dump3v(faceV[2], "faceV[2] after wedge X");
217  }
218 
219  //----- Other axis perpendicular to first and to normal of each face
220  CLHEP::Hep3Vector Axis2 = Axis1;
221  Axis2 = Axis2.cross(faceV[1]);
222  faceV[1].rotate(0.5 * wedgeY, Axis2);
223  if (ALIUtils::debug >= 4)
224  ALIUtils::dump3v(Axis2, " Axis2 in faceV[1] ");
225  Axis2 = Axis1;
226  Axis2 = Axis2.cross(faceV[2]);
227  faceV[2].rotate(-0.5 * wedgeY, Axis2);
228  if (ALIUtils::debug >= 4) {
229  ALIUtils::dump3v(Axis2, " Axis2 in faceV[2] ");
230  ALIUtils::dump3v(faceV[1], "faceV[1] after wedge Y");
231  ALIUtils::dump3v(faceV[2], "faceV[2] after wedge Y");
232  }
233  }
234 }
const ALIdouble findExtraEntryValue(const ALIstring &eename) const
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:75
long double ALIdouble
Definition: CocoaGlobals.h:11
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
int ALIint
Definition: CocoaGlobals.h:15
static ALIint debug
Definition: ALIUtils.h:34
const ALIbool findExtraEntryValueIfExists(const ALIstring &eename, ALIdouble &value) const
bool ALIbool
Definition: CocoaGlobals.h:19
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
CLHEP::Hep3Vector faceP[5]
ii
Definition: cuy.py:589
const CLHEP::HepRotation & rmGlob() const
Definition: OpticalObject.h:83
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:58
const ALIdouble findExtraEntryValueMustExist(const ALIstring &eename) const
CLHEP::Hep3Vector faceV[5]

◆ constructSolidShape()

void OptOOpticalSquare::constructSolidShape ( )
overridevirtual

Reimplemented from OpticalObject.

Definition at line 257 of file OptOOpticalSquare.cc.

References GlobalOptionMgr::getGlobalOptionValue(), GlobalOptionMgr::getInstance(), and visualization-live-secondInstance_cfg::m.

257  {
258  ALIdouble go;
260  gomgr->getGlobalOptionValue("VisScale", go);
261 
263  "Box", go * 5. * cm / m, go * 5. * cm / m, go * 5. * cm / m); //COCOA internal units are meters
264 }
long double ALIdouble
Definition: CocoaGlobals.h:11
CocoaSolidShape * theSolidShape
static GlobalOptionMgr * getInstance()
int getGlobalOptionValue(const ALIstring &sstr, ALIdouble &val)
--— Search a string in theGlobalOptions and return 1 if found

◆ detailedDeviatesLightRay()

void OptOOpticalSquare::detailedDeviatesLightRay ( LightRay lightray)
overridevirtual

Reimplemented from OpticalObject.

Definition at line 28 of file OptOOpticalSquare.cc.

References gather_cfg::cout, ALIUtils::debug, LightRay::dumpData(), cuy::ii, Skims_PA_cff::name, LightRay::reflect(), and LightRay::refract().

28  {
29  if (ALIUtils::debug >= 2)
30  std::cout << "LR: DETAILED DEVIATION IN OPTICAL SQUARE " << name() << std::endl;
31 
32  calculateFaces(true);
33 
34  //---------- Deviate in prism
35  //---------- Refract after entering face 0, reflect in face 1, reflect in face 2, refract after face 3
36  const ALIdouble refra_ind = findExtraEntryValueMustExist("refra_ind");
37  const ALIdouble refra_ind0 = 1.;
38 
39  ALIint ii;
40  for (ii = 0; ii < 4; ii++) {
41  if (ii == 0) {
42  if (ALIUtils::debug >= 3)
43  std::cout << "## OPTOOPTICALSQUARE: refract in face " << ii << std::endl;
44  lightray.refract(ALIPlane(faceP[ii], faceV[ii]), refra_ind0, refra_ind);
45  } else if (ii == 3) {
46  //---- interchange refraction index for exiting instead of entering
47  lightray.refract(ALIPlane(faceP[ii], faceV[ii]), refra_ind, refra_ind0);
48  } else {
49  lightray.reflect(ALIPlane(faceP[ii], faceV[ii]));
50  }
51  if (ALIUtils::debug >= 3) {
52  lightray.dumpData("After face ");
53  }
54  }
55 
56  //----- checks that it is inside prism and the order of faces hit is the good one
57  //
58 }
long double ALIdouble
Definition: CocoaGlobals.h:11
void refract(const ALIPlane &plate, const ALIdouble refra_ind1, const ALIdouble refra_ind2)
Definition: LightRay.cc:157
int ALIint
Definition: CocoaGlobals.h:15
static ALIint debug
Definition: ALIUtils.h:34
const ALIstring & name() const
Definition: OpticalObject.h:58
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:374
CLHEP::Hep3Vector faceP[5]
ii
Definition: cuy.py:589
void calculateFaces(ALIbool isDetailed)
const ALIdouble findExtraEntryValueMustExist(const ALIstring &eename) const
void reflect(const ALIPlane &plane)
Definition: LightRay.cc:138
CLHEP::Hep3Vector faceV[5]

◆ detailedTraversesLightRay()

void OptOOpticalSquare::detailedTraversesLightRay ( LightRay lightray)
overridevirtual

Reimplemented from OpticalObject.

Definition at line 64 of file OptOOpticalSquare.cc.

References gather_cfg::cout, ALIUtils::debug, Skims_PA_cff::name, and LightRay::refract().

64  {
65  if (ALIUtils::debug >= 2)
66  std::cout << "LR: DETAILED TRAVERSES OPTICAL SQUARE " << name() << std::endl;
67 
68  calculateFaces(true);
69  const ALIdouble refra_ind = findExtraEntryValueMustExist("refra_ind");
70  const ALIdouble refra_ind0 = 1.;
71 
72  lightray.refract(ALIPlane(faceP[0], faceV[0]), refra_ind0, refra_ind);
73  lightray.refract(ALIPlane(faceP[4], faceV[4]), refra_ind, refra_ind0);
74 }
long double ALIdouble
Definition: CocoaGlobals.h:11
void refract(const ALIPlane &plate, const ALIdouble refra_ind1, const ALIdouble refra_ind2)
Definition: LightRay.cc:157
static ALIint debug
Definition: ALIUtils.h:34
const ALIstring & name() const
Definition: OpticalObject.h:58
CLHEP::Hep3Vector faceP[5]
void calculateFaces(ALIbool isDetailed)
const ALIdouble findExtraEntryValueMustExist(const ALIstring &eename) const
CLHEP::Hep3Vector faceV[5]

◆ fastDeviatesLightRay()

void OptOOpticalSquare::fastDeviatesLightRay ( LightRay lightray)
overridevirtual

Reimplemented from OpticalObject.

Definition at line 81 of file OptOOpticalSquare.cc.

References gather_cfg::cout, ALIUtils::debug, LightRay::dumpData(), LightRay::intersect(), Skims_PA_cff::name, LightRay::reflect(), and LightRay::shiftAndDeviateWhileTraversing().

81  {
82  if (ALIUtils::debug >= 2)
83  std::cout << "LR: FAST DEVIATION IN OPTICAL SQUARE " << name() << std::endl;
84 
85  calculateFaces(false);
86 
87  //---------- Deviate in prism
88  lightray.reflect(ALIPlane(faceP[1], faceV[1]));
89  if (ALIUtils::debug >= 3) {
90  lightray.dumpData("After face 1");
91  }
92  lightray.reflect(ALIPlane(faceP[2], faceV[2]));
93  if (ALIUtils::debug >= 3) {
94  lightray.dumpData("After face 2");
95  }
96  lightray.intersect(ALIPlane(faceP[3], faceV[3]));
97  if (ALIUtils::debug >= 3) {
98  lightray.dumpData("intersected at face 3");
99  }
100 
101  //----- Deviates by 'devi' X & Y??
102  lightray.shiftAndDeviateWhileTraversing(this, 'R');
103  /* ALIdouble deviRX = findExtraEntryValue("deviRX");
104  ALIdouble deviRY = findExtraEntryValue("deviRY");
105  ALIdouble shiftRX = findExtraEntryValue("shiftRX");
106  ALIdouble shiftRY = findExtraEntryValue("shiftRY");
107  lightray.shiftAndDeviateWhileTraversing( this, shiftRX, shiftRY, deviRX, deviRY);
108  */
109 
110  if (ALIUtils::debug >= 2) {
111  // std::cout << " shiftRX " << shiftRX << " shiftRY " << shiftRY << std::endl;
112  // std::cout << " deviRX " << deviRX << " deviRY " << deviRY << std::endl;
113  lightray.dumpData("Deviated ");
114  }
115 }
void shiftAndDeviateWhileTraversing(const OpticalObject *opto, char behav)
Definition: LightRay.cc:235
static ALIint debug
Definition: ALIUtils.h:34
const ALIstring & name() const
Definition: OpticalObject.h:58
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:374
CLHEP::Hep3Vector faceP[5]
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:93
void calculateFaces(ALIbool isDetailed)
void reflect(const ALIPlane &plane)
Definition: LightRay.cc:138
CLHEP::Hep3Vector faceV[5]

◆ fastTraversesLightRay()

void OptOOpticalSquare::fastTraversesLightRay ( LightRay lightray)
overridevirtual

Reimplemented from OpticalObject.

Definition at line 123 of file OptOOpticalSquare.cc.

References ALIUtils::debug, LightRay::dumpData(), LightRay::intersect(), and LightRay::shiftAndDeviateWhileTraversing().

123  {
124  // std::cerr << " WARNING there should be an extra piece to make entering and exiting surfaces parallel (like in modified_rhomboid_prism) " << std::endl;
125 
126  calculateFaces(false);
127 
128  lightray.intersect(ALIPlane(faceP[1], faceV[1]));
129  //---------- Shift and Deviate
130  lightray.shiftAndDeviateWhileTraversing(this, 'T');
131  /* ALIdouble shiftX = findExtraEntryValue("shiftTX");
132  ALIdouble shiftY = findExtraEntryValue("shiftTY");
133  ALIdouble deviTX = findExtraEntryValue("deviTX");
134  ALIdouble deviTY = findExtraEntryValue("deviTY");
135  lightray.shiftAndDeviateWhileTraversing( this, shiftX, shiftY, deviTX, deviTY);
136  */
137  if (ALIUtils::debug >= 2) {
138  lightray.dumpData("Shifted and Deviated");
139  }
140 }
void shiftAndDeviateWhileTraversing(const OpticalObject *opto, char behav)
Definition: LightRay.cc:235
static ALIint debug
Definition: ALIUtils.h:34
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:374
CLHEP::Hep3Vector faceP[5]
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:93
void calculateFaces(ALIbool isDetailed)
CLHEP::Hep3Vector faceV[5]

Member Data Documentation

◆ faceP

CLHEP::Hep3Vector OptOOpticalSquare::faceP[5]
private

Definition at line 45 of file OptOOpticalSquare.h.

◆ faceV

CLHEP::Hep3Vector OptOOpticalSquare::faceV[5]
private

Definition at line 46 of file OptOOpticalSquare.h.