Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/biasing/B01/src/B01DetectorConstruction.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/biasing/B01/src/B01DetectorConstruction.cc (Version 11.3.0) and /examples/extended/biasing/B01/src/B01DetectorConstruction.cc (Version 10.3.p2)


  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 biasing/B01/src/B01DetectorConstruct     26 /// \file biasing/B01/src/B01DetectorConstruction.cc
 27 /// \brief Implementation of the B01DetectorCo     27 /// \brief Implementation of the B01DetectorConstruction class
 28 //                                                 28 //
 29 //                                                 29 //
                                                   >>  30 // $Id: B01DetectorConstruction.cc 98774 2016-08-09 14:28:06Z gcosmo $
 30 //                                                 31 //
 31                                                    32 
                                                   >>  33 #include "G4Types.hh"
                                                   >>  34 #include <sstream>
                                                   >>  35 #include <set>
                                                   >>  36 #include "globals.hh"
                                                   >>  37 
 32 #include "B01DetectorConstruction.hh"              38 #include "B01DetectorConstruction.hh"
 33                                                    39 
                                                   >>  40 #include "G4Material.hh"
 34 #include "G4Box.hh"                                41 #include "G4Box.hh"
 35 #include "G4Colour.hh"                         <<  42 #include "G4Tubs.hh"
 36 #include "G4LogicalVolume.hh"                      43 #include "G4LogicalVolume.hh"
 37 #include "G4Material.hh"                       <<  44 #include "G4ThreeVector.hh"
 38 #include "G4PVPlacement.hh"                        45 #include "G4PVPlacement.hh"
                                                   >>  46 #include "G4VisAttributes.hh"
                                                   >>  47 #include "G4Colour.hh"
 39 #include "G4PhysicalConstants.hh"                  48 #include "G4PhysicalConstants.hh"
 40 #include "G4SystemOfUnits.hh"                      49 #include "G4SystemOfUnits.hh"
 41 #include "G4ThreeVector.hh"                    << 
 42 #include "G4Tubs.hh"                           << 
 43 #include "G4Types.hh"                          << 
 44 #include "G4VisAttributes.hh"                  << 
 45 #include "globals.hh"                          << 
 46                                                << 
 47 #include <set>                                 << 
 48 #include <sstream>                             << 
 49                                                    50 
 50 // For Primitive Scorers                           51 // For Primitive Scorers
                                                   >>  52 #include "G4SDManager.hh"
 51 #include "G4MultiFunctionalDetector.hh"            53 #include "G4MultiFunctionalDetector.hh"
                                                   >>  54 #include "G4SDParticleFilter.hh"
 52 #include "G4PSNofCollision.hh"                     55 #include "G4PSNofCollision.hh"
 53 #include "G4PSPopulation.hh"                       56 #include "G4PSPopulation.hh"
 54 #include "G4PSTrackCounter.hh"                     57 #include "G4PSTrackCounter.hh"
 55 #include "G4PSTrackLength.hh"                      58 #include "G4PSTrackLength.hh"
 56 #include "G4SDManager.hh"                      << 
 57 #include "G4SDParticleFilter.hh"               << 
 58                                                    59 
 59 // for importance biasing                          60 // for importance biasing
 60 #include "G4IStore.hh"                             61 #include "G4IStore.hh"
 61                                                    62 
 62 // for weight window technique                     63 // for weight window technique
 63 #include "G4WeightWindowStore.hh"                  64 #include "G4WeightWindowStore.hh"
 64                                                    65 
 65 //....oooOO0OOooo........oooOO0OOooo........oo     66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 66                                                    67 
 67 B01DetectorConstruction::B01DetectorConstructi <<  68 B01DetectorConstruction::B01DetectorConstruction() :
 68   : G4VUserDetectorConstruction(), fLogicalVol <<  69   G4VUserDetectorConstruction(),
 69 {                                              <<  70   fLogicalVolumeVector(),fPhysicalVolumeVector()
 70   ;                                            <<  71 {;}
 71 }                                              << 
 72                                                    72 
 73 //....oooOO0OOooo........oooOO0OOooo........oo     73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 74                                                    74 
 75 B01DetectorConstruction::~B01DetectorConstruct     75 B01DetectorConstruction::~B01DetectorConstruction()
 76 {                                                  76 {
 77   fLogicalVolumeVector.clear();                    77   fLogicalVolumeVector.clear();
 78   fPhysicalVolumeVector.clear();                   78   fPhysicalVolumeVector.clear();
 79 }                                                  79 }
 80                                                    80 
 81 //....oooOO0OOooo........oooOO0OOooo........oo     81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 82                                                    82 
 83 G4VPhysicalVolume* B01DetectorConstruction::Co     83 G4VPhysicalVolume* B01DetectorConstruction::Construct()
 84 {                                                  84 {
 85   G4double pos_x;                                  85   G4double pos_x;
 86   G4double pos_y;                                  86   G4double pos_y;
 87   G4double pos_z;                              <<  87   G4double pos_z; 
 88                                                    88 
 89   G4double density, pressure, temperature;         89   G4double density, pressure, temperature;
 90   G4double A;                                      90   G4double A;
 91   G4int Z;                                         91   G4int Z;
 92                                                    92 
 93   G4String name, symbol;                           93   G4String name, symbol;
 94   G4double z;                                      94   G4double z;
 95   G4double fractionmass;                           95   G4double fractionmass;
 96                                                    96 
 97   A = 1.01 * g / mole;                         <<  97   A = 1.01*g/mole;
 98   G4Element* elH = new G4Element(name = "Hydro <<  98   G4Element* elH  = new G4Element(name="Hydrogen",symbol="H" , Z= 1, A);
 99                                                    99 
100   A = 12.01 * g / mole;                        << 100   A = 12.01*g/mole;
101   G4Element* elC = new G4Element(name = "Carbo << 101   G4Element* elC  = new G4Element(name="Carbon"  ,symbol="C" , Z = 6, A);
102                                                   102 
103   A = 16.00 * g / mole;                        << 103   A = 16.00*g/mole;
104   G4Element* elO = new G4Element(name = "Oxyge << 104   G4Element* elO  = new G4Element(name="Oxygen"  ,symbol="O" , Z= 8, A);
105                                                   105 
106   A = 22.99 * g / mole;                        << 106   A = 22.99*g/mole; 
107   G4Element* elNa = new G4Element(name = "Natr << 107   G4Element* elNa  = new G4Element(name="Natrium"  ,symbol="Na" , Z=11 , A);
108                                                   108 
109   A = 200.59 * g / mole;                       << 109   A = 200.59*g/mole; 
110   G4Element* elHg = new G4Element(name = "Hg", << 110   G4Element* elHg  = new G4Element(name="Hg"  ,symbol="Hg" , Z=80, A);
111                                                   111 
112   A = 26.98 * g / mole;                        << 112   A = 26.98*g/mole; 
113   G4Element* elAl = new G4Element(name = "Alum << 113   G4Element* elAl  = new G4Element(name="Aluminium"  ,symbol="Al" , Z=13, A);
114                                                   114 
115   A = 28.09 * g / mole;                        << 115   A = 28.09*g/mole;
116   G4Element* elSi = new G4Element(name = "Sili << 116   G4Element* elSi  = new G4Element(name="Silicon", symbol="Si", Z=14, A);
117                                                   117 
118   A = 39.1 * g / mole;                         << 118   A = 39.1*g/mole; 
119   G4Element* elK = new G4Element(name = "K", s << 119   G4Element* elK  = new G4Element(name="K"  ,symbol="K" , Z=19 , A);
120                                                   120 
121   A = 69.72 * g / mole;                        << 121   A = 69.72*g/mole; 
122   G4Element* elCa = new G4Element(name = "Calz << 122   G4Element* elCa  = new G4Element(name="Calzium"  ,symbol="Ca" , Z=31 , A);
123                                                   123 
124   A = 55.85 * g / mole;                        << 124   A = 55.85*g/mole;
125   G4Element* elFe = new G4Element(name = "Iron << 125   G4Element* elFe = new G4Element(name="Iron"    ,symbol="Fe", Z=26, A);
126                                                   126 
127   density = universe_mean_density;  // from Ph << 127   density     = universe_mean_density;            //from PhysicalConstants.h
128   pressure = 3.e-18 * pascal;                  << 128   pressure    = 3.e-18*pascal;
129   temperature = 2.73 * kelvin;                 << 129   temperature = 2.73*kelvin;
130   G4Material* Galactic = new G4Material(name = << 130   G4Material *Galactic = 
131                                         kState << 131     new G4Material(name="Galactic", z=1., A=1.01*g/mole, density,
                                                   >> 132                    kStateGas,temperature,pressure);
132                                                   133 
133   density = 2.03 * g / cm3;                    << 134   density = 2.03*g/cm3;
134   G4Material* Concrete = new G4Material("Concr    135   G4Material* Concrete = new G4Material("Concrete", density, 10);
135   Concrete->AddElement(elH, fractionmass = 0.0 << 136   Concrete->AddElement(elH , fractionmass= 0.01);
136   Concrete->AddElement(elO, fractionmass = 0.5 << 137   Concrete->AddElement(elO , fractionmass= 0.529);
137   Concrete->AddElement(elNa, fractionmass = 0. << 138   Concrete->AddElement(elNa , fractionmass= 0.016);
138   Concrete->AddElement(elHg, fractionmass = 0. << 139   Concrete->AddElement(elHg , fractionmass= 0.002);
139   Concrete->AddElement(elAl, fractionmass = 0. << 140   Concrete->AddElement(elAl , fractionmass= 0.034);
140   Concrete->AddElement(elSi, fractionmass = 0. << 141   Concrete->AddElement(elSi , fractionmass= 0.337);
141   Concrete->AddElement(elK, fractionmass = 0.0 << 142   Concrete->AddElement(elK , fractionmass= 0.013);
142   Concrete->AddElement(elCa, fractionmass = 0. << 143   Concrete->AddElement(elCa , fractionmass= 0.044);
143   Concrete->AddElement(elFe, fractionmass = 0. << 144   Concrete->AddElement(elFe , fractionmass= 0.014);
144   Concrete->AddElement(elC, fractionmass = 0.0 << 145   Concrete->AddElement(elC , fractionmass= 0.001);
145                                                   146 
146   /////////////////////////////                   147   /////////////////////////////
147   // world cylinder volume                        148   // world cylinder volume
148   ////////////////////////////                    149   ////////////////////////////
149                                                   150 
150   // world solid                                  151   // world solid
151                                                   152 
152   G4double innerRadiusCylinder = 0 * cm;       << 153   G4double innerRadiusCylinder = 0*cm;
153   G4double outerRadiusCylinder = 100 * cm;     << 154   G4double outerRadiusCylinder = 100*cm; 
154   G4double heightCylinder = 100 * cm;          << 155   G4double heightCylinder       = 100*cm;
155   G4double startAngleCylinder = 0 * deg;       << 156   G4double startAngleCylinder  = 0*deg;
156   G4double spanningAngleCylinder = 360 * deg;  << 157   G4double spanningAngleCylinder    = 360*deg;
157                                                << 158 
158   G4Tubs* worldCylinder = new G4Tubs("worldCyl << 159   G4Tubs *worldCylinder = new G4Tubs("worldCylinder",
159                                      heightCyl << 160                                      innerRadiusCylinder,
                                                   >> 161                                      outerRadiusCylinder,
                                                   >> 162                                      heightCylinder,
                                                   >> 163                                      startAngleCylinder,
                                                   >> 164                                      spanningAngleCylinder);
160                                                   165 
161   // logical world                                166   // logical world
162                                                   167 
163   G4LogicalVolume* worldCylinder_log =         << 168   G4LogicalVolume *worldCylinder_log = 
164     new G4LogicalVolume(worldCylinder, Galacti    169     new G4LogicalVolume(worldCylinder, Galactic, "worldCylinder_log");
165   fLogicalVolumeVector.push_back(worldCylinder << 170   fLogicalVolumeVector.push_back(worldCylinder_log); 
166                                                   171 
167   name = "shieldWorld";                           172   name = "shieldWorld";
168   fWorldVolume = new G4PVPlacement(0, G4ThreeV << 173   fWorldVolume = new 
                                                   >> 174     G4PVPlacement(0, G4ThreeVector(0,0,0), worldCylinder_log,
                                                   >> 175                   name, 0, false, 0);
169                                                   176 
170   fPhysicalVolumeVector.push_back(fWorldVolume    177   fPhysicalVolumeVector.push_back(fWorldVolume);
171                                                   178 
172   // creating 18 slabs of 10 cm thick concrete    179   // creating 18 slabs of 10 cm thick concrete
173                                                   180 
174   G4double innerRadiusShield = 0 * cm;         << 181   G4double innerRadiusShield = 0*cm;
175   G4double outerRadiusShield = 100 * cm;       << 182   G4double outerRadiusShield = 100*cm;
176   G4double heightShield = 5 * cm;              << 183   G4double heightShield       = 5*cm;
177   G4double startAngleShield = 0 * deg;         << 184   G4double startAngleShield  = 0*deg;
178   G4double spanningAngleShield = 360 * deg;    << 185   G4double spanningAngleShield    = 360*deg;
179                                                << 186 
180   G4Tubs* aShield = new G4Tubs("aShield", inne << 187   G4Tubs *aShield = new G4Tubs("aShield",
181                                startAngleShiel << 188                                innerRadiusShield,
182                                                << 189                                outerRadiusShield,
                                                   >> 190                                heightShield,
                                                   >> 191                                startAngleShield,
                                                   >> 192                                spanningAngleShield);
                                                   >> 193   
183   // logical shield                               194   // logical shield
184                                                   195 
185   G4LogicalVolume* aShield_log = new G4Logical << 196   G4LogicalVolume *aShield_log =
                                                   >> 197     new G4LogicalVolume(aShield, Concrete, "aShield_log");
186   fLogicalVolumeVector.push_back(aShield_log);    198   fLogicalVolumeVector.push_back(aShield_log);
187                                                   199 
188   G4VisAttributes* pShieldVis = new G4VisAttri << 200   G4VisAttributes* pShieldVis = new G4VisAttributes(G4Colour(0.0,0.0,1.0));
189   pShieldVis->SetForceSolid(true);                201   pShieldVis->SetForceSolid(true);
190   aShield_log->SetVisAttributes(pShieldVis);      202   aShield_log->SetVisAttributes(pShieldVis);
191                                                   203 
192   // physical shields                             204   // physical shields
193                                                   205 
194   G4int i;                                        206   G4int i;
195   G4double startz = -85 * cm;                  << 207   G4double startz = -85*cm; 
196   for (i = 1; i <= 18; i++) {                  << 208   for (i=1; i<=18; i++)
                                                   >> 209   {
197     name = GetCellName(i);                        210     name = GetCellName(i);
198     pos_x = 0 * cm;                            << 211     pos_x = 0*cm;
199     pos_y = 0 * cm;                            << 212     pos_y = 0*cm;
200     pos_z = startz + (i - 1) * (2 * heightShie << 213     pos_z = startz + (i-1) * (2*heightShield);
201     G4VPhysicalVolume* pvol = new G4PVPlacemen << 214     G4VPhysicalVolume *pvol = 
202                                                << 215       new G4PVPlacement(0, 
                                                   >> 216                         G4ThreeVector(pos_x, pos_y, pos_z),
                                                   >> 217                         aShield_log, 
                                                   >> 218                         name, 
                                                   >> 219                         worldCylinder_log, 
                                                   >> 220                         false, 
                                                   >> 221                         i); 
203     fPhysicalVolumeVector.push_back(pvol);        222     fPhysicalVolumeVector.push_back(pvol);
204   }                                               223   }
205                                                   224 
206   // filling the rest of the world volume behi    225   // filling the rest of the world volume behind the concrete with
207   // another slab which should get the same im << 226   // another slab which should get the same importance value 
208   // or lower weight bound as the last slab       227   // or lower weight bound as the last slab
209   //                                              228   //
210   innerRadiusShield = 0 * cm;                  << 229   innerRadiusShield = 0*cm;
211   outerRadiusShield = 100 * cm;                << 230   outerRadiusShield = 100*cm;
212   heightShield = 5 * cm;                       << 231   heightShield       = 5*cm;
213   startAngleShield = 0 * deg;                  << 232   startAngleShield  = 0*deg;
214   spanningAngleShield = 360 * deg;             << 233   spanningAngleShield    = 360*deg;
215                                                << 234 
216   G4Tubs* aRest = new G4Tubs("Rest", innerRadi << 235   G4Tubs *aRest = new G4Tubs("Rest",
217                              startAngleShield, << 236                              innerRadiusShield,
218                                                << 237                              outerRadiusShield,
219   G4LogicalVolume* aRest_log = new G4LogicalVo << 238                              heightShield,
                                                   >> 239                              startAngleShield,
                                                   >> 240                              spanningAngleShield);
                                                   >> 241   
                                                   >> 242   G4LogicalVolume *aRest_log =
                                                   >> 243     new G4LogicalVolume(aRest, Galactic, "aRest_log");
220   fLogicalVolumeVector.push_back(aRest_log);      244   fLogicalVolumeVector.push_back(aRest_log);
221   name = "rest";                                  245   name = "rest";
222                                                << 246     
223   pos_x = 0 * cm;                              << 247   pos_x = 0*cm;
224   pos_y = 0 * cm;                              << 248   pos_y = 0*cm;
225   pos_z = 95 * cm;                             << 249   pos_z = 95*cm;
226   G4VPhysicalVolume* pvol_rest = new G4PVPlace << 250   G4VPhysicalVolume *pvol_rest = 
227                                                << 251     new G4PVPlacement(0, 
228                                                << 252                       G4ThreeVector(pos_x, pos_y, pos_z),
                                                   >> 253                       aRest_log, 
                                                   >> 254                       name, 
                                                   >> 255                       worldCylinder_log, 
                                                   >> 256                       false, 
                                                   >> 257                       19); // i=19
229                                                   258 
230   fPhysicalVolumeVector.push_back(pvol_rest);     259   fPhysicalVolumeVector.push_back(pvol_rest);
231                                                   260 
232   SetSensitive();                                 261   SetSensitive();
233   return fWorldVolume;                            262   return fWorldVolume;
234 }                                                 263 }
235                                                   264 
236 //....oooOO0OOooo........oooOO0OOooo........oo    265 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
237                                                   266 
238 G4VIStore* B01DetectorConstruction::CreateImpo    267 G4VIStore* B01DetectorConstruction::CreateImportanceStore()
239 {                                                 268 {
240   G4cout << " B01DetectorConstruction:: Creati    269   G4cout << " B01DetectorConstruction:: Creating Importance Store " << G4endl;
241   if (!fPhysicalVolumeVector.size()) {         << 270   if (!fPhysicalVolumeVector.size())
242     G4Exception("B01DetectorConstruction::Crea << 271   {
243                 RunMustBeAborted, "no physical << 272     G4Exception("B01DetectorConstruction::CreateImportanceStore"
                                                   >> 273                ,"exampleB01_0001",RunMustBeAborted
                                                   >> 274                ,"no physical volumes created yet!");
244   }                                               275   }
245                                                   276 
246   fWorldVolume = fPhysicalVolumeVector[0];        277   fWorldVolume = fPhysicalVolumeVector[0];
247                                                   278 
248   // creating and filling the importance store    279   // creating and filling the importance store
249                                                << 280   
250   G4IStore* istore = G4IStore::GetInstance();  << 281   G4IStore *istore = G4IStore::GetInstance();
251                                                   282 
252   G4int n = 0;                                    283   G4int n = 0;
253   G4double imp = 1;                            << 284   G4double imp =1;
254   istore->AddImportanceGeometryCell(1, *fWorld << 285   istore->AddImportanceGeometryCell(1,  *fWorldVolume);
255   for (std::vector<G4VPhysicalVolume*>::iterat << 286   for (std::vector<G4VPhysicalVolume *>::iterator
                                                   >> 287        it =  fPhysicalVolumeVector.begin();
256        it != fPhysicalVolumeVector.end() - 1;     288        it != fPhysicalVolumeVector.end() - 1; it++)
257   {                                               289   {
258     if (*it != fWorldVolume) {                 << 290     if (*it != fWorldVolume)
                                                   >> 291     {
259       imp = std::pow(2., n++);                    292       imp = std::pow(2., n++);
260       G4cout << "Going to assign importance: " << 293       G4cout << "Going to assign importance: " << imp << ", to volume: " 
261              << G4endl;                        << 294              << (*it)->GetName() << G4endl;
262       istore->AddImportanceGeometryCell(imp, * << 295       istore->AddImportanceGeometryCell(imp, *(*it),n);
263     }                                             296     }
264   }                                               297   }
265                                                   298 
266   // the remaining part pf the geometry (rest)    299   // the remaining part pf the geometry (rest) gets the same
267   // importance as the last conrete cell          300   // importance as the last conrete cell
268   //                                              301   //
269   istore->AddImportanceGeometryCell(imp, *(fPh << 302   istore->AddImportanceGeometryCell(imp, 
270                                     ++n);      << 303           *(fPhysicalVolumeVector[fPhysicalVolumeVector.size()-1]),++n);
271                                                << 304   
272   return istore;                                  305   return istore;
273 }                                                 306 }
274                                                   307 
275 //....oooOO0OOooo........oooOO0OOooo........oo    308 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
276                                                   309 
277 G4VWeightWindowStore* B01DetectorConstruction: << 310 G4VWeightWindowStore *B01DetectorConstruction::CreateWeightWindowStore()
278 {                                                 311 {
279   if (!fPhysicalVolumeVector.size()) {         << 312   if (!fPhysicalVolumeVector.size())
280     G4Exception("B01DetectorConstruction::Crea << 313   {
281                 RunMustBeAborted, "no physical << 314     G4Exception("B01DetectorConstruction::CreateWeightWindowStore"
                                                   >> 315                ,"exampleB01_0002",RunMustBeAborted
                                                   >> 316                ,"no physical volumes created yet!");
282   }                                               317   }
283                                                   318 
284   fWorldVolume = fPhysicalVolumeVector[0];        319   fWorldVolume = fPhysicalVolumeVector[0];
285                                                   320 
286   // creating and filling the weight window st    321   // creating and filling the weight window store
287                                                << 322   
288   G4WeightWindowStore* wwstore = G4WeightWindo << 323   G4WeightWindowStore *wwstore = G4WeightWindowStore::GetInstance();
289                                                << 324   
290   // create one energy region covering the ene    325   // create one energy region covering the energies of the problem
291   //                                              326   //
292   std::set<G4double, std::less<G4double>> enBo << 327   std::set<G4double, std::less<G4double> > enBounds;
293   enBounds.insert(1 * GeV);                       328   enBounds.insert(1 * GeV);
294   wwstore->SetGeneralUpperEnergyBounds(enBound    329   wwstore->SetGeneralUpperEnergyBounds(enBounds);
295                                                   330 
296   G4int n = 0;                                    331   G4int n = 0;
297   G4double lowerWeight = 1;                    << 332   G4double lowerWeight =1;
298   std::vector<G4double> lowerWeights;             333   std::vector<G4double> lowerWeights;
299                                                   334 
300   lowerWeights.push_back(1);                      335   lowerWeights.push_back(1);
301   G4GeometryCell gWorldCell(*fWorldVolume, 0); << 336   G4GeometryCell gWorldCell(*fWorldVolume,0);
302   wwstore->AddLowerWeights(gWorldCell, lowerWe    337   wwstore->AddLowerWeights(gWorldCell, lowerWeights);
303                                                   338 
304   for (std::vector<G4VPhysicalVolume*>::iterat << 339   for (std::vector<G4VPhysicalVolume *>::iterator
                                                   >> 340        it =  fPhysicalVolumeVector.begin();
305        it != fPhysicalVolumeVector.end() - 1;     341        it != fPhysicalVolumeVector.end() - 1; it++)
306   {                                               342   {
307     if (*it != fWorldVolume) {                 << 343     if (*it != fWorldVolume)
308       lowerWeight = 1. / std::pow(2., n++);    << 344     {
309       G4cout << "Going to assign lower weight: << 345       lowerWeight = 1./std::pow(2., n++);
310              << ", to volume: " << (*it)->GetN << 346       G4cout << "Going to assign lower weight: " << lowerWeight 
311       G4GeometryCell gCell(*(*it), n);         << 347              << ", to volume: " 
                                                   >> 348              << (*it)->GetName() << G4endl;
                                                   >> 349       G4GeometryCell gCell(*(*it),n);
312       lowerWeights.clear();                       350       lowerWeights.clear();
313       lowerWeights.push_back(lowerWeight);        351       lowerWeights.push_back(lowerWeight);
314       wwstore->AddLowerWeights(gCell, lowerWei    352       wwstore->AddLowerWeights(gCell, lowerWeights);
315     }                                             353     }
316   }                                               354   }
317                                                   355 
318   // the remaining part pf the geometry (rest)    356   // the remaining part pf the geometry (rest) gets the same
319   // lower weight bound  as the last conrete c    357   // lower weight bound  as the last conrete cell
320   //                                              358   //
321   G4GeometryCell gRestCell(*(fPhysicalVolumeVe << 359   G4GeometryCell
322   wwstore->AddLowerWeights(gRestCell, lowerWei << 360     gRestCell(*(fPhysicalVolumeVector[fPhysicalVolumeVector.size()-1]), ++n);
                                                   >> 361   wwstore->AddLowerWeights(gRestCell,  lowerWeights);
323                                                   362 
324   return wwstore;                                 363   return wwstore;
325 }                                                 364 }
326                                                   365 
327 //....oooOO0OOooo........oooOO0OOooo........oo    366 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
328                                                   367 
329 G4String B01DetectorConstruction::GetCellName(    368 G4String B01DetectorConstruction::GetCellName(G4int i)
330 {                                                 369 {
331   std::ostringstream os;                          370   std::ostringstream os;
332   os << "cell_";                                  371   os << "cell_";
333   if (i < 10) {                                << 372   if (i<10)
                                                   >> 373   {
334     os << "0";                                    374     os << "0";
335   }                                               375   }
336   os << i;                                     << 376   os << i ;
337   G4String name = os.str();                       377   G4String name = os.str();
338   return name;                                    378   return name;
339 }                                                 379 }
340                                                   380 
341 G4VPhysicalVolume* B01DetectorConstruction::Ge << 381 G4VPhysicalVolume *B01DetectorConstruction::GetWorldVolume() {
342 {                                              << 382    return fWorldVolume;
343   return fWorldVolume;                         << 
344 }                                                 383 }
345                                                   384 
346 //....oooOO0OOooo........oooOO0OOooo........oo    385 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
347                                                   386 
348 void B01DetectorConstruction::SetSensitive()   << 387 void B01DetectorConstruction::SetSensitive(){
349 {                                              << 388 
350   //  ----------------------------------------    389   //  -------------------------------------------------
351   //   The collection names of defined Primiti    390   //   The collection names of defined Primitives are
352   //   0       ConcreteSD/Collisions              391   //   0       ConcreteSD/Collisions
353   //   1       ConcreteSD/CollWeight              392   //   1       ConcreteSD/CollWeight
354   //   2       ConcreteSD/Population              393   //   2       ConcreteSD/Population
355   //   3       ConcreteSD/TrackEnter              394   //   3       ConcreteSD/TrackEnter
356   //   4       ConcreteSD/SL                      395   //   4       ConcreteSD/SL
357   //   5       ConcreteSD/SLW                     396   //   5       ConcreteSD/SLW
358   //   6       ConcreteSD/SLWE                    397   //   6       ConcreteSD/SLWE
359   //   7       ConcreteSD/SLW_V                   398   //   7       ConcreteSD/SLW_V
360   //   8       ConcreteSD/SLWE_V                  399   //   8       ConcreteSD/SLWE_V
361   //  ----------------------------------------    400   //  -------------------------------------------------
362                                                   401 
363   // moved to ConstructSDandField() for MT com    402   // moved to ConstructSDandField() for MT compliance
                                                   >> 403 
364 }                                                 404 }
365                                                   405 
366 //....oooOO0OOooo........oooOO0OOooo........oo    406 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
367                                                   407 
368 void B01DetectorConstruction::ConstructSDandFi    408 void B01DetectorConstruction::ConstructSDandField()
369 {                                                 409 {
                                                   >> 410 
370   //  Sensitive Detector Manager.                 411   //  Sensitive Detector Manager.
371   G4SDManager* SDman = G4SDManager::GetSDMpoin    412   G4SDManager* SDman = G4SDManager::GetSDMpointer();
372   // Sensitive Detector Name                      413   // Sensitive Detector Name
373   G4String concreteSDname = "ConcreteSD";         414   G4String concreteSDname = "ConcreteSD";
374                                                   415 
375   //------------------------                      416   //------------------------
376   // MultiFunctionalDetector                      417   // MultiFunctionalDetector
377   //------------------------                      418   //------------------------
378   //                                              419   //
379   // Define MultiFunctionalDetector with name.    420   // Define MultiFunctionalDetector with name.
380   G4MultiFunctionalDetector* MFDet = new G4Mul << 421   G4MultiFunctionalDetector* MFDet = 
381   SDman->AddNewDetector(MFDet);  // Register S << 422                          new G4MultiFunctionalDetector(concreteSDname);
382                                                << 423   SDman->AddNewDetector( MFDet );                 // Register SD to SDManager
383   G4String fltName, particleName;              << 424 
384   G4SDParticleFilter* neutronFilter =          << 425   G4String fltName,particleName;
385     new G4SDParticleFilter(fltName = "neutronF << 426   G4SDParticleFilter* neutronFilter = 
                                                   >> 427       new G4SDParticleFilter(fltName="neutronFilter", particleName="neutron");
386                                                   428 
387   MFDet->SetFilter(neutronFilter);                429   MFDet->SetFilter(neutronFilter);
388                                                   430 
389   for (std::vector<G4LogicalVolume*>::iterator << 431   for (std::vector<G4LogicalVolume *>::iterator it = 
390        it != fLogicalVolumeVector.end(); it++) << 432                                                 fLogicalVolumeVector.begin();
391   {                                            << 433        it != fLogicalVolumeVector.end(); it++){
392     //      (*it)->SetSensitiveDetector(MFDet)    434     //      (*it)->SetSensitiveDetector(MFDet);
393     SetSensitiveDetector((*it)->GetName(), MFD << 435       SetSensitiveDetector((*it)->GetName(), MFDet);
394   }                                               436   }
395                                                   437 
396   G4String psName;                                438   G4String psName;
397   G4PSNofCollision* scorer0 = new G4PSNofColli << 439   G4PSNofCollision*   scorer0 = new G4PSNofCollision(psName="Collisions");  
398   MFDet->RegisterPrimitive(scorer0);              440   MFDet->RegisterPrimitive(scorer0);
399                                                   441 
400   G4PSNofCollision* scorer1 = new G4PSNofColli << 442   G4PSNofCollision*   scorer1 = new G4PSNofCollision(psName="CollWeight");  
401   scorer1->Weighted(true);                        443   scorer1->Weighted(true);
402   MFDet->RegisterPrimitive(scorer1);              444   MFDet->RegisterPrimitive(scorer1);
403                                                   445 
404   G4PSPopulation* scorer2 = new G4PSPopulation << 446   G4PSPopulation*   scorer2 = new G4PSPopulation(psName="Population");  
405   MFDet->RegisterPrimitive(scorer2);              447   MFDet->RegisterPrimitive(scorer2);
406                                                   448 
407   G4PSTrackCounter* scorer3 = new G4PSTrackCou << 449   G4PSTrackCounter* scorer3 = new G4PSTrackCounter(psName="TrackEnter"
                                                   >> 450                                                   ,fCurrent_In);  
408   MFDet->RegisterPrimitive(scorer3);              451   MFDet->RegisterPrimitive(scorer3);
409                                                   452 
410   G4PSTrackLength* scorer4 = new G4PSTrackLeng << 453   G4PSTrackLength* scorer4 = new G4PSTrackLength(psName="SL");  
411   MFDet->RegisterPrimitive(scorer4);              454   MFDet->RegisterPrimitive(scorer4);
412                                                   455 
413   G4PSTrackLength* scorer5 = new G4PSTrackLeng << 456   G4PSTrackLength* scorer5 = new G4PSTrackLength(psName="SLW");  
414   scorer5->Weighted(true);                        457   scorer5->Weighted(true);
415   MFDet->RegisterPrimitive(scorer5);              458   MFDet->RegisterPrimitive(scorer5);
416                                                   459 
417   G4PSTrackLength* scorer6 = new G4PSTrackLeng << 460   G4PSTrackLength* scorer6 = new G4PSTrackLength(psName="SLWE");  
418   scorer6->Weighted(true);                        461   scorer6->Weighted(true);
419   scorer6->MultiplyKineticEnergy(true);           462   scorer6->MultiplyKineticEnergy(true);
420   MFDet->RegisterPrimitive(scorer6);              463   MFDet->RegisterPrimitive(scorer6);
421                                                   464 
422   G4PSTrackLength* scorer7 = new G4PSTrackLeng << 465   G4PSTrackLength* scorer7 = new G4PSTrackLength(psName="SLW_V");  
423   scorer7->Weighted(true);                        466   scorer7->Weighted(true);
424   scorer7->DivideByVelocity(true);                467   scorer7->DivideByVelocity(true);
425   MFDet->RegisterPrimitive(scorer7);              468   MFDet->RegisterPrimitive(scorer7);
426                                                   469 
427   G4PSTrackLength* scorer8 = new G4PSTrackLeng << 470   G4PSTrackLength* scorer8 = new G4PSTrackLength(psName="SLWE_V");  
428   scorer8->Weighted(true);                        471   scorer8->Weighted(true);
429   scorer8->MultiplyKineticEnergy(true);           472   scorer8->MultiplyKineticEnergy(true);
430   scorer8->DivideByVelocity(true);                473   scorer8->DivideByVelocity(true);
431   MFDet->RegisterPrimitive(scorer8);              474   MFDet->RegisterPrimitive(scorer8);
                                                   >> 475 
432 }                                                 476 }
433                                                   477 
434 //....oooOO0OOooo........oooOO0OOooo........oo    478 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
435                                                   479