Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 /// \file electromagnetic/TestEm9/src/Detector << 27 /// \brief Implementation of the DetectorConst << 28 // 26 // >> 27 // $Id: DetectorConstruction.cc,v 1.9 2006/06/29 17:02:59 gunter Exp $ >> 28 // GEANT4 tag $Name: geant4-09-01-patch-02 $ 29 // 29 // 30 // 30 // 31 ////////////////////////////////////////////// 31 ///////////////////////////////////////////////////////////////////////// 32 // 32 // 33 // TestEm9: Crystal calorimeter 33 // TestEm9: Crystal calorimeter 34 // 34 // 35 // Created: 31.01.03 V.Ivanchenko 35 // Created: 31.01.03 V.Ivanchenko 36 // 36 // 37 // Modified: 37 // Modified: 38 // 38 // 39 ////////////////////////////////////////////// 39 //////////////////////////////////////////////////////////////////////// 40 // 40 // 41 41 >> 42 42 //....oooOO0OOooo........oooOO0OOooo........oo 43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 43 //....oooOO0OOooo........oooOO0OOooo........oo 44 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 44 45 45 #include "DetectorConstruction.hh" 46 #include "DetectorConstruction.hh" 46 << 47 #include "DetectorMessenger.hh" 47 #include "DetectorMessenger.hh" 48 48 49 #include "G4Box.hh" 49 #include "G4Box.hh" 50 #include "G4Colour.hh" << 51 #include "G4GeometryManager.hh" << 52 #include "G4LogicalVolume.hh" 50 #include "G4LogicalVolume.hh" 53 #include "G4LogicalVolumeStore.hh" << 54 #include "G4NistManager.hh" << 55 #include "G4PVPlacement.hh" 51 #include "G4PVPlacement.hh" 56 #include "G4PVReplica.hh" 52 #include "G4PVReplica.hh" 57 #include "G4PhysicalVolumeStore.hh" << 53 58 #include "G4ProductionCuts.hh" << 54 #include "G4TransportationManager.hh" >> 55 >> 56 #include "G4GeometryManager.hh" >> 57 #include "G4RunManager.hh" 59 #include "G4Region.hh" 58 #include "G4Region.hh" 60 #include "G4RegionStore.hh" 59 #include "G4RegionStore.hh" 61 #include "G4RunManager.hh" << 60 #include "G4PhysicalVolumeStore.hh" >> 61 #include "G4LogicalVolumeStore.hh" 62 #include "G4SolidStore.hh" 62 #include "G4SolidStore.hh" 63 #include "G4SystemOfUnits.hh" << 63 #include "G4NistManager.hh" 64 #include "G4TransportationManager.hh" << 64 65 #include "G4UnitsTable.hh" << 66 #include "G4VisAttributes.hh" 65 #include "G4VisAttributes.hh" >> 66 #include "G4Colour.hh" >> 67 >> 68 #include "G4UnitsTable.hh" 67 #include "G4ios.hh" 69 #include "G4ios.hh" 68 70 69 //....oooOO0OOooo........oooOO0OOooo........oo 71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 70 72 71 DetectorConstruction::DetectorConstruction() 73 DetectorConstruction::DetectorConstruction() 72 : G4VUserDetectorConstruction(), << 74 :logicC(0),logicA1(0),logicA2(0) 73 fCalMaterial(0), << 74 fVertMaterial(0), << 75 fAbsMaterial(0), << 76 fWorldMaterial(0), << 77 fYorkMaterial(0), << 78 fLogicWorld(0), << 79 fLogicCal(0), << 80 fLogicA1(0), << 81 fLogicA2(0), << 82 fLogicA3(0), << 83 fLogicA4(0), << 84 fVertexRegion(0), << 85 fMuonRegion(0), << 86 fVertexDetectorCuts(0), << 87 fMuonDetectorCuts(0), << 88 fDetectorMessenger(0) << 89 { 75 { 90 fDetectorMessenger = new DetectorMessenger(t << 76 detectorMessenger = new DetectorMessenger(this); 91 << 92 fEcalLength = 36. * cm; << 93 fEcalWidth = 6. * cm; << 94 fVertexLength = 3. * cm; << 95 fPadLength = 0.1 * mm; << 96 fPadWidth = 0.02 * mm; << 97 fAbsLength = 2. * mm; << 98 fWorldZ = 0.0; << 99 fLogicWorld = 0; << 100 fLogicCal = 0; << 101 fLogicA1 = 0; << 102 fLogicA2 = 0; << 103 fLogicA3 = 0; << 104 fLogicA4 = 0; << 105 fVertexRegion = 0; << 106 fMuonRegion = 0; << 107 77 >> 78 ecalLength = 36.*cm; >> 79 ecalWidth = 6.*cm; >> 80 vertexLength = 3.*cm; >> 81 padLength = 0.1*mm; >> 82 padWidth = 0.02*mm; >> 83 absLength = 2.*mm; >> 84 vertexRegion = 0; >> 85 muonRegion = 0; 108 DefineMaterials(); 86 DefineMaterials(); 109 fVertexDetectorCuts = new G4ProductionCuts() << 110 fMuonDetectorCuts = new G4ProductionCuts(); << 111 } 87 } 112 88 113 //....oooOO0OOooo........oooOO0OOooo........oo 89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 114 90 115 DetectorConstruction::~DetectorConstruction() 91 DetectorConstruction::~DetectorConstruction() 116 { << 92 { delete detectorMessenger;} 117 delete fDetectorMessenger; << 118 delete fVertexDetectorCuts; << 119 delete fMuonDetectorCuts; << 120 } << 121 93 122 //....oooOO0OOooo........oooOO0OOooo........oo 94 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 123 95 124 G4VPhysicalVolume* DetectorConstruction::Const 96 G4VPhysicalVolume* DetectorConstruction::Construct() 125 { 97 { 126 return ConstructVolumes(); 98 return ConstructVolumes(); 127 } 99 } 128 100 129 //....oooOO0OOooo........oooOO0OOooo........oo 101 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 130 102 131 void DetectorConstruction::DefineMaterials() 103 void DetectorConstruction::DefineMaterials() 132 { 104 { 133 // Default materials 105 // Default materials 134 106 135 G4NistManager* man = G4NistManager::Instance 107 G4NistManager* man = G4NistManager::Instance(); 136 // man->SetVerbose(1); << 108 man->SetVerbose(1); 137 fWorldMaterial = man->FindOrBuildMaterial("G << 109 worldMaterial = man->FindOrBuildMaterial("G4_AIR"); 138 fAbsMaterial = man->FindOrBuildMaterial("G4_ << 110 absMaterial = man->FindOrBuildMaterial("G4_Al"); 139 fVertMaterial = man->FindOrBuildMaterial("G4 << 111 vertMaterial = man->FindOrBuildMaterial("G4_Si"); 140 fYorkMaterial = man->FindOrBuildMaterial("G4 << 112 yorkMaterial = man->FindOrBuildMaterial("G4_Fe"); 141 fCalMaterial = man->FindOrBuildMaterial("G4_ << 113 calMaterial = man->FindOrBuildMaterial("G4_CESIUM_IODIDE"); 142 } 114 } 143 115 144 //....oooOO0OOooo........oooOO0OOooo........oo 116 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 145 117 146 G4VPhysicalVolume* DetectorConstruction::Const 118 G4VPhysicalVolume* DetectorConstruction::ConstructVolumes() 147 { 119 { >> 120 G4cout << *(G4Material::GetMaterialTable()) << G4endl; >> 121 148 // Cleanup old geometry 122 // Cleanup old geometry 149 123 150 G4GeometryManager::GetInstance()->OpenGeomet 124 G4GeometryManager::GetInstance()->OpenGeometry(); 151 << 152 if (G4NistManager::Instance()->GetVerbose() << 153 G4cout << *(G4Material::GetMaterialTable() << 154 << 155 if (fVertexRegion) { << 156 delete fVertexRegion; << 157 delete fMuonRegion; << 158 } << 159 fVertexRegion = new G4Region("VertexDetector << 160 fVertexRegion->SetProductionCuts(fVertexDete << 161 << 162 fMuonRegion = new G4Region("MuonDetector"); << 163 fMuonRegion->SetProductionCuts(fMuonDetector << 164 << 165 G4SolidStore::GetInstance()->Clean(); << 166 G4LogicalVolumeStore::GetInstance()->Clean() << 167 G4PhysicalVolumeStore::GetInstance()->Clean( 125 G4PhysicalVolumeStore::GetInstance()->Clean(); >> 126 G4LogicalVolumeStore::GetInstance()->Clean(); >> 127 G4SolidStore::GetInstance()->Clean(); 168 128 169 if (fVertexLength < fPadLength * 5.0) fVerte << 129 if(vertexRegion) delete vertexRegion; 170 G4double gap = 0.01 * mm; << 130 if(muonRegion) delete muonRegion; 171 G4double biggap = 2. * cm; << 131 vertexRegion = new G4Region("VertexDetector"); 172 G4double york = 10. * cm; << 132 muonRegion = new G4Region("MuonDetector"); 173 << 133 174 fWorldZ = 2. * fVertexLength + 3. * fAbsLeng << 134 if(vertexLength < padLength*5.0) vertexLength = padLength*5.0; 175 << 135 G4double gap = 0.01*mm; 176 G4double worldX = fEcalWidth * 3.0; << 136 G4double biggap = 2.*cm; 177 G4double vertexZ = -fWorldZ + fVertexLength << 137 G4double york = 10.*cm; 178 G4double absZ2 = -fWorldZ + fVertexLength * << 138 179 G4double ecalZ = << 139 worldZ = 2.*vertexLength + 3.*absLength + 0.5*(ecalLength + york) + biggap*2.; 180 -fWorldZ + fVertexLength * 4.0 + fAbsLengt << 140 G4double worldX = ecalWidth*3.0; 181 G4double yorkZ = << 141 G4double vertexZ= -worldZ + vertexLength*2.0 + absLength + biggap; 182 -fWorldZ + fVertexLength * 4.0 + fAbsLengt << 142 G4double absZ2 = -worldZ + vertexLength*4.0 + absLength*3.5 + biggap; >> 143 G4double ecalZ = -worldZ + vertexLength*4.0 + absLength*4.0 + ecalLength*0.5 + 2.*biggap; >> 144 G4double yorkZ = -worldZ + vertexLength*4.0 + absLength*5.0 + ecalLength >> 145 + york*0.5 + 3.*biggap; 183 146 184 // 147 // 185 // World 148 // World 186 // 149 // 187 G4Box* solidW = new G4Box("World", worldX, w << 150 G4Box* solidW = new G4Box("World",worldX,worldX,worldZ); 188 fLogicWorld = new G4LogicalVolume(solidW, fW << 151 G4LogicalVolume* logicW = new G4LogicalVolume( solidW,worldMaterial, 189 G4VPhysicalVolume* world = << 152 "World"); 190 new G4PVPlacement(0, G4ThreeVector(), "Wor << 153 G4VPhysicalVolume* world = new G4PVPlacement(0,G4ThreeVector(), >> 154 "World",logicW,0,false,0); 191 155 192 // 156 // 193 // Ecal 157 // Ecal 194 // 158 // 195 G4Box* solidE = new G4Box("VolE", worldX, wo << 159 G4Box* solidE = new G4Box("VolE",worldX,worldX,ecalLength*0.5 + gap); 196 G4LogicalVolume* logicECal = new G4LogicalVo << 160 G4LogicalVolume* logicE = new G4LogicalVolume( solidE,worldMaterial, 197 G4VPhysicalVolume* physE = << 161 "VolE"); 198 new G4PVPlacement(0, G4ThreeVector(0., 0., << 162 G4VPhysicalVolume* physE = new G4PVPlacement(0,G4ThreeVector(0.,0.,ecalZ), >> 163 "VolE",logicE,world,false,0); 199 164 200 G4Box* solidC = new G4Box("Ecal", fEcalWidth << 165 G4Box* solidC = new G4Box("Ecal",ecalWidth*0.5,ecalWidth*0.5,ecalLength*0.5); 201 fLogicCal = new G4LogicalVolume(solidC, fCal << 166 logicC = new G4LogicalVolume( solidC,calMaterial,"Ecal"); 202 167 203 G4cout << "Ecal is " << G4BestUnit(fEcalLeng << 168 G4cout << "Ecal is " << G4BestUnit(ecalLength,"Length") 204 << G4endl; << 169 << " of " << calMaterial->GetName() << G4endl; 205 170 206 // Crystals 171 // Crystals 207 172 208 G4double x0 = -(fEcalWidth + gap) * 2.0; << 173 G4double x0 = -(ecalWidth + gap)*2.0; 209 G4double y = x0; << 174 G4double y = x0; 210 G4double x; 175 G4double x; 211 G4int k = 0; 176 G4int k = 0; 212 G4int i, j; << 177 G4VPhysicalVolume* pv; >> 178 G4int i,j; >> 179 >> 180 for (i=0; i<5; i++) { >> 181 x = x0; >> 182 for (j=0; j<5; j++) { 213 183 214 for (i = 0; i < 5; i++) { << 184 pv = new G4PVPlacement(0,G4ThreeVector(x,y,0.),"Ecal",logicC, 215 x = x0; << 185 physE,false,k); 216 for (j = 0; j < 5; j++) { << 217 new G4PVPlacement(0, G4ThreeVector(x, y, << 218 k++; 186 k++; 219 x += fEcalWidth + gap; << 187 x += ecalWidth + gap; 220 } 188 } 221 y += fEcalWidth + gap; << 189 y += ecalWidth + gap; 222 } 190 } 223 191 224 // Absorber << 192 //Absorber >> 193 >> 194 G4Box* solidA = new G4Box("Abso",worldX,worldX,absLength*0.5); >> 195 logicA2 = new G4LogicalVolume( solidA,absMaterial,"Abs2"); >> 196 pv = new G4PVPlacement(0,G4ThreeVector(0.,0.,absZ2), >> 197 "Abs2",logicA2,world,false,0); >> 198 >> 199 G4cout << "Absorber is " << G4BestUnit(absLength,"Length") >> 200 << " of " << absMaterial->GetName() << G4endl; >> 201 >> 202 //York >> 203 >> 204 G4Box* solidYV = new G4Box("VolY",worldX,worldX,york*0.5+absLength); >> 205 G4LogicalVolume* logicYV = new G4LogicalVolume( solidYV,yorkMaterial,"VolY"); >> 206 G4VPhysicalVolume* physYV = new G4PVPlacement(0,G4ThreeVector(0.,0.,yorkZ), >> 207 "VolY",logicYV,world,false,0); >> 208 >> 209 G4Box* solidY = new G4Box("York",worldX,worldX,york*0.5); >> 210 G4LogicalVolume* logicY = new G4LogicalVolume( solidY,yorkMaterial,"York"); >> 211 pv = new G4PVPlacement(0,G4ThreeVector(), >> 212 "York",logicY,physYV,false,0); >> 213 >> 214 logicA3 = new G4LogicalVolume( solidA,absMaterial,"Abs3"); >> 215 logicA4 = new G4LogicalVolume( solidA,absMaterial,"Abs4"); >> 216 pv = new G4PVPlacement(0,G4ThreeVector(0.,0.,-(york+absLength)*0.5), >> 217 "Abs3",logicA3,physYV,false,0); >> 218 pv = new G4PVPlacement(0,G4ThreeVector(0.,0.,(york+absLength)*0.5), >> 219 "Abs4",logicA4,physYV,false,0); >> 220 >> 221 //Vertex volume >> 222 >> 223 G4Box* solidVV = new G4Box("VolV",worldX,worldX,vertexLength*2.+absLength+gap); >> 224 G4LogicalVolume* logicVV = new G4LogicalVolume( solidVV,worldMaterial,"VolV"); >> 225 G4VPhysicalVolume* physVV = new G4PVPlacement(0,G4ThreeVector(0.,0.,vertexZ), >> 226 "VolV",logicVV,world,false,0); >> 227 >> 228 //Absorber >> 229 >> 230 logicA1 = new G4LogicalVolume( solidA,absMaterial,"Abs1"); >> 231 pv = new G4PVPlacement(0,G4ThreeVector(0.,0.,vertexLength*2.-absLength*0.5), >> 232 "Abs1",logicA1,physVV,false,0); >> 233 >> 234 //Vertex 225 235 226 G4Box* solidA = new G4Box("Abso", worldX, wo << 236 G4double vertWidth = ecalWidth/5.; 227 fLogicA2 = new G4LogicalVolume(solidA, fAbsM << 237 G4int npads = (G4int)(vertWidth/padWidth); 228 new G4PVPlacement(0, G4ThreeVector(0., 0., a << 238 npads = (npads/2)*2 + 1; 229 << 239 x0 = -0.5*padWidth*((G4double)(npads-1)); 230 G4cout << "Absorber is " << G4BestUnit(fAbsL << 240 G4double x1 = std::fabs(x0) + 0.5*padWidth + gap; 231 << G4endl; << 241 G4double z = -(vertexLength+absLength); 232 << 242 233 // York << 243 G4Box* solidVD = new G4Box("VertDet",x1,ecalWidth*0.5+gap,padLength*0.5); 234 << 244 G4LogicalVolume* logicVD = new G4LogicalVolume( solidVD,vertMaterial,"VertDet"); 235 G4Box* solidYV = new G4Box("VolY", worldX, w << 245 236 G4LogicalVolume* logicYV = new G4LogicalVolu << 246 G4Box* solidV = new G4Box("Vert",padWidth*0.5,ecalWidth*0.5,padLength*0.5); 237 G4VPhysicalVolume* physYV = << 247 G4LogicalVolume* logicV = new G4LogicalVolume( solidV,vertMaterial,"Vert"); 238 new G4PVPlacement(0, G4ThreeVector(0., 0., << 248 239 << 249 for (i=0; i<3; i++) { 240 G4Box* solidY = new G4Box("York", worldX, wo << 250 pv = new G4PVPlacement(0,G4ThreeVector(0.,0.,z),"VertDet",logicVD, 241 G4LogicalVolume* logicY = new G4LogicalVolum << 251 physVV,false,i); 242 new G4PVPlacement(0, G4ThreeVector(), "York" << 252 z += vertexLength; 243 << 244 fLogicA3 = new G4LogicalVolume(solidA, fAbsM << 245 fLogicA4 = new G4LogicalVolume(solidA, fAbsM << 246 << 247 new G4PVPlacement(0, G4ThreeVector(0., 0., - << 248 false, 0); << 249 new G4PVPlacement(0, G4ThreeVector(0., 0., ( << 250 false, 0); << 251 << 252 // Vertex volume << 253 G4Box* solidVV = new G4Box("VolV", worldX, w << 254 G4LogicalVolume* logicVV = new G4LogicalVolu << 255 G4VPhysicalVolume* physVV = << 256 new G4PVPlacement(0, G4ThreeVector(0., 0., << 257 << 258 // Absorber << 259 fLogicA1 = new G4LogicalVolume(solidA, fAbsM << 260 new G4PVPlacement(0, G4ThreeVector(0., 0., f << 261 fLogicA1, physVV, false, 0 << 262 << 263 // Vertex << 264 G4double vertWidth = fEcalWidth / 5.; << 265 G4int npads = (G4int)(vertWidth / fPadWidth) << 266 // G4cout << " vertWidth= " << vertWidth << << 267 // << " npads= " << npads << G4endl << 268 // insure beam to hit a middle of central p << 269 npads = (npads / 2) * 2 + 1; << 270 x0 = -0.5 * (fPadWidth + vertWidth); << 271 G4double x1 = 0.5 * vertWidth + gap; << 272 G4double z = -(fVertexLength + fAbsLength); << 273 << 274 G4Box* solidVD = new G4Box("VertDet", x1, fE << 275 G4LogicalVolume* logicVD = new G4LogicalVolu << 276 logicVD->SetSolid(solidVD); << 277 << 278 G4Box* solidV = new G4Box("Vert", fPadWidth << 279 G4LogicalVolume* logicV = new G4LogicalVolum << 280 << 281 for (i = 0; i < 3; i++) { << 282 new G4PVPlacement(0, G4ThreeVector(0., 0., << 283 z += fVertexLength; << 284 } 253 } 285 x = x0; 254 x = x0; 286 255 287 for (j = 0; j < npads; j++) { << 256 for (j=0; j<npads; j++) { 288 new G4PVPlacement(0, G4ThreeVector(x, 0., << 257 289 x += fPadWidth; << 258 pv = new G4PVPlacement(0,G4ThreeVector(x,0.,0.),logicV,"Vert",logicVD, >> 259 false,k); >> 260 x += padWidth; 290 } 261 } 291 262 292 G4cout << "Vertex is " << G4BestUnit(fVertex << 263 G4cout << "Vertex is " << G4BestUnit(vertexLength,"Length") 293 << G4BestUnit(fPadLength, "Length") < << 264 << " of 3 layers of Si of " << G4BestUnit(padLength,"Length") >> 265 << " npads= " << npads >> 266 << G4endl; 294 267 295 // Define region for the vertex detector 268 // Define region for the vertex detector 296 fVertexRegion->AddRootLogicalVolume(logicVV) << 269 297 fVertexRegion->AddRootLogicalVolume(fLogicA3 << 270 vertexRegion->AddRootLogicalVolume(logicVV); >> 271 vertexRegion->AddRootLogicalVolume(logicA3); 298 272 299 // Define region for the muon detector 273 // Define region for the muon detector 300 fMuonRegion->AddRootLogicalVolume(logicYV); << 274 >> 275 muonRegion->AddRootLogicalVolume(logicYV); 301 276 302 // color regions 277 // color regions 303 logicVV->SetVisAttributes(G4VisAttributes::G << 278 304 logicV->SetVisAttributes(G4VisAttributes::Ge << 279 logicVV-> SetVisAttributes(G4VisAttributes::Invisible); 305 logicECal->SetVisAttributes(G4VisAttributes: << 280 logicV-> SetVisAttributes(G4VisAttributes::Invisible); 306 logicYV->SetVisAttributes(G4VisAttributes::G << 281 logicE-> SetVisAttributes(G4VisAttributes::Invisible); >> 282 logicYV-> SetVisAttributes(G4VisAttributes::Invisible); 307 283 308 G4VisAttributes* regWcolor = new G4VisAttrib 284 G4VisAttributes* regWcolor = new G4VisAttributes(G4Colour(0.3, 0.3, 0.3)); 309 fLogicWorld->SetVisAttributes(regWcolor); << 285 logicW->SetVisAttributes(regWcolor); 310 286 311 G4VisAttributes* regVcolor = new G4VisAttrib 287 G4VisAttributes* regVcolor = new G4VisAttributes(G4Colour(0., 0.3, 0.7)); 312 logicVD->SetVisAttributes(regVcolor); 288 logicVD->SetVisAttributes(regVcolor); 313 289 314 G4VisAttributes* regCcolor = new G4VisAttrib 290 G4VisAttributes* regCcolor = new G4VisAttributes(G4Colour(0., 0.7, 0.3)); 315 fLogicCal->SetVisAttributes(regCcolor); << 291 logicC->SetVisAttributes(regCcolor); 316 292 317 G4VisAttributes* regAcolor = new G4VisAttrib 293 G4VisAttributes* regAcolor = new G4VisAttributes(G4Colour(1., 0.5, 0.5)); 318 fLogicA1->SetVisAttributes(regAcolor); << 294 logicA1->SetVisAttributes(regAcolor); 319 fLogicA2->SetVisAttributes(regAcolor); << 295 logicA2->SetVisAttributes(regAcolor); 320 fLogicA3->SetVisAttributes(regAcolor); << 296 logicA3->SetVisAttributes(regAcolor); 321 fLogicA4->SetVisAttributes(regAcolor); << 297 logicA4->SetVisAttributes(regAcolor); 322 298 323 G4VisAttributes* regMcolor = new G4VisAttrib 299 G4VisAttributes* regMcolor = new G4VisAttributes(G4Colour(1., 1., 0.)); 324 logicY->SetVisAttributes(regMcolor); 300 logicY->SetVisAttributes(regMcolor); 325 301 326 // always return world 302 // always return world 327 G4cout << "### New geometry is constructed" 303 G4cout << "### New geometry is constructed" << G4endl; 328 304 329 return world; 305 return world; 330 } 306 } 331 307 332 //....oooOO0OOooo........oooOO0OOooo........oo 308 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 333 309 334 void DetectorConstruction::SetEcalMaterial(con 310 void DetectorConstruction::SetEcalMaterial(const G4String& mat) 335 { 311 { 336 // search the material by its name 312 // search the material by its name 337 G4Material* pttoMaterial = G4NistManager::In << 313 G4Material* pttoMaterial = 338 if (pttoMaterial && pttoMaterial != fCalMate << 314 G4NistManager::Instance()->FindOrBuildMaterial(mat, false); 339 fCalMaterial = pttoMaterial; << 315 if (pttoMaterial) calMaterial = pttoMaterial; 340 if (fLogicCal) { << 341 fLogicCal->SetMaterial(fCalMaterial); << 342 G4RunManager::GetRunManager()->PhysicsHa << 343 } << 344 } << 345 } 316 } 346 317 347 //....oooOO0OOooo........oooOO0OOooo........oo 318 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 348 319 349 void DetectorConstruction::SetAbsMaterial(cons 320 void DetectorConstruction::SetAbsMaterial(const G4String& mat) 350 { 321 { 351 // search the material by its name 322 // search the material by its name 352 G4Material* pttoMaterial = G4NistManager::In << 323 G4Material* pttoMaterial = 353 if (pttoMaterial && pttoMaterial != fAbsMate << 324 G4NistManager::Instance()->FindOrBuildMaterial(mat, false); 354 fAbsMaterial = pttoMaterial; << 325 if (pttoMaterial) absMaterial = pttoMaterial; 355 if (fLogicA1) { << 356 fLogicA1->SetMaterial(fAbsMaterial); << 357 fLogicA2->SetMaterial(fAbsMaterial); << 358 fLogicA3->SetMaterial(fAbsMaterial); << 359 fLogicA4->SetMaterial(fAbsMaterial); << 360 G4RunManager::GetRunManager()->PhysicsHa << 361 } << 362 } << 363 } 326 } 364 327 365 //....oooOO0OOooo........oooOO0OOooo........oo 328 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 366 329 367 void DetectorConstruction::UpdateGeometry() 330 void DetectorConstruction::UpdateGeometry() 368 { 331 { 369 G4RunManager::GetRunManager()->PhysicsHasBee << 370 G4RunManager::GetRunManager()->DefineWorldVo 332 G4RunManager::GetRunManager()->DefineWorldVolume(ConstructVolumes()); 371 } << 372 << 373 //....oooOO0OOooo........oooOO0OOooo........oo << 374 << 375 void DetectorConstruction::SetEcalLength(G4dou << 376 { << 377 if (val > 0.0) { << 378 fEcalLength = val; << 379 G4RunManager::GetRunManager()->GeometryHas << 380 } << 381 } << 382 << 383 //....oooOO0OOooo........oooOO0OOooo........oo << 384 << 385 void DetectorConstruction::SetEcalWidth(G4doub << 386 { << 387 if (val > 0.0) { << 388 fEcalWidth = val; << 389 G4RunManager::GetRunManager()->GeometryHas << 390 } << 391 } << 392 << 393 //....oooOO0OOooo........oooOO0OOooo........oo << 394 << 395 void DetectorConstruction::SetVertexLength(G4d << 396 { << 397 if (val > 0.0) { << 398 fVertexLength = val; << 399 G4RunManager::GetRunManager()->GeometryHas << 400 } << 401 } << 402 << 403 //....oooOO0OOooo........oooOO0OOooo........oo << 404 << 405 void DetectorConstruction::SetPadLength(G4doub << 406 { << 407 if (val > 0.0) { << 408 fPadLength = val; << 409 G4RunManager::GetRunManager()->GeometryHas << 410 } << 411 } << 412 << 413 //....oooOO0OOooo........oooOO0OOooo........oo << 414 << 415 void DetectorConstruction::SetPadWidth(G4doubl << 416 { << 417 if (val > 0.0) { << 418 fPadWidth = val; << 419 G4RunManager::GetRunManager()->GeometryHas << 420 } << 421 } << 422 << 423 //....oooOO0OOooo........oooOO0OOooo........oo << 424 << 425 void DetectorConstruction::SetAbsLength(G4doub << 426 { << 427 if (val > 0.0) { << 428 fAbsLength = val; << 429 G4RunManager::GetRunManager()->GeometryHas << 430 } << 431 } 333 } 432 334 433 //....oooOO0OOooo........oooOO0OOooo........oo 335 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 434 336