Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/biasing/management/include/G4VBiasingOperation.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 ]

Diff markup

Differences between /processes/biasing/management/include/G4VBiasingOperation.hh (Version 11.3.0) and /processes/biasing/management/include/G4VBiasingOperation.hh (Version 10.0.p4)


  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 // G4VBiasingOperation                         <<  26 //
                                                   >>  27 // $Id: $
                                                   >>  28 //
                                                   >>  29 // --------------------------------------------------------------------
                                                   >>  30 // GEANT 4 class header file 
 27 //                                                 31 //
 28 // Class Description:                              32 // Class Description:
 29 //                                                 33 //
 30 // An abstract class to model the behavior of      34 // An abstract class to model the behavior of any type of biasing :
 31 // physics-based biasing (change of physics pr     35 // physics-based biasing (change of physics process behavior) or non-
 32 // physics-based one, like splitting, killing.     36 // physics-based one, like splitting, killing.
 33 //                                                 37 //
 34 // o The change of behavior of a physics proce     38 // o The change of behavior of a physics process can be:
 35 //     - a change of the PostStep interaction      39 //     - a change of the PostStep interaction probabilty, so-called
 36 //       occurrence biasing                    <<  40 //       occurence biasing
 37 //     - a change in final state production        41 //     - a change in final state production
 38 //     - both, provided above two are uncorrel     42 //     - both, provided above two are uncorrelated.
 39 // o The change of occurrence is driven by pro <<  43 // o The change of occurence is driven by providing a biasing interaction
 40 //   law (G4VBiasingInteractionLaw) that is us     44 //   law (G4VBiasingInteractionLaw) that is used in place of the analog
 41 //   exponential law.                              45 //   exponential law.
 42 //   This change of occurrence is controlled t <<  46 //   This change of occurence is controlled through many handles.
 43 // o The change in final state production is m     47 // o The change in final state production is made through one single
 44 //   method the user is fully responsible of.      48 //   method the user is fully responsible of.
 45 //                                                 49 //
 46 // o Non-physics-based biasing is controlled b     50 // o Non-physics-based biasing is controlled by two methods : one to
 47 //   specify where this biasing should happen,     51 //   specify where this biasing should happen, and one for generating
 48 //   the related final-state.                      52 //   the related final-state.
 49 //                                                 53 //
 50 // Author: Marc Verderi (LLR), November 2013   <<  54 //      ----------------G4VBiasingOperation ----------------
 51 // ------------------------------------------- <<  55 //
                                                   >>  56 // Author: M.Verderi (LLR), November 2013
                                                   >>  57 // - 05/11/13 : first implementation
                                                   >>  58 // ---------------------------------------------------------------------
                                                   >>  59 
                                                   >>  60 
                                                   >>  61 
 52 #ifndef G4VBiasingOperation_hh                     62 #ifndef G4VBiasingOperation_hh
 53 #define G4VBiasingOperation_hh 1                   63 #define G4VBiasingOperation_hh 1
 54                                                    64 
 55 #include "globals.hh"                              65 #include "globals.hh"
 56 #include "G4ForceCondition.hh"                 << 
 57 #include "G4GPILSelection.hh"                  << 
 58                                                << 
 59 class G4VParticleChange;                           66 class G4VParticleChange;
 60 class G4Track;                                     67 class G4Track;
 61 class G4Step;                                      68 class G4Step;
 62 class G4VBiasingInteractionLaw;                    69 class G4VBiasingInteractionLaw;
 63 class G4VProcess;                                  70 class G4VProcess;
 64 class G4BiasingProcessInterface;                   71 class G4BiasingProcessInterface;
                                                   >>  72 #include "G4ForceCondition.hh"
                                                   >>  73 #include "G4GPILSelection.hh"
                                                   >>  74 
                                                   >>  75 class G4VBiasingOperation {
                                                   >>  76 public:
                                                   >>  77   // ---------------
                                                   >>  78   // -- Constructor:
                                                   >>  79   // ---------------
                                                   >>  80   //
                                                   >>  81   // -- Constructor for biasing operations:
                                                   >>  82   // -----------------------------------
                                                   >>  83   // -- Operation is given a name.
                                                   >>  84   G4VBiasingOperation(G4String name);
                                                   >>  85 
                                                   >>  86   // -- destructor:
                                                   >>  87   virtual ~G4VBiasingOperation();
                                                   >>  88 
                                                   >>  89 public:
                                                   >>  90   // -----------------------------
                                                   >>  91   // -- Interface to sub-classes :
                                                   >>  92   // -----------------------------
                                                   >>  93   // --
                                                   >>  94   // *************************************
                                                   >>  95   // ** Methods for physics-based biasing:
                                                   >>  96   // *************************************
                                                   >>  97   // --
                                                   >>  98   // ---- I. Biasing of the process occurence:
                                                   >>  99   // -----------------------------------------
                                                   >> 100   // ---- The biasing of the process occurence regards the occurence of the PostStepDoIt
                                                   >> 101   // ---- behavior. But the weight is manipulated by both AlongStep methods (weight for
                                                   >> 102   // ---- non-interaction) and PostStep methods (weight for interaction). For this
                                                   >> 103   // ---- reason, occurence biasing is handled by both AlongStep and PostStep methods.
                                                   >> 104   // ----
                                                   >> 105   // ---- If the operation is returned to the G4BiasingProcessInterface process by the
                                                   >> 106   // ---- ProposeOccurenceBiasingOperation(...)/GetProposedOccurenceBiasingOperation(...) method
                                                   >> 107   // ---- of the biasing operator, all methods below will be called for this operation.
                                                   >> 108   // ----
                                                   >> 109   // ---- I.1) Methods called in at the PostStepGetPhysicalInteractionLength(...) level :
                                                   >> 110   // ---- 
                                                   >> 111   // ------ o Main and mandatory method for biasing of the PostStep process biasing occurence :
                                                   >> 112   // ------   - propose an interaction law to be substituted to the process that is biased
                                                   >> 113   // ------   - the operation is told which is the G4BiasingProcessInterface calling it with
                                                   >> 114   // ------     callingProcess argument.
                                                   >> 115   // ------   - the returned law will have to have been sampled prior to be returned as it will be
                                                   >> 116   // ------     asked for its GetSampledInteractionLength() by the callingProcess.
                                                   >> 117   virtual const G4VBiasingInteractionLaw* ProvideOccurenceBiasingInteractionLaw( const G4BiasingProcessInterface* /* callingProcess */ ) = 0;
                                                   >> 118   // ------ o Additionnal method for PostStep occurence:
                                                   >> 119   // ------   - operation can propose a force condition in the PostStepGPIL
                                                   >> 120   // ------   - this condition superseedes the wrapped process condition (taken as default condition)
                                                   >> 121   // ------   - it is called after above ProvideOccurenceBiasingInteractionLaw(...) by the same calling process.
                                                   >> 122   virtual G4ForceCondition                                ProposeForceCondition( const G4ForceCondition wrappedProcessCondition )
                                                   >> 123   {
                                                   >> 124     return wrappedProcessCondition;
                                                   >> 125   }
                                                   >> 126   // ----
                                                   >> 127   // ---- I.2) Methods called in at the AlongStepGetPhysicalInteractionLength(...) level :
                                                   >> 128   // ---- 
                                                   >> 129   // ------ o Operation can optionnally limit GPIL Along Step:
                                                   >> 130   virtual G4double                                        ProposeAlongStepLimit( const G4BiasingProcessInterface* /* callingProcess */ ) { return DBL_MAX; }
                                                   >> 131   // ------ o Operation can propose a GPILSelection in the AlongStepGPIL
                                                   >> 132   // ------   this selection superseeded the wrapped process selection
                                                   >> 133   // ------   if the wrapped process exists, and if has along methods:
                                                   >> 134   virtual G4GPILSelection                                  ProposeGPILSelection( const G4GPILSelection wrappedProcessSelection )
                                                   >> 135   {return wrappedProcessSelection;}
                                                   >> 136   
                                                   >> 137   // ----
                                                   >> 138   // ---- I.3) Methods called in at the AlongStepDoIt(...) level :
                                                   >> 139   // ---- 
                                                   >> 140   // ------ o Helper method to inform the operation of the move made in the along, and related non-interaction weight
                                                   >> 141   // ------   applied to the primary track for this move:
                                                   >> 142   virtual void                                                      AlongMoveBy( const G4BiasingProcessInterface*           /* callingProcess */,
                                                   >> 143                      const G4Step*                                        /* step */,
                                                   >> 144                      G4double                          /* weightForNonInteraction */ ) {}
                                                   >> 145 
                                                   >> 146   // ----
                                                   >> 147   // ---- I.4) Methods called in at the PostStepDoIt(...) level :
                                                   >> 148   // ---- 
                                                   >> 149   // ------ o Method allowing the operation to prevent wrapped process interaction to happen:
                                                   >> 150   // ------   - has to return true if interaction is denied by the operation
                                                   >> 151   // ------   - the primary is left unchanged in this case
                                                   >> 152   // ------   - but its weight becomes the one given by proposedTrackWeight.
                                                   >> 153   virtual G4bool                                        DenyProcessPostStepDoIt( const G4BiasingProcessInterface*      /* callingProcess */,
                                                   >> 154                      const G4Track*                                 /* track */,
                                                   >> 155                      const G4Step*                                   /* step */,
                                                   >> 156                      G4double&                        /* proposedTrackWeight */ )
                                                   >> 157   {return false;}
                                                   >> 158 
                                                   >> 159 
                                                   >> 160   // ---- II. Biasing of the process post step final state:
                                                   >> 161   // ------------------------------------------------------
                                                   >> 162   // ------ Mandatory method for biasing of the PostStepDoIt of the wrapped process
                                                   >> 163   // ------ holds by the G4BiasingProcessInterface callingProcess.
                                                   >> 164   // ------ User has full freedom for the particle change returned, and is reponsible for
                                                   >> 165   // ------ the correctness of weights set to tracks.
                                                   >> 166   // ------ The wrappedProcess can be accessed through the G4BiasingProcessInterface if needed.
                                                   >> 167   // ------ This can be used in conjonction with an occurence biasing, provided this final
                                                   >> 168   // ------ state biasing is uncorrelated with the occurence biasing (as single multiplication
                                                   >> 169   // ------ of weights occur between these two biasings).
                                                   >> 170   virtual G4VParticleChange*  ApplyFinalStateBiasing( const G4BiasingProcessInterface* /* callingProcess */,
                                                   >> 171                   const G4Track*                            /* track */,
                                                   >> 172                   const G4Step*                              /* step */) = 0;
                                                   >> 173 
                                                   >> 174   
                                                   >> 175   // ---- III. Biasing of the process along step final state:
                                                   >> 176   // --------------------------------------------------------
                                                   >> 177   // ---- Unprovided for now : requires significant developments.
                                                   >> 178 
                                                   >> 179 
                                                   >> 180 
                                                   >> 181   // ***************************************************
                                                   >> 182   // -- Methods for non-physics-based biasing operation:
                                                   >> 183   // ***************************************************
                                                   >> 184   // ----
                                                   >> 185   // ---- If the operation is returned to the G4BiasingProcessInterface process by the
                                                   >> 186   // ---- ProposeNonPhysicsBiasingOperation(...)/GetProposedNonPhysicsBiasingOperation(...) method
                                                   >> 187   // ---- of the biasing operator, all methods below will be called for this operation.
                                                   >> 188   // -----
                                                   >> 189   // ---- 1) Method called in at the PostStepGetPhysicalInteractionLength(...) level :
                                                   >> 190   // ---- 
                                                   >> 191   // ---- o Return to the distance at which the operation should be applied, or may
                                                   >> 192   // ----   play with the force condition flags.
                                                   >> 193   virtual G4double           DistanceToApplyOperation( const G4Track*               /* track */,
                                                   >> 194                    G4double          /* previousStepSize */,
                                                   >> 195                    G4ForceCondition*        /* condition */) = 0;
                                                   >> 196   // ----
                                                   >> 197   // ---- 2) Method called in at the PostStepDoIt(...) level :
                                                   >> 198   // ---- 
                                                   >> 199   // ---- o Generate the final state for biasing (eg: splitting, killing, etc.)
                                                   >> 200   virtual G4VParticleChange* GenerateBiasingFinalState( const G4Track*               /* track */,
                                                   >> 201               const G4Step*                 /* step */) = 0;
                                                   >> 202   
                                                   >> 203 
                                                   >> 204   // ----------------------------------------
                                                   >> 205   // -- public interface and utility methods:
                                                   >> 206   // ----------------------------------------
                                                   >> 207 public:
                                                   >> 208   const G4String&       GetName() const {return fName;}
                                                   >> 209   std::size_t       GetUniqueID() const {return fUniqueID;}
 65                                                   210 
 66 class G4VBiasingOperation                      << 
 67 {                                              << 
 68   public:                                      << 
 69                                                << 
 70     // -- Constructor:                         << 
 71     G4VBiasingOperation(const G4String& name); << 
 72                                                << 
 73     // -- destructor:                          << 
 74     virtual ~G4VBiasingOperation() = default;  << 
 75                                                << 
 76     // -----------------------------           << 
 77     // -- Interface to sub-classes :           << 
 78     // -----------------------------           << 
 79     // --                                      << 
 80     // *************************************   << 
 81     // ** Methods for physics-based biasing:   << 
 82     // *************************************   << 
 83     // --                                      << 
 84     // ---- I. Biasing of the process occurren << 
 85     // --------------------------------------- << 
 86     // ---- The biasing of the process occurre << 
 87     // ---- behavior. But the weight is manipu << 
 88     // ---- non-interaction) and PostStep meth << 
 89     // ---- reason, occurrence biasing is hand << 
 90     // ----                                    << 
 91     // ---- If the operation is returned to th << 
 92     // ---- ProposeOccurenceBiasingOperation(. << 
 93     // ---- of the biasing operator, all metho << 
 94     // ----                                    << 
 95     // ---- I.1) Methods called in at the Post << 
 96     // ----                                    << 
 97     // ------ o Main and mandatory method for  << 
 98     // ------   - propose an interaction law t << 
 99     // ------   - the operation is told which  << 
100     // ------     callingProcess argument.     << 
101     // ------   - the returned law will have t << 
102     // ------     asked for its GetSampledInte << 
103     // ------   - the operation can propose a  << 
104     // ------     to the operation is the one  << 
105     // ------     unchanged, this same value w << 
106     virtual const G4VBiasingInteractionLaw*    << 
107     ProvideOccurenceBiasingInteractionLaw( con << 
108                                            G4F << 
109     // ----                                    << 
110     // ---- I.2) Methods called in at the Alon << 
111     // ----                                    << 
112     // ------ o Operation can optionnally limi << 
113     virtual G4double ProposeAlongStepLimit( co << 
114       { return DBL_MAX; }                      << 
115                                                << 
116     // ------ o Operation can propose a GPILSe << 
117     // ------   this selection superseeded the << 
118     // ------   if the wrapped process exists, << 
119     virtual G4GPILSelection ProposeGPILSelecti << 
120       { return wrappedProcessSelection; }      << 
121                                                   211   
122     // ----                                    << 212 private:
123     // ---- I.3) Methods called in at the Alon << 213   const G4String             fName;
124     // ----                                    << 214   // -- better would be to have fUniqueID const, but pb on windows with constructor.
125     // ------ o Helper method to inform the op << 215   std::size_t            fUniqueID;
126     // ------   applied to the primary track f << 
127     virtual void AlongMoveBy( const G4BiasingP << 
128                               const G4Step* /* << 
129                                     G4double / << 
130                                                << 
131     // ---- II. Biasing of the process post st << 
132     // --------------------------------------- << 
133     // ------ Mandatory method for biasing of  << 
134     // ------ holds by the G4BiasingProcessInt << 
135     // ------ User has full freedom for the pa << 
136     // ------ the correctness of weights set t << 
137     // ------ The forcedBiasedFinalState shoul << 
138     // ------ way, if an occurrence biasing is << 
139     // ------ for it will be applied. If retur << 
140     // ------ the returned particle change wil << 
141     // ------ responsibility of the weight cor << 
142     // ------ The wrappedProcess can be access << 
143     // ------ This can be used in conjunction  << 
144     // ------ state biasing is uncorrelated wi << 
145     // ------ of weights occur between these t << 
146     virtual G4VParticleChange* ApplyFinalState << 
147                                                << 
148                                                << 
149                                                << 
150                                                << 
151     // ---- III. Biasing of the process along  << 
152     // --------------------------------------- << 
153     // ---- Unprovided for now : requires sign << 
154                                                << 
155     // *************************************** << 
156     // -- Methods for non-physics-based biasin << 
157     // *************************************** << 
158     // ----                                    << 
159     // ---- If the operation is returned to th << 
160     // ---- ProposeNonPhysicsBiasingOperation( << 
161     // ---- of the biasing operator, all metho << 
162     // -----                                   << 
163     // ---- 1) Method called in at the PostSte << 
164     // ----                                    << 
165     // ---- o Return to the distance at which  << 
166     // ----   play with the force condition fl << 
167     virtual G4double DistanceToApplyOperation( << 
168                                                << 
169                                                << 
170     // ----                                    << 
171     // ---- 2) Method called in at the PostSte << 
172     // ----                                    << 
173     // ---- o Generate the final state for bia << 
174     virtual G4VParticleChange* GenerateBiasing << 
175                                                << 
176                                                << 
177     // --------------------------------------- << 
178     // -- public interface and utility methods << 
179     // --------------------------------------- << 
180                                                << 
181     const G4String& GetName() const { return f << 
182     std::size_t GetUniqueID() const { return f << 
183                                                << 
184   private:                                     << 
185                                                << 
186     const G4String fName;                      << 
187     // -- better would be to have fUniqueID co << 
188     std::size_t fUniqueID;                     << 
189 };                                                216 };
190                                                   217 
191 #endif                                            218 #endif
192                                                   219