CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions
OptOCubeSplitter Class Reference

#include <OptOCubeSplitter.h>

Inheritance diagram for OptOCubeSplitter:
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
 
ALIPlane getMiddlePlate ()
 
ALIPlane getUpperPlate ()
 
 OptOCubeSplitter ()
 
 OptOCubeSplitter (OpticalObject *parent, const ALIstring &type, const ALIstring &name, const ALIbool copy_data)
 
 ~OptOCubeSplitter () 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 ()
 

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 OptOCubeSplitter.h.

Constructor & Destructor Documentation

OptOCubeSplitter::OptOCubeSplitter ( )
inline

Definition at line 21 of file OptOCubeSplitter.h.

21 {};
OptOCubeSplitter::OptOCubeSplitter ( OpticalObject parent,
const ALIstring type,
const ALIstring name,
const ALIbool  copy_data 
)
inline

Definition at line 22 of file OptOCubeSplitter.h.

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

Definition at line 24 of file OptOCubeSplitter.h.

24 {};

Member Function Documentation

void OptOCubeSplitter::constructSolidShape ( )
overridevirtual

Reimplemented from OpticalObject.

Definition at line 245 of file OptOCubeSplitter.cc.

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

245  {
246  ALIdouble go;
248  gomgr->getGlobalOptionValue("VisScale", go);
249 
251  "Box", go * 5. * cm / m, go * 5. * cm / m, go * 5. * cm / m); //COCOA internal units are meters
252 }
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
void OptOCubeSplitter::detailedDeviatesLightRay ( LightRay lightray)
overridevirtual

Reimplemented from OpticalObject.

Definition at line 90 of file OptOCubeSplitter.cc.

References OpticalObject::centreGlob(), gather_cfg::cout, ALIUtils::debug, ALIUtils::dump3v(), LightRay::dumpData(), OpticalObject::findExtraEntryValue(), getMiddlePlate(), OpticalObject::getPlate(), getUpperPlate(), OpticalObject::name(), LightRay::reflect(), and LightRay::refract().

90  {
91  if (ALIUtils::debug >= 2)
92  std::cout << "LR: DETAILED REFLECTION IN CUBE SPLITTER " << name() << std::endl;
93 
94  if (ALIUtils::debug >= 2)
95  ALIUtils::dump3v(centreGlob(), "centreGlob");
96  //---------- Get first plate
97  if (ALIUtils::debug >= 3)
98  std::cout << "%%%%% refracting at entering first plate " << std::endl;
99  if (ALIUtils::debug >= 3)
100  std::cout << "%%% getting first plate " << std::endl;
101  ALIPlane plate = getPlate(true, true);
102 
103  //---------- Refract
104  ALIdouble refra_ind1 = 1.;
105  ALIdouble refra_ind2 = findExtraEntryValue("refra_ind");
106  lightray.refract(plate, refra_ind1, refra_ind2);
107 
108  //---------- Get middle plate
109  if (ALIUtils::debug >= 3)
110  std::cout << "%%%%% reflecting in middle plate " << std::endl;
111  if (ALIUtils::debug >= 3)
112  std::cout << "%%% getting middle plate " << std::endl;
113  plate = getMiddlePlate();
114 
115  //---------- Reflect
116  lightray.reflect(plate);
117  if (ALIUtils::debug >= 2) {
118  lightray.dumpData("Reflected in plate");
119  }
120 
121  //--------- Get upper plate
122  if (ALIUtils::debug >= 3)
123  std::cout << "%%%%% getting second plate " << std::endl;
124  plate = getUpperPlate();
125  if (ALIUtils::debug >= 3)
126  std::cout << "%%%%% refracting at exiting second plate " << std::endl;
127  lightray.refract(plate, refra_ind2, refra_ind1);
128 
129  if (ALIUtils::debug >= 2) {
130  lightray.dumpData("After CubeSplitter");
131  }
132 }
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 ALIdouble findExtraEntryValue(const ALIstring &eename) const
ALIPlane getUpperPlate()
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:58
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:75
ALIPlane getPlate(const ALIbool forwardPlate, const ALIbool applyWedge)
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:374
ALIPlane getMiddlePlate()
tuple cout
Definition: gather_cfg.py:144
const ALIstring & name() const
Definition: OpticalObject.h:58
void reflect(const ALIPlane &plane)
Definition: LightRay.cc:138
void OptOCubeSplitter::detailedTraversesLightRay ( LightRay lightray)
overridevirtual

Reimplemented from OpticalObject.

Definition at line 142 of file OptOCubeSplitter.cc.

References gather_cfg::cout, ALIUtils::debug, LightRay::dumpData(), OpticalObject::findExtraEntryValue(), OpticalObject::getPlate(), OpticalObject::name(), and LightRay::refract().

142  {
143  if (ALIUtils::debug >= 2)
144  std::cout << "LR: DETAILED TRAVERSE CUBE SPLITTER " << name() << std::endl;
145 
146  //---------- Get forward plate
147  ALIPlane plate = getPlate(true, true);
148 
149  //---------- Refract while entering splitter
150  ALIdouble refra_ind1 = 1.;
151  ALIdouble refra_ind2 = findExtraEntryValue("refra_ind");
152  lightray.refract(plate, refra_ind1, refra_ind2);
153  if (ALIUtils::debug >= 2) {
154  lightray.dumpData("Refracted in first plate");
155  }
156 
157  //---------- Get backward plate
158  plate = getPlate(false, true);
159  //---------- Refract while exiting splitter
160  lightray.refract(plate, refra_ind2, refra_ind1);
161  if (ALIUtils::debug >= 2) {
162  lightray.dumpData("Refracted in first plate");
163  }
164 }
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 ALIdouble findExtraEntryValue(const ALIstring &eename) const
ALIPlane getPlate(const ALIbool forwardPlate, const ALIbool applyWedge)
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:374
tuple cout
Definition: gather_cfg.py:144
const ALIstring & name() const
Definition: OpticalObject.h:58
void OptOCubeSplitter::fastDeviatesLightRay ( LightRay lightray)
overridevirtual

Reimplemented from OpticalObject.

Definition at line 27 of file OptOCubeSplitter.cc.

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

27  {
28  if (ALIUtils::debug >= 2)
29  std::cout << "LR: FAST REFLECTION IN CUBE SPLITTER " << name() << std::endl;
30 
31  //---------- Get forward plate
32  ALIPlane plate = getMiddlePlate();
33  //---------- Reflect in plate (including intersection with it)
34  lightray.reflect(plate);
35  if (ALIUtils::debug >= 2) {
36  lightray.dumpData("Reflected in plate");
37  }
38  //---------- Deviate Lightray
39  // ALIdouble deviRX = findExtraEntryValue("deviRX");
40  // ALIdouble deviRY = findExtraEntryValue("deviRY");
41  // lightray.shiftAndDeviateWhileTraversing( this, 0., 0., 0., deviRX, deviRY, 0.);
42  lightray.shiftAndDeviateWhileTraversing(this, 'R');
43  if (ALIUtils::debug >= 2) {
44  lightray.dumpData("Deviated ");
45  }
46 }
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
ALIPlane getMiddlePlate()
tuple cout
Definition: gather_cfg.py:144
const ALIstring & name() const
Definition: OpticalObject.h:58
void reflect(const ALIPlane &plane)
Definition: LightRay.cc:138
void OptOCubeSplitter::fastTraversesLightRay ( LightRay lightray)
overridevirtual

Reimplemented from OpticalObject.

Definition at line 57 of file OptOCubeSplitter.cc.

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

57  {
58  if (ALIUtils::debug >= 2)
59  std::cout << "LR: FAST TRAVERSE CUBE SPLITTER " << name() << std::endl;
60 
61  //---------- Get backward plate
62  ALIPlane plate = getPlate(false, false);
63  lightray.intersect(plate);
64  if (ALIUtils::debug >= 2) {
65  lightray.dumpData("Intersected with plate");
66  }
67  //---------- Shift and Deviate
68  lightray.shiftAndDeviateWhileTraversing(this, 'T');
69  /* ALIdouble shiftX = findExtraEntryValue("shiftX");
70  ALIdouble shiftY = findExtraEntryValue("shiftY");
71  ALIdouble deviTX = findExtraEntryValue("deviTX");
72  ALIdouble deviTY = findExtraEntryValue("deviTY");
73  lightray.shiftAndDeviateWhileTraversing( this, shiftX, shiftY, deviTX, deviTY);*/
74 
75  if (ALIUtils::debug >= 2) {
76  lightray.dumpData("Shifted and Deviated");
77  }
78 }
void shiftAndDeviateWhileTraversing(const OpticalObject *opto, char behav)
Definition: LightRay.cc:235
static ALIint debug
Definition: ALIUtils.h:34
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:93
ALIPlane getPlate(const ALIbool forwardPlate, const ALIbool applyWedge)
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:374
tuple cout
Definition: gather_cfg.py:144
const ALIstring & name() const
Definition: OpticalObject.h:58
ALIPlane OptOCubeSplitter::getMiddlePlate ( )

Definition at line 171 of file OptOCubeSplitter.cc.

References OpticalObject::centreGlob(), gather_cfg::cout, ALIUtils::debug, ALIUtils::dump3v(), ALIUtils::dumprm(), OpticalObject::findExtraEntryValueIfExists(), OpticalObject::name(), and OpticalObject::rmGlob().

Referenced by detailedDeviatesLightRay(), and fastDeviatesLightRay().

171  {
172  if (ALIUtils::debug >= 4)
173  std::cout << "%%% LR: GET MIDDLE PLATE " << name() << std::endl;
174  //---------- Get centre and normal of plate
175  //----- plate normal before wedge (Z axis of OptO)
176  ALIdouble anglePlanes;
177  ALIbool angpl = findExtraEntryValueIfExists("anglePlanes", anglePlanes);
178  if (!angpl) {
179  anglePlanes =
180  acos(0.) /
181  2.; //default is 45o !!! this creates problem in 'isr_medidas_globales.txt': laser goes along X and does not intersect cube if angles Y 0, anglePlanes 45
182  if (ALIUtils::debug >= 4)
183  std::cout << "anglePlanes default = " << anglePlanes / deg << std::endl;
184  }
185  CLHEP::Hep3Vector Axis(0., 0., 1.);
186  CLHEP::Hep3Vector XAxis(1., 0., 0.);
187  Axis.rotate(anglePlanes, XAxis);
188  CLHEP::HepRotation rmt = rmGlob();
189  CLHEP::Hep3Vector plate_normal = rmt * Axis;
190  if (ALIUtils::debug >= 3) {
191  ALIUtils::dumprm(rmt, "rmt before wedge angles");
192  ALIUtils::dump3v(plate_normal, "plate_normal before wedge");
193  }
194  //----- plate centre = OptO
195  CLHEP::Hep3Vector plate_point = centreGlob();
196 
197  //---------- Return plate plane
198  return ALIPlane(plate_point, plate_normal);
199 }
long double ALIdouble
Definition: CocoaGlobals.h:11
static void dumprm(const CLHEP::HepRotation &rm, const std::string &msg, std::ostream &out=std::cout)
Definition: ALIUtils.cc:71
const ALIbool findExtraEntryValueIfExists(const ALIstring &eename, ALIdouble &value) const
static ALIint debug
Definition: ALIUtils.h:34
const CLHEP::HepRotation & rmGlob() const
Definition: OpticalObject.h:83
bool ALIbool
Definition: CocoaGlobals.h:19
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:58
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:75
tuple cout
Definition: gather_cfg.py:144
const ALIstring & name() const
Definition: OpticalObject.h:58
ALIPlane OptOCubeSplitter::getUpperPlate ( )

Definition at line 206 of file OptOCubeSplitter.cc.

References OpticalObject::centreGlob(), gather_cfg::cout, ALIUtils::debug, ALIUtils::dump3v(), ALIUtils::dumprm(), OpticalObject::findExtraEntryValue(), OpticalObject::name(), and OpticalObject::rmGlob().

Referenced by detailedDeviatesLightRay().

206  {
207  if (ALIUtils::debug >= 4)
208  std::cout << "LR: GET UPPER PLATE " << name() << std::endl;
209  //---------- Get centre and normal of plate
210  ALIdouble width = findExtraEntryValue("width");
211  //----- plate normal before wedge (Y axis of OptO)
212  CLHEP::Hep3Vector Axis(0., 1., 0.);
213  CLHEP::HepRotation rmt = rmGlob();
214  CLHEP::Hep3Vector plate_normal = rmt * Axis;
215  if (ALIUtils::debug >= 3) {
216  ALIUtils::dumprm(rmt, "rmt before wedge angles");
217  ALIUtils::dump3v(plate_normal, "plate_normal before wedge");
218  }
219  //----- plate centre = OptO centre +1/2 width in Y direction
220  CLHEP::Hep3Vector plate_point = centreGlob();
221  plate_point += width / 2. * plate_normal;
222 
223  //---------- Return plate plane
224  return ALIPlane(plate_point, plate_normal);
225 }
long double ALIdouble
Definition: CocoaGlobals.h:11
static void dumprm(const CLHEP::HepRotation &rm, const std::string &msg, std::ostream &out=std::cout)
Definition: ALIUtils.cc:71
static ALIint debug
Definition: ALIUtils.h:34
const CLHEP::HepRotation & rmGlob() const
Definition: OpticalObject.h:83
const ALIdouble findExtraEntryValue(const ALIstring &eename) const
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:58
const CLHEP::Hep3Vector & centreGlob() const
Definition: OpticalObject.h:75
tuple cout
Definition: gather_cfg.py:144
const ALIstring & name() const
Definition: OpticalObject.h:58