Commit b89bf1b1 authored by Valentina Fioretti's avatar Valentina Fioretti
Browse files

EXACRAD proton scattering update (only EXP3)

parent ca3e85c3
Loading
Loading
Loading
Loading
+0 −258
Original line number Diff line number Diff line
@@ -853,264 +853,6 @@ G4VPhysicalVolume* EXACRAD::ConstructGeometry(G4VPhysicalVolume* World_phys) {
                region_target->AddRootLogicalVolume(log_coating3);
                
            }
            if (coating1_type == 2){
                
                
                // --------- mother target
                // mother height
                G4double mother_target_t = spo_plate_t_edge + spo_coating1_t_mean + spo_coating2_t;
                G4Box* mother_target = new G4Box("mother_target",
                                                 plate_xside/2.,
                                                 plate_yside/2.,
                                                 mother_target_t/2.);
                
                G4LogicalVolume* log_mother_target = new G4LogicalVolume(mother_target, chamber_mat, "log_mother_target");
                G4VPhysicalVolume* phys_mother_target = new G4PVPlacement(target_rotation, G4ThreeVector(0.0,0.0, -mother_target_t/2.), log_mother_target, "phys_mother_target", log_chamber, false, spo_mother_copyno);
                
                log_mother_target->SetVisAttributes (G4VisAttributes::GetInvisible());
                
                // ----- plate volume
                G4Box* spo_plate = new G4Box("spo_plate",
                                             plate_xside/2.,
                                             plate_yside/2.,
                                             spo_plate_t/2.);
                
                G4LogicalVolume* log_spo_plate = new G4LogicalVolume(spo_plate, spo_plate_mat, "log_spo_plate");
                G4VPhysicalVolume* phys_spo_plate = new G4PVPlacement(0, G4ThreeVector(0.0,0.0, -(mother_target_t/2.) + spo_plate_t_edge - spo_plate_t/2.), log_spo_plate, "phys_spo_plate", log_mother_target, false, spo_plate_copyno);
                
                G4VisAttributes* visPlate = new G4VisAttributes(G4Colour::Grey());
                log_spo_plate->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_spo_plate);
                region_target->AddRootLogicalVolume(log_spo_plate);
                
                // ----- ribs
                // rib height
                G4double rib_t = spo_plate_t_edge - spo_plate_t;
                G4double rib_pitch = 2.148*mm;
                
                // -- external ribs - rib0
                G4double rib0_side = 0.805*mm;
                G4Box* rib0 = new G4Box("rib0",
                                        plate_xside/2.,
                                        rib0_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib0 = new G4LogicalVolume(rib0, spo_plate_mat, "log_rib0");
                // rib0 - left
                G4VPhysicalVolume* phys_rib0_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib0, "phys_rib0_left", log_mother_target, false, spo_plate_copyno);
                
                // rib0 - right
                G4VPhysicalVolume* phys_rib0_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - rib0_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib0, "phys_rib0_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib0->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib0);
                region_target->AddRootLogicalVolume(log_rib0);
                
                // -- internal ribs
                // rib1
                G4double rib1_side = 0.290*mm;
                G4Box* rib1 = new G4Box("rib1",
                                        plate_xside/2.,
                                        rib1_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib1 = new G4LogicalVolume(rib1, spo_plate_mat, "log_rib1");
                // rib1 - left
                G4VPhysicalVolume* phys_rib1_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib1, "phys_rib1_left", log_mother_target, false, spo_plate_copyno);
                
                // rib1 - right
                G4VPhysicalVolume* phys_rib1_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - rib0_side - rib_pitch - rib1_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib1, "phys_rib1_right", log_mother_target, false, spo_plate_copyno);
                
                
                log_rib1->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib1);
                region_target->AddRootLogicalVolume(log_rib1);
                
                // rib2
                G4double rib2_side = 0.277*mm;
                G4Box* rib2 = new G4Box("rib2",
                                        plate_xside/2.,
                                        rib2_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib2 = new G4LogicalVolume(rib2, spo_plate_mat, "log_rib2");
                // rib2 - left
                G4VPhysicalVolume* phys_rib2_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib2, "phys_rib2_left", log_mother_target, false, spo_plate_copyno);
                
                // rib2 - right
                G4VPhysicalVolume* phys_rib2_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - rib0_side - rib_pitch - rib1_side - rib_pitch - rib2_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib2, "phys_rib2_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib2->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib2);
                region_target->AddRootLogicalVolume(log_rib2);
                
                // rib3
                G4double rib3_side = 0.263*mm;
                G4Box* rib3 = new G4Box("rib3",
                                        plate_xside/2.,
                                        rib3_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib3 = new G4LogicalVolume(rib3, spo_plate_mat, "log_rib3");
                // rib3 - left
                G4VPhysicalVolume* phys_rib3_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib3, "phys_rib3_left", log_mother_target, false, spo_plate_copyno);
                
                // rib3 - right
                G4VPhysicalVolume* phys_rib3_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - rib0_side - rib_pitch - rib1_side - rib_pitch - rib2_side - rib_pitch - rib3_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib3, "phys_rib3_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib3->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib3);
                region_target->AddRootLogicalVolume(log_rib3);
                
                // rib4
                G4double rib4_side = 0.250*mm;
                G4Box* rib4 = new G4Box("rib4",
                                        plate_xside/2.,
                                        rib4_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib4 = new G4LogicalVolume(rib4, spo_plate_mat, "log_rib4");
                // rib4 - left
                G4VPhysicalVolume* phys_rib4_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib4, "phys_rib4_left", log_mother_target, false, spo_plate_copyno);
                
                // rib4 - right
                G4VPhysicalVolume* phys_rib4_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - rib0_side - rib_pitch - rib1_side - rib_pitch - rib2_side - rib_pitch - rib3_side - rib_pitch - rib4_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib4, "phys_rib4_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib4->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib4);
                region_target->AddRootLogicalVolume(log_rib4);
                
                // rib5
                G4double rib5_side = 0.236*mm;
                G4Box* rib5 = new G4Box("rib5",
                                        plate_xside/2.,
                                        rib5_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib5 = new G4LogicalVolume(rib5, spo_plate_mat, "log_rib5");
                // rib5 - left
                G4VPhysicalVolume* phys_rib5_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side + rib_pitch + rib5_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib5, "phys_rib5_left", log_mother_target, false, spo_plate_copyno);
                
                // rib5 - right
                G4VPhysicalVolume* phys_rib5_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - rib0_side - rib_pitch - rib1_side - rib_pitch - rib2_side - rib_pitch - rib3_side - rib_pitch - rib4_side - rib_pitch - rib5_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib5, "phys_rib5_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib5->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib5);
                region_target->AddRootLogicalVolume(log_rib5);
                
                // rib6
                G4double rib6_side = 0.223*mm;
                G4Box* rib6 = new G4Box("rib6",
                                        plate_xside/2.,
                                        rib6_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib6 = new G4LogicalVolume(rib6, spo_plate_mat, "log_rib6");
                // rib6 - left
                G4VPhysicalVolume* phys_rib6_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side + rib_pitch + rib5_side + rib_pitch + rib6_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib6, "phys_rib6_left", log_mother_target, false, spo_plate_copyno);
                
                // rib6 - right
                G4VPhysicalVolume* phys_rib6_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - rib0_side - rib_pitch - rib1_side - rib_pitch - rib2_side - rib_pitch - rib3_side - rib_pitch - rib4_side - rib_pitch - rib5_side - rib_pitch - rib6_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib6, "phys_rib6_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib6->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib6);
                region_target->AddRootLogicalVolume(log_rib6);
                
                // rib7
                G4double rib7_side = 0.210*mm;
                G4Box* rib7 = new G4Box("rib7",
                                        plate_xside/2.,
                                        rib7_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib7 = new G4LogicalVolume(rib7, spo_plate_mat, "log_rib7");
                // rib7 - left
                G4VPhysicalVolume* phys_rib7_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side + rib_pitch + rib5_side + rib_pitch + rib6_side + rib_pitch + rib7_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib7, "phys_rib7_left", log_mother_target, false, spo_plate_copyno);
                
                // rib7 - right
                G4VPhysicalVolume* phys_rib7_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - rib0_side - rib_pitch - rib1_side - rib_pitch - rib2_side - rib_pitch - rib3_side - rib_pitch - rib4_side - rib_pitch - rib5_side - rib_pitch - rib6_side - rib_pitch - rib7_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib7, "phys_rib7_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib7->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib7);
                region_target->AddRootLogicalVolume(log_rib7);
                
                
                // rib8
                G4double rib8_side = 0.197*mm;
                G4Box* rib8 = new G4Box("rib8",
                                        plate_xside/2.,
                                        rib8_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib8 = new G4LogicalVolume(rib8, spo_plate_mat, "log_rib8");
                // rib8 - left
                G4VPhysicalVolume* phys_rib8_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side + rib_pitch + rib5_side + rib_pitch + rib6_side + rib_pitch + rib7_side + rib_pitch + rib8_side/2., -(mother_target_t/2.)  + rib_t/2.), log_rib8, "phys_rib8_left", log_mother_target, false, spo_plate_copyno);
                
                // rib8 - right
                G4VPhysicalVolume* phys_rib8_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - (rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side + rib_pitch + rib5_side + rib_pitch + rib6_side + rib_pitch + rib7_side + rib_pitch + rib8_side/2.), -(mother_target_t/2.) + rib_t/2.), log_rib8, "phys_rib8_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib8->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib8);
                region_target->AddRootLogicalVolume(log_rib8);
                
                // rib9
                G4double rib9_side = 0.184*mm;
                G4Box* rib9 = new G4Box("rib9",
                                        plate_xside/2.,
                                        rib9_side/2.,
                                        rib_t/2.);
                
                G4LogicalVolume* log_rib9 = new G4LogicalVolume(rib9, spo_plate_mat, "log_rib9");
                // rib9 - left
                G4VPhysicalVolume* phys_rib9_left = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side + rib_pitch + rib5_side + rib_pitch + rib6_side + rib_pitch + rib7_side + rib_pitch + rib8_side + rib_pitch + rib9_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib9, "phys_rib9_left", log_mother_target, false, spo_plate_copyno);
                
                // rib9 - right
                G4VPhysicalVolume* phys_rib9_right = new G4PVPlacement(0, G4ThreeVector(0.0,+(plate_yside/2.) - (rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side + rib_pitch + rib5_side + rib_pitch + rib6_side + rib_pitch + rib7_side + rib_pitch + rib8_side + rib_pitch + rib9_side/2.), -(mother_target_t/2.) + rib_t/2.), log_rib9, "phys_rib9_right", log_mother_target, false, spo_plate_copyno);
                
                log_rib9->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib9);
                region_target->AddRootLogicalVolume(log_rib9);
                
                // rib10
                G4double rib10_side = 0.170*mm;
                G4Box* rib10 = new G4Box("rib10",
                                         plate_xside/2.,
                                         rib10_side/2.,
                                         rib_t/2.);
                
                G4LogicalVolume* log_rib10 = new G4LogicalVolume(rib10, spo_plate_mat, "log_rib10");
                // rib10 - central
                G4VPhysicalVolume* phys_rib10 = new G4PVPlacement(0, G4ThreeVector(0.0,-(plate_yside/2.) + rib0_side + rib_pitch + rib1_side + rib_pitch + rib2_side + rib_pitch + rib3_side + rib_pitch + rib4_side + rib_pitch + rib5_side + rib_pitch + rib6_side + rib_pitch + rib7_side + rib_pitch + rib8_side + rib_pitch + rib9_side + rib_pitch + rib10_side/2., -(mother_target_t/2.) + rib_t/2.), log_rib10, "phys_rib10", log_mother_target, false, spo_plate_copyno);
                
                log_rib10->SetVisAttributes(visPlate);
                gm.AddXYZDetector( log_rib10);
                region_target->AddRootLogicalVolume(log_rib10);

                // ----- coating 2

                G4Trap* coating1 = new G4Trap("coating1",
                                              plate_yside,
                                              plate_xside,
                                              spo_coating1_t_max,
                                              spo_coating1_t_min);
                
                G4RotationMatrix* coating_rotation = new G4RotationMatrix;
                coating_rotation->rotateY(90.*degree);
                coating_rotation->rotateX(90.*degree);
                
                G4double coating1_shift = ((spo_coating1_t_min*spo_coating1_t_min) + (spo_coating1_t_max*spo_coating1_t_max) + (spo_coating1_t_min*spo_coating1_t_max))/(3.*(spo_coating1_t_min + spo_coating1_t_max));
                
                G4LogicalVolume* log_coating1 = new G4LogicalVolume(coating1, spo_coating1_mat, "log_coating1");
                G4VPhysicalVolume* phys_coating1 = new G4PVPlacement(coating_rotation, G4ThreeVector(0.0,0.0, -(mother_target_t/2.) + spo_plate_t_edge + coating1_shift), log_coating1, "phys_coating1", log_mother_target, false, spo_coating1_copyno);
                
                //-(mother_target_t/2.) + spo_plate_t_edge + spo_coating1_t_min
                
                G4VisAttributes* visCoating1 = new G4VisAttributes(G4Colour::Yellow());
                log_coating1->SetVisAttributes(visCoating1);
                gm.AddXYZDetector( log_coating1);
                region_target->AddRootLogicalVolume(log_coating1);
            }

            
        }