Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/hadronic/ParticleFluence/Sphere/src/DetectorConstruction.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 ]

Diff markup

Differences between /examples/extended/hadronic/ParticleFluence/Sphere/src/DetectorConstruction.cc (Version 11.3.0) and /examples/extended/hadronic/ParticleFluence/Sphere/src/DetectorConstruction.cc (Version 11.2.1)


  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 DetectorConstruction.cc                  26 /// \file DetectorConstruction.cc
 27 /// \brief Implementation of the DetectorConst     27 /// \brief Implementation of the DetectorConstruction class
 28 //                                                 28 //
 29 //                                                 29 //
 30                                                    30 
 31 //....oooOO0OOooo........oooOO0OOooo........oo     31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 32 //....oooOO0OOooo........oooOO0OOooo........oo     32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 33                                                    33 
 34 #include "DetectorConstruction.hh"                 34 #include "DetectorConstruction.hh"
 35                                                << 
 36 #include "DetectorMessenger.hh"                    35 #include "DetectorMessenger.hh"
 37 #include "PrimaryGeneratorAction.hh"               36 #include "PrimaryGeneratorAction.hh"
 38                                                << 
 39 #include "G4Box.hh"                            << 
 40 #include "G4GeometryManager.hh"                << 
 41 #include "G4LogicalVolume.hh"                  << 
 42 #include "G4LogicalVolumeStore.hh"             << 
 43 #include "G4Material.hh"                           37 #include "G4Material.hh"
 44 #include "G4NistManager.hh"                        38 #include "G4NistManager.hh"
                                                   >>  39 #include "G4Box.hh"
 45 #include "G4Orb.hh"                                40 #include "G4Orb.hh"
                                                   >>  41 #include "G4Sphere.hh"
                                                   >>  42 #include "G4LogicalVolume.hh"
                                                   >>  43 #include "G4ThreeVector.hh"
 46 #include "G4PVPlacement.hh"                        44 #include "G4PVPlacement.hh"
 47 #include "G4PhysicalConstants.hh"              <<  45 #include "globals.hh"
                                                   >>  46 #include "G4GeometryManager.hh"
 48 #include "G4PhysicalVolumeStore.hh"                47 #include "G4PhysicalVolumeStore.hh"
 49 #include "G4RunManager.hh"                     <<  48 #include "G4LogicalVolumeStore.hh"
 50 #include "G4SolidStore.hh"                         49 #include "G4SolidStore.hh"
 51 #include "G4Sphere.hh"                         <<  50 #include "G4RunManager.hh"
 52 #include "G4SystemOfUnits.hh"                      51 #include "G4SystemOfUnits.hh"
 53 #include "G4ThreeVector.hh"                    <<  52 #include "G4PhysicalConstants.hh"
 54 #include "globals.hh"                          <<  53            
 55                                                << 
 56 //....oooOO0OOooo........oooOO0OOooo........oo     54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 57                                                    55 
 58 DetectorConstruction::DetectorConstruction()   <<  56 DetectorConstruction::DetectorConstruction() :
 59   : fMaterial(nullptr),                        <<  57   fMaterial( nullptr ),
 60     fExperimentalHall_log(nullptr),            <<  58   fExperimentalHall_log( nullptr ), fExperimentalHall_phys( nullptr ),
 61     fExperimentalHall_phys(nullptr),           <<  59   fLogicSphere( nullptr ), fPhysiSphere( nullptr ),
 62     fLogicSphere(nullptr),                     <<  60   fLogicScoringShell( nullptr ), fPhysiScoringShell( nullptr ),
 63     fPhysiSphere(nullptr),                     <<  61   fDetectorMessenger( nullptr ),
 64     fLogicScoringShell(nullptr),               <<  62   fRadius( 1.0*CLHEP::m )  //***LOOKHERE*** Default values
 65     fPhysiScoringShell(nullptr),               << 
 66     fDetectorMessenger(nullptr),               << 
 67     fRadius(1.0 * CLHEP::m)  //***LOOKHERE***  << 
 68 {                                                  63 {
 69   // G4cout << " BEGIN  DetectorConstruction:: <<  64   //G4cout << " BEGIN  DetectorConstruction::DetectorConstruction()" << G4endl;
 70   fMaterial = G4NistManager::Instance()->FindO <<  65   fMaterial = G4NistManager::Instance()->FindOrBuildMaterial( "G4_Fe" );  //***LOOKHERE***
 71                                                <<  66                                                                           // Default material
 72   fDetectorMessenger = new DetectorMessenger(t <<  67   fDetectorMessenger = new DetectorMessenger( this );
 73   // G4cout << " END  DetectorConstruction::De <<  68   //G4cout << " END  DetectorConstruction::DetectorConstruction()" << G4endl;
 74 }                                                  69 }
 75                                                    70 
 76 //....oooOO0OOooo........oooOO0OOooo........oo     71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 77                                                    72 
 78 DetectorConstruction::~DetectorConstruction()  <<  73 DetectorConstruction::~DetectorConstruction() {
 79 {                                              << 
 80   delete fDetectorMessenger;                       74   delete fDetectorMessenger;
 81 }                                                  75 }
 82                                                    76 
 83 //....oooOO0OOooo........oooOO0OOooo........oo     77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 84                                                    78 
 85 G4VPhysicalVolume* DetectorConstruction::Const <<  79 G4VPhysicalVolume* DetectorConstruction::Construct() {
 86 {                                              <<  80   //G4cout << " BEGIN  DetectorConstruction::Construct()" << G4endl;
 87   // G4cout << " BEGIN  DetectorConstruction:: << 
 88   return ConstructSphere();                        81   return ConstructSphere();
 89 }                                                  82 }
 90                                                    83 
 91 //....oooOO0OOooo........oooOO0OOooo........oo     84 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 92                                                    85 
 93 G4VPhysicalVolume* DetectorConstruction::Const <<  86 G4VPhysicalVolume* DetectorConstruction::ConstructSphere() {
 94 {                                              <<  87   //G4cout << " BEGIN  DetectorConstruction::ConstructSphere()" << G4endl;
 95   // G4cout << " BEGIN  DetectorConstruction:: << 
 96                                                    88 
 97   // Clean old geometry, if any.                   89   // Clean old geometry, if any.
 98   G4GeometryManager::GetInstance()->OpenGeomet     90   G4GeometryManager::GetInstance()->OpenGeometry();
 99                                                    91 
100   G4PhysicalVolumeStore::GetInstance()->Clean(     92   G4PhysicalVolumeStore::GetInstance()->Clean();
101   G4LogicalVolumeStore::GetInstance()->Clean()     93   G4LogicalVolumeStore::GetInstance()->Clean();
102   G4SolidStore::GetInstance()->Clean();            94   G4SolidStore::GetInstance()->Clean();
103                                                    95 
104   // The target is a full solid sphere (G4Orb)     96   // The target is a full solid sphere (G4Orb), positioned at the center, (0.0, 0.0, 0.0).
105   // The world volume (experimental hall) is a     97   // The world volume (experimental hall) is a box 10% bigger than the sphere
106   // and it is filled of "G4_Galactic" materia     98   // and it is filled of "G4_Galactic" material.
107                                                    99 
108   G4double expHall_x = 1.1 * fRadius;  // half << 100   G4double expHall_x = 1.1*fRadius;  // half dimension along x
109   G4double expHall_y = 1.1 * fRadius;  // half << 101   G4double expHall_y = 1.1*fRadius;  // half dimension along y
110   G4double expHall_z = 1.1 * fRadius;  // half << 102   G4double expHall_z = 1.1*fRadius;  // half dimension along z
111                                                   103 
112   G4Material* vacuum = G4NistManager::Instance << 104   G4Material* vacuum = G4NistManager::Instance()->FindOrBuildMaterial( "G4_Galactic" );
113                                                   105 
114   // Experimental hall                            106   // Experimental hall
115   G4Box* experimentalHall_box = new G4Box("exp << 107   G4Box* experimentalHall_box = new G4Box( "expHall_box", expHall_x, expHall_y, expHall_z );
116   fExperimentalHall_log = new G4LogicalVolume( << 108   fExperimentalHall_log = new G4LogicalVolume( experimentalHall_box, // solid 
117                                                << 109                                                vacuum,               // material
118                                                << 110                                                "expHall_log",        // name
119                                                << 111                                                0,                    // field manager
120                                                << 112                                                0,                    // sensitive detector
121                                                << 113                                                0 );                  // user limits
122   fExperimentalHall_phys = new G4PVPlacement(0 << 114   fExperimentalHall_phys = new G4PVPlacement( 0,                     // rotation
123                                              G << 115                                               G4ThreeVector(),       // translation
124                                              " << 116                                               "expHall",             // name
125                                              f << 117                                               fExperimentalHall_log, // logical volume
126                                              0 << 118                                               0,                     // mother physical volume
127                                              f << 119                                               false,                 // boolean operation
128                                              0 << 120                                               0 );                   // copy number
129                                                   121 
130   // Target sphere                                122   // Target sphere
131   G4Orb* solidSphere = new G4Orb("solidSphere" << 123   G4Orb* solidSphere = new G4Orb( "solidSphere",            // name
132                                  fRadius);  // << 124                                   fRadius );                // outer radius
133   fLogicSphere = new G4LogicalVolume(solidSphe << 125   fLogicSphere = new G4LogicalVolume( solidSphere,          // solid
134                                      fMaterial << 126                                       fMaterial,            // material
135                                      "logicSph << 127                                       "logicSphere",        // name
136                                      0,  // fi << 128                                       0,                    // field manager
137                                      0,  // se << 129                                       0,                    // sensitive detector
138                                      0);  // u << 130                                       0 );                  // user limits
139   fPhysiSphere = new G4PVPlacement(0,  // rota << 131   fPhysiSphere = new G4PVPlacement( 0,                      // rotation
140                                    G4ThreeVect << 132                                     G4ThreeVector(),        // translation
141                                    "physiSpher << 133                                     "physiSphere",          // name
142                                    fLogicSpher << 134                                     fLogicSphere,           // logical volume
143                                    fExperiment << 135                                     fExperimentalHall_phys, // mother physical volume
144                                    false,  //  << 136                                     false,                  // boolean operation
145                                    0);  // cop << 137                                     0 );                    // copy number
146                                                   138 
147   // Scoring shell (a thin vacuum layer, immed    139   // Scoring shell (a thin vacuum layer, immediately outside the target sphere)
148   G4Sphere* solidScoringShell = new G4Sphere(" << 140   G4Sphere* solidScoringShell = new G4Sphere( "solidScoringShell",   // name
149                                              f << 141                                               fRadius,               // Inner radius (the radius
150                                                << 142                                                                      // of the target sphere)
151                                              f << 143                                               fRadius + fScoringThickness,  // Outer radius
152                                              0 << 144                                               0.0,                   // Starting Phi angle of the
153                                                << 145                                                                      // segment in radians
154                                              2 << 146                                               2.0*CLHEP::pi,         // Delta Phi angle of the
155                                                << 147                                                                      // segment in radians
156                                              0 << 148                                               0.0,                   // Starting Theta angle of
157                                                << 149                                                                      // the segment in radians
158                                              C << 150                                               CLHEP::pi );           // Delta Theta angle of the
159                                                << 151                                                                      // segment in radians
160   fLogicScoringShell = new G4LogicalVolume(sol << 152   fLogicScoringShell = new G4LogicalVolume( solidScoringShell,       // solid
161                                            vac << 153                                             vacuum,                  // material
162                                            "lo << 154                                             "logicScoringShell",     // name
163                                            0,  << 155                                             0,                       // field manager
164                                            0,  << 156                                             0,                       // sensitive detector
165                                            0); << 157                                             0 );                     // user limits
166   fPhysiScoringShell = new G4PVPlacement(0,  / << 158   fPhysiScoringShell = new G4PVPlacement( 0,                         // rotation
167                                          G4Thr << 159                                           G4ThreeVector(),           // translation
168                                          "phys << 160                                           "physiScoringShell",       // name
169                                          fLogi << 161                                           fLogicScoringShell,        // logical volume
170                                          fExpe << 162                                           fExperimentalHall_phys,    // mother physical volume
171                                          false << 163                                           false,                     // boolean operation
172                                          0);   << 164                                           0 );                       // copy number
173                                                << 165 
174   G4cout << G4endl << "DetectorConstruction::C << 166   G4cout << G4endl
175          << "\t World (box) size: " << G4endl  << 167          << "DetectorConstruction::ConstructSphere() : " << G4endl
176          << "\t y : -/+ " << expHall_y << " mm << 168          << "\t World (box) size: " << G4endl
177          << "\t z : -/+ " << expHall_z << " mm << 169          << "\t \t x : -/+ " << expHall_x << " mm ;"
                                                   >> 170          << "\t y : -/+ "    << expHall_y << " mm ;"
                                                   >> 171          << "\t z : -/+ "    << expHall_z << " mm ;" << G4endl
                                                   >> 172          << G4endl << G4endl;
178                                                   173 
179   // G4cout << " END  DetectorConstruction::Co << 174   //G4cout << " END  DetectorConstruction::ConstructSphere()
180                                                   175 
181   return fExperimentalHall_phys;                  176   return fExperimentalHall_phys;
182 }                                                 177 }
183                                                   178 
184 //....oooOO0OOooo........oooOO0OOooo........oo    179 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
185                                                   180 
186 void DetectorConstruction::SetMaterial(const G << 181 void DetectorConstruction::SetMaterial( const G4String name ) {
187 {                                              << 182   fMaterial = G4NistManager::Instance()->FindOrBuildMaterial( name );
188   fMaterial = G4NistManager::Instance()->FindO << 183   if ( fMaterial == nullptr ) {
189   if (fMaterial == nullptr) {                  << 184     G4cout << G4endl << G4endl
190     G4cout << G4endl << G4endl << "WARNING: th << 185            << "WARNING: the name of the material has not been recognized!" << G4endl
191            << G4endl << "     ===> the default << 186            << "     ===> the default  * G4_Fe *  will be used."
192     fMaterial = G4NistManager::Instance()->Fin << 187            << G4endl << G4endl;
                                                   >> 188     fMaterial = G4NistManager::Instance()->FindOrBuildMaterial( "G4_Fe" );
193   }                                               189   }
194   if (fLogicSphere) fLogicSphere->SetMaterial( << 190   if ( fLogicSphere ) fLogicSphere->SetMaterial( fMaterial );
195   // G4cout << " Absorber Material = " << logi << 191   //G4cout << " Absorber Material = " << logicSphere->GetMaterial()->GetName() << G4endl;
196 }                                                 192 }
197                                                   193 
198 //....oooOO0OOooo........oooOO0OOooo........oo    194 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
199                                                   195 
200 void DetectorConstruction::UpdateGeometry()    << 196 void DetectorConstruction::UpdateGeometry() {
201 {                                              << 197   //G4cout << " BEGIN  DetectorConstruction::UpdateGeometry" << G4endl;
202   // G4cout << " BEGIN  DetectorConstruction:: << 
203   G4RunManager::GetRunManager()->ReinitializeG    198   G4RunManager::GetRunManager()->ReinitializeGeometry();
204   PrintParameters();                              199   PrintParameters();
205   // Update also the position of the gun          200   // Update also the position of the gun
206   const PrimaryGeneratorAction* pPrimaryAction << 201   const PrimaryGeneratorAction* pPrimaryAction = dynamic_cast< const PrimaryGeneratorAction* >
207     G4RunManager::GetRunManager()->GetUserPrim << 202     ( G4RunManager::GetRunManager()->GetUserPrimaryGeneratorAction() );
208   if (pPrimaryAction) pPrimaryAction->SetGunPo << 203   if ( pPrimaryAction ) pPrimaryAction->SetGunPosition();
209   // G4cout << " END  DetectorConstruction::Up << 204   //G4cout << " END  DetectorConstruction::UpdateGeometry" << G4endl;
210 }                                                 205 }
211                                                   206 
212 //....oooOO0OOooo........oooOO0OOooo........oo    207 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
213                                                   208 
214 void DetectorConstruction::PrintParameters()   << 209 void DetectorConstruction::PrintParameters() {
215 {                                              << 210   G4cout << G4endl << G4endl
216   G4cout << G4endl << G4endl << " ------  Dete << 211          << " ------  DetectorConstruction::PrintParameters() ------ " << G4endl
217          << " Material         = " << fMateria    212          << " Material         = " << fMaterial->GetName() << G4endl
218          << " Radius           = " << fRadius     213          << " Radius           = " << fRadius << " mm" << G4endl
219          << " ScoringThickness = " << fScoring    214          << " ScoringThickness = " << fScoringThickness << " mm" << G4endl
220          << " -------------------------------- << 215          << " -------------------------------------------------------- "
                                                   >> 216          << G4endl << G4endl;
221 }                                                 217 }
222                                                   218 
223 //....oooOO0OOooo........oooOO0OOooo........oo    219 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
224                                                   220