4 Double_t xpos_station, Double_t ypos_station, Double_t zpos_station,
31 LowerLayerStripAngle = 0.0;
32 UpperLayerStripAngle = +15.0;
33 LowerLayerPitch = 0.08;
34 UpperLayerPitch = 0.08;
40 LowerLayerStripAngle = 0.0;
41 UpperLayerStripAngle = -15.0;
42 LowerLayerPitch = 0.08;
43 UpperLayerPitch = 0.08;
49 LowerLayerStripAngle = 0.0;
50 UpperLayerStripAngle = +15.0;
51 LowerLayerPitch = 0.08;
52 UpperLayerPitch = 0.08;
58 LowerLayerStripAngle = 0.0;
59 UpperLayerStripAngle = -15.0;
60 LowerLayerPitch = 0.08;
61 UpperLayerPitch = 0.08;
67 LowerLayerStripAngle = 0.0;
68 UpperLayerStripAngle = +15.0;
69 LowerLayerPitch = 0.08;
70 UpperLayerPitch = 0.08;
76 LowerLayerStripAngle = 0.0;
77 UpperLayerStripAngle = -15.0;
78 LowerLayerPitch = 0.08;
79 UpperLayerPitch = 0.08;
88 XModuleSize_Plane66x41 = 66.0;
89 YModuleSize_Plane66x41 = 41.0;
91 XHotZoneSize_Plane66x41 = 15.0;
92 YHotZoneSize_Plane66x41 = 10.0;
95 XModuleSize_Plane163x45 = 163.2*0.5;
96 YModuleSize_Plane163x45 = 45.0;
98 XRectHotZoneSize_Plane163x45 = 40.0;
99 YRectHotZoneSize_Plane163x45 = 15.0;
101 XSlopeHotZoneSize_Plane163x45[0] = 37.99;
102 XSlopeHotZoneSize_Plane163x45[1] = 42.01;
104 YSlopeHotZoneSize_Plane163x45 = 15.0;
111 switch(fCurrentConfig) {
113 for(Int_t iModule = 0; iModule <
NModules; ++iModule) {
121 for(Int_t iModule = 0; iModule <
NModules; ++iModule) {
132 BuildModules_One66x41Plane();
136 BuildModules_Two66x41Plane();
140 BuildModules_One163x45Plane();
153void BmnGemStripStation_RunSpring2017::BuildModules_One66x41Plane() {
157 Double_t DriftGapThickness = 0.3;
158 Double_t FirstTransferGapThickness = 0.25;
159 Double_t SecondTransferGapThickness = 0.2;
160 Double_t InductionGapThickness = 0.15;
164 DriftGapThickness, FirstTransferGapThickness,
165 SecondTransferGapThickness, InductionGapThickness);
171 XModuleSize_Plane66x41, YModuleSize_Plane66x41,
173 LowerLayerPitch, LowerLayerStripAngle);
175 if(UpperLayerStripAngle >= 0.0) {
176 lower_layer_zone0.SetStripNumberingOrder(
LeftToRight);
180 lower_layer_zone0.SetStripNumberingOrder(
LeftToRight);
185 const Int_t NPoints_DeadZone_zone0 = 4;
186 Double_t XPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
187 Double_t YPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
189 if(UpperLayerStripAngle >= 0.0) {
212 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
217 XModuleSize_Plane66x41, YModuleSize_Plane66x41,
219 UpperLayerPitch, UpperLayerStripAngle);
221 if(UpperLayerStripAngle >= 0.0) {
222 upper_layer_zone0.SetStripNumberingOrder(
LeftToRight);
226 upper_layer_zone0.SetStripNumberingOrder(
LeftToRight);
230 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
240 if(UpperLayerStripAngle >= 0.0) {
243 XHotZoneSize_Plane66x41, YHotZoneSize_Plane66x41,
245 LowerLayerPitch, LowerLayerStripAngle);
253 XHotZoneSize_Plane66x41, YHotZoneSize_Plane66x41,
255 UpperLayerPitch, UpperLayerStripAngle);
264 XHotZoneSize_Plane66x41, YHotZoneSize_Plane66x41,
266 LowerLayerPitch, LowerLayerStripAngle);
274 XHotZoneSize_Plane66x41, YHotZoneSize_Plane66x41,
276 UpperLayerPitch, UpperLayerStripAngle);
292void BmnGemStripStation_RunSpring2017::BuildModules_Two66x41Plane() {
298 Double_t DriftGapThickness = 0.5;
299 Double_t FirstTransferGapThickness = 0.25;
300 Double_t SecondTransferGapThickness = 0.2;
301 Double_t InductionGapThickness = 0.15;
304 DriftGapThickness, FirstTransferGapThickness,
305 SecondTransferGapThickness, InductionGapThickness);
311 XModuleSize_Plane66x41, YModuleSize_Plane66x41,
313 LowerLayerPitch, LowerLayerStripAngle);
315 lower_layer_zone0.SetStripNumberingOrder(
RightToLeft);
320 const Int_t NPoints_DeadZone_zone0 = 4;
321 Double_t XPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
322 Double_t YPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
336 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
341 XModuleSize_Plane66x41, YModuleSize_Plane66x41,
343 UpperLayerPitch, UpperLayerStripAngle);
345 upper_layer_zone0.SetStripNumberingOrder(
RightToLeft);
349 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
361 XHotZoneSize_Plane66x41, YHotZoneSize_Plane66x41,
363 LowerLayerPitch, LowerLayerStripAngle);
371 XHotZoneSize_Plane66x41, YHotZoneSize_Plane66x41,
373 UpperLayerPitch, UpperLayerStripAngle);
391 Double_t DriftGapThickness = 0.3;
392 Double_t FirstTransferGapThickness = 0.25;
393 Double_t SecondTransferGapThickness = 0.2;
394 Double_t InductionGapThickness = 0.15;
397 DriftGapThickness, FirstTransferGapThickness,
398 SecondTransferGapThickness, InductionGapThickness);
404 XModuleSize_Plane66x41, YModuleSize_Plane66x41,
406 LowerLayerPitch, LowerLayerStripAngle);
408 lower_layer_zone0.SetStripNumberingOrder(
LeftToRight);
413 const Int_t NPoints_DeadZone_zone0 = 4;
414 Double_t XPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
415 Double_t YPoints_DeadZone_zone0[NPoints_DeadZone_zone0];
429 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
434 XModuleSize_Plane66x41, YModuleSize_Plane66x41,
436 UpperLayerPitch, UpperLayerStripAngle);
438 upper_layer_zone0.SetStripNumberingOrder(
LeftToRight);
442 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_zone0, XPoints_DeadZone_zone0, YPoints_DeadZone_zone0);
454 XHotZoneSize_Plane66x41, YHotZoneSize_Plane66x41,
456 LowerLayerPitch, LowerLayerStripAngle);
464 XHotZoneSize_Plane66x41, YHotZoneSize_Plane66x41,
466 UpperLayerPitch, UpperLayerStripAngle);
483void BmnGemStripStation_RunSpring2017::BuildModules_One163x45Plane() {
489 Double_t DriftGapThickness = 0.3;
490 Double_t FirstTransferGapThickness = 0.25;
491 Double_t SecondTransferGapThickness = 0.2;
492 Double_t InductionGapThickness = 0.15;
495 DriftGapThickness, FirstTransferGapThickness,
496 SecondTransferGapThickness, InductionGapThickness);
502 XModuleSize_Plane163x45, YModuleSize_Plane163x45,
504 LowerLayerPitch, LowerLayerStripAngle);
506 if(UpperLayerStripAngle >= 0.0) {
507 lower_layer_zone0.SetStripNumberingOrder(
LeftToRight);
511 lower_layer_zone0.SetStripNumberingOrder(
RightToLeft);
517 const Int_t NPoints_DeadZone_lower_zone0 = 4;
518 Double_t XPoints_DeadZone_lower_zone0[NPoints_DeadZone_lower_zone0];
519 Double_t YPoints_DeadZone_lower_zone0[NPoints_DeadZone_lower_zone0];
527 YPoints_DeadZone_lower_zone0[1] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YRectHotZoneSize_Plane163x45;
528 YPoints_DeadZone_lower_zone0[2] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YRectHotZoneSize_Plane163x45;
531 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_lower_zone0, XPoints_DeadZone_lower_zone0, YPoints_DeadZone_lower_zone0);
536 XModuleSize_Plane163x45, YModuleSize_Plane163x45,
538 UpperLayerPitch, UpperLayerStripAngle);
540 if(UpperLayerStripAngle >= 0.0) {
541 upper_layer_zone0.SetStripNumberingOrder(
LeftToRight);
545 upper_layer_zone0.SetStripNumberingOrder(
RightToLeft);
550 const Int_t NPoints_DeadZone_upper_zone0 = 4;
551 Double_t XPoints_DeadZone_upper_zone0[NPoints_DeadZone_upper_zone0];
552 Double_t YPoints_DeadZone_upper_zone0[NPoints_DeadZone_upper_zone0];
554 if(UpperLayerStripAngle >= 0.0) {
561 YPoints_DeadZone_upper_zone0[1] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
562 YPoints_DeadZone_upper_zone0[2] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
572 YPoints_DeadZone_upper_zone0[1] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
573 YPoints_DeadZone_upper_zone0[2] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
579 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_upper_zone0, XPoints_DeadZone_upper_zone0, YPoints_DeadZone_upper_zone0);
584 XRectHotZoneSize_Plane163x45, YRectHotZoneSize_Plane163x45,
586 LowerLayerPitch, LowerLayerStripAngle);
588 if(UpperLayerStripAngle >= 0.0) {
599 const Int_t NPoints_DeadZone_lower_zone1 = 4;
600 Double_t XPoints_DeadZone_lower_zone1[NPoints_DeadZone_lower_zone1];
601 Double_t YPoints_DeadZone_lower_zone1[NPoints_DeadZone_lower_zone1];
613 lower_layer_zone1.
AddDeadZone(NPoints_DeadZone_lower_zone1, XPoints_DeadZone_lower_zone1, YPoints_DeadZone_lower_zone1);
618 XSlopeHotZoneSize_Plane163x45[1], YSlopeHotZoneSize_Plane163x45,
620 UpperLayerPitch, UpperLayerStripAngle);
622 if(UpperLayerStripAngle >= 0.0) {
632 const Int_t NPoints_DeadZone_upper_zone1_hole = 4;
633 Double_t XPoints_DeadZone_upper_zone1_hole[NPoints_DeadZone_upper_zone1_hole];
634 Double_t YPoints_DeadZone_upper_zone1_hole[NPoints_DeadZone_upper_zone1_hole];
646 upper_layer_zone1.
AddDeadZone(NPoints_DeadZone_upper_zone1_hole, XPoints_DeadZone_upper_zone1_hole, YPoints_DeadZone_upper_zone1_hole);
649 const Int_t NPoints_DeadZone_upper_zone1_triang = 3;
650 Double_t XPoints_DeadZone_upper_zone1_triang[NPoints_DeadZone_upper_zone1_triang];
651 Double_t YPoints_DeadZone_upper_zone1_triang[NPoints_DeadZone_upper_zone1_triang];
653 if(UpperLayerStripAngle >= 0.0) {
659 YPoints_DeadZone_upper_zone1_triang[1] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
660 YPoints_DeadZone_upper_zone1_triang[2] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
668 YPoints_DeadZone_upper_zone1_triang[1] =
YShiftOfModules[0]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
672 upper_layer_zone1.
AddDeadZone(NPoints_DeadZone_upper_zone1_triang, XPoints_DeadZone_upper_zone1_triang, YPoints_DeadZone_upper_zone1_triang);
686 Double_t DriftGapThickness = 0.3;
687 Double_t FirstTransferGapThickness = 0.25;
688 Double_t SecondTransferGapThickness = 0.2;
689 Double_t InductionGapThickness = 0.15;
692 DriftGapThickness, FirstTransferGapThickness,
693 SecondTransferGapThickness, InductionGapThickness);
699 XModuleSize_Plane163x45, YModuleSize_Plane163x45,
701 LowerLayerPitch, LowerLayerStripAngle);
703 if(UpperLayerStripAngle >= 0.0) {
704 lower_layer_zone0.SetStripNumberingOrder(
LeftToRight);
708 lower_layer_zone0.SetStripNumberingOrder(
RightToLeft);
713 const Int_t NPoints_DeadZone_lower_zone0 = 4;
714 Double_t XPoints_DeadZone_lower_zone0[NPoints_DeadZone_lower_zone0];
715 Double_t YPoints_DeadZone_lower_zone0[NPoints_DeadZone_lower_zone0];
723 YPoints_DeadZone_lower_zone0[1] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YRectHotZoneSize_Plane163x45;
724 YPoints_DeadZone_lower_zone0[2] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YRectHotZoneSize_Plane163x45;
727 lower_layer_zone0.AddDeadZone(NPoints_DeadZone_lower_zone0, XPoints_DeadZone_lower_zone0, YPoints_DeadZone_lower_zone0);
732 XModuleSize_Plane163x45, YModuleSize_Plane163x45,
734 UpperLayerPitch, UpperLayerStripAngle);
736 if(UpperLayerStripAngle >= 0.0) {
737 upper_layer_zone0.SetStripNumberingOrder(
LeftToRight);
741 upper_layer_zone0.SetStripNumberingOrder(
RightToLeft);
746 const Int_t NPoints_DeadZone_upper_zone0 = 4;
747 Double_t XPoints_DeadZone_upper_zone0[NPoints_DeadZone_upper_zone0];
748 Double_t YPoints_DeadZone_upper_zone0[NPoints_DeadZone_upper_zone0];
750 if(UpperLayerStripAngle >= 0.0) {
757 YPoints_DeadZone_upper_zone0[1] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
758 YPoints_DeadZone_upper_zone0[2] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
768 YPoints_DeadZone_upper_zone0[1] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
769 YPoints_DeadZone_upper_zone0[2] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
773 upper_layer_zone0.AddDeadZone(NPoints_DeadZone_upper_zone0, XPoints_DeadZone_upper_zone0, YPoints_DeadZone_upper_zone0);
778 XRectHotZoneSize_Plane163x45, YRectHotZoneSize_Plane163x45,
780 LowerLayerPitch, LowerLayerStripAngle);
782 if(UpperLayerStripAngle >= 0.0) {
792 const Int_t NPoints_DeadZone_lower_zone1 = 4;
793 Double_t XPoints_DeadZone_lower_zone1[NPoints_DeadZone_lower_zone1];
794 Double_t YPoints_DeadZone_lower_zone1[NPoints_DeadZone_lower_zone1];
806 lower_layer_zone1.
AddDeadZone(NPoints_DeadZone_lower_zone1, XPoints_DeadZone_lower_zone1, YPoints_DeadZone_lower_zone1);
811 XSlopeHotZoneSize_Plane163x45[1], YSlopeHotZoneSize_Plane163x45,
813 UpperLayerPitch, UpperLayerStripAngle);
815 if(UpperLayerStripAngle >= 0.0) {
825 const Int_t NPoints_DeadZone_upper_zone1_hole = 4;
826 Double_t XPoints_DeadZone_upper_zone1_hole[NPoints_DeadZone_upper_zone1_hole];
827 Double_t YPoints_DeadZone_upper_zone1_hole[NPoints_DeadZone_upper_zone1_hole];
839 upper_layer_zone1.
AddDeadZone(NPoints_DeadZone_upper_zone1_hole, XPoints_DeadZone_upper_zone1_hole, YPoints_DeadZone_upper_zone1_hole);
842 const Int_t NPoints_DeadZone_upper_zone1_triang = 3;
843 Double_t XPoints_DeadZone_upper_zone1_triang[NPoints_DeadZone_upper_zone1_triang];
844 Double_t YPoints_DeadZone_upper_zone1_triang[NPoints_DeadZone_upper_zone1_triang];
846 if(UpperLayerStripAngle >= 0.0) {
852 YPoints_DeadZone_upper_zone1_triang[1] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
861 YPoints_DeadZone_upper_zone1_triang[1] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
862 YPoints_DeadZone_upper_zone1_triang[2] =
YShiftOfModules[1]+
YPosition-YModuleSize_Plane163x45*0.5 + YSlopeHotZoneSize_Plane163x45;
865 upper_layer_zone1.
AddDeadZone(NPoints_DeadZone_upper_zone1_triang, XPoints_DeadZone_upper_zone1_triang, YPoints_DeadZone_upper_zone1_triang);
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)
void AddStripLayer(BmnGemStripLayer strip_layer)
BmnGemStripStation_RunSpring2017(Int_t iStation, Double_t xpos_station, Double_t ypos_station, Double_t zpos_station, Double_t beamradius, BmnGemStripConfiguration::GEM_CONFIG config)
virtual ~BmnGemStripStation_RunSpring2017()
Double_t * XShiftOfModules
BmnGemStripModule ** Modules
Double_t * ZShiftOfModules
Double_t * YShiftOfModules
void DefineStationBorders()
const Double_t XModuleShifts[NStations][NMaxModules]
const Double_t YModuleShifts[NStations][NMaxModules]
const Double_t ZModuleShifts[NStations][NMaxModules]