Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/physics_lists/constructors/limiters/include/G4GenericBiasingPhysics.hh

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 ]

  1 //
  2 // ********************************************************************
  3 // * License and Disclaimer                                           *
  4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.                             *
 10 // *                                                                  *
 11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                                                  *
 18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // ********************************************************************
 25 //
 26 //
 27 //
 28 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 29 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 30 
 31 #ifndef G4GenericBiasingPhysics_h
 32 #define G4GenericBiasingPhysics_h 1
 33 
 34 #include "G4VPhysicsConstructor.hh"
 35 #include "globals.hh"
 36 
 37 #include <vector>
 38 
 39 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 40 
 41 class G4GenericBiasingPhysics : public G4VPhysicsConstructor
 42 {
 43 public:
 44   
 45   G4GenericBiasingPhysics(const G4String& name = "BiasingP");
 46   virtual ~G4GenericBiasingPhysics();
 47 
 48 public:
 49   // ------------------------------
 50   // -- Biasing activation methods:
 51   // ------------------------------
 52   // -- Used to select particles and processes to be under biasing:
 53   // ---- Put under biasing all physics processes of given particleName:
 54   void PhysicsBias(const G4String& particleName);
 55   // ---- Put under biasing processes in processToBiasNames of given particleName:
 56   void PhysicsBias(const G4String& particleName, const std::vector< G4String >& processToBiasNames);
 57   // ---- Allow for non physics biasing for particle:
 58   void NonPhysicsBias(const G4String& particleName);
 59   // ---- Put under biasing all physics processes and allow for non physics biasing:
 60   void Bias(const G4String& particleName);
 61   // ---- Put under biasing processes in processToBiasNames of given particleName:
 62   void Bias(const G4String& particleName, const std::vector< G4String >& processToBiasNames);
 63 
 64   // -- Bias groups of particles:
 65   // --  - particles which have been setup by names with above methods are not affected
 66   // --  - particles can be specified by PDG range
 67   // --  - particles can be specified by the charged ou neutral nature
 68   // --     - particles specified by name and PDG range are unaffected
 69   // -- Add a PDG range for particle to bias, anti-particles are included by default:
 70   void    PhysicsBiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle = true );
 71   void NonPhysicsBiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle = true );
 72   void           BiasAddPDGRange( G4int PDGlow, G4int PDGhigh, G4bool includeAntiParticle = true );
 73   // -- Will bias all charged particles:
 74   void    PhysicsBiasAllCharged( G4bool includeShortLived = false );
 75   void NonPhysicsBiasAllCharged( G4bool includeShortLived = false );
 76   void           BiasAllCharged( G4bool includeShortLived = false );
 77   // -- Will bias all neutral particles:
 78   void    PhysicsBiasAllNeutral( G4bool includeShortLived = false );
 79   void NonPhysicsBiasAllNeutral( G4bool includeShortLived = false );
 80   void           BiasAllNeutral( G4bool includeShortLived = false );
 81 
 82   
 83   // -------------------------------------------------------------
 84   // -- Activation of parallel geometries used by generic biasing:
 85   // -------------------------------------------------------------
 86   // -- Each method can be called several times:
 87   // --    - on a same particle type :
 88   // --        myBiasingPhysics->AddParallelGeometry("neutron", "geometry1");
 89   // --        myBiasingPhysics->AddParallelGeometry("neutron", "geometry2");
 90   // --    - on a range of PDG particle:
 91   // --        myBiasingPhysics->AddParallelGeometry(PDG1, PDG2, "geometryXX");
 92   // --        myBiasingPhysics->AddParallelGeometry(PDG3, PDG4, vectorOfGeometries);
 93   // -- etc.
 94   void AddParallelGeometry( const G4String& particleName, const G4String&                parallelGeometryName  );
 95   void AddParallelGeometry( const G4String& particleName, const std::vector< G4String >& parallelGeometryNames );
 96   void AddParallelGeometry( G4int PDGlow, G4int PDGhigh,  const G4String&                parallelGeometryName , G4bool includeAntiParticle = true );
 97   void AddParallelGeometry( G4int PDGlow, G4int PDGhigh,  const std::vector< G4String >& parallelGeometryNames, G4bool includeAntiParticle = true );
 98   void AddParallelGeometryAllCharged(                     const G4String&                parallelGeometryName , G4bool includeShortLived = false );
 99   void AddParallelGeometryAllCharged(                     const std::vector< G4String >& parallelGeometryNames, G4bool includeShortLived = false );
100   void AddParallelGeometryAllNeutral(                     const G4String&                parallelGeometryName , G4bool includeShortLived = false );
101   void AddParallelGeometryAllNeutral(                     const std::vector< G4String >& parallelGeometryNames, G4bool includeShortLived = false );
102   
103 
104 
105   // -- Information about biased particles:
106   void BeVerbose() { fVerbose = true; }
107   
108 public:
109   
110   // This method is dummy for physics
111   virtual void ConstructParticle();
112   
113   // This method will be invoked in the Construct() method.
114   // each physics process will be instantiated and
115   // registered to the process manager of each particle type
116   virtual void ConstructProcess();
117   
118 private:
119   
120   // hide assignment operator
121   G4GenericBiasingPhysics & operator=(const G4GenericBiasingPhysics &right);
122   G4GenericBiasingPhysics(const G4GenericBiasingPhysics&);
123 
124   // -- Particles under biasing:
125   std::vector< G4String >  fBiasedParticles;
126   std::vector< G4bool >   fBiasAllProcesses;
127   // -- Related biased processes:
128   std::vector< std::vector< G4String > > fBiasedProcesses;
129   // -- non physics biased particles:
130   std::vector< G4String > fNonPhysBiasedParticles;
131 
132   // -- Group of particles under biasing:
133   std::vector< G4int >    fPhysBiasByPDGRangeLow,    fPhysBiasByPDGRangeHigh;
134   std::vector< G4int > fNonPhysBiasByPDGRangeLow, fNonPhysBiasByPDGRangeHigh;
135   G4bool fPhysBiasAllCharged, fNonPhysBiasAllCharged;
136   G4bool fPhysBiasAllChargedISL, fNonPhysBiasAllChargedISL;
137   G4bool fPhysBiasAllNeutral,    fNonPhysBiasAllNeutral;
138   G4bool fPhysBiasAllNeutralISL, fNonPhysBiasAllNeutralISL;
139 
140   
141   // -- Particles associated with parallel geometries:
142   std::vector< G4String >                       fParticlesWithParallelGeometries;
143   std::map< G4String, std::vector< G4String > > fParallelGeometriesForParticle;
144   std::vector< G4int >                          fPDGlowParallelGeometries, fPDGhighParallelGeometries;
145   std::map< G4int,    std::vector< G4String > > fPDGrangeParallelGeometries;
146   std::vector< G4String >                       fParallelGeometriesForCharged,    fParallelGeometriesForNeutral;
147   std::vector< G4bool >                         fAllChargedParallelGeometriesISL, fAllNeutralParallelGeometriesISL;
148 
149   
150   void AssociateParallelGeometries();
151 
152   
153   // -- Report:
154   G4bool fVerbose;
155 
156 
157   
158 };
159 
160 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
161 
162 #endif
163