CMS 3D CMS Logo

Point5MaterialMap.cc
Go to the documentation of this file.
1 #ifndef Point5MaterialMap_cc
2 #define Point5MaterialMap_cc
3 
4 #include <iostream>
5 #include <cmath>
6 
8 
9 inline int inPlug(double vx, double vy, double vz, double PlugVx = PlugOnShaftVx, double PlugVz = PlugOnShaftVz) {
10  if (vy > SurfaceOfEarth && vy < SurfaceOfEarth + PlugWidth) {
11  if (vx > PlugVx - PlugXlength / 2. && vx < PlugVx + PlugXlength / 2. && vz > PlugVz - PlugZlength / 2. &&
12  vz < PlugVz + PlugZlength / 2.)
13  return Plug;
14  if (vz >= PlugVz - PlugZlength / 2. - PlugNoseZlength && vz < PlugVz - PlugZlength / 2. &&
15  vx > PlugVx - PlugNoseXlength / 2. && vx < PlugVx + PlugNoseXlength / 2.)
16  return Plug;
17  }
18  return Unknown;
19 }
20 
21 inline int inAirAfterPlug(double vx, double vy, double vz) {
22  // particles above surface of earth
23  if (vy >= SurfaceOfEarth)
24  return Air;
25 
26  // CMS cavern (UXC 55)
27  if (std::fabs(vz) < 26548. && sqrt((vx * 1.1576) * (vx * 1.1576) + vy * vy) < 15460. && vy > -8762)
28  return Air;
29 
30  // access shaft (PX 56)
31  if (vy > 0. && vy < (SurfaceOfEarth - 2250.) && sqrt(vx * vx + (vz - Z_PX56) * (vz - Z_PX56)) < 10250.)
32  return Air;
33 
34  //surface hall ground floor
35  if (vy >= SurfaceOfEarth - 2250. && vy < SurfaceOfEarth) {
36  if (sqrt(vx * vx + (vz - Z_PX56) * (vz - Z_PX56)) < 10250. && vz - Z_PX56 > -7000. && vz - Z_PX56 < 7000.)
37  return Air;
38  if (vx > -2400. && vx < 2400. && vz - Z_PX56 >= -9800. && vz - Z_PX56 < -7000.)
39  return Air;
40  }
41 
42  // Shaft (PM 54)
43  if (vy > 3233. && vy < (SurfaceOfEarth) &&
44  sqrt((vx - 26600.) * (vx - 26600.) + (vz - 30100. - Z_PX56) * (vz - 30100. - Z_PX56)) < 6050.)
45  //sqrt((vx-5000.)*(vx-5000.) + (vz-30100.-Z_PX56)*(vz-30100.-Z_PX56)) < 10050.)//@@@@@
46  return Air;
47 
48  // Shaft (PM 56)
49  if (vy > -3700. && vy < (SurfaceOfEarth) &&
50  sqrt((vx - 18220.) * (vx - 18220.) + (vz + 24227. - Z_PX56) * (vz + 24227. - Z_PX56)) < 3550.)
51  return Air;
52 
53  //Service cavern USC 55
54  if (vz > -22050. && vz < 62050. && sqrt((vx - 29550.) * (vx - 29550.) + (vy - 3233.) * (vy - 3233.)) < 9050. &&
55  vy > -3650.)
56  return Air;
57 
58  //UXC55 cavern endcap beam openings
59  if (((vz >= -29278. && vz < -26548.) || (vz >= 26548 && vz <= 29278.)) && sqrt(vy * vy + vx * vx) < 800.)
60  return Air;
61 
62  //Pillar access between CMS collision cavern and service cavern
63  if (vx > 10000. && vx < 20500. + 3050. && //TX54 galerie
64  vz > 14460. && vz < 16260. && //estimated wall thickness 1m
65  vy > -8680. && vy < -1507.)
66  return Air;
67 
68  if (vx > 10000. && vx < 16500. && //TX54 galerie 30.9 degree opening to UXC55
69  vy > -8680. && vy < -1507. && //@vx=13300 delta(vz)=1865., 2vx=1650. delta(vz)=0
70  vz > 14460. - 1865. * (16500. - vx) / (3200.) && vz <= 14460.)
71  return Air;
72 
73  if (vx > 13300. && vx < 20500. + 3050. && //TX54 galerie
74  vz > 14460. && vz < 16260. && //estimated wall thickness 1m
75  vy > -8680. && vy < -1507.)
76  return Air;
77 
78  if (vx > 26600 - 6050. && vx < 20500. + 3050. && //TX54 going up in sewrvice cavern
79  vz > 14460. && vz < 16260. && //estimated wall thickness 1m
80  vy >= -1507. && vy < 1000.)
81  return Air;
82 
83  //R56, LHC beam tunnel East
84  if (vz > -85000. && vz <= -29278. && //UJ57 junction to UXC55 cavern
85  sqrt(vy * vy + (vx - 350.) * (vx - 350.)) < 1900. && vy > -1000.)
86  return Air;
87 
88  //R54, LHC beam tunnel West
89  if (vz >= 29278. && vz < 63000. && //UJ57 junction to UXC55 cavern
90  sqrt(vy * vy + (vx - 350.) * (vx - 350.)) < 1900. && vy > -1000.)
91  return Air;
92 
93  //UJ56 cavern
94  if (vz > -58875. && vz < -33927. && sqrt(vy * vy + (vx - 4450.) * (vx - 4450.)) < 6750. &&
95  vy > -1000. && //and beam shielding
96  !(vx > 2250. && vx < 4250. && (vz > -(33927. + 18000.) || vz < -(33927. + 19500.))) &&
97  !(vx >= 4250. && vx < 6650. && vz > -(33927. + 18000.) && vz < -(33927. + 16000.)))
98  return Air;
99 
100  //connection between PM56 shaft and UJ56 cavern
101  if (vx > 9000. && vx < 18220. &&
102  sqrt((vy - 50.) * (vy - 50.) + (vz + 24227. - Z_PX56) * (vz + 24227. - Z_PX56)) < 3550. && vy > -1000.)
103  return Air;
104 
105  return Unknown;
106 }
107 
108 inline int inWallAfterAir(double vx, double vy, double vz) {
109  // phase II surface building
110  if (vy < SurfaceOfEarth && vy >= (SurfaceOfEarth - 2250.)) {
111  if (std::fabs(vz - Z_PX56) < 30000. && std::fabs(vx) < 10950)
112  return Wall;
113  // foundation of crane
114  if (std::fabs(vz - Z_PX56) < 9000. && std::fabs(vx) >= 10950 && std::fabs(vx) < 16950)
115  return Wall;
116  }
117 
118  // CMS cavern (UXC 55)
119  if (std::fabs(vz) < 29278. && sqrt((vx * 1.1576) * (vx * 1.1576) + vy * vy) < 16830. && vy > -11762.)
120  return Wall;
121 
122  // access shaft (PX 56)
123  if (vy > 0. && vy < (SurfaceOfEarth - 2250.) && //t(shaft wall)=2150.
124  sqrt(vx * vx + (vz - Z_PX56) * (vz - Z_PX56)) < 12400.)
125  return Wall;
126 
127  // Shaft (PM 54)
128  if (vy > 3233. && vy < (SurfaceOfEarth - 1000.) && //t~=t(PX56)/R(PX56)*R(PM54)
129  sqrt((vx - 26600.) * (vx - 26600.) + (vz - 30100. - Z_PX56) * (vz - 30100. - Z_PX56)) <
130  6050. + 2150. / 10250. * 6050.)
131  return Wall;
132  //sqrt((vx-5000.)*(vx-5000.) + (vz-30100.-Z_PX56)*(vz-30100.-Z_PX56))//@@@@@
133  //< 10050.+2150./10250.*6050.) return Wall;//@@@@@
134  else if (vy >= SurfaceOfEarth - 1000. && vy < SurfaceOfEarth && //t~=t(PX56)/R(PX56)*R(PM54)
135  sqrt((vx - 26600.) * (vx - 26600.) + (vz - 30100. - Z_PX56) * (vz - 30100. - Z_PX56)) <
136  6050. + 2150. / 10250. * 6050. + 1800.)
137  return Wall;
138  //sqrt((vx-5000.)*(vx-5000.) + (vz-30100.-Z_PX56)*(vz-30100.-Z_PX56))//@@@@@
139  //< 10050.+2150./10250.*10050. +1800.) return Wall; //@@@@@@
140 
141  // Shaft (PM 56)
142  if (vy > -5450. && vy < (SurfaceOfEarth - 1000.) && //t~=t(PX56)/R(PX56)*R(PM56)
143  sqrt((vx - 18220.) * (vx - 18220.) + (vz + 24227. - Z_PX56) * (vz + 24227. - Z_PX56)) <
144  3550. + 2150. / 10250. * 3550.)
145  return Wall;
146  else if (vy > SurfaceOfEarth - 1000. && vy < SurfaceOfEarth && //t~=t(PX56)/R(PX56)*R(PM56)
147  sqrt((vx - 18220.) * (vx - 18220.) + (vz + 24227. - Z_PX56) * (vz + 24227. - Z_PX56)) <
148  3550. + 2150. / 10250. * 3550. + 1800.)
149  return Wall;
150 
151  //Service cavern USC 55
152  if (vz > -(22050. + 1150.) && vz < (62050. + 1150.) &&
153  sqrt((vx - 29550.) * (vx - 29550.) + (vy - 3233.) * (vy - 3233.)) < 9050. + 950. && vy > -3650. - 2000.)
154  return Wall; //8762=estimate, to be checked
155 
156  //Pillar between CMS collision cavern and service cavern
157  if (vz > -29278. + 1000. && vz < 29278. + 1000.) {
158  if (vy > -17985. && vy < 10410. && vx > 13300. && vx < 20500.)
159  return Wall;
160 
161  if (vy > 0. && vy < 10410. && vx > 10000. && vx <= 13300.)
162  return Wall;
163 
164  if (vy > -3650. - 2000. && vy < -3233. && // bottom edge between pillar and service cavern
165  vx > 20000. && vx < 24000.)
166  return Wall;
167  if (vy > -11762. && vy < -5000. && // bottom edge between pillar and UXC55 cavern
168  vx > 10500. && vx < 14000.)
169  return Wall;
170  }
171 
172  if (vy > -14000. && vy < -1450. && //TX54 galerie surrounding
173  vz > 13460. && vz < 17260. && vx >= 20500. && vx < 24550.)
174  return Wall;
175 
176  //R56, LHC beam tunnel East
177  if (vz > -85000. && vz < -28510.) { //UJ57 junction to UXC55 cavern
178  if (sqrt(vy * vy + (vx - 350.) * (vx - 350.)) < 2250.)
179  return Wall;
180  }
181 
182  //R54, LHC beam tunnel West
183  if (vz > 26550. && vz < 63000. && //UJ57 junction to UXC55 cavern
184  sqrt(vy * vy + (vx - 350.) * (vx - 350.)) < 2250.)
185  return Wall;
186 
187  //UJ56 cavern
188  if (vz > -(58875. + 500.) && vz < -(33927. - 500.) && sqrt(vy * vy + (vx - 4450.) * (vx - 4450.)) < (6750. + 500.) &&
189  vy > -3650.)
190  return Wall;
191 
192  //connection between PM56 shaft and UJ56 cavern
193  if (vx > 9000. && vx < 18220. &&
194  sqrt((vy - 50.) * (vy - 50.) + (vz + 24227. - Z_PX56) * (vz + 24227. - Z_PX56)) < 3550. + 500. && vy > -3650.)
195  return Wall;
196 
197  return Unknown;
198 }
199 
200 inline int inClayOrRockAfterWall(double vx, double vy, double vz, double ClayWidth) {
201  //So, it is not plug, air and wall, Check for clay
202  if (vy >= SurfaceOfEarth - ClayWidth && vy < SurfaceOfEarth)
203  return Clay;
204 
205  //So, it is not plug, air, wall and clay, Check for rock
206  if (vy < SurfaceOfEarth - ClayWidth)
207  return Rock;
208 
209  return Unknown;
210 }
211 
212 inline int inClayAfterWall(double vx, double vy, double vz, double ClayWidth) {
213  //So, it is not plug, air and wall, Check for clay
214  if (vy >= SurfaceOfEarth - ClayWidth && vy < SurfaceOfEarth)
215  return Clay;
216 
217  return Unknown;
218 }
219 
220 inline int inRockAfterClay(double vx, double vy, double vz, double ClayWidth) {
221  //So, it is not plug, air, wall and clay, Check for rock
222  if (vy < SurfaceOfEarth - ClayWidth)
223  return Rock;
224 
225  return Unknown;
226 }
227 
228 inline int inMat(double vx,
229  double vy,
230  double vz,
231  double PlugVx = PlugOnShaftVx,
232  double PlugVz = PlugOnShaftVz,
233  double ClayWidth = DefaultClayWidth) {
234  //check for Plug
235  if (inPlug(vx, vy, vz, PlugVx, PlugVz))
236  return Plug;
237 
238  //So, it is not plug, Check for air
239  if (inAirAfterPlug(vx, vy, vz))
240  return Air;
241 
242  //So, it is not plug and air, Check for wall
243  if (inWallAfterAir(vx, vy, vz))
244  return Wall;
245 
246  //So, it is not plug, air and wall, Check for clay
247  if (vy >= SurfaceOfEarth - ClayWidth && vy < SurfaceOfEarth)
248  return Clay;
249 
250  //So, it is not plug, air, wall and clay, Check for rock
251  if (vy < SurfaceOfEarth - ClayWidth)
252  return Rock;
253 
254  std::cout << "Point5MaterialMap.h: Warning! No Material recognised for point: vx=" << vx << " vy=" << vy
255  << " vz=" << vz << std::endl;
256  //Something went wrong
257  return Unknown;
258 }
259 
260 #endif
inPlug
int inPlug(double vx, double vy, double vz, double PlugVx=PlugOnShaftVx, double PlugVz=PlugOnShaftVz)
Definition: Point5MaterialMap.cc:9
inClayAfterWall
int inClayAfterWall(double vx, double vy, double vz, double ClayWidth)
Definition: Point5MaterialMap.cc:212
SurfaceOfEarth
const double SurfaceOfEarth
Definition: CosmicMuonParameters.h:27
inWallAfterAir
int inWallAfterAir(double vx, double vy, double vz)
Definition: Point5MaterialMap.cc:108
gather_cfg.cout
cout
Definition: gather_cfg.py:144
reco::Unknown
Definition: MuonSimInfo.h:32
DefaultClayWidth
const double DefaultClayWidth
Definition: CosmicMuonParameters.h:38
Clay
Definition: CosmicMuonParameters.h:61
Plug
Definition: CosmicMuonParameters.h:61
inMat
int inMat(double vx, double vy, double vz, double PlugVx=PlugOnShaftVx, double PlugVz=PlugOnShaftVz, double ClayWidth=DefaultClayWidth)
Definition: Point5MaterialMap.cc:228
PlugXlength
const double PlugXlength
Definition: CosmicMuonParameters.h:42
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
CMSCGENproducer_cfi.PlugVx
PlugVx
Definition: CMSCGENproducer_cfi.py:23
Z_PX56
const double Z_PX56
Definition: CosmicMuonParameters.h:28
PlugZlength
const double PlugZlength
Definition: CosmicMuonParameters.h:43
CosmicMuonParameters.h
PlugNoseZlength
const double PlugNoseZlength
Definition: CosmicMuonParameters.h:45
CMSCGENproducer_cfi.PlugVz
PlugVz
Definition: CMSCGENproducer_cfi.py:24
PlugNoseXlength
const double PlugNoseXlength
Definition: CosmicMuonParameters.h:44
Wall
Definition: CosmicMuonParameters.h:61
Rock
Definition: CosmicMuonParameters.h:61
Air
Definition: CosmicMuonParameters.h:61
inClayOrRockAfterWall
int inClayOrRockAfterWall(double vx, double vy, double vz, double ClayWidth)
Definition: Point5MaterialMap.cc:200
PlugOnShaftVz
const double PlugOnShaftVz
Definition: CosmicMuonParameters.h:47
PlugOnShaftVx
const double PlugOnShaftVx
Definition: CosmicMuonParameters.h:46
inAirAfterPlug
int inAirAfterPlug(double vx, double vy, double vz)
Definition: Point5MaterialMap.cc:21
PlugWidth
const double PlugWidth
Definition: CosmicMuonParameters.h:41
inRockAfterClay
int inRockAfterClay(double vx, double vy, double vz, double ClayWidth)
Definition: Point5MaterialMap.cc:220
CMSCGENproducer_cfi.ClayWidth
ClayWidth
Definition: CMSCGENproducer_cfi.py:32