/** * @file Phase1ContainerISOFrame.cc * @author Ibrahin Pinera * @date 2016 SoLid - University of Antwerp */ #include "SolidMaterials.hh" #include "Phase1ContainerISOFrame.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 "G4PVPlacement.hh" #include "G4UnitsTable.hh" #include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" Phase1ContainerISOFrame::Phase1ContainerISOFrame(G4int verboseLevel) { m_verboseLevel = verboseLevel; m_outerLength = 2438.0*mm; m_outerHeight = 2591.0*mm; m_outerWidth = 3800.0*mm; m_floor_Thickness = 3.*mm; m_rollershutterDoor_Thickness = 2.*mm; m_wallsroof_Thickness = 4.76*mm; m_verPostHeight = m_outerHeight; m_verPostCornerHeight = 120.7*mm; m_verPostThickness = 6.35*mm; m_backPostLength = 158.8*mm; m_backPostWidth = 177.8*mm; m_bottomPostLength = m_outerLength - 2.*m_backPostLength; m_bottomPostHeight = 146.*mm; m_bottomPostWidth = 57.1*mm; m_topFrontPostLength = m_bottomPostLength; m_topFrontPostHeight = m_bottomPostHeight; m_topFrontPostWidth = 114.3*mm; m_topBackPostLength = m_bottomPostLength; m_topBackPostHeight = m_bottomPostWidth; m_topBackPostWidth = m_bottomPostWidth; m_frontbackTopGap = m_verPostThickness; m_bottomGap = 2.*m_frontbackTopGap; m_sideTopGap = 2.*m_bottomGap; m_sideStructLength = 57.2*mm; m_sideStructHeight = m_verPostHeight - m_bottomGap - m_sideTopGap; m_sideStructWidth = m_outerWidth - 2.*m_backPostWidth; m_backWallLength = m_bottomPostLength; m_backWallHeight = m_verPostHeight - m_bottomGap - m_frontbackTopGap - m_topBackPostHeight - m_bottomPostHeight; m_backWallWidth = m_wallsroof_Thickness; m_sideWallLength = m_wallsroof_Thickness; m_sideWallHeight = m_sideStructHeight - m_sideStructLength - m_bottomPostHeight; m_sideWallWidth = m_sideStructWidth - (m_bottomPostWidth - m_verPostThickness); m_doorLength = m_outerLength - 2.*m_verPostThickness; m_doorHeight = m_verPostHeight - m_verPostCornerHeight - m_sideTopGap; m_doorWidth = m_rollershutterDoor_Thickness; m_floorLength = m_outerLength - 2.*m_sideStructLength; m_floorWidth = m_outerWidth - 2.*m_backPostWidth; m_floorBarLength = m_floorLength; m_floorBarHeight = 105.*mm; m_floorBarWidth = m_bottomPostWidth - m_verPostThickness; m_floorBarGap = 232.*mm; // m_roofLength = m_outerLength - 2.*m_verPostThickness; m_roofLength = m_outerLength - 2.*m_sideStructLength; m_roofWidth = m_outerWidth - m_bottomPostWidth - m_backPostWidth + 2.*m_frontbackTopGap; m_innerLength = m_outerLength - 2.*m_sideStructLength; m_innerHeight = m_outerHeight - m_verPostCornerHeight - m_sideTopGap; m_innerWidth = m_roofWidth; m_innerOffSetX = 0.; m_innerOffSetY = 0.5*(-m_outerHeight + m_innerHeight) + m_verPostCornerHeight; m_innerOffSetZ = 0.5*(-m_outerWidth + m_innerWidth) + m_bottomPostWidth; m_topPatchPanelHeight = 420.*mm; m_topPatchPanelWidth = 594.*mm; m_bottomPatchPanelHeight = 260.*mm; m_bottomPatchPanelWidth = 360.*mm; m_offSetX = -0.5*m_outerLength + m_sideStructLength; // inner of -X side wall // m_offSetX = -0.5*m_outerLength; // outer of -X side of frame m_offSetY = -0.5*m_outerHeight; // outside bottom of frame m_offSetZ = -0.5*m_outerWidth; // outside back of frame if( m_verboseLevel > 0 ) { G4cout << "==============================================" << G4endl; G4cout << "external dimensions of the Container ISO Frame: "; G4cout << m_outerLength << " x " << m_outerHeight << " x " << m_outerWidth << G4endl; G4cout << "internal dimensions of the Container ISO Frame: "; G4cout << m_innerLength << " x " << m_innerHeight << " x " << m_innerWidth << G4endl; G4cout << "OffSets of the inner space: "; G4cout << m_innerOffSetX << " x " << m_innerOffSetY << " x " << m_innerOffSetZ << G4endl; G4cout << "==============================================" << G4endl; } } Phase1ContainerISOFrame::~Phase1ContainerISOFrame() { } G4LogicalVolume *Phase1ContainerISOFrame::ISOFrameConstruction() { 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 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.0, .75) ; G4Colour black (0.0, 0.0, 0.0) ; G4Colour green (0.0, 1.0, 0.0) ; G4Colour lgreen (0.0, .75, 0.0) ; // G4bool forceSolid = false; G4bool forceSolid = true; // G4bool visibility = false; G4bool visibility = true; G4double xPos, yPos, zPos; // construct Container ISO frame box G4Box* isoBoxFull_outer = new G4Box("isoBoxFull_outer", 0.5*m_outerLength, 0.5*m_outerHeight, 0.5*m_outerWidth); G4Box* isoBoxFull_inner = new G4Box("isoBoxFull_inner", 0.5*m_innerLength, 0.5*m_innerHeight, 0.5*m_innerWidth); G4SubtractionSolid* isoBoxFull = new G4SubtractionSolid("isoBoxFull", isoBoxFull_outer, isoBoxFull_inner, 0, G4ThreeVector(m_innerOffSetX, m_innerOffSetY, m_innerOffSetZ)); G4double isoBoxBottomLength = m_outerLength - 2.*m_backPostLength; G4double isoBoxBottomHeight = m_verPostCornerHeight - m_floorBarHeight - m_floor_Thickness; G4Box* isoBoxBottom = new G4Box("isoBoxBottom", 0.5*isoBoxBottomLength, 0.5*isoBoxBottomHeight, 0.5*m_outerWidth+0.5*mm); isoBoxFull = new G4SubtractionSolid("isoBoxFull", isoBoxFull, isoBoxBottom, 0, G4ThreeVector(0., 0.5*(-m_outerHeight + isoBoxBottomHeight), 0.)); G4double isoBoxTopLength = isoBoxBottomLength; G4double isoBoxTopHeight = m_frontbackTopGap; G4Box* isoBoxTop = new G4Box("isoBoxTop", 0.5*isoBoxTopLength, 0.5*isoBoxTopHeight, 0.5*m_outerWidth+0.5*mm); isoBoxFull = new G4SubtractionSolid("isoBoxFull", isoBoxFull, isoBoxTop, 0, G4ThreeVector(0., 0.5*(m_outerHeight - isoBoxTopHeight), 0.)); G4double isoBoxBackLength = isoBoxBottomLength; G4double isoBoxBackWidth = m_topBackPostWidth - m_backWallWidth; G4Box* isoBoxBack = new G4Box("isoBoxBack", 0.5*isoBoxBackLength, 0.5*m_backWallHeight, 0.5*isoBoxBackWidth+0.5*mm); isoBoxFull = new G4SubtractionSolid("isoBoxFull", isoBoxFull, isoBoxBack, 0, G4ThreeVector(0., 0.5*(m_outerHeight - m_backWallHeight) - m_frontbackTopGap - m_topBackPostHeight, 0.5*(-m_outerWidth + isoBoxBackWidth)-0.5*mm)); mate = G4Material::GetMaterial("Air"); logISOFrame = new G4LogicalVolume(isoBoxFull, mate, "logISOFrame", 0, 0, 0); logISOFrame->SetVisAttributes(G4VisAttributes::Invisible); // vertical back posts G4Box* verPostBox = new G4Box("verPostBox", 0.5*m_backPostLength, 0.5*m_verPostHeight, 0.5*m_backPostWidth); G4Box* backPostBox1 = new G4Box("backPostBox1", 0.5*m_backPostLength, 0.5*(m_verPostHeight - m_verPostCornerHeight - m_sideTopGap + m_wallsroof_Thickness), 0.5*m_backPostWidth); G4Box* backPostBox2 = new G4Box("backPostBox2", 0.5*m_backPostLength - m_verPostThickness, 0.5*(m_verPostHeight - m_verPostCornerHeight - m_sideTopGap + m_wallsroof_Thickness), 0.5*m_backPostWidth - m_verPostThickness); xPos = m_sideStructLength; yPos = 0.5*(m_verPostCornerHeight - m_sideTopGap + m_wallsroof_Thickness); zPos = m_bottomPostWidth; G4SubtractionSolid* backPostLeft = new G4SubtractionSolid("backPostLeft", verPostBox, backPostBox1, 0, G4ThreeVector(xPos, yPos, zPos)); backPostLeft = new G4SubtractionSolid("backPostLeft", backPostLeft, backPostBox2, 0, G4ThreeVector(0., yPos, 0.)); G4SubtractionSolid* backPostRight = new G4SubtractionSolid("backPostRight", verPostBox, backPostBox1, 0, G4ThreeVector(-xPos, yPos, zPos)); backPostRight = new G4SubtractionSolid("backPostRight", backPostRight, backPostBox2, 0, G4ThreeVector(0., yPos, 0.)); // vertical front posts G4Box* frontPostBox = new G4Box("frontPostBox", 0.5*m_backPostLength, 0.5*(m_verPostHeight - m_verPostCornerHeight - m_sideTopGap + m_wallsroof_Thickness), 0.5*m_backPostWidth+0.5*mm); G4SubtractionSolid* frontPost = new G4SubtractionSolid("frontPost", verPostBox, frontPostBox, 0, G4ThreeVector(m_verPostThickness, yPos, 0.)); // use EN8 steel for entire ISO frame mate = G4Material::GetMaterial("Steel_EN8"); G4VisAttributes* vatSteel = new G4VisAttributes(lblue); vatSteel->SetVisibility(visibility); vatSteel->SetForceSolid(forceSolid); // place the back vertical posts G4LogicalVolume* logBackPostLeft = new G4LogicalVolume(backPostLeft, mate, "logBackPostLeft", 0, 0, 0); logBackPostLeft->SetVisAttributes(vatSteel); G4LogicalVolume* logBackPostRight = new G4LogicalVolume(backPostRight, mate, "logBackPostRight", 0, 0, 0); logBackPostRight->SetVisAttributes(vatSteel); xPos = 0.5*(m_outerLength - m_backPostLength); yPos = 0.; zPos = 0.5*(m_outerWidth - m_backPostWidth); new G4PVPlacement(0, G4ThreeVector(-xPos, yPos, -zPos), logBackPostLeft, "physISOFrameBackPost", logISOFrame, false, 0); new G4PVPlacement(0, G4ThreeVector(xPos, yPos, -zPos), logBackPostRight, "physISOFrameBackPost", logISOFrame, false, 0); // place the front vertical posts G4LogicalVolume* logFrontPost = new G4LogicalVolume(frontPost, mate, "logFrontPost", 0, 0, 0); logFrontPost->SetVisAttributes(vatSteel); G4RotationMatrix* rot = new G4RotationMatrix(); rot->rotateY(180*deg); new G4PVPlacement(0, G4ThreeVector(-xPos, yPos, zPos), logFrontPost, "physISOFrameFrontPost", logISOFrame, false, 0); new G4PVPlacement(rot, G4ThreeVector(xPos, yPos, zPos), logFrontPost, "physISOFrameFrontPost", logISOFrame, false, 0); // horizontal top back post G4Box* topBackPost = new G4Box("topBackPost", 0.5*m_topBackPostLength, 0.5*m_topBackPostHeight, 0.5*m_topBackPostWidth); // place the back top post G4LogicalVolume* logTopBackPost = new G4LogicalVolume(topBackPost, mate, "logTopBackPost", 0, 0, 0); logTopBackPost->SetVisAttributes(vatSteel); xPos = 0.; yPos = 0.5*(m_outerHeight - m_topBackPostHeight) - m_frontbackTopGap; zPos = 0.5*(-m_outerWidth + m_topBackPostWidth); new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logTopBackPost, "physISOFrameTopBackPost", logISOFrame, false, 0); // horizontal bottom post (front and back) G4Box* bottomPost = new G4Box("bottomPost", 0.5*m_bottomPostLength, 0.5*m_bottomPostHeight, 0.5*m_bottomPostWidth); // place the back bottom post G4LogicalVolume* logBottomFrontBackPost = new G4LogicalVolume(bottomPost, mate, "logBottomFrontBackPost", 0, 0, 0); logBottomFrontBackPost->SetVisAttributes(vatSteel); xPos = 0.; yPos = 0.5*(m_outerHeight - m_bottomPostHeight) - m_frontbackTopGap - m_topBackPostHeight - m_backWallHeight; zPos = 0.5*(-m_outerWidth + m_bottomPostWidth); new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logBottomFrontBackPost, "physISOFrameBottomFrontBackPost", logISOFrame, false, 0); // place the front bottom post zPos = 0.5*m_outerWidth - 1.5*m_bottomPostWidth; new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logBottomFrontBackPost, "physISOFrameBottomFrontBackPost", logISOFrame, false, 0); // back wall G4Box* backWall = new G4Box("backWall", 0.5*m_backWallLength, 0.5*m_backWallHeight, 0.5*m_backWallWidth); // place the back wall G4LogicalVolume* logBackWall = new G4LogicalVolume(backWall, mate, "logBackWall", 0, 0, 0); logBackWall->SetVisAttributes(vatSteel); xPos = 0.; yPos = 0.5*(m_outerHeight - m_backWallHeight) - m_frontbackTopGap - m_topBackPostHeight; zPos = -0.5*(m_outerWidth + m_backWallWidth) + m_topBackPostWidth; new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logBackWall, "physISOFrameBackWall", logISOFrame, false, 0); // horizontal top front post G4Box* topFrontPost = new G4Box("topFrontPost", 0.5*m_topFrontPostLength, 0.5*m_topFrontPostHeight, 0.5*m_topFrontPostWidth); // place the front top post G4LogicalVolume* logTopFrontPost = new G4LogicalVolume(topFrontPost, mate, "logTopFrontPost", 0, 0, 0); logTopFrontPost->SetVisAttributes(vatSteel); xPos = 0.; yPos = 0.5*(m_outerHeight - m_topFrontPostHeight) - m_frontbackTopGap; zPos = 0.5*(m_outerWidth + m_topFrontPostWidth) - m_backPostWidth + 2.*m_frontbackTopGap; new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logTopFrontPost, "physISOFrameTopFrontPost", logISOFrame, false, 0); // roller door G4Box* rollerDoor = new G4Box("rollerDoor", 0.5*m_doorLength, 0.5*m_doorHeight, 0.5*m_doorWidth); // place the front door wall G4LogicalVolume* logFrontWall = new G4LogicalVolume(rollerDoor, mate, "logFrontWall", 0, 0, 0); logFrontWall->SetVisAttributes(vatSteel); xPos = 0.; yPos = 0.5*(-m_outerHeight + m_doorHeight) + m_verPostCornerHeight; zPos = 0.5*(m_outerWidth + m_doorWidth) - m_backPostWidth + 2.*m_frontbackTopGap + m_topFrontPostWidth; new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logFrontWall, "physISOFrameFrontWall", logISOFrame, false, 0); // side structures G4Box* sideStructBox1 = new G4Box("sideStructBox1", 0.5*m_sideStructLength, 0.5*m_sideStructHeight, 0.5*m_sideStructWidth); G4Box* sideStructBox2 = new G4Box("sideStructBox2", m_sideStructLength, 0.5*m_sideWallHeight, 0.5*m_sideWallWidth+0.5*mm); G4SubtractionSolid* sideStruct = new G4SubtractionSolid("sideStruct", sideStructBox1, sideStructBox2, 0, G4ThreeVector(0., 0.5*(m_bottomPostHeight - m_sideStructLength), 0.5*(-m_sideStructWidth + m_sideWallWidth) - 0.5*mm)); // place the side structures G4LogicalVolume* logSideStruct = new G4LogicalVolume(sideStruct, mate, "logSideStruct", 0, 0, 0); logSideStruct->SetVisAttributes(vatSteel); xPos = 0.5*(m_outerLength - m_sideStructLength); yPos = 0.5*(m_outerHeight - m_sideStructHeight) - m_sideTopGap; zPos = 0.5*(-m_outerWidth + m_sideStructWidth) + m_backPostWidth; new G4PVPlacement(0, G4ThreeVector(-xPos, yPos, zPos), logSideStruct, "physISOFrameSideStruct", logISOFrame, false, 0); new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logSideStruct, "physISOFrameSideStruct", logISOFrame, false, 0); // side walls G4Box* sideWallBox = new G4Box("sideWallBox", 0.5*m_sideWallLength, 0.5*m_sideWallHeight, 0.5*m_sideWallWidth); // top patch panels G4Box* topPatchPanel = new G4Box("topPatchPanel", m_sideWallLength, 0.5*m_topPatchPanelHeight, 0.5*m_topPatchPanelWidth); // bottom patch panel G4Box* bottomPatchPanel = new G4Box("bottomPatchPanel", m_sideWallLength, 0.5*m_bottomPatchPanelHeight, 0.5*m_bottomPatchPanelWidth); //patches in container box // G4double yPos1 = 0.5*m_outerHeight - 450.*mm; // G4double zPos1 = 0.5*m_outerWidth - 1365.*mm; G4double yPos1 = 0.5*m_sideWallHeight - 367.4*mm; G4double zPos1 = 0.5*m_sideWallWidth - 1086.4*mm; G4double zPosDel1 = 1360.*mm; G4SubtractionSolid* sideWall = new G4SubtractionSolid("sideWall", sideWallBox, topPatchPanel, 0, G4ThreeVector(0., yPos1, zPos1)); sideWall = new G4SubtractionSolid("sideWall", sideWall, topPatchPanel, 0, G4ThreeVector(0., yPos1, zPos1 - zPosDel1)); // G4double yPos2 = -0.5*m_outerHeight + 460.*mm; // G4double zPos2 = 0.5*m_outerWidth - 3230.*mm; G4double yPos2 = -0.5*m_sideWallHeight + 300.*mm; G4double zPos2 = 0.5*m_sideWallWidth - 2951.4*mm; sideWall = new G4SubtractionSolid("sideWall", sideWall, bottomPatchPanel, 0, G4ThreeVector(0., yPos2, zPos2)); // place the side walls G4LogicalVolume* logSideWall1 = new G4LogicalVolume(sideWallBox, mate, "logSideWall1", 0, 0, 0); logSideWall1->SetVisAttributes(vatSteel); G4LogicalVolume* logSideWall2 = new G4LogicalVolume(sideWall, mate, "logSideWall2", 0, 0, 0); logSideWall2->SetVisAttributes(vatSteel); xPos = 0.5*(m_outerLength + m_sideWallLength) - m_sideStructLength; yPos = 0.5*(m_outerHeight - m_sideWallHeight) - m_sideTopGap - m_sideStructLength; zPos = 0.5*(-m_outerWidth + m_sideWallWidth) + m_backPostWidth; new G4PVPlacement(0, G4ThreeVector(-xPos, yPos, zPos), logSideWall1, "physISOFrameSideWall", logISOFrame, false, 0); new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logSideWall2, "physISOFrameSideWall", logISOFrame, false, 0); // floor bars (L shaped) G4Box* floorBarBox1 = new G4Box("floorBarBox1", 0.5*m_floorBarLength, 0.5*m_floorBarHeight, 0.5*m_floorBarWidth); G4Box* floorBarBox2 = new G4Box("floorBarBox2", 0.5*m_floorBarLength + 0.1*mm, 0.5*m_floorBarHeight, 0.5*m_floorBarWidth); G4SubtractionSolid* floorBar = new G4SubtractionSolid("floorBar", floorBarBox1, floorBarBox2, 0, G4ThreeVector(0., -m_verPostThickness, m_verPostThickness)); // G4Box* floorBar = new G4Box("floorBarBox2", // 0.5*m_floorBarLength, // 0.5*m_floorBarHeight, // 0.5* 9.035*mm); // width calculated for same mass of real piece // place the floor bars (L shaped) in X direction G4LogicalVolume* logFloorBar = new G4LogicalVolume(floorBar, mate, "logFloorBar", 0, 0, 0); logFloorBar->SetVisAttributes(vatSteel); xPos = 0.; yPos = 0.5*(-m_outerHeight + m_floorBarHeight) + m_bottomGap; zPos = 0.5*(-m_outerWidth + m_floorBarWidth) + m_backPostWidth; for(int i=0; i<7; i++) new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos + i*(m_floorBarGap + m_floorBarWidth)), logFloorBar, "physISOFrameFloorBar", logISOFrame, false, 0); rot = new G4RotationMatrix(); rot->rotateY(180*deg); zPos = 0.5*(m_outerWidth - m_floorBarWidth) - m_backPostWidth; for(int i=0; i<6; i++) new G4PVPlacement(rot, G4ThreeVector(xPos, yPos, zPos - i*(m_floorBarGap + m_floorBarWidth)), logFloorBar, "physISOFrameFloorBar", logISOFrame, false, 0); // floor panel G4Box* floorPanelBox1 = new G4Box("floorPanelBox1", 0.5*m_floorLength, 0.5*m_floor_Thickness, 0.5*m_floorWidth); G4Box* floorPanelBox2 = new G4Box("floorPanelBox2", 0.5*m_floorLength + m_sideStructLength - m_backPostLength, 0.5*m_floor_Thickness, 0.5*(m_backPostWidth - m_bottomPostWidth)); G4Box* floorPanelBox3 = new G4Box("floorPanelBox3", 0.5*m_floorLength + m_sideStructLength - m_backPostLength, 0.5*m_floor_Thickness, 0.5*m_backPostWidth - m_bottomPostWidth); G4UnionSolid* floorPanel = new G4UnionSolid("floorPanel", floorPanelBox1, floorPanelBox2, 0, G4ThreeVector(0., 0., -0.5*(m_floorWidth + m_backPostWidth - m_bottomPostWidth)) ); floorPanel = new G4UnionSolid("floorPanel", floorPanel, floorPanelBox3, 0, G4ThreeVector(0., 0., 0.5*(m_floorWidth + m_backPostWidth) - m_bottomPostWidth) ); // place the floor panel G4LogicalVolume* logFloorPanel = new G4LogicalVolume(floorPanel, mate, "logFloorPanel", 0, 0, 0); logFloorPanel->SetVisAttributes(vatSteel); xPos = 0.; yPos = 0.5*(-m_outerHeight + m_floor_Thickness) + m_bottomGap + m_floorBarHeight; zPos = 0.5*(-m_outerWidth + m_floorWidth) + m_backPostWidth; new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logFloorPanel, "physISOFrameFloorPanel", logISOFrame, false, 0); // roof panel G4Box* roofPanel = new G4Box("roofPanel", 0.5*m_roofLength, 0.5*m_wallsroof_Thickness, 0.5*m_roofWidth); // place the roof panel G4LogicalVolume* logRoofPanel = new G4LogicalVolume(roofPanel, mate, "logRoofPanel", 0, 0, 0); logRoofPanel->SetVisAttributes(vatSteel); xPos = 0.; yPos = 0.5*(m_outerHeight + m_wallsroof_Thickness) - m_sideTopGap; zPos = 0.5*(-m_outerWidth + m_roofWidth) + m_bottomPostWidth; new G4PVPlacement(0, G4ThreeVector(xPos, yPos, zPos), logRoofPanel, "physISOFrameRoofPanel", logISOFrame, false, 0); if( m_verboseLevel > 0 ) { G4float totalMass = logISOFrame->GetMass()/g; G4float totalVol = totalMass / (mate->GetDensity()/(g/cm3)); G4float backWallMass = logBackWall->GetMass()/g; G4float backWallVol = backWall->GetCubicVolume()/cm3; G4float frontWallMass = logFrontWall->GetMass()/g; G4float frontWallVol = rollerDoor->GetCubicVolume()/cm3; G4float sideWallMass = logSideWall1->GetMass()/g + logSideWall2->GetMass()/g; G4float sideWallVol = sideWallBox->GetCubicVolume()/cm3 + sideWall->GetCubicVolume()/cm3; G4float floorMass = logFloorPanel->GetMass()/g; G4float floorVol = floorPanel->GetCubicVolume()/cm3; G4float roofMass = logRoofPanel->GetMass()/g; G4float roofVol = roofPanel->GetCubicVolume()/cm3; G4float panelsMass = (backWallMass + frontWallMass + sideWallMass + floorMass + roofMass); G4float panelsVol = (backWallVol + frontWallVol + sideWallVol + floorVol + roofVol); G4float frameMass = totalMass - panelsMass; G4float frameVol = totalVol - panelsVol; G4cout << "**************VOLUME MASS****************" << G4endl; G4cout << " part:\t mass (g)\t volume (cm^3)" << G4endl; G4cout << " ISO Frame: " << frameMass << ", \t" << frameVol << G4endl; G4cout << "walls + floor + roof: " << panelsMass << ", \t" << panelsVol << G4endl; G4cout << " ALL total: " << totalMass << ", \t" << totalVol << G4endl; G4cout << "**********END VOLUME MASS****************" << G4endl; } return logISOFrame; }