242 TGeoVolume* vertical_outer_frameV =
new TGeoVolume(
"vertical_outer_frame", vertical_outer_frameS);
243 TGeoVolume* horizontal_outer_frameV =
new TGeoVolume(
"horizontal_outer_frame", horizontal_outer_frameS);
244 TGeoVolume* vertical_inner_frameV =
new TGeoVolume(
"vertical_inner_frame", vertical_inner_frameS);
245 TGeoVolume* horizontal_inner_frameV =
new TGeoVolume(
"horizontal_inner_frame", horizontal_inner_frameS);
254 if (sensitive_medium) {
258 Fatal(
"Main",
"Invalid medium for sensitive modules!");
263 vertical_outer_frameV->
SetMedium(frame_medium);
264 horizontal_outer_frameV->
SetMedium(frame_medium);
265 vertical_inner_frameV->
SetMedium(frame_medium);
266 horizontal_inner_frameV->
SetMedium(frame_medium);
267 composite_frameV->
SetMedium(frame_medium);
269 Fatal(
"Main",
"Invalid medium for frames!");
280 module_center_position->
ReflectX(
true);
282 module_center_position->
ReflectY(
true);
307 comp_frame_center_position->
ReflectX(
true);
309 comp_frame_center_position->
ReflectY(
true);
314 moduleV->
AddNode(hot_zoneV, 0, hot_zone_trans);
316 composite_frameV->
AddNode(vertical_outer_frameV, 0, left_outer_frame_position);
317 composite_frameV->
AddNode(horizontal_outer_frameV, 0, top_outer_frame_position);
318 composite_frameV->
AddNode(vertical_inner_frameV, 0, right_inner_frame_position);
319 composite_frameV->
AddNode(horizontal_inner_frameV, 0, bottom_inner_frame_position);
321 stationA->
AddNode(moduleV, 0, module_center_position);
323 stationA->
AddNode(composite_frameV, 0, comp_frame_center_position);
329 mother_volume->
AddNode(stationA, 0, station_pos);
376 TGeoVolume* vertical_outer_frameV =
new TGeoVolume(
"vertical_outer_frame", vertical_outer_frameS);
377 TGeoVolume* horizontal_outer_frameV =
new TGeoVolume(
"horizontal_outer_frame", horizontal_outer_frameS);
378 TGeoVolume* vertical_inner_frameV =
new TGeoVolume(
"vertical_inner_frame", vertical_inner_frameS);
379 TGeoVolume* horizontal_inner_frameV =
new TGeoVolume(
"horizontal_inner_frame", horizontal_inner_frameS);
388 if (sensitive_medium) {
392 Fatal(
"Main",
"Invalid medium for sensitive modules!");
397 vertical_outer_frameV->
SetMedium(frame_medium);
398 horizontal_outer_frameV->
SetMedium(frame_medium);
399 vertical_inner_frameV->
SetMedium(frame_medium);
400 horizontal_inner_frameV->
SetMedium(frame_medium);
401 composite_frameV->
SetMedium(frame_medium);
403 Fatal(
"Main",
"Invalid medium for frames!");
419 module_right_position->
ReflectX(
true);
448 comp_frame_right_position->
ReflectX(
true);
449 comp_frame_right_position->
ReflectZ(
true);
453 moduleV->
AddNode(hot_zoneV, 0, hot_zone_trans);
455 composite_frameV->
AddNode(vertical_outer_frameV, 0, left_outer_frame_position);
456 composite_frameV->
AddNode(horizontal_outer_frameV, 0, top_outer_frame_position);
457 composite_frameV->
AddNode(vertical_inner_frameV, 0, right_inner_frame_position);
458 composite_frameV->
AddNode(horizontal_inner_frameV, 0, bottom_inner_frame_position);
460 stationA->
AddNode(moduleV, 0, module_left_position);
461 stationA->
AddNode(moduleV, 1, module_right_position);
463 stationA->
AddNode(composite_frameV, 0, comp_frame_left_position);
464 stationA->
AddNode(composite_frameV, 1, comp_frame_right_position);
470 mother_volume->
AddNode(stationA, 0, station_pos);
495 TString part_module_name =
"part_moduleS_" + station_name;
500 TString part_rectangle_inner_zone_name =
"part_rectangle_inner_zoneS_" + station_name;
501 TGeoShape* part_rectangle_inner_zoneS =
new TGeoBBox(part_rectangle_inner_zone_name, XRectangleZoneSize * 0.5,
504 TString part_slope_inner_zone_name =
"part_slope_inner_zoneS_" + station_name;
506 part_slope_inner_zoneS->
SetName(part_slope_inner_zone_name);
507 Double_t x_pos[4] = {XMaxSlopeZoneSize * 0.5, XMaxSlopeZoneSize * 0.5 - (XMaxSlopeZoneSize - XMinSlopeZoneSize),
508 -XMaxSlopeZoneSize * 0.5, -XMaxSlopeZoneSize * 0.5};
509 Double_t y_pos[4] = {-YSlopeZoneSize * 0.5, YSlopeZoneSize * 0.5, YSlopeZoneSize * 0.5, -YSlopeZoneSize * 0.5};
515 TString hole_name =
"holeS_" + station_name;
521 TString hole_module_trans_name =
"hole_module_trans_name_" + station_name;
523 new TGeoTranslation(hole_module_trans_name, -XOuterZoneSize * 0.5, -YOuterZoneSize * 0.5, 0);
526 TString hole_rectangle_inner_zone_trans_name =
"hole_rectangle_inner_zone_trans_name_" + station_name;
528 hole_rectangle_inner_zone_trans_name, -XRectangleZoneSize * 0.5, -YRectangleZoneSize * 0.5, 0);
531 TString hole_slope_inner_zone_trans_name =
"hole_slope_inner_zone_trans_name_" + station_name;
533 new TGeoTranslation(hole_slope_inner_zone_trans_name, -XMaxSlopeZoneSize * 0.5, -YSlopeZoneSize * 0.5, 0);
537 TString bool_expression_module = part_module_name +
" - " + hole_name +
":" + hole_module_trans_name;
540 TString bool_expression_rectangle_inner_zone =
541 part_rectangle_inner_zone_name +
" - " + hole_name +
":" + hole_rectangle_inner_zone_trans_name;
544 TString bool_expression_slope_inner_zone =
545 part_slope_inner_zone_name +
" - " + hole_name +
":" + hole_slope_inner_zone_trans_name;
554 new TGeoBBox(
"horizontal_short_frameS", (XOuterZoneSize - hole_radius_with_frame +
dXInnerFrame) * 0.5,
557 hole_radius_with_frame,
ZModuleSize * 0.5, 0., -180.0);
567 TGeoVolume* horizontal_long_frameV =
new TGeoVolume(
"horizontal_long_frame", horizontal_long_frameS);
568 TGeoVolume* horizontal_short_frameV =
new TGeoVolume(
"horizontal_short_frame", horizontal_short_frameS);
574 if (sensitive_medium) {
575 module_with_slope_inner_zoneV->
SetMedium(sensitive_medium);
576 module_with_rect_inner_zoneV->
SetMedium(sensitive_medium);
577 rectangle_inner_zoneV->
SetMedium(sensitive_medium);
578 slope_inner_zoneV->
SetMedium(sensitive_medium);
580 Fatal(
"Main",
"Invalid medium for sensitive modules!");
585 vertical_frameV->
SetMedium(frame_medium);
586 horizontal_long_frameV->
SetMedium(frame_medium);
587 horizontal_short_frameV->
SetMedium(frame_medium);
588 circle_inner_frameV->
SetMedium(frame_medium);
589 composite_frameV->
SetMedium(frame_medium);
591 Fatal(
"Main",
"Invalid medium for frames!");
607 -YOuterZoneSize * 0.5 + YSlopeZoneSize * 0.5, 0);
609 -XOuterZoneSize * 0.5 + XRectangleZoneSize * 0.5, -YOuterZoneSize * 0.5 + YRectangleZoneSize * 0.5, 0);
613 left_module_position->
SetTranslation(XOuterZoneSize * 0.5, 0.0, 0.0);
616 right_module_position->
RotateY(180.0);
617 right_module_position->
SetTranslation(-XOuterZoneSize * 0.5, 0.0, 0.0);
627 (XOuterZoneSize - hole_radius_with_frame -
dXInnerFrame) * 0.5 + hole_radius_with_frame,
630 -((XOuterZoneSize - hole_radius_with_frame -
dXInnerFrame) * 0.5 + hole_radius_with_frame),
633 ((XOuterZoneSize - hole_radius_with_frame -
dXInnerFrame) * 0.5 + hole_radius_with_frame),
641 module_with_slope_inner_zoneV->
AddNode(slope_inner_zoneV, 0, slope_inner_zone_position);
642 module_with_rect_inner_zoneV->
AddNode(rectangle_inner_zoneV, 0, rect_inner_zone_position);
645 stationA->
AddNode(module_with_rect_inner_zoneV, 0, left_module_position);
646 stationA->
AddNode(module_with_slope_inner_zoneV, 1, right_module_position);
648 stationA->
AddNode(module_with_slope_inner_zoneV, 0, left_module_position);
649 stationA->
AddNode(module_with_rect_inner_zoneV, 1, right_module_position);
653 composite_frameV->
AddNode(vertical_frameV, 0, left_frame_position);
654 composite_frameV->
AddNode(vertical_frameV, 1, right_frame_position);
655 composite_frameV->
AddNode(horizontal_long_frameV, 0, top_long_frame_position);
656 composite_frameV->
AddNode(horizontal_short_frameV, 0, left_bottom_short_frame_position);
657 composite_frameV->
AddNode(horizontal_short_frameV, 1, right_bottom_short_frame_position);
660 stationA->
AddNode(composite_frameV, 0, upper_frame_trans);
667 mother_volume->
AddNode(stationA, 0, station_pos);