CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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(1, 1);
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(1, 1);
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(0, 1);
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(1, 0);
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  ALIdouble deviRX = findExtraEntryValue("deviRX");
103  ALIdouble deviRY = findExtraEntryValue("deviRY");
104  ALIdouble deviR;
105  ALIbool bb = findExtraEntryValueIfExists("deviR", deviR);
106  if( bb ) {
107  deviRX = deviR;
108  deviRY = deviR;
109  }
110 
111  // lightray.shiftAndDeviateWhileTraversing( this, 0., 0., 0., deviRX, deviRY, 0.);
112  lightray.shiftAndDeviateWhileTraversing( this, 'R' );
113  if (ALIUtils::debug >= 2) {
114  lightray.dumpData("Deviated ");
115  }
116 
117 }
118 
119 
120 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
121 //@@ Fast simulation of the light ray traversing
122 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
123 //@@ Traverse Plane Parallel Plate
124 //@@ Traslated to the backward plate of the plate splitter
125 //@@ Shifted in the splitter X direction by 'shiftX', and in the Y direction by 'shiftY'
126 //@@ and rotated around the splitter X axis by 'deviX' and around the Y axis by 'deviY'.
127 //@@
128 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
130 {
131  if (ALIUtils::debug >= 2) std::cout << "LR: TRAVERSE PLATE SPLITTER " << name() << std::endl;
132 
133  //---------- Get backward plate
134  ALIPlane plate = getPlate(0, 0);
135  lightray.intersect( plate );
136  if (ALIUtils::debug >= 2) {
137  lightray.dumpData("Intersected with plate");
138  }
139  //---------- Shift and Deviate
140  ALIdouble shiftX = findExtraEntryValue("shiftTX");
141  ALIdouble shiftY = findExtraEntryValue("shiftTY");
143  ALIbool bb = findExtraEntryValueIfExists("shiftT", shift);
144  if( bb ) {
145  shiftX = shift;
146  shiftY = shift;
147  }
148 
149  ALIdouble deviTX = findExtraEntryValue("deviTX");
150  ALIdouble deviTY = findExtraEntryValue("deviTY");
151  ALIdouble deviT;
152  bb = findExtraEntryValueIfExists("deviT", deviT);
153  if( bb ) {
154  deviTX = deviT;
155  deviTY = deviT;
156  }
157 
158  // lightray.shiftAndDeviateWhileTraversing( this, shiftX, shiftY, 0., deviTX, deviTY, 0.);
159  lightray.shiftAndDeviateWhileTraversing( this, 'T' );
160  if (ALIUtils::debug >= 2) {
161  lightray.dumpData("Shifted and Deviated");
162  }
163 
164 }
165 
166 
167 #ifdef COCOA_VIS
168 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
170 {
171  ALIColour* col = new ALIColour( 0., 0., 0., 0. );
173  ALIbool wexists = findExtraEntryValueIfExists("width",width);
174  if( !wexists ) width = 1.;
175 
176  std::vector<ALIdouble> spar;
177  spar.push_back(4.);
178  spar.push_back(4.);
179  spar.push_back(width);
180  IgCocoaFileMgr::getInstance().addSolid( *this, "BOX", spar, col);
181 }
182 #endif
183 
184 
185 //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
187 {
188  ALIdouble go;
190  gomgr->getGlobalOptionValue("VisScale", go );
191 
192  theSolidShape = new CocoaSolidShapeBox( "Box", go*5.*cm/m, go*5.*cm/m, go*1.*cm/m ); //COCOA internal units are meters
193 }
long double ALIdouble
Definition: CocoaGlobals.h:11
virtual void fastTraversesLightRay(LightRay &lightray)
virtual void fastDeviatesLightRay(LightRay &lightray)
void shiftAndDeviateWhileTraversing(const OpticalObject *opto, char behav)
Definition: LightRay.cc:240
static ALIint debug
Definition: ALIUtils.h:35
static GlobalOptionMgr * getInstance()
virtual void detailedDeviatesLightRay(LightRay &lightray)
int getGlobalOptionValue(const ALIstring &sstr, ALIdouble &val)
--— Search a string in theGlobalOptions and return 1 if found
bool ALIbool
Definition: CocoaGlobals.h:19
void refract(const ALIPlane plate, const ALIdouble refra_ind1, const ALIdouble refra_ind2)
Definition: LightRay.cc:162
static void dump3v(const CLHEP::Hep3Vector &vec, const std::string &msg)
Definition: ALIUtils.cc:61
void intersect(const ALIPlane &plane)
Definition: LightRay.cc:100
virtual void fillIguana()
Definition: OpticalObject.h:56
virtual void detailedTraversesLightRay(LightRay &lightray)
static unsigned int const shift
void dumpData(const ALIstring &str) const
Definition: LightRay.cc:381
tuple cout
Definition: gather_cfg.py:41
void reflect(const ALIPlane &plane)
Definition: LightRay.cc:141