803 {
804
805
806
807
808
809
810
811 G4double
smallL = 0.01 * mm;
812 G4RotationMatrix
rot_dummy( 0 * deg, 0 * deg, 0 * deg );
813 IniParam_mrpc();
814 PartProduce* partProduce = new PartProduce();
817
818
819
820 std::ostringstream name;
821
822
823
824
825
826 G4LogicalVolume* logical_container[4];
827 G4LogicalVolume* logical_gasContainer[4];
828 for ( int kk = 0; kk < 4; kk++ )
829 {
830 name.str( "" );
831 name << "logical_container_m" << kk;
832 logical_container[kk] = partProduce->
lg_container( (
int)kk / 2, name.str() );
833
834 name.str( "" );
835 name << "logical_gasContainer_m" << kk;
837 }
838
839
840 G4LogicalVolume* logical_containerFrame =
842 G4LogicalVolume* logical_upCover = partProduce->
lg_upCover(
"logical_upCover" );
843 G4LogicalVolume* logical_lowCover1 = partProduce->
lg_lowCover1(
"logical_lowCover1" );
844 G4LogicalVolume* logical_lowCover2 = partProduce->
lg_lowCover2(
"logical_lowCover2" );
845 G4LogicalVolume* logical_upFEE = partProduce->
lg_upFEE(
"logical_upFEE" );
846 G4LogicalVolume* logical_sideFEE = partProduce->
lg_sideFEE(
"logical_sideFEE" );
847 G4LogicalVolume* logical_castingDie = partProduce->
lg_castingDie(
"logical_castingDie" );
848 G4LogicalVolume* logical_bareChamber = partProduce->
lg_bareChamber(
"logical_bareChamber" );
849 G4LogicalVolume* logical_bracket = partProduce->
lg_bracket(
"logical_bracket" );
850 G4LogicalVolume* logical_sideStopBlock =
852 G4LogicalVolume* logical_upStopBlock = partProduce->
lg_upStopBlock(
"logical_upStopBlock" );
853
854
855 for ( int kk = 0; kk < 4; kk++ )
856 {
857
858 name.str( "" );
859 name << "physical_containerFrame_m" << kk;
860 new G4PVPlacement( 0, G4ThreeVector( 0, 0, 0 ), logical_containerFrame, name.str(),
862
863
864 G4ThreeVector translation_upCover( 0, ( containerOut_y + upCover_y ) / 2 +
smallL,
865 ( upCover_z - containerOut_z ) / 2 - upCover_posz );
866 name.str( "" );
867 name << "physical_upCover_m" << kk;
868 new G4PVPlacement( 0, translation_upCover, logical_upCover, name.str(),
870
871
872 name.str( "" );
873 name << "physical_lowCover_m" << kk;
874 if ( kk < 2 )
875 {
876 G4ThreeVector translation_lowCover( 0, -1 * ( containerOut_y + upCover_y ) / 2,
877 ( lowCover1_z - containerOut_z ) / 2 -
878 lowCover1_posz );
879 new G4PVPlacement( 0, translation_lowCover, logical_lowCover1, name.str(),
881 }
882 else
883 {
884 G4ThreeVector translation_lowCover( 0, -1 * ( containerOut_y + upCover_y ) / 2,
885 ( lowCover2_z - containerOut_z ) / 2 -
886 lowCover2_posz );
887 new G4PVPlacement( 0, translation_lowCover, logical_lowCover2, name.str(),
889 }
890
891
892 G4ThreeVector translation_upFEE( 0, containerOut_y / 2 + upCover_y + upFEE_y / 2 +
smallL,
893 upCover_z - upFEE_posz - upFEE_z / 2 - upCover_posz -
894 containerOut_z / 2 );
895 name.str( "" );
896 name << "physical_upFEE_m" << kk;
897 new G4PVPlacement( 0, translation_upFEE, logical_upFEE, name.str(), logical_container[kk],
899
900
901 double angle_containerFrameSide =
902 atan( ( containerOut_xup - containerOut_xdown ) / 2 / containerOut_z ) *
rad;
903 double l_containerFrameSide = containerOut_z /
cos( angle_containerFrameSide );
904 double x_sideFEE =
905 ( l_containerFrameSide / 2 - sideFEE_posl ) *
sin( angle_containerFrameSide ) +
906 ( containerOut_xup + containerOut_xdown ) / 4 +
907 sideFEE_x / 2 *
cos( angle_containerFrameSide );
908 double z_sideFEE =
909 ( l_containerFrameSide / 2 - sideFEE_posl ) *
cos( angle_containerFrameSide ) -
910 sideFEE_x / 2 *
sin( angle_containerFrameSide );
911 G4ThreeVector translation_sideFEE_left( -x_sideFEE, 0, z_sideFEE );
912 G4RotationMatrix rot_sideFEE_left;
913 rot_sideFEE_left.rotateY( -angle_containerFrameSide );
914 G4Transform3D transform_sideFEE_left( rot_sideFEE_left, translation_sideFEE_left );
915 name.str( "" );
916 name << "physical_sideFEE_left_m" << kk;
917 new G4PVPlacement( transform_sideFEE_left, logical_sideFEE, name.str(),
919
920 G4ThreeVector translation_sideFEE_right( x_sideFEE, 0, z_sideFEE );
921 G4RotationMatrix rot_sideFEE_right;
922 rot_sideFEE_right.rotateZ( 180 * deg );
923 rot_sideFEE_right.rotateY( angle_containerFrameSide );
924 G4Transform3D transform_sideFEE_right( rot_sideFEE_right, translation_sideFEE_right );
925 name.str( "" );
926 name << "physical_sideFEE_right_m" << kk;
927 new G4PVPlacement( transform_sideFEE_right, logical_sideFEE, name.str(),
929
930
931 G4RotationMatrix rot_castingDie;
932 rot_castingDie.rotateX( -90 * deg );
933 G4ThreeVector translation_castingDie_1(
934 0, containerOut_y / 2 + upCover_y + castingDie_z / 2 +
smallL,
935 -containerOut_z / 2 + upCover_posz + castingDie_posz1 );
936 G4Transform3D transform_castingDie_1( rot_castingDie, translation_castingDie_1 );
937 name.str( "" );
938 name << "physical_castingDie_1_m" << kk;
939 new G4PVPlacement( transform_castingDie_1, logical_castingDie, name.str(),
941
942 G4ThreeVector translation_castingDie_2(
943 0, containerOut_y / 2 + upCover_y + castingDie_z / 2 +
smallL,
944 -containerOut_z / 2 + upCover_posz + castingDie_posz2 );
945 G4Transform3D transform_castingDie_2( rot_castingDie, translation_castingDie_2 );
946 name.str( "" );
947 name << "physical_castingDie_2_m" << kk;
948 new G4PVPlacement( transform_castingDie_2, logical_castingDie, name.str(),
950
951
952 G4ThreeVector translation_gasContainer(
953 0, 0, ( container_lowBorder - container_thickness ) / 2 );
954 name.str( "" );
955 name << "physical_gasContainer_m" << kk;
956 new G4PVPlacement( 0, translation_gasContainer, logical_gasContainer[kk], name.str(),
958 }
959
960
961
962
963 double l_chamber = honeyComb_y * 2 + tape_mrpc_y * 2 + pcbBoard_y0 * 2 + pcbBoard_y1 +
964 mylar_y * 4 + glass0_y * 4 + glass1_y * 10 + gasLayer_y * 12;
965 double y_chamber;
966 double z_chamber = ( containerIn_z - pcbBoard_z ) / 2 -
smallL;
967 for ( int kk = 0; kk < 4; kk++ )
968 {
969 if ( kk < 2 ) y_chamber = -( containerIn_y - l_chamber ) / 2 + chamber_in_posy;
970 else y_chamber = -( containerIn_y - l_chamber ) / 2 + chamber_out_posy;
971 G4Transform3D transform_bareChamber;
972 if ( kk == 0 || kk == 2 )
973 {
974 transform_bareChamber =
975 G4Transform3D(
rot_dummy, G4ThreeVector( 0, y_chamber, z_chamber ) );
976 }
977 else
978 {
979 G4RotationMatrix rot_bareChamber;
980 rot_bareChamber.rotateZ( 180 * deg );
981 transform_bareChamber =
982 G4Transform3D( rot_bareChamber, G4ThreeVector( 0, y_chamber, z_chamber ) );
983 }
984 new G4PVPlacement( transform_bareChamber, logical_bareChamber, "physical_bareChamber",
986
987
988 G4double z_bracket = -( containerIn_z - bracket_z ) / 2 +
smallL;
989 new G4PVPlacement( 0, G4ThreeVector( -bracket_posx, 0, z_bracket ), logical_bracket,
990 "physical_bracket_0", logical_gasContainer[kk], false, 0,
992 new G4PVPlacement( 0, G4ThreeVector( bracket_posx, 0, z_bracket ), logical_bracket,
993 "physical_bracket_1", logical_gasContainer[kk], false, 0,
995
996
997 G4Transform3D transform_sideStopBlock;
998 G4double angle_gasContainerSide =
999 ( atan( ( containerIn_xup - containerIn_xdown ) / 2 / ( containerIn_z ) ) ) *
rad;
1000 G4double x_sideStopBlock = ( containerIn_xup + containerIn_xdown ) / 4 +
1001 sideStopBlock_posz0 *
tan( angle_gasContainerSide ) -
1002 sideStopBlock_x / 2 *
cos( angle_gasContainerSide );
1003 G4double z_sideStopBlock =
1004 sideStopBlock_posz0 + sideStopBlock_x / 2 *
sin( angle_gasContainerSide );
1005
1006 G4RotationMatrix rot_sideStopBlock;
1007 rot_sideStopBlock.rotateY( angle_gasContainerSide );
1008 rot_sideStopBlock.rotateZ( 180 * deg );
1009 transform_sideStopBlock = G4Transform3D(
1010 rot_sideStopBlock, G4ThreeVector( -x_sideStopBlock, 0, z_sideStopBlock ) );
1011 new G4PVPlacement( transform_sideStopBlock, logical_sideStopBlock,
1012 "physical_sideStopBlock_0", logical_gasContainer[kk], false, 0,
1014
1015 rot_sideStopBlock = G4RotationMatrix( 0, 0, 0 );
1016 rot_sideStopBlock.rotateY( angle_gasContainerSide );
1017 transform_sideStopBlock = G4Transform3D(
1018 rot_sideStopBlock, G4ThreeVector( x_sideStopBlock, 0, z_sideStopBlock ) );
1019 new G4PVPlacement( transform_sideStopBlock, logical_sideStopBlock,
1020 "physical_sideStopBlock_1", logical_gasContainer[kk], false, 0,
1022
1023 x_sideStopBlock = ( containerIn_xup + containerIn_xdown ) / 4 +
1024 sideStopBlock_posz1 *
tan( angle_gasContainerSide ) -
1025 sideStopBlock_x / 2 *
cos( angle_gasContainerSide );
1026 z_sideStopBlock =
1027 sideStopBlock_posz1 + sideStopBlock_x / 2 *
sin( angle_gasContainerSide );
1028 rot_sideStopBlock = G4RotationMatrix( 0, 0, 0 );
1029 rot_sideStopBlock.rotateY( angle_gasContainerSide );
1030 rot_sideStopBlock.rotateZ( 180 * deg );
1031 transform_sideStopBlock = G4Transform3D(
1032 rot_sideStopBlock, G4ThreeVector( -x_sideStopBlock, 0, z_sideStopBlock ) );
1033 new G4PVPlacement( transform_sideStopBlock, logical_sideStopBlock,
1034 "physical_sideStopBlock_2", logical_gasContainer[kk], false, 0,
1036
1037 rot_sideStopBlock = G4RotationMatrix( 0, 0, 0 );
1038 rot_sideStopBlock.rotateY( angle_gasContainerSide );
1039 transform_sideStopBlock = G4Transform3D(
1040 rot_sideStopBlock, G4ThreeVector( x_sideStopBlock, 0, z_sideStopBlock ) );
1041 new G4PVPlacement( transform_sideStopBlock, logical_sideStopBlock,
1042 "physical_sideStopBlock_3", logical_gasContainer[kk], false, 0,
1044 }
1045
1046
1047
1048 G4double x_upStopBlock = containerIn_xup / 4;
1049 G4double y_upStopBlock =
1050 pcbBoard_y1 / 2. + mylar_y + glass0_y + glass1_y * 2.5 + gasLayer_y * 3;
1051 G4double z_upStopBlock = ( pcbBoard_z - upStopBlock_z ) / 2 -
smallL;
1052 new G4PVPlacement( 0, G4ThreeVector( -x_upStopBlock, -y_upStopBlock, z_upStopBlock ),
1053 logical_upStopBlock, "physical_upStopBlock_0", logical_bareChamber, false,
1055 new G4PVPlacement( 0, G4ThreeVector( -x_upStopBlock, y_upStopBlock, z_upStopBlock ),
1056 logical_upStopBlock, "physical_upStopBlock_1", logical_bareChamber, false,
1058 new G4PVPlacement( 0, G4ThreeVector( x_upStopBlock, -y_upStopBlock, z_upStopBlock ),
1059 logical_upStopBlock, "physical_upStopBlock_2", logical_bareChamber, false,
1061 new G4PVPlacement( 0, G4ThreeVector( x_upStopBlock, y_upStopBlock, z_upStopBlock ),
1062 logical_upStopBlock, "physical_upStopBlock_3", logical_bareChamber, false,
1064
1065
1066 G4LogicalVolume* logical_honeyComb = partProduce->
lg_honeyComb(
"logical_honeyComb" );
1067 G4double y_honeyComb = ( honeyComb_y + pcbBoard_y1 ) / 2 + tape_mrpc_y + pcbBoard_y0 +
1068 mylar_y * 2 + glass0_y * 2 + glass1_y * 5 + gasLayer_y * 6;
1069 G4double z_honeyComb = ( pcbBoard_z - honeyComb_z ) / 2 - honeyComb_posz;
1070 new G4PVPlacement( 0, G4ThreeVector( 0, y_honeyComb, z_honeyComb ), logical_honeyComb,
1071 "physical_honeyComb_0", logical_bareChamber,
false, 0,
checkOverlap );
1072 new G4PVPlacement( 0, G4ThreeVector( 0, -1 * y_honeyComb, z_honeyComb ), logical_honeyComb,
1073 "physical_honeyComb_1", logical_bareChamber,
false, 1,
checkOverlap );
1074
1075
1076 G4LogicalVolume* logical_tape_mrpc = partProduce->
lg_tape_mrpc(
"logical_tape_mrpc" );
1077 G4double y_tape_mrpc = ( tape_mrpc_y + pcbBoard_y1 ) / 2 + pcbBoard_y0 + mylar_y * 2 +
1078 glass0_y * 2 + glass1_y * 5 + gasLayer_y * 6;
1079 G4double z_tape_mrpc = ( pcbBoard_z - tape_mrpc_z ) / 2 - tape_mrpc_posz;
1080 new G4PVPlacement( 0, G4ThreeVector( 0, y_tape_mrpc, z_tape_mrpc ), logical_tape_mrpc,
1081 "physical_tape_mrpc_0", logical_bareChamber,
false, 0,
checkOverlap );
1082 new G4PVPlacement( 0, G4ThreeVector( 0, -1 * y_tape_mrpc, z_tape_mrpc ), logical_tape_mrpc,
1083 "physical_tape_mrpc_1", logical_bareChamber,
false, 1,
checkOverlap );
1084
1085
1086 G4LogicalVolume* logical_pcbBoard0 = partProduce->
lg_pcbBoard( 0,
"logical_pcbBoard0" );
1087 G4double y_pcbBoard = ( pcbBoard_y0 + pcbBoard_y1 ) / 2 + mylar_y * 2 + glass0_y * 2 +
1088 glass1_y * 5 + gasLayer_y * 6;
1089 new G4PVPlacement( 0, G4ThreeVector( 0, y_pcbBoard, 0 ), logical_pcbBoard0,
1090 "physical_pcbBoard0_0", logical_bareChamber,
false, 0,
checkOverlap );
1091
1092
1093
1094 G4RotationMatrix* rot_pcbBoard = new G4RotationMatrix();
1095 rot_pcbBoard->rotateZ( 180 * degree );
1096 new G4PVPlacement( rot_pcbBoard, G4ThreeVector( 0, -1 * y_pcbBoard, 0 ), logical_pcbBoard0,
1097 "physical_pcbBoard0_1", logical_bareChamber,
false, 1,
checkOverlap );
1098
1099 G4LogicalVolume* logical_pcbBoard1 = partProduce->
lg_pcbBoard( 1,
"logical_pcbBoard1" );
1100 new G4PVPlacement( 0, G4ThreeVector( 0, 0, 0 ), logical_pcbBoard1, "physical_pcbBoard1",
1102
1103
1104 G4AssemblyVolume* logical_strip = partProduce->
lg_strip(
"logical_strip" );
1105 G4double z_strip = ( pcbBoard_z - 12 * strip_z - 11 * strip_gap ) / 2 - strip_posz;
1106 G4Transform3D transform_strip(
1107 rot_dummy, G4ThreeVector( 0, pcbBoard_y0 / 2. - strip_y / 2 -
smallL, z_strip ) );
1108 logical_strip->MakeImprint( logical_pcbBoard0, transform_strip );
1109 transform_strip = G4Transform3D(
rot_dummy, G4ThreeVector( 0, 0, z_strip ) );
1110 logical_strip->MakeImprint( logical_pcbBoard1, transform_strip );
1111
1112
1113 G4LogicalVolume* logical_mylar = partProduce->
lg_mylar(
"logical_mylar" );
1114 G4double y_mylar =
1115 ( mylar_y + pcbBoard_y1 ) / 2 + mylar_y + glass0_y * 2 + glass1_y * 5 + gasLayer_y * 6;
1116 G4double z_mylar = ( pcbBoard_z - mylar_z ) / 2 - mylar_posz;
1117 new G4PVPlacement( 0, G4ThreeVector( 0, y_mylar, z_mylar ), logical_mylar,
1118 "physical_mylar_0", logical_bareChamber,
false, 0,
checkOverlap );
1119 new G4PVPlacement( 0, G4ThreeVector( 0, -y_mylar, z_mylar ), logical_mylar,
1120 "physical_mylar_3", logical_bareChamber,
false, 3,
checkOverlap );
1121
1122 y_mylar = ( mylar_y + pcbBoard_y1 ) / 2;
1123 new G4PVPlacement( 0, G4ThreeVector( 0, y_mylar, z_mylar ), logical_mylar,
1124 "physical_mylar_1", logical_bareChamber,
false, 1,
checkOverlap );
1125 new G4PVPlacement( 0, G4ThreeVector( 0, -y_mylar, z_mylar ), logical_mylar,
1126 "physical_mylar_2", logical_bareChamber,
false, 2,
checkOverlap );
1127
1128
1129 G4LogicalVolume* logical_glass0 = partProduce->
lg_glass( 0,
"logical_glass0" );
1130 G4double y_glass =
1131 ( glass0_y + pcbBoard_y1 ) / 2. + mylar_y + glass0_y + glass1_y * 5 + gasLayer_y * 6;
1132 G4double z_glass = ( pcbBoard_z - glass0_z ) / 2. - glass0_posz;
1133 new G4PVPlacement( 0, G4ThreeVector( 0, y_glass, z_glass ), logical_glass0,
1134 "physical_glass0_0", logical_bareChamber,
false, 0,
checkOverlap );
1135 new G4PVPlacement( 0, G4ThreeVector( 0, -y_glass, z_glass ), logical_glass0,
1136 "physical_glass0_3", logical_bareChamber,
false, 3,
checkOverlap );
1137 y_glass = pcbBoard_y1 / 2. + mylar_y + glass0_y / 2.;
1138 new G4PVPlacement( 0, G4ThreeVector( 0, y_glass, z_glass ), logical_glass0,
1139 "physical_glass0_1", logical_bareChamber,
false, 1,
checkOverlap );
1140 new G4PVPlacement( 0, G4ThreeVector( 0, -y_glass, z_glass ), logical_glass0,
1141 "physical_glass0_2", logical_bareChamber,
false, 2,
checkOverlap );
1142
1143 G4LogicalVolume* logical_glass1 = partProduce->
lg_glass( 1,
"logical_glass1" );
1144 z_glass = ( pcbBoard_z - glass1_z ) / 2. - glass1_posz;
1145 for ( G4int i = 0; i < 5; i++ )
1146 {
1147 y_glass = pcbBoard_y1 / 2. + mylar_y + glass0_y + glass1_y * ( 4.5 - i ) +
1148 gasLayer_y * ( 5 - i );
1149 name.str( "" );
1150 name << "physical_glass1_" << i;
1151 new G4PVPlacement( 0, G4ThreeVector( 0, y_glass, z_glass ), logical_glass1, name.str(),
1153 name.str( "" );
1154 name << "physical_glass1_" << 9 - i;
1155 new G4PVPlacement( 0, G4ThreeVector( 0, -y_glass, z_glass ), logical_glass1, name.str(),
1157 }
1158
1159
1160 logical_gasLayer = partProduce->
lg_gasLayer(
"logical_gasLayer" );
1161 G4double y_gasLayer;
1162 G4double z_gasLayer = ( pcbBoard_z - gasLayer_z ) / 2. - gasLayer_posz;
1163 G4VPhysicalVolume* physical_gasLayer[12];
1164 for ( G4int i = 0; i < 6; i++ )
1165 {
1166 y_gasLayer = pcbBoard_y1 / 2. + mylar_y + glass0_y + glass1_y * ( 5 - i ) +
1167 gasLayer_y * ( 5.5 - i );
1168 name.str( "" );
1169 name << "physical_gasLayer_" << 11 - i;
1170 physical_gasLayer[i] =
1171 new G4PVPlacement( 0, G4ThreeVector( 0, -y_gasLayer, z_gasLayer ), logical_gasLayer,
1172 name.str(), logical_bareChamber,
false, 11 - i,
checkOverlap );
1173 }
1174 for ( G4int i = 6; i < 12; i++ )
1175 {
1176 y_gasLayer = pcbBoard_y1 / 2. + mylar_y + glass0_y + glass1_y * ( i - 6 ) +
1177 gasLayer_y * ( -5.5 + i );
1178 name.str( "" );
1179 name << "physical_gasLayer_" << 11 - i;
1180 physical_gasLayer[i] =
1181 new G4PVPlacement( 0, G4ThreeVector( 0, y_gasLayer, z_gasLayer ), logical_gasLayer,
1182 name.str(), logical_bareChamber,
false, 11 - i,
checkOverlap );
1183 }
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196 const G4int n_module = 36;
1197 G4double angle = 360.0 * deg / n_module;
1198 G4double z_layerIn = endcap_length / 2 - containerOut_y / 2 - lowCover1_y - layer_posz;
1199 G4double z_layerOut = endcap_length / 2 - containerOut_y / 2 - lowCover2_y - layer_posz;
1200
1201
1202
1203
1204 rOffset_east = tofPara->GetVec( "rOffset_east" );
1205 angle_east = tofPara->GetVec( "angle_east" );
1206 angleOffset_east = tofPara->GetVec( "angleOffset_east" );
1207 rOffset_west = tofPara->GetVec( "rOffset_west" );
1208 angle_west = tofPara->GetVec( "angle_west" );
1209 angleOffset_west = tofPara->GetVec( "angleOffset_west" );
1210
1211
1212 for ( int i = 0; i < n_module; i++ )
1213 {
1214 G4double angle_module = startAngle_east + angle_east[i] + i * angle;
1215 G4double r_module = endcap_r + rOffset_east[i];
1216
1217 G4RotationMatrix rot_layerIn_east;
1218 rot_layerIn_east.rotateX( 90. * deg );
1219 rot_layerIn_east.rotateZ( 90. * deg );
1220 rot_layerIn_east.rotateZ( angle_module + angleOffset_east[i] );
1221
1222 G4ThreeVector translation_layerIn_east = G4ThreeVector(
1223 r_module *
cos( angle_module ), r_module *
sin( angle_module ), -z_layerIn );
1224 G4Transform3D transform_layerIn_east =
1225 G4Transform3D( rot_layerIn_east, translation_layerIn_east );
1226
1227 G4RotationMatrix rot_layerOut_east;
1228 rot_layerOut_east.rotateZ( 180. * deg );
1229 rot_layerOut_east.rotateX( 90. * deg );
1230 rot_layerOut_east.rotateZ( 90. * deg );
1231 rot_layerOut_east.rotateZ( angle_module + angleOffset_east[i] );
1232
1233 G4ThreeVector translation_layerOut_east = G4ThreeVector(
1234 r_module *
cos( angle_module ), r_module *
sin( angle_module ), z_layerOut );
1235 G4Transform3D transform_layerOut_east =
1236 G4Transform3D( rot_layerOut_east, translation_layerOut_east );
1237
1238 name.str( "" );
1239 name << "physical_mrpc_east_" << i;
1240 if ( i % 2 == 0 )
1241 {
1242 new G4PVPlacement( transform_layerOut_east, logical_container[3], name.str(),
1244 }
1245 else
1246 {
1247 new G4PVPlacement( transform_layerIn_east, logical_container[0], name.str(),
1249 }
1250 }
1251
1252
1253 for ( int i = 0; i < n_module; i++ )
1254 {
1255 G4double angle_module = startAngle_west + angle_west[i] + i * angle;
1256 G4double r_module = endcap_r + rOffset_west[i];
1257
1258 G4RotationMatrix rot_layerIn_west;
1259 rot_layerIn_west.rotateZ( 180. * deg );
1260 rot_layerIn_west.rotateX( 90. * deg );
1261 rot_layerIn_west.rotateZ( 90. * deg );
1262 rot_layerIn_west.rotateZ( angle_module + angleOffset_west[i] );
1263
1264 G4ThreeVector translation_layerIn_west = G4ThreeVector(
1265 r_module *
cos( angle_module ), r_module *
sin( angle_module ), z_layerIn );
1266 G4Transform3D transform_layerIn_west =
1267 G4Transform3D( rot_layerIn_west, translation_layerIn_west );
1268
1269 G4RotationMatrix rot_layerOut_west;
1270 rot_layerOut_west.rotateX( 90. * deg );
1271 rot_layerOut_west.rotateZ( 90. * deg );
1272 rot_layerOut_west.rotateZ( angle_module + angleOffset_west[i] );
1273
1274 G4ThreeVector translation_layerOut_west = G4ThreeVector(
1275 r_module *
cos( angle_module ), r_module *
sin( angle_module ), -z_layerOut );
1276 G4Transform3D transform_layerOut_west =
1277 G4Transform3D( rot_layerOut_west, translation_layerOut_west );
1278
1279 name.str( "" );
1280 name << "physical_mrpc_west_" << i;
1281 if ( i % 2 == 0 )
1282 {
1283 new G4PVPlacement( transform_layerOut_west, logical_container[2], name.str(),
1285 }
1286 else
1287 {
1288 new G4PVPlacement( transform_layerIn_west, logical_container[1], name.str(),
1290 }
1291 }
1292}
G4RotationMatrix rot_dummy(0 *deg, 0 *deg, 0 *deg)
G4LogicalVolume * lg_sideFEE(string name="")
G4LogicalVolume * lg_mylar(string name="")
G4LogicalVolume * lg_lowCover1(string name="")
G4LogicalVolume * lg_glass(G4int flag, string name="")
G4LogicalVolume * lg_container(int flag, string name="")
G4LogicalVolume * lg_gasContainer(string name="")
G4LogicalVolume * lg_sideStopBlock(string name="")
G4AssemblyVolume * lg_strip(string name="")
G4LogicalVolume * lg_honeyComb(string name="")
G4LogicalVolume * lg_containerFrame(string name="")
G4LogicalVolume * lg_lowCover2(string name="")
G4LogicalVolume * lg_pcbBoard(G4int flag, string name="")
G4LogicalVolume * lg_bracket(string name="")
G4LogicalVolume * lg_bareChamber(string name="")
G4LogicalVolume * lg_upStopBlock(string name="")
G4LogicalVolume * lg_tape_mrpc(string name="")
G4LogicalVolume * lg_gasLayer(string name="")
G4LogicalVolume * lg_castingDie(string name="")
G4LogicalVolume * lg_upFEE(string name="")
G4LogicalVolume * lg_upCover(string name="")