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 5.2.p1)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                    <<   3 // * DISCLAIMER                                                       *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th <<   5 // * The following disclaimer summarizes all the specific disclaimers *
  6 // * the Geant4 Collaboration.  It is provided <<   6 // * of contributors to this software. The specific disclaimers,which *
  7 // * conditions of the Geant4 Software License <<   7 // * govern, are listed with their locations in:                      *
  8 // * LICENSE and available at  http://cern.ch/ <<   8 // *   http://cern.ch/geant4/license                                  *
  9 // * include a list of copyright holders.      << 
 10 // *                                                9 // *                                                                  *
 11 // * Neither the authors of this software syst     10 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     11 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     12 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     13 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file  <<  14 // * use.                                                             *
 16 // * for the full disclaimer and the limitatio << 
 17 // *                                               15 // *                                                                  *
 18 // * This  code  implementation is the result  <<  16 // * This  code  implementation is the  intellectual property  of the *
 19 // * technical work of the GEANT4 collaboratio <<  17 // * GEANT4 collaboration.                                            *
 20 // * By using,  copying,  modifying or  distri <<  18 // * By copying,  distributing  or modifying the Program (or any work *
 21 // * any work based  on the software)  you  ag <<  19 // * based  on  the Program)  you indicate  your  acceptance of  this *
 22 // * use  in  resulting  scientific  publicati <<  20 // * statement, and all its terms.                                    *
 23 // * acceptance of all terms of the Geant4 Sof << 
 24 // *******************************************     21 // ********************************************************************
 25 //                                             << 
 26 // 20110906  M. Kelsey -- Use reference to G4H << 
 27                                                    22 
 28 #include "G4HadLeadBias.hh"                        23 #include "G4HadLeadBias.hh"
 29 #include "G4Gamma.hh"                              24 #include "G4Gamma.hh"
 30 #include "G4PionZero.hh"                           25 #include "G4PionZero.hh"
 31 #include "Randomize.hh"                            26 #include "Randomize.hh"
 32 #include "G4HadFinalState.hh"                  <<  27 #include "G4ParticleChange.hh"
 33                                                    28 
 34   G4HadFinalState * G4HadLeadBias::Bias(G4HadF <<  29   G4VParticleChange * G4HadLeadBias::Bias(G4VParticleChange * result)
 35   {                                                30   {
 36     // G4cerr << "bias enter"<<G4endl;         <<  31     G4cerr << "bias enter"<<G4endl;
 37     G4int nMeson(0), nBaryon(0), npi0(0), ngam     32     G4int nMeson(0), nBaryon(0), npi0(0), ngamma(0), nLepton(0);
 38     G4int i(0);                                    33     G4int i(0);
 39     G4int maxE = -1;                               34     G4int maxE = -1;
 40     G4double emax = 0;                             35     G4double emax = 0;
 41     if(result->GetStatusChange()==isAlive)     <<  36     G4ParticleChange * temp;
                                                   >>  37     if(result->GetStatusChange()==fAlive) 
 42     {                                              38     {
 43       emax = result->GetEnergyChange();        <<  39       temp = dynamic_cast<G4ParticleChange *>(result);
                                                   >>  40       if(temp) emax = temp->GetEnergyChange();
 44     }                                              41     }
 45     //G4cout << "max energy "<<G4endl;         <<  42     G4cout << "max energy "<<G4endl;
 46     for(i=0;i<static_cast<G4int>(result->GetNu <<  43     for(i=0;i<result->GetNumberOfSecondaries();i++)
 47     {                                              44     {
 48       if(result->GetSecondary(i)->GetParticle( <<  45       if(result->GetSecondary(i)->GetKineticEnergy()>emax)
 49       {                                            46       {
 50         maxE = i;                                  47         maxE = i;
 51   emax = result->GetSecondary(i)->GetParticle( <<  48   emax = result->GetSecondary(i)->GetKineticEnergy();
 52       }                                            49       }
 53     }                                              50     }
 54     //G4cout <<"loop1"<<G4endl;                <<  51     G4cout <<"loop1"<<G4endl;
 55     for(i=0; i<static_cast<G4int>(result->GetN <<  52     for(i=0; i<result->GetNumberOfSecondaries(); i++)
 56     {                                              53     {
 57       const G4DynamicParticle* aSecTrack = res <<  54       G4Track* aSecTrack = result->GetSecondary(i);
 58       if(i==maxE)                                  55       if(i==maxE)
 59       {                                            56       {
 60       }                                            57       }
 61       else if(aSecTrack->GetDefinition()->GetB     58       else if(aSecTrack->GetDefinition()->GetBaryonNumber()!=0) 
 62       {                                            59       {
 63         nBaryon++;                                 60         nBaryon++;
 64       }                                            61       }
 65       else if(aSecTrack->GetDefinition()->GetL     62       else if(aSecTrack->GetDefinition()->GetLeptonNumber()!=0) 
 66       {                                            63       {
 67         nLepton++;                                 64         nLepton++;
 68       }                                            65       }
 69       else if(aSecTrack->GetDefinition()==G4Ga     66       else if(aSecTrack->GetDefinition()==G4Gamma::Gamma())
 70       {                                            67       {
 71         ngamma++;                                  68         ngamma++;
 72       }                                            69       }
 73       else if(aSecTrack->GetDefinition()==G4Pi     70       else if(aSecTrack->GetDefinition()==G4PionZero::PionZero())
 74       {                                            71       {
 75         npi0++;                                    72         npi0++;
 76       }                                            73       }
 77       else                                         74       else
 78       {                                            75       {
 79         nMeson++;                                  76         nMeson++;
 80       }                                            77       }
 81     }                                              78     }
 82      //G4cout << "BiasDebug 1 = "<<result->Get <<  79      G4cout << "BiasDebug 1 = "<<result->GetNumberOfSecondaries()<<" "
 83      //       <<nMeson<<" "<< nBaryon<<" "<< n <<  80             <<nMeson<<" "<< nBaryon<<" "<< npi0<<" "<< ngamma<<" "<< nLepton<<G4endl;
 84     G4double mesonWeight = nMeson;                 81     G4double mesonWeight = nMeson;
 85     G4double baryonWeight = nBaryon;               82     G4double baryonWeight = nBaryon;
 86     G4double gammaWeight = ngamma;                 83     G4double gammaWeight = ngamma;
 87     G4double npi0Weight = npi0;                    84     G4double npi0Weight = npi0;
 88     G4double leptonWeight = nLepton;               85     G4double leptonWeight = nLepton;
 89     G4int randomMeson = static_cast<G4int>((nM     86     G4int randomMeson = static_cast<G4int>((nMeson+1)*G4UniformRand());
 90     G4int randomBaryon = static_cast<G4int>((n     87     G4int randomBaryon = static_cast<G4int>((nBaryon+1)*G4UniformRand());
 91     G4int randomGamma = static_cast<G4int>((ng     88     G4int randomGamma = static_cast<G4int>((ngamma+1)*G4UniformRand());
 92     G4int randomPi0 = static_cast<G4int>((npi0     89     G4int randomPi0 = static_cast<G4int>((npi0+1)*G4UniformRand());
 93     G4int randomLepton = static_cast<G4int>((n     90     G4int randomLepton = static_cast<G4int>((nLepton+1)*G4UniformRand());
 94                                                    91     
 95     std::vector<G4HadSecondary> buffer;        <<  92     std::vector<G4Track*> buffer;
 96     G4int cMeson(0), cBaryon(0), cpi0(0), cgam     93     G4int cMeson(0), cBaryon(0), cpi0(0), cgamma(0), cLepton(0);
 97     for(i=0; i<static_cast<G4int>(result->GetN <<  94     for(i=0; i<result->GetNumberOfSecondaries(); i++)
 98     {                                              95     {
 99       G4bool aCatch = false;                       96       G4bool aCatch = false;
100       G4double weight = 1;                         97       G4double weight = 1;
101       const G4HadSecondary* aSecTrack = result <<  98       G4Track* aSecTrack = result->GetSecondary(i);
102       G4ParticleDefinition* aSecDef = aSecTrac << 
103       if(i==maxE)                                  99       if(i==maxE)
104       {                                           100       {
105         aCatch = true;                            101         aCatch = true;
106   weight = 1;                                     102   weight = 1;
107       }                                           103       }
108       else if(aSecDef->GetBaryonNumber()!=0)   << 104       else if(aSecTrack->GetDefinition()->GetBaryonNumber()!=0) 
109       {                                           105       {
110   if(++cBaryon==randomBaryon)                     106   if(++cBaryon==randomBaryon) 
111   {                                               107   {
112     aCatch = true;                                108     aCatch = true;
113     weight = baryonWeight;                        109     weight = baryonWeight;
114   }                                               110   }
115       }                                           111       }
116       else if(aSecDef->GetLeptonNumber()!=0)   << 112       else if(aSecTrack->GetDefinition()->GetLeptonNumber()!=0) 
117       {                                           113       {
118         if(++cLepton==randomLepton)               114         if(++cLepton==randomLepton) 
119   {                                               115   {
120     aCatch = true;                                116     aCatch = true;
121     weight = leptonWeight;                        117     weight = leptonWeight;
122   }                                               118   }
123       }                                           119       }
124       else if(aSecDef==G4Gamma::Gamma())       << 120       else if(aSecTrack->GetDefinition()==G4Gamma::Gamma())
125       {                                           121       {
126         if(++cgamma==randomGamma)                 122         if(++cgamma==randomGamma) 
127   {                                               123   {
128     aCatch = true;                                124     aCatch = true;
129     weight = gammaWeight;                         125     weight = gammaWeight;
130   }                                               126   }
131       }                                           127       }
132       else if(aSecDef==G4PionZero::PionZero()) << 128       else if(aSecTrack->GetDefinition()==G4PionZero::PionZero())
133       {                                           129       {
134         if(++cpi0==randomPi0)                     130         if(++cpi0==randomPi0) 
135   {                                               131   {
136     aCatch = true;                                132     aCatch = true;
137     weight = npi0Weight;                          133     weight = npi0Weight;
138   }                                               134   }
139       }                                           135       }
140       else                                        136       else
141       {                                           137       {
142         if(++cMeson==randomMeson)                 138         if(++cMeson==randomMeson) 
143   {                                               139   {
144     aCatch = true;                                140     aCatch = true;
145     weight = mesonWeight;                         141     weight = mesonWeight;
146   }                                               142   }
147       }                                           143       }
148       if(aCatch)                                  144       if(aCatch)
149       {                                           145       {
150   buffer.push_back(*aSecTrack);                << 146   buffer.push_back(aSecTrack);
151   buffer.back().SetWeight(aSecTrack->GetWeight << 147   aSecTrack->SetWeight(aSecTrack->GetWeight()*weight);
152       }                                           148       }
153       else                                        149       else
154       {                                           150       {
155         delete aSecTrack;                         151         delete aSecTrack;
156       }                                           152       }
157     }                                             153     }
158     result->ClearSecondaries();                << 154     result->Clear();
                                                   >> 155     result->SetNumberOfSecondaries(buffer.size());
159     // G4cerr << "pre"<<G4endl;                   156     // G4cerr << "pre"<<G4endl;
160     result->AddSecondaries(buffer);            << 157     for(i=0;i<static_cast<G4int>(buffer.size());i++)
161      // G4cerr << "bias exit"<<G4endl;         << 158     {
                                                   >> 159       result->AddSecondary(buffer[i]);
                                                   >> 160     }
                                                   >> 161      G4cerr << "bias exit"<<G4endl;
162                                                   162     
163     return result;                                163     return result;
164   }                                               164   }
165                                                   165