Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/microelectronics/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/advanced/microelectronics/src/DetectorConstruction.cc (Version 11.3.0) and /examples/advanced/microelectronics/src/DetectorConstruction.cc (Version 10.3.p3)


  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 //  History :                                  << 
 27 //     21/10/2021 : DLa update to modify the m << 
 28 // -------------------------------------------     26 // -------------------------------------------------------------------
                                                   >>  27 // $Id: DetectorConstruction.cc,v 1.1 2012-09-20 mraine Exp $
 29 // -------------------------------------------     28 // -------------------------------------------------------------------
 30                                                    29 
 31 #include "DetectorConstruction.hh"                 30 #include "DetectorConstruction.hh"
 32 #include "DetectorMessenger.hh"                << 
 33 #include "G4SystemOfUnits.hh"                      31 #include "G4SystemOfUnits.hh"
 34 #include "G4Region.hh"                             32 #include "G4Region.hh"
 35 #include "G4ProductionCuts.hh"                     33 #include "G4ProductionCuts.hh"
 36 #include "G4RunManager.hh"                     << 
 37                                                    34 
 38 //....oooOO0OOooo........oooOO0OOooo........oo     35 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 39                                                    36 
 40 DetectorConstruction::DetectorConstruction()       37 DetectorConstruction::DetectorConstruction()
 41 :G4VUserDetectorConstruction(), fPhysiWorld(nu <<  38 :fPhysiWorld(NULL), fLogicWorld(NULL), fSolidWorld(NULL)
 42 {                                              <<  39 {}  
 43   fBoxSize = 1.0*um;                           << 
 44   DefineMaterials();                           << 
 45   SetMaterial("G4_Si");                        << 
 46   fDetectorMessenger = new DetectorMessenger(t << 
 47 }                                              << 
 48                                                    40 
 49 //....oooOO0OOooo........oooOO0OOooo........oo     41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 50                                                    42 
 51 DetectorConstruction::~DetectorConstruction()      43 DetectorConstruction::~DetectorConstruction()
 52 {                                              <<  44 {}
 53   delete fPhysiWorld;                          << 
 54   delete fLogicWorld;                          << 
 55   delete fSolidWorld;                          << 
 56   //delete fWorldMaterial;   // no delete beca << 
 57   delete flogicTarget;                         << 
 58   delete ftargetSolid;                         << 
 59   delete fMaterial;                            << 
 60   delete fRegion;                              << 
 61   delete fDetectorMessenger;                   << 
 62 }                                              << 
 63                                                    45 
 64 //....oooOO0OOooo........oooOO0OOooo........oo     46 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 65                                                    47 
 66 G4VPhysicalVolume* DetectorConstruction::Const     48 G4VPhysicalVolume* DetectorConstruction::Construct()
 67                                                    49 
 68 {                                                  50 {
 69   DefineMaterials();                               51   DefineMaterials();
 70   return ConstructDetector();                      52   return ConstructDetector();
 71 }                                                  53 }
 72                                                    54 
 73 //....oooOO0OOooo........oooOO0OOooo........oo     55 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 74                                                    56 
 75 void DetectorConstruction::DefineMaterials()       57 void DetectorConstruction::DefineMaterials()
 76 {                                                  58 { 
 77                                                    59 
 78   // Silicon is defined from NIST material dat     60   // Silicon is defined from NIST material database
 79   G4NistManager * man = G4NistManager::Instanc     61   G4NistManager * man = G4NistManager::Instance();
 80   fMaterial =  man->FindOrBuildMaterial("G4_Si <<  62   G4Material * Si = man->FindOrBuildMaterial("G4_Si");
 81   fWorldMaterial =  man->FindOrBuildMaterial(" << 
 82                                                << 
 83 }                                              << 
 84                                                    63 
 85 //....oooOO0OOooo........oooOO0OOooo........oo <<  64   // Default materials in setup.
 86                                                <<  65   fSiMaterial = Si;
 87                                                <<  66   
 88                                                << 
 89 void DetectorConstruction::SetMaterial(const G << 
 90 {                                              << 
 91   // search the material by its name           << 
 92   G4Material* pttoMaterial =                   << 
 93      G4NistManager::Instance()->FindOrBuildMat << 
 94                                                << 
 95   if (pttoMaterial) {                          << 
 96     fMaterial = pttoMaterial;                  << 
 97     if ( flogicTarget ) { flogicTarget->SetMat << 
 98   } else {                                     << 
 99     G4cout << "\n--> warning from DetectorCons << 
100            << materialChoice << " not found" < << 
101   }                                            << 
102   G4RunManager::GetRunManager()->PhysicsHasBee << 
103 }                                                  67 }
104                                                    68 
105 //....oooOO0OOooo........oooOO0OOooo........oo << 
106                                                << 
107                                                << 
108 //....oooOO0OOooo........oooOO0OOooo........oo     69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
109 G4VPhysicalVolume* DetectorConstruction::Const     70 G4VPhysicalVolume* DetectorConstruction::ConstructDetector()
110 {                                                  71 {
111                                                    72 
112                                                << 
113 //....oooOO0OOooo........oooOO0OOooo........oo     73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
114                                                    74 
115   // WORLD VOLUME                                  75   // WORLD VOLUME
116                                                    76   
117                                                <<  77   fWorldSizeX  = 1*um; 
118     G4double TargetSizeX =  1*um;              <<  78   fWorldSizeY  = 1*um; 
119   G4double TargetSizeY =  TargetSizeX;         <<  79   fWorldSizeZ  = 1*um;
120   G4double TargetSizeZ =  TargetSizeX;         << 
121   fBoxSize = TargetSizeX;                      << 
122                                                << 
123   fWorldSizeX  = TargetSizeX*2;                << 
124   fWorldSizeY  = TargetSizeY*2;                << 
125   fWorldSizeZ  = TargetSizeZ*2;                << 
126                                                    80 
127   fSolidWorld = new G4Box("World",                 81   fSolidWorld = new G4Box("World",             //its name
128          fWorldSizeX/2,fWorldSizeY/2,fWorldSiz     82          fWorldSizeX/2,fWorldSizeY/2,fWorldSizeZ/2);  //its size
129                                                    83   
130                                                    84 
131   fLogicWorld = new G4LogicalVolume(fSolidWorl     85   fLogicWorld = new G4LogicalVolume(fSolidWorld,  //its solid
132            fWorldMaterial,    //its material   <<  86            fSiMaterial,   //its material
133            "World");    //its name                 87            "World");    //its name
134                                                    88   
135   fPhysiWorld = new G4PVPlacement(0,      //no     89   fPhysiWorld = new G4PVPlacement(0,      //no rotation
136            G4ThreeVector(), //at (0,0,0)           90            G4ThreeVector(), //at (0,0,0)
137                                  "World",   //     91                                  "World",   //its name
138                                  fLogicWorld,      92                                  fLogicWorld,   //its logical volume
139                                  0,     //its      93                                  0,     //its mother  volume
140                                  false,     //     94                                  false,     //no boolean operation
141                                  0);      //co     95                                  0);      //copy number
142                                                    96 
                                                   >>  97   G4double TargetSizeZ =  0.2*um; 
143                                                    98 
144                                                <<  99   G4Box* targetSolid = new G4Box("Target",             //its name
145   ftargetSolid = new G4Box("Target",           << 100          fWorldSizeX/2,fWorldSizeY/2,TargetSizeZ/2);   //its size
146          TargetSizeX/2,TargetSizeY/2,TargetSiz << 
147                                                   101   
148                                                   102 
149   flogicTarget = new G4LogicalVolume(ftargetSo << 103   G4LogicalVolume* logicTarget = new G4LogicalVolume(targetSolid,       //its solid
150                  fMaterial, //its material     << 104                  fSiMaterial, //its material
151                  "Target");   //its name          105                  "Target");   //its name
152                                                   106   
153   new G4PVPlacement(0,                            107   new G4PVPlacement(0,                                     //no rotation
154         G4ThreeVector(),                          108         G4ThreeVector(),                                 //at (0,0,0)
155         "Target",   //its name                    109         "Target",   //its name
156         flogicTarget, //its logical volume     << 110         logicTarget,  //its logical volume
157         fPhysiWorld,    //its mother  volume      111         fPhysiWorld,    //its mother  volume
158         false,    //no boolean operation          112         false,    //no boolean operation
159         0);     //copy number                     113         0);     //copy number
160                                                   114 
161   // Visualization attributes                     115   // Visualization attributes
162   G4VisAttributes* worldVisAtt= new G4VisAttri    116   G4VisAttributes* worldVisAtt= new G4VisAttributes(G4Colour(1.0,1.0,1.0)); //White
163   worldVisAtt->SetVisibility(true);               117   worldVisAtt->SetVisibility(true);
164   fLogicWorld->SetVisAttributes(worldVisAtt);     118   fLogicWorld->SetVisAttributes(worldVisAtt);
165                                                   119 
166   G4VisAttributes* worldVisAtt1 = new G4VisAtt    120   G4VisAttributes* worldVisAtt1 = new G4VisAttributes(G4Colour(1.0,0.0,0.0)); 
167   worldVisAtt1->SetVisibility(true);              121   worldVisAtt1->SetVisibility(true);
168   flogicTarget->SetVisAttributes(worldVisAtt1) << 122   logicTarget->SetVisAttributes(worldVisAtt1);
169                                                   123 
170   // Create Target G4Region and add logical vo    124   // Create Target G4Region and add logical volume
171                                                   125   
172   fRegion = new G4Region("Target");               126   fRegion = new G4Region("Target");
173                                                   127   
174   G4ProductionCuts* cuts = new G4ProductionCut    128   G4ProductionCuts* cuts = new G4ProductionCuts();
175                                                   129   
176   G4double defCut = 1*nanometer;                  130   G4double defCut = 1*nanometer;
177   cuts->SetProductionCut(defCut,"gamma");         131   cuts->SetProductionCut(defCut,"gamma");
178   cuts->SetProductionCut(defCut,"e-");            132   cuts->SetProductionCut(defCut,"e-");
179   cuts->SetProductionCut(defCut,"e+");            133   cuts->SetProductionCut(defCut,"e+");
180   cuts->SetProductionCut(defCut,"proton");        134   cuts->SetProductionCut(defCut,"proton");
181                                                   135   
182   fRegion->SetProductionCuts(cuts);               136   fRegion->SetProductionCuts(cuts);
183   fRegion->AddRootLogicalVolume(flogicTarget); << 137   fRegion->AddRootLogicalVolume(logicTarget); 
184                                                   138 
185   return fPhysiWorld;                             139   return fPhysiWorld;
186 }                                                 140 }
187                                                << 
188                                                << 
189 //....oooOO0OOooo........oooOO0OOooo........oo << 
190                                                << 
191 void DetectorConstruction::SetSize(G4double va << 
192 {                                              << 
193   fBoxSize = value;                            << 
194   if(ftargetSolid) {                           << 
195     ftargetSolid->SetXHalfLength(fBoxSize/2);  << 
196     ftargetSolid->SetYHalfLength(fBoxSize/2);  << 
197     ftargetSolid->SetZHalfLength(fBoxSize/2);  << 
198   }                                            << 
199   fWorldSizeX = value*2.0;                     << 
200   fWorldSizeY = value*2.0;                     << 
201   fWorldSizeZ = value*2.0;                     << 
202                                                << 
203   if(fSolidWorld) {                            << 
204     fSolidWorld->SetXHalfLength(fWorldSizeX/2) << 
205     fSolidWorld->SetYHalfLength(fWorldSizeY/2) << 
206     fSolidWorld->SetZHalfLength(fWorldSizeZ/2) << 
207   }                                            << 
208                                                << 
209 }                                              << 
210                                                << 
211                                                   141