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.1.p3)


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