8 #define _FIBER_X_SPACING_ (0.0376 * 25.4)
9 #define _FIBER_Y_SPACING_ (0.0328 * 25.4)
14 #define _MIN_DISTANCE_TO_EDGE_ ((0.0110 + 0.0108)*25.4)
20 #define _ASSUME_TWO_TOWER_ASSEMBLIES_
50 #ifndef _NO_STRUCTURE_GEOMETRY_
61 #ifdef _FIBER_X_SPACING_
71 #ifdef _FIBER_Y_SPACING_
117 #ifdef _NO_STRUCTURE_GEOMETRY_
130 #ifdef _IGNORE_BRASS_LAYERS_
132 fptr->
AddLayer(6.498 * 25.4,
"WEpoxyMix");
134 fptr->
AddLayer(0.012 * 25.4,
"brass");
135 fptr->
AddLayer(1.690 * 25.4,
"WEpoxyMix");
136 fptr->
AddLayer(0.012 * 25.4,
"brass");
137 fptr->
AddLayer(3.380 * 25.4,
"WEpoxyMix");
138 fptr->
AddLayer(0.012 * 25.4,
"brass");
139 fptr->
AddLayer(1.380 * 25.4,
"WEpoxyMix");
140 fptr->
AddLayer(0.012 * 25.4,
"brass");
158 TGeoBBox *tower =
new TGeoBBox(cname +
"Tower",
170 #ifdef _NO_STRUCTURE_GEOMETRY_
172 new TGeoVolume(cname +
"Tower", tower, gpar->
GetMedium(
"WEpoxySciMix"));
176 new TGeoVolume(cname +
"Tower", tower, gpar->
GetMedium(
"air"));
181 char layerName[128], claddingName[128], coreName[128];
183 sprintf(layerName,
"%sTowerLayer%02d", cname.Data(), iq);
184 sprintf(claddingName,
"%sFiberCladding%02d", cname.Data(), iq);
185 sprintf(coreName,
"%sFiberCore%02d", cname.Data(), iq);
190 TGeoBBox *ltower =
new TGeoBBox(layerName,
194 TGeoVolume *vltower =
195 new TGeoVolume(layerName, ltower, gpar->
GetMedium(layer->
mMedia.Data()));
197 vtower->AddNode(vltower, 0,
198 new TGeoCombiTrans(0.0, 0.0,
201 TGeoTube *fiber =
new TGeoTube(claddingName, 0.0, 0.1 * fptr->
mOuterDiameter/2,
203 TGeoVolume *vfiber =
new TGeoVolume(claddingName, fiber, gpar->
GetMedium(
"PMMA"));
211 #ifdef _MIN_DISTANCE_TO_EDGE_
213 #ifdef _ASSUME_TWO_TOWER_ASSEMBLIES_
230 new TGeoCombiTrans(0.1 * xx, 0.1 * yy, 0.0,
new TGeoRotation()));
235 TGeoVolume *vfcore =
new TGeoVolume(coreName, fcore, gpar->
GetMedium(
"polystyrene"));
236 vfiber->AddNode(vfcore, 0,
new TGeoCombiTrans(0.0, 0.0, 0.0,
new TGeoRotation()));
243 TGeoBBox *shell =
new TGeoBBox(cname +
"TowerShell",
247 TGeoVolume *vshell =
new TGeoVolume(cname +
"TowerShell", shell, gpar->
GetMedium(
"air"));
249 #ifndef _NO_STRUCTURE_GEOMETRY_
250 double lightGuideOffset, siliconPadOffset, sensorOffset, g10Offset;
254 TGeoTrd2 *guide =
new TGeoTrd2(cname +
"TowerLightGuide",
261 TGeoVolume *vguide =
new TGeoVolume(cname +
"TowerLightGuide", guide, gpar->
GetMedium(
"lucite"));
265 vshell->AddNode(vguide, 0,
new TGeoCombiTrans(0.0, 0.0, 0.1 * lightGuideOffset, 0));
271 TGeoBBox *spad =
new TGeoBBox(cname +
"TowerSiliconPad",
276 new TGeoVolume(cname +
"TowerSiliconPad", spad, gpar->
GetMedium(
"SiliconeResinD"));
280 vshell->AddNode(vspad, 0,
new TGeoCombiTrans(0.0, 0.0, 0.1 * siliconPadOffset, 0));
286 TGeoBBox *sensor =
new TGeoBBox(cname +
"SiliconSensor",
290 TGeoVolume *vsensor =
291 new TGeoVolume(cname +
"SiliconSensor", sensor, gpar->
GetMedium(
"silicon"));
295 for(
unsigned iqx=0; iqx<2; iqx++) {
298 for(
unsigned iqy=0; iqy<2; iqy++) {
301 vshell->AddNode(vsensor, iqx*2+iqy,
302 new TGeoCombiTrans(0.1 * xOffset, 0.1 * yOffset, 0.1 * sensorOffset, 0));
310 TGeoBBox *g10 =
new TGeoBBox(cname +
"SiliconSensorG10",
315 new TGeoVolume(cname +
"SiliconSensorG10", g10, gpar->
GetMedium(
"G10"));
319 vshell->AddNode(vg10, 0,
new TGeoCombiTrans(0.0, 0.0, 0.1 * g10Offset, 0));
325 vshell->AddNode(vtower, 0,
new TGeoCombiTrans(0.0, 0.0, 0.1 * towerOffset, 0));