/** * @file Phase1Shielding.cc * @author: Ibrahin Pinera * @date 2016 SoLid - University of Antwerp */ #include "Phase1Shielding.hh" #include "SolidMaterials.hh" #include "G4Material.hh" #include "G4MaterialTable.hh" #include "G4ThreeVector.hh" #include "G4VisAttributes.hh" #include "G4Transform3D.hh" #include "G4UnionSolid.hh" #include "G4Box.hh" #include "G4Tubs.hh" #include "G4PVPlacement.hh" #include "G4UnitsTable.hh" #include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" #include Phase1Shielding::Phase1Shielding(G4int verboseLevel, G4double containerLength, G4double containerHeight, G4double containerWidth) { m_verboseLevel = verboseLevel; m_tankLength = 100.0*cm; m_tankHeight = 75.0*cm; m_tankThickness = 18.0*mm; m_coverThickness = 7.5*cm; m_shieldingThickness = 50.0*cm; m_tankWidth = m_shieldingThickness - 2.*m_coverThickness; m_sidewallHeight = 4.5*m_tankHeight; // water leaking gutter m_waterGutterWidth = 612.*mm; //600.*mm; m_waterGutterThickness = 3.1*mm; //5.*mm; m_waterGutterHeight = 280.*mm; //100.*mm; // support for top plane // m_topContainer2SupportDistance = 10.*mm; //distance from container roof to top plane support m_topContainer2SupportDistance = 120.*mm; //distance from Cd sheet on container roof to top plane support m_supportBarsThickness = 3.*mm; m_supportVerBarsWidth = 90.*mm; m_supportTopBarsWidth = 80.*mm; m_supportLength = containerLength + 3.*m_supportVerBarsWidth; m_supportHeight = containerHeight + m_supportTopBarsWidth + m_topContainer2SupportDistance; m_supportWidth = containerWidth; m_shieldingLength_outer = 4.*m_tankLength; m_shieldingHeight_outer = m_sidewallHeight; m_shieldingWidth_outer = 5.*m_tankLength; m_shieldingLength_inner = m_shieldingLength_outer - 2.*m_shieldingThickness; // m_shieldingHeight_inner = containerHeight + m_topContainer2SupportDistance; m_shieldingWidth_inner = m_shieldingWidth_outer - 2.*m_shieldingThickness; // top plate shielding m_topPlaneLength = m_shieldingLength_inner; m_topPlaneHeight = m_shieldingThickness; m_topPlaneWidth = m_shieldingWidth_inner; // Steel plates on the floor, below the top support feet m_floorPlateSmallLength = 400.*mm; m_floorPlateSmallHeight = 15.*mm; m_floorPlateSmallWidth = 400.*mm; // Steel plates on the floor, below the container feet m_floorPlateBigLength = 900.*mm; m_floorPlateBigHeight = 15.*mm; m_floorPlateBigWidth = 900.*mm; G4double deltaGutter = m_waterGutterWidth - m_shieldingThickness; m_shieldingFullLength_outer = m_shieldingLength_outer + deltaGutter; // m_shieldingFullHeight_outer = m_shieldingHeight_outer + m_waterGutterThickness; m_shieldingFullHeight_outer = m_floorPlateBigHeight + m_supportHeight + m_topPlaneHeight; m_shieldingFullWidth_outer = m_shieldingWidth_outer + deltaGutter; m_shieldingFullLength_inner = m_supportLength - 2.*m_supportVerBarsWidth; m_shieldingFullHeight_inner = containerHeight + m_topContainer2SupportDistance; m_shieldingFullWidth_inner = m_shieldingFullWidth_outer - 2.*m_waterGutterWidth; m_shieldingOffSetX = 0.; // m_shieldingOffSetY = -0.5*m_shieldingFullHeight_outer; //on the floor m_shieldingOffSetY = -0.5*m_shieldingFullHeight_outer + m_floorPlateBigHeight; //on top of big steel plates m_shieldingOffSetZ = -0.5*m_shieldingFullWidth_inner; //inner back m_topPlaneOffSetY = m_shieldingOffSetY + m_shieldingFullHeight_inner + m_supportTopBarsWidth + 0.5*m_topPlaneHeight; if( m_verboseLevel > 0 ) { G4cout << "==============================================" << G4endl; G4cout << "external size of the shielding: "; G4cout << m_shieldingFullLength_outer << " x " << m_shieldingFullHeight_outer << " x " << m_shieldingFullWidth_outer << G4endl; G4cout << "internal size of the shielding: "; G4cout << m_shieldingFullLength_inner << " x " << m_shieldingFullHeight_inner << " x " << m_shieldingFullWidth_inner << G4endl; G4cout << "==============================================" << G4endl; } } Phase1Shielding::~Phase1Shielding() { } G4LogicalVolume *Phase1Shielding::ShieldingConstruction(G4double container2ShieldingDelZ) { G4Material * mate; // make colours ********************************************************* G4Colour white (1.0, 1.0, 1.0) ; G4Colour white_t (1.0, 1.0, 1.0, .95) ; G4Colour grey (0.5, 0.5, 0.5) ; G4Colour dgrey (0.2, 0.2, 0.2) ; G4Colour lgrey (.75, .75, .75) ; G4Colour red (1.0, 0.0, 0.0, 0.5) ; G4Colour blue (0.0, 0.0, 1.0) ; G4Colour blue_t (0.0, 0.0, 1.0, .75) ; G4Colour cyan (0.0, 1.0, 1.0, 0.5) ; G4Colour magenta (1.0, 0.0, 1.0) ; G4Colour yellow (1.0, 1.0, 0.0, 0.5) ; G4Colour lblue (0.0, 0.5, .5) ; G4Colour black (0.0, 0.0, 0.0) ; G4Colour green (0.0, 1.0, 0.0) ; G4Colour lgreen (0.0, .75, 0.0) ; G4Colour lgreen_t (0.0, .75, 0.0, 0.5) ; // G4bool forceSolid = false; G4bool forceSolid = true; // construct Shielding box G4Box* ShieldingOuter = new G4Box("ShieldingOuter", 0.5*m_shieldingFullLength_outer, 0.5*m_shieldingFullHeight_outer, 0.5*m_shieldingFullWidth_outer); G4Box* ShieldingInner = new G4Box("ShieldingInner", 0.5*m_shieldingFullLength_inner, 0.5*m_shieldingFullHeight_inner, 0.5*m_shieldingFullWidth_inner); G4SubtractionSolid* Shieldingbox = new G4SubtractionSolid("Shieldingbox", ShieldingOuter, ShieldingInner, 0, G4ThreeVector(0., 0.5*(-m_shieldingFullHeight_outer + m_shieldingFullHeight_inner) + m_floorPlateBigHeight, 0.)); mate = G4Material::GetMaterial("Air"); logShielding = new G4LogicalVolume(Shieldingbox, mate, "logShielding", 0, 0, 0); logShielding->SetVisAttributes(G4VisAttributes::Invisible); //construct external wall support G4Box* externalWall_outer = new G4Box("externalWall_outer", 0.5*m_shieldingLength_outer, 0.5*m_sidewallHeight, 0.5*m_shieldingWidth_outer); G4Box* externalWall_inner = new G4Box("externalWall_inner", 0.5*m_shieldingLength_outer - m_coverThickness, 0.5*m_sidewallHeight + 0.5*mm, 0.5*m_shieldingWidth_outer - m_coverThickness); G4SubtractionSolid* externalWallBox = new G4SubtractionSolid("externalWallBox", externalWall_outer, externalWall_inner, 0, G4ThreeVector(0., 0., 0.)); G4double sideWall_YoffSet = 0.5*(-m_shieldingFullHeight_outer + m_sidewallHeight) + m_waterGutterThickness; mate = G4Material::GetMaterial("HDPE"); G4VisAttributes* vatPE = new G4VisAttributes(grey); vatPE->SetVisibility(true); vatPE->SetForceSolid(forceSolid); logShieldingExternalSupport = new G4LogicalVolume(externalWallBox, mate, "logShieldingExternalSupport", 0, 0, 0); logShieldingExternalSupport->SetVisAttributes(vatPE); physShieldingExternalSupport = new G4PVPlacement(0, G4ThreeVector(0., sideWall_YoffSet, 0.), logShieldingExternalSupport, "physShieldingExternalSupport", logShielding, false, 0); //construct internal wall support G4Box* internalWall_outer = new G4Box("internalWall_outer", 0.5*m_shieldingLength_inner + m_coverThickness, 0.5*m_sidewallHeight, 0.5*m_shieldingWidth_inner + m_coverThickness); G4Box* internalWall_inner = new G4Box("internalWall_inner", 0.5*m_shieldingLength_inner, 0.5*m_sidewallHeight + 0.5*mm, 0.5*m_shieldingWidth_inner); G4SubtractionSolid* internalWallBox = new G4SubtractionSolid("externalWallBox", internalWall_outer, internalWall_inner, 0, G4ThreeVector(0., 0., 0.)); logShieldingInternalSupport = new G4LogicalVolume(internalWallBox, mate, "logShieldingInternalSupport", 0, 0, 0); logShieldingInternalSupport->SetVisAttributes(vatPE); physShieldingInternalSupport = new G4PVPlacement(0, G4ThreeVector(0., sideWall_YoffSet, 0.), logShieldingInternalSupport, "physShieldingInternalSupport", logShielding, false, 0); //construct water tank solid G4Box* waterTank_outer = new G4Box("waterTank_outer", 0.5*m_shieldingLength_outer - m_coverThickness, 0.5*m_sidewallHeight, 0.5*m_shieldingWidth_outer - m_coverThickness); G4Box* waterTank_inner = new G4Box("waterTank_inner", 0.5*m_shieldingLength_inner + m_coverThickness, 0.5*m_sidewallHeight + 0.5*mm, 0.5*m_shieldingWidth_inner + m_coverThickness); G4SubtractionSolid* waterTankSolid = new G4SubtractionSolid("waterTankSolid", waterTank_outer, waterTank_inner, 0, G4ThreeVector(0., 0., 0.)); //construct filling water inside tanks G4Box* water_outer = new G4Box("water_outer", 0.5*m_shieldingLength_outer - m_coverThickness - m_tankThickness, 0.5*m_sidewallHeight - m_tankThickness, 0.5*m_shieldingWidth_outer - m_coverThickness - m_tankThickness); G4Box* water_inner = new G4Box("water_inner", 0.5*m_shieldingLength_inner + m_coverThickness + m_tankThickness, 0.5*m_sidewallHeight - m_tankThickness + 0.5*mm, 0.5*m_shieldingWidth_inner + m_coverThickness + m_tankThickness); G4SubtractionSolid* waterBox = new G4SubtractionSolid("waterBox", water_outer, water_inner, 0, G4ThreeVector(0., 0., 0.)); //construct empty PE tank for filling with water G4SubtractionSolid* waterTankBox = new G4SubtractionSolid("waterTankBox", waterTankSolid, waterBox, 0, G4ThreeVector(0., 0., 0.)); logShieldingWaterTank = new G4LogicalVolume(waterTankBox, mate, "logShieldingWaterTank", 0, 0, 0); vatPE = new G4VisAttributes(dgrey); vatPE->SetVisibility(true); vatPE->SetForceSolid(forceSolid); logShieldingWaterTank->SetVisAttributes(vatPE); physShieldingWaterTank = new G4PVPlacement(0, G4ThreeVector(0., sideWall_YoffSet, 0.), logShieldingWaterTank, "physShieldingWaterTank", logShielding, false, 0); //construct the water for filling tanks mate = G4Material::GetMaterial("G4_WATER"); logShieldingWater = new G4LogicalVolume(waterBox, mate, "logShieldingWater", 0, 0, 0); G4VisAttributes* vatWater = new G4VisAttributes(cyan); vatWater->SetVisibility(true); vatWater->SetForceSolid(forceSolid); logShieldingWater->SetVisAttributes(vatWater); physShieldingWater = new G4PVPlacement(0, G4ThreeVector(0., sideWall_YoffSet, 0.), logShieldingWater, "physShieldingWater", logShielding, false, 0); // construc the steel support for the top plane G4UnionSolid* topSupport = TopSupportConstruction(); mate = G4Material::GetMaterial("G4_STAINLESS-STEEL"); logShieldingTopSupport = new G4LogicalVolume(topSupport, mate, "logShieldingTopSupport", 0, 0, 0); //Set Color G4VisAttributes* vatSteel= new G4VisAttributes(lgrey); vatSteel->SetVisibility(true); vatSteel->SetForceSolid(forceSolid); logShieldingTopSupport->SetVisAttributes(vatSteel); G4double posY = m_shieldingOffSetY + m_supportHeight - 0.5*m_supportTopBarsWidth; G4double posZ = m_shieldingOffSetZ + 0.5*m_supportTopBarsWidth + container2ShieldingDelZ; physShieldingTopSupport = new G4PVPlacement(0, G4ThreeVector(0., posY, posZ), logShieldingTopSupport, "physShieldingTopSupport", logShielding, false, 0); //construct top shielding G4Box* topShieldingBox = new G4Box("topShieldingBox", 0.5*m_topPlaneLength, 0.5*m_topPlaneHeight, 0.5*m_topPlaneWidth); mate = G4Material::GetMaterial("HDPE"); logShieldingTopPlane = new G4LogicalVolume(topShieldingBox, mate, "logShieldingTopPlane", 0, 0, 0); vatPE= new G4VisAttributes(lgrey); vatPE->SetVisibility(true); vatPE->SetForceSolid(forceSolid); logShieldingTopPlane->SetVisAttributes(vatPE); physShieldingTopPlane = new G4PVPlacement(0, G4ThreeVector(0., m_topPlaneOffSetY, 0.), logShieldingTopPlane, "physShieldingTopPlane", logShielding, false, 0); // construc the steel gutter for water leaking G4SubtractionSolid* gutter = LeakageGutterConstruction(); mate = G4Material::GetMaterial("G4_STAINLESS-STEEL"); logShieldingSteelGutter = new G4LogicalVolume(gutter, mate, "logShieldingSteelGutter", 0, 0, 0); //Set Color logShieldingSteelGutter->SetVisAttributes(vatSteel); posY = 0.5*(-m_shieldingFullHeight_outer + m_waterGutterHeight); physShieldingSteelGutter = new G4PVPlacement(0, G4ThreeVector(0., posY, 0.), logShieldingSteelGutter, "physShieldingSteelGutter", logShielding, false, 0); //construct big steel plates on the floor, below container and shielding feet G4Box* floorBigPlateBox = new G4Box("floorBigPlateBox", 0.5*m_floorPlateBigLength, 0.5*m_floorPlateBigHeight, 0.5*m_floorPlateBigWidth); mate = G4Material::GetMaterial("G4_STAINLESS-STEEL"); logShieldingFloorPlateBig = new G4LogicalVolume(floorBigPlateBox, mate, "logShieldingFloorPlateBig", 0, 0, 0); logShieldingFloorPlateBig->SetVisAttributes(vatSteel); G4double posX = 0.5*(m_shieldingFullLength_outer - m_floorPlateBigLength) - m_waterGutterWidth; posY = 0.5*(-m_shieldingFullHeight_outer + m_floorPlateBigHeight); posZ = 0.5*(m_shieldingFullWidth_inner - m_floorPlateBigWidth); physShieldingFloorPlateBig = new G4PVPlacement(0, G4ThreeVector(-posX, posY, -posZ), logShieldingFloorPlateBig, "physShieldingFloorPlateBig", logShielding, false, 0); physShieldingFloorPlateBig = new G4PVPlacement(0, G4ThreeVector(posX, posY, -posZ), logShieldingFloorPlateBig, "physShieldingFloorPlateBig", logShielding, false, 1); physShieldingFloorPlateBig = new G4PVPlacement(0, G4ThreeVector(-posX, posY, posZ), logShieldingFloorPlateBig, "physShieldingFloorPlateBig", logShielding, false, 2); physShieldingFloorPlateBig = new G4PVPlacement(0, G4ThreeVector(posX, posY, posZ), logShieldingFloorPlateBig, "physShieldingFloorPlateBig", logShielding, false, 3); //construct small steel plates on the floor, below top shielding support feet G4Box* floorSmallPlateBox = new G4Box("floorSmallPlateBox", 0.5*m_floorPlateSmallLength, 0.5*m_floorPlateSmallHeight, 0.5*m_floorPlateSmallWidth); logShieldingFloorPlateSmall = new G4LogicalVolume(floorSmallPlateBox, mate, "logShieldingFloorPlateSmall", 0, 0, 0); logShieldingFloorPlateSmall->SetVisAttributes(vatSteel); posX = 0.5*(m_shieldingFullLength_outer - m_floorPlateSmallLength) - m_waterGutterWidth; posY = 0.5*(-m_shieldingFullHeight_outer + m_floorPlateSmallHeight); posZ = 0.5*(m_shieldingFullWidth_inner - m_floorPlateSmallWidth) - m_floorPlateBigWidth; physShieldingFloorPlateSmall = new G4PVPlacement(0, G4ThreeVector(-posX, posY, -posZ), logShieldingFloorPlateSmall, "physShieldingFloorPlateSmall", logShielding, false, 0); physShieldingFloorPlateSmall = new G4PVPlacement(0, G4ThreeVector(posX, posY, -posZ), logShieldingFloorPlateSmall, "physShieldingFloorPlateSmall", logShielding, false, 1); physShieldingFloorPlateSmall = new G4PVPlacement(0, G4ThreeVector(-posX, posY, 0.), logShieldingFloorPlateSmall, "physShieldingFloorPlateSmall", logShielding, false, 2); physShieldingFloorPlateSmall = new G4PVPlacement(0, G4ThreeVector(posX, posY, 0.), logShieldingFloorPlateSmall, "physShieldingFloorPlateSmall", logShielding, false, 3); physShieldingFloorPlateSmall = new G4PVPlacement(0, G4ThreeVector(-posX, posY, posZ), logShieldingFloorPlateSmall, "physShieldingFloorPlateSmall", logShielding, false, 4); physShieldingFloorPlateSmall = new G4PVPlacement(0, G4ThreeVector(posX, posY, posZ), logShieldingFloorPlateSmall, "physShieldingFloorPlateSmall", logShielding, false, 5); if( m_verboseLevel > 0 ) { G4float topSupport_mass = logShieldingTopSupport->GetMass()/g; G4float topSupport_vol = topSupport->GetCubicVolume()/cm3; G4float topPlane_mass = logShieldingTopPlane->GetMass()/g; G4float topPlane_vol = topShieldingBox->GetCubicVolume()/cm3; G4float internal_mass = logShieldingInternalSupport->GetMass()/g; G4float internal_vol = internalWallBox->GetCubicVolume()/cm3; G4float external_mass = logShieldingExternalSupport->GetMass()/g; G4float external_vol = externalWallBox->GetCubicVolume()/cm3; G4float waterTank_mass = logShieldingWaterTank->GetMass()/g; G4float waterTank_vol = waterTankBox->GetCubicVolume()/cm3; G4float water_mass = logShieldingWater->GetMass()/g; G4float water_vol = waterBox->GetCubicVolume()/cm3; G4float gutter_mass = logShieldingSteelGutter->GetMass()/g; G4float gutter_vol = gutter->GetCubicVolume()/cm3; G4float floorPlates_mass = 6.*logShieldingFloorPlateSmall->GetMass()/g + 4.*logShieldingFloorPlateBig->GetMass()/g; G4float floorPlates_vol = 6.*floorSmallPlateBox->GetCubicVolume()/cm3 + 4.*floorBigPlateBox->GetCubicVolume()/cm3; G4float total_mass = topSupport_mass + topPlane_mass + internal_mass + external_mass + waterTank_mass + water_mass + gutter_mass + floorPlates_mass; G4float total_vol = topSupport_vol + topPlane_vol + internal_vol + external_vol + waterTank_vol + water_vol + gutter_vol + floorPlates_vol; G4cout << "**************VOLUME MASS****************" << G4endl; G4cout << " part:\t mass (g)\t volume (cm^3)" << G4endl; G4cout << " top support: " << topSupport_mass << ", \t" << topSupport_vol << G4endl; G4cout << " top plane: " << topPlane_mass << ", \t" << topPlane_vol << G4endl; G4cout << " internal support: " << internal_mass << ", \t" << internal_vol << G4endl; G4cout << " external support: " << external_mass << ", \t" << external_vol << G4endl; G4cout << " water tank: " << waterTank_mass << ", \t" << waterTank_vol << G4endl; G4cout << " water: " << water_mass << ", \t" << water_vol << G4endl; G4cout << " steel gutter: " << gutter_mass << ", \t" << gutter_vol << G4endl; G4cout << "10 floor steel plates: " << floorPlates_mass << ", \t" << floorPlates_vol << G4endl; G4cout << " ALL shielding total: " << total_mass << ", \t" << total_vol << G4endl; G4cout << "**********END VOLUME MASS****************" << G4endl; } return logShielding; } // construct the gutter structure for water leakage G4SubtractionSolid *Phase1Shielding::LeakageGutterConstruction() { G4Box* gutterOuter = new G4Box("gutterOuter", 0.5*m_shieldingFullLength_outer, 0.5*m_waterGutterHeight, 0.5*m_shieldingFullWidth_outer); G4Box* gutterInner = new G4Box("gutterInner", 0.5*m_shieldingFullLength_outer - m_waterGutterWidth, 0.5*m_waterGutterHeight + 0.5*mm, 0.5*m_shieldingFullWidth_outer - m_waterGutterWidth); G4SubtractionSolid* gutterSolid = new G4SubtractionSolid("gutterSolid", gutterOuter, gutterInner, 0, G4ThreeVector(0., 0., 0.)); G4Box* gutterCutOuter = new G4Box("gutterCutOuter", 0.5*m_shieldingFullLength_outer - m_waterGutterThickness, 0.5*m_waterGutterHeight, 0.5*m_shieldingFullWidth_outer - m_waterGutterThickness); G4Box* gutterCutInner = new G4Box("gutterCutInner", 0.5*m_shieldingFullLength_outer - m_waterGutterWidth + m_waterGutterThickness, 0.5*m_waterGutterHeight + 0.5*mm, 0.5*m_shieldingFullWidth_outer - m_waterGutterWidth + m_waterGutterThickness); G4SubtractionSolid* gutterCutSolid = new G4SubtractionSolid("gutterCutSolid", gutterCutOuter, gutterCutInner, 0, G4ThreeVector(0., 0., 0.)); G4SubtractionSolid* gutter = new G4SubtractionSolid("gutter", gutterSolid, gutterCutSolid, 0, G4ThreeVector(0., m_waterGutterThickness, 0.)); return gutter; } // construct the support structure for the top plane G4UnionSolid *Phase1Shielding::TopSupportConstruction() { G4SubtractionSolid* verPost = ExtrudedBarConstruction(m_supportHeight - m_supportTopBarsWidth, m_supportVerBarsWidth, m_supportBarsThickness); G4SubtractionSolid* topPostX = ExtrudedBarConstruction(m_supportLength - 2.*m_supportTopBarsWidth, m_supportTopBarsWidth, m_supportBarsThickness); G4SubtractionSolid* topPostZ = ExtrudedBarConstruction(m_supportWidth, m_supportTopBarsWidth, m_supportBarsThickness); G4RotationMatrix* rotPost = new G4RotationMatrix(); rotPost->rotateY(90.*deg); G4double xPos = 0.5*(m_supportLength - m_supportTopBarsWidth); G4double yPos = 0.; G4double zPos = 0.5*(m_supportWidth - m_supportTopBarsWidth); G4UnionSolid* support = new G4UnionSolid("support", topPostX, topPostZ, rotPost, G4ThreeVector(-xPos, yPos, zPos)); support = new G4UnionSolid("support", support, topPostZ, rotPost, G4ThreeVector(xPos, yPos, zPos)); rotPost = new G4RotationMatrix(); rotPost->rotateZ(90.*deg); xPos = 0.5*(m_supportLength - m_supportVerBarsWidth); yPos = -0.5*m_supportHeight; zPos = 0.2*(m_supportWidth - m_supportTopBarsWidth); G4double zDel = 0.25*(m_supportWidth - 2.*m_supportTopBarsWidth - m_supportVerBarsWidth); for(int i=0; i<5; i++) { support = new G4UnionSolid("support", support, topPostX, 0, G4ThreeVector(0., 0., (i+1)*zPos)); support = new G4UnionSolid("support", support, verPost, rotPost, G4ThreeVector(-xPos, yPos, 0.5*(m_supportVerBarsWidth + m_supportTopBarsWidth) + i*zDel)); support = new G4UnionSolid("support", support, verPost, rotPost, G4ThreeVector(xPos, yPos, 0.5*(m_supportVerBarsWidth + m_supportTopBarsWidth) + i*zDel)); } return support; } G4SubtractionSolid *Phase1Shielding::ExtrudedBarConstruction(G4double length, G4double Width, G4double thickness) { G4Box* extBox = new G4Box("extBox", 0.5*length, 0.5*Width, 0.5*Width); G4Box* intBox = new G4Box("intBox", 0.5*length + thickness, 0.5*Width - thickness, 0.5*Width - thickness); G4SubtractionSolid* extrudedBar = new G4SubtractionSolid("extrudedBar", extBox, intBox, 0, G4ThreeVector(0., 0., 0.)); return extrudedBar; }