Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/adjoint/src/G4AdjointProcessEquivalentToDirectProcess.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 /processes/electromagnetic/adjoint/src/G4AdjointProcessEquivalentToDirectProcess.cc (Version 11.3.0) and /processes/electromagnetic/adjoint/src/G4AdjointProcessEquivalentToDirectProcess.cc (Version 9.1.p1)


  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 // -------------------------------------------    
 27 //                                                
 28 // This class is for adjoint process equivalen    
 29 //                                                
 30 // -------------------------------------------    
 31 //   Created by L.Desorgher          25 Sept.     
 32 // -------------------------------------------    
 33                                                   
 34 #include "G4AdjointProcessEquivalentToDirectPr    
 35                                                   
 36 #include "G4DynamicParticle.hh"                   
 37 #include "G4ParticleDefinition.hh"                
 38 #include "G4VProcess.hh"                          
 39                                                   
 40 G4AdjointProcessEquivalentToDirectProcess::       
 41   G4AdjointProcessEquivalentToDirectProcess(      
 42     const G4String& aName, G4VProcess* aProces    
 43     G4ParticleDefinition* fwd_particle_def)       
 44   : G4VProcess(aName)                             
 45 {                                                 
 46   fDirectProcess  = aProcess;                     
 47   theProcessType  = fDirectProcess->GetProcess    
 48   fFwdParticleDef = fwd_particle_def;             
 49 }                                                 
 50                                                   
 51 G4AdjointProcessEquivalentToDirectProcess::       
 52   ~G4AdjointProcessEquivalentToDirectProcess()    
 53 {                                                 
 54   if(fDirectProcess != nullptr)                   
 55     delete fDirectProcess;                        
 56 }                                                 
 57                                                   
 58 void G4AdjointProcessEquivalentToDirectProcess    
 59   ResetNumberOfInteractionLengthLeft()            
 60 {                                                 
 61   fDirectProcess->ResetNumberOfInteractionLeng    
 62 }                                                 
 63                                                   
 64 G4double G4AdjointProcessEquivalentToDirectPro    
 65   AlongStepGetPhysicalInteractionLength(const     
 66                                         G4doub    
 67                                         G4doub    
 68                                         G4doub    
 69                                         G4GPIL    
 70 {                                                 
 71   // Change the particle definition to the dir    
 72   G4DynamicParticle* theDynPart =                 
 73     const_cast<G4DynamicParticle*>(track.GetDy    
 74   G4ParticleDefinition* adjPartDef = theDynPar    
 75                                                   
 76   G4DecayProducts* decayProducts =                
 77     const_cast<G4DecayProducts*>(theDynPart->G    
 78   theDynPart->SetPreAssignedDecayProducts((G4D    
 79   theDynPart->SetDefinition(fFwdParticleDef);     
 80                                                   
 81   // Call the direct process                      
 82   G4double GPIL = fDirectProcess->AlongStepGet    
 83     track, previousStepSize, currentMinimumSte    
 84                                                   
 85   // Restore the adjoint particle definition t    
 86   theDynPart->SetDefinition(adjPartDef);          
 87   theDynPart->SetPreAssignedDecayProducts(deca    
 88                                                   
 89   return GPIL;                                    
 90 }                                                 
 91                                                   
 92 G4double                                          
 93 G4AdjointProcessEquivalentToDirectProcess::AtR    
 94   const G4Track& track, G4ForceCondition* cond    
 95 {                                                 
 96   // Change the particle definition to the dir    
 97   G4DynamicParticle* theDynPart =                 
 98     const_cast<G4DynamicParticle*>(track.GetDy    
 99   G4ParticleDefinition* adjPartDef = theDynPar    
100                                                   
101   G4DecayProducts* decayProducts =                
102     const_cast<G4DecayProducts*>(theDynPart->G    
103   theDynPart->SetPreAssignedDecayProducts((G4D    
104   theDynPart->SetDefinition(fFwdParticleDef);     
105                                                   
106   // Call the direct process                      
107   G4double GPIL =                                 
108     fDirectProcess->AtRestGetPhysicalInteracti    
109                                                   
110   // Restore the adjoint particle definition t    
111   theDynPart->SetDefinition(adjPartDef);          
112   theDynPart->SetPreAssignedDecayProducts(deca    
113                                                   
114   return GPIL;                                    
115 }                                                 
116                                                   
117 G4double                                          
118 G4AdjointProcessEquivalentToDirectProcess::Pos    
119   const G4Track& track, G4double previousStepS    
120 {                                                 
121   // Change the particle definition to the dir    
122   G4DynamicParticle* theDynPart =                 
123     const_cast<G4DynamicParticle*>(track.GetDy    
124   G4ParticleDefinition* adjPartDef = theDynPar    
125                                                   
126   G4DecayProducts* decayProducts =                
127     const_cast<G4DecayProducts*>(theDynPart->G    
128                                                   
129   theDynPart->SetPreAssignedDecayProducts((G4D    
130   theDynPart->SetDefinition(fFwdParticleDef);     
131                                                   
132   // Call the direct process                      
133   G4double GPIL = fDirectProcess->PostStepGetP    
134     track, previousStepSize, condition);          
135                                                   
136   // Restore the adjoint particle definition t    
137   theDynPart->SetDefinition(adjPartDef);          
138   theDynPart->SetPreAssignedDecayProducts(deca    
139                                                   
140   return GPIL;                                    
141 }                                                 
142                                                   
143 G4VParticleChange* G4AdjointProcessEquivalentT    
144   const G4Track& track, const G4Step& stepData    
145 {                                                 
146   // Change the particle definition to the dir    
147   G4DynamicParticle* theDynPart =                 
148     const_cast<G4DynamicParticle*>(track.GetDy    
149   G4ParticleDefinition* adjPartDef = theDynPar    
150                                                   
151   G4DecayProducts* decayProducts =                
152     const_cast<G4DecayProducts*>(theDynPart->G    
153                                                   
154   theDynPart->SetPreAssignedDecayProducts((G4D    
155   theDynPart->SetDefinition(fFwdParticleDef);     
156                                                   
157   // Call the direct process                      
158   G4VParticleChange* partChange = fDirectProce    
159                                                   
160   // Restore the adjoint particle definition t    
161   theDynPart->SetDefinition(adjPartDef);          
162   theDynPart->SetPreAssignedDecayProducts(deca    
163                                                   
164   return partChange;                              
165 }                                                 
166                                                   
167 G4VParticleChange* G4AdjointProcessEquivalentT    
168   const G4Track& track, const G4Step& stepData    
169 {                                                 
170   // Change the particle definition to the dir    
171   G4DynamicParticle* theDynPart =                 
172     const_cast<G4DynamicParticle*>(track.GetDy    
173   G4ParticleDefinition* adjPartDef = theDynPar    
174                                                   
175   G4DecayProducts* decayProducts =                
176     const_cast<G4DecayProducts*>(theDynPart->G    
177                                                   
178   theDynPart->SetPreAssignedDecayProducts((G4D    
179   theDynPart->SetDefinition(fFwdParticleDef);     
180                                                   
181   // Call the direct process                      
182   G4VParticleChange* partChange =                 
183     fDirectProcess->AlongStepDoIt(track, stepD    
184                                                   
185   // Restore the adjoint particle definition t    
186   theDynPart->SetDefinition(adjPartDef);          
187   theDynPart->SetPreAssignedDecayProducts(deca    
188                                                   
189   return partChange;                              
190 }                                                 
191                                                   
192 G4VParticleChange* G4AdjointProcessEquivalentT    
193   const G4Track& track, const G4Step& stepData    
194 {                                                 
195   // Change the particle definition to the dir    
196   G4DynamicParticle* theDynPart =                 
197     const_cast<G4DynamicParticle*>(track.GetDy    
198   G4ParticleDefinition* adjPartDef = theDynPar    
199                                                   
200   G4DecayProducts* decayProducts =                
201     const_cast<G4DecayProducts*>(theDynPart->G    
202                                                   
203   theDynPart->SetPreAssignedDecayProducts((G4D    
204   theDynPart->SetDefinition(fFwdParticleDef);     
205                                                   
206   // Call the direct process                      
207   G4VParticleChange* partChange = fDirectProce    
208                                                   
209   // Restore the adjoint particle definition t    
210   theDynPart->SetDefinition(adjPartDef);          
211   theDynPart->SetPreAssignedDecayProducts(deca    
212                                                   
213   return partChange;                              
214 }                                                 
215                                                   
216 G4bool G4AdjointProcessEquivalentToDirectProce    
217   const G4ParticleDefinition&)                    
218 {                                                 
219   return fDirectProcess->IsApplicable(*fFwdPar    
220 }                                                 
221                                                   
222 void G4AdjointProcessEquivalentToDirectProcess    
223   const G4ParticleDefinition&)                    
224 {                                                 
225   return fDirectProcess->BuildPhysicsTable(*fF    
226 }                                                 
227                                                   
228 void G4AdjointProcessEquivalentToDirectProcess    
229   const G4ParticleDefinition&)                    
230 {                                                 
231   return fDirectProcess->PreparePhysicsTable(*    
232 }                                                 
233                                                   
234 G4bool G4AdjointProcessEquivalentToDirectProce    
235   const G4ParticleDefinition*, const G4String&    
236 {                                                 
237   return fDirectProcess->StorePhysicsTable(fFw    
238 }                                                 
239                                                   
240 G4bool G4AdjointProcessEquivalentToDirectProce    
241   const G4ParticleDefinition*, const G4String&    
242 {                                                 
243   return fDirectProcess->RetrievePhysicsTable(    
244                                                   
245 }                                                 
246                                                   
247 void G4AdjointProcessEquivalentToDirectProcess    
248 {                                                 
249   // Change the particle definition to the dir    
250   G4DynamicParticle* theDynPart =                 
251     const_cast<G4DynamicParticle*>(track->GetD    
252   G4ParticleDefinition* adjPartDef = theDynPar    
253                                                   
254   G4DecayProducts* decayProducts =                
255     const_cast<G4DecayProducts*>(theDynPart->G    
256   theDynPart->SetPreAssignedDecayProducts((G4D    
257   theDynPart->SetDefinition(fFwdParticleDef);     
258                                                   
259   fDirectProcess->StartTracking(track);           
260                                                   
261   // Restore the adjoint particle definition t    
262   theDynPart->SetDefinition(adjPartDef);          
263   theDynPart->SetPreAssignedDecayProducts(deca    
264                                                   
265   return;                                         
266 }                                                 
267                                                   
268 void G4AdjointProcessEquivalentToDirectProcess    
269 {                                                 
270   fDirectProcess->EndTracking();                  
271 }                                                 
272