248 TGeoVolume* vertical_outer_frameV =
new TGeoVolume(
"vertical_outer_frame", vertical_outer_frameS);
249 TGeoVolume* horizontal_outer_frameV =
new TGeoVolume(
"horizontal_outer_frame", horizontal_outer_frameS);
250 TGeoVolume* vertical_inner_frameV =
new TGeoVolume(
"vertical_inner_frame", vertical_inner_frameS);
251 TGeoVolume* horizontal_inner_frameV =
new TGeoVolume(
"horizontal_inner_frame", horizontal_inner_frameS);
260 if (sensitive_medium) {
264 Fatal(
"Main",
"Invalid medium for sensitive modules!");
269 vertical_outer_frameV->
SetMedium(frame_medium);
270 horizontal_outer_frameV->
SetMedium(frame_medium);
271 vertical_inner_frameV->
SetMedium(frame_medium);
272 horizontal_inner_frameV->
SetMedium(frame_medium);
273 composite_frameV->
SetMedium(frame_medium);
275 Fatal(
"Main",
"Invalid medium for frames!");
286 module_center_position->
ReflectX(
true);
288 module_center_position->
ReflectY(
true);
313 comp_frame_center_position->
ReflectX(
true);
315 comp_frame_center_position->
ReflectY(
true);
320 moduleV->
AddNode(hot_zoneV, 0, hot_zone_trans);
322 composite_frameV->
AddNode(vertical_outer_frameV, 0, left_outer_frame_position);
323 composite_frameV->
AddNode(horizontal_outer_frameV, 0, top_outer_frame_position);
324 composite_frameV->
AddNode(vertical_inner_frameV, 0, right_inner_frame_position);
325 composite_frameV->
AddNode(horizontal_inner_frameV, 0, bottom_inner_frame_position);
327 stationA->
AddNode(moduleV, 0, module_center_position);
329 stationA->
AddNode(composite_frameV, 0, comp_frame_center_position);
335 mother_volume->
AddNode(stationA, 0, station_pos);
383 TGeoVolume* vertical_outer_frameV =
new TGeoVolume(
"vertical_outer_frame", vertical_outer_frameS);
384 TGeoVolume* horizontal_outer_frameV =
new TGeoVolume(
"horizontal_outer_frame", horizontal_outer_frameS);
385 TGeoVolume* vertical_inner_frameV =
new TGeoVolume(
"vertical_inner_frame", vertical_inner_frameS);
386 TGeoVolume* horizontal_inner_frameV =
new TGeoVolume(
"horizontal_inner_frame", horizontal_inner_frameS);
395 if (sensitive_medium) {
399 Fatal(
"Main",
"Invalid medium for sensitive modules!");
404 vertical_outer_frameV->
SetMedium(frame_medium);
405 horizontal_outer_frameV->
SetMedium(frame_medium);
406 vertical_inner_frameV->
SetMedium(frame_medium);
407 horizontal_inner_frameV->
SetMedium(frame_medium);
408 composite_frameV->
SetMedium(frame_medium);
410 Fatal(
"Main",
"Invalid medium for frames!");
427 module_right_position->
ReflectX(
true);
456 comp_frame_right_position->
ReflectX(
true);
457 comp_frame_right_position->
ReflectZ(
true);
461 moduleV->
AddNode(hot_zoneV, 0, hot_zone_trans);
463 composite_frameV->
AddNode(vertical_outer_frameV, 0, left_outer_frame_position);
464 composite_frameV->
AddNode(horizontal_outer_frameV, 0, top_outer_frame_position);
465 composite_frameV->
AddNode(vertical_inner_frameV, 0, right_inner_frame_position);
466 composite_frameV->
AddNode(horizontal_inner_frameV, 0, bottom_inner_frame_position);
468 stationA->
AddNode(moduleV, 0, module_left_position);
469 stationA->
AddNode(moduleV, 1, module_right_position);
471 stationA->
AddNode(composite_frameV, 0, comp_frame_left_position);
472 stationA->
AddNode(composite_frameV, 1, comp_frame_right_position);
481 station_pos->
SetTranslation(x_position, y_position, z_position + station_shift);
482 mother_volume->
AddNode(stationA, 0, station_pos);
529 TGeoVolume* vertical_outer_frameV =
new TGeoVolume(
"vertical_outer_frame", vertical_outer_frameS);
530 TGeoVolume* horizontal_outer_frameV =
new TGeoVolume(
"horizontal_outer_frame", horizontal_outer_frameS);
531 TGeoVolume* vertical_inner_frameV =
new TGeoVolume(
"vertical_inner_frame", vertical_inner_frameS);
532 TGeoVolume* horizontal_inner_frameV =
new TGeoVolume(
"horizontal_inner_frame", horizontal_inner_frameS);
541 if (sensitive_medium) {
545 Fatal(
"Main",
"Invalid medium for sensitive modules!");
550 vertical_outer_frameV->
SetMedium(frame_medium);
551 horizontal_outer_frameV->
SetMedium(frame_medium);
552 vertical_inner_frameV->
SetMedium(frame_medium);
553 horizontal_inner_frameV->
SetMedium(frame_medium);
554 composite_frameV->
SetMedium(frame_medium);
556 Fatal(
"Main",
"Invalid medium for frames!");
571 module_right_position->
ReflectX(
true);
599 comp_frame_right_position->
ReflectX(
true);
600 comp_frame_right_position->
ReflectZ(
true);
604 moduleV->
AddNode(hot_zoneV, 0, hot_zone_trans);
606 composite_frameV->
AddNode(vertical_outer_frameV, 0, left_outer_frame_position);
607 composite_frameV->
AddNode(horizontal_outer_frameV, 0, top_outer_frame_position);
608 composite_frameV->
AddNode(vertical_inner_frameV, 0, right_inner_frame_position);
609 composite_frameV->
AddNode(horizontal_inner_frameV, 0, bottom_inner_frame_position);
611 stationA->
AddNode(moduleV, 0, module_left_position);
612 stationA->
AddNode(moduleV, 1, module_right_position);
614 stationA->
AddNode(composite_frameV, 0, comp_frame_left_position);
615 stationA->
AddNode(composite_frameV, 1, comp_frame_right_position);
621 mother_volume->
AddNode(stationA, 0, station_pos);
646 TString part_module_name =
"part_moduleS_" + station_name;
651 TString part_rectangle_inner_zone_name =
"part_rectangle_inner_zoneS_" + station_name;
652 TGeoShape* part_rectangle_inner_zoneS =
new TGeoBBox(part_rectangle_inner_zone_name, XRectangleZoneSize * 0.5,
655 TString part_slope_inner_zone_name =
"part_slope_inner_zoneS_" + station_name;
657 part_slope_inner_zoneS->
SetName(part_slope_inner_zone_name);
658 Double_t x_pos[4] = {XMaxSlopeZoneSize * 0.5, XMaxSlopeZoneSize * 0.5 - (XMaxSlopeZoneSize - XMinSlopeZoneSize),
659 -XMaxSlopeZoneSize * 0.5, -XMaxSlopeZoneSize * 0.5};
660 Double_t y_pos[4] = {-YSlopeZoneSize * 0.5, YSlopeZoneSize * 0.5, YSlopeZoneSize * 0.5, -YSlopeZoneSize * 0.5};
666 TString hole_name =
"holeS_" + station_name;
672 TString hole_module_trans_name =
"hole_module_trans_name_" + station_name;
674 new TGeoTranslation(hole_module_trans_name, -XOuterZoneSize * 0.5, -YOuterZoneSize * 0.5, 0);
677 TString hole_rectangle_inner_zone_trans_name =
"hole_rectangle_inner_zone_trans_name_" + station_name;
679 hole_rectangle_inner_zone_trans_name, -XRectangleZoneSize * 0.5, -YRectangleZoneSize * 0.5, 0);
682 TString hole_slope_inner_zone_trans_name =
"hole_slope_inner_zone_trans_name_" + station_name;
684 new TGeoTranslation(hole_slope_inner_zone_trans_name, -XMaxSlopeZoneSize * 0.5, -YSlopeZoneSize * 0.5, 0);
688 TString bool_expression_module = part_module_name +
" - " + hole_name +
":" + hole_module_trans_name;
691 TString bool_expression_rectangle_inner_zone =
692 part_rectangle_inner_zone_name +
" - " + hole_name +
":" + hole_rectangle_inner_zone_trans_name;
695 TString bool_expression_slope_inner_zone =
696 part_slope_inner_zone_name +
" - " + hole_name +
":" + hole_slope_inner_zone_trans_name;
705 new TGeoBBox(
"horizontal_short_frameS", (XOuterZoneSize - hole_radius_with_frame +
dXInnerFrame) * 0.5,
708 hole_radius_with_frame,
ZModuleSize * 0.5, 0., -180.0);
718 TGeoVolume* horizontal_long_frameV =
new TGeoVolume(
"horizontal_long_frame", horizontal_long_frameS);
719 TGeoVolume* horizontal_short_frameV =
new TGeoVolume(
"horizontal_short_frame", horizontal_short_frameS);
725 if (sensitive_medium) {
726 module_with_slope_inner_zoneV->
SetMedium(sensitive_medium);
727 module_with_rect_inner_zoneV->
SetMedium(sensitive_medium);
728 rectangle_inner_zoneV->
SetMedium(sensitive_medium);
729 slope_inner_zoneV->
SetMedium(sensitive_medium);
731 Fatal(
"Main",
"Invalid medium for sensitive modules!");
736 vertical_frameV->
SetMedium(frame_medium);
737 horizontal_long_frameV->
SetMedium(frame_medium);
738 horizontal_short_frameV->
SetMedium(frame_medium);
739 circle_inner_frameV->
SetMedium(frame_medium);
740 composite_frameV->
SetMedium(frame_medium);
742 Fatal(
"Main",
"Invalid medium for frames!");
758 -YOuterZoneSize * 0.5 + YSlopeZoneSize * 0.5, 0);
760 -XOuterZoneSize * 0.5 + XRectangleZoneSize * 0.5, -YOuterZoneSize * 0.5 + YRectangleZoneSize * 0.5, 0);
764 left_module_position->
SetTranslation(XOuterZoneSize * 0.5, 0.0, 0.0);
767 right_module_position->
RotateY(180.0);
768 right_module_position->
SetTranslation(-XOuterZoneSize * 0.5, 0.0, 0.0);
778 (XOuterZoneSize - hole_radius_with_frame -
dXInnerFrame) * 0.5 + hole_radius_with_frame,
781 -((XOuterZoneSize - hole_radius_with_frame -
dXInnerFrame) * 0.5 + hole_radius_with_frame),
784 ((XOuterZoneSize - hole_radius_with_frame -
dXInnerFrame) * 0.5 + hole_radius_with_frame),
792 module_with_slope_inner_zoneV->
AddNode(slope_inner_zoneV, 0, slope_inner_zone_position);
793 module_with_rect_inner_zoneV->
AddNode(rectangle_inner_zoneV, 0, rect_inner_zone_position);
796 stationA->
AddNode(module_with_rect_inner_zoneV, 0, left_module_position);
797 stationA->
AddNode(module_with_slope_inner_zoneV, 1, right_module_position);
799 stationA->
AddNode(module_with_slope_inner_zoneV, 0, left_module_position);
800 stationA->
AddNode(module_with_rect_inner_zoneV, 1, right_module_position);
804 composite_frameV->
AddNode(vertical_frameV, 0, left_frame_position);
805 composite_frameV->
AddNode(vertical_frameV, 1, right_frame_position);
806 composite_frameV->
AddNode(horizontal_long_frameV, 0, top_long_frame_position);
807 composite_frameV->
AddNode(horizontal_short_frameV, 0, left_bottom_short_frame_position);
808 composite_frameV->
AddNode(horizontal_short_frameV, 1, right_bottom_short_frame_position);
811 stationA->
AddNode(composite_frameV, 0, upper_frame_trans);
818 mother_volume->
AddNode(stationA, 0, station_pos);