Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/incl_physics/src/G4INCLDecayAvatar.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/hadronic/models/inclxx/incl_physics/src/G4INCLDecayAvatar.cc (Version 11.3.0) and /processes/hadronic/models/inclxx/incl_physics/src/G4INCLDecayAvatar.cc (Version 9.0.p2)


  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 // INCL++ intra-nuclear cascade model             
 27 // Alain Boudard, CEA-Saclay, France              
 28 // Joseph Cugnon, University of Liege, Belgium    
 29 // Jean-Christophe David, CEA-Saclay, France      
 30 // Pekka Kaitaniemi, CEA-Saclay, France, and H    
 31 // Sylvie Leray, CEA-Saclay, France               
 32 // Davide Mancusi, CEA-Saclay, France             
 33 //                                                
 34 #define INCLXX_IN_GEANT4_MODE 1                   
 35                                                   
 36 #include "globals.hh"                             
 37                                                   
 38 #include "G4INCLDecayAvatar.hh"                   
 39                                                   
 40 #include "G4INCLDeltaDecayChannel.hh"             
 41 #include "G4INCLPionResonanceDecayChannel.hh"     
 42 #include "G4INCLSigmaZeroDecayChannel.hh"         
 43 #include "G4INCLNeutralKaonDecayChannel.hh"       
 44 #include "G4INCLStrangeAbsorbtionChannel.hh"      
 45 #include "G4INCLPauliBlocking.hh"                 
 46 #include <sstream>                                
 47 #include <string>                                 
 48 // #include <cassert>                             
 49                                                   
 50 namespace G4INCL {                                
 51                                                   
 52   DecayAvatar::DecayAvatar(G4INCL::Particle *a    
 53     : InteractionAvatar(time, n, aParticle), f    
 54       incidentDirection(aParticle->getMomentum    
 55   {                                               
 56     setType(DecayAvatarType);                     
 57   }                                               
 58                                                   
 59   DecayAvatar::DecayAvatar(G4INCL::Particle *a    
 60     : InteractionAvatar(time, n, aParticle, bP    
 61       incidentDirection(aParticle->getMomentum    
 62   {                                               
 63     setType(DecayAvatarType);                     
 64   }                                               
 65                                                   
 66   DecayAvatar::~DecayAvatar() {                   
 67                                                   
 68   }                                               
 69                                                   
 70   G4INCL::IChannel* DecayAvatar::getChannel()     
 71     if(!particle2){                               
 72        if(particle1->isDelta()) {                 
 73          INCL_DEBUG("DeltaDecayChannel chosen.    
 74          return new DeltaDecayChannel(particle    
 75        }                                          
 76        else if(particle1->isEta() || particle1    
 77          INCL_DEBUG("PionResonanceDecayChannel    
 78          return new PionResonanceDecayChannel(    
 79        }                                          
 80        else if(particle1->getType() == SigmaZe    
 81          INCL_DEBUG("SigmaZeroDecayChannel cho    
 82          return new SigmaZeroDecayChannel(part    
 83        }                                          
 84        else if(particle1->getType() == KZero |    
 85          INCL_DEBUG("NeutralKaonDecayChannel c    
 86          return new NeutralKaonDecayChannel(pa    
 87        }                                          
 88     }                                             
 89     else if(((particle1->isAntiKaon() || parti    
 90       INCL_DEBUG("StrangeAbsorbtion." << '\n')    
 91       return new StrangeAbsorbtionChannel(part    
 92     }                                             
 93     return NULL;                                  
 94   }                                               
 95                                                   
 96   void DecayAvatar::preInteraction() {            
 97     InteractionAvatar::preInteraction();          
 98   }                                               
 99                                                   
100   void DecayAvatar::postInteraction(FinalState    
101     // Make sure we have at least two particle    
102     // Removed because of neutral kaon decay      
103                                                   
104 // assert((fs->getModifiedParticles().size() +    
105     //assert((fs->getModifiedParticles().size(    
106     if(!forced) { // Normal decay                 
107       // Call the postInteraction method of th    
108       // (provides Pauli blocking and enforces    
109       InteractionAvatar::postInteraction(fs);     
110                                                   
111       if(fs->getValidity() == PauliBlockedFS)     
112         /* If the decay was Pauli-blocked, mak    
113          * generates a new decay avatar on the    
114          *                                        
115          * \bug{Note that we don't generate ne    
116          * could not satisfy energy conservati    
117          * INCL4.6, but doesn't seem to make m    
118          * conservation can be impossible to s    
119          * conditions, for example, that evolv    
120          */                                       
121         fs->addModifiedParticle(particle1);       
122     } else { // Forced decay                      
123       modified = fs->getModifiedParticles();      
124       created = fs->getCreatedParticles();        
125       Destroyed = fs->getDestroyedParticles();    
126       modifiedAndCreated = modified;              
127       modifiedAndCreated.insert(modifiedAndCre    
128       ModifiedAndDestroyed = modified;            
129       ModifiedAndDestroyed.insert(ModifiedAndD    
130                                                   
131       std::vector<G4int> newBiasCollisionVecto    
132       newBiasCollisionVector = ModifiedAndDest    
133       for(ParticleIter i=modifiedAndCreated.be    
134       (*i)->setBiasCollisionVector(newBiasColl    
135       }                                           
136       // Try to enforce energy conservation       
137       fs->setTotalEnergyBeforeInteraction(oldT    
138       const G4bool success = enforceEnergyCons    
139       if(!success) {                              
140         INCL_DEBUG("Enforcing energy conservat    
141                                                   
142         if(theNucleus) {                          
143           // Restore the state of the initial     
144           restoreParticles();                     
145                                                   
146           // Delete newly created particles       
147           for(ParticleIter i=created.begin(),     
148             delete *i;                            
149                                                   
150           fs->reset();                            
151           fs->makeNoEnergyConservation();         
152           fs->setTotalEnergyBeforeInteraction(    
153                                                   
154           return; // Interaction is blocked. R    
155         } else {                                  
156           // If there is no nucleus we have to    
157           // conservation failed. We cannot af    
158           // remnants.                            
159           INCL_DEBUG("No nucleus, continuing a    
160         }                                         
161       } else {                                    
162         INCL_DEBUG("Enforcing energy conservat    
163       }                                           
164                                                   
165       if(theNucleus) {                            
166         // Test CDPP blocking                     
167         G4bool isCDPPBlocked = Pauli::isCDPPBl    
168                                                   
169         if(isCDPPBlocked) {                       
170           INCL_DEBUG("CDPP: Blocked!" << '\n')    
171                                                   
172           // Restore the state of both particl    
173           restoreParticles();                     
174                                                   
175           // Delete newly created particles       
176           for(ParticleIter i=created.begin(),     
177             delete *i;                            
178                                                   
179           fs->reset();                            
180           fs->makePauliBlocked();                 
181           fs->setTotalEnergyBeforeInteraction(    
182                                                   
183           return; // Interaction is blocked. R    
184         }                                         
185         INCL_DEBUG("CDPP: Allowed!" << '\n');     
186                                                   
187       }                                           
188     }                                             
189     // If there is a nucleus, increment the co    
190     if(theNucleus) {                              
191       switch(fs->getValidity()) {                 
192         case PauliBlockedFS:                      
193           theNucleus->getStore()->getBook().in    
194           break;                                  
195         case NoEnergyConservationFS:              
196         case ParticleBelowFermiFS:                
197         case ParticleBelowZeroFS:                 
198           break;                                  
199         case ValidFS:                             
200           theNucleus->getStore()->getBook().in    
201       }                                           
202     }                                             
203                                                   
204     return;                                       
205   }                                               
206                                                   
207   std::string DecayAvatar::dump() const {         
208     std::stringstream ss;                         
209     ss << "(avatar " << theTime << " 'decay" <    
210       << "(list " << '\n'                         
211       << particle1->dump()                        
212       << "))" << '\n';                            
213     return ss.str();                              
214   }                                               
215 }                                                 
216