Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/biasing/B02/src/B02ImportanceDetectorConstruction.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/B02/src/B02ImportanceDetectorConstruction.cc (Version 11.3.0) and /examples/extended/biasing/B02/src/B02ImportanceDetectorConstruction.cc (Version 8.1.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/B02/src/B02ImportanceDetecto << 
 27 /// \brief Implementation of the B02Importance << 
 28 //                                                 26 //
                                                   >>  27 // $Id: B02ImportanceDetectorConstruction.cc,v 1.9 2006/06/29 16:34:48 gunter Exp $
                                                   >>  28 // GEANT4 tag $Name: geant4-08-01-patch-01 $
 29 //                                                 29 //
 30 //                                             << 
 31                                                << 
 32 #include "B02ImportanceDetectorConstruction.hh << 
 33                                                    30 
 34 #include "G4LogicalVolume.hh"                  << 
 35 #include "G4Material.hh"                       << 
 36 #include "G4PVPlacement.hh"                    << 
 37 #include "G4PhysicalConstants.hh"              << 
 38 #include "G4SystemOfUnits.hh"                  << 
 39 #include "G4ThreeVector.hh"                    << 
 40 #include "G4Tubs.hh"                           << 
 41 #include "globals.hh"                              31 #include "globals.hh"
 42                                                << 
 43 #include <sstream>                                 32 #include <sstream>
 44                                                    33 
 45 // For Primitive Scorers                       <<  34 #include "B02ImportanceDetectorConstruction.hh"
 46 #include "G4MultiFunctionalDetector.hh"        << 
 47 #include "G4PSNofCollision.hh"                 << 
 48 #include "G4PSPopulation.hh"                   << 
 49 #include "G4PSTrackCounter.hh"                 << 
 50 #include "G4PSTrackLength.hh"                  << 
 51 #include "G4SDManager.hh"                      << 
 52 #include "G4SDParticleFilter.hh"               << 
 53                                                << 
 54 // for importance biasing                      << 
 55 #include "G4IStore.hh"                         << 
 56                                                    35 
 57 // for weight window technique                 <<  36 #include "G4Material.hh"
 58 #include "G4WeightWindowStore.hh"              <<  37 #include "G4Tubs.hh"
                                                   >>  38 #include "G4LogicalVolume.hh"
                                                   >>  39 #include "G4ThreeVector.hh"
                                                   >>  40 #include "G4PVPlacement.hh"
 59                                                    41 
 60 //....oooOO0OOooo........oooOO0OOooo........oo << 
 61                                                    42 
 62 B02ImportanceDetectorConstruction::B02Importan <<  43 B02ImportanceDetectorConstruction::B02ImportanceDetectorConstruction()
 63   : G4VUserParallelWorld(worldName), fLogicalV << 
 64 {                                                  44 {
 65   //  Construct();                             <<  45   Construct();
 66 }                                                  46 }
 67                                                    47 
 68 //....oooOO0OOooo........oooOO0OOooo........oo << 
 69                                                << 
 70 B02ImportanceDetectorConstruction::~B02Importa     48 B02ImportanceDetectorConstruction::~B02ImportanceDetectorConstruction()
 71 {                                              <<  49 {;}
 72   fLogicalVolumeVector.clear();                << 
 73 }                                              << 
 74                                                << 
 75 //....oooOO0OOooo........oooOO0OOooo........oo << 
 76                                                    50 
 77 void B02ImportanceDetectorConstruction::Constr     51 void B02ImportanceDetectorConstruction::Construct()
 78 {                                              <<  52 {  
 79   G4cout << " constructing parallel world " << << 
 80                                                    53 
 81   G4Material* dummyMat = 0;                    <<  54   G4String name("none");
                                                   >>  55   G4double density(universe_mean_density), temperature(0), pressure(0);
 82                                                    56 
 83   // GetWorld methods create a clone of the ma <<  57   name = "Galactic";
 84   //  via the transportation manager           <<  58   density     = universe_mean_density;            //from PhysicalConstants.h
 85   fGhostWorld = GetWorld();                    <<  59   pressure    = 3.e-18*pascal;
 86   G4cout << " B02ImportanceDetectorConstructio <<  60   temperature = 2.73*kelvin;
 87          << G4endl;                            <<  61   G4cout << density << " " << kStateGas << G4endl;
 88   G4LogicalVolume* worldLogical = fGhostWorld- <<  62   G4Material *Galactic = 
 89   fLogicalVolumeVector.push_back(worldLogical) <<  63     new G4Material(name, 1., 1.01*g/mole, density,
                                                   >>  64                    kStateGas,temperature,pressure);
                                                   >>  65 
                                                   >>  66 
                                                   >>  67   //////////////////////////////////
                                                   >>  68   // parallel world cylinder volume
                                                   >>  69   //////////////////////////////////
                                                   >>  70 
                                                   >>  71   // parallel world solid larger than in the mass geometry
                                                   >>  72 
                                                   >>  73   G4double innerRadiusCylinder = 0*cm;
                                                   >>  74   G4double outerRadiusCylinder = 110*cm;
                                                   >>  75   G4double hightCylinder       = 110*cm;
                                                   >>  76   G4double startAngleCylinder  = 0*deg;
                                                   >>  77   G4double spanningAngleCylinder    = 360*deg;
                                                   >>  78 
                                                   >>  79   G4Tubs *worldCylinder = new G4Tubs("worldCylinder",
                                                   >>  80                                      innerRadiusCylinder,
                                                   >>  81                                      outerRadiusCylinder,
                                                   >>  82                                      hightCylinder,
                                                   >>  83                                      startAngleCylinder,
                                                   >>  84                                      spanningAngleCylinder);
                                                   >>  85 
                                                   >>  86   // logical world
                                                   >>  87 
                                                   >>  88   G4LogicalVolume *worldCylinder_log = 
                                                   >>  89     new G4LogicalVolume(worldCylinder, Galactic, "worldCylinder_log");
                                                   >>  90 
                                                   >>  91   name = "parallelWorld";
                                                   >>  92   fWorldVolume = new 
                                                   >>  93     G4PVPlacement(0, G4ThreeVector(0,0,0), worldCylinder_log,
                                                   >>  94       name, 0, false, 0);
                                                   >>  95 
                                                   >>  96   fPVolumeStore.AddPVolume(G4GeometryCell(*fWorldVolume, 0));
 90                                                    97 
 91   //  fPVolumeStore.AddPVolume(G4GeometryCell( << 
 92   fPVolumeStore.AddPVolume(G4GeometryCell(*fGh << 
 93                                                    98 
 94   // creating 18 slobs of 10 cm thicknes       << 
 95                                                    99 
 96   G4double innerRadiusShield = 0 * cm;         << 
 97   G4double outerRadiusShield = 100 * cm;       << 
 98   G4double heightShield = 5 * cm;              << 
 99   G4double startAngleShield = 0 * deg;         << 
100   G4double spanningAngleShield = 360 * deg;    << 
101                                                   100 
102   G4Tubs* aShield = new G4Tubs("aShield", inne << 101   // creating 18 slobs of 10 cm thicknes
103                                startAngleShiel << 
104                                                   102 
                                                   >> 103   G4double innerRadiusShield = 0*cm;
                                                   >> 104   G4double outerRadiusShield = 100*cm;
                                                   >> 105   G4double hightShield       = 5*cm;
                                                   >> 106   G4double startAngleShield  = 0*deg;
                                                   >> 107   G4double spanningAngleShield    = 360*deg;
                                                   >> 108 
                                                   >> 109   G4Tubs *aShield = new G4Tubs("aShield",
                                                   >> 110                                innerRadiusShield,
                                                   >> 111                                outerRadiusShield,
                                                   >> 112                                hightShield,
                                                   >> 113                                startAngleShield,
                                                   >> 114                                spanningAngleShield);
                                                   >> 115   
105   // logical parallel cells                       116   // logical parallel cells
106                                                   117 
107   G4LogicalVolume* aShield_log_imp = new G4Log << 118   G4LogicalVolume *aShield_log = 
108   fLogicalVolumeVector.push_back(aShield_log_i << 119     new G4LogicalVolume(aShield, Galactic, "aShield_log");
109                                                   120 
110   // physical parallel cells                      121   // physical parallel cells
111   G4String name = "none";                      << 122 
112   G4int i = 1;                                    123   G4int i = 1;
113   G4double startz = -85 * cm;                  << 124   G4double startz = -85*cm; 
114   //  for (i=1; i<=18; ++i) {                  << 125   for (i=1; i<=18; ++i) {
115   for (i = 1; i <= 18; i++) {                  << 126    
116     name = GetCellName(i);                        127     name = GetCellName(i);
117                                                << 128     
118     G4double pos_x = 0 * cm;                   << 129     G4double pos_x = 0*cm;
119     G4double pos_y = 0 * cm;                   << 130     G4double pos_y = 0*cm;
120     G4double pos_z = startz + (i - 1) * (2 * h << 131     G4double pos_z = startz + (i-1) * (2*hightShield);
121     G4VPhysicalVolume* pvol = new G4PVPlacemen << 132     G4VPhysicalVolume *pvol = 
122                                                << 133       new G4PVPlacement(0, 
123     //                        0);              << 134       G4ThreeVector(pos_x, pos_y, pos_z),
124     G4GeometryCell cell(*pvol, i);             << 135       aShield_log, 
125     //    G4GeometryCell cell(*pvol, 0);       << 136       name, 
                                                   >> 137       worldCylinder_log, 
                                                   >> 138       false, 
                                                   >> 139       0);
                                                   >> 140     G4GeometryCell cell(*pvol, 0);
126     fPVolumeStore.AddPVolume(cell);               141     fPVolumeStore.AddPVolume(cell);
127   }                                               142   }
128                                                   143 
129   // filling the rest of the world volumr behi    144   // filling the rest of the world volumr behind the concrete with
130   // another slob which should get the same im << 145   // another slob which should get the same importance value as the 
131   // last slob                                    146   // last slob
132   innerRadiusShield = 0 * cm;                  << 147   innerRadiusShield = 0*cm;
133   //  outerRadiusShield = 110*cm; exceeds worl << 148   outerRadiusShield = 110*cm;
134   outerRadiusShield = 100 * cm;                << 149   hightShield       = 10*cm;
135   //  heightShield       = 10*cm;              << 150   startAngleShield  = 0*deg;
136   heightShield = 5 * cm;                       << 151   spanningAngleShield    = 360*deg;
137   startAngleShield = 0 * deg;                  << 152 
138   spanningAngleShield = 360 * deg;             << 153   G4Tubs *aRest = new G4Tubs("Rest",
139                                                << 154            innerRadiusShield,
140   G4Tubs* aRest = new G4Tubs("Rest", innerRadi << 155            outerRadiusShield,
141                              startAngleShield, << 156            hightShield,
142                                                << 157            startAngleShield,
143   G4LogicalVolume* aRest_log = new G4LogicalVo << 158            spanningAngleShield);
144                                                << 159   
145   fLogicalVolumeVector.push_back(aRest_log);   << 160   G4LogicalVolume *aRest_log = 
146                                                << 161     new G4LogicalVolume(aRest, Galactic, "aRest_log");
147   name = GetCellName(19);                         162   name = GetCellName(19);
148                                                << 163     
149   G4double pos_x = 0 * cm;                     << 164   G4double pos_x = 0*cm;
150   G4double pos_y = 0 * cm;                     << 165   G4double pos_y = 0*cm;
151   //  G4double pos_z = 100*cm;                 << 166   G4double pos_z = 100*cm;
152   G4double pos_z = 95 * cm;                    << 167   G4VPhysicalVolume *pvol = 
153   G4VPhysicalVolume* pvol = new G4PVPlacement( << 168     new G4PVPlacement(0, 
154                                                << 169           G4ThreeVector(pos_x, pos_y, pos_z),
155   //                      0);                  << 170           aRest_log, 
156   G4GeometryCell cell(*pvol, 19);              << 171           name, 
157   //  G4GeometryCell cell(*pvol, 0);           << 172           worldCylinder_log, 
                                                   >> 173           false, 
                                                   >> 174           0);
                                                   >> 175   G4GeometryCell cell(*pvol, 0);
158   fPVolumeStore.AddPVolume(cell);                 176   fPVolumeStore.AddPVolume(cell);
159                                                   177 
160   SetSensitive();                              << 
161 }                                                 178 }
162                                                   179 
163 //....oooOO0OOooo........oooOO0OOooo........oo << 180 const G4VPhysicalVolume &B02ImportanceDetectorConstruction::
164                                                << 181 GetPhysicalVolumeByName(const G4String& name) const {
165 const G4VPhysicalVolume&                       << 
166 B02ImportanceDetectorConstruction::GetPhysical << 
167 {                                              << 
168   return *fPVolumeStore.GetPVolume(name);         182   return *fPVolumeStore.GetPVolume(name);
169 }                                                 183 }
170                                                   184 
171 //....oooOO0OOooo........oooOO0OOooo........oo << 
172                                                   185 
173 G4String B02ImportanceDetectorConstruction::Li << 186 G4String B02ImportanceDetectorConstruction::ListPhysNamesAsG4String(){
174 {                                              << 
175   G4String names(fPVolumeStore.GetPNames());      187   G4String names(fPVolumeStore.GetPNames());
176   return names;                                   188   return names;
177 }                                                 189 }
178                                                   190 
179 //....oooOO0OOooo........oooOO0OOooo........oo << 
180                                                   191 
181 G4String B02ImportanceDetectorConstruction::Ge << 192 G4String B02ImportanceDetectorConstruction::GetCellName(G4int i) {
182 {                                              << 
183   std::ostringstream os;                          193   std::ostringstream os;
184   os << "cell_";                                  194   os << "cell_";
185   if (i < 10) {                                << 195   if (i<10) {
186     os << "0";                                    196     os << "0";
187   }                                               197   }
188   os << i;                                        198   os << i;
189   G4String name = os.str();                       199   G4String name = os.str();
190   return name;                                    200   return name;
191 }                                                 201 }
192                                                   202 
193 //....oooOO0OOooo........oooOO0OOooo........oo << 203 G4GeometryCell B02ImportanceDetectorConstruction::GetGeometryCell(G4int i){
194                                                << 
195 G4GeometryCell B02ImportanceDetectorConstructi << 
196 {                                              << 
197   G4String name(GetCellName(i));                  204   G4String name(GetCellName(i));
198   const G4VPhysicalVolume* p = 0;              << 205   const G4VPhysicalVolume *p=0;
199   p = fPVolumeStore.GetPVolume(name);             206   p = fPVolumeStore.GetPVolume(name);
200   if (p) {                                        207   if (p) {
201     return G4GeometryCell(*p, 0);              << 208     return G4GeometryCell(*p,0);
202   }                                               209   }
203   else {                                          210   else {
204     G4cout << "B02ImportanceDetectorConstructi << 211     G4cout << "B02ImportanceDetectorConstruction::GetGeometryCell: couldn't get G4GeometryCell" << G4endl;
205            << " couldn't get G4GeometryCell" < << 212     return G4GeometryCell(*fWorldVolume,-2);
206     return G4GeometryCell(*fGhostWorld, -2);   << 
207   }                                               213   }
208 }                                                 214 }
209                                                   215 
210 //....oooOO0OOooo........oooOO0OOooo........oo << 
211                                                   216 
212 G4VPhysicalVolume& B02ImportanceDetectorConstr << 217 G4VPhysicalVolume &B02ImportanceDetectorConstruction::GetWorldVolume() const{
213 {                                              << 218   return *fWorldVolume;
214   return *fGhostWorld;                         << 
215 }                                                 219 }
216                                                   220 
217 //....oooOO0OOooo........oooOO0OOooo........oo << 
218                                                   221 
219 G4VPhysicalVolume* B02ImportanceDetectorConstr << 
220 {                                              << 
221   return fGhostWorld;                          << 
222 }                                              << 
223                                                << 
224 //....oooOO0OOooo........oooOO0OOooo........oo << 
225                                                << 
226 void B02ImportanceDetectorConstruction::SetSen << 
227 {                                              << 
228   //  ---------------------------------------- << 
229   //   The collection names of defined Primiti << 
230   //   0       ConcreteSD/Collisions           << 
231   //   1       ConcreteSD/CollWeight           << 
232   //   2       ConcreteSD/Population           << 
233   //   3       ConcreteSD/TrackEnter           << 
234   //   4       ConcreteSD/SL                   << 
235   //   5       ConcreteSD/SLW                  << 
236   //   6       ConcreteSD/SLWE                 << 
237   //   7       ConcreteSD/SLW_V                << 
238   //   8       ConcreteSD/SLWE_V               << 
239   //  ---------------------------------------- << 
240                                                << 
241   // moved to ConstructSD() for MT compliance  << 
242 }                                              << 
243                                                << 
244 //....oooOO0OOooo........oooOO0OOooo........oo << 
245 void B02ImportanceDetectorConstruction::Constr << 
246 {                                              << 
247   G4SDManager* SDman = G4SDManager::GetSDMpoin << 
248   //                                           << 
249   // Sensitive Detector Name                   << 
250   G4String concreteSDname = "ConcreteSD";      << 
251                                                << 
252   //------------------------                   << 
253   // MultiFunctionalDetector                   << 
254   //------------------------                   << 
255   //                                           << 
256   // Define MultiFunctionalDetector with name. << 
257   G4MultiFunctionalDetector* MFDet = new G4Mul << 
258   SDman->AddNewDetector(MFDet);  // Register S << 
259                                                << 
260   G4String fltName, particleName;              << 
261   G4SDParticleFilter* neutronFilter =          << 
262     new G4SDParticleFilter(fltName = "neutronF << 
263                                                << 
264   MFDet->SetFilter(neutronFilter);             << 
265                                                << 
266   for (std::vector<G4LogicalVolume*>::iterator << 
267        it != fLogicalVolumeVector.end(); it++) << 
268   {                                            << 
269     //      (*it)->SetSensitiveDetector(MFDet) << 
270     SetSensitiveDetector((*it)->GetName(), MFD << 
271   }                                            << 
272                                                << 
273   G4String psName;                             << 
274   G4PSNofCollision* scorer0 = new G4PSNofColli << 
275   MFDet->RegisterPrimitive(scorer0);           << 
276                                                << 
277   G4PSNofCollision* scorer1 = new G4PSNofColli << 
278   scorer1->Weighted(true);                     << 
279   MFDet->RegisterPrimitive(scorer1);           << 
280                                                << 
281   G4PSPopulation* scorer2 = new G4PSPopulation << 
282   MFDet->RegisterPrimitive(scorer2);           << 
283                                                << 
284   G4PSTrackCounter* scorer3 = new G4PSTrackCou << 
285   MFDet->RegisterPrimitive(scorer3);           << 
286                                                << 
287   G4PSTrackLength* scorer4 = new G4PSTrackLeng << 
288   MFDet->RegisterPrimitive(scorer4);           << 
289                                                << 
290   G4PSTrackLength* scorer5 = new G4PSTrackLeng << 
291   scorer5->Weighted(true);                     << 
292   MFDet->RegisterPrimitive(scorer5);           << 
293                                                << 
294   G4PSTrackLength* scorer6 = new G4PSTrackLeng << 
295   scorer6->Weighted(true);                     << 
296   scorer6->MultiplyKineticEnergy(true);        << 
297   MFDet->RegisterPrimitive(scorer6);           << 
298                                                << 
299   G4PSTrackLength* scorer7 = new G4PSTrackLeng << 
300   scorer7->Weighted(true);                     << 
301   scorer7->DivideByVelocity(true);             << 
302   MFDet->RegisterPrimitive(scorer7);           << 
303                                                << 
304   G4PSTrackLength* scorer8 = new G4PSTrackLeng << 
305   scorer8->Weighted(true);                     << 
306   scorer8->MultiplyKineticEnergy(true);        << 
307   scorer8->DivideByVelocity(true);             << 
308   MFDet->RegisterPrimitive(scorer8);           << 
309 }                                              << 
310                                                << 
311 //....oooOO0OOooo........oooOO0OOooo........oo << 
312 G4VIStore* B02ImportanceDetectorConstruction:: << 
313 {                                              << 
314   G4cout << " B02ImportanceDetectorConstructio << 
315   if (!fPVolumeStore.Size()) {                 << 
316     G4Exception("B02ImportanceDetectorConstruc << 
317                 RunMustBeAborted, "no physical << 
318   }                                            << 
319                                                << 
320   // creating and filling the importance store << 
321                                                << 
322   //  G4IStore *istore = new G4IStore(*fWorldV << 
323                                                << 
324   G4IStore* istore = G4IStore::GetInstance(Get << 
325                                                << 
326   G4GeometryCell gWorldVolumeCell(GetWorldVolu << 
327                                                << 
328   G4double imp = 1;                            << 
329                                                << 
330   istore->AddImportanceGeometryCell(1, gWorldV << 
331                                                << 
332   // set importance values and create scorers  << 
333   G4int cell(1);                               << 
334   for (cell = 1; cell <= 18; cell++) {         << 
335     G4GeometryCell gCell = GetGeometryCell(cel << 
336     G4cout << " adding cell: " << cell << " re << 
337            << " name: " << gCell.GetPhysicalVo << 
338     imp = std::pow(2.0, cell - 1);             << 
339                                                << 
340     G4cout << "Going to assign importance: " < << 
341            << ", to volume: " << gCell.GetPhys << 
342     // x    aIstore.AddImportanceGeometryCell( << 
343     istore->AddImportanceGeometryCell(imp, gCe << 
344   }                                            << 
345                                                << 
346   // creating the geometry cell and add both t << 
347   //  G4GeometryCell gCell = GetGeometryCell(1 << 
348                                                << 
349   // create importance geometry cell pair for  << 
350   // with the same importance as the last conc << 
351   G4GeometryCell gCell = GetGeometryCell(19);  << 
352   //  G4double imp = std::pow(2.0,18);         << 
353   imp = std::pow(2.0, 17);                     << 
354   istore->AddImportanceGeometryCell(imp, gCell << 
355                                                << 
356   return istore;                               << 
357 }                                              << 
358                                                << 
359 //....oooOO0OOooo........oooOO0OOooo........oo << 
360                                                << 
361 G4VWeightWindowStore* B02ImportanceDetectorCon << 
362 {                                              << 
363   G4cout << " B02ImportanceDetectorConstructio << 
364   if (!fPVolumeStore.Size()) {                 << 
365     G4Exception("B02ImportanceDetectorConstruc << 
366                 RunMustBeAborted, "no physical << 
367   }                                            << 
368                                                << 
369   // creating and filling the importance store << 
370                                                << 
371   //  G4IStore *istore = new G4IStore(*fWorldV << 
372                                                << 
373   G4WeightWindowStore* wwstore = G4WeightWindo << 
374                                                << 
375   // create one energy region covering the ene << 
376   //                                           << 
377   std::set<G4double, std::less<G4double>> enBo << 
378   enBounds.insert(1 * GeV);                    << 
379   wwstore->SetGeneralUpperEnergyBounds(enBound << 
380                                                << 
381   G4int n = 0;                                 << 
382   G4double lowerWeight = 1;                    << 
383   std::vector<G4double> lowerWeights;          << 
384                                                << 
385   lowerWeights.push_back(1);                   << 
386   G4GeometryCell gWorldCell(GetWorldVolumeAddr << 
387   wwstore->AddLowerWeights(gWorldCell, lowerWe << 
388                                                << 
389   G4int cell(1);                               << 
390   for (cell = 1; cell <= 18; cell++) {         << 
391     G4GeometryCell gCell = GetGeometryCell(cel << 
392     G4cout << " adding cell: " << cell << " re << 
393            << " name: " << gCell.GetPhysicalVo << 
394                                                << 
395     lowerWeight = 1. / std::pow(2., n++);      << 
396     G4cout << "Going to assign lower weight: " << 
397            << ", to volume: " << gCell.GetPhys << 
398     lowerWeights.clear();                      << 
399     lowerWeights.push_back(lowerWeight);       << 
400     wwstore->AddLowerWeights(gCell, lowerWeigh << 
401   }                                            << 
402                                                << 
403   // the remaining part pf the geometry (rest) << 
404   // lower weight bound  as the last conrete c << 
405   //                                           << 
406                                                << 
407   // create importance geometry cell pair for  << 
408   // with the same importance as the last conc << 
409   G4GeometryCell gCell = GetGeometryCell(19);  << 
410   wwstore->AddLowerWeights(gCell, lowerWeights << 
411                                                << 
412   return wwstore;                              << 
413 }                                              << 
414                                                   222