Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/management/src/G4HadLeadBias.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/management/src/G4HadLeadBias.cc (Version 11.3.0) and /processes/hadronic/management/src/G4HadLeadBias.cc (Version 9.5.p1)


  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 // 20110906  M. Kelsey -- Use reference to G4H     26 // 20110906  M. Kelsey -- Use reference to G4HadSecondary instead of pointer
 27                                                    27 
 28 #include "G4HadLeadBias.hh"                        28 #include "G4HadLeadBias.hh"
 29 #include "G4Gamma.hh"                              29 #include "G4Gamma.hh"
 30 #include "G4PionZero.hh"                           30 #include "G4PionZero.hh"
 31 #include "Randomize.hh"                            31 #include "Randomize.hh"
 32 #include "G4HadFinalState.hh"                      32 #include "G4HadFinalState.hh"
 33                                                    33 
 34   G4HadFinalState * G4HadLeadBias::Bias(G4HadF     34   G4HadFinalState * G4HadLeadBias::Bias(G4HadFinalState * result)
 35   {                                                35   {
 36     // G4cerr << "bias enter"<<G4endl;             36     // G4cerr << "bias enter"<<G4endl;
 37     G4int nMeson(0), nBaryon(0), npi0(0), ngam     37     G4int nMeson(0), nBaryon(0), npi0(0), ngamma(0), nLepton(0);
 38     G4int i(0);                                    38     G4int i(0);
 39     G4int maxE = -1;                               39     G4int maxE = -1;
 40     G4double emax = 0;                             40     G4double emax = 0;
 41     if(result->GetStatusChange()==isAlive)         41     if(result->GetStatusChange()==isAlive) 
 42     {                                              42     {
 43       emax = result->GetEnergyChange();            43       emax = result->GetEnergyChange();
 44     }                                              44     }
 45     //G4cout << "max energy "<<G4endl;             45     //G4cout << "max energy "<<G4endl;
 46     for(i=0;i<static_cast<G4int>(result->GetNu <<  46     for(i=0;i<result->GetNumberOfSecondaries();i++)
 47     {                                              47     {
 48       if(result->GetSecondary(i)->GetParticle(     48       if(result->GetSecondary(i)->GetParticle()->GetKineticEnergy()>emax)
 49       {                                            49       {
 50         maxE = i;                                  50         maxE = i;
 51   emax = result->GetSecondary(i)->GetParticle(     51   emax = result->GetSecondary(i)->GetParticle()->GetKineticEnergy();
 52       }                                            52       }
 53     }                                              53     }
 54     //G4cout <<"loop1"<<G4endl;                    54     //G4cout <<"loop1"<<G4endl;
 55     for(i=0; i<static_cast<G4int>(result->GetN <<  55     for(i=0; i<result->GetNumberOfSecondaries(); i++)
 56     {                                              56     {
 57       const G4DynamicParticle* aSecTrack = res     57       const G4DynamicParticle* aSecTrack = result->GetSecondary(i)->GetParticle();
 58       if(i==maxE)                                  58       if(i==maxE)
 59       {                                            59       {
 60       }                                            60       }
 61       else if(aSecTrack->GetDefinition()->GetB     61       else if(aSecTrack->GetDefinition()->GetBaryonNumber()!=0) 
 62       {                                            62       {
 63         nBaryon++;                                 63         nBaryon++;
 64       }                                            64       }
 65       else if(aSecTrack->GetDefinition()->GetL     65       else if(aSecTrack->GetDefinition()->GetLeptonNumber()!=0) 
 66       {                                            66       {
 67         nLepton++;                                 67         nLepton++;
 68       }                                            68       }
 69       else if(aSecTrack->GetDefinition()==G4Ga     69       else if(aSecTrack->GetDefinition()==G4Gamma::Gamma())
 70       {                                            70       {
 71         ngamma++;                                  71         ngamma++;
 72       }                                            72       }
 73       else if(aSecTrack->GetDefinition()==G4Pi     73       else if(aSecTrack->GetDefinition()==G4PionZero::PionZero())
 74       {                                            74       {
 75         npi0++;                                    75         npi0++;
 76       }                                            76       }
 77       else                                         77       else
 78       {                                            78       {
 79         nMeson++;                                  79         nMeson++;
 80       }                                            80       }
 81     }                                              81     }
 82      //G4cout << "BiasDebug 1 = "<<result->Get     82      //G4cout << "BiasDebug 1 = "<<result->GetNumberOfSecondaries()<<" "
 83      //       <<nMeson<<" "<< nBaryon<<" "<< n     83      //       <<nMeson<<" "<< nBaryon<<" "<< npi0<<" "<< ngamma<<" "<< nLepton<<G4endl;
 84     G4double mesonWeight = nMeson;                 84     G4double mesonWeight = nMeson;
 85     G4double baryonWeight = nBaryon;               85     G4double baryonWeight = nBaryon;
 86     G4double gammaWeight = ngamma;                 86     G4double gammaWeight = ngamma;
 87     G4double npi0Weight = npi0;                    87     G4double npi0Weight = npi0;
 88     G4double leptonWeight = nLepton;               88     G4double leptonWeight = nLepton;
 89     G4int randomMeson = static_cast<G4int>((nM     89     G4int randomMeson = static_cast<G4int>((nMeson+1)*G4UniformRand());
 90     G4int randomBaryon = static_cast<G4int>((n     90     G4int randomBaryon = static_cast<G4int>((nBaryon+1)*G4UniformRand());
 91     G4int randomGamma = static_cast<G4int>((ng     91     G4int randomGamma = static_cast<G4int>((ngamma+1)*G4UniformRand());
 92     G4int randomPi0 = static_cast<G4int>((npi0     92     G4int randomPi0 = static_cast<G4int>((npi0+1)*G4UniformRand());
 93     G4int randomLepton = static_cast<G4int>((n     93     G4int randomLepton = static_cast<G4int>((nLepton+1)*G4UniformRand());
 94                                                    94     
 95     std::vector<G4HadSecondary> buffer;            95     std::vector<G4HadSecondary> buffer;
 96     G4int cMeson(0), cBaryon(0), cpi0(0), cgam     96     G4int cMeson(0), cBaryon(0), cpi0(0), cgamma(0), cLepton(0);
 97     for(i=0; i<static_cast<G4int>(result->GetN <<  97     for(i=0; i<result->GetNumberOfSecondaries(); i++)
 98     {                                              98     {
 99       G4bool aCatch = false;                       99       G4bool aCatch = false;
100       G4double weight = 1;                        100       G4double weight = 1;
101       const G4HadSecondary* aSecTrack = result    101       const G4HadSecondary* aSecTrack = result->GetSecondary(i);
102       G4ParticleDefinition* aSecDef = aSecTrac    102       G4ParticleDefinition* aSecDef = aSecTrack->GetParticle()->GetDefinition();
103       if(i==maxE)                                 103       if(i==maxE)
104       {                                           104       {
105         aCatch = true;                            105         aCatch = true;
106   weight = 1;                                     106   weight = 1;
107       }                                           107       }
108       else if(aSecDef->GetBaryonNumber()!=0)      108       else if(aSecDef->GetBaryonNumber()!=0) 
109       {                                           109       {
110   if(++cBaryon==randomBaryon)                     110   if(++cBaryon==randomBaryon) 
111   {                                               111   {
112     aCatch = true;                                112     aCatch = true;
113     weight = baryonWeight;                        113     weight = baryonWeight;
114   }                                               114   }
115       }                                           115       }
116       else if(aSecDef->GetLeptonNumber()!=0)      116       else if(aSecDef->GetLeptonNumber()!=0) 
117       {                                           117       {
118         if(++cLepton==randomLepton)               118         if(++cLepton==randomLepton) 
119   {                                               119   {
120     aCatch = true;                                120     aCatch = true;
121     weight = leptonWeight;                        121     weight = leptonWeight;
122   }                                               122   }
123       }                                           123       }
124       else if(aSecDef==G4Gamma::Gamma())          124       else if(aSecDef==G4Gamma::Gamma())
125       {                                           125       {
126         if(++cgamma==randomGamma)                 126         if(++cgamma==randomGamma) 
127   {                                               127   {
128     aCatch = true;                                128     aCatch = true;
129     weight = gammaWeight;                         129     weight = gammaWeight;
130   }                                               130   }
131       }                                           131       }
132       else if(aSecDef==G4PionZero::PionZero())    132       else if(aSecDef==G4PionZero::PionZero())
133       {                                           133       {
134         if(++cpi0==randomPi0)                     134         if(++cpi0==randomPi0) 
135   {                                               135   {
136     aCatch = true;                                136     aCatch = true;
137     weight = npi0Weight;                          137     weight = npi0Weight;
138   }                                               138   }
139       }                                           139       }
140       else                                        140       else
141       {                                           141       {
142         if(++cMeson==randomMeson)                 142         if(++cMeson==randomMeson) 
143   {                                               143   {
144     aCatch = true;                                144     aCatch = true;
145     weight = mesonWeight;                         145     weight = mesonWeight;
146   }                                               146   }
147       }                                           147       }
148       if(aCatch)                                  148       if(aCatch)
149       {                                           149       {
150   buffer.push_back(*aSecTrack);                   150   buffer.push_back(*aSecTrack);
151   buffer.back().SetWeight(aSecTrack->GetWeight    151   buffer.back().SetWeight(aSecTrack->GetWeight()*weight);
152       }                                           152       }
153       else                                        153       else
154       {                                           154       {
155         delete aSecTrack;                         155         delete aSecTrack;
156       }                                           156       }
157     }                                             157     }
158     result->ClearSecondaries();                   158     result->ClearSecondaries();
159     // G4cerr << "pre"<<G4endl;                   159     // G4cerr << "pre"<<G4endl;
160     result->AddSecondaries(buffer);               160     result->AddSecondaries(buffer);
161      // G4cerr << "bias exit"<<G4endl;            161      // G4cerr << "bias exit"<<G4endl;
162                                                   162     
163     return result;                                163     return result;
164   }                                               164   }
165                                                   165