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 8.3.p1)


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