BmnRoot 26.10.0-210-gc52d34b0
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnGemStripStation_RunSpring2017.cxx
Go to the documentation of this file.
2
4 Double_t xpos_station,
5 Double_t ypos_station,
6 Double_t zpos_station,
7 Double_t beamradius,
9{
10
11 // All linear values must be entered in units of cm
12
13 fCurrentConfig = config;
14
15 StationNumber = iStation;
16
17 // Station shift position
18 XPosition = xpos_station;
19 YPosition = ypos_station;
20 ZPosition = zpos_station;
21
22 BeamHoleRadius = beamradius;
23
24 // Parameters for each station
25 // ZSizeModuleWithFrames : GEM thickness (frames+sensitive)
26 // ZSizeModule : sensitive volume thickness
27 // XSize : x-size of the station
28 // YSize : y-size of the station
29 // ZSize : z-size of the station
30
31 switch (iStation) {
32
33 case 0: // one plane 66x41
36 LowerLayerPitch = 0.08;
37 UpperLayerPitch = 0.08;
39 NModules = 1; // Number of modules in the station
40 break;
41
42 case 1: // one plane 66x41
45 LowerLayerPitch = 0.08;
46 UpperLayerPitch = 0.08;
48 NModules = 1; // Number of modules in the station
49 break;
50
51 case 2: // one plane 66x41
54 LowerLayerPitch = 0.08;
55 UpperLayerPitch = 0.08;
57 NModules = 1; // Number of modules in the station
58 break;
59
60 case 3: // two plane 66x41
63 LowerLayerPitch = 0.08;
64 UpperLayerPitch = 0.08;
66 NModules = 2; // Number of modules in the station
67 break;
68
69 case 4: // one plane 163x45
72 LowerLayerPitch = 0.08;
73 UpperLayerPitch = 0.08;
75 NModules = 2; // Number of modules in the station
76 break;
77
78 case 5: // one plane 163x45
81 LowerLayerPitch = 0.08;
82 UpperLayerPitch = 0.08;
84 NModules = 2; // Number of modules in the station
85 break;
86 }
87
88 // Planes SIZES
89
90 // station 0-3 (plane 66x41)
93
96
97 // station 4-5 (plane 163x45)
98 XModuleSize_Plane163x45 = 163.2 * 0.5;
100
103
106
108
109 // Module shifts ------------------------------------------------------------
113
114 switch (fCurrentConfig) {
116 for (Int_t iModule = 0; iModule < NModules; ++iModule) {
118 [iStation][iModule]; // inverted : (bm@n x-coord -> classical x-coord)
121 }
122 break;
123
124 default:
125 for (Int_t iModule = 0; iModule < NModules; ++iModule) {
127 [iStation][iModule]; // inverted : (bm@n x-coord -> classical x-coord)
130 }
131 }
132 //--------------------------------------------------------------------------
133
134 // Assembling a station -----------------------------------------------------
135
136 if (StationNumber >= 0 && StationNumber <= 2) {
138 }
139
140 if (StationNumber == 3) {
142 }
143
144 if (StationNumber >= 4 && StationNumber <= 5) {
146 }
147 // end assembling the station -----------------------------------------------
148
149 // define station borders and sizes
151}
152
154//------------------------------------------------------------------------------
155
157{
158
160
161 Double_t DriftGapThickness = 0.3;
162 Double_t FirstTransferGapThickness = 0.25;
163 Double_t SecondTransferGapThickness = 0.2;
164 Double_t InductionGapThickness = 0.15;
165
166 // module
167 Modules[0] = new BmnGemStripModule(ZPosition + ZShiftOfModules[0], EDriftDirection, DriftGapThickness,
168 FirstTransferGapThickness, SecondTransferGapThickness, InductionGapThickness);
169
170 // zone 0 (big) -------------------------------------------------------------
171
172 // lower strip layer (zone 0) -------------------------------------------
177
178 if (UpperLayerStripAngle >= 0.0) {
179 lower_layer_zone0.SetStripNumberingOrder(LeftToRight);
180 lower_layer_zone0.SetStripNumberingBorders(LeftTop, RightBottom);
181 } else {
182 lower_layer_zone0.SetStripNumberingOrder(LeftToRight);
183 lower_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
184 }
185
186 // dead zone for layers in zone 0
187 const Int_t NPoints_DeadZone_zone0 = 4;
188 Double_t XPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
189 Double_t YPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
190
191 if (UpperLayerStripAngle >= 0.0) {
192 XPoints_DeadZone_zone0[0] = XShiftOfModules[0] + XPosition - XModuleSize_Plane66x41 * 0.5;
193 XPoints_DeadZone_zone0[1] = XShiftOfModules[0] + XPosition - XModuleSize_Plane66x41 * 0.5;
194 XPoints_DeadZone_zone0[2] =
196 XPoints_DeadZone_zone0[3] =
198
199 YPoints_DeadZone_zone0[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane66x41 * 0.5;
200 YPoints_DeadZone_zone0[1] =
202 YPoints_DeadZone_zone0[2] =
204 YPoints_DeadZone_zone0[3] = YShiftOfModules[0] + YPosition - YModuleSize_Plane66x41 * 0.5;
205 } else {
206 XPoints_DeadZone_zone0[0] = XShiftOfModules[0] + XPosition - XModuleSize_Plane66x41 * 0.5;
207 XPoints_DeadZone_zone0[1] = XShiftOfModules[0] + XPosition - XModuleSize_Plane66x41 * 0.5;
208 XPoints_DeadZone_zone0[2] =
210 XPoints_DeadZone_zone0[3] =
212
213 YPoints_DeadZone_zone0[0] =
215 YPoints_DeadZone_zone0[1] = YShiftOfModules[0] + YPosition + YModuleSize_Plane66x41 * 0.5;
216 YPoints_DeadZone_zone0[2] = YShiftOfModules[0] + YPosition + YModuleSize_Plane66x41 * 0.5;
217 YPoints_DeadZone_zone0[3] =
219 }
220
221 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
222 //----------------------------------------------------------------------
223
224 // upper strip layer (zone 0) -------------------------------------------
229
230 if (UpperLayerStripAngle >= 0.0) {
231 upper_layer_zone0.SetStripNumberingOrder(LeftToRight);
232 upper_layer_zone0.SetStripNumberingBorders(LeftTop, RightBottom);
233 } else {
234 upper_layer_zone0.SetStripNumberingOrder(LeftToRight);
235 upper_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
236 }
237
238 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
239 //----------------------------------------------------------------------
240
241 //--------------------------------------------------------------------------
242
243 // zone 1 (hot) -------------------------------------------------------------
244
245 BmnGemStripLayer lower_layer_zone1;
246 BmnGemStripLayer upper_layer_zone1;
247
248 if (UpperLayerStripAngle >= 0.0) {
249 // lower strip layer (zone 1) -------------------------------------------
254
255 lower_layer_zone1.SetStripNumberingOrder(LeftToRight);
256 lower_layer_zone1.SetStripNumberingBorders(LeftTop, RightBottom);
257 //----------------------------------------------------------------------
258
259 // upper strip layer (zone 1) -------------------------------------------
264
265 upper_layer_zone1.SetStripNumberingOrder(LeftToRight);
266 upper_layer_zone1.SetStripNumberingBorders(LeftTop, RightBottom);
267 //----------------------------------------------------------------------
268 } else {
269 // lower strip layer (zone 1) -------------------------------------------
270 lower_layer_zone1 =
275
276 lower_layer_zone1.SetStripNumberingOrder(LeftToRight);
277 lower_layer_zone1.SetStripNumberingBorders(LeftTop, RightBottom);
278 //----------------------------------------------------------------------
279
280 // upper strip layer (zone 1) -------------------------------------------
281 upper_layer_zone1 =
286
287 upper_layer_zone1.SetStripNumberingOrder(LeftToRight);
288 upper_layer_zone1.SetStripNumberingBorders(LeftBottom, RightTop);
289 //----------------------------------------------------------------------
290 }
291 //--------------------------------------------------------------------------
292
293 Modules[0]->AddStripLayer(lower_layer_zone0);
294 Modules[0]->AddStripLayer(upper_layer_zone0);
295 Modules[0]->AddStripLayer(lower_layer_zone1);
296 Modules[0]->AddStripLayer(upper_layer_zone1);
297
298 return;
299}
300
302{
303
305
306 // module 0 (left)
307 {
308 Double_t DriftGapThickness = 0.5;
309 Double_t FirstTransferGapThickness = 0.25;
310 Double_t SecondTransferGapThickness = 0.2;
311 Double_t InductionGapThickness = 0.15;
312
313 Modules[0] =
314 new BmnGemStripModule(ZPosition + ZShiftOfModules[0], EDriftDirection, DriftGapThickness,
315 FirstTransferGapThickness, SecondTransferGapThickness, InductionGapThickness);
316
317 // zone 0 (big) -------------------------------------------------------------
318
319 // lower strip layer (zone 0) -------------------------------------------
324
325 lower_layer_zone0.SetStripNumberingOrder(RightToLeft);
326 lower_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
327
328 // dead zone for layers in zone 0
329 const Int_t NPoints_DeadZone_zone0 = 4;
330 Double_t XPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
331 Double_t YPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
332
333 XPoints_DeadZone_zone0[0] = XShiftOfModules[0] + XPosition - 0.0 - XHotZoneSize_Plane66x41;
334 XPoints_DeadZone_zone0[1] = XShiftOfModules[0] + XPosition - 0.0 - XHotZoneSize_Plane66x41;
335 XPoints_DeadZone_zone0[2] = XShiftOfModules[0] + XPosition - 0.0;
336 XPoints_DeadZone_zone0[3] = XShiftOfModules[0] + XPosition - 0.0;
337
338 YPoints_DeadZone_zone0[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane66x41 * 0.5;
339 YPoints_DeadZone_zone0[1] =
341 YPoints_DeadZone_zone0[2] =
343 YPoints_DeadZone_zone0[3] = YShiftOfModules[0] + YPosition - YModuleSize_Plane66x41 * 0.5;
344
345 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
346 //----------------------------------------------------------------------
347
348 // upper strip layer (zone 0) -------------------------------------------
353
354 upper_layer_zone0.SetStripNumberingOrder(RightToLeft);
355 upper_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
356
357 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
358 //----------------------------------------------------------------------
359
360 //--------------------------------------------------------------------------
361
362 // zone 1 (hot) -------------------------------------------------------------
363
364 BmnGemStripLayer lower_layer_zone1;
365 BmnGemStripLayer upper_layer_zone1;
366
367 // lower strip layer (zone 1) -------------------------------------------
372
373 lower_layer_zone1.SetStripNumberingOrder(RightToLeft);
374 lower_layer_zone1.SetStripNumberingBorders(LeftBottom, RightTop);
375 //----------------------------------------------------------------------
376
377 // upper strip layer (zone 1) -------------------------------------------
382
383 upper_layer_zone1.SetStripNumberingOrder(RightToLeft);
384 upper_layer_zone1.SetStripNumberingBorders(LeftBottom, RightTop);
385 //----------------------------------------------------------------------
386
387 //--------------------------------------------------------------------------
388
389 Modules[0]->AddStripLayer(lower_layer_zone0);
390 Modules[0]->AddStripLayer(upper_layer_zone0);
391 Modules[0]->AddStripLayer(lower_layer_zone1);
392 Modules[0]->AddStripLayer(upper_layer_zone1);
393 }
394 //--------------------------------------------------------------------------
395
396 // module 1 (right)
397 {
398 Double_t DriftGapThickness = 0.3;
399 Double_t FirstTransferGapThickness = 0.25;
400 Double_t SecondTransferGapThickness = 0.2;
401 Double_t InductionGapThickness = 0.15;
402
403 Modules[1] =
404 new BmnGemStripModule(ZPosition + ZShiftOfModules[1], EDriftDirection, DriftGapThickness,
405 FirstTransferGapThickness, SecondTransferGapThickness, InductionGapThickness);
406
407 // zone 0 (big) -------------------------------------------------------------
408
409 // lower strip layer (zone 0) -------------------------------------------
410 BmnGemStripLayer lower_layer_zone0(
413
414 lower_layer_zone0.SetStripNumberingOrder(LeftToRight);
415 lower_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
416
417 // dead zone for layers in zone 0
418 const Int_t NPoints_DeadZone_zone0 = 4;
419 Double_t XPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
420 Double_t YPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
421
422 XPoints_DeadZone_zone0[0] = XShiftOfModules[1] + XPosition + 0.0;
423 XPoints_DeadZone_zone0[1] = XShiftOfModules[1] + XPosition + 0.0;
424 XPoints_DeadZone_zone0[2] = XShiftOfModules[1] + XPosition + 0.0 + XHotZoneSize_Plane66x41;
425 XPoints_DeadZone_zone0[3] = XShiftOfModules[1] + XPosition + 0.0 + XHotZoneSize_Plane66x41;
426
427 YPoints_DeadZone_zone0[0] =
429 YPoints_DeadZone_zone0[1] = YShiftOfModules[1] + YPosition + YModuleSize_Plane66x41 * 0.5;
430 YPoints_DeadZone_zone0[2] = YShiftOfModules[1] + YPosition + YModuleSize_Plane66x41 * 0.5;
431 YPoints_DeadZone_zone0[3] =
433
434 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
435 //----------------------------------------------------------------------
436
437 // upper strip layer (zone 0) -------------------------------------------
438 BmnGemStripLayer upper_layer_zone0(
441
442 upper_layer_zone0.SetStripNumberingOrder(LeftToRight);
443 upper_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
444
445 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
446 //----------------------------------------------------------------------
447
448 //--------------------------------------------------------------------------
449
450 // zone 1 (hot) -------------------------------------------------------------
451
452 BmnGemStripLayer lower_layer_zone1;
453 BmnGemStripLayer upper_layer_zone1;
454
455 // lower strip layer (zone 1) -------------------------------------------
456 lower_layer_zone1 = BmnGemStripLayer(
460
461 lower_layer_zone1.SetStripNumberingOrder(LeftToRight);
462 lower_layer_zone1.SetStripNumberingBorders(LeftBottom, RightTop);
463 //----------------------------------------------------------------------
464
465 // upper strip layer (zone 1) -------------------------------------------
466 upper_layer_zone1 = BmnGemStripLayer(
470
471 upper_layer_zone1.SetStripNumberingOrder(LeftToRight);
472 upper_layer_zone1.SetStripNumberingBorders(LeftBottom, RightTop);
473 //----------------------------------------------------------------------
474
475 //--------------------------------------------------------------------------
476
477 Modules[1]->AddStripLayer(lower_layer_zone0);
478 Modules[1]->AddStripLayer(upper_layer_zone0);
479 Modules[1]->AddStripLayer(lower_layer_zone1);
480 Modules[1]->AddStripLayer(upper_layer_zone1);
481 }
482
483 return;
484}
485
487{
489
490 // module 0 (left) --------------------------------------------------------------
491 {
492 Double_t DriftGapThickness = 0.3;
493 Double_t FirstTransferGapThickness = 0.25;
494 Double_t SecondTransferGapThickness = 0.2;
495 Double_t InductionGapThickness = 0.15;
496
497 Modules[0] =
498 new BmnGemStripModule(ZPosition + ZShiftOfModules[0], EDriftDirection, DriftGapThickness,
499 FirstTransferGapThickness, SecondTransferGapThickness, InductionGapThickness);
500
501 // zone 0 (big) ---------------------------------------------------------
502
503 // lower strip layer (zone 0) -------------------------------------------
508
509 if (UpperLayerStripAngle >= 0.0) {
510 lower_layer_zone0.SetStripNumberingOrder(LeftToRight);
511 lower_layer_zone0.SetStripNumberingBorders(LeftTop, RightBottom);
512 } else {
513 lower_layer_zone0.SetStripNumberingOrder(RightToLeft);
514 lower_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
515 }
516
517 // dead zone for lower layer in zone 0
518 const Int_t NPoints_DeadZone_lower_zone0 = 4;
519 Double_t XPoints_DeadZone_lower_zone0[NPoints_DeadZone_lower_zone0];
520 Double_t YPoints_DeadZone_lower_zone0[NPoints_DeadZone_lower_zone0];
521
522 XPoints_DeadZone_lower_zone0[0] = XShiftOfModules[0] + XPosition - XRectHotZoneSize_Plane163x45;
523 XPoints_DeadZone_lower_zone0[1] = XShiftOfModules[0] + XPosition - XRectHotZoneSize_Plane163x45;
524 XPoints_DeadZone_lower_zone0[2] = XShiftOfModules[0] + XPosition + 0.0;
525 XPoints_DeadZone_lower_zone0[3] = XShiftOfModules[0] + XPosition + 0.0;
526
527 YPoints_DeadZone_lower_zone0[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
528 YPoints_DeadZone_lower_zone0[1] =
530 YPoints_DeadZone_lower_zone0[2] =
532 YPoints_DeadZone_lower_zone0[3] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
533
534 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_lower_zone0, XPoints_DeadZone_lower_zone0,
535 YPoints_DeadZone_lower_zone0);
536 //----------------------------------------------------------------------
537
538 // upper strip layer (zone 0) -------------------------------------------
543
544 if (UpperLayerStripAngle >= 0.0) {
545 upper_layer_zone0.SetStripNumberingOrder(LeftToRight);
546 upper_layer_zone0.SetStripNumberingBorders(LeftTop, RightBottom);
547 } else {
548 upper_layer_zone0.SetStripNumberingOrder(RightToLeft);
549 upper_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
550 }
551
552 // dead zone for upper layer in zone 0
553 const Int_t NPoints_DeadZone_upper_zone0 = 4;
554 Double_t XPoints_DeadZone_upper_zone0[NPoints_DeadZone_upper_zone0];
555 Double_t YPoints_DeadZone_upper_zone0[NPoints_DeadZone_upper_zone0];
556
557 if (UpperLayerStripAngle >= 0.0) {
558 XPoints_DeadZone_upper_zone0[0] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[1];
559 XPoints_DeadZone_upper_zone0[1] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[0];
560 XPoints_DeadZone_upper_zone0[2] = XShiftOfModules[0] + XPosition + 0.0;
561 XPoints_DeadZone_upper_zone0[3] = XShiftOfModules[0] + XPosition + 0.0;
562
563 YPoints_DeadZone_upper_zone0[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
564 YPoints_DeadZone_upper_zone0[1] =
566 YPoints_DeadZone_upper_zone0[2] =
568 YPoints_DeadZone_upper_zone0[3] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
569 } else {
570 XPoints_DeadZone_upper_zone0[0] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[0];
571 XPoints_DeadZone_upper_zone0[1] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[1];
572 XPoints_DeadZone_upper_zone0[2] = XShiftOfModules[0] + XPosition + 0.0;
573 XPoints_DeadZone_upper_zone0[3] = XShiftOfModules[0] + XPosition + 0.0;
574
575 YPoints_DeadZone_upper_zone0[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
576 YPoints_DeadZone_upper_zone0[1] =
578 YPoints_DeadZone_upper_zone0[2] =
580 YPoints_DeadZone_upper_zone0[3] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
581 }
582
583 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_upper_zone0, XPoints_DeadZone_upper_zone0,
584 YPoints_DeadZone_upper_zone0);
585 //----------------------------------------------------------------------
586
587 // lower strip layer (zone 1) -------------------------------------------
588 BmnGemStripLayer lower_layer_zone1(
592
593 if (UpperLayerStripAngle >= 0.0) {
594 lower_layer_zone1.SetStripNumberingOrder(LeftToRight);
595 lower_layer_zone1.SetStripNumberingBorders(LeftTop, RightBottom);
596 } else {
597 lower_layer_zone1.SetStripNumberingOrder(RightToLeft);
598 lower_layer_zone1.SetStripNumberingBorders(LeftBottom, RightTop);
599 }
600
601 // dead zone for lower layer in zone 1 (hole)
602 const Int_t NPoints_DeadZone_lower_zone1 = 4;
603 Double_t XPoints_DeadZone_lower_zone1[NPoints_DeadZone_lower_zone1];
604 Double_t YPoints_DeadZone_lower_zone1[NPoints_DeadZone_lower_zone1];
605
606 XPoints_DeadZone_lower_zone1[0] = XShiftOfModules[0] + XPosition - BeamHoleRadius;
607 XPoints_DeadZone_lower_zone1[1] = XShiftOfModules[0] + XPosition - BeamHoleRadius;
608 XPoints_DeadZone_lower_zone1[2] = XShiftOfModules[0] + XPosition + 0.0;
609 XPoints_DeadZone_lower_zone1[3] = XShiftOfModules[0] + XPosition + 0.0;
610
611 YPoints_DeadZone_lower_zone1[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
612 YPoints_DeadZone_lower_zone1[1] =
614 YPoints_DeadZone_lower_zone1[2] =
616 YPoints_DeadZone_lower_zone1[3] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
617
618 lower_layer_zone1.AddDeadZone(NPoints_DeadZone_lower_zone1, XPoints_DeadZone_lower_zone1,
619 YPoints_DeadZone_lower_zone1);
620 //----------------------------------------------------------------------
621
622 // upper strip layer (zone 1) -------------------------------------------
623 BmnGemStripLayer upper_layer_zone1(
627
628 if (UpperLayerStripAngle >= 0.0) {
629 upper_layer_zone1.SetStripNumberingOrder(LeftToRight);
631 } else {
632 upper_layer_zone1.SetStripNumberingOrder(RightToLeft);
633 upper_layer_zone1.SetStripNumberingBorders(LeftTop, RightTop);
634 }
635
636 // dead zone for upper layer in zone 1 (hole)
637 const Int_t NPoints_DeadZone_upper_zone1_hole = 4;
638 Double_t XPoints_DeadZone_upper_zone1_hole[NPoints_DeadZone_upper_zone1_hole];
639 Double_t YPoints_DeadZone_upper_zone1_hole[NPoints_DeadZone_upper_zone1_hole];
640
641 XPoints_DeadZone_upper_zone1_hole[0] = XShiftOfModules[0] + XPosition - BeamHoleRadius;
642 XPoints_DeadZone_upper_zone1_hole[1] = XShiftOfModules[0] + XPosition - BeamHoleRadius;
643 XPoints_DeadZone_upper_zone1_hole[2] = XShiftOfModules[0] + XPosition + 0.0;
644 XPoints_DeadZone_upper_zone1_hole[3] = XShiftOfModules[0] + XPosition + 0.0;
645
646 YPoints_DeadZone_upper_zone1_hole[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
647 YPoints_DeadZone_upper_zone1_hole[1] =
649 YPoints_DeadZone_upper_zone1_hole[2] =
651 YPoints_DeadZone_upper_zone1_hole[3] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
652
653 upper_layer_zone1.AddDeadZone(NPoints_DeadZone_upper_zone1_hole, XPoints_DeadZone_upper_zone1_hole,
654 YPoints_DeadZone_upper_zone1_hole);
655
656 // dead zone for upper layer in zone 1 (triangle)
657 const Int_t NPoints_DeadZone_upper_zone1_triang = 3;
658 Double_t XPoints_DeadZone_upper_zone1_triang[NPoints_DeadZone_upper_zone1_triang];
659 Double_t YPoints_DeadZone_upper_zone1_triang[NPoints_DeadZone_upper_zone1_triang];
660
661 if (UpperLayerStripAngle >= 0.0) {
662 XPoints_DeadZone_upper_zone1_triang[0] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[1];
663 XPoints_DeadZone_upper_zone1_triang[1] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[1];
664 XPoints_DeadZone_upper_zone1_triang[2] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[0];
665
666 YPoints_DeadZone_upper_zone1_triang[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
667 YPoints_DeadZone_upper_zone1_triang[1] =
669 YPoints_DeadZone_upper_zone1_triang[2] =
671 } else {
672 XPoints_DeadZone_upper_zone1_triang[0] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[1];
673 XPoints_DeadZone_upper_zone1_triang[1] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[1];
674 XPoints_DeadZone_upper_zone1_triang[2] = XShiftOfModules[0] + XPosition - XSlopeHotZoneSize_Plane163x45[0];
675
676 YPoints_DeadZone_upper_zone1_triang[0] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
677 YPoints_DeadZone_upper_zone1_triang[1] =
679 YPoints_DeadZone_upper_zone1_triang[2] = YShiftOfModules[0] + YPosition - YModuleSize_Plane163x45 * 0.5;
680 }
681
682 upper_layer_zone1.AddDeadZone(NPoints_DeadZone_upper_zone1_triang, XPoints_DeadZone_upper_zone1_triang,
683 YPoints_DeadZone_upper_zone1_triang);
684
685 //----------------------------------------------------------------------
686
687 Modules[0]->AddStripLayer(lower_layer_zone0);
688 Modules[0]->AddStripLayer(upper_layer_zone0);
689 Modules[0]->AddStripLayer(lower_layer_zone1);
690 Modules[0]->AddStripLayer(upper_layer_zone1);
691 }
692 //--------------------------------------------------------------------------
693
694 // module 1 (right) -------------------------------------------------------------
695 {
696 Double_t DriftGapThickness = 0.3;
697 Double_t FirstTransferGapThickness = 0.25;
698 Double_t SecondTransferGapThickness = 0.2;
699 Double_t InductionGapThickness = 0.15;
700
701 Modules[1] =
702 new BmnGemStripModule(ZPosition + ZShiftOfModules[1], EDriftDirection, DriftGapThickness,
703 FirstTransferGapThickness, SecondTransferGapThickness, InductionGapThickness);
704
705 // zone 0 (big) ---------------------------------------------------------
706
707 // lower strip layer (zone 0) -------------------------------------------
708 BmnGemStripLayer lower_layer_zone0(
711
712 if (UpperLayerStripAngle >= 0.0) {
713 lower_layer_zone0.SetStripNumberingOrder(LeftToRight);
714 lower_layer_zone0.SetStripNumberingBorders(LeftTop, RightBottom);
715 } else {
716 lower_layer_zone0.SetStripNumberingOrder(RightToLeft);
717 lower_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
718 }
719
720 // dead zone for lower layer in zone 0
721 const Int_t NPoints_DeadZone_lower_zone0 = 4;
722 Double_t XPoints_DeadZone_lower_zone0[NPoints_DeadZone_lower_zone0];
723 Double_t YPoints_DeadZone_lower_zone0[NPoints_DeadZone_lower_zone0];
724
725 XPoints_DeadZone_lower_zone0[0] = XShiftOfModules[1] + XPosition + 0.0;
726 XPoints_DeadZone_lower_zone0[1] = XShiftOfModules[1] + XPosition + 0.0;
727 XPoints_DeadZone_lower_zone0[2] = XShiftOfModules[1] + XPosition + XRectHotZoneSize_Plane163x45;
728 XPoints_DeadZone_lower_zone0[3] = XShiftOfModules[1] + XPosition + XRectHotZoneSize_Plane163x45;
729
730 YPoints_DeadZone_lower_zone0[0] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
731 YPoints_DeadZone_lower_zone0[1] =
733 YPoints_DeadZone_lower_zone0[2] =
735 YPoints_DeadZone_lower_zone0[3] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
736
737 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_lower_zone0, XPoints_DeadZone_lower_zone0,
738 YPoints_DeadZone_lower_zone0);
739 //----------------------------------------------------------------------
740
741 // upper strip layer (zone 0) -------------------------------------------
742 BmnGemStripLayer upper_layer_zone0(
745
746 if (UpperLayerStripAngle >= 0.0) {
747 upper_layer_zone0.SetStripNumberingOrder(LeftToRight);
748 upper_layer_zone0.SetStripNumberingBorders(LeftTop, RightBottom);
749 } else {
750 upper_layer_zone0.SetStripNumberingOrder(RightToLeft);
751 upper_layer_zone0.SetStripNumberingBorders(LeftBottom, RightTop);
752 }
753
754 // dead zone for upper layer in zone 0
755 const Int_t NPoints_DeadZone_upper_zone0 = 4;
756 Double_t XPoints_DeadZone_upper_zone0[NPoints_DeadZone_upper_zone0];
757 Double_t YPoints_DeadZone_upper_zone0[NPoints_DeadZone_upper_zone0];
758
759 if (UpperLayerStripAngle >= 0.0) {
760 XPoints_DeadZone_upper_zone0[0] = XShiftOfModules[1] + XPosition + 0.0;
761 XPoints_DeadZone_upper_zone0[1] = XShiftOfModules[1] + XPosition + 0.0;
762 XPoints_DeadZone_upper_zone0[2] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[1];
763 XPoints_DeadZone_upper_zone0[3] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[0];
764
765 YPoints_DeadZone_upper_zone0[0] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
766 YPoints_DeadZone_upper_zone0[1] =
768 YPoints_DeadZone_upper_zone0[2] =
770 YPoints_DeadZone_upper_zone0[3] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
771 } else {
772 XPoints_DeadZone_upper_zone0[0] = XShiftOfModules[1] + XPosition + 0.0;
773 XPoints_DeadZone_upper_zone0[1] = XShiftOfModules[1] + XPosition + 0.0;
774 XPoints_DeadZone_upper_zone0[2] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[0];
775 XPoints_DeadZone_upper_zone0[3] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[1];
776
777 YPoints_DeadZone_upper_zone0[0] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
778 YPoints_DeadZone_upper_zone0[1] =
780 YPoints_DeadZone_upper_zone0[2] =
782 YPoints_DeadZone_upper_zone0[3] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
783 }
784
785 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_upper_zone0, XPoints_DeadZone_upper_zone0,
786 YPoints_DeadZone_upper_zone0);
787 //----------------------------------------------------------------------
788
789 // lower strip layer (zone 1) -------------------------------------------
794
795 if (UpperLayerStripAngle >= 0.0) {
796 lower_layer_zone1.SetStripNumberingOrder(LeftToRight);
797 lower_layer_zone1.SetStripNumberingBorders(LeftTop, RightBottom);
798 } else {
799 lower_layer_zone1.SetStripNumberingOrder(RightToLeft);
800 lower_layer_zone1.SetStripNumberingBorders(LeftBottom, RightTop);
801 }
802
803 // dead zone for lower layer in zone 1 (hole)
804 const Int_t NPoints_DeadZone_lower_zone1 = 4;
805 Double_t XPoints_DeadZone_lower_zone1[NPoints_DeadZone_lower_zone1];
806 Double_t YPoints_DeadZone_lower_zone1[NPoints_DeadZone_lower_zone1];
807
808 XPoints_DeadZone_lower_zone1[0] = XShiftOfModules[1] + XPosition + 0.0;
809 XPoints_DeadZone_lower_zone1[1] = XShiftOfModules[1] + XPosition + 0.0;
810 XPoints_DeadZone_lower_zone1[2] = XShiftOfModules[1] + XPosition + BeamHoleRadius;
811 XPoints_DeadZone_lower_zone1[3] = XShiftOfModules[1] + XPosition + BeamHoleRadius;
812
813 YPoints_DeadZone_lower_zone1[0] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
814 YPoints_DeadZone_lower_zone1[1] =
816 YPoints_DeadZone_lower_zone1[2] =
818 YPoints_DeadZone_lower_zone1[3] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
819
820 lower_layer_zone1.AddDeadZone(NPoints_DeadZone_lower_zone1, XPoints_DeadZone_lower_zone1,
821 YPoints_DeadZone_lower_zone1);
822 //----------------------------------------------------------------------
823
824 // upper strip layer (zone 1) -------------------------------------------
829
830 if (UpperLayerStripAngle >= 0.0) {
831 upper_layer_zone1.SetStripNumberingOrder(LeftToRight);
832 upper_layer_zone1.SetStripNumberingBorders(LeftTop, RightTop);
833 } else {
834 upper_layer_zone1.SetStripNumberingOrder(RightToLeft);
836 }
837
838 // dead zone for upper layer in zone 1 (hole)
839 const Int_t NPoints_DeadZone_upper_zone1_hole = 4;
840 Double_t XPoints_DeadZone_upper_zone1_hole[NPoints_DeadZone_upper_zone1_hole];
841 Double_t YPoints_DeadZone_upper_zone1_hole[NPoints_DeadZone_upper_zone1_hole];
842
843 XPoints_DeadZone_upper_zone1_hole[0] = XShiftOfModules[1] + XPosition + 0.0;
844 XPoints_DeadZone_upper_zone1_hole[1] = XShiftOfModules[1] + XPosition + 0.0;
845 XPoints_DeadZone_upper_zone1_hole[2] = XShiftOfModules[1] + XPosition + BeamHoleRadius;
846 XPoints_DeadZone_upper_zone1_hole[3] = XShiftOfModules[1] + XPosition + BeamHoleRadius;
847
848 YPoints_DeadZone_upper_zone1_hole[0] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
849 YPoints_DeadZone_upper_zone1_hole[1] =
851 YPoints_DeadZone_upper_zone1_hole[2] =
853 YPoints_DeadZone_upper_zone1_hole[3] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
854
855 upper_layer_zone1.AddDeadZone(NPoints_DeadZone_upper_zone1_hole, XPoints_DeadZone_upper_zone1_hole,
856 YPoints_DeadZone_upper_zone1_hole);
857
858 // dead zone for upper layer in zone 1 (triangle)
859 const Int_t NPoints_DeadZone_upper_zone1_triang = 3;
860 Double_t XPoints_DeadZone_upper_zone1_triang[NPoints_DeadZone_upper_zone1_triang];
861 Double_t YPoints_DeadZone_upper_zone1_triang[NPoints_DeadZone_upper_zone1_triang];
862
863 if (UpperLayerStripAngle >= 0.0) {
864 XPoints_DeadZone_upper_zone1_triang[0] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[0];
865 XPoints_DeadZone_upper_zone1_triang[1] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[1];
866 XPoints_DeadZone_upper_zone1_triang[2] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[1];
867
868 YPoints_DeadZone_upper_zone1_triang[0] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
869 YPoints_DeadZone_upper_zone1_triang[1] =
871 YPoints_DeadZone_upper_zone1_triang[2] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
872 } else {
873 XPoints_DeadZone_upper_zone1_triang[0] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[1];
874 XPoints_DeadZone_upper_zone1_triang[1] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[0];
875 XPoints_DeadZone_upper_zone1_triang[2] = XShiftOfModules[1] + XPosition + XSlopeHotZoneSize_Plane163x45[1];
876
877 YPoints_DeadZone_upper_zone1_triang[0] = YShiftOfModules[1] + YPosition - YModuleSize_Plane163x45 * 0.5;
878 YPoints_DeadZone_upper_zone1_triang[1] =
880 YPoints_DeadZone_upper_zone1_triang[2] =
882 }
883
884 upper_layer_zone1.AddDeadZone(NPoints_DeadZone_upper_zone1_triang, XPoints_DeadZone_upper_zone1_triang,
885 YPoints_DeadZone_upper_zone1_triang);
886
887 //----------------------------------------------------------------------
888
889 Modules[1]->AddStripLayer(lower_layer_zone0);
890 Modules[1]->AddStripLayer(upper_layer_zone0);
891 Modules[1]->AddStripLayer(lower_layer_zone1);
892 Modules[1]->AddStripLayer(upper_layer_zone1);
893 }
894 return;
895}
@ BackwardZAxisEDrift
@ ForwardZAxisEDrift
@ LeftTop
@ RightBottom
@ LeftBottom
@ RightTop
@ RightToLeft
@ LeftToRight
@ UpperStripLayer
@ LowerStripLayer
int Int_t
double Double_t
Bool_t SetStripNumberingOrder(StripNumberingDirection strip_direction)
Bool_t AddDeadZone(Int_t n_points, Double_t *x_points, Double_t *y_points)
Bool_t SetStripNumberingBorders(Double_t x_left, Double_t y_left, Double_t x_right, Double_t y_right)
BmnGemStripConfiguration::GEM_CONFIG fCurrentConfig
BmnGemStripStation_RunSpring2017(Int_t iStation, Double_t xpos_station, Double_t ypos_station, Double_t zpos_station, Double_t beamradius, BmnGemStripConfiguration::GEM_CONFIG config)
BmnGemStripModule ** Modules
const Double_t XModuleShifts[NStations][NMaxModules]
const Double_t ZModuleShifts[NStations][NMaxModules]
const Double_t YModuleShifts[NStations][NMaxModules]