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 {
28  if (ALIUtils::debug >= 2) std::cout << "LR: DETAILED REFLECTION IN PLATE SPLITTER " << name() << std::endl;
29  if (ALIUtils::debug >= 3) ALIUtils::dump3v( centreGlob(), " centre Global RF ");
30 
31  //---------- Get forward plate
32  ALIPlane plate = getPlate(true, true);
33  //---------- Reflect
34  lightray.reflect( plate );
35  if (ALIUtils::debug >= 2) {
36  std::cout << "Reflected in plate" << std::endl;
37  lightray.dumpData(" ");
38  }
39 
40 }
41 
42 
43 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
44 //@@ Detailed simulation of the light ray traversing
45 //@@ The beam enters the splitter, is refracted, traverses the splitter and finally is again refracted when it exits:
46 //@@ Get the intersection with the forward splitter plane
47 //@@ Refract the beam and propagate until it intersects the backward splitter plane.
48 //@@ Finally the beam is refracted again.
49 //@@
50 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
52 {
53  if (ALIUtils::debug >= 2) std::cout << "LR: DETAILED TRAVERSE IN PLATE SPLITTER " << name() << std::endl;
54 
55  //---------- Get forward plate
56  ALIPlane plate = getPlate(true, true);
57  //---------- If width is 0, just keep the same point
58  ALIdouble width = findExtraEntryValue("width");
59  if( width == 0 ) {
60  if(ALIUtils::debug >= 3) 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 
83 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
84 //@@ Fast simulation of deviation of the light ray:
85 //@@ Reflect in a Plate Splitter
86 //@@ The beam is reflected in the first plate of the plate splitter, which is obtained without applying the rotation by 'wedge'.
87 //@@ After the beam is reflected, it is rotated around the splitter X axis by 'deviX' and around the Y axis by 'deviY'.
88 //@@
89 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
91 {
92  if (ALIUtils::debug >= 2) std::cout << "LR: REFLECTION IN PLATE SPLITTER " << name() << std::endl;
93 
94  //---------- Get forward plate
95  ALIPlane plate = getPlate(true, false);
96  //---------- Reflect in plate (including intersection with it)
97  lightray.reflect( plate );
98  if (ALIUtils::debug >= 2) {
99  lightray.dumpData("Reflected in plate");
100  }
101  //---------- Deviate Lightray
102  lightray.shiftAndDeviateWhileTraversing( this, 'R' );
103  if (ALIUtils::debug >= 2) {
104  lightray.dumpData("Deviated ");
105  }
106 
107 }
108 
109 
110 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
111 //@@ Fast simulation of the light ray traversing
112 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
113 //@@ Traverse Plane Parallel Plate
114 //@@ Traslated to the backward plate of the plate splitter
115 //@@ Shifted in the splitter X direction by 'shiftX', and in the Y direction by 'shiftY'
116 //@@ and rotated around the splitter X axis by 'deviX' and around the Y axis by 'deviY'.
117 //@@
118 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
120 {
121  if (ALIUtils::debug >= 2) std::cout << "LR: TRAVERSE PLATE SPLITTER " << name() << std::endl;
122 
123  //---------- Get backward plate
124  ALIPlane plate = getPlate(false, false);
125  lightray.intersect( plate );
126  if (ALIUtils::debug >= 2) {
127  lightray.dumpData("Intersected with plate");
128  }
129  //---------- Shift and Deviate
130  lightray.shiftAndDeviateWhileTraversing( this, 'T' );
131  if (ALIUtils::debug >= 2) {
132  lightray.dumpData("Shifted and Deviated");
133  }
134 
135 }
136 
137 
138 #ifdef COCOA_VIS
139 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
141 {
142  ALIColour* col = new ALIColour( 0., 0., 0., 0. );
144  ALIbool wexists = findExtraEntryValueIfExists("width",width);
145  if( !wexists ) width = 1.;
146 
147  std::vector<ALIdouble> spar;
148  spar.push_back(4.);
149  spar.push_back(4.);
150  spar.push_back(width);
151  IgCocoaFileMgr::getInstance().addSolid( *this, "BOX", spar, col);
152 }
153 #endif
154 
155 
156 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
158 {
159  ALIdouble go;
161  gomgr->getGlobalOptionValue("VisScale", go );
162 
163  theSolidShape = new CocoaSolidShapeBox( "Box", go*5.*cm/m, go*5.*cm/m, go*1.*cm/m ); //COCOA internal units are meters
164 }
long double ALIdouble
Definition: CocoaGlobals.h:11
void shiftAndDeviateWhileTraversing(const OpticalObject *opto, char behav)
Definition: LightRay.cc:241
void refract(const ALIPlane &plate, const ALIdouble refra_ind1, const ALIdouble refra_ind2)
Definition: LightRay.cc:163
static ALIint debug
Definition: ALIUtils.h:36
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
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:61
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:101
virtual void fillIguana()
Definition: OpticalObject.h:56
void fastTraversesLightRay(LightRay &lightray) override
col
Definition: cuy.py:1009
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:382
void constructSolidShape() override
void reflect(const ALIPlane &plane)
Definition: LightRay.cc:142
void fastDeviatesLightRay(LightRay &lightray) override