Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/electromagnetic/TestEm11/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/electromagnetic/TestEm11/src/DetectorConstruction.cc (Version 11.3.0) and /examples/extended/electromagnetic/TestEm11/src/DetectorConstruction.cc (Version 10.7)


  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/TestEm11/src/Detecto     26 /// \file electromagnetic/TestEm11/src/DetectorConstruction.cc
 27 /// \brief Implementation of the DetectorConst     27 /// \brief Implementation of the DetectorConstruction class
 28 //                                                 28 //
 29 //                                                 29 //
 30 //....oooOO0OOooo........oooOO0OOooo........oo     30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 31 //....oooOO0OOooo........oooOO0OOooo........oo     31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 32                                                    32 
 33 #include "DetectorConstruction.hh"                 33 #include "DetectorConstruction.hh"
 34                                                << 
 35 #include "DetectorMessenger.hh"                    34 #include "DetectorMessenger.hh"
 36                                                    35 
 37 #include "G4AutoDelete.hh"                     <<  36 #include "G4NistManager.hh"
                                                   >>  37 #include "G4Material.hh"
 38 #include "G4Box.hh"                                38 #include "G4Box.hh"
 39 #include "G4GeometryManager.hh"                << 
 40 #include "G4GlobalMagFieldMessenger.hh"        << 
 41 #include "G4LogicalVolume.hh"                      39 #include "G4LogicalVolume.hh"
 42 #include "G4LogicalVolumeStore.hh"             << 
 43 #include "G4Material.hh"                       << 
 44 #include "G4NistManager.hh"                    << 
 45 #include "G4PVPlacement.hh"                        40 #include "G4PVPlacement.hh"
 46 #include "G4PVReplica.hh"                          41 #include "G4PVReplica.hh"
 47 #include "G4PhysicalConstants.hh"              <<  42 #include "G4UniformMagField.hh"
                                                   >>  43 
                                                   >>  44 #include "G4GeometryManager.hh"
 48 #include "G4PhysicalVolumeStore.hh"                45 #include "G4PhysicalVolumeStore.hh"
 49 #include "G4RunManager.hh"                     <<  46 #include "G4LogicalVolumeStore.hh"
 50 #include "G4SolidStore.hh"                         47 #include "G4SolidStore.hh"
 51 #include "G4SystemOfUnits.hh"                  <<  48 
 52 #include "G4UImanager.hh"                          49 #include "G4UImanager.hh"
 53 #include "G4UniformMagField.hh"                << 
 54 #include "G4UnitsTable.hh"                         50 #include "G4UnitsTable.hh"
 55                                                <<  51 #include "G4PhysicalConstants.hh"
                                                   >>  52 #include "G4SystemOfUnits.hh"
                                                   >>  53 #include "G4GlobalMagFieldMessenger.hh"
                                                   >>  54 #include "G4AutoDelete.hh"
                                                   >>  55 #include "G4RunManager.hh"
 56 #include <iomanip>                                 56 #include <iomanip>
 57                                                    57 
 58 //....oooOO0OOooo........oooOO0OOooo........oo     58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 59                                                    59 
 60 DetectorConstruction::DetectorConstruction()       60 DetectorConstruction::DetectorConstruction()
                                                   >>  61 :G4VUserDetectorConstruction(),fDefaultMaterial(0),fPhysiWorld(0),
                                                   >>  62  fDetectorMessenger(0)
 61 {                                                  63 {
 62   // default parameter values of the absorbers     64   // default parameter values of the absorbers
 63   fNbOfAbsor = 1;                                  65   fNbOfAbsor = 1;
 64   fAbsorThickness[0] = 0. * mm;  // dummy, for <<  66   fAbsorThickness[0] = 0*mm;        //dummy, for initialization   
 65   fAbsorThickness[1] = 1. * mm;                <<  67   fAbsorThickness[1] = 1*mm;  
 66   fAbsorSizeYZ = 1. * mm;                      <<  68   fAbsorSizeYZ       = 1.*mm;
 67   for (G4int iAbs = 0; iAbs < kMaxAbsor; iAbs+ <<  69   for (G4int iAbs=0; iAbs<kMaxAbsor; iAbs++) {
 68     fNbOfDivisions[iAbs] = 1;                  <<  70     fNbOfDivisions[iAbs]  = 1;
 69   }                                            <<  71   }  
 70   ComputeParameters();                             72   ComputeParameters();
 71                                                    73 
 72   // materials                                     74   // materials
 73   DefineMaterials();                               75   DefineMaterials();
 74   SetAbsorMaterial(1, "G4_Si");                <<  76   SetAbsorMaterial(1,"G4_Si");
 75                                                    77 
 76   // create commands for interactive definitio     78   // create commands for interactive definition of the calorimeter
 77   fDetectorMessenger = new DetectorMessenger(t     79   fDetectorMessenger = new DetectorMessenger(this);
 78 }                                                  80 }
 79                                                    81 
 80 //....oooOO0OOooo........oooOO0OOooo........oo     82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 81                                                    83 
 82 DetectorConstruction::~DetectorConstruction()      84 DetectorConstruction::~DetectorConstruction()
 83 {                                                  85 {
 84   delete fDetectorMessenger;                       86   delete fDetectorMessenger;
 85 }                                                  87 }
 86                                                    88 
 87 //....oooOO0OOooo........oooOO0OOooo........oo     89 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 88                                                    90 
 89 G4VPhysicalVolume* DetectorConstruction::Const     91 G4VPhysicalVolume* DetectorConstruction::Construct()
 90 {                                                  92 {
 91   return ConstructVolumes();                       93   return ConstructVolumes();
 92 }                                                  94 }
 93                                                    95 
 94 //....oooOO0OOooo........oooOO0OOooo........oo     96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 95                                                    97 
 96 void DetectorConstruction::DefineMaterials()       98 void DetectorConstruction::DefineMaterials()
 97 {                                                  99 {
 98   G4NistManager* man = G4NistManager::Instance    100   G4NistManager* man = G4NistManager::Instance();
 99                                                << 101   
100   man->FindOrBuildMaterial("G4_Al");              102   man->FindOrBuildMaterial("G4_Al");
101   man->FindOrBuildMaterial("G4_Si");              103   man->FindOrBuildMaterial("G4_Si");
102   man->FindOrBuildMaterial("G4_Fe");              104   man->FindOrBuildMaterial("G4_Fe");
103   man->FindOrBuildMaterial("G4_Cu");           << 105   man->FindOrBuildMaterial("G4_Cu");  
104   man->FindOrBuildMaterial("G4_Ge");              106   man->FindOrBuildMaterial("G4_Ge");
105   man->FindOrBuildMaterial("G4_Mo");              107   man->FindOrBuildMaterial("G4_Mo");
106   man->FindOrBuildMaterial("G4_Ta");              108   man->FindOrBuildMaterial("G4_Ta");
107   man->FindOrBuildMaterial("G4_W");               109   man->FindOrBuildMaterial("G4_W");
108   man->FindOrBuildMaterial("G4_Au");              110   man->FindOrBuildMaterial("G4_Au");
109   man->FindOrBuildMaterial("G4_Pb");           << 111   man->FindOrBuildMaterial("G4_Pb");  
110   man->FindOrBuildMaterial("G4_PbWO4");           112   man->FindOrBuildMaterial("G4_PbWO4");
111   man->FindOrBuildMaterial("G4_SODIUM_IODIDE")    113   man->FindOrBuildMaterial("G4_SODIUM_IODIDE");
112                                                << 114   
113   man->FindOrBuildMaterial("G4_AIR");             115   man->FindOrBuildMaterial("G4_AIR");
114   man->FindOrBuildMaterial("G4_WATER");           116   man->FindOrBuildMaterial("G4_WATER");
115                                                << 117   
116   G4Element* H = man->FindOrBuildElement("H"); << 118   G4Element* H = man->FindOrBuildElement("H"); 
117   G4Element* O = man->FindOrBuildElement("O");    119   G4Element* O = man->FindOrBuildElement("O");
118                                                << 120   
119   G4Material* H2O = new G4Material("Water", 1. << 121   G4Material* H2O = 
                                                   >> 122   new G4Material("Water", 1.000*g/cm3, 2);
120   H2O->AddElement(H, 2);                          123   H2O->AddElement(H, 2);
121   H2O->AddElement(O, 1);                          124   H2O->AddElement(O, 1);
122   H2O->GetIonisation()->SetMeanExcitationEnerg << 125   H2O->GetIonisation()->SetMeanExcitationEnergy(78.0*eV);
123                                                << 
124   G4double density = universe_mean_density;  / << 
125   G4double pressure = 3.e-18 * pascal;         << 
126   G4double temperature = 2.73 * kelvin;        << 
127   G4Material* Galactic =                       << 
128     new G4Material("Galactic", 1., 1.008 * g / << 
129                                                   126 
                                                   >> 127   G4double density     = universe_mean_density;    //from PhysicalConstants.h
                                                   >> 128   G4double pressure    = 3.e-18*pascal;
                                                   >> 129   G4double temperature = 2.73*kelvin;
                                                   >> 130   G4Material* Galactic =   
                                                   >> 131   new G4Material("Galactic", 1., 1.008*g/mole, density,
                                                   >> 132                              kStateGas,temperature,pressure);
                                                   >> 133                              
130   fDefaultMaterial = Galactic;                    134   fDefaultMaterial = Galactic;
131                                                << 135   
132   //  G4cout << *(G4Material::GetMaterialTable    136   //  G4cout << *(G4Material::GetMaterialTable()) << G4endl;
133 }                                                 137 }
134                                                   138 
135 //....oooOO0OOooo........oooOO0OOooo........oo    139 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
136                                                   140 
137 void DetectorConstruction::ComputeParameters()    141 void DetectorConstruction::ComputeParameters()
138 {                                                 142 {
139   // Compute total thickness of absorbers         143   // Compute total thickness of absorbers
140   fAbsorSizeX = 0.;                               144   fAbsorSizeX = 0.;
141   for (G4int iAbs = 1; iAbs <= fNbOfAbsor; iAb << 145   for (G4int iAbs=1; iAbs<=fNbOfAbsor; iAbs++) {
142     fAbsorSizeX += fAbsorThickness[iAbs];         146     fAbsorSizeX += fAbsorThickness[iAbs];
143   }                                               147   }
144 }                                                 148 }
145                                                   149 
146 //....oooOO0OOooo........oooOO0OOooo........oo    150 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
147                                                   151 
148 G4VPhysicalVolume* DetectorConstruction::Const    152 G4VPhysicalVolume* DetectorConstruction::ConstructVolumes()
149 {                                                 153 {
150   // complete the Calor parameters definition     154   // complete the Calor parameters definition
151   ComputeParameters();                            155   ComputeParameters();
152                                                   156 
153   // Cleanup old geometry                         157   // Cleanup old geometry
154   G4GeometryManager::GetInstance()->OpenGeomet    158   G4GeometryManager::GetInstance()->OpenGeometry();
155   G4PhysicalVolumeStore::GetInstance()->Clean(    159   G4PhysicalVolumeStore::GetInstance()->Clean();
156   G4LogicalVolumeStore::GetInstance()->Clean()    160   G4LogicalVolumeStore::GetInstance()->Clean();
157   G4SolidStore::GetInstance()->Clean();           161   G4SolidStore::GetInstance()->Clean();
158                                                   162 
159   //                                              163   //
160   // World                                        164   // World
161   //                                              165   //
162   G4Box* solidWorld = new G4Box("World",  // n << 166   G4Box* solidWorld =
163                                 fAbsorSizeX /  << 167     new G4Box("World",                                             //name
164                                                << 168                fAbsorSizeX/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2);       //size
165   G4LogicalVolume* logicWorld = new G4LogicalV << 169 
166                                                << 170   G4LogicalVolume* logicWorld =
167                                                << 171     new G4LogicalVolume(solidWorld,              //solid
168                                                << 172                         fDefaultMaterial,        //material
169   fPhysiWorld = new G4PVPlacement(0,  // no ro << 173                         "World");                //name
170                                   G4ThreeVecto << 174 
171                                   logicWorld,  << 175   fPhysiWorld = 
172                                   "World",  // << 176     new G4PVPlacement(0,                        //no rotation
173                                   0,  // mothe << 177                         G4ThreeVector(),        //at (0,0,0)
174                                   false,  // n << 178                       logicWorld,               //logical volume
175                                   0);  // copy << 179                       "World",                  //name
176                                                << 180                        0,                       //mother volume
                                                   >> 181                        false,                   //no boolean operation
                                                   >> 182                        0);                      //copy number
                                                   >> 183                                  
177   //                                              184   //
178   // Absorbers                                    185   // Absorbers
179   //                                              186   //
180   fXfront[0] = -0.5 * fAbsorSizeX;             << 187   fXfront[0] = -0.5*fAbsorSizeX;
181   //                                              188   //
182   for (G4int k = 1; k <= fNbOfAbsor; k++) {    << 189   for (G4int k=1; k<=fNbOfAbsor; k++) {
183     G4Material* material = fAbsorMaterial[k];     190     G4Material* material = fAbsorMaterial[k];
184     G4String matname = material->GetName();       191     G4String matname = material->GetName();
185                                                << 192       
186     G4Box* solidAbsor =                           193     G4Box* solidAbsor =
187       new G4Box(matname, fAbsorThickness[k] /  << 194       new G4Box(matname,fAbsorThickness[k]/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2);
188                                                << 
189     G4LogicalVolume* logicAbsor = new G4Logica << 
190                                                << 
191                                                << 
192                                                << 
193     fXfront[k] = fXfront[k - 1] + fAbsorThickn << 
194     G4double xcenter = fXfront[k] + 0.5 * fAbs << 
195     G4ThreeVector position = G4ThreeVector(xce << 
196                                                << 
197     new G4PVPlacement(0,  // no rotation       << 
198                       position,  // position   << 
199                       logicAbsor,  // logical  << 
200                       matname,  // name        << 
201                       logicWorld,  // mother   << 
202                       false,  // no boulean op << 
203                       k);  // copy number      << 
204                                                   195 
                                                   >> 196     G4LogicalVolume* logicAbsor =
                                                   >> 197       new G4LogicalVolume(solidAbsor,           // solid
                                                   >> 198                           material,             // material
                                                   >> 199                           matname);             // name
                                                   >> 200                                      
                                                   >> 201     fXfront[k] = fXfront[k-1] + fAbsorThickness[k-1];    
                                                   >> 202     G4double xcenter = fXfront[k]+0.5*fAbsorThickness[k];
                                                   >> 203     G4ThreeVector position = G4ThreeVector(xcenter,0.,0.);
                                                   >> 204   
                                                   >> 205       new G4PVPlacement(0,                     //no rotation
                                                   >> 206                               position,        //position
                                                   >> 207                         logicAbsor,            //logical volume        
                                                   >> 208                         matname,               //name
                                                   >> 209                         logicWorld,            //mother
                                                   >> 210                         false,                 //no boulean operat
                                                   >> 211                         k);                    //copy number
                                                   >> 212     
205     // divisions, if any                          213     // divisions, if any
206     //                                            214     //
207     G4double LayerThickness = fAbsorThickness[ << 215     G4double LayerThickness = fAbsorThickness[k]/fNbOfDivisions[k];
208     G4Box* solidLayer = new G4Box(matname, Lay << 216     G4Box* solidLayer =   
209                                                << 217       new G4Box(matname,LayerThickness/2,fAbsorSizeYZ/2,fAbsorSizeYZ/2);
210     G4LogicalVolume* logicLayer = new G4Logica << 218                        
211                                                << 219     G4LogicalVolume* logicLayer =
212                                                << 220       new G4LogicalVolume(solidLayer,      //solid
213                                                << 221                           material,        //material
214     new G4PVReplica(matname,  // name          << 222                           matname);        //name
215                     logicLayer,  // logical vo << 223                                        
216                     logicAbsor,  // mother     << 224       new G4PVReplica(matname,             //name
217                     kXAxis,  // axis of replic << 225                             logicLayer,    //logical volume
218                     fNbOfDivisions[k],  // num << 226                             logicAbsor,    //mother
219                     LayerThickness);  // witdt << 227                       kXAxis,              //axis of replication
                                                   >> 228                       fNbOfDivisions[k],   //number of replica
                                                   >> 229                       LayerThickness);     //witdth of replica    
220   }                                               230   }
221                                                   231 
222   PrintParameters();                              232   PrintParameters();
223                                                   233 
224   // always return the physical World          << 234   //always return the physical World
225   //                                              235   //
226   return fPhysiWorld;                             236   return fPhysiWorld;
227 }                                                 237 }
228                                                   238 
229 //....oooOO0OOooo........oooOO0OOooo........oo    239 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
230                                                   240 
231 void DetectorConstruction::PrintParameters()      241 void DetectorConstruction::PrintParameters()
232 {                                                 242 {
233   G4cout << "\n-------------------------------    243   G4cout << "\n-------------------------------------------------------------"
234          << "\n ---> The Absorber is " << fNbO    244          << "\n ---> The Absorber is " << fNbOfAbsor << " layers of:";
235   for (G4int i = 1; i <= fNbOfAbsor; i++) {    << 245   for (G4int i=1; i<=fNbOfAbsor; i++)
236     G4cout << "\n \t" << std::setw(16) << fAbs << 246      {
237            << G4BestUnit(fAbsorThickness[i], " << 247       G4cout << "\n \t" << std::setw(12) << fAbsorMaterial[i]->GetName() <<": "
238            << " slices";                       << 248               << std::setw(6) << G4BestUnit(fAbsorThickness[i],"Length")
239   }                                            << 249               << "  divided in " << fNbOfDivisions[i] << " slices";
240   G4cout << "\n------------------------------- << 250      }
                                                   >> 251   G4cout << "\n-------------------------------------------------------------\n"
                                                   >> 252          << G4endl;
241 }                                                 253 }
242                                                   254 
243 //....oooOO0OOooo........oooOO0OOooo........oo    255 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
244                                                   256 
245 void DetectorConstruction::SetNbOfAbsor(G4int     257 void DetectorConstruction::SetNbOfAbsor(G4int ival)
246 {                                                 258 {
247   // set the number of Absorbers                  259   // set the number of Absorbers
248   //                                              260   //
249   if (ival < 1 || ival > (kMaxAbsor - 1)) {    << 261   if (ival < 1 || ival > (kMaxAbsor-1))
250     G4cout << "\n ---> warning from SetfNbOfAb << 262     { G4cout << "\n ---> warning from SetfNbOfAbsor: "
251            << kMaxAbsor - 1 << ". Command refu << 263              << ival << " must be at least 1 and and most " << kMaxAbsor-1
252     return;                                    << 264              << ". Command refused" << G4endl;
253   }                                            << 265       return;
                                                   >> 266     }
254   fNbOfAbsor = ival;                              267   fNbOfAbsor = ival;
255   G4RunManager::GetRunManager()->ReinitializeG    268   G4RunManager::GetRunManager()->ReinitializeGeometry();
256 }                                                 269 }
257                                                   270 
258 //....oooOO0OOooo........oooOO0OOooo........oo    271 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
259                                                   272 
260 void DetectorConstruction::SetAbsorMaterial(G4 << 273 void DetectorConstruction::SetAbsorMaterial(G4int iabs,const G4String& material)
261 {                                                 274 {
262   // search the material by its name              275   // search the material by its name
263   //                                              276   //
264   if (iabs > fNbOfAbsor || iabs <= 0) {        << 277   if (iabs > fNbOfAbsor || iabs <= 0)
265     G4cout << "\n --->warning from SetfAbsorMa << 278     { G4cout << "\n --->warning from SetfAbsorMaterial: absor number "
266            << " out of range. Command refused" << 279              << iabs << " out of range. Command refused" << G4endl;
267     return;                                    << 280       return;
268   }                                            << 281     }
269                                                   282 
270   G4Material* pttoMaterial = G4NistManager::In << 283   G4Material* pttoMaterial = 
                                                   >> 284     G4NistManager::Instance()->FindOrBuildMaterial(material);
271   if (pttoMaterial) {                             285   if (pttoMaterial) {
272     fAbsorMaterial[iabs] = pttoMaterial;       << 286       fAbsorMaterial[iabs] = pttoMaterial;
273     G4RunManager::GetRunManager()->PhysicsHasB << 287       G4RunManager::GetRunManager()->PhysicsHasBeenModified();
274     G4cout << "\n " << pttoMaterial << G4endl; << 
275   }                                               288   }
276 }                                                 289 }
277                                                   290 
278 //....oooOO0OOooo........oooOO0OOooo........oo    291 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
279                                                   292 
280 void DetectorConstruction::SetAbsorThickness(G << 293 void DetectorConstruction::SetAbsorThickness(G4int iabs,G4double val)
281 {                                                 294 {
282   // change Absorber thickness                    295   // change Absorber thickness
283   //                                              296   //
284   if (iabs > fNbOfAbsor || iabs <= 0) {        << 297   if (iabs > fNbOfAbsor || iabs <= 0)
285     G4cout << "\n --->warning from SetfAbsorTh << 298     { G4cout << "\n --->warning from SetfAbsorThickness: absor number "
286            << " out of range. Command refused" << 299              << iabs << " out of range. Command refused" << G4endl;
287     return;                                    << 300       return;
288   }                                            << 301     }
289   if (val <= DBL_MIN) {                        << 302   if (val <= DBL_MIN)
290     G4cout << "\n --->warning from SetfAbsorTh << 303     { G4cout << "\n --->warning from SetfAbsorThickness: thickness "
291            << " out of range. Command refused" << 304              << val  << " out of range. Command refused" << G4endl;
292     return;                                    << 305       return;
293   }                                            << 306     }
294   fAbsorThickness[iabs] = val;                    307   fAbsorThickness[iabs] = val;
295   G4RunManager::GetRunManager()->ReinitializeG    308   G4RunManager::GetRunManager()->ReinitializeGeometry();
296 }                                                 309 }
297                                                   310 
298 //....oooOO0OOooo........oooOO0OOooo........oo    311 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
299                                                   312 
300 void DetectorConstruction::SetAbsorSizeYZ(G4do    313 void DetectorConstruction::SetAbsorSizeYZ(G4double val)
301 {                                                 314 {
302   // change the transverse size                   315   // change the transverse size
303   //                                              316   //
304   if (val <= DBL_MIN) {                        << 317   if (val <= DBL_MIN)
305     G4cout << "\n --->warning from SetfAbsorSi << 318     { G4cout << "\n --->warning from SetfAbsorSizeYZ: thickness "
306            << " out of range. Command refused" << 319              << val  << " out of range. Command refused" << G4endl;
307     return;                                    << 320       return;
308   }                                            << 321     }
309   fAbsorSizeYZ = val;                             322   fAbsorSizeYZ = val;
310   G4RunManager::GetRunManager()->ReinitializeG    323   G4RunManager::GetRunManager()->ReinitializeGeometry();
311 }                                                 324 }
312                                                   325 
313 //....oooOO0OOooo........oooOO0OOooo........oo    326 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
314                                                   327 
315 void DetectorConstruction::SetNbOfDivisions(G4    328 void DetectorConstruction::SetNbOfDivisions(G4int iabs, G4int ival)
316 {                                                 329 {
317   // set the number of divisions                  330   // set the number of divisions
318   //                                              331   //
319   if (iabs > fNbOfAbsor || iabs < 1) {         << 332   if (iabs > fNbOfAbsor || iabs < 1)
320     G4cout << "\n --->warning from SetNbOfDivi << 333     { G4cout << "\n --->warning from SetNbOfDivisions: absor number "
321            << " out of range. Command refused" << 334              << iabs << " out of range. Command refused" << G4endl;
322     return;                                    << 335       return;
323   }                                            << 336     }
324                                                << 337       
325   if (ival < 1) {                              << 338   if (ival < 1)
326     G4cout << "\n --->warning from SetNbOfDivi << 339     { G4cout << "\n --->warning from SetNbOfDivisions: "
327            << " must be at least 1. Command re << 340              << ival << " must be at least 1. Command refused" << G4endl;
328     return;                                    << 341       return;
329   }                                            << 342     }
330   fNbOfDivisions[iabs] = ival;                    343   fNbOfDivisions[iabs] = ival;
331   G4RunManager::GetRunManager()->ReinitializeG    344   G4RunManager::GetRunManager()->ReinitializeGeometry();
332 }                                                 345 }
333                                                   346 
334 //....oooOO0OOooo........oooOO0OOooo........oo    347 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
335                                                   348 
336 void DetectorConstruction::ConstructSDandField    349 void DetectorConstruction::ConstructSDandField()
337 {                                                 350 {
338   if (fFieldMessenger.Get() == 0) {            << 351     if ( fFieldMessenger.Get() == 0 ) {
339     // Create global magnetic field messenger. << 352         // Create global magnetic field messenger.
340     // Uniform magnetic field is then created  << 353         // Uniform magnetic field is then created automatically if
341     // the field value is not zero.            << 354         // the field value is not zero.
342     G4ThreeVector fieldValue = G4ThreeVector() << 355         G4ThreeVector fieldValue = G4ThreeVector();
343     G4GlobalMagFieldMessenger* msg = new G4Glo << 356         G4GlobalMagFieldMessenger* msg =
344     // msg->SetVerboseLevel(1);                << 357         new G4GlobalMagFieldMessenger(fieldValue);
345     G4AutoDelete::Register(msg);               << 358         //msg->SetVerboseLevel(1);
346     fFieldMessenger.Put(msg);                  << 359         G4AutoDelete::Register(msg);
347   }                                            << 360         fFieldMessenger.Put( msg );
                                                   >> 361     }
348 }                                                 362 }
349                                                   363 
350 //....oooOO0OOooo........oooOO0OOooo........oo    364 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
                                                   >> 365 
351                                                   366