BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
GemConfigCalculate_Run9_v2.C
Go to the documentation of this file.
1/*
2 * Macro for calculating GEM detector parameters and writing them
3 * into an XML file required for simulation and reconstruction.
4 * The XML file should be placed in the 'parameters/gem/XMLConfigs' directory.
5 *
6 * GEM configuration: Run9 (8 stations), version 2.0
7 *
8 * Features:
9 * - Module width updated to 81.52 cm, corresponding to 1019 straight strips.
10 * - Previous version (v.1) used 81.6 cm, corresponding to 1020 straight strips.
11 * - Hot zone sizes updated according to strip readout (prints).
12 * - Cold and hot zone strips are aligned without shifts.
13 *
14 * Author: Baranov D.
15 * Date: 20.07.2026
16 */
17
18#include "Rtypes.h"
19
20R__ADD_INCLUDE_PATH($VMCWORKDIR)
21
22#include "TString.h"
23
24#include <fstream>
25
26using namespace TMath;
27using namespace std;
28
29// Set Parameters of GEMs -------------------------------------------------------
30const Int_t NStations = 8; // stations in the detector
31const Int_t NMaxModules = 4; // max. number of modules in a station
32
33const Int_t NModulesInStations[NStations] = {4, 4, 4, 4, 4, 4, 4, 1};
34
35// X-position of the hole center for the plane closest to the target (in a station)
37 +1.419, // 0 st. (M15)
38 +2.529, // 1 st. (M10)
39 +3.408, // 2 st. (M14)
40 +4.697, // 3 st. (M8)
41 +6.335, // 4 st. (M16)
42 +8.213, // 5 st. (M7)
43 +9.784, // 6 st. (M12)
44 +50.494 // 7 st. (small GEM)
45};
46
47// Y-position of the hole center for the plane closest to the target (in a station)
49 -0.032, // 0 st. (M15)
50 +0.123, // 1 st. (M10)
51 +0.026, // 2 st. (M14)
52 -0.013, // 3 st. (M8),
53 -0.026, // 4 st. (M16)
54 +0.058, // 5 st. (M7)
55 -0.048, // 6 st. (M12)
56 -0.186 // 7 st. (small GEM)
57};
58
59// Z-position of gas volume for the plane closest to the target (in a station)
61 +61.107, // 0 st. (M15)
62 +92.313, // 1 st. (M10)
63 +123.541, // 2 st. (M14)
64 +154.778, // 3 st. (M8)
65 +185.458, // 4 st. (M16)
66 +217.141, // 5 st. (M7)
67 +248.367, // 6 st. (M12)
68 +792.532 // 7 st. (small GEM)
69};
70
71// Shifts for the second plane in a station relative to the closest half-plane
73 +0.111, // 0 st. (M6)
74 +0.142, // 1 st. (M13)
75 +0.081, // 2 st. (M11)
76 +0.100, // 3 st. (M18)
77 +0.092, // 4 st. (M5)
78 +0.113, // 5 st. (M17)
79 +0.155, // 6 st. (M9)
80 +0.0 // 7 st. (small GEM)
81};
83 +0.008, // 0 st. (M6)
84 -0.100, // 1 st. (M13)
85 +0.048, // 2 st. (M11)
86 +0.042, // 3 st. (M18)
87 +0.109, // 4 st. (M5)
88 -0.089, // 5 st. (M17)
89 +0.168, // 6 st. (M9)
90 +0.0 // 7 st. (small GEM)
91};
93 +4.691, // 0 st. (M6)
94 +4.158, // 1 st. (M13)
95 +4.672, // 2 st. (M11)
96 +4.124, // 3 st. (M18)
97 +4.683, // 4 st. (M5)
98 +3.995, // 5 st. (M17)
99 +4.063, // 6 st. (M9)
100 +0.0 // 7 st. (small GEM)
101};
102
103//(X-Y-Z)Shifts of modules in each station
105 {163.04 * 0.25 + xShift[0], -163.04 * 0.25 + xShift[0], // 0 st. (upper h. plane)
106 163.04 * 0.25, -163.04 * 0.25}, // 0 st. (lower h. plane)
107
108 {163.04 * 0.25, -163.04 * 0.25, // 1 st. (upper h. plane)
109 163.04 * 0.25 + xShift[1], -163.04 * 0.25 + xShift[1]}, // 1 st. (lower h. plane)
110
111 {163.04 * 0.25 + xShift[2], -163.04 * 0.25 + xShift[2], // 2 st. (upper h. plane)
112 163.04 * 0.25, -163.04 * 0.25}, // 2 st. (lower h. plane)
113
114 {163.04 * 0.25, -163.04 * 0.25, // 3 st. (upper h. plane)
115 163.04 * 0.25 + xShift[3], -163.04 * 0.25 + xShift[3]}, // 3 st. (lower h. plane)
116
117 {163.04 * 0.25 + xShift[4], -163.04 * 0.25 + xShift[4], // 4 st. (upper h. plane)
118 163.04 * 0.25, -163.04 * 0.25}, // 4 st. (lower h. plane)
119
120 {163.04 * 0.25, -163.04 * 0.25, // 5 st. (upper h. plane)
121 163.04 * 0.25 + xShift[5], -163.04 * 0.25 + xShift[5]}, // 5 st. (lower h. plane)
122
123 {163.04 * 0.25 + xShift[6], -163.04 * 0.25 + xShift[6], // 6 st. (upper h. plane)
124 163.04 * 0.25, -163.04 * 0.25}, // 6 st. (lower h. plane)
125
126 {0.0} // 7 st.
127};
129 {+22.5 + yShift[0], +22.5 + yShift[0], // 0 st. (upper h. plane)
130 -19.5, -19.5}, // 0 st. (lower h. plane)
131
132 {+22.5, +22.5, // 1 st. (upper h. plane)
133 -19.5 + yShift[1], -19.5 + yShift[1]}, // 1 st. (lower h. plane)
134
135 {+22.5 + yShift[2], +22.5 + yShift[2], // 2 st. (upper h. plane)
136 -19.5, -19.5}, // 2 st. (lower h. plane)
137
138 {+22.5, +22.5, // 3 st. (upper h. plane)
139 -19.5 + yShift[3], -19.5 + yShift[3]}, // 3 st. (lower h. plane)
140
141 {+22.5 + yShift[4], +22.5 + yShift[4], // 4 st. (upper h. plane)
142 -19.5, -19.5}, // 4 st. (lower h. plane)
143
144 {+22.5, +22.5, // 5 st. (upper h. plane)
145 -19.5 + yShift[5], -19.5 + yShift[5]}, // 5 st. (lower h. plane)
146
147 {+22.5 + yShift[6], +22.5 + yShift[6], // 6 st. (upper h. plane)
148 -19.5, -19.5}, // 6 st. (lower h. plane)
149
150 {0.0} // 7 st.
151};
153 {zShift[0], zShift[0], 0.0, 0.0}, // 0 st.
154 {0.0, 0.0, zShift[1], zShift[1]}, // 1 st.
155 {zShift[2], zShift[2], 0.0, 0.0}, // 2 st.
156 {0.0, 0.0, zShift[3], zShift[3]}, // 3 st.
157 {zShift[4], zShift[4], 0.0, 0.0}, // 4 st.
158 {0.0, 0.0, zShift[5], zShift[5]}, // 5 st.
159 {zShift[6], zShift[6], 0.0, 0.0}, // 6 st.
160 {0.0} // 7 st.
161};
162
163/*
164 * Basic station:
165 *
166 * -------------------- --------------------
167 * | | |
168 * | module 0 | module 1 | ^ beam direction (Z)
169 * | | | /
170 * | ------------|-------------- | /
171 * | / | / | /
172 * | / | / |/
173 * -----------------------------------------
174 * | \ | \ |
175 * | \ | \ |
176 * | \___________|______________\ |
177 * | | |
178 * | | |
179 * | module 2 | module 3 |
180 * -----------------------------------------
181 *
182 */
183
184// rotations of stations around y-axis by 180 deg.
185const Bool_t YStationRotations[NStations] = {true /*0*/, false /*1*/, true /*2*/, false /*3*/,
186 true /*4*/, false /*5*/, true /*6*/, false /*7*/};
187
188// rotations of stations around x-axis by 180 deg.
189const Bool_t XStationRotations[NStations] = {false /*0*/, false /*1*/, false /*2*/, false /*3*/,
190 false /*4*/, false /*5*/, false /*6*/, false /*7*/};
191
192// drift direction in each module ("true" is "forward", "false" is "backward")
194 {false, false, true, true}, // st. 0
195 {true, true, false, false}, // st. 1
196 {false, false, true, true}, // st. 2
197 {true, true, false, false}, // st. 3
198 {false, false, true, true}, // st. 4
199 {true, true, false, false}, // st. 5
200 {false, false, true, true}, // st. 6
201 {true} // st. 7
202};
203
204// thicknesses of gaps inside a GEM chamber (for all modules)
209
210// upper half-plane (type UHP with sizes of 163.2 x 45.0 cm) --------------------
211const Double_t StripPitch_UHP = 0.08; // cm
212
215
218
219const Double_t XHotZoneLayerSize_InclinedStrips_UHP_LeftMod[2] = {38.0490, 42.0683}; // [0] - min, [1] - max
220const Double_t XHotZoneLayerSize_InclinedStrips_UHP_RightMod[2] = {38.0157, 42.0349}; // [0] - min, [1] - max
221
222const Double_t YHotZoneLayerSize_InclinedStrips_UHP = 15.0; // deg. (plus - clockwise, minus - anticlockwise)
223//------------------------------------------------------------------------------
224
225// lower half-plane (type LHP with sizes of 163.2 x 39.0 cm) --------------------
226const Double_t StripPitch_LHP = 0.08; // cm
227
230
233
234const Double_t XHotZoneLayerSize_InclinedStrips_LHP_LeftMod[2] = {38.0490, 42.0683}; // [0] - min, [1] - max
235const Double_t XHotZoneLayerSize_InclinedStrips_LHP_RightMod[2] = {38.0157, 42.0349}; // [0] - min, [1] - max
236
237const Double_t YHotZoneLayerSize_InclinedStrips_LHP = 15.0; // deg. (plus - clockwise, minus - anticlockwise)
238//------------------------------------------------------------------------------
239
240// small GEM (type SMALL with sizes of 10.0 x 10.0 cm) --------------------------
241const Double_t StripPitch_SMALL = 0.04; // cm
242
245//------------------------------------------------------------------------------
246
248const Int_t NLayersInModule[NStations] = {4, 4, 4, 4, 4, 4, 4, 2 /*smallGEM*/};
249
251 // 0 - main, 1 - hot zone
252 {0, 0, 1, 1}, // st. 0
253 {0, 0, 1, 1}, // st. 1
254 {0, 0, 1, 1}, // st. 2
255 {0, 0, 1, 1}, // st. 3
256 {0, 0, 1, 1}, // st. 4
257 {0, 0, 1, 1}, // st. 5
258 {0, 0, 1, 1}, // st. 6
259 {0, 0} // st. 7 (small GEM)
260};
261
263 // "lower" is straight strips, "upper " is inclined strips
264 {"lower", "upper", "lower", "upper"}, // st. 0
265 {"lower", "upper", "lower", "upper"}, // st. 1
266 {"lower", "upper", "lower", "upper"}, // st. 2
267 {"lower", "upper", "lower", "upper"}, // st. 3
268 {"lower", "upper", "lower", "upper"}, // st. 4
269 {"lower", "upper", "lower", "upper"}, // st. 5
270 {"lower", "upper", "lower", "upper"}, // st. 6
271 {"lower", "upper"} // st. 7 (small GEM)
272};
273
274// stereo angle for all layers with inclined strips in each module of a basic station
276 // deg. (plus - clockwise, minus - anticlockwise)
277 {+15.0, +15.0, -15.0, -15.0}, // st. 0
278 {+15.0, +15.0, -15.0, -15.0}, // st. 1
279 {+15.0, +15.0, -15.0, -15.0}, // st. 2
280 {+15.0, +15.0, -15.0, -15.0}, // st. 3
281 {+15.0, +15.0, -15.0, -15.0}, // st. 4
282 {+15.0, +15.0, -15.0, -15.0}, // st. 5
283 {+15.0, +15.0, -15.0, -15.0}, // st. 6
284 {+90.0} // st. 7 (small GEM)
285};
286
293
294// Strip borders ---------------------------------------------------------------
295Bool_t useCoordinateBorders = kTRUE; // use coordinate borders instead of ENUM borders
296const Int_t NLayerTypes = 2; // 0 - straight strips (lower layer), 1 - inclined strips (upper layer)
297
298// Offsets of strip start/end from the module edge.
299// Positive = inset (inward), negative = outset (outward).
300
301// Cold zone
303 {0, -0.0058}, // module 0: {straight strips, inclined strips}
304 {0, +0.0488}, // module 1
305 {0, -0.0400}, // module 2
306 {0, +0.0148} // module 3
307};
309 {0, 0}, // module 0: {straight strips, inclined strips}
310 {0, 0}, // module 1
311 {0, 0}, // module 2
312 {0, 0} // module 3
313};
315 {0, 0}, // module 0: {straight strips, inclined strips}
316 {0, 0}, // module 1
317 {0, 0}, // module 2
318 {0, 0} // module 3
319};
321 {0, 0}, // module 0: {straight strips, inclined strips}
322 {0, 0}, // module 1
323 {0, 0}, // module 2
324 {0, 0} // module 3
325};
326
327// Hot zone
329 {0, 0}, // module 0: {straight strips, inclined strips}
330 {0, +0.0441}, // module 1
331 {0, 0}, // module 2
332 {0, +0.0441} // module 3
333};
335 {0, 0}, // module 0: {straight strips, inclined strips}
336 {0, 0}, // module 1
337 {0, 0}, // module 2
338 {0, 0} // module 3
339};
341 {0, 0}, // module 0: {straight strips, inclined strips}
342 {0, 0}, // module 1
343 {0, 0}, // module 2
344 {0, 0} // module 3
345};
347 {0, 0}, // module 0: {straight strips, inclined strips}
348 {0, 0}, // module 1
349 {0, 0}, // module 2
350 {0, 0} // module 3
351};
352//------------------------------------------------------------------------------
353
355
356// dead zones (upper half-plane) ------------------------------------------------
363
371
379
387
395
413
414//------------------------------------------------------------------------------
415
416// dead zones (lower half-plane) ------------------------------------------------
423
431
439
447
455
473
474//------------------------------------------------------------------------------
475
476// Function declarations
477// void PrintInfo();
478void CalculateParameters(TString config_name, TString author, TString date);
479//------------------------------------------------------------------------------
480
482{
483
484 TString ConfigName = "GemRun9_v2";
485 TString AuthorName = "Baranov D.";
486 TString DateCreated = "30.07.2026";
487
488 // PrintInfo();
489 CalculateParameters(ConfigName, AuthorName, DateCreated);
490
491 cout << "It's the end"
492 << "\n";
493 // gApplication->Terminate();
494}
495//------------------------------------------------------------------------------
496
497void CalculateParameters(TString config_name, TString author, TString date)
498{
499
500 TString FileName = config_name + TString(".xml");
501
502 cout << "\nCreating XML configuration file...\n";
503 cout << " Configuration name: " << config_name << "\n";
504 cout << " Author: " << author << "\n";
505 cout << " Date created: " << date << "\n";
506 cout << " File path: " << FileName << "\n";
507 cout << "\n";
508
509 // WARNING(!!!): the file will be written in the current directory
510 ofstream FileOut(FileName.Data(), ios::out);
511
512 FileOut << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
513
514 // reference frame usage comment
515 FileOut << "<!--\
516 \r\tConfig: "
517 << config_name << "\
518 \r\tAuthor: "
519 << author << "\
520 \r\tDate: "
521 << date << "\
522 \r\tA right-handed coordinates are used.\
523 \r\tIf you look at the GEMs from the target:\
524 \r\t\tx-axis is directed to the left,\
525 \r\t\ty-axis - to the top,\
526 \r\t\tz-axis - to the GEMs.\
527 \r-->\n\n";
528
529 FileOut << "<StationSet>\n";
530 FileOut << "\n";
531
532 for (Int_t istation = 0; istation < NStations; ++istation) {
533
534 // cout << "istation = " << istation << ": -----------------------------\n";
535
536 FileOut << "<!-- Station " << istation << " -->\n"; // comment
537
538 FileOut << "\t<Station";
539 FileOut << " xPosition=\"" << XStationPositions[istation] << "\"";
540 FileOut << " yPosition=\"" << YStationPositions[istation] << "\"";
541 FileOut << " zPosition=\"" << ZStationPositions[istation] << "\"";
542 if (istation != 7)
543 FileOut << " beamHole=\"" << HoleRadius << "\""; // small GEM
544 FileOut << ">\n";
545 FileOut << "\n";
546
547 for (Int_t imodule = 0; imodule < NModulesInStations[istation]; ++imodule) {
548
549 // cout << " imodule = " << imodule << "\n";
550
551 FileOut << "\t\t<!-- module " << imodule << " -->\n"; // comment
552
553 FileOut << "\t\t<Module";
554 FileOut << " xShift=\"" << XModuleShifts[istation][imodule] << "\"";
555 FileOut << " yShift=\"" << YModuleShifts[istation][imodule] << "\"";
556 FileOut << " zShift=\"" << ZModuleShifts[istation][imodule] << "\"";
557 FileOut << " driftDirection=\"" << (DriftDirectionInModules[istation][imodule] ? "forward" : "backward")
558 << "\"";
559 FileOut << " gap_drift_thick=\"" << Gap_Drift_Thickness << "\"";
560 FileOut << " gap_ftransf_thick=\"" << Gap_FirstTransfer_Thickness << "\"";
561 FileOut << " gap_stransf_thick=\"" << Gap_SecondTransfer_Thickness << "\"";
562 FileOut << " gap_induct_thick=\"" << Gap_Induction_Thickness << "\"";
563 FileOut << ">\n";
564
565 for (Int_t ilayer = 0; ilayer < NLayersInModule[istation]; ++ilayer) {
566
567 // cout << " ilayer = " << ilayer << "\n";
568
569 FileOut << "\t\t\t<Layer";
570
571 FileOut << " zoneNumber=\"" << ZoneTypeOfLayers[istation][ilayer] << "\"";
572 FileOut << " type=\"" << StripTypeOfLayes[istation][ilayer] << "\"";
573
574 // define a strip angle for the current layer
575 Double_t layer_angle;
576 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
577 layer_angle = 0.0;
578 } else {
579 layer_angle = StripStereoAngleInModules[istation][imodule];
580 if (YStationRotations[istation] ^ XStationRotations[istation])
581 layer_angle *= -1;
582 }
583
584 FileOut << " stripAngle=\"" << layer_angle << "\"";
585
586 if (istation == 7) { // small GEM
587 FileOut << " pitch=\"" << StripPitch_SMALL << "\"";
588 } else {
589 if (imodule == 0 || imodule == 1)
590 FileOut << " pitch=\"" << StripPitch_UHP << "\"";
591 if (imodule == 2 || imodule == 3)
592 FileOut << " pitch=\"" << StripPitch_LHP << "\"";
593 }
594
595 // define 'xorig' and 'yorig' coordinates (left bottom point), 'xsize' and 'ysize'
596 Double_t xorig = 0.0; // default
597 Double_t yorig = 0.0; // default
598 Double_t xsize = 0.0; // default
599 Double_t ysize = 0.0; // default
600
601 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // main zone
602 if (istation == 7) { // small GEM
603 xorig = 0.0 + XMainZoneLayerSize_SMALL * 0.5;
604 yorig = 0.0 - YMainZoneLayerSize_SMALL * 0.5;
607 } else {
608 if (imodule == 0 || imodule == 1) {
609 xorig = 0.0 + XMainZoneLayerSize_UHP * 0.5;
610 yorig = 0.0 - YMainZoneLayerSize_UHP * 0.5;
613 }
614 if (imodule == 2 || imodule == 3) {
615 xorig = 0.0 + XMainZoneLayerSize_LHP * 0.5;
616 yorig = 0.0 - YMainZoneLayerSize_LHP * 0.5;
619 }
620 }
621 } else { // hot zone
622 switch (imodule) {
623 case 0:
624 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
626 yorig = 0.0 - YMainZoneLayerSize_UHP * 0.5;
629 } else {
630 xorig =
631 0.0 - XMainZoneLayerSize_UHP * 0.5
634 yorig = 0.0 - YMainZoneLayerSize_UHP * 0.5;
635 xsize =
639 }
640 break;
641
642 case 1:
643 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
644 xorig = 0.0 + XMainZoneLayerSize_UHP * 0.5;
645 yorig = 0.0 - YMainZoneLayerSize_UHP * 0.5;
648 } else {
649 xorig = 0.0 + XMainZoneLayerSize_UHP * 0.5;
650 yorig = 0.0 - YMainZoneLayerSize_UHP * 0.5;
651 xsize =
655 }
656 break;
657
658 case 2:
659 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
664 } else {
665 xorig =
666 0.0 - XMainZoneLayerSize_LHP * 0.5
670 xsize =
674 }
675 break;
676
677 case 3:
678 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
679 xorig = 0.0 + XMainZoneLayerSize_LHP * 0.5;
683 } else {
684 xorig = 0.0 + XMainZoneLayerSize_LHP * 0.5;
686 xsize =
690 }
691 break;
692 }
693 }
694
695 FileOut << " xorig=\"" << xorig << "\"";
696 FileOut << " yorig=\"" << yorig << "\"";
697 FileOut << " xsize=\"" << xsize << "\"";
698 FileOut << " ysize=\"" << ysize << "\"";
699
700 if (YStationRotations[istation] == false)
701 FileOut << " stripDirection=\""
702 << "LeftToRight"
703 << "\"";
704 else
705 FileOut << " stripDirection=\""
706 << "RightToLeft"
707 << "\"";
708
709 // Strip borders -----------------------------------------------
711 Double_t lxborder = 0.0, lyborder = 0.0, rxborder = 0.0, ryborder = 0.0;
712
713 // Station 7 (small GEM) – no offsets, use full active area
714 if (istation == 7) {
715 lxborder = xorig;
716 lyborder = yorig + ysize;
717 rxborder = xorig - xsize;
718 ryborder = yorig;
719 } else {
720 Int_t strip_type = (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) ? 0 : 1;
721
722 // Determine physical module index taking into account station rotation around Y
723 Int_t physicalModule;
724 if (!YStationRotations[istation]) {
725 physicalModule = imodule;
726 } else {
727 if (imodule == 0)
728 physicalModule = 1;
729 else if (imodule == 1)
730 physicalModule = 0;
731 else if (imodule == 2)
732 physicalModule = 3;
733 else if (imodule == 3)
734 physicalModule = 2;
735 else
736 physicalModule = imodule; // station 7 (small GEM)
737 }
738
739 // Calculate strip borders according to strip offsets
740 // Positive offset = inset (inward), negative = outset (outward)
741 Double_t startX, startY, endX, endY;
742 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
743 startX = XOffset_FirstStrip_ColdZone[physicalModule][strip_type];
744 startY = YOffset_FirstStrip_ColdZone[physicalModule][strip_type];
745 endX = XOffset_LastStrip_ColdZone[physicalModule][strip_type];
746 endY = YOffset_LastStrip_ColdZone[physicalModule][strip_type];
747 } else { // hot
748 startX = XOffset_FirstStrip_HotZone[physicalModule][strip_type];
749 startY = YOffset_FirstStrip_HotZone[physicalModule][strip_type];
750 endX = XOffset_LastStrip_HotZone[physicalModule][strip_type];
751 endY = YOffset_LastStrip_HotZone[physicalModule][strip_type];
752 }
753
754 switch (imodule) {
755 case 0:
756 if (!YStationRotations[istation]) {
757 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
758 // start=LeftTop, end=RightBottom
759 lxborder = xorig - startX;
760 lyborder = yorig + ysize - startY;
761 rxborder = (xorig - xsize) + endX;
762 ryborder = yorig + endY;
763 } else { // hot
764 // start=LeftBottom, end=RightBottom
765 lxborder = xorig - startX;
766 lyborder = yorig + startY;
767 rxborder = (xorig - xsize) + endX;
768 ryborder = yorig + endY;
769 }
770 } else { // rotated
771 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
772 // start=RightTop, end=LeftBottom
773 lxborder = xorig - endX;
774 lyborder = yorig + endY;
775 rxborder = (xorig - xsize) + startX;
776 ryborder = yorig + ysize - startY;
777 } else { // hot
778 // start=RightTop, end=LeftTop
779 lxborder = xorig - endX;
780 lyborder = yorig + ysize - endY;
781 rxborder = (xorig - xsize) + startX;
782 ryborder = yorig + ysize - startY;
783 }
784 }
785 break;
786
787 case 1:
788 if (!YStationRotations[istation]) {
789 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
790 // start=LeftTop, end=RightBottom
791 lxborder = xorig - startX;
792 lyborder = yorig + ysize - startY;
793 rxborder = (xorig - xsize) + endX;
794 ryborder = yorig + endY;
795 } else { // hot
796 // start=LeftTop, end=RightTop
797 lxborder = xorig - startX;
798 lyborder = yorig + ysize - startY;
799 rxborder = (xorig - xsize) + endX;
800 ryborder = yorig + ysize - endY;
801 }
802 } else { // rotated
803 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
804 // start=RightTop, end=LeftBottom
805 lxborder = xorig - endX;
806 lyborder = yorig + endY;
807 rxborder = (xorig - xsize) + startX;
808 ryborder = yorig + ysize - startY;
809 } else { // hot
810 // start=RightBottom, end=LeftBottom
811 lxborder = xorig - endX;
812 lyborder = yorig + endY;
813 rxborder = (xorig - xsize) + startX;
814 ryborder = yorig + startY;
815 }
816 }
817 break;
818
819 case 2:
820 if (!YStationRotations[istation]) {
821 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
822 // start=LeftBottom, end=RightTop
823 lxborder = xorig - startX;
824 lyborder = yorig + startY;
825 rxborder = (xorig - xsize) + endX;
826 ryborder = yorig + ysize - endY;
827 } else { // hot
828 // start=LeftTop, end=RightTop
829 lxborder = xorig - startX;
830 lyborder = yorig + ysize - startY;
831 rxborder = (xorig - xsize) + endX;
832 ryborder = yorig + ysize - endY;
833 }
834 } else { // rotated
835 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
836 // start=RightBottom, end=LeftTop
837 lxborder = xorig - endX;
838 lyborder = yorig + ysize - endY;
839 rxborder = (xorig - xsize) + startX;
840 ryborder = yorig + startY;
841 } else { // hot
842 // start=RightBottom, end=LeftBottom
843 lxborder = xorig - endX;
844 lyborder = yorig + endY;
845 rxborder = (xorig - xsize) + startX;
846 ryborder = yorig + startY;
847 }
848 }
849 break;
850
851 case 3:
852 if (!YStationRotations[istation]) {
853 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
854 // start=LeftBottom, end=RightTop
855 lxborder = xorig - startX;
856 lyborder = yorig + startY;
857 rxborder = (xorig - xsize) + endX;
858 ryborder = yorig + ysize - endY;
859 } else { // hot
860 // start=LeftBottom, end=RightBottom
861 lxborder = xorig - startX;
862 lyborder = yorig + startY;
863 rxborder = (xorig - xsize) + endX;
864 ryborder = yorig + endY;
865 }
866 } else { // rotated
867 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold
868 // start=RightBottom, end=LeftTop
869 lxborder = xorig - endX;
870 lyborder = yorig + ysize - endY;
871 rxborder = (xorig - xsize) + startX;
872 ryborder = yorig + startY;
873 } else { // hot
874 // start=RightTop, end=LeftTop
875 lxborder = xorig - endX;
876 lyborder = yorig + ysize - endY;
877 rxborder = (xorig - xsize) + startX;
878 ryborder = yorig + ysize - startY;
879 }
880 }
881 break;
882 }
883 }
884
885 FileOut << " lxborder=\"" << lxborder << "\"";
886 FileOut << " lyborder=\"" << lyborder << "\"";
887 FileOut << " rxborder=\"" << rxborder << "\"";
888 FileOut << " ryborder=\"" << ryborder << "\"";
889 FileOut << ">\n";
890 } else { // ENUM borders
891
892 TString lborder = "";
893 TString rborder = "";
894
895 switch (imodule) {
896 case 0:
897 if (YStationRotations[istation] == false) {
898 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold zone
899 lborder = "LeftTop";
900 rborder = "RightBottom";
901 } else { // hot zone
902 lborder = "LeftBottom";
903 rborder = "RightBottom";
904 }
905 } else {
906 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold zone
907 lborder = "LeftBottom";
908 rborder = "RightTop";
909 } else { // hot zone
910 lborder = "LeftTop";
911 rborder = "RightTop";
912 }
913 }
914 break;
915
916 case 1:
917 if (YStationRotations[istation] == false) {
918 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold zone
919 lborder = "LeftTop";
920 rborder = "RightBottom";
921 } else { // hot zone
922 lborder = "LeftTop";
923 rborder = "RightTop";
924 }
925 } else {
926 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold zone
927 lborder = "LeftBottom";
928 rborder = "RightTop";
929 } else { // hot zone
930 lborder = "LeftBottom";
931 rborder = "RightBottom";
932 }
933 }
934 break;
935
936 case 2:
937 if (YStationRotations[istation] == false) {
938 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold zone
939 lborder = "LeftBottom";
940 rborder = "RightTop";
941 } else { // hot zone
942 lborder = "LeftTop";
943 rborder = "RightTop";
944 }
945 } else {
946 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold zone
947 lborder = "LeftTop";
948 rborder = "RightBottom";
949 } else { // hot zone
950 lborder = "LeftBottom";
951 rborder = "RightBottom";
952 }
953 }
954 break;
955
956 case 3:
957 if (YStationRotations[istation] == false) {
958 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold zone
959 lborder = "LeftBottom";
960 rborder = "RightTop";
961 } else { // hot zone
962 lborder = "LeftBottom";
963 rborder = "RightBottom";
964 }
965 } else {
966 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // cold zone
967 lborder = "LeftTop";
968 rborder = "RightBottom";
969 } else { // hot zone
970 lborder = "LeftTop";
971 rborder = "RightTop";
972 }
973 }
974 break;
975 }
976
977 FileOut << " lborder=\"" << lborder << "\"";
978 FileOut << " rborder=\"" << rborder << "\"";
979 FileOut << ">\n";
980 }
981 //--------------------------------------------------------------
982
983 // add dead zones
984 if (istation != 7) { // small GEM
985 switch (imodule) {
986 // module 0 -------------------------------------------------
987 case 0:
988 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // main zone
989 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
990 FileOut << "\t\t\t\t<DeadZone>\n";
991 for (Int_t ipoint = 0; ipoint < 4; ++ipoint) {
992 FileOut << "\t\t\t\t\t<DeadPoint";
993 FileOut << " x=\"" << XDeadZone_Rect_UHP[ipoint] << "\"";
994 FileOut << " y=\"" << YDeadZone_Rect_UHP[ipoint] << "\"";
995 FileOut << "/>\n";
996 }
997 FileOut << "\t\t\t\t</DeadZone>\n";
998 } else { // inclined strips
999 FileOut << "\t\t\t\t<DeadZone>\n";
1000 for (Int_t ipoint = 0; ipoint < 4; ++ipoint) {
1001 FileOut << "\t\t\t\t\t<DeadPoint";
1002 if (YStationRotations[istation] == false) {
1003 FileOut << " x=\"" << XDeadZone_TrapLeft_UHP[ipoint] << "\"";
1004 FileOut << " y=\"" << YDeadZone_TrapLeft_UHP[ipoint] << "\"";
1005 } else {
1006 FileOut << " x=\"" << XDeadZone_TrapRight_UHP[ipoint] << "\"";
1007 FileOut << " y=\"" << YDeadZone_TrapRight_UHP[ipoint] << "\"";
1008 }
1009 FileOut << "/>\n";
1010 }
1011 FileOut << "\t\t\t\t</DeadZone>\n";
1012 }
1013 } else { // hot zone
1014 FileOut << "\t\t\t\t<DeadZone>"; // hole
1015 FileOut << " <!-- hole -->\n";
1016 for (Int_t ipoint = 0; ipoint < NPoints_DeadZone_Hole_UHP; ++ipoint) {
1017 FileOut << "\t\t\t\t\t<DeadPoint";
1018 FileOut << " x=\"" << XDeadZone_Hole_UHP[ipoint] << "\"";
1019 FileOut << " y=\"" << YDeadZone_Hole_UHP[ipoint] << "\"";
1020 FileOut << "/>\n";
1021 }
1022 FileOut << "\t\t\t\t</DeadZone>\n";
1023
1024 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("upper")) {
1025 FileOut << "\t\t\t\t<DeadZone>"; // triangle
1026 FileOut << " <!-- triangle -->\n";
1027 for (Int_t ipoint = 0; ipoint < 3; ++ipoint) {
1028 FileOut << "\t\t\t\t\t<DeadPoint";
1029 if (YStationRotations[istation] == false) {
1030 FileOut << " x=\"" << XDeadZone_TrianLeft_UHP[ipoint] << "\"";
1031 FileOut << " y=\"" << YDeadZone_TrianLeft_UHP[ipoint] << "\"";
1032 } else {
1033 FileOut << " x=\"" << XDeadZone_TrianRight_UHP[ipoint] << "\"";
1034 FileOut << " y=\"" << YDeadZone_TrianRight_UHP[ipoint] << "\"";
1035 }
1036 FileOut << "/>\n";
1037 }
1038 FileOut << "\t\t\t\t</DeadZone>\n";
1039 }
1040 }
1041 break;
1042 //----------------------------------------------------------
1043 // module 1 -------------------------------------------------
1044 case 1:
1045 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // main zone
1046 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
1047 FileOut << "\t\t\t\t<DeadZone>\n";
1048 for (Int_t ipoint = 0; ipoint < 4; ++ipoint) {
1049 FileOut << "\t\t\t\t\t<DeadPoint";
1050 FileOut << " x=\"" << XDeadZone_Rect_UHP[ipoint] * (-1) << "\"";
1051 FileOut << " y=\"" << YDeadZone_Rect_UHP[ipoint] << "\"";
1052 FileOut << "/>\n";
1053 }
1054 FileOut << "\t\t\t\t</DeadZone>\n";
1055 } else { // inclined strips
1056 FileOut << "\t\t\t\t<DeadZone>\n";
1057 for (Int_t ipoint = 0; ipoint < 4; ++ipoint) {
1058 FileOut << "\t\t\t\t\t<DeadPoint";
1059 if (YStationRotations[istation] == false) {
1060 FileOut << " x=\"" << XDeadZone_TrapRight_UHP[ipoint] * (-1) << "\"";
1061 FileOut << " y=\"" << YDeadZone_TrapRight_UHP[ipoint] << "\"";
1062 } else {
1063 FileOut << " x=\"" << XDeadZone_TrapLeft_UHP[ipoint] * (-1) << "\"";
1064 FileOut << " y=\"" << YDeadZone_TrapLeft_UHP[ipoint] << "\"";
1065 }
1066 FileOut << "/>\n";
1067 }
1068 FileOut << "\t\t\t\t</DeadZone>\n";
1069 }
1070 } else { // hot zone
1071 FileOut << "\t\t\t\t<DeadZone>"; // hole
1072 FileOut << " <!-- hole -->\n";
1073 for (Int_t ipoint = 0; ipoint < NPoints_DeadZone_Hole_UHP; ++ipoint) {
1074 FileOut << "\t\t\t\t\t<DeadPoint";
1075 FileOut << " x=\"" << XDeadZone_Hole_UHP[ipoint] * (-1) << "\"";
1076 FileOut << " y=\"" << YDeadZone_Hole_UHP[ipoint] << "\"";
1077 FileOut << "/>\n";
1078 }
1079 FileOut << "\t\t\t\t</DeadZone>\n";
1080
1081 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("upper")) {
1082 FileOut << "\t\t\t\t<DeadZone>"; // triangle
1083 FileOut << " <!-- triangle -->\n";
1084 for (Int_t ipoint = 0; ipoint < 3; ++ipoint) {
1085 FileOut << "\t\t\t\t\t<DeadPoint";
1086 if (YStationRotations[istation] == false) {
1087 FileOut << " x=\"" << XDeadZone_TrianRight_UHP[ipoint] * (-1) << "\"";
1088 FileOut << " y=\"" << YDeadZone_TrianRight_UHP[ipoint] << "\"";
1089 } else {
1090 FileOut << " x=\"" << XDeadZone_TrianLeft_UHP[ipoint] * (-1) << "\"";
1091 FileOut << " y=\"" << YDeadZone_TrianLeft_UHP[ipoint] << "\"";
1092 }
1093 FileOut << "/>\n";
1094 }
1095 FileOut << "\t\t\t\t</DeadZone>\n";
1096 }
1097 }
1098 break;
1099 //----------------------------------------------------------
1100 // module 2 -------------------------------------------------
1101 case 2:
1102 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // main zone
1103 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
1104 FileOut << "\t\t\t\t<DeadZone>\n";
1105 for (Int_t ipoint = 0; ipoint < 4; ++ipoint) {
1106 FileOut << "\t\t\t\t\t<DeadPoint";
1107 FileOut << " x=\"" << XDeadZone_Rect_LHP[ipoint] << "\"";
1108 FileOut << " y=\"" << YDeadZone_Rect_LHP[ipoint] * (-1) << "\"";
1109 FileOut << "/>\n";
1110 }
1111 FileOut << "\t\t\t\t</DeadZone>\n";
1112 } else { // inclined strips
1113 FileOut << "\t\t\t\t<DeadZone>\n";
1114 for (Int_t ipoint = 0; ipoint < 4; ++ipoint) {
1115 FileOut << "\t\t\t\t\t<DeadPoint";
1116 if (YStationRotations[istation] == false) {
1117 FileOut << " x=\"" << XDeadZone_TrapLeft_LHP[ipoint] << "\"";
1118 FileOut << " y=\"" << YDeadZone_TrapLeft_LHP[ipoint] * (-1) << "\"";
1119 } else {
1120 FileOut << " x=\"" << XDeadZone_TrapRight_LHP[ipoint] << "\"";
1121 FileOut << " y=\"" << YDeadZone_TrapRight_LHP[ipoint] * (-1) << "\"";
1122 }
1123 FileOut << "/>\n";
1124 }
1125 FileOut << "\t\t\t\t</DeadZone>\n";
1126 }
1127 } else { // hot zone
1128 FileOut << "\t\t\t\t<DeadZone>"; // hole
1129 FileOut << " <!-- hole -->\n";
1130 for (Int_t ipoint = 0; ipoint < NPoints_DeadZone_Hole_LHP; ++ipoint) {
1131 FileOut << "\t\t\t\t\t<DeadPoint";
1132 FileOut << " x=\"" << XDeadZone_Hole_LHP[ipoint] << "\"";
1133 FileOut << " y=\"" << YDeadZone_Hole_LHP[ipoint] * (-1) << "\"";
1134 FileOut << "/>\n";
1135 }
1136 FileOut << "\t\t\t\t</DeadZone>\n";
1137
1138 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("upper")) {
1139 FileOut << "\t\t\t\t<DeadZone>"; // triangle
1140 FileOut << " <!-- triangle -->\n";
1141 for (Int_t ipoint = 0; ipoint < 3; ++ipoint) {
1142 FileOut << "\t\t\t\t\t<DeadPoint";
1143 if (YStationRotations[istation] == false) {
1144 FileOut << " x=\"" << XDeadZone_TrianLeft_LHP[ipoint] << "\"";
1145 FileOut << " y=\"" << YDeadZone_TrianLeft_LHP[ipoint] * (-1) << "\"";
1146 } else {
1147 FileOut << " x=\"" << XDeadZone_TrianRight_LHP[ipoint] << "\"";
1148 FileOut << " y=\"" << YDeadZone_TrianRight_LHP[ipoint] * (-1) << "\"";
1149 }
1150 FileOut << "/>\n";
1151 }
1152 FileOut << "\t\t\t\t</DeadZone>\n";
1153 }
1154 }
1155 break;
1156 //----------------------------------------------------------
1157 // module 3 -------------------------------------------------
1158 case 3:
1159 if (ZoneTypeOfLayers[istation][ilayer] == 0) { // main zone
1160 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("lower")) {
1161 FileOut << "\t\t\t\t<DeadZone>\n";
1162 for (Int_t ipoint = 0; ipoint < 4; ++ipoint) {
1163 FileOut << "\t\t\t\t\t<DeadPoint";
1164 FileOut << " x=\"" << XDeadZone_Rect_LHP[ipoint] * (-1) << "\"";
1165 FileOut << " y=\"" << YDeadZone_Rect_LHP[ipoint] * (-1) << "\"";
1166 FileOut << "/>\n";
1167 }
1168 FileOut << "\t\t\t\t</DeadZone>\n";
1169 } else { // inclined strips
1170 FileOut << "\t\t\t\t<DeadZone>\n";
1171 for (Int_t ipoint = 0; ipoint < 4; ++ipoint) {
1172 FileOut << "\t\t\t\t\t<DeadPoint";
1173 if (YStationRotations[istation] == false) {
1174 FileOut << " x=\"" << XDeadZone_TrapRight_LHP[ipoint] * (-1) << "\"";
1175 FileOut << " y=\"" << YDeadZone_TrapRight_LHP[ipoint] * (-1) << "\"";
1176 } else {
1177 FileOut << " x=\"" << XDeadZone_TrapLeft_LHP[ipoint] * (-1) << "\"";
1178 FileOut << " y=\"" << YDeadZone_TrapLeft_LHP[ipoint] * (-1) << "\"";
1179 }
1180 FileOut << "/>\n";
1181 }
1182 FileOut << "\t\t\t\t</DeadZone>\n";
1183 }
1184 } else { // hot zone
1185 FileOut << "\t\t\t\t<DeadZone>"; // hole
1186 FileOut << " <!-- hole -->\n";
1187 for (Int_t ipoint = 0; ipoint < NPoints_DeadZone_Hole_LHP; ++ipoint) {
1188 FileOut << "\t\t\t\t\t<DeadPoint";
1189 FileOut << " x=\"" << XDeadZone_Hole_LHP[ipoint] * (-1) << "\"";
1190 FileOut << " y=\"" << YDeadZone_Hole_LHP[ipoint] * (-1) << "\"";
1191 FileOut << "/>\n";
1192 }
1193 FileOut << "\t\t\t\t</DeadZone>\n";
1194
1195 if (TString(StripTypeOfLayes[istation][ilayer]) == TString("upper")) {
1196 FileOut << "\t\t\t\t<DeadZone>"; // triangle
1197 FileOut << " <!-- triangle -->\n";
1198 for (Int_t ipoint = 0; ipoint < 3; ++ipoint) {
1199 FileOut << "\t\t\t\t\t<DeadPoint";
1200 if (YStationRotations[istation] == false) {
1201 FileOut << " x=\"" << XDeadZone_TrianRight_LHP[ipoint] * (-1) << "\"";
1202 FileOut << " y=\"" << YDeadZone_TrianRight_LHP[ipoint] * (-1) << "\"";
1203 } else {
1204 FileOut << " x=\"" << XDeadZone_TrianLeft_LHP[ipoint] * (-1) << "\"";
1205 FileOut << " y=\"" << YDeadZone_TrianLeft_LHP[ipoint] * (-1) << "\"";
1206 }
1207 FileOut << "/>\n";
1208 }
1209 FileOut << "\t\t\t\t</DeadZone>\n";
1210 }
1211 }
1212 break;
1213 //----------------------------------------------------------
1214 }
1215 }
1216 FileOut << "\t\t\t</Layer>\n";
1217 }
1218 FileOut << "\t\t</Module>\n";
1219 FileOut << "\n";
1220 }
1221 FileOut << "\t</Station>\n";
1222 FileOut << "\n";
1223
1224 // cout << "------------------------------------------------------------\n";
1225 }
1226
1227 FileOut << "</StationSet>\n";
1228
1229 FileOut.close();
1230}
bool Bool_t
int Int_t
unsigned int UInt_t
double Double_t
constexpr Bool_t kTRUE
#define R__ADD_INCLUDE_PATH(PATH)
StripNumberingDirection
@ RightToLeft
@ LeftToRight
const char * Data() const
const Double_t YStationPositions[NStations]
const Int_t NMaxModules
const Double_t ZStationPositions[NStations]
const Int_t NStations
const Double_t XStationPositions[NStations]
Double_t YDeadZone_Hole_LHP[NPoints_DeadZone_Hole_LHP]
const Double_t yShift[NStations]
Double_t HoleRadius
const Double_t Gap_Drift_Thickness
Double_t YDeadZone_TrapLeft_UHP[4]
const Double_t xShift[NStations]
const Bool_t XStationRotations[NStations]
Double_t YDeadZone_TrianRight_UHP[3]
Double_t YDeadZone_TrianLeft_UHP[3]
Double_t XDeadZone_Hole_UHP[NPoints_DeadZone_Hole_UHP]
const Double_t zShift[NStations]
const Double_t XMainZoneLayerSize_UHP
const Double_t Gap_FirstTransfer_Thickness
const Double_t Gap_Induction_Thickness
const Int_t NModulesInStations[NStations]
Double_t XDeadZone_TrianLeft_LHP[3]
const Bool_t YStationRotations[NStations]
const Double_t YMainZoneLayerSize_UHP
const Double_t YHotZoneLayerSize_InclinedStrips_LHP
Double_t XDeadZone_TrianRight_LHP[3]
Double_t YDeadZone_Rect_UHP[4]
const Double_t StripPitch_UHP
const UInt_t NPoints_DeadZone_Hole_UHP
Double_t YDeadZone_TrianLeft_LHP[3]
Double_t YDeadZone_TrapRight_UHP[4]
Double_t YDeadZone_TrianRight_LHP[3]
const Double_t StripPitch_LHP
const Double_t XMainZoneLayerSize_LHP
Double_t XDeadZone_TrapLeft_UHP[4]
StripNumberingDirection StripDirection[2]
Double_t XDeadZone_Rect_LHP[4]
Double_t YDeadZone_Rect_LHP[4]
const Double_t YHotZoneLayerSize_InclinedStrips_UHP
Double_t XDeadZone_TrapRight_UHP[4]
Double_t XDeadZone_TrapLeft_LHP[4]
Double_t XDeadZone_Rect_UHP[4]
const Double_t YMainZoneLayerSize_LHP
const Bool_t DriftDirectionInModules[NStations][NMaxModules]
Double_t XDeadZone_TrianLeft_UHP[3]
Double_t YDeadZone_Hole_UHP[NPoints_DeadZone_Hole_UHP]
Double_t YDeadZone_TrapRight_LHP[4]
const Double_t Gap_SecondTransfer_Thickness
Double_t XDeadZone_TrianRight_UHP[3]
Double_t XDeadZone_TrapRight_LHP[4]
Double_t YDeadZone_TrapLeft_LHP[4]
const UInt_t NPoints_DeadZone_Hole_LHP
Double_t XDeadZone_Hole_LHP[NPoints_DeadZone_Hole_LHP]
const Double_t YMainZoneLayerSize_SMALL
const Double_t XMainZoneLayerSize_SMALL
const Double_t StripPitch_SMALL
const Int_t NMaxLayersInModule
const Double_t XHotZoneLayerSize_InclinedStrips_LHP_RightMod[2]
Double_t XOffset_LastStrip_HotZone[NMaxModules][NLayerTypes]
Double_t YOffset_FirstStrip_HotZone[NMaxModules][NLayerTypes]
const Double_t XHotZoneLayerSize_InclinedStrips_UHP_RightMod[2]
const Double_t XHotZoneLayerSize_straighttrips_UHP
void GemConfigCalculate_Run9_v2()
Double_t XOffset_FirstStrip_ColdZone[NMaxModules][NLayerTypes]
Bool_t useCoordinateBorders
Double_t XOffset_FirstStrip_HotZone[NMaxModules][NLayerTypes]
const Double_t YHotZoneLayerSize_straighttrips_LHP
Double_t YOffset_LastStrip_HotZone[NMaxModules][NLayerTypes]
const Double_t XHotZoneLayerSize_InclinedStrips_UHP_LeftMod[2]
const Int_t NLayerTypes
Double_t YOffset_FirstStrip_ColdZone[NMaxModules][NLayerTypes]
const Double_t XHotZoneLayerSize_InclinedStrips_LHP_LeftMod[2]
const Double_t YHotZoneLayerSize_straighttrips_UHP
Double_t YOffset_LastStrip_ColdZone[NMaxModules][NLayerTypes]
const Double_t XHotZoneLayerSize_straighttrips_LHP
Double_t XOffset_LastStrip_ColdZone[NMaxModules][NLayerTypes]
constexpr Double_t DegToRad()
Double_t Sqrt(Double_t x)
Double_t Cos(Double_t)
Definition json.hpp:4446