Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/extended/hadronic/Hadr08/src/BiasingOperation.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 /examples/extended/hadronic/Hadr08/src/BiasingOperation.cc (Version 11.3.0) and /examples/extended/hadronic/Hadr08/src/BiasingOperation.cc (Version 10.7.p4)


  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 /// \file BiasingOperation.cc                      26 /// \file BiasingOperation.cc
 27 /// \brief Implementation of the BiasingOperat     27 /// \brief Implementation of the BiasingOperation class
 28 //                                                 28 //
 29 //                                                 29 //
 30                                                    30 
 31 //....oooOO0OOooo........oooOO0OOooo........oo     31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 32 //....oooOO0OOooo........oooOO0OOooo........oo     32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 33                                                    33 
 34 #include "BiasingOperation.hh"                     34 #include "BiasingOperation.hh"
 35                                                << 
 36 #include "G4BGGNucleonInelasticXS.hh"          << 
 37 #include "G4BGGPionInelasticXS.hh"             << 
 38 #include "G4BiasingProcessInterface.hh"            35 #include "G4BiasingProcessInterface.hh"
 39 #include "G4CascadeInterface.hh"               <<  36 #include "G4VParticleChange.hh"
 40 #include "G4CrossSectionDataStore.hh"          <<  37 #include "G4ProtonInelasticProcess.hh"
 41 #include "G4ExcitedStringDecay.hh"             <<  38 #include "G4NeutronInelasticProcess.hh"
 42 #include "G4FTFModel.hh"                       <<  39 #include "G4PionPlusInelasticProcess.hh"
 43 #include "G4GeneratorPrecompoundInterface.hh"  <<  40 #include "G4PionMinusInelasticProcess.hh"
 44 #include "G4HadronInelasticProcess.hh"         << 
 45 #include "G4HadronicParameters.hh"                 41 #include "G4HadronicParameters.hh"
 46 #include "G4INCLXXInterface.hh"                <<  42 #include "G4FTFModel.hh"
 47 #include "G4LundStringFragmentation.hh"            43 #include "G4LundStringFragmentation.hh"
 48 #include "G4NeutronInelasticXS.hh"             <<  44 #include "G4ExcitedStringDecay.hh"
                                                   >>  45 #include "G4GeneratorPrecompoundInterface.hh"
 49 #include "G4TheoFSGenerator.hh"                    46 #include "G4TheoFSGenerator.hh"
 50 #include "G4VParticleChange.hh"                <<  47 #include "G4HadronicInteractionRegistry.hh"
                                                   >>  48 #include "G4VPreCompoundModel.hh"
                                                   >>  49 #include "G4INCLXXInterface.hh"
                                                   >>  50 #include "G4HadronInelasticDataSet.hh"
 51                                                    51 
 52 //....oooOO0OOooo........oooOO0OOooo........oo     52 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 53                                                    53 
 54 BiasingOperation::BiasingOperation(G4String na <<  54 BiasingOperation::BiasingOperation( G4String name ) : G4VBiasingOperation( name ) {
 55 {                                              <<  55 
 56   // Create the inelastic processes for  p , n <<  56   // Create the inelastic processes for  p , n , pi+ , pi- 
 57   fProtonInelasticProcess = new G4HadronInelas <<  57   fProtonInelasticProcess    = new G4ProtonInelasticProcess;
 58   fNeutronInelasticProcess =                   <<  58   fNeutronInelasticProcess   = new G4NeutronInelasticProcess;
 59     new G4HadronInelasticProcess("neutronInela <<  59   fPionPlusInelasticProcess  = new G4PionPlusInelasticProcess;
 60   fPionPlusInelasticProcess =                  <<  60   fPionMinusInelasticProcess = new G4PionMinusInelasticProcess;
 61     new G4HadronInelasticProcess("pi+Inelastic << 
 62   fPionMinusInelasticProcess =                 << 
 63     new G4HadronInelasticProcess("pi-Inelastic << 
 64                                                    61 
 65   // Set the energy ranges                         62   // Set the energy ranges
 66   const G4double maxBERT = 41.0 * CLHEP::MeV;  <<  63   const G4double minPreco = 0.0;
 67   const G4double maxINCLXX = 12.0 * CLHEP::GeV <<  64   const G4double maxPreco = 2.0 * CLHEP::MeV;
 68   const G4double minINCLXX = 40.0 * CLHEP::MeV <<  65   const G4double maxBERT = 12.0 * CLHEP::GeV;
                                                   >>  66   const G4double minINCLXX = 1.0 * CLHEP::MeV;
 69   const G4double minFTFP = 3.0 * CLHEP::GeV;       67   const G4double minFTFP = 3.0 * CLHEP::GeV;
 70   const G4double maxFTFP = G4HadronicParameter     68   const G4double maxFTFP = G4HadronicParameters::Instance()->GetMaxEnergy();
 71                                                    69 
 72   // Create the hadronic models (to replace FT <<  70   // Create the hadronic models (to replace FTFP_BERT with "FTFP_INCLXX", 
 73   // keeping the same energy ranges for the tr     71   // keeping the same energy ranges for the transition between models).
 74   // Notice that it is better to create the mo     72   // Notice that it is better to create the models here from scratch,
 75   // instead of reusing the existing ones, bec     73   // instead of reusing the existing ones, because we might pick up the
 76   // existing ones associated to the wrong par     74   // existing ones associated to the wrong particles...
 77   // --- FTFP model ---                            75   // --- FTFP model ---
 78   G4FTFModel* theStringModel = new G4FTFModel;     76   G4FTFModel* theStringModel = new G4FTFModel;
 79   G4LundStringFragmentation* theLund = new G4L     77   G4LundStringFragmentation* theLund = new G4LundStringFragmentation;
 80   G4ExcitedStringDecay* theStringDecay = new G <<  78   G4ExcitedStringDecay* theStringDecay = new G4ExcitedStringDecay( theLund );
 81   theStringModel->SetFragmentationModel(theStr <<  79   theStringModel->SetFragmentationModel( theStringDecay );
 82   G4GeneratorPrecompoundInterface* thePrecoInt     80   G4GeneratorPrecompoundInterface* thePrecoInterface = new G4GeneratorPrecompoundInterface;
 83   G4TheoFSGenerator* theHighEnergyModel = new  <<  81   G4TheoFSGenerator* theHighEnergyModel = new G4TheoFSGenerator( "FTFP" );
 84   theHighEnergyModel->SetHighEnergyGenerator(t <<  82   theHighEnergyModel->SetHighEnergyGenerator( theStringModel );
 85   theHighEnergyModel->SetTransport(thePrecoInt <<  83   theHighEnergyModel->SetTransport( thePrecoInterface );
 86   theHighEnergyModel->SetMinEnergy(minFTFP);   <<  84   theHighEnergyModel->SetMinEnergy( minFTFP );
 87   theHighEnergyModel->SetMaxEnergy(maxFTFP);   <<  85   theHighEnergyModel->SetMaxEnergy( maxFTFP );
 88   // Bertini : create a new model to be used b <<  86   // Preco : create a new model to be used only for INCLXX for nucleons
 89   G4CascadeInterface* theBertiniModel = new G4 <<  87   G4VPreCompoundModel* thePreCompoundModel = new G4PreCompoundModel;
 90   theBertiniModel->SetMinEnergy(0.0);          <<  88   thePreCompoundModel->SetMinEnergy( minPreco );
 91   theBertiniModel->SetMaxEnergy(maxBERT);      <<  89   thePreCompoundModel->SetMaxEnergy( maxPreco );  
 92   // --- Preco ---                                 90   // --- Preco ---
 93   // --- INCLXX model ---                          91   // --- INCLXX model ---
 94   // The instance for nucleons:                    92   // The instance for nucleons:
 95   G4INCLXXInterface* theInclxxModel = new G4IN <<  93   G4INCLXXInterface* theInclxxModel = new G4INCLXXInterface( thePreCompoundModel );
 96   theInclxxModel->SetMinEnergy(minINCLXX);     <<  94   theInclxxModel->SetMinEnergy( minINCLXX );
 97   theInclxxModel->SetMaxEnergy(maxINCLXX);  // <<  95   theInclxxModel->SetMaxEnergy( maxBERT );  // Use the same as for Bertini
                                                   >>  96   // The instance for pions:
                                                   >>  97   G4INCLXXInterface* theInclxxModel_forPions = new G4INCLXXInterface;
                                                   >>  98   theInclxxModel_forPions->SetMinEnergy( minPreco );
                                                   >>  99   theInclxxModel_forPions->SetMaxEnergy( maxBERT );  // Use the same as for Bertini
 98                                                   100 
 99   // Register the models                          101   // Register the models
100   fProtonInelasticProcess->RegisterMe(theHighE << 102   fProtonInelasticProcess->RegisterMe( theHighEnergyModel );
101   fProtonInelasticProcess->RegisterMe(theInclx << 103   fProtonInelasticProcess->RegisterMe( theInclxxModel );
102   fProtonInelasticProcess->RegisterMe(theBerti << 104   fProtonInelasticProcess->RegisterMe( thePreCompoundModel );
103   fNeutronInelasticProcess->RegisterMe(theHigh << 105   fNeutronInelasticProcess->RegisterMe( theHighEnergyModel );
104   fNeutronInelasticProcess->RegisterMe(theIncl << 106   fNeutronInelasticProcess->RegisterMe( theInclxxModel );
105   fNeutronInelasticProcess->RegisterMe(theBert << 107   fNeutronInelasticProcess->RegisterMe( thePreCompoundModel );
106   fPionPlusInelasticProcess->RegisterMe(theHig << 108   fPionPlusInelasticProcess->RegisterMe( theHighEnergyModel );
107   fPionPlusInelasticProcess->RegisterMe(theInc << 109   fPionPlusInelasticProcess->RegisterMe( theInclxxModel_forPions );
108   fPionPlusInelasticProcess->RegisterMe(theBer << 110   fPionMinusInelasticProcess->RegisterMe( theHighEnergyModel );
109   fPionMinusInelasticProcess->RegisterMe(theHi << 111   fPionMinusInelasticProcess->RegisterMe( theInclxxModel_forPions );
110   fPionMinusInelasticProcess->RegisterMe(theIn << 112 
111   fPionMinusInelasticProcess->RegisterMe(theBe << 113   // Register the cross sections: this is mandatory starting from G4 10.6
112                                                << 114   // because the default Gheisha inelastic cross sections have been removed.
113   G4VCrossSectionDataSet* theProtonXSdata = ne << 115   // It is convenient to use the Gheisha inelastic cross sections here
114   theProtonXSdata->BuildPhysicsTable(*(G4Proto << 116   // because they do not require any special initialization.
115   fProtonInelasticProcess->AddDataSet(theProto << 117   fProtonInelasticProcess->AddDataSet( new G4HadronInelasticDataSet );
116   G4VCrossSectionDataSet* theNeutronXSdata = n << 118   fNeutronInelasticProcess->AddDataSet( new G4HadronInelasticDataSet );
117   theNeutronXSdata->BuildPhysicsTable(*(G4Neut << 119   fPionPlusInelasticProcess->AddDataSet( new G4HadronInelasticDataSet );
118   fNeutronInelasticProcess->AddDataSet(theNeut << 120   fPionMinusInelasticProcess->AddDataSet( new G4HadronInelasticDataSet );
119   G4VCrossSectionDataSet* thePionPlusXSdata =  << 
120   thePionPlusXSdata->BuildPhysicsTable(*(G4Pio << 
121   fPionPlusInelasticProcess->AddDataSet(thePio << 
122   G4VCrossSectionDataSet* thePionMinusXSdata = << 
123   thePionMinusXSdata->BuildPhysicsTable(*(G4Pi << 
124   fPionMinusInelasticProcess->AddDataSet(thePi << 
125 }                                                 121 }
126                                                   122 
127 //....oooOO0OOooo........oooOO0OOooo........oo    123 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
128                                                   124 
129 BiasingOperation::~BiasingOperation() {}          125 BiasingOperation::~BiasingOperation() {}
130                                                   126 
131 //....oooOO0OOooo........oooOO0OOooo........oo    127 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
132                                                   128 
133 G4VParticleChange* BiasingOperation::ApplyFina << 129 G4VParticleChange* BiasingOperation::
134                                                << 130 ApplyFinalStateBiasing( const G4BiasingProcessInterface* , 
135                                                << 131                         const G4Track* track, const G4Step* step, G4bool& ) {
136 {                                              << 132   if ( track->GetParticleDefinition() == G4Proton::Definition() ) {
137   if (track->GetParticleDefinition() == G4Prot << 133     return fProtonInelasticProcess->PostStepDoIt( *track, *step );
138     auto particle = track->GetDynamicParticle( << 134   } else if ( track->GetParticleDefinition() == G4Neutron::Definition() ) {
139     auto material = track->GetMaterial();      << 135     return fNeutronInelasticProcess->PostStepDoIt( *track, *step );
140     fProtonInelasticProcess->GetCrossSectionDa << 136   } else if ( track->GetParticleDefinition() == G4PionPlus::Definition() ) {
141     return fProtonInelasticProcess->PostStepDo << 137     return fPionPlusInelasticProcess->PostStepDoIt( *track, *step );
142   }                                            << 138   } else if ( track->GetParticleDefinition() == G4PionMinus::Definition() ) {
143   else if (track->GetParticleDefinition() == G << 139     return fPionMinusInelasticProcess->PostStepDoIt( *track, *step );
144     auto particle = track->GetDynamicParticle( << 140   } else {
145     auto material = track->GetMaterial();      << 
146     fNeutronInelasticProcess->GetCrossSectionD << 
147     return fNeutronInelasticProcess->PostStepD << 
148   }                                            << 
149   else if (track->GetParticleDefinition() == G << 
150     auto particle = track->GetDynamicParticle( << 
151     auto material = track->GetMaterial();      << 
152     fPionPlusInelasticProcess->GetCrossSection << 
153     return fPionPlusInelasticProcess->PostStep << 
154   }                                            << 
155   else if (track->GetParticleDefinition() == G << 
156     auto particle = track->GetDynamicParticle( << 
157     auto material = track->GetMaterial();      << 
158     fPionMinusInelasticProcess->GetCrossSectio << 
159     return fPionMinusInelasticProcess->PostSte << 
160   }                                            << 
161   else {                                       << 
162     G4cerr << "ERROR in BiasingOperation::Appl    141     G4cerr << "ERROR in BiasingOperation::ApplyFinalStateBiasing : unexpected particle = "
163            << track->GetParticleDefinition()->    142            << track->GetParticleDefinition()->GetParticleName() << G4endl;
164     return 0;                                     143     return 0;
165   }                                               144   }
166 }                                                 145 }
167                                                   146 
168 //....oooOO0OOooo........oooOO0OOooo........oo    147 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
169                                                   148