|
|
@ -23,8 +23,6 @@
|
|
|
|
GeneDetectorConstruction::GeneDetectorConstruction() {
|
|
|
|
GeneDetectorConstruction::GeneDetectorConstruction() {
|
|
|
|
Zoffset = 0;
|
|
|
|
Zoffset = 0;
|
|
|
|
Zactiveshift = 0;
|
|
|
|
Zactiveshift = 0;
|
|
|
|
PE_Bfraction = 0.054;
|
|
|
|
|
|
|
|
SReaction = "C13an";
|
|
|
|
|
|
|
|
pMessenger = new GeneDetectorConstructionMessenger(this);
|
|
|
|
pMessenger = new GeneDetectorConstructionMessenger(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -43,18 +41,8 @@ G4VPhysicalVolume* GeneDetectorConstruction::Construct() {
|
|
|
|
G4Element* ele_C = manager->FindOrBuildElement("C");
|
|
|
|
G4Element* ele_C = manager->FindOrBuildElement("C");
|
|
|
|
// Boron 硼
|
|
|
|
// Boron 硼
|
|
|
|
G4Material* mat_B = manager->FindOrBuildMaterial("G4_B");
|
|
|
|
G4Material* mat_B = manager->FindOrBuildMaterial("G4_B");
|
|
|
|
// Copper 铜
|
|
|
|
|
|
|
|
G4Material* mat_Cu = manager->FindOrBuildMaterial("G4_Cu");
|
|
|
|
|
|
|
|
// Gold 金
|
|
|
|
|
|
|
|
G4Material* mat_Au = manager->FindOrBuildMaterial("G4_Au");
|
|
|
|
|
|
|
|
// Aluminum 铝
|
|
|
|
|
|
|
|
G4Material* mat_Al = manager->FindOrBuildMaterial("G4_Al");
|
|
|
|
|
|
|
|
// Tantalum 钽
|
|
|
|
|
|
|
|
G4Material* mat_Ta = manager->FindOrBuildMaterial("G4_Ta");
|
|
|
|
|
|
|
|
// Stainless stell 不锈钢
|
|
|
|
// Stainless stell 不锈钢
|
|
|
|
G4Material* mat_stell = manager->FindOrBuildMaterial("G4_STAINLESS-STEEL");
|
|
|
|
G4Material* mat_stell = manager->FindOrBuildMaterial("G4_STAINLESS-STEEL");
|
|
|
|
// Water 水
|
|
|
|
|
|
|
|
G4Material* mat_Water = manager->FindOrBuildMaterial("G4_WATER");
|
|
|
|
|
|
|
|
// Air 空气
|
|
|
|
// Air 空气
|
|
|
|
G4Material* mat_Air = manager->FindOrBuildMaterial("G4_AIR");
|
|
|
|
G4Material* mat_Air = manager->FindOrBuildMaterial("G4_AIR");
|
|
|
|
// Polyethylene 聚乙烯
|
|
|
|
// Polyethylene 聚乙烯
|
|
|
@ -62,15 +50,10 @@ G4VPhysicalVolume* GeneDetectorConstruction::Construct() {
|
|
|
|
|
|
|
|
|
|
|
|
// shielding 屏蔽层 PE(B) 含硼聚乙烯
|
|
|
|
// shielding 屏蔽层 PE(B) 含硼聚乙烯
|
|
|
|
density = 0.938 * g / cm3;
|
|
|
|
density = 0.938 * g / cm3;
|
|
|
|
G4Material* shield_PE = new G4Material("PE_B", density, ncomponents = 2);
|
|
|
|
G4Material* shield_PE = new G4Material("BPE", density, ncomponents = 2);
|
|
|
|
shield_PE->AddMaterial(mat_PE, fractionmass = 93 * perCent);
|
|
|
|
shield_PE->AddMaterial(mat_PE, fractionmass = 93 * perCent);
|
|
|
|
shield_PE->AddMaterial(mat_B, fractionmass = 7 * perCent);
|
|
|
|
shield_PE->AddMaterial(mat_B, fractionmass = 7 * perCent);
|
|
|
|
|
|
|
|
|
|
|
|
// moderator 慢化剂 PE(B) 含硼聚乙烯
|
|
|
|
|
|
|
|
G4Material* moderator_PE = new G4Material("PE_B_impurity", density, ncomponents = 2);
|
|
|
|
|
|
|
|
moderator_PE->AddMaterial(mat_PE, fractionmass = (100.0 - PE_Bfraction) * perCent);
|
|
|
|
|
|
|
|
moderator_PE->AddMaterial(mat_B, fractionmass = PE_Bfraction * perCent);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Vacuum 真空
|
|
|
|
// Vacuum 真空
|
|
|
|
temperature = 77 * kelvin;
|
|
|
|
temperature = 77 * kelvin;
|
|
|
|
pressure = 1.0e-5 * pascal;
|
|
|
|
pressure = 1.0e-5 * pascal;
|
|
|
@ -90,14 +73,15 @@ G4VPhysicalVolume* GeneDetectorConstruction::Construct() {
|
|
|
|
G4Material* work_gas = new G4Material("Workgas", density, ncomponents = 1, kStateGas, temperature, pressure);
|
|
|
|
G4Material* work_gas = new G4Material("Workgas", density, ncomponents = 1, kStateGas, temperature, pressure);
|
|
|
|
work_gas->AddElement(ele_He, 100. * perCent);
|
|
|
|
work_gas->AddElement(ele_He, 100. * perCent);
|
|
|
|
|
|
|
|
|
|
|
|
// C13 Target C13靶
|
|
|
|
// Ne22 Target Ne22靶
|
|
|
|
G4Isotope* iso_C12 = new G4Isotope(name = "C12", z = 6.0, n = 12.0, a = 12.0 * g / mole);
|
|
|
|
temperature = 300 * kelvin;
|
|
|
|
G4Isotope* iso_C13 = new G4Isotope(name = "C13", z = 6.0, n = 13.0, a = 13.003 * g / mole);
|
|
|
|
pressure = 100 * pascal;
|
|
|
|
G4Element* ele_C13 = new G4Element(name = "Carbon", symbol = "C13", ncomponents = 2);
|
|
|
|
density = (0.981146 * kg / m3) * (pressure / atmosphere) * (273.15 * kelvin / temperature);
|
|
|
|
ele_C13->AddIsotope(iso_C12, 1.0 * perCent);
|
|
|
|
G4Isotope* iso_Ne22 = new G4Isotope(name = "Ne22", z = 10, n = 12, a = 21.99138 * g / mole);
|
|
|
|
ele_C13->AddIsotope(iso_C13, 99.0 * perCent);
|
|
|
|
G4Element* ele_Ne22 = new G4Element(name = "Neon-22", symbol = "Ne22", ncomponents = 1);
|
|
|
|
G4Material* target_C = new G4Material("targetC", density = 2.3 * g / cm3, ncomponents = 1);
|
|
|
|
ele_Ne22->AddIsotope(iso_Ne22, 100 * perCent);
|
|
|
|
target_C->AddElement(ele_C13, 100 * perCent);
|
|
|
|
G4Material* target_Ne = new G4Material("targetNe", density, ncomponents = 1, kStateGas, temperature, pressure);
|
|
|
|
|
|
|
|
target_Ne->AddElement(ele_Ne22, 100 * perCent);
|
|
|
|
|
|
|
|
|
|
|
|
// ********** Sciintillator **********
|
|
|
|
// ********** Sciintillator **********
|
|
|
|
// Plastic scintillator 塑料闪烁体 EJ-200
|
|
|
|
// Plastic scintillator 塑料闪烁体 EJ-200
|
|
|
@ -160,14 +144,13 @@ G4VPhysicalVolume* GeneDetectorConstruction::Construct() {
|
|
|
|
// shielding PE
|
|
|
|
// shielding PE
|
|
|
|
G4double BPE_xyz = 60.0 * cm;
|
|
|
|
G4double BPE_xyz = 60.0 * cm;
|
|
|
|
G4Box* BPE_box = new G4Box("BPE_box", 0.5 * BPE_xyz, 0.5 * BPE_xyz, 0.5 * BPE_xyz);
|
|
|
|
G4Box* BPE_box = new G4Box("BPE_box", 0.5 * BPE_xyz, 0.5 * BPE_xyz, 0.5 * BPE_xyz);
|
|
|
|
// moderator PE
|
|
|
|
// Plastic scintillator
|
|
|
|
G4double PE_xyz = 50.0 * cm;
|
|
|
|
G4double PS_xyz = 50.0 * cm;
|
|
|
|
G4Box* PE_box = new G4Box("PE_box", 0.5 * PE_xyz, 0.5 * PE_xyz, 0.5 * PE_xyz);
|
|
|
|
G4Box* PS_box = new G4Box("PS_box", 0.5 * PS_xyz, 0.5 * PS_xyz, 0.5 * PS_xyz);
|
|
|
|
|
|
|
|
|
|
|
|
// Beam hole
|
|
|
|
// Beam hole
|
|
|
|
G4double rMin0 = 0.;
|
|
|
|
G4double rMax = 5.0 * cm;
|
|
|
|
G4double rMax0 = 5.0 * cm;
|
|
|
|
G4Tubs* PS_hole = new G4Tubs("PS_hole", 0, rMax, 0.5 * BPE_xyz, 0, 360. * deg);
|
|
|
|
G4Tubs* PE_hole = new G4Tubs("PE_hole", rMin0, rMax0, 0.5 * BPE_xyz, 0, 360. * deg);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// He3 Tube holes
|
|
|
|
// He3 Tube holes
|
|
|
|
G4double active_len = 30 * cm; // length
|
|
|
|
G4double active_len = 30 * cm; // length
|
|
|
@ -207,48 +190,48 @@ G4VPhysicalVolume* GeneDetectorConstruction::Construct() {
|
|
|
|
He3tub_log->SetVisAttributes(G4VisAttributes::GetInvisible);
|
|
|
|
He3tub_log->SetVisAttributes(G4VisAttributes::GetInvisible);
|
|
|
|
// He3active_log -> SetVisAttributes(G4VisAttributes::GetInvisible);
|
|
|
|
// He3active_log -> SetVisAttributes(G4VisAttributes::GetInvisible);
|
|
|
|
|
|
|
|
|
|
|
|
G4SubtractionSolid* solid_PE = new G4SubtractionSolid("solid_PE", PE_box, PE_hole);
|
|
|
|
G4SubtractionSolid* solid_PS = new G4SubtractionSolid("solid_PS", PS_box, PS_hole);
|
|
|
|
G4SubtractionSolid* sub_BPE = new G4SubtractionSolid("sub_BPE", BPE_box, PE_box);
|
|
|
|
G4SubtractionSolid* sub_BPE = new G4SubtractionSolid("sub_BPE", BPE_box, PS_box);
|
|
|
|
G4SubtractionSolid* solid_BPE = new G4SubtractionSolid("solid_BPE", sub_BPE, PE_hole);
|
|
|
|
G4SubtractionSolid* solid_BPE = new G4SubtractionSolid("solid_BPE", sub_BPE, PS_hole);
|
|
|
|
|
|
|
|
|
|
|
|
char tmp[50];
|
|
|
|
char tmp[50];
|
|
|
|
G4double posx, posy;
|
|
|
|
G4double posx, posy;
|
|
|
|
for (G4int i = 0; i < 12; i++) {
|
|
|
|
for (G4int i = 0; i < 12; i++) {
|
|
|
|
posx = 8.5 * cm * std::cos(i * 30.0 * deg);
|
|
|
|
posx = 8.5 * cm * std::cos(i * 30.0 * deg);
|
|
|
|
posy = 8.5 * cm * std::sin(i * 30.0 * deg);
|
|
|
|
posy = 8.5 * cm * std::sin(i * 30.0 * deg);
|
|
|
|
sprintf(tmp, "solid_PE%d", i);
|
|
|
|
sprintf(tmp, "solid_PS%d", i);
|
|
|
|
solid_PE = new G4SubtractionSolid(tmp, solid_PE, He3tube_Hole,
|
|
|
|
solid_PS = new G4SubtractionSolid(tmp, solid_PS, He3tube_Hole,
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(posx, posy, tube_hole_z)));
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(posx, posy, tube_hole_z)));
|
|
|
|
sprintf(tmp, "solid_BPE%d", i);
|
|
|
|
sprintf(tmp, "solid_BPE%d", i);
|
|
|
|
solid_BPE = new G4SubtractionSolid(tmp, solid_BPE, He3tube_Hole,
|
|
|
|
solid_BPE = new G4SubtractionSolid(tmp, solid_BPE, He3tube_Hole,
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(posx, posy, tube_hole_z)));
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(posx, posy, tube_hole_z)));
|
|
|
|
posx = 13.0 * cm * std::cos(i * 30.0 * deg + 15.0 * deg);
|
|
|
|
posx = 13.0 * cm * std::cos(i * 30.0 * deg + 15.0 * deg);
|
|
|
|
posy = 13.0 * cm * std::sin(i * 30.0 * deg + 15.0 * deg);
|
|
|
|
posy = 13.0 * cm * std::sin(i * 30.0 * deg + 15.0 * deg);
|
|
|
|
sprintf(tmp, "solid_PE%d", i + 12);
|
|
|
|
sprintf(tmp, "solid_PS%d", i + 12);
|
|
|
|
solid_PE = new G4SubtractionSolid(tmp, solid_PE, He3tube_Hole,
|
|
|
|
solid_PS = new G4SubtractionSolid(tmp, solid_PS, He3tube_Hole,
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(posx, posy, tube_hole_z)));
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(posx, posy, tube_hole_z)));
|
|
|
|
sprintf(tmp, "solid_BPE%d", i + 12);
|
|
|
|
sprintf(tmp, "solid_BPE%d", i + 12);
|
|
|
|
solid_BPE = new G4SubtractionSolid(tmp, solid_BPE, He3tube_Hole,
|
|
|
|
solid_BPE = new G4SubtractionSolid(tmp, solid_BPE, He3tube_Hole,
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(posx, posy, tube_hole_z)));
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(posx, posy, tube_hole_z)));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// z offset for position measurement
|
|
|
|
// z offset for position measurement
|
|
|
|
G4LogicalVolume* PE_log = new G4LogicalVolume(solid_PE, moderator_PE, "logic_PE");
|
|
|
|
G4LogicalVolume* PS_log = new G4LogicalVolume(solid_PS, ej_200, "logic_PS");
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Zoffset), "PE_phys", PE_log, physicalWorld, false, 1, true);
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Zoffset), "PS_phys", PS_log, physicalWorld, false, 1, true);
|
|
|
|
|
|
|
|
|
|
|
|
G4LogicalVolume* BPE_log = new G4LogicalVolume(solid_BPE, shield_PE, "logic_BPE");
|
|
|
|
G4LogicalVolume* BPE_log = new G4LogicalVolume(solid_BPE, shield_PE, "logic_BPE");
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Zoffset), "BPE_phys", BPE_log, physicalWorld, false, 2, true);
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Zoffset), "BPE_phys", BPE_log, physicalWorld, false, 2, true);
|
|
|
|
|
|
|
|
|
|
|
|
G4VisAttributes* PE_vis = new G4VisAttributes(G4Colour(0.0, 0.8, 0.8, 0.5));
|
|
|
|
G4VisAttributes* PS_vis = new G4VisAttributes(G4Colour(0.0, 0.8, 0.8, 0.5));
|
|
|
|
PE_vis->SetForceSolid(true);
|
|
|
|
PS_vis->SetForceSolid(true);
|
|
|
|
// PE_vis->SetForceWireframe(true);
|
|
|
|
// PS_vis->SetForceWireframe(true);
|
|
|
|
PE_log->SetVisAttributes(PE_vis);
|
|
|
|
PS_log->SetVisAttributes(PS_vis);
|
|
|
|
|
|
|
|
|
|
|
|
// G4VisAttributes* BPE_vis= new G4VisAttributes(G4Colour(1.0,1.0,1.0,0.1));
|
|
|
|
// G4VisAttributes* BPE_vis= new G4VisAttributes(G4Colour(1.0,1.0,1.0,0.1));
|
|
|
|
// BPE_vis->SetForceSolid(true);
|
|
|
|
// BPE_vis->SetForceSolid(true);
|
|
|
|
// BPE_vis->SetForceWireframe(true);
|
|
|
|
// BPE_vis->SetForceWireframe(true);
|
|
|
|
// BPE_log->SetVisAttributes(BPE_vis);
|
|
|
|
// BPE_log->SetVisAttributes(BPE_vis);
|
|
|
|
|
|
|
|
|
|
|
|
// PE_log -> SetVisAttributes(G4VisAttributes::GetInvisible);
|
|
|
|
// PS_log -> SetVisAttributes(G4VisAttributes::GetInvisible);
|
|
|
|
|
|
|
|
|
|
|
|
G4VisAttributes* BPE_vis = new G4VisAttributes(G4Colour(0.1, 0.3, 1, 0.8));
|
|
|
|
G4VisAttributes* BPE_vis = new G4VisAttributes(G4Colour(0.1, 0.3, 1, 0.8));
|
|
|
|
BPE_log->SetVisAttributes(BPE_vis);
|
|
|
|
BPE_log->SetVisAttributes(BPE_vis);
|
|
|
@ -279,329 +262,26 @@ G4VPhysicalVolume* GeneDetectorConstruction::Construct() {
|
|
|
|
physicalWorld, false, 300 + i + 12, true);
|
|
|
|
physicalWorld, false, 300 + i + 12, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
G4VisAttributes* C13_vis = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0, 1.0));
|
|
|
|
|
|
|
|
C13_vis->SetForceSolid(true);
|
|
|
|
|
|
|
|
G4VisAttributes* CuSub_vis = new G4VisAttributes(G4Colour(0.1, 0.5, 0.7, 1.0));
|
|
|
|
|
|
|
|
CuSub_vis->SetForceSolid(true);
|
|
|
|
|
|
|
|
G4VisAttributes* tube_vis = new G4VisAttributes(G4Colour(0.8, 0.8, 0.8, 1.0));
|
|
|
|
G4VisAttributes* tube_vis = new G4VisAttributes(G4Colour(0.8, 0.8, 0.8, 1.0));
|
|
|
|
tube_vis->SetForceSolid(true);
|
|
|
|
tube_vis->SetForceSolid(true);
|
|
|
|
G4VisAttributes* water_vis = new G4VisAttributes(G4Colour(0.0, 0.0, 0.1, 1.0));
|
|
|
|
G4VisAttributes* Ne22_vis = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0, 1.0));
|
|
|
|
water_vis->SetForceSolid(true);
|
|
|
|
Ne22_vis->SetForceSolid(true);
|
|
|
|
|
|
|
|
|
|
|
|
if (SReaction == "C13an") {
|
|
|
|
// Target Ne22
|
|
|
|
G4double C13thickness = 2.0 * mm;
|
|
|
|
G4double rBeam = rMax - 5 * mm;
|
|
|
|
G4Tubs* C13tub = new G4Tubs("C13tub", 0, 20. * mm, 0.5 * C13thickness, 0, 360. * deg);
|
|
|
|
G4double beam_len = 60.0 * cm;
|
|
|
|
|
|
|
|
G4double target_len = beam_len - 1 * cm;
|
|
|
|
|
|
|
|
G4Tubs* Ne22tub = new G4Tubs("Ne22tub", 0, rBeam, 0.5 * target_len, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* Ne22log = new G4LogicalVolume(Ne22tub, target_Ne, "Ne22log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(), "Ne22phys", Ne22log, physicalWorld, false, 3, true);
|
|
|
|
|
|
|
|
Ne22log->SetVisAttributes(Ne22_vis);
|
|
|
|
|
|
|
|
|
|
|
|
G4LogicalVolume* C13log = new G4LogicalVolume(C13tub, target_C, "C13log");
|
|
|
|
// Beam Line Tube Stainlesss 不锈钢管
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(), "C13phys", C13log, physicalWorld, false, 3, true);
|
|
|
|
G4Tubs* beamtub = new G4Tubs("Beam_tub", 0, rMax, 0.5 * beam_len, 0. * deg, 360. * deg);
|
|
|
|
C13log->SetVisAttributes(C13_vis);
|
|
|
|
G4SubtractionSolid* beamtub_sub = new G4SubtractionSolid("Beam_sub", beamtub, Ne22tub);
|
|
|
|
// C13log -> SetVisAttributes(G4VisAttributes::GetInvisible);
|
|
|
|
G4LogicalVolume* beam_log = new G4LogicalVolume(beamtub_sub, mat_stell, "beam_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, 0), "beam_phys", beam_log, physicalWorld, false, 10, true);
|
|
|
|
// Cu_Substrate
|
|
|
|
beam_log->SetVisAttributes(tube_vis);
|
|
|
|
G4double Cu0thickness = 1.5 * mm;
|
|
|
|
|
|
|
|
G4double Cu0z = 0.5 * (C13thickness + Cu0thickness);
|
|
|
|
|
|
|
|
G4Tubs* CuSubstrate_tub0 =
|
|
|
|
|
|
|
|
new G4Tubs("CuSubstrate_tub0", 18. * mm, 25. * mm, 0.5 * Cu0thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuSubstrate_log0 = new G4LogicalVolume(CuSubstrate_tub0, mat_Cu, "CuSubstrate_log0");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Cu0z), "CuSubstrate_phys0", CuSubstrate_log0, physicalWorld, false, 4,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double Cu1thickness = C13thickness;
|
|
|
|
|
|
|
|
G4double Cu1z = 0.0 * mm;
|
|
|
|
|
|
|
|
G4Tubs* CuSubstrate_tub1 =
|
|
|
|
|
|
|
|
new G4Tubs("CuSubstrate_tub1", 20. * mm, 24.25 * mm, 0.5 * Cu1thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuSubstrate_log1 = new G4LogicalVolume(CuSubstrate_tub1, mat_Cu, "CuSubstrate_log1");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Cu1z), "CuSubstrate_phys1", CuSubstrate_log1, physicalWorld, false, 5,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double Cu2thickness = 3.5 * mm;
|
|
|
|
|
|
|
|
G4double Cu2z = -0.5 * (C13thickness + Cu2thickness);
|
|
|
|
|
|
|
|
G4Tubs* CuSubstrate_tub2 = new G4Tubs("CuSubstrate_tub2", 0, 24.25 * mm, 0.5 * Cu2thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuSubstrate_log2 = new G4LogicalVolume(CuSubstrate_tub2, mat_Cu, "CuSubstrate_log2");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Cu2z), "CuSubstrate_phys2", CuSubstrate_log2, physicalWorld, false, 6,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double Cu3thickness = 2.0 * mm;
|
|
|
|
|
|
|
|
G4double Cu3z = Cu2z - 0.5 * Cu2thickness - 0.5 * Cu3thickness;
|
|
|
|
|
|
|
|
G4Tubs* CuSubstrate_tub3 = new G4Tubs("CuSubstrate_tub3", 0, 29. * mm, 0.5 * Cu3thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuSubstrate_log3 = new G4LogicalVolume(CuSubstrate_tub3, mat_Cu, "CuSubstrate_log3");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Cu3z), "CuSubstrate_phys3", CuSubstrate_log3, physicalWorld, false, 7,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CuSubstrate_log0->SetVisAttributes(CuSub_vis);
|
|
|
|
|
|
|
|
CuSubstrate_log1->SetVisAttributes(CuSub_vis);
|
|
|
|
|
|
|
|
CuSubstrate_log2->SetVisAttributes(CuSub_vis);
|
|
|
|
|
|
|
|
CuSubstrate_log3->SetVisAttributes(CuSub_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Target flange
|
|
|
|
|
|
|
|
G4double flange0_thickness = 9.0 * mm;
|
|
|
|
|
|
|
|
G4double flange0z = Cu2z - 0.5 * Cu2thickness + 0.5 * flange0_thickness;
|
|
|
|
|
|
|
|
G4Tubs* flange_tub0 = new G4Tubs("flange_tub0", 25. * mm, 42.33 * mm, 0.5 * flange0_thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* flange_log0 = new G4LogicalVolume(flange_tub0, mat_stell, "flange_log0");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, flange0z), "flange_phys0", flange_log0, physicalWorld, false, 8, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double flange1_thickness = 7.0 * mm;
|
|
|
|
|
|
|
|
G4double flange1z = flange0z - 0.5 * (flange0_thickness + flange1_thickness);
|
|
|
|
|
|
|
|
G4Tubs* flange_tub1 = new G4Tubs("flange_tub1", 29. * mm, 44.45 * mm, 0.5 * flange1_thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* flange_log1 = new G4LogicalVolume(flange_tub1, mat_stell, "flange_log1");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, flange1z), "flange_phys1", flange_log1, physicalWorld, false, 9, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// BeamLine_stainlesss
|
|
|
|
|
|
|
|
G4double BeampipeLength = 60.0 * cm;
|
|
|
|
|
|
|
|
G4double Beampipez = flange0z - 0.5 * flange0_thickness + 0.5 * BeampipeLength;
|
|
|
|
|
|
|
|
G4Tubs* Beampipe_tub =
|
|
|
|
|
|
|
|
new G4Tubs("Beampipe_tub", 42.33 * mm, 44.45 * mm, 0.5 * BeampipeLength, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* Beampipe_log = new G4LogicalVolume(Beampipe_tub, mat_stell, "Beampipe_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Beampipez), "Beampipe_phys", Beampipe_log, physicalWorld, false, 10,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
flange_log0->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
flange_log1->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
Beampipe_log->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Cold trap
|
|
|
|
|
|
|
|
G4double CuTrapLength = 50.0 * cm;
|
|
|
|
|
|
|
|
G4double CuTrapz = 0.5 * CuTrapLength + 12.0 * mm + 60.0 * mm;
|
|
|
|
|
|
|
|
G4Tubs* CuTrap_tub = new G4Tubs("CuTrap_tub", 28.0 * mm, 30.0 * mm, 0.5 * CuTrapLength, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuTrap_log = new G4LogicalVolume(CuTrap_tub, mat_Cu, "CuTrap_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, CuTrapz), "CuTrap_phys", CuTrap_log, physicalWorld, false, 11, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CuTrap_log->SetVisAttributes(CuSub_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Suppressor
|
|
|
|
|
|
|
|
G4double CuSupLength = 1.0 * mm;
|
|
|
|
|
|
|
|
G4double CuSupz = 0.5 * CuSupLength + 8.0 * mm + 60.0 * mm;
|
|
|
|
|
|
|
|
G4Tubs* CuSup_tub = new G4Tubs("CuSup_tub", 15.0 * mm, 30.0 * mm, 0.5 * CuSupLength, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuSup_log = new G4LogicalVolume(CuSup_tub, mat_Cu, "CuSup_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, CuSupz), "CuSup_phys", CuSup_log, physicalWorld, false, 12, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Collimator
|
|
|
|
|
|
|
|
G4double AuCollLength = 3.0 * um;
|
|
|
|
|
|
|
|
G4double AuCollz = -0.5 * AuCollLength + 12.0 * mm + 60.0 * mm;
|
|
|
|
|
|
|
|
G4Tubs* AuColl_tub = new G4Tubs("AuColl_tub", 5.0 * mm, 28.0 * mm, 0.5 * AuCollLength, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* AuColl_log = new G4LogicalVolume(AuColl_tub, mat_Au, "AuColl_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, AuCollz), "AuColl_phys", AuColl_log, physicalWorld, false, 13, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double CuColl0Length = 2.0 * mm;
|
|
|
|
|
|
|
|
G4double CuColl0z = 0.5 * CuColl0Length + 12.0 * mm + 60.0 * mm;
|
|
|
|
|
|
|
|
G4Tubs* CuColl_tub0 = new G4Tubs("CuColl_tub0", 5.0 * mm, 28.0 * mm, 0.5 * CuColl0Length, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuColl_log0 = new G4LogicalVolume(CuColl_tub0, mat_Cu, "CuColl_log0");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, CuColl0z), "CuColl_phys0", CuColl_log0, physicalWorld, false, 14,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double CuColl1Length = 3.0 * mm;
|
|
|
|
|
|
|
|
G4double CuColl1z = CuColl0z + 0.5 * CuColl0Length + 0.5 * CuColl1Length;
|
|
|
|
|
|
|
|
G4Tubs* CuColl_tub1 = new G4Tubs("CuColl_tub1", 25.0 * mm, 28.0 * mm, 0.5 * CuColl1Length, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuColl_log1 = new G4LogicalVolume(CuColl_tub1, mat_Cu, "CuColl_log1");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, CuColl1z), "CuColl_phys1", CuColl_log1, physicalWorld, false, 15,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double VacuumLength = 70.0 * cm;
|
|
|
|
|
|
|
|
G4double Vacuumz = 0.5 * VacuumLength + Cu2z - 0.5 * Cu2thickness;
|
|
|
|
|
|
|
|
G4Tubs* Vacuum_tub = new G4Tubs("Vacuum_tub", 0, 42.33 * mm, 0.5 * VacuumLength, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4double VacuumTflangez = -0.5 * VacuumLength + 0.5 * flange0_thickness;
|
|
|
|
|
|
|
|
G4SubtractionSolid* Vacuum_sub =
|
|
|
|
|
|
|
|
new G4SubtractionSolid("VacuumTflange_sub", Vacuum_tub, flange_tub0,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumTflangez))); // Target flange0
|
|
|
|
|
|
|
|
G4double VacuumCu2z = -0.5 * VacuumLength + 0.5 * Cu2thickness;
|
|
|
|
|
|
|
|
Vacuum_sub = new G4SubtractionSolid("Vacuum_sub2", Vacuum_sub, CuSubstrate_tub2,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumCu2z))); // Cu2
|
|
|
|
|
|
|
|
G4double VacuumCu1z = VacuumCu2z + 0.5 * Cu2thickness + 0.5 * Cu1thickness;
|
|
|
|
|
|
|
|
Vacuum_sub = new G4SubtractionSolid("Vacuum_sub1", Vacuum_sub, CuSubstrate_tub1,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumCu1z))); // Cu1
|
|
|
|
|
|
|
|
G4double VacuumCu0z = VacuumCu1z + 0.5 * Cu1thickness + 0.5 * Cu0thickness;
|
|
|
|
|
|
|
|
Vacuum_sub = new G4SubtractionSolid("Vacuum_sub0", Vacuum_sub, CuSubstrate_tub0,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumCu0z))); // Cu0
|
|
|
|
|
|
|
|
G4double VacuumC13z = VacuumCu1z;
|
|
|
|
|
|
|
|
Vacuum_sub = new G4SubtractionSolid("VacuumC13_sub", Vacuum_sub, C13tub,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumC13z))); // C13 target
|
|
|
|
|
|
|
|
G4double VacuumCuTrapz = VacuumC13z + 12.0 * mm + 0.5 * CuTrapLength + 60.0 * mm;
|
|
|
|
|
|
|
|
Vacuum_sub = new G4SubtractionSolid("VacuumCuTrap_sub", Vacuum_sub, CuTrap_tub,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumCuTrapz))); // Cu Trap
|
|
|
|
|
|
|
|
G4double VacuumCuSupz = VacuumC13z + 8.0 * mm + 0.5 * CuSupLength + 60.0 * mm;
|
|
|
|
|
|
|
|
Vacuum_sub = new G4SubtractionSolid("VacuumCuSup_sub", Vacuum_sub, CuSup_tub,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumCuSupz))); // Cu Suppressor
|
|
|
|
|
|
|
|
G4double VacuumAuCollz = VacuumC13z + 12.0 * mm - 0.5 * AuCollLength + 60.0 * mm;
|
|
|
|
|
|
|
|
Vacuum_sub = new G4SubtractionSolid("VacuumAuColl_sub", Vacuum_sub, AuColl_tub,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumAuCollz))); // Au Collimator
|
|
|
|
|
|
|
|
G4double VacuumCuColl0z = VacuumC13z + 12.0 * mm + 0.5 * CuColl0Length + 60.0 * mm;
|
|
|
|
|
|
|
|
Vacuum_sub =
|
|
|
|
|
|
|
|
new G4SubtractionSolid("VacuumCuColl_sub0", Vacuum_sub, CuColl_tub0,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumCuColl0z))); // Cu Collimator0
|
|
|
|
|
|
|
|
G4double VacuumCuColl1z = VacuumCuColl0z + 0.5 * CuColl0Length + 0.5 * CuColl1Length;
|
|
|
|
|
|
|
|
Vacuum_sub =
|
|
|
|
|
|
|
|
new G4SubtractionSolid("VacuumCuColl_sub1", Vacuum_sub, CuColl_tub1,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumCuColl1z))); // Cu Collimator1
|
|
|
|
|
|
|
|
G4LogicalVolume* Vacuum_log = new G4LogicalVolume(Vacuum_sub, Vacuum, "Vacuum_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Vacuumz), "Vacuum_phys", Vacuum_log, physicalWorld, false, 16, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Water_cold
|
|
|
|
|
|
|
|
G4double WaterBack_thickness = 1.0 * mm;
|
|
|
|
|
|
|
|
G4double WaterBackz = Cu3z - 0.5 * Cu3thickness - 0.5 * WaterBack_thickness;
|
|
|
|
|
|
|
|
G4Tubs* WaterBack_tub =
|
|
|
|
|
|
|
|
new G4Tubs("WaterBack_tub", 0, 29.0 * mm, 0.5 * WaterBack_thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* WaterBack_log = new G4LogicalVolume(WaterBack_tub, mat_Water, "WaterBack_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, WaterBackz), "WaterBack_phys", WaterBack_log, physicalWorld, false, 17,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
WaterBack_log->SetVisAttributes(water_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Al Substrate
|
|
|
|
|
|
|
|
G4double Al0thickness = 4.0 * mm;
|
|
|
|
|
|
|
|
G4double Al0z = WaterBackz - 0.5 * WaterBack_thickness - 0.5 * Al0thickness;
|
|
|
|
|
|
|
|
G4Tubs* AlSubstrate_tub0 =
|
|
|
|
|
|
|
|
new G4Tubs("AlSubstrate_tub0", 0, 29.0 * mm, 0.5 * Al0thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* AlSubstrate_log0 = new G4LogicalVolume(AlSubstrate_tub0, mat_Al, "AlSubstrate_log0");
|
|
|
|
|
|
|
|
G4PVPlacement* Al0phys = new G4PVPlacement(0, G4ThreeVector(0, 0, Al0z), "AlSubstrate_phys0", AlSubstrate_log0,
|
|
|
|
|
|
|
|
physicalWorld, false, 18, true);
|
|
|
|
|
|
|
|
AlSubstrate_log0->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double Al1thickness = 4.0 * mm;
|
|
|
|
|
|
|
|
G4double Al1z = Al0z - 0.5 * Al0thickness - 0.5 * Al1thickness;
|
|
|
|
|
|
|
|
G4Tubs* AlSubstrate_tub1 =
|
|
|
|
|
|
|
|
new G4Tubs("AlSubstrate_tub1", 0, 44.45 * mm, 0.5 * Al1thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* AlSubstrate_log1 = new G4LogicalVolume(AlSubstrate_tub1, mat_Al, "AlSubstrate_log1");
|
|
|
|
|
|
|
|
G4PVPlacement* Al1phys = new G4PVPlacement(0, G4ThreeVector(0, 0, Al1z), "AlSubstrate_phys1", AlSubstrate_log1,
|
|
|
|
|
|
|
|
physicalWorld, false, 19, true);
|
|
|
|
|
|
|
|
AlSubstrate_log1->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Waterpipe
|
|
|
|
|
|
|
|
G4double Waterpipe0_thickness = 4.0 * mm;
|
|
|
|
|
|
|
|
G4Tubs* Waterpipe_tub0 =
|
|
|
|
|
|
|
|
new G4Tubs("Waterpipe_tub0", 0, 2.5 * mm, 0.5 * Waterpipe0_thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* Waterpipe_log0 = new G4LogicalVolume(Waterpipe_tub0, mat_Water, "Waterpipe_log0");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 21.5 * mm, 0), "Waterpipe_phys00", Waterpipe_log0, Al0phys, false, 20,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, -21.5 * mm, 0), "Waterpipe_phys01", Waterpipe_log0, Al0phys, false, 21,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 21.5 * mm, 0), "Waterpipe_phys02", Waterpipe_log0, Al1phys, false, 22,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, -21.5 * mm, 0), "Waterpipe_phys03", Waterpipe_log0, Al1phys, false, 23,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double Waterpipe1_thickness = BPE_xyz / 2.0 + 10.0 * cm;
|
|
|
|
|
|
|
|
G4double Waterpipe1z = Al1z - 0.5 * Al1thickness - 0.5 * Waterpipe1_thickness;
|
|
|
|
|
|
|
|
G4Tubs* Waterpipe_tub1 =
|
|
|
|
|
|
|
|
new G4Tubs("Waterpipe_tub1", 0, 2.5 * mm, 0.5 * Waterpipe1_thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* Waterpipe_log1 = new G4LogicalVolume(Waterpipe_tub1, mat_Water, "Waterpipe_log1");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 21.5 * mm, Waterpipe1z), "Waterpipe_phys1", Waterpipe_log1, physicalWorld,
|
|
|
|
|
|
|
|
false, 24, true);
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, -21.5 * mm, Waterpipe1z), "Waterpipe_phys2", Waterpipe_log1,
|
|
|
|
|
|
|
|
physicalWorld, false, 25, true);
|
|
|
|
|
|
|
|
Waterpipe_log0->SetVisAttributes(water_vis);
|
|
|
|
|
|
|
|
Waterpipe_log1->SetVisAttributes(water_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else if (SReaction == "V51pn") {
|
|
|
|
|
|
|
|
// V51 on Ta target
|
|
|
|
|
|
|
|
G4double Tathickness = 1.0 * mm;
|
|
|
|
|
|
|
|
G4Tubs* Tatub = new G4Tubs("Tatub", 0, 15. * mm, 0.5 * Tathickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4LogicalVolume* Talog = new G4LogicalVolume(Tatub, mat_Ta, "Talog");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(), "Taphys", Talog, physicalWorld, false, 3, true);
|
|
|
|
|
|
|
|
Talog->SetVisAttributes(C13_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Cu_Substrate
|
|
|
|
|
|
|
|
G4double Cu0thickness = 8.0 * mm;
|
|
|
|
|
|
|
|
G4double Cu0z = 0.5 * (Tathickness + Cu0thickness);
|
|
|
|
|
|
|
|
G4Tubs* CuSubstrate_tub0 =
|
|
|
|
|
|
|
|
new G4Tubs("CuSubstrate_tub0", 11. * mm, 29. * mm, 0.5 * Cu0thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* CuSubstrate_log0 = new G4LogicalVolume(CuSubstrate_tub0, mat_Cu, "CuSubstrate_log0");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Cu0z), "CuSubstrate_phys1", CuSubstrate_log0, physicalWorld, false, 4,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CuSubstrate_log0->SetVisAttributes(CuSub_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Target flange
|
|
|
|
|
|
|
|
G4double flange0_thickness = 9.0 * mm;
|
|
|
|
|
|
|
|
G4double flange0z = Cu0z + 0.5 * Cu0thickness + 0.5 * flange0_thickness;
|
|
|
|
|
|
|
|
G4Tubs* flange_tub0 = new G4Tubs("flange_tub0", 25. * mm, 42.33 * mm, 0.5 * flange0_thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* flange_log0 = new G4LogicalVolume(flange_tub0, mat_stell, "flange_log0");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, flange0z), "flange_phys0", flange_log0, physicalWorld, false, 8, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double flange1_thickness = 7.0 * mm;
|
|
|
|
|
|
|
|
G4double flange1z = flange0z - 0.5 * (flange0_thickness + flange1_thickness);
|
|
|
|
|
|
|
|
G4Tubs* flange_tub1 = new G4Tubs("flange_tub1", 29. * mm, 44.45 * mm, 0.5 * flange1_thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* flange_log1 = new G4LogicalVolume(flange_tub1, mat_stell, "flange_log1");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, flange1z), "flange_phys1", flange_log1, physicalWorld, false, 9, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// BeamLine_stainlesss
|
|
|
|
|
|
|
|
G4double BeampipeLength = 60.0 * cm;
|
|
|
|
|
|
|
|
G4double Beampipez = flange0z - 0.5 * flange0_thickness + 0.5 * BeampipeLength;
|
|
|
|
|
|
|
|
G4Tubs* Beampipe_tub =
|
|
|
|
|
|
|
|
new G4Tubs("Beampipe_tub", 42.33 * mm, 44.45 * mm, 0.5 * BeampipeLength, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* Beampipe_log = new G4LogicalVolume(Beampipe_tub, mat_stell, "Beampipe_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Beampipez), "Beampipe_phys", Beampipe_log, physicalWorld, false, 10,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
flange_log0->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
flange_log1->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
Beampipe_log->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double VacuumLength = 70.0 * cm;
|
|
|
|
|
|
|
|
G4double Vacuumz = 0.5 * VacuumLength + Cu0z - 0.5 * Cu0thickness;
|
|
|
|
|
|
|
|
G4Tubs* Vacuum_tub = new G4Tubs("Vacuum_tub", 0, 42.33 * mm, 0.5 * VacuumLength, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4double VacuumCu0z = -0.5 * VacuumLength + 0.5 * Cu0thickness;
|
|
|
|
|
|
|
|
G4Tubs* CuSubstrate_tub1 = new G4Tubs("CuSubstrate_tub1", 11. * mm, 50 * mm, 0.5 * Cu0thickness, 0, 360. * deg);
|
|
|
|
|
|
|
|
G4SubtractionSolid* Vacuum_sub = new G4SubtractionSolid(
|
|
|
|
|
|
|
|
"Vacuum_sub0", Vacuum_tub, CuSubstrate_tub1, G4Transform3D(rot0, G4ThreeVector(0, 0, VacuumCu0z))); // Cu0
|
|
|
|
|
|
|
|
G4double Vacuumflange0z = VacuumCu0z + 0.5 * Cu0thickness + 0.5 * flange0_thickness;
|
|
|
|
|
|
|
|
Vacuum_sub =
|
|
|
|
|
|
|
|
new G4SubtractionSolid("Vacuumflange0_sub", Vacuum_sub, flange_tub0,
|
|
|
|
|
|
|
|
G4Transform3D(rot0, G4ThreeVector(0, 0, Vacuumflange0z))); // Target flange0
|
|
|
|
|
|
|
|
G4LogicalVolume* Vacuum_log = new G4LogicalVolume(Vacuum_sub, Vacuum, "Vacuum_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Vacuumz), "Vacuum_phys", Vacuum_log, physicalWorld, false, 11, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Vacuum_log->SetVisAttributes(G4VisAttributes::GetInvisible);
|
|
|
|
|
|
|
|
// Water_cold
|
|
|
|
|
|
|
|
G4double WaterBack_thickness = 1.3 * mm;
|
|
|
|
|
|
|
|
G4double WaterBackz = -0.5 * Tathickness - 0.5 * WaterBack_thickness;
|
|
|
|
|
|
|
|
G4Tubs* WaterBack_tub =
|
|
|
|
|
|
|
|
new G4Tubs("WaterBack_tub", 0, 12.0 * mm, 0.5 * WaterBack_thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* WaterBack_log = new G4LogicalVolume(WaterBack_tub, mat_Water, "WaterBack_log");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, WaterBackz), "WaterBack_phys", WaterBack_log, physicalWorld, false, 12,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WaterBack_log->SetVisAttributes(water_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Fe backflange
|
|
|
|
|
|
|
|
G4double Fe0thickness = 1.3 * mm;
|
|
|
|
|
|
|
|
G4double Fe0z = WaterBackz;
|
|
|
|
|
|
|
|
G4Tubs* FeBack_tub0 =
|
|
|
|
|
|
|
|
new G4Tubs("FeBack_tub0", 12.0 * mm, 44.45 * mm, 0.5 * Fe0thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* FeBack_log0 = new G4LogicalVolume(FeBack_tub0, mat_stell, "FeBack_log0");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 0, Fe0z), "FeBack_phys0", FeBack_log0, physicalWorld, false, 13, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double Fe1thickness = 6.7 * mm;
|
|
|
|
|
|
|
|
G4double Fe1z = Fe0z - 0.5 * Fe0thickness - 0.5 * Fe1thickness;
|
|
|
|
|
|
|
|
G4Tubs* FeBack_tub1 = new G4Tubs("FeBack_tub1", 0, 44.45 * mm, 0.5 * Fe1thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* FeBack_log1 = new G4LogicalVolume(FeBack_tub1, mat_stell, "FeBack_log1");
|
|
|
|
|
|
|
|
G4PVPlacement* Fe1phys = new G4PVPlacement(0, G4ThreeVector(0, 0, Fe1z), "FeBack_phys1", FeBack_log1,
|
|
|
|
|
|
|
|
physicalWorld, false, 14, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FeBack_log0->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
FeBack_log1->SetVisAttributes(tube_vis);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Waterpipe
|
|
|
|
|
|
|
|
G4double Waterpipe1_thickness = Fe1thickness;
|
|
|
|
|
|
|
|
G4Tubs* Waterpipe_tub1 =
|
|
|
|
|
|
|
|
new G4Tubs("Waterpipe_tub1", 0, 1.6 * mm, 0.5 * Waterpipe1_thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* Waterpipe_log1 = new G4LogicalVolume(Waterpipe_tub1, mat_Water, "Waterpipe_log1");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 9.0 * mm, 0), "Waterpipe_phys01", Waterpipe_log1, Fe1phys, false, 17,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, -9.0 * mm, 0), "Waterpipe_phys02", Waterpipe_log1, Fe1phys, false, 18,
|
|
|
|
|
|
|
|
true);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4double Waterpipe2_thickness = BPE_xyz / 2.0 + 10.0 * cm;
|
|
|
|
|
|
|
|
G4double Waterpipe2z = Fe1z - 0.5 * Fe1thickness - 0.5 * Waterpipe2_thickness;
|
|
|
|
|
|
|
|
G4Tubs* Waterpipe_tub2 =
|
|
|
|
|
|
|
|
new G4Tubs("Waterpipe_tub2", 0, 2.0 * mm, 0.5 * Waterpipe2_thickness, 0. * deg, 360. * deg);
|
|
|
|
|
|
|
|
G4LogicalVolume* Waterpipe_log2 = new G4LogicalVolume(Waterpipe_tub2, mat_Water, "Waterpipe_log2");
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, 9.0 * mm, Waterpipe2z), "Waterpipe_phys20", Waterpipe_log2, physicalWorld,
|
|
|
|
|
|
|
|
false, 19, true);
|
|
|
|
|
|
|
|
new G4PVPlacement(0, G4ThreeVector(0, -9.0 * mm, Waterpipe2z), "Waterpipe_phys21", Waterpipe_log2,
|
|
|
|
|
|
|
|
physicalWorld, false, 20, true);
|
|
|
|
|
|
|
|
Waterpipe_log1->SetVisAttributes(water_vis);
|
|
|
|
|
|
|
|
Waterpipe_log2->SetVisAttributes(water_vis);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
G4SDManager* SDman = G4SDManager::GetSDMpointer();
|
|
|
|
G4SDManager* SDman = G4SDManager::GetSDMpointer();
|
|
|
|
GeneHe3detSD* detSD = new GeneHe3detSD("/GeneHe3det/");
|
|
|
|
GeneHe3detSD* detSD = new GeneHe3detSD("/GeneHe3det/");
|
|
|
|