Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/biasing/ReverseMC01/src/RMC01DetectorConstruction.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 /// \file biasing/ReverseMC01/src/RMC01DetectorConstruction.cc
 27 /// \brief Implementation of the RMC01DetectorConstruction class
 28 //
 29 //
 30 //////////////////////////////////////////////////////////////
 31 //      Class Name:        RMC01DetectorConstruction
 32 //        Author:               L. Desorgher
 33 //         Organisation:         SpaceIT GmbH
 34 //        Contract:        ESA contract 21435/08/NL/AT
 35 //         Customer:             ESA/ESTEC
 36 //////////////////////////////////////////////////////////////
 37 
 38 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 39 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 40 
 41 #include "RMC01DetectorConstruction.hh"
 42 
 43 #include "RMC01DetectorMessenger.hh"
 44 #include "RMC01SD.hh"
 45 
 46 #include "G4Box.hh"
 47 #include "G4Colour.hh"
 48 #include "G4GeometryManager.hh"
 49 #include "G4LogicalVolume.hh"
 50 #include "G4LogicalVolumeStore.hh"
 51 #include "G4Material.hh"
 52 #include "G4Orb.hh"
 53 #include "G4PVPlacement.hh"
 54 #include "G4PhysicalConstants.hh"
 55 #include "G4PhysicalVolumeStore.hh"
 56 #include "G4RunManager.hh"
 57 #include "G4SDManager.hh"
 58 #include "G4SolidStore.hh"
 59 #include "G4SystemOfUnits.hh"
 60 #include "G4Tubs.hh"
 61 #include "G4VisAttributes.hh"
 62 
 63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 64 
 65 RMC01DetectorConstruction::RMC01DetectorConstruction()
 66   : G4VUserDetectorConstruction(),
 67     fDetectorMessenger(0),
 68     fShield_Thickness(5. * mm),
 69     fSensitive_cylinder_H(1. * mm),
 70     fSensitive_cylinder_Rout(1. * mm)
 71 {
 72   fDetectorMessenger = new RMC01DetectorMessenger(this);
 73 }
 74 
 75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 76 
 77 RMC01DetectorConstruction::~RMC01DetectorConstruction()
 78 {
 79   delete fDetectorMessenger;
 80 }
 81 
 82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 83 
 84 G4VPhysicalVolume* RMC01DetectorConstruction::Construct()
 85 {
 86   DefineMaterials();
 87   return ConstructSimpleGeometry();
 88 }
 89 
 90 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 91 
 92 void RMC01DetectorConstruction::DefineMaterials()
 93 {
 94   G4String symbol;  // a=mass of a mole;
 95   G4double a, z, density;  // z=mean number of protons;
 96   G4double fractionmass;
 97   G4int ncomponents;
 98 
 99   //
100   // define Elements
101   //
102 
103   G4Element* N = new G4Element("Nitrogen", symbol = "N", z = 7., a = 14.01 * g / mole);
104   G4Element* O = new G4Element("Oxygen", symbol = "O", z = 8., a = 16.00 * g / mole);
105 
106   //
107   // define simple materials
108   //
109 
110   new G4Material("Aluminum", z = 13., a = 26.98 * g / mole, density = 2.700 * g / cm3);
111   new G4Material("Silicon", z = 14., a = 28.09 * g / mole, density = 2.33 * g / cm3);
112   new G4Material("Tantalum", z = 73., a = 180.9479 * g / mole, density = 16.654 * g / cm3);
113 
114   //
115   // define air
116   //
117 
118   G4Material* Air = new G4Material("Air", density = 1.290 * mg / cm3, ncomponents = 2);
119   Air->AddElement(N, fractionmass = 0.7);
120   Air->AddElement(O, fractionmass = 0.3);
121 
122   //
123   // Example of Vacuum
124   //
125 
126   new G4Material("Vacuum", z = 1., a = 1.01 * g / mole, density = universe_mean_density, kStateGas,
127                  3.e-18 * pascal, 2.73 * kelvin);
128 }
129 
130 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
131 
132 G4VPhysicalVolume* RMC01DetectorConstruction::ConstructSimpleGeometry()
133 {
134   // Clean old geometry, if any
135 
136   G4GeometryManager::GetInstance()->OpenGeometry();
137   G4PhysicalVolumeStore::GetInstance()->Clean();
138   G4LogicalVolumeStore::GetInstance()->Clean();
139   G4SolidStore::GetInstance()->Clean();
140 
141   // World
142   //-----------
143 
144   G4Box* solidWorld = new G4Box("World", 15. * cm, 15. * cm, 15. * cm);
145   G4LogicalVolume* logicWorld =
146     new G4LogicalVolume(solidWorld, G4Material::GetMaterial("Vacuum"), "World");
147 
148   G4VPhysicalVolume* physiWorld = new G4PVPlacement(0,  // no rotation
149                                                     G4ThreeVector(),  // at (0,0,0)
150                                                     logicWorld,  // its logical volume
151                                                     "World",  // its name
152                                                     0,  // its mother  volume
153                                                     false,  // no boolean operation
154                                                     0);
155 
156   // Shielding Aluminum Sphere
157   //-------------------
158 
159   G4double radiusShieldingSphere = 10. * cm;
160 
161   G4Orb* solidShieldingSphere = new G4Orb("Shielding", radiusShieldingSphere);
162   G4LogicalVolume* logicShieldingSphere =
163     new G4LogicalVolume(solidShieldingSphere, G4Material::GetMaterial("Aluminum"),
164                         "Shielding");  // its name;
165 
166   new G4PVPlacement(0,  // no rotation
167                     G4ThreeVector(),  // at (0,0,0)
168                     logicShieldingSphere,  // its logical volume
169                     "Shielding",  // its name
170                     logicWorld,  // its mother  volume
171                     false,  // no boolean operation
172                     0);
173 
174   // Bulk Sphere
175   //-------------------
176 
177   G4Orb* solidBulkSphere = new G4Orb("Bulk", radiusShieldingSphere - fShield_Thickness);
178   G4LogicalVolume* logicBulkSphere =
179     new G4LogicalVolume(solidBulkSphere,  // its solid
180                         G4Material::GetMaterial("Air"),  // its material
181                         "Bulk");  // its name;
182 
183   new G4PVPlacement(0,  // no rotation
184                     G4ThreeVector(),  // at (0,0,0)
185                     logicBulkSphere,  // its logical volume
186                     "Bulk",  // its name
187                     logicShieldingSphere,  // its mother  volume
188                     false,  // no boolean operation
189                     0);
190 
191   // Detecting cylinder
192   //-------------------
193 
194   G4Tubs* solidDetecting = new G4Tubs("SensitiveVolume", 0., fSensitive_cylinder_Rout,
195                                       fSensitive_cylinder_H / 2., 0., twopi);
196 
197   G4LogicalVolume* logicDetectingCylinder =
198     new G4LogicalVolume(solidDetecting, G4Material::GetMaterial("Silicon"), "SensitiveVolume");
199 
200   new G4PVPlacement(0,  // no rotation
201                     G4ThreeVector(0., 0., 0.),  // at (0,0,0)
202                     logicDetectingCylinder,  // its logical volume
203                     "SensitiveVolume",  // its name
204                     logicBulkSphere,  // its mother  volume
205                     false,  // no boolean operation
206                     0);
207 
208   RMC01SD* theSensitiveDetector = new RMC01SD("/SensitiveCylinder");
209 
210   G4SDManager::GetSDMpointer()->AddNewDetector(theSensitiveDetector);
211   logicDetectingCylinder->SetSensitiveDetector(theSensitiveDetector);
212 
213   // Tantalum Plates on the top and beside
214   //-------------------------------------
215   G4Box* solidPlate = new G4Box("TantalumPlate", 4. * cm, 4. * cm, 0.25 * mm);
216   G4LogicalVolume* logicPlate =
217     new G4LogicalVolume(solidPlate,  // its solid
218                         G4Material::GetMaterial("Tantalum"),  // its material
219                         "TantalumPlate");  // its name;
220 
221   new G4PVPlacement(0,  // no rotation
222                     G4ThreeVector(0., 0., 6. * cm),  // at (0,0,0)
223                     logicPlate,  // its logical volume
224                     "TantalumPlate1",  // its name
225                     logicBulkSphere,  // its mother  volume
226                     false,  // no boolean operation
227                     0);
228 
229   new G4PVPlacement(0,  // no rotation
230                     G4ThreeVector(0., 0., -6. * cm),  // at (0,0,0)
231                     logicPlate,  // its logical volume
232                     "TantalumPlate2",  // its name
233                     logicBulkSphere,  // its mother  volume
234                     false,  // no boolean operation
235                     0);
236 
237   return physiWorld;
238 }
239 
240 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
241 
242 void RMC01DetectorConstruction::SetSensitiveVolumeRadius(G4double r)
243 {
244   fSensitive_cylinder_Rout = r;
245 }
246 
247 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
248 
249 void RMC01DetectorConstruction::SetSensitiveVolumeHeight(G4double h)
250 {
251   fSensitive_cylinder_H = h;
252 }
253 
254 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
255 
256 void RMC01DetectorConstruction::SetShieldingThickness(G4double d)
257 {
258   fShield_Thickness = d;
259 }
260 
261 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
262