48 {
49 if (
name ==
"SPA06" ||
name ==
"SPA01") {
52
54 double upWidth = 0.;
57
59
60
62 strd = &((strd->add((*upTrd) << GeoTrf::TranslateZ3D(
length / 2.))) << GeoTrf::TranslateZ3D((maxwLength -
length) / 2.));
63 }
64
65 const GeoMaterial *mtrd = matManager.
getMaterial(
"std::Aluminium");
66 const GeoLogVol *lspa = new GeoLogVol("CSCspacer", strd, mtrd);
67 GeoPhysVol *pspa = new GeoPhysVol(lspa);
68 return pspa;
69
70 } else {
72 const GeoMaterial *mtrd = matManager.
getMaterial(
"std::Air");
73 GeoLogVol *ltrd = new GeoLogVol("Spacer", strd, mtrd);
74 GeoPhysVol *ptrd = new GeoPhysVol(ltrd);
75
78 double dy = 3. * tckibeam;
79
80 GeoVPhysVol *ptrdtemp = nullptr;
81
82 GeoTrd *strd1 =
new GeoTrd(dx / 2, dx / 2, dy / 2, dy / 2,
length / 2);
83 const GeoMaterial *mtrd1 = matManager.
getMaterial(
"std::Aluminium");
84 GeoLogVol *ltrd1 = new GeoLogVol("ibeam1", strd1, mtrd1);
85 GeoPhysVol *ptrd1 = new GeoPhysVol(ltrd1);
86
87 GeoTrd *strd2 =
new GeoTrd(dy / 2, dy / 2, dx / 2, dx / 2,
length / 2);
88 const GeoMaterial *mtrd2 = matManager.
getMaterial(
"std::Aluminium");
89 GeoLogVol *ltrd2 = new GeoLogVol("ibeam2", strd2, mtrd2);
90 GeoPhysVol *ptrd2 = new GeoPhysVol(ltrd2);
91
92 GeoSerialDenominator *
sd =
new GeoSerialDenominator(
name +
" ibeam");
94 ptrd->add(sd);
95 ptrd->add(new GeoSerialIdentifier(0));
96 }
97
99 double wherepos = newpos;
100 double wherewidth = -
width / 2.;
101 for (int j = 0; j < 3; j++) {
102 for (
int i = 0;
i < 3;
i++) {
103 ptrdtemp = ptrd1;
104 if (i == 1) {
105 ptrdtemp = ptrd2;
107 }
108 GeoTransform *xf = new GeoTransform(GeoTrf::Translate3D(wherepos + tckibeam / 2, wherewidth + dy / 2, 0));
110 ptrd->add(xf);
111 ptrd->add(ptrdtemp);
112 }
113 wherepos += tckibeam;
115 }
117 wherewidth += (
width / 2. -
dy / 2.);
118 }
119
120 double vtubl = (
width - 5 * tckibeam) / 2.;
121
122 GeoSerialDenominator *ntube =
new GeoSerialDenominator(
name +
" vbeam");
124 ptrd->add(ntube);
125 ptrd->add(new GeoSerialIdentifier(0));
126 }
127
128 for (int k1 = 0; k1 < 2; k1++) {
129 for (
int k = 0;
k < 2;
k++) {
130 GeoTransform *ttube = new GeoTransform(GeoTrf::RotateX3D(-90 * Gaudi::Units::deg) *
131 GeoTrf::Translate3D(0., -(vtubl + tckibeam) / 2. - (k - 1) * (vtubl + tckibeam), -
length / 4. - (k1 - 1) *
length / 2));
133 ptrd->add(ttube);
134 }
135 }
136
137 return ptrd;
138 }
139 }
virtual const GeoMaterial * getMaterial(const std::string &name)=0