Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/biasing/B03/src/B03ImportanceDetectorConstruction.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/B03/src/B03ImportanceDetectorConstruction.cc (Version 11.3.0) and /examples/extended/biasing/B03/src/B03ImportanceDetectorConstruction.cc (Version 9.4.p3)


  1 //                                                  1 
  2 // *******************************************    
  3 // * License and Disclaimer                       
  4 // *                                              
  5 // * The  Geant4 software  is  copyright of th    
  6 // * the Geant4 Collaboration.  It is provided    
  7 // * conditions of the Geant4 Software License    
  8 // * LICENSE and available at  http://cern.ch/    
  9 // * include a list of copyright holders.         
 10 // *                                              
 11 // * Neither the authors of this software syst    
 12 // * institutes,nor the agencies providing fin    
 13 // * work  make  any representation or  warran    
 14 // * regarding  this  software system or assum    
 15 // * use.  Please see the license in the file     
 16 // * for the full disclaimer and the limitatio    
 17 // *                                              
 18 // * This  code  implementation is the result     
 19 // * technical work of the GEANT4 collaboratio    
 20 // * By using,  copying,  modifying or  distri    
 21 // * any work based  on the software)  you  ag    
 22 // * use  in  resulting  scientific  publicati    
 23 // * acceptance of all terms of the Geant4 Sof    
 24 // *******************************************    
 25 //                                                
 26 /// \file biasing/B03/src/B03ImportanceDetecto    
 27 /// \brief Implementation of the B03Importance    
 28 //                                                
 29 //                                                
 30 //                                                
 31                                                   
 32 #include "B03ImportanceDetectorConstruction.hh    
 33                                                   
 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"                             
 42                                                   
 43 #include <sstream>                                
 44                                                   
 45 // For Primitive Scorers                          
 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 //....oooOO0OOooo........oooOO0OOooo........oo    
 55                                                   
 56 B03ImportanceDetectorConstruction::B03Importan    
 57   : G4VUserParallelWorld(worldName), fLogicalV    
 58 {                                                 
 59   //  Construct();                                
 60 }                                                 
 61                                                   
 62 //....oooOO0OOooo........oooOO0OOooo........oo    
 63                                                   
 64 B03ImportanceDetectorConstruction::~B03Importa    
 65 {                                                 
 66   fLogicalVolumeVector.clear();                   
 67 }                                                 
 68                                                   
 69 //....oooOO0OOooo........oooOO0OOooo........oo    
 70                                                   
 71 void B03ImportanceDetectorConstruction::Constr    
 72 {                                                 
 73   G4cout << " constructing parallel world " <<    
 74                                                   
 75   G4Material* dummyMat = 0;                       
 76                                                   
 77   // GetWorld methods create a clone of the ma    
 78   //  via the transportation manager              
 79   fGhostWorld = GetWorld();                       
 80   G4cout << " B03ImportanceDetectorConstructio    
 81          << G4endl;                               
 82   G4LogicalVolume* worldLogical = fGhostWorld-    
 83   fLogicalVolumeVector.push_back(worldLogical)    
 84                                                   
 85   G4String name("none");                          
 86   //  fPVolumeStore.AddPVolume(G4GeometryCell(    
 87   fPVolumeStore.AddPVolume(G4GeometryCell(*fGh    
 88                                                   
 89   // creating 18 slobs of 10 cm thicknes          
 90                                                   
 91   G4double innerRadiusShield = 0 * cm;            
 92   G4double outerRadiusShield = 100 * cm;          
 93   G4double heightShield = 5 * cm;                 
 94   G4double startAngleShield = 0 * deg;            
 95   G4double spanningAngleShield = 360 * deg;       
 96                                                   
 97   G4Tubs* aShield = new G4Tubs("aShield", inne    
 98                                startAngleShiel    
 99                                                   
100   // logical parallel cells                       
101                                                   
102   G4LogicalVolume* aShield_log_imp = new G4Log    
103   fLogicalVolumeVector.push_back(aShield_log_i    
104                                                   
105   // physical parallel cells                      
106                                                   
107   G4int i = 1;                                    
108   G4double startz = -85 * cm;                     
109   //  for (i=1; i<=18; ++i) {                     
110   for (i = 1; i <= 18; i++) {                     
111     name = GetCellName(i);                        
112                                                   
113     G4double pos_x = 0 * cm;                      
114     G4double pos_y = 0 * cm;                      
115     G4double pos_z = startz + (i - 1) * (2 * h    
116     G4VPhysicalVolume* pvol = new G4PVPlacemen    
117                                                   
118     //                        0);                 
119     G4GeometryCell cell(*pvol, i);                
120     //    G4GeometryCell cell(*pvol, 0);          
121     fPVolumeStore.AddPVolume(cell);               
122   }                                               
123                                                   
124   // filling the rest of the world volumr behi    
125   // another slob which should get the same im    
126   // last slob                                    
127   innerRadiusShield = 0 * cm;                     
128   //  outerRadiusShield = 110*cm; exceeds worl    
129   outerRadiusShield = 100 * cm;                   
130   //  heightShield       = 10*cm;                 
131   heightShield = 5 * cm;                          
132   startAngleShield = 0 * deg;                     
133   spanningAngleShield = 360 * deg;                
134                                                   
135   G4Tubs* aRest = new G4Tubs("Rest", innerRadi    
136                              startAngleShield,    
137                                                   
138   G4LogicalVolume* aRest_log = new G4LogicalVo    
139                                                   
140   fLogicalVolumeVector.push_back(aRest_log);      
141                                                   
142   name = GetCellName(19);                         
143                                                   
144   G4double pos_x = 0 * cm;                        
145   G4double pos_y = 0 * cm;                        
146   //  G4double pos_z = 100*cm;                    
147   G4double pos_z = 95 * cm;                       
148   G4VPhysicalVolume* pvol = new G4PVPlacement(    
149                                                   
150   //                      0);                     
151   G4GeometryCell cell(*pvol, 19);                 
152   //  G4GeometryCell cell(*pvol, 0);              
153   fPVolumeStore.AddPVolume(cell);                 
154                                                   
155   SetSensitive();                                 
156 }                                                 
157                                                   
158 //....oooOO0OOooo........oooOO0OOooo........oo    
159                                                   
160 const G4VPhysicalVolume&                          
161 B03ImportanceDetectorConstruction::GetPhysical    
162 {                                                 
163   return *fPVolumeStore.GetPVolume(name);         
164 }                                                 
165                                                   
166 //....oooOO0OOooo........oooOO0OOooo........oo    
167                                                   
168 G4String B03ImportanceDetectorConstruction::Li    
169 {                                                 
170   G4String names(fPVolumeStore.GetPNames());      
171   return names;                                   
172 }                                                 
173                                                   
174 //....oooOO0OOooo........oooOO0OOooo........oo    
175                                                   
176 G4String B03ImportanceDetectorConstruction::Ge    
177 {                                                 
178   std::ostringstream os;                          
179   os << "cell_";                                  
180   if (i < 10) {                                   
181     os << "0";                                    
182   }                                               
183   os << i;                                        
184   G4String name = os.str();                       
185   return name;                                    
186 }                                                 
187                                                   
188 //....oooOO0OOooo........oooOO0OOooo........oo    
189                                                   
190 G4GeometryCell B03ImportanceDetectorConstructi    
191 {                                                 
192   G4String name(GetCellName(i));                  
193   const G4VPhysicalVolume* p = 0;                 
194   p = fPVolumeStore.GetPVolume(name);             
195   if (p) {                                        
196     return G4GeometryCell(*p, 0);                 
197   }                                               
198   else {                                          
199     G4cout << "B03ImportanceDetectorConstructi    
200            << " couldn't get G4GeometryCell" <    
201     return G4GeometryCell(*fGhostWorld, -2);      
202   }                                               
203 }                                                 
204                                                   
205 //....oooOO0OOooo........oooOO0OOooo........oo    
206                                                   
207 G4VPhysicalVolume& B03ImportanceDetectorConstr    
208 {                                                 
209   return *fGhostWorld;                            
210 }                                                 
211                                                   
212 //....oooOO0OOooo........oooOO0OOooo........oo    
213                                                   
214 G4VPhysicalVolume* B03ImportanceDetectorConstr    
215 {                                                 
216   return fGhostWorld;                             
217 }                                                 
218                                                   
219 //....oooOO0OOooo........oooOO0OOooo........oo    
220                                                   
221 void B03ImportanceDetectorConstruction::SetSen    
222 {                                                 
223   //  ----------------------------------------    
224   //   The collection names of defined Primiti    
225   //   0       ConcreteSD/Collisions              
226   //   1       ConcreteSD/CollWeight              
227   //   2       ConcreteSD/Population              
228   //   3       ConcreteSD/TrackEnter              
229   //   4       ConcreteSD/SL                      
230   //   5       ConcreteSD/SLW                     
231   //   6       ConcreteSD/SLWE                    
232   //   7       ConcreteSD/SLW_V                   
233   //   8       ConcreteSD/SLWE_V                  
234   //  ----------------------------------------    
235                                                   
236   // now moved to ConstructSD()                   
237 }                                                 
238                                                   
239 //....oooOO0OOooo........oooOO0OOooo........oo    
240 void B03ImportanceDetectorConstruction::Constr    
241 {                                                 
242   G4SDManager* SDman = G4SDManager::GetSDMpoin    
243   //                                              
244   // Sensitive Detector Name                      
245   G4String concreteSDname = "ConcreteSD";         
246                                                   
247   //------------------------                      
248   // MultiFunctionalDetector                      
249   //------------------------                      
250   //                                              
251   // Define MultiFunctionalDetector with name.    
252   G4MultiFunctionalDetector* MFDet = new G4Mul    
253   SDman->AddNewDetector(MFDet);  // Register S    
254                                                   
255   G4String fltName, particleName;                 
256   G4SDParticleFilter* neutronFilter =             
257     new G4SDParticleFilter(fltName = "neutronF    
258                                                   
259   MFDet->SetFilter(neutronFilter);                
260                                                   
261   for (std::vector<G4LogicalVolume*>::iterator    
262        it != fLogicalVolumeVector.end(); it++)    
263   {                                               
264     //      (*it)->SetSensitiveDetector(MFDet)    
265     SetSensitiveDetector((*it)->GetName(), MFD    
266   }                                               
267                                                   
268   G4String psName;                                
269   G4PSNofCollision* scorer0 = new G4PSNofColli    
270   MFDet->RegisterPrimitive(scorer0);              
271                                                   
272   G4PSNofCollision* scorer1 = new G4PSNofColli    
273   scorer1->Weighted(true);                        
274   MFDet->RegisterPrimitive(scorer1);              
275                                                   
276   G4PSPopulation* scorer2 = new G4PSPopulation    
277   MFDet->RegisterPrimitive(scorer2);              
278                                                   
279   G4PSTrackCounter* scorer3 = new G4PSTrackCou    
280   MFDet->RegisterPrimitive(scorer3);              
281                                                   
282   G4PSTrackLength* scorer4 = new G4PSTrackLeng    
283   MFDet->RegisterPrimitive(scorer4);              
284                                                   
285   G4PSTrackLength* scorer5 = new G4PSTrackLeng    
286   scorer5->Weighted(true);                        
287   MFDet->RegisterPrimitive(scorer5);              
288                                                   
289   G4PSTrackLength* scorer6 = new G4PSTrackLeng    
290   scorer6->Weighted(true);                        
291   scorer6->MultiplyKineticEnergy(true);           
292   MFDet->RegisterPrimitive(scorer6);              
293                                                   
294   G4PSTrackLength* scorer7 = new G4PSTrackLeng    
295   scorer7->Weighted(true);                        
296   scorer7->DivideByVelocity(true);                
297   MFDet->RegisterPrimitive(scorer7);              
298                                                   
299   G4PSTrackLength* scorer8 = new G4PSTrackLeng    
300   scorer8->Weighted(true);                        
301   scorer8->MultiplyKineticEnergy(true);           
302   scorer8->DivideByVelocity(true);                
303   MFDet->RegisterPrimitive(scorer8);              
304 }                                                 
305                                                   
306 //....oooOO0OOooo........oooOO0OOooo........oo    
307