/** * @file SolidBR2Construction.cc * @author: Ibrahin Pinera * @date 2016 SoLid - University of Antwerp */ #include "SolidBR2Construction.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 "G4SubtractionSolid.hh" #include "G4Tubs.hh" #include "G4Cons.hh" #include "G4Ellipsoid.hh" #include "G4PVPlacement.hh" #include "G4UnitsTable.hh" #include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" #include SolidBR2Construction::SolidBR2Construction(G4int verboseLevel, G4double BR2OffSetY, G4double BR2OffSetZ, G4bool constructAlPlate, G4bool constructParaffinBlocks) { m_verboseLevel = verboseLevel; m_constructAlPlate = constructAlPlate; m_constructParaffinBlocks = constructParaffinBlocks; m_BR2OffSetY = BR2OffSetY; m_BR2OffSetZ = BR2OffSetZ; m_coreCenterPosX = 0.; // m_coreCenterPosY = 0.; m_coreCenterPosY = 1020.*mm + m_BR2OffSetY; m_coreCenterPosZ = 0.; m_coreCenterDiam = 122.*cm; m_coreCenterHeight = 122.*cm; m_coreTopDiam = 244.*cm; m_coreTopHeight = 303.*cm; m_level3WallLength = 509.5*cm; m_level3WallHeight = 586.*cm; m_level3WallWidth = 259.1*cm; m_level3FloorLength = m_level3WallLength; m_level3FloorHeight = 98.*cm; m_level3FloorWidth = 1200.*cm; m_level3EnforcedFloorRadius = 945.*cm; m_level3GutterHeight = 20.*cm; m_level3GutterWidth = 40.*cm; m_level2FloorLength = m_level3WallLength; m_level2FloorHeight = 61.*cm; m_level2FloorWidth = m_level3FloorWidth; m_level2WallHeight = 268.*cm + m_level2FloorHeight; m_level4FloorLength = m_level3WallLength; // m_level4FloorHeight = 61.*cm; m_level4FloorHeight = m_level3FloorHeight; m_level4FloorWidth = m_level3FloorWidth; m_level4UFloorWidth = 106.9*cm; m_level4UFloor2Width = 600.*cm; m_level5FloorLength = m_level3WallLength; m_level5Floor2Length = 300.*cm; m_level5FloorHeight = 61.*cm; // m_level5FloorHeight = 80.*cm; m_level5FloorWidth = 244.*cm; m_level5Floor2Width = m_level3FloorWidth - m_level4UFloorWidth; m_level5WallHeight = 274.*cm + m_level5FloorHeight; m_level7FloorHeight = 30.5*cm; m_level7WallHeight = 275.*cm; m_wallLength = m_level3WallLength; m_wallHeightTop = 80.*cm; m_wallHeight = m_level2WallHeight + m_level3WallHeight + 2.*m_level5WallHeight + m_wallHeightTop; m_wallWidth = m_level3WallWidth; m_wallGroveLength = m_wallLength; m_wallGroveHeight = 2.*m_level5WallHeight + m_wallHeightTop; m_wallGroveWidth = m_level5FloorWidth - m_level4UFloorWidth; m_backWallLength = 750.*cm; m_backWallHeight = m_wallHeight; m_backWallWidth = 122.*cm; m_UWallInnerRadius = 243.8*cm; m_UWallOutterRadius = 502.9*cm; m_UWallHeight = m_wallHeight; m_externalWallRadius = 15.225*m; m_externalWallThickness = 61.*cm; m_externalWallHeight = 32.*m; m_CBThickness = 15.*cm; m_CBOutterRadius = m_externalWallRadius + m_externalWallThickness + m_CBThickness; m_CBHeight = m_externalWallHeight; m_CBDomeHeight = 7.5*m; m_CBDomeThickness = 30.*cm; m_CBDomeOutterRadius = m_CBOutterRadius; G4cout << "==============================================" << G4endl; G4cout << "--------------BR2 CB dimensions---------------" << G4endl; G4cout << " CB thickness: " << m_CBThickness << G4endl; G4cout << " CB outterRadius: " << m_CBOutterRadius << G4endl; G4cout << " CB Height: " << m_CBHeight << G4endl; G4cout << " CB dome thickness: " << m_CBDomeThickness << G4endl; G4cout << "CB dome outterRadius: " << m_CBDomeOutterRadius << G4endl; G4cout << " CB dome Height: " << m_CBDomeHeight << G4endl; G4cout << "==============================================" << G4endl; m_craneHoleLength = 467.*cm; m_craneHoleHeight = m_level3FloorHeight+1.*mm; m_craneHoleWidth = 365.*cm; m_R1AlcoveLength = 100.*cm; m_R1AlcoveHeight = 202.*cm; m_R1AlcoveWidth = 61.*cm; m_T1AlcoveLength = 100.*cm; m_T1AlcoveHeight = 220.*cm; m_T1AlcoveWidth = 61.*cm; m_T2AlcoveLength = 100.*cm; m_T2AlcoveHeight = m_T1AlcoveHeight; m_T2AlcoveWidth = 75.*cm; m_T3AlcoveLength = 100.*cm; m_T3AlcoveHeight = 180.*cm; m_T3AlcoveWidth = 70.*cm; m_leadR1Length = m_R1AlcoveLength; m_leadR1Height = m_R1AlcoveHeight; m_leadR1Width = 20.*cm; m_leadT2Length = m_T2AlcoveLength; m_leadT2Height = m_T2AlcoveHeight; m_leadT2Width = 10.*cm; m_leadT3Length = m_T3AlcoveLength; m_leadT3Height = m_T3AlcoveHeight; m_leadT3Width = 10.*cm; m_AlLength = m_leadR1Length; m_AlHeight = m_AlLength; m_AlWidth = 2.*mm; m_paraffinBlockLength = 200.*cm; m_paraffinBlockHeight = 180.*cm; m_paraffinBlockWidth = 40.*cm; m_paraffinBlockGroove = 20.*cm; m_wallPosZ = 0.5*(m_level3WallWidth); m_BR2WallOffSetX = 0.5*m_wallLength - 0.5*m_R1AlcoveLength - 60.*cm; m_BR2WallOffSetY = 0.5*m_wallHeight-m_level3FloorHeight-m_level2WallHeight + m_BR2OffSetY; m_BR2WallOffSetZ = -m_wallPosZ-m_AlWidth + m_BR2OffSetZ; G4cout << "==============================================" << G4endl; G4cout << "BR2 pool wall Z location: "; G4cout << m_BR2OffSetZ << G4endl; G4cout << "==============================================" << G4endl; m_coreCenterPosZ = m_BR2WallOffSetZ - 0.5*m_level3WallWidth - m_UWallInnerRadius; G4cout << "==============================================" << G4endl; G4cout << "BR2 reactor core center location: "; G4cout << m_coreCenterPosX << ", " << m_coreCenterPosY << ", " << m_coreCenterPosZ << G4endl; G4cout << "==============================================" << G4endl; m_level3OffSetY = 0.5*m_level3WallHeight-m_level3FloorHeight + m_BR2OffSetY; } SolidBR2Construction::~SolidBR2Construction() { } void SolidBR2Construction::BR2Construction(G4VPhysicalVolume * physLab) { G4Material * mate; // G4double transp = 0.5; G4double transp = 1.0; // 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.4, 0.4, 0.4) ; G4Colour lgrey (.75, .75, .75) ; G4Colour red (1.0, 0.0, 0.0, transp) ; 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) ; G4Colour br2color (1., .8, 0.6, transp) ; G4Colour br2color2 (1., .9, 0.8, transp) ; // G4bool forceSolid = false; G4bool forceSolid = true; //==================================================== // Construct Reactor Core //==================================================== G4Tubs* reactorCoreTube = new G4Tubs("reactorCoreTube", 0., 0.5*m_coreCenterDiam, 0.5*m_coreCenterHeight, 0., 360.*deg); G4Cons* reactorCoreCone = new G4Cons("reactorCoreCone", 0., 0.5*m_coreCenterDiam, 0., 0.5*m_coreTopDiam, 0.5*m_coreTopHeight, 0., 360.*deg); G4RotationMatrix* rotCore = new G4RotationMatrix(); rotCore->rotateX(180*deg); G4double coreCenterOffSet = 0.5*(m_coreCenterHeight + m_coreTopHeight); G4UnionSolid* reactorCore = new G4UnionSolid("reactorCore", reactorCoreTube, reactorCoreCone, 0, G4ThreeVector(0., 0., coreCenterOffSet) ); reactorCore = new G4UnionSolid("reactorCore", reactorCore, reactorCoreCone, rotCore, G4ThreeVector(0., 0., -coreCenterOffSet) ); mate = G4Material::GetMaterial("Aluminium"); logBR2ReactorCore = new G4LogicalVolume(reactorCore, mate, "logBR2ReactorCore", 0, 0, 0); G4VisAttributes* vatReactorCore = new G4VisAttributes(red); vatReactorCore->SetVisibility(true); vatReactorCore->SetForceSolid(forceSolid); logBR2ReactorCore->SetVisAttributes(vatReactorCore); rotCore = new G4RotationMatrix(); rotCore->rotateX(-90*deg); physBR2ReactorCore = new G4PVPlacement(rotCore, G4ThreeVector(m_coreCenterPosX, m_coreCenterPosY, m_coreCenterPosZ), "physBR2ReactorCore", logBR2ReactorCore, physLab, false, 0); //==================================================== // Construct water pool //==================================================== G4double waterPoolLength = m_wallLength + m_backWallLength; G4double waterPoolHeight = m_wallHeight; G4double waterPoolWidth = 2.*m_UWallInnerRadius; G4double waterPoolRadius = m_UWallInnerRadius; G4double startAngle = 90.*deg; G4double endAngle = 270.*deg - startAngle; G4double waterPoolPosX = m_BR2WallOffSetX + 0.5*m_backWallLength; G4double waterPoolPosY = m_BR2WallOffSetY; G4double waterPoolPosZ = m_BR2WallOffSetZ - 0.5*m_level3WallWidth - waterPoolRadius; G4Box* waterPoolBox0 = new G4Box("waterPoolBox0", 0.5*waterPoolLength, 0.5*waterPoolHeight, 0.5*waterPoolWidth); G4Tubs* waterPoolUTube = new G4Tubs("waterPoolUTube", 0., waterPoolRadius, 0.5*m_UWallHeight, startAngle, endAngle); G4RotationMatrix* rotWaterPool = new G4RotationMatrix(); rotWaterPool->rotateX(90*deg); G4UnionSolid* waterPoolBox1 = new G4UnionSolid("waterPoolBox1", waterPoolBox0, waterPoolUTube, rotWaterPool, G4ThreeVector(-0.5*waterPoolLength, 0., 0.) ); // open the hole in water pool to locate the reactor core volume G4SubtractionSolid* waterPoolBox = new G4SubtractionSolid("waterPoolBox", waterPoolBox1, reactorCore, rotWaterPool, G4ThreeVector(m_coreCenterPosX - waterPoolPosX, m_coreCenterPosY - waterPoolPosY, m_coreCenterPosZ - waterPoolPosZ) ); mate = G4Material::GetMaterial("G4_WATER"); logBR2WaterPool = new G4LogicalVolume(waterPoolBox, mate, "logBR2WaterPool", 0, 0, 0); // logBR2WaterPool->SetVisAttributes(G4VisAttributes::Invisible); G4VisAttributes* vatWaterPool = new G4VisAttributes(cyan); vatWaterPool->SetVisibility(true); vatWaterPool->SetForceSolid(forceSolid); logBR2WaterPool->SetVisAttributes(vatWaterPool); physBR2WaterPool = new G4PVPlacement(0, G4ThreeVector(waterPoolPosX, waterPoolPosY, waterPoolPosZ), "physBR2WaterPool", logBR2WaterPool, physLab, false, 0); //==================================================== // Construct Concrete Pool Wall //==================================================== // it is the U shaped concrete wall surrounding the water pool G4Box* concreteWallBox01 = new G4Box("concreteWallBox01", 0.5*m_wallLength, 0.5*m_wallHeight, 0.5*m_wallWidth); G4Box* concreteWallGrove = new G4Box("concreteWallGrove", 0.5*m_wallGroveLength + 1.*mm, 0.5*m_wallGroveHeight + 1.*mm, 0.5*m_wallGroveWidth + 1.*mm); G4SubtractionSolid* concreteWallBox02 = new G4SubtractionSolid("concreteWallBox02", concreteWallBox01, concreteWallGrove, 0, G4ThreeVector(0., 0.5*(m_wallHeight - m_wallGroveHeight) + 1.*mm, 0.5*(m_wallWidth - m_wallGroveWidth) + 1.*mm) ); G4Tubs* concreteUWallTube = new G4Tubs("concreteUWallTube", m_UWallInnerRadius, m_UWallOutterRadius, 0.5*m_UWallHeight, startAngle, endAngle); G4Tubs* concreteUWallGrove = new G4Tubs("concreteUWallGrove", m_UWallOutterRadius - m_wallGroveWidth, m_UWallOutterRadius + 1.*mm, 0.5*m_wallGroveHeight + 1.*mm, startAngle, endAngle); G4SubtractionSolid* concreteUWall = new G4SubtractionSolid("concreteUWall", concreteUWallTube, concreteUWallGrove, 0, G4ThreeVector(0., 0., 0.5*(m_wallHeight - m_wallGroveHeight) + 1.*mm) ); G4RotationMatrix* rotUWall = new G4RotationMatrix(); rotUWall->rotateX(90*deg); G4UnionSolid* concreteWallBox1 = new G4UnionSolid("concreteWallBox1", concreteWallBox02, concreteUWall, rotUWall, G4ThreeVector(-0.5*m_wallLength, 0., 0.5*m_level3WallWidth - m_UWallOutterRadius) ); rotUWall = new G4RotationMatrix(); rotUWall->rotateY(180*deg); concreteWallBox1 = new G4UnionSolid("concreteWallBox1", concreteWallBox1, concreteWallBox02, rotUWall, G4ThreeVector(0., 0., -2.*waterPoolRadius - m_wallWidth) ); // openning R1 alcove in the concrete wall G4Box* R1AlcoveBox = new G4Box("R1AlcoveBox", 0.5*m_R1AlcoveLength, 0.5*m_R1AlcoveHeight, 0.5*m_R1AlcoveWidth + 1.*mm); G4double alcovesOffSetY = -0.5*m_wallHeight + m_level2WallHeight + m_level3FloorHeight; G4double R1AlcoveOffSetX = -m_BR2WallOffSetX; // G4double R1AlcoveOffSetY = -m_BR2WallOffSetY + m_level3OffSetY - 0.5*m_level3WallHeight + m_level3FloorHeight + 0.5*m_R1AlcoveHeight; G4double R1AlcoveOffSetY = alcovesOffSetY + 0.5*m_R1AlcoveHeight; G4double R1AlcoveOffSetZ = m_wallPosZ - 0.5*m_R1AlcoveWidth; G4SubtractionSolid* concreteWallBoxFront = new G4SubtractionSolid("concreteWallBoxFront", concreteWallBox1, R1AlcoveBox, 0, G4ThreeVector(R1AlcoveOffSetX, R1AlcoveOffSetY, R1AlcoveOffSetZ + 1.*mm) ); // openning T2 alcove in the concrete wall G4Box* T2AlcoveBox = new G4Box("T2AlcoveBox", 0.5*m_T2AlcoveLength, 0.5*m_T2AlcoveHeight, m_T2AlcoveWidth); G4double rot = 30.*deg; G4double angle = atan(m_T2AlcoveLength/m_T2AlcoveWidth); G4double diag = sqrt(m_T2AlcoveLength*m_T2AlcoveLength + m_T2AlcoveWidth*m_T2AlcoveWidth); G4double T2AlcoveOffSetX = R1AlcoveOffSetX + 0.5*m_R1AlcoveLength + 60.*cm + 0.5*diag*sin(angle-rot) + 0.5*m_T2AlcoveWidth*cos(rot); // G4double T2AlcoveOffSetY = -m_BR2WallOffSetY + m_level3OffSetY - 0.5*m_level3WallHeight + m_level3FloorHeight + 0.5*m_T2AlcoveHeight; G4double T2AlcoveOffSetY = alcovesOffSetY + 0.5*m_T2AlcoveHeight; G4double T2AlcoveOffSetZ = m_wallPosZ - 0.5*diag*cos(angle-rot) + 0.5*m_T2AlcoveWidth*cos(rot); G4RotationMatrix* rotAlcove = new G4RotationMatrix(); rotAlcove->rotateY(-rot); concreteWallBoxFront = new G4SubtractionSolid("concreteWallBoxFront", concreteWallBoxFront, T2AlcoveBox, rotAlcove, G4ThreeVector(T2AlcoveOffSetX, T2AlcoveOffSetY, T2AlcoveOffSetZ) ); // openning T1 alcove in the concrete wall G4Box* T1AlcoveBox = new G4Box("T1AlcoveBox", 0.5*m_T1AlcoveLength, 0.5*m_T1AlcoveHeight, m_T1AlcoveWidth); angle = atan(m_T1AlcoveLength/m_T1AlcoveWidth); diag = sqrt(m_T1AlcoveLength*m_T1AlcoveLength + m_T1AlcoveWidth*m_T1AlcoveWidth); G4double T1AlcoveOffSetX = R1AlcoveOffSetX + 0.5*m_R1AlcoveLength + 120.*cm + m_T2AlcoveLength/cos(rot) + 0.5*diag*sin(angle-rot) + 0.5*m_T1AlcoveWidth*cos(rot); // G4double T1AlcoveOffSetY = -m_BR2WallOffSetY + m_level3OffSetY - 0.5*m_level3WallHeight+m_level3FloorHeight+0.5*m_T1AlcoveHeight; G4double T1AlcoveOffSetY = alcovesOffSetY + 0.5*m_T1AlcoveHeight; G4double T1AlcoveOffSetZ = m_wallPosZ - 0.5*diag*cos(angle-rot) + 0.5*m_T1AlcoveWidth*cos(rot); concreteWallBoxFront = new G4SubtractionSolid("concreteWallBoxFront", concreteWallBoxFront, T1AlcoveBox, rotAlcove, G4ThreeVector(T1AlcoveOffSetX, T1AlcoveOffSetY, T1AlcoveOffSetZ) ); // openning T3 alcove in the concrete wall G4Box* T3AlcoveBox = new G4Box("T3AlcoveBox", 0.5*m_T3AlcoveLength, 0.5*m_T3AlcoveHeight, m_T3AlcoveWidth); angle = atan(m_T3AlcoveLength/m_T3AlcoveWidth); diag = sqrt(m_T3AlcoveLength*m_T3AlcoveLength + m_T3AlcoveWidth*m_T3AlcoveWidth); G4double T3AlcoveOffSetX = R1AlcoveOffSetX - 0.5*m_R1AlcoveLength - 60.*cm - 0.5*diag*sin(angle-rot) - 0.5*m_T3AlcoveWidth*sin(rot); // G4double T3AlcoveOffSetY = -m_BR2WallOffSetY + m_level3OffSetY - 0.5*m_level3WallHeight+m_level3FloorHeight+0.5*m_T3AlcoveHeight; G4double T3AlcoveOffSetY = alcovesOffSetY + 0.5*m_T3AlcoveHeight; G4double T3AlcoveOffSetZ = m_wallPosZ - 0.5*diag*cos(angle-rot) + 0.5*m_T3AlcoveWidth*cos(rot); rotAlcove = new G4RotationMatrix(); rotAlcove->rotateY(rot); concreteWallBoxFront = new G4SubtractionSolid("concreteWallBoxFront", concreteWallBoxFront, T3AlcoveBox, rotAlcove, G4ThreeVector(T3AlcoveOffSetX, T3AlcoveOffSetY, T3AlcoveOffSetZ) ); // back rectanglular part of the pool wall G4Box* concreteWallBackOutter = new G4Box("concreteWallBackOutter", 0.5*(m_backWallLength + m_backWallWidth), 0.5*m_backWallHeight, waterPoolRadius + m_backWallWidth); G4Box* concreteWallBackInner = new G4Box("concreteWallBackInner", 0.5*(m_backWallLength + m_backWallWidth), 0.5*m_backWallHeight + 5.*mm, waterPoolRadius); G4SubtractionSolid* concreteWallBack = new G4SubtractionSolid("concreteWallBack", concreteWallBackOutter, concreteWallBackInner, 0, G4ThreeVector(-m_backWallWidth, 0., 0.) ); G4UnionSolid* concreteWallBox = new G4UnionSolid("concreteWallBox", concreteWallBoxFront, concreteWallBack, 0, G4ThreeVector(0.5*(m_wallLength + m_backWallLength + m_backWallWidth), 0., -0.5*m_wallWidth - waterPoolRadius) ); // full concrete pool wall construction and location mate = G4Material::GetMaterial("BR2_Concrete"); logBR2ConcreteWall = new G4LogicalVolume(concreteWallBox, mate, "logBR2ConcreteWall", 0, 0, 0); // logBR2ConcreteWall->SetVisAttributes(G4VisAttributes::Invisible); G4VisAttributes* vatConcreteWall= new G4VisAttributes(br2color); vatConcreteWall->SetVisibility(true); vatConcreteWall->SetForceSolid(forceSolid); logBR2ConcreteWall->SetVisAttributes(vatConcreteWall); physBR2ConcreteWall = new G4PVPlacement(0, G4ThreeVector(m_BR2WallOffSetX, m_BR2WallOffSetY, m_BR2WallOffSetZ), "physBR2ConcreteWall", logBR2ConcreteWall, physLab, false, 0); // pool wall equivalent structure for holes in (level 2,3,4) floors and roofs... G4Tubs* poolUWall = new G4Tubs("poolUWall", 0., m_UWallOutterRadius, m_level3FloorHeight, startAngle, endAngle); G4Box* poolWallBox = new G4Box("poolWallBox", 0.5*m_wallLength, m_level3FloorHeight, m_UWallOutterRadius); rotUWall = new G4RotationMatrix(); rotUWall->rotateX(90*deg); G4UnionSolid* poolWall4holes = new G4UnionSolid("poolWall4holes", poolWallBox, poolUWall, rotUWall, G4ThreeVector(-0.5*m_wallLength, 0., 0.) ); poolWall4holes = new G4UnionSolid("poolWall4holes", poolWall4holes, concreteWallBackOutter, 0, G4ThreeVector(0.5*(m_wallLength + m_backWallLength + m_backWallWidth), 0., 0.) ); // pool wall equivalent structure for holes in (level 5,6) floors and roofs... G4Tubs* poolUWall2 = new G4Tubs("poolUWall2", 0., m_UWallOutterRadius - m_wallGroveWidth, m_level3FloorHeight, startAngle, endAngle); G4Box* poolWallBox2 = new G4Box("poolWallBox2", 0.5*m_wallLength, m_level3FloorHeight, m_UWallOutterRadius - m_wallGroveWidth); G4UnionSolid* poolWall4holesSmall = new G4UnionSolid("poolWall4holesSmall", poolWallBox2, poolUWall2, rotUWall, G4ThreeVector(-0.5*m_wallLength, 0., 0.) ); poolWall4holesSmall = new G4UnionSolid("poolWall4holesSmall", poolWall4holesSmall, concreteWallBackOutter, 0, G4ThreeVector(0.5*(m_wallLength + m_backWallLength + m_backWallWidth), 0., 0.) ); // Crane hole for roofs and floors G4double craneHoleOffSetX = -7.*m; G4double craneHoleOffSetZ = 9.*m; G4Box* craneHoleBox = new G4Box("craneHoleBox", 0.5*m_craneHoleLength, 0.5*m_craneHoleWidth, 0.5*m_craneHoleHeight); // X center of cylindrical walls/roofs // distance from the reactor core = 1.98 m G4double CBOffSetX = -1.98*m; //==================================================== // Construct the concrete floor at level 3 //==================================================== // this is the floor where the detector is G4Tubs* level3ExcludeFloor = new G4Tubs("level3ExcludeFloor", 0., m_level3EnforcedFloorRadius, m_level3FloorHeight, 0., 360.*deg); G4Tubs* level3EnforcedFloor = new G4Tubs("level3EnforcedFloor", 0., m_level3EnforcedFloorRadius, 0.5*m_level3FloorHeight, 0., 360.*deg); G4Tubs* level3FloorFull = new G4Tubs("level3FloorFull", 0., m_externalWallRadius, 0.5*m_level3FloorHeight, 0., 360.*deg); G4Tubs* level3GutterU = new G4Tubs("level3GutterU", m_UWallOutterRadius, m_UWallOutterRadius + m_level3GutterWidth, 0.5*m_level3GutterHeight + 0.5*mm, startAngle, endAngle); G4Box* level3GutterBox = new G4Box("level3GutterBox", 0.5*m_wallLength, 0.5*m_level3GutterWidth, 0.5*m_level3GutterHeight + 0.5*mm); G4double level3FloorOffSetX = m_coreCenterPosX + CBOffSetX; G4double level3FloorOffSetY = m_level3OffSetY - 0.5*m_level3WallHeight + 0.5*m_level3FloorHeight; G4double level3FloorOffSetZ = m_coreCenterPosZ; G4RotationMatrix* rotCraneHole = new G4RotationMatrix(); rotCraneHole->rotateZ(50*deg); G4SubtractionSolid* level3Floor = new G4SubtractionSolid("level3Floor", level3FloorFull, craneHoleBox, rotCraneHole, G4ThreeVector(craneHoleOffSetX, craneHoleOffSetZ, 0.) ); level3Floor = new G4SubtractionSolid("level3Floor", level3Floor, level3ExcludeFloor, 0, G4ThreeVector(-CBOffSetX, 0., 0.) ); level3Floor = new G4SubtractionSolid("level3Floor", level3Floor, poolWall4holes, rotUWall, G4ThreeVector(m_BR2WallOffSetX - CBOffSetX, 0., 0.) ); G4SubtractionSolid* level3FloorEnforced = new G4SubtractionSolid("level3FloorEnforced", level3EnforcedFloor, poolWall4holes, rotUWall, G4ThreeVector(m_BR2WallOffSetX, 0., 0.) ); level3FloorEnforced = new G4SubtractionSolid("level3FloorEnforced", level3FloorEnforced, level3GutterU, 0, G4ThreeVector(m_BR2WallOffSetX - 0.5*m_wallLength, 0., 0.5*(m_level3FloorHeight - m_level3GutterHeight) + 0.5*mm ) ); level3FloorEnforced = new G4SubtractionSolid("level3FloorEnforced", level3FloorEnforced, level3GutterBox, 0, G4ThreeVector(m_BR2WallOffSetX, m_UWallOutterRadius + 0.5*m_level3GutterWidth, 0.5*(m_level3FloorHeight - m_level3GutterHeight) + 0.5*mm ) ); level3FloorEnforced = new G4SubtractionSolid("level3FloorEnforced", level3FloorEnforced, level3GutterBox, 0, G4ThreeVector(m_BR2WallOffSetX, -m_UWallOutterRadius - 0.5*m_level3GutterWidth, 0.5*(m_level3FloorHeight - m_level3GutterHeight) + 0.5*mm ) ); mate = G4Material::GetMaterial("G4_CONCRETE"); logBR2Level3Floor = new G4LogicalVolume(level3Floor, mate, "logBR2Level3Floor", 0, 0, 0); // logBR2ConcreteWall->SetVisAttributes(G4VisAttributes::Invisible); G4VisAttributes* vatLevel3Floor = new G4VisAttributes(br2color2); vatLevel3Floor->SetVisibility(true); vatLevel3Floor->SetForceSolid(forceSolid); logBR2Level3Floor->SetVisAttributes(vatLevel3Floor); physBR2Level3Floor = new G4PVPlacement(rotUWall, G4ThreeVector(level3FloorOffSetX, level3FloorOffSetY, level3FloorOffSetZ), "physBR2Level3Floor", logBR2Level3Floor, physLab, false, 0); logBR2Level3FloorEnforced = new G4LogicalVolume(level3FloorEnforced, mate, "logBR2Level3FloorEnforced", 0, 0, 0); // logBR2ConcreteWall->SetVisAttributes(G4VisAttributes::Invisible); G4VisAttributes* vatLevel3FloorEnforced = new G4VisAttributes(red); vatLevel3FloorEnforced->SetVisibility(true); vatLevel3FloorEnforced->SetForceSolid(forceSolid); logBR2Level3FloorEnforced->SetVisAttributes(vatLevel3FloorEnforced); physBR2Level3FloorEnforced = new G4PVPlacement(rotUWall, G4ThreeVector(m_coreCenterPosX, level3FloorOffSetY, level3FloorOffSetZ), "physBR2Level3FloorEnforced", logBR2Level3FloorEnforced, physLab, false, 0); //==================================================== // Construct the concrete floor for level 2 //==================================================== G4double level2FloorOffSetX = level3FloorOffSetX; G4double level2FloorOffSetY = level3FloorOffSetY - 0.5*m_level3FloorHeight - m_level2WallHeight + 0.5*m_level2FloorHeight; G4double level2FloorOffSetZ = level3FloorOffSetZ; G4Tubs* level2FloorFull = new G4Tubs("level2FloorFull", 0., m_externalWallRadius, 0.5*m_level2FloorHeight, 0., 360.*deg); G4SubtractionSolid* level2FloorBox = new G4SubtractionSolid("level2FloorBox", level2FloorFull, craneHoleBox, rotCraneHole, G4ThreeVector(craneHoleOffSetX, craneHoleOffSetZ, 0.) ); level2FloorBox = new G4SubtractionSolid("level2FloorBox", level2FloorBox, poolWall4holes, rotUWall, G4ThreeVector(m_BR2WallOffSetX - CBOffSetX, 0., 0.) ); // mate = G4Material::GetMaterial("G4_CONCRETE"); logBR2Level2Floor = new G4LogicalVolume(level2FloorBox, mate, "logBR2Level2Floor", 0, 0, 0); // logBR2ConcreteWall->SetVisAttributes(G4VisAttributes::Invisible); G4VisAttributes* vatLevel2Floor = new G4VisAttributes(br2color2); vatLevel2Floor->SetVisibility(true); vatLevel2Floor->SetForceSolid(forceSolid); logBR2Level2Floor->SetVisAttributes(vatLevel2Floor); physBR2Level2Floor = new G4PVPlacement(rotUWall, G4ThreeVector(level2FloorOffSetX, level2FloorOffSetY, level2FloorOffSetZ), "physBR2Level2Floor", logBR2Level2Floor, physLab, false, 0); //==================================================== // Construct the concrete floor for level 4 //==================================================== G4double level4FloorOffSetX = level3FloorOffSetX; G4double level4FloorOffSetY = level3FloorOffSetY - 0.5*m_level3FloorHeight + m_level3WallHeight - 0.5*m_level4FloorHeight; G4double level4FloorOffSetZ = level3FloorOffSetZ; G4Tubs* level4FloorFull = new G4Tubs("level4FloorFull", 0., m_externalWallRadius, 0.5*m_level4FloorHeight, 0., 360.*deg); G4Tubs* level4UFloorHoleTube = new G4Tubs("level4UFloorHoleTube", m_UWallOutterRadius + m_level4UFloorWidth, m_UWallOutterRadius + m_level4UFloor2Width, 0.5*m_level4FloorHeight + 0.5*mm, startAngle, endAngle); G4Box* level4FloorBox1 = new G4Box("level4FloorBox1", m_UWallInnerRadius - 0.5*m_R1AlcoveLength - 60.*cm, m_UWallOutterRadius + m_level4UFloor2Width + 0.5*mm, 0.5*m_level4FloorHeight + 0.5*mm); G4SubtractionSolid* level4UFloorHole = new G4SubtractionSolid("level4UFloorHole", level4UFloorHoleTube, level4FloorBox1, 0, G4ThreeVector(0., 0., 0.) ); G4SubtractionSolid* level4FloorCut = new G4SubtractionSolid("level4FloorCut", level4FloorFull, level4UFloorHole, 0, G4ThreeVector(-CBOffSetX - m_level4UFloorWidth, 0., 0.) ); level4FloorCut = new G4SubtractionSolid("level4FloorCut", level4FloorCut, craneHoleBox, rotCraneHole, G4ThreeVector(craneHoleOffSetX, craneHoleOffSetZ, 0.) ); G4SubtractionSolid* level4FloorBox = new G4SubtractionSolid("level4FloorBox", level4FloorCut, poolWall4holes, rotUWall, G4ThreeVector(m_BR2WallOffSetX - CBOffSetX, 0., 0.) ); // mate = G4Material::GetMaterial("G4_CONCRETE"); logBR2Level4Floor = new G4LogicalVolume(level4FloorBox, mate, "logBR2Level4Floor", 0, 0, 0); logBR2Level4Floor->SetVisAttributes(vatLevel3Floor); physBR2Level4Floor = new G4PVPlacement(rotUWall, G4ThreeVector(level4FloorOffSetX, level4FloorOffSetY, level4FloorOffSetZ), "physBR2Level4Floor", logBR2Level4Floor, physLab, false, 0); //==================================================== // Construct the concrete floor for level 5 //==================================================== G4double level5FloorOffSetX = level3FloorOffSetX; G4double level5FloorOffSetY = level4FloorOffSetY + 0.5*m_level4FloorHeight + m_level5WallHeight - 0.5*m_level5FloorHeight; G4double level5FloorOffSetZ = level3FloorOffSetZ; G4Box* level5FloorHole = new G4Box("level5FloorHole", 0.5*m_externalWallRadius, m_externalWallRadius + 0.5*mm, 0.5*m_level5FloorWidth + 0.5*mm); G4Tubs* level5FloorFull = new G4Tubs("level5FloorFull", 0., m_externalWallRadius, 0.5*m_level5FloorHeight, 0., 360.*deg); G4SubtractionSolid* level5FloorCut = new G4SubtractionSolid("level5FloorCut", level5FloorFull, level4UFloorHole, 0, G4ThreeVector(-CBOffSetX - m_level4UFloorWidth, 0., 0.) ); level5FloorCut = new G4SubtractionSolid("level5FloorCut", level5FloorCut, poolWall4holesSmall, rotUWall, G4ThreeVector(m_BR2WallOffSetX - CBOffSetX, 0., 0.) ); level5FloorCut = new G4SubtractionSolid("level5FloorCut", level5FloorCut, craneHoleBox, rotCraneHole, G4ThreeVector(craneHoleOffSetX, craneHoleOffSetZ, 0.) ); G4SubtractionSolid* level5FloorBox = new G4SubtractionSolid("level5FloorBox", level5FloorCut, level5FloorHole, 0, G4ThreeVector(m_level5Floor2Length + 0.5*m_externalWallRadius + 0.5*m_R1AlcoveLength + 60.*cm, 0., 0.) ); logBR2Level5Floor = new G4LogicalVolume(level5FloorBox, mate, "logBR2Level5Floor", 0, 0, 0); logBR2Level5Floor->SetVisAttributes(vatLevel2Floor); physBR2Level5Floor = new G4PVPlacement(rotUWall, G4ThreeVector(level5FloorOffSetX, level5FloorOffSetY, level5FloorOffSetZ), "physBR2Level5Floor", logBR2Level5Floor, physLab, false, 0); //==================================================== // Construct the concrete floor for level 6 //==================================================== /* // level 6 is close completely around the pool // so this block is commented out (I. Pinera, 2017-12-01) G4Box* level6FloorHole = new G4Box("level6FloorHole", 0.5*m_externalWallRadius, 0.5*m_externalWallRadius, 0.5*m_level5FloorWidth + 0.5*mm); G4SubtractionSolid* level6FloorBox = new G4SubtractionSolid("level6FloorBox", level5FloorCut, level6FloorHole, 0, G4ThreeVector(m_level5Floor2Length + 0.5*m_externalWallRadius, m_UWallOutterRadius + m_level4UFloorWidth + 0.5*m_externalWallRadius, 0.) ); level6FloorBox = new G4SubtractionSolid("level6FloorBox", level6FloorBox, level6FloorHole, 0, G4ThreeVector(m_level5Floor2Length + 0.5*m_externalWallRadius, -m_UWallOutterRadius - m_level4UFloorWidth - 0.5*m_externalWallRadius, 0.) ); */ G4SubtractionSolid* level6FloorBox = level5FloorCut; logBR2Level6Floor = new G4LogicalVolume(level6FloorBox, mate, "logBR2Level6Floor", 0, 0, 0); logBR2Level6Floor->SetVisAttributes(vatLevel2Floor); physBR2Level6Floor = new G4PVPlacement(rotUWall, G4ThreeVector(level5FloorOffSetX, level5FloorOffSetY + m_level5WallHeight, level5FloorOffSetZ), "physBR2Level6Floor", logBR2Level6Floor, physLab, false, 0); //======================================================== // Construct the smaller concrete floor for levels 7 and 8 //======================================================== G4double level7FloorOffSetX = level3FloorOffSetX; G4double level7FloorOffSetY = level5FloorOffSetY + 2.*m_level5WallHeight + 0.5*m_level5FloorHeight - 0.5*m_level7FloorHeight; G4double level7FloorOffSetZ = level3FloorOffSetZ; G4double level7FloorInnerRadius = m_UWallOutterRadius + m_level4UFloor2Width; G4Tubs* level7FloorOuter = new G4Tubs("level7FloorOuter", 0., m_externalWallRadius, 0.5*m_level7FloorHeight, 138.*deg, 122.*deg); G4Tubs* level7FloorInner = new G4Tubs("level7FloorInner", 0., level7FloorInnerRadius, m_level7FloorHeight, 138.*deg, 122.*deg); G4SubtractionSolid* level7Floor = new G4SubtractionSolid("level7Floor", level7FloorOuter, level7FloorInner, 0, G4ThreeVector(-0.5*m_R1AlcoveLength - 60.*cm - CBOffSetX, 0., 0.) ); logBR2Level7Floor = new G4LogicalVolume(level7Floor, mate, "logBR2Level7Floor", 0, 0, 0); logBR2Level7Floor->SetVisAttributes(vatLevel2Floor); G4RotationMatrix* rotInternalWall = new G4RotationMatrix(); rotInternalWall->rotateX(90*deg); // rotInternalWall->rotateZ(14*deg); physBR2Level7Floor = new G4PVPlacement(rotInternalWall, G4ThreeVector(level7FloorOffSetX, level7FloorOffSetY, level7FloorOffSetZ), "physBR2Level7Floor", logBR2Level7Floor, physLab, false, 0); physBR2Level8Floor = new G4PVPlacement(rotInternalWall, G4ThreeVector(level7FloorOffSetX, level7FloorOffSetY + m_level7WallHeight, level7FloorOffSetZ), "physBR2Level8Floor", logBR2Level7Floor, physLab, false, 0); //==================================================== // Construct the internal concrete wall //==================================================== // this is the wall of the internal offices on floors 4-6 G4double internalWallRadius = m_UWallOutterRadius + m_level4UFloor2Width - 5.*cm; G4double internalWallHeight = 3.*m_level5WallHeight + m_level4FloorHeight + m_level7WallHeight; G4double internalWallOffSetX = -0.5*m_R1AlcoveLength - 60.*cm; G4double internalWallOffSetY = level4FloorOffSetY - 0.5*m_level4FloorHeight + 0.5*internalWallHeight; G4Tubs* internalWall = new G4Tubs("internalWall", internalWallRadius - m_externalWallThickness, internalWallRadius, 0.5*internalWallHeight, 142.*deg, 115.*deg); // mate = G4Material::GetMaterial("G4_CONCRETE"); logBR2InternalWall = new G4LogicalVolume(internalWall, mate, "logBR2InternalWall", 0, 0, 0); //Color Settings G4VisAttributes* vatInternalWall = new G4VisAttributes(br2color); vatInternalWall->SetVisibility(true); vatInternalWall->SetForceSolid(forceSolid); vatInternalWall->SetForceAuxEdgeVisible(true); logBR2InternalWall->SetVisAttributes(vatInternalWall); rotInternalWall = new G4RotationMatrix(); rotInternalWall->rotateX(90*deg); physBR2InternalWall = new G4PVPlacement(rotInternalWall, G4ThreeVector(internalWallOffSetX, internalWallOffSetY, m_coreCenterPosZ), "physBR2InternalWall", logBR2InternalWall, physLab, false, 0); //==================================================== // Construct the C9 pillar on level 3 //==================================================== G4double pillarC9Height = m_level3WallHeight - 2.*m_level3FloorHeight; G4double pillarC9Width = 60.*cm; G4double pillarC9OffSetX = CBOffSetX - pillarC9Width; G4double pillarC9OffSetY = level3FloorOffSetY + 0.5*m_level3FloorHeight + 0.5*pillarC9Height; G4double pillarC9OffSetZ = 11.*m + 0.5*pillarC9Width; G4Box* pillarC9Box = new G4Box("pillarC9Box", 0.5*pillarC9Width, 0.5*pillarC9Height, 0.5*pillarC9Width); logBR2PillarC9 = new G4LogicalVolume(pillarC9Box, mate, "logBR2PillarC9", 0, 0, 0); //Color Settings G4VisAttributes* vatPillarC9 = new G4VisAttributes(br2color); vatPillarC9->SetVisibility(true); vatPillarC9->SetForceSolid(forceSolid); logBR2PillarC9->SetVisAttributes(vatPillarC9); G4RotationMatrix* rotPillarC9 = new G4RotationMatrix(); rotPillarC9->rotateY(10*deg); physBR2PillarC9 = new G4PVPlacement(rotPillarC9, G4ThreeVector(m_coreCenterPosX + pillarC9OffSetX, pillarC9OffSetY, m_coreCenterPosZ + pillarC9OffSetZ), "physBR2PillarC9", logBR2PillarC9, physLab, false, 0); //==================================================== // Construct the external concrete wall //==================================================== // this is the cylindrical inner layer of the CB G4double externalWallOffSetY = 0.5*m_externalWallHeight - 10.67*m + m_BR2OffSetY; G4Tubs* externalWalloutter = new G4Tubs("externalWalloutter", 0., m_externalWallRadius + m_externalWallThickness, 0.5*m_externalWallHeight, 0., 360.*deg); G4Tubs* externalWallinner = new G4Tubs("externalWallinner", 0., m_externalWallRadius, 0.5*m_externalWallHeight, 0., 360.*deg); G4SubtractionSolid* externalWall = new G4SubtractionSolid("externalWall", externalWalloutter, externalWallinner, 0, G4ThreeVector(0., 0., m_externalWallThickness) ); // mate = G4Material::GetMaterial("G4_CONCRETE"); logBR2ExternalWall = new G4LogicalVolume(externalWall, mate, "logBR2ExternalWall", 0, 0, 0); //Color Settings G4VisAttributes* vatExternalWall = new G4VisAttributes(br2color); vatExternalWall->SetVisibility(true); vatExternalWall->SetForceSolid(forceSolid); // vatExternalWall->SetForceAuxEdgeVisible(true); logBR2ExternalWall->SetVisAttributes(vatExternalWall); physBR2ExternalWall = new G4PVPlacement(rotUWall, G4ThreeVector(m_coreCenterPosX + CBOffSetX, externalWallOffSetY, m_coreCenterPosZ), "physBR2ExternalWall", logBR2ExternalWall, physLab, false, 0); //==================================================== // Construct the external steel CB //==================================================== // this is the cylindrical outer layer of the CB G4double CBOffSetY = externalWallOffSetY; G4Tubs* CBOutter = new G4Tubs("CBOutter", 0., m_CBOutterRadius, 0.5*m_CBHeight, 0., 360.*deg); G4Tubs* CBInner = new G4Tubs("CBInner", 0., m_CBOutterRadius - m_CBThickness, 0.5*m_CBHeight + 1.*cm, 0., 360.*deg); G4SubtractionSolid* CB = new G4SubtractionSolid("CB", CBOutter, CBInner, 0, G4ThreeVector(0., 0., 0.) ); mate = G4Material::GetMaterial("G4_STAINLESS-STEEL"); /// !!! THIS HAS TO BE CHECKED !!! logBR2CB = new G4LogicalVolume(CB, mate, "logBR2CB", 0, 0, 0); //Color Settings G4VisAttributes* vatCB = new G4VisAttributes(dgrey); vatCB->SetVisibility(true); vatCB->SetForceSolid(forceSolid); // vatCB->SetForceAuxEdgeVisible(true); logBR2CB->SetVisAttributes(vatCB); physBR2CB = new G4PVPlacement(rotUWall, G4ThreeVector(m_coreCenterPosX + CBOffSetX, CBOffSetY, m_coreCenterPosZ), "physBR2CB", logBR2CB, physLab, false, 0); //==================================================== // Construct the external steel top dome //==================================================== // this is the semi-eliptical top dome of the CB G4double CBDomeOffSetY = CBOffSetY + 0.5*m_CBHeight; G4Ellipsoid* CBDomeOutter = new G4Ellipsoid("CBDomeOutter", m_CBDomeOutterRadius, m_CBDomeOutterRadius, m_CBDomeHeight, 0., 2.*m_CBDomeHeight); G4Ellipsoid* CBDomeInner = new G4Ellipsoid("CBDomeInner", m_CBDomeOutterRadius - m_CBDomeThickness, m_CBDomeOutterRadius - m_CBDomeThickness, m_CBDomeHeight - m_CBDomeThickness, 0., 0.); G4SubtractionSolid* CBDome = new G4SubtractionSolid("CBDome", CBDomeOutter, CBDomeInner, 0, G4ThreeVector(0., 0., 0.) ); logBR2CBDome = new G4LogicalVolume(CBDome, mate, "logBR2CBDome", 0, 0, 0); //Color Settings logBR2CBDome->SetVisAttributes(vatCB); physBR2CBDome = new G4PVPlacement(rotUWall, G4ThreeVector(m_coreCenterPosX + CBOffSetX, CBDomeOffSetY, m_coreCenterPosZ), "physBR2CBDome", logBR2CBDome, physLab, false, 0); // print the center location of the full CB G4cout << G4endl << "==========================================" << G4endl; G4cout << "center location of the full CB: "; G4cout << m_coreCenterPosX + CBOffSetX << ", "; G4cout << CBOffSetY + 0.5*m_CBDomeHeight << ", "; G4cout << m_coreCenterPosZ << G4endl; G4cout << "==========================================" << G4endl << G4endl; //==================================================== // Construct the Lead wall inside the R1 alcove //==================================================== G4double dinR1 = 20.*cm; // offSet inside R1 G4double leadR1OffSetX = m_BR2WallOffSetX + R1AlcoveOffSetX; G4double leadR1OffSetY = level3FloorOffSetY + 0.5*m_level3FloorHeight + 0.5*m_leadR1Height; G4double leadR1OffSetZ = m_BR2WallOffSetZ + m_wallPosZ - 0.5*m_leadR1Width - dinR1; G4Box* leadR1Box = new G4Box("leadR1Box", 0.5*m_leadR1Length, 0.5*m_leadR1Height, 0.5*m_leadR1Width); mate = G4Material::GetMaterial("Lead"); logBR2LeadWallR1 = new G4LogicalVolume(leadR1Box, mate, "logBR2LeadWallR1", 0, 0, 0); // logBR2ConcreteWall->SetVisAttributes(G4VisAttributes::Invisible); G4VisAttributes* vatLeadWall = new G4VisAttributes(black); vatLeadWall->SetVisibility(true); vatLeadWall->SetForceSolid(forceSolid); logBR2LeadWallR1->SetVisAttributes(vatLeadWall); physBR2LeadWallR1 = new G4PVPlacement(0, G4ThreeVector(leadR1OffSetX, leadR1OffSetY, leadR1OffSetZ), "physBR2LeadWallR1", logBR2LeadWallR1, physLab, false, 0); //==================================================== // Construct the Lead wall inside the T2 alcove //==================================================== G4double dinT2 = 43.*cm; // offSet inside T2 G4double delX = -(0.5*m_leadT2Width + dinT2)*sin(rot); G4double delZ = -(0.5*m_leadT2Width + dinT2)*cos(rot); G4double leadT2OffSetX = m_BR2WallOffSetX + T2AlcoveOffSetX + delX; G4double leadT2OffSetY = m_BR2WallOffSetY + T2AlcoveOffSetY; G4double leadT2OffSetZ = m_BR2WallOffSetZ + T2AlcoveOffSetZ + delZ; G4Box* leadT2Box = new G4Box("leadT2Box", 0.5*m_leadT2Length, 0.5*m_leadT2Height, 0.5*m_leadT2Width); rotAlcove = new G4RotationMatrix(); rotAlcove->rotateY(-rot); logBR2LeadWallT2 = new G4LogicalVolume(leadT2Box, mate, "logBR2LeadWallT2", 0, 0, 0); logBR2LeadWallT2->SetVisAttributes(vatLeadWall); physBR2LeadWallT2 = new G4PVPlacement(rotAlcove, G4ThreeVector(leadT2OffSetX, leadT2OffSetY, leadT2OffSetZ), "physBR2LeadWallT2", logBR2LeadWallT2, physLab, false, 0); //==================================================== // Construct the Lead wall inside the T3 alcove //==================================================== G4double dinT3 = 45.*cm; // offSet inside T3 delX = (0.5*m_leadT2Width + dinT3)*sin(rot); delZ = -(0.5*m_leadT2Width + dinT3)*cos(rot); G4double leadT3OffSetX = m_BR2WallOffSetX + T3AlcoveOffSetX + delX; G4double leadT3OffSetY = m_BR2WallOffSetY + T3AlcoveOffSetY; G4double leadT3OffSetZ = m_BR2WallOffSetZ + T3AlcoveOffSetZ + delZ; G4Box* leadT3Box = new G4Box("leadT3Box", 0.5*m_leadT3Length, 0.5*m_leadT3Height, 0.5*m_leadT3Width); rotAlcove = new G4RotationMatrix(); rotAlcove->rotateY(rot); logBR2LeadWallT3 = new G4LogicalVolume(leadT3Box, mate, "logBR2LeadWallT3", 0, 0, 0); logBR2LeadWallT3->SetVisAttributes(vatLeadWall); physBR2LeadWallT3 = new G4PVPlacement(rotAlcove, G4ThreeVector(leadT3OffSetX, leadT3OffSetY, leadT3OffSetZ), "physBR2LeadWallT3", logBR2LeadWallT3, physLab, false, 0); //==================================================== // Construct the Al plate in front of R1 alcove //==================================================== // for positioning the sources (NOT present for Phase1) G4double AlPlateOffSetX = m_BR2WallOffSetX + R1AlcoveOffSetX; G4double AlPlateOffSetY = 0.; G4double AlPlateOffSetZ = m_BR2WallOffSetZ + m_wallPosZ + 0.5*m_AlWidth; G4Box* AlPlateBox = new G4Box("AlPlateBox", 0.5*m_AlLength, 0.5*m_AlHeight, 0.5*m_AlWidth); if( m_constructAlPlate ) { mate = G4Material::GetMaterial("Aluminium"); logBR2AlWall = new G4LogicalVolume(AlPlateBox, mate, "logBR2AlWall", 0, 0, 0); // logBR2ConcreteWall->SetVisAttributes(G4VisAttributes::Invisible); G4VisAttributes* vatAlWall = new G4VisAttributes(grey); vatAlWall->SetVisibility(true); vatAlWall->SetForceSolid(forceSolid); logBR2AlWall->SetVisAttributes(vatAlWall); physBR2AlWall = new G4PVPlacement(0, G4ThreeVector(AlPlateOffSetX, AlPlateOffSetY, AlPlateOffSetZ), "physBR2AlWall", logBR2AlWall, physLab, false, 0); } //==================================================== // Construct the paraffin blocks in front of T3 alcove //==================================================== // (THIS IS OPTIONAL, IF NEEDED IT MUST BE SET ON THE INPUT MACRO) G4SubtractionSolid* paraffinBlockBox; if( m_constructParaffinBlocks ) { G4double paraffinBlockPosX = m_BR2WallOffSetX - 0.5*m_wallLength - 0.5*m_paraffinBlockLength + m_paraffinBlockGroove; G4double paraffinBlockPosY = level3FloorOffSetY + 0.5*m_level3FloorHeight + 0.5*m_paraffinBlockHeight; // G4double paraffinBlockPosY = alcovesOffSetY + 0.5*m_paraffinBlockHeight; G4double paraffinBlockPosZ = m_BR2WallOffSetZ + m_wallPosZ + 0.5*m_paraffinBlockWidth; G4Box* paraffinBlockBox0 = new G4Box("paraffinBlockBox0", 0.5*m_paraffinBlockLength, 0.5*m_paraffinBlockHeight, 0.5*m_paraffinBlockWidth); G4Box* paraffinBlockGroove = new G4Box("paraffinBlockGroove", 0.5*m_paraffinBlockGroove + 1.*mm, 0.5*m_paraffinBlockHeight + 1.*mm, 0.5*m_paraffinBlockGroove + 1.*mm); paraffinBlockBox = new G4SubtractionSolid("paraffinBlockBox", paraffinBlockBox0, paraffinBlockGroove, 0, G4ThreeVector(0.5*(m_paraffinBlockLength - m_paraffinBlockGroove) + 1.*mm, 0., 0.5*(m_paraffinBlockWidth - m_paraffinBlockGroove) + 1.*mm) ); paraffinBlockBox = new G4SubtractionSolid("paraffinBlockBox", paraffinBlockBox, paraffinBlockGroove, 0, G4ThreeVector(-0.5*(m_paraffinBlockLength - m_paraffinBlockGroove) - 1.*mm, 0., 0.5*(m_paraffinBlockWidth - m_paraffinBlockGroove) + 1.*mm) ); mate = G4Material::GetMaterial("G4_PARAFFIN"); logBR2ParaffinBlock = new G4LogicalVolume(paraffinBlockBox, mate, "logBR2ParaffinBlock", 0, 0, 0); G4VisAttributes* vatParaffinBlock = new G4VisAttributes(yellow); vatParaffinBlock->SetVisibility(true); vatParaffinBlock->SetForceSolid(forceSolid); logBR2ParaffinBlock->SetVisAttributes(vatParaffinBlock); G4RotationMatrix* rotParaffinBlock = new G4RotationMatrix(); rotParaffinBlock->rotateY(5*deg); physBR2ParaffinBlock = new G4PVPlacement(rotParaffinBlock, G4ThreeVector(paraffinBlockPosX, paraffinBlockPosY, paraffinBlockPosZ), "physBR2ParaffinBlock", logBR2ParaffinBlock, physLab, false, 0); } // source volume (it is just for visualization purposes) --> !!! OUTDATED !!! // G4Tubs* Source = new G4Tubs("Source",0,0.5*1.*cm,0.5*5.*mm,0,360.*deg); // mate = G4Material::GetMaterial("Air"); // G4LogicalVolume* logBR2Source = new G4LogicalVolume(Source, mate, "logBR2Source",0,0,0); // //Color Settings // G4VisAttributes* vatSource= new G4VisAttributes(red); // vatSource->SetVisibility(true); // vatSource->SetForceSolid(forceSolid); // logBR2Source->SetVisAttributes(vatSource); // // source at Pos 1 // G4VPhysicalVolume* physSource = new G4PVPlacement(0, //// G4ThreeVector(0.,0.,-SourceDistance + 0.5*5.*mm), // G4ThreeVector(0.,0.,-54.725*cm + 0.5*5.*mm), // logBR2Source, // "physBR2Source", // logBR2Lab, // false, // 0); // // source at Pos 2 // physSource = new G4PVPlacement(0, // G4ThreeVector(0.,0.,98.775*cm), // logBR2Source, // "physBR2Source", // logBR2Lab, // false, // 0); // box for cosmics simulation, only for visualization!!! --> !!! OUTDATED !!! // G4Box* cosmics_box1 = new G4Box("cosmics_box1",0.5*6.8*m,0.5*6.8*m,0.5*6.45*m); // G4Box* cosmics_box2 = new G4Box("cosmics_box2",0.5*20.8*m,0.5*30.8*m,0.5*30.45*m); // G4Box* cosmics_box3 = new G4Box("cosmics_box3",0.5*40.8*m,0.5*60.8*m,0.5*60.45*m); // mate = G4Material::GetMaterial("Air"); // G4LogicalVolume* logBR2CosmicsBox1 = new G4LogicalVolume(cosmics_box1, mate, "logBR2CosmicsBox1",0,0,0); // G4VPhysicalVolume* physCosmicsBox1= new G4PVPlacement(0,G4ThreeVector(0,0,0), "physBR2CosmicsBox1",logCosmicsBox1,physLab,false,0); // G4LogicalVolume* logBR2CosmicsBox2 = new G4LogicalVolume(cosmics_box2, mate, "logBR2CosmicsBox2",0,0,0); // G4VPhysicalVolume* physCosmicsBox2= new G4PVPlacement(0,G4ThreeVector(0,0,0), "physBR2CosmicsBox2",logCosmicsBox2,physLab,false,0); // G4LogicalVolume* logBR2CosmicsBox3 = new G4LogicalVolume(cosmics_box3, mate, "logBR2CosmicsBox3",0,0,0); // G4VPhysicalVolume* physCosmicsBox3= new G4PVPlacement(0,G4ThreeVector(0,0,0), "physBR2CosmicsBox3",logCosmicsBox3,physLab,false,0); if( m_verboseLevel > 0 ) { G4float reactorCore_mass = logBR2ReactorCore->GetMass()/g; G4float reactorCore_vol = reactorCore->GetCubicVolume()/cm3; G4float waterPool_mass = logBR2WaterPool->GetMass()/g; G4float waterPool_vol = waterPoolBox->GetCubicVolume()/cm3; G4float concreteWall_mass = logBR2ConcreteWall->GetMass()/g; G4float concreteWall_vol = concreteWallBox->GetCubicVolume()/cm3; G4float level2Floor_mass = logBR2Level2Floor->GetMass()/g; G4float level2Floor_vol = level2FloorBox->GetCubicVolume()/cm3; G4float level3Floor_mass = logBR2Level3Floor->GetMass()/g; G4float level3Floor_vol = level3Floor->GetCubicVolume()/cm3; G4float level4Floor_mass = logBR2Level4Floor->GetMass()/g; G4float level4Floor_vol = level4FloorBox->GetCubicVolume()/cm3; G4float level5Floor_mass = logBR2Level5Floor->GetMass()/g; G4float level5Floor_vol = level5FloorBox->GetCubicVolume()/cm3; G4float level6Floor_mass = logBR2Level6Floor->GetMass()/g; G4float level6Floor_vol = level6FloorBox->GetCubicVolume()/cm3; G4float level7Floor_mass = logBR2Level7Floor->GetMass()/g; G4float level7Floor_vol = level7Floor->GetCubicVolume()/cm3; G4float level8Floor_mass = level7Floor_mass; G4float level8Floor_vol = level7Floor_vol; G4float concreteInternalWall_mass = logBR2InternalWall->GetMass()/g; G4float concreteInternalWall_vol = internalWall->GetCubicVolume()/cm3; G4float concreteExternalWall_mass = logBR2ExternalWall->GetMass()/g; G4float concreteExternalWall_vol = externalWall->GetCubicVolume()/cm3; G4float pillarC9_mass = logBR2PillarC9->GetMass()/g; G4float pillarC9_vol = pillarC9Box->GetCubicVolume()/cm3; G4float steelCB_mass = logBR2CB->GetMass()/g; G4float steelCB_vol = CB->GetCubicVolume()/cm3; G4float domeCB_mass = logBR2CBDome->GetMass()/g; G4float domeCB_vol = CBDome->GetCubicVolume()/cm3; G4float leadR1Wall_mass = logBR2LeadWallR1->GetMass()/g; G4float leadR1Wall_vol = leadR1Box->GetCubicVolume()/cm3; G4float leadT2Wall_mass = logBR2LeadWallT2->GetMass()/g; G4float leadT2Wall_vol = leadT2Box->GetCubicVolume()/cm3; G4float leadT3Wall_mass = logBR2LeadWallT3->GetMass()/g; G4float leadT3Wall_vol = leadT3Box->GetCubicVolume()/cm3; G4float total_mass = reactorCore_mass + waterPool_mass + concreteWall_mass + level2Floor_mass + level3Floor_mass + level4Floor_mass + level5Floor_mass + level6Floor_mass + level7Floor_mass + level8Floor_mass + concreteInternalWall_mass + concreteExternalWall_mass + pillarC9_mass + steelCB_mass + domeCB_mass + leadR1Wall_mass + leadT2Wall_mass + leadT3Wall_mass; G4float total_vol = reactorCore_vol + waterPool_vol + concreteWall_vol + level2Floor_vol + level3Floor_vol + level4Floor_vol + level5Floor_vol + level6Floor_vol + level7Floor_vol + level8Floor_vol + concreteInternalWall_vol + concreteExternalWall_vol + pillarC9_vol + steelCB_vol + domeCB_vol + leadR1Wall_vol + leadT2Wall_vol + leadT3Wall_vol; G4cout << "**************VOLUME MASS****************" << G4endl; G4cout << " part:\t mass (g)\t volume (cm^3)" << G4endl; G4cout << " reactor core: " << reactorCore_mass << ", \t" << reactorCore_vol << G4endl; G4cout << " water pool: " << waterPool_mass << ", \t" << waterPool_vol << G4endl; G4cout << " concrete wall: " << concreteWall_mass << ", \t" << concreteWall_vol << G4endl; G4cout << " level 2 floor: " << level2Floor_mass << ", \t" << level2Floor_vol << G4endl; G4cout << " level 3 floor: " << level3Floor_mass << ", \t" << level3Floor_vol << G4endl; G4cout << " level 4 floor: " << level4Floor_mass << ", \t" << level4Floor_vol << G4endl; G4cout << " level 5 floor: " << level5Floor_mass << ", \t" << level5Floor_vol << G4endl; G4cout << " level 6 floor: " << level6Floor_mass << ", \t" << level6Floor_vol << G4endl; G4cout << " level 7 floor: " << level7Floor_mass << ", \t" << level7Floor_vol << G4endl; G4cout << " level 8 floor: " << level8Floor_mass << ", \t" << level8Floor_vol << G4endl; G4cout << " pillar C9: " << pillarC9_mass << ", \t" << pillarC9_vol << G4endl; G4cout << "concrete internal wall: " << concreteInternalWall_mass << ", \t" << concreteInternalWall_vol << G4endl; G4cout << "concrete external wall: " << concreteExternalWall_mass << ", \t" << concreteExternalWall_vol << G4endl; G4cout << " external steel CB: " << steelCB_mass << ", \t" << steelCB_vol << G4endl; G4cout << " top CB dome: " << domeCB_mass << ", \t" << domeCB_vol << G4endl; G4cout << " Lead wall in R1: " << leadR1Wall_mass << ", \t" << leadR1Wall_vol << G4endl; G4cout << " Lead wall in T2: " << leadT2Wall_mass << ", \t" << leadT2Wall_vol << G4endl; G4cout << " Lead wall in T3: " << leadT3Wall_mass << ", \t" << leadT3Wall_vol << G4endl; if(m_constructAlPlate) { G4float AlPlate_mass = logBR2AlWall->GetMass()/g; G4float AlPlate_vol = AlPlateBox->GetCubicVolume()/cm3; G4cout << " Al plate: " << AlPlate_mass << ", \t" << AlPlate_vol << G4endl; total_mass += AlPlate_mass; total_vol += AlPlate_vol; } if(m_constructParaffinBlocks) { G4float paraffinBlock_mass = logBR2ParaffinBlock->GetMass()/g; G4float paraffinBlock_vol = paraffinBlockBox->GetCubicVolume()/cm3; G4cout << " Paraffin Blocks: " << paraffinBlock_mass << ", \t" << paraffinBlock_vol << G4endl; total_mass += paraffinBlock_mass; total_vol += paraffinBlock_vol; } G4cout << "-----------------------------------------" << G4endl; G4cout << " ALL BR2 total: " << total_mass << ", \t" << total_vol << G4endl; G4cout << "**********END VOLUME MASS****************" << G4endl; } }