CMS 3D CMS Logo

OptOPlateSplitter.cc
Go to the documentation of this file.
1 // COCOA class implementation file
2 //Id: OptOPlateSplitter.cc
3 //CAT: Model
4 //
5 // History: v1.0
6 // Pedro Arce
7 
12 #ifdef COCOA_VIS
13 #include "Alignment/IgCocoaFileWriter/interface/IgCocoaFileMgr.h"
14 #include "Alignment/CocoaVisMgr/interface/ALIColour.h"
15 #endif
18 
19 using namespace CLHEP;
20 
21 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
22 //@@ Detailed simulation of Reflection in Plate Splitter
23 //@@ The software gets the plane of reflection as the forward splitter plane
24 //@@ Then the beam is reflected in this plane.
25 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
27  if (ALIUtils::debug >= 2)
28  std::cout << "LR: DETAILED REFLECTION IN PLATE SPLITTER " << name() << std::endl;
29  if (ALIUtils::debug >= 3)
30  ALIUtils::dump3v(centreGlob(), " centre Global RF ");
31 
32  //---------- Get forward plate
33  ALIPlane plate = getPlate(true, true);
34  //---------- Reflect
35  lightray.reflect(plate);
36  if (ALIUtils::debug >= 2) {
37  std::cout << "Reflected in plate" << std::endl;
38  lightray.dumpData(" ");
39  }
40 }
41 
42 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
43 //@@ Detailed simulation of the light ray traversing
44 //@@ The beam enters the splitter, is refracted, traverses the splitter and finally is again refracted when it exits:
45 //@@ Get the intersection with the forward splitter plane
46 //@@ Refract the beam and propagate until it intersects the backward splitter plane.
47 //@@ Finally the beam is refracted again.
48 //@@
49 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
51  if (ALIUtils::debug >= 2)
52  std::cout << "LR: DETAILED TRAVERSE IN PLATE SPLITTER " << name() << std::endl;
53 
54  //---------- Get forward plate
55  ALIPlane plate = getPlate(true, true);
56  //---------- If width is 0, just keep the same point
57  ALIdouble width = findExtraEntryValue("width");
58  if (width == 0) {
59  if (ALIUtils::debug >= 3)
60  lightray.dumpData("Traversed with 0 width");
61  return;
62  }
63 
64  //---------- Refract while entering splitter
65  ALIdouble refra_ind1 = 1.;
66  ALIdouble refra_ind2 = findExtraEntryValue("refra_ind");
67  lightray.refract(plate, refra_ind1, refra_ind2);
68  if (ALIUtils::debug >= 2) {
69  lightray.dumpData("Refracted in first plate");
70  }
71 
72  //---------- Get backward plate
73  plate = getPlate(false, true);
74  //---------- Refract while exiting splitter
75  lightray.refract(plate, refra_ind2, refra_ind1);
76  if (ALIUtils::debug >= 2) {
77  lightray.dumpData("Refracted in first plate");
78  }
79 }
80 
81 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
82 //@@ Fast simulation of deviation of the light ray:
83 //@@ Reflect in a Plate Splitter
84 //@@ The beam is reflected in the first plate of the plate splitter, which is obtained without applying the rotation by 'wedge'.
85 //@@ After the beam is reflected, it is rotated around the splitter X axis by 'deviX' and around the Y axis by 'deviY'.
86 //@@
87 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
89  if (ALIUtils::debug >= 2)
90  std::cout << "LR: REFLECTION IN PLATE SPLITTER " << name() << std::endl;
91 
92  //---------- Get forward plate
93  ALIPlane plate = getPlate(true, false);
94  //---------- Reflect in plate (including intersection with it)
95  lightray.reflect(plate);
96  if (ALIUtils::debug >= 2) {
97  lightray.dumpData("Reflected in plate");
98  }
99  //---------- Deviate Lightray
100  lightray.shiftAndDeviateWhileTraversing(this, 'R');
101  if (ALIUtils::debug >= 2) {
102  lightray.dumpData("Deviated ");
103  }
104 }
105 
106 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
107 //@@ Fast simulation of the light ray traversing
108 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
109 //@@ Traverse Plane Parallel Plate
110 //@@ Traslated to the backward plate of the plate splitter
111 //@@ Shifted in the splitter X direction by 'shiftX', and in the Y direction by 'shiftY'
112 //@@ and rotated around the splitter X axis by 'deviX' and around the Y axis by 'deviY'.
113 //@@
114 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
116  if (ALIUtils::debug >= 2)
117  std::cout << "LR: TRAVERSE PLATE SPLITTER " << name() << std::endl;
118 
119  //---------- Get backward plate
120  ALIPlane plate = getPlate(false, false);
121  lightray.intersect(plate);
122  if (ALIUtils::debug >= 2) {
123  lightray.dumpData("Intersected with plate");
124  }
125  //---------- Shift and Deviate
126  lightray.shiftAndDeviateWhileTraversing(this, 'T');
127  if (ALIUtils::debug >= 2) {
128  lightray.dumpData("Shifted and Deviated");
129  }
130 }
131 
132 #ifdef COCOA_VIS
133 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
135  ALIColour* col = new ALIColour(0., 0., 0., 0.);
137  ALIbool wexists = findExtraEntryValueIfExists("width", width);
138  if (!wexists)
139  width = 1.;
140 
141  std::vector<ALIdouble> spar;
142  spar.push_back(4.);
143  spar.push_back(4.);
144  spar.push_back(width);
145  IgCocoaFileMgr::getInstance().addSolid(*this, "BOX", spar, col);
146 }
147 #endif
148 
149 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
151  ALIdouble go;
153  gomgr->getGlobalOptionValue("VisScale", go);
154 
155  theSolidShape = new CocoaSolidShapeBox(
156  "Box", go * 5. * cm / m, go * 5. * cm / m, go * 1. * cm / m); //COCOA internal units are meters
157 }
long double ALIdouble
Definition: CocoaGlobals.h:11
void shiftAndDeviateWhileTraversing(const OpticalObject *opto, char behav)
Definition: LightRay.cc:235
void refract(const ALIPlane &plate, const ALIdouble refra_ind1, const ALIdouble refra_ind2)
Definition: LightRay.cc:157
static ALIint debug
Definition: ALIUtils.h:34
static GlobalOptionMgr * getInstance()
void detailedDeviatesLightRay(LightRay &lightray) override
int getGlobalOptionValue(const ALIstring &sstr, ALIdouble &val)
--— Search a string in theGlobalOptions and return 1 if found
bool ALIbool
Definition: CocoaGlobals.h:19
void detailedTraversesLightRay(LightRay &lightray) override
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:374
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:58
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:93
virtual void fillIguana()
Definition: OpticalObject.h:55
void fastTraversesLightRay(LightRay &lightray) override
col
Definition: cuy.py:1009
void constructSolidShape() override
void reflect(const ALIPlane &plane)
Definition: LightRay.cc:138
void fastDeviatesLightRay(LightRay &lightray) override