Import Geant4 9.4.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 16:25:56 +02:00
parent 74cad5e589
commit 89a9605df1
4440 changed files with 379508 additions and 189225 deletions
@@ -0,0 +1,80 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4BertiniPionBuilder.cc,v 1.1 2010/11/19 16:21:40 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4BertiniPionBuilder
//
// Author: 2010 G.Folger
// devired from G4BertiniPiKBuilder
//
// Modified:
// 02.04.2009 V.Ivanchenko remove add cross section, string builderis reponsible
//
//----------------------------------------------------------------------------
//
#include "G4BertiniPionBuilder.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
G4BertiniPionBuilder::
G4BertiniPionBuilder()
{
thePiData = new G4PiNuclearCrossSection;
theMin = 0*GeV;
theMax = 9.9*GeV;
theModel = new G4CascadeInterface;
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
}
G4BertiniPionBuilder::~G4BertiniPionBuilder()
{
}
void G4BertiniPionBuilder::
Build(G4PionPlusInelasticProcess * aP)
{
aP->RegisterMe(theModel);
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
}
void G4BertiniPionBuilder::
Build(G4PionMinusInelasticProcess * aP)
{
aP->RegisterMe(theModel);
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
}
void G4BertiniPionBuilder::
Build(G4HadronElasticProcess * ) {}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ChargeExchangePhysics.cc,v 1.1 2008/11/20 12:38:11 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4ChargeExchangePhysics.cc,v 1.2 2010/06/03 14:37:24 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -58,6 +58,14 @@ G4ChargeExchangePhysics::G4ChargeExchangePhysics(G4int ver, G4bool glauber)
model = 0;
}
G4ChargeExchangePhysics::G4ChargeExchangePhysics(G4int ver)
: G4VPhysicsConstructor("chargeExchange"), verbose(ver), glFlag(false),
wasActivated(false)
{
if(verbose > 1) G4cout << "### ChargeExchangePhysics" << G4endl;
model = 0;
}
G4ChargeExchangePhysics::~G4ChargeExchangePhysics()
{
delete model;
@@ -0,0 +1,82 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// Author: 2010 G.Folger
// devired from G4LEPPiKBuilder
//
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4ChipsKaonBuilder.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4MesonConstructor.hh"
#include "G4ProcessManager.hh"
G4ChipsKaonBuilder::G4ChipsKaonBuilder(G4int ver)
: verb(ver)
{
theInelastic = new G4QInelastic();
}
G4ChipsKaonBuilder::
~G4ChipsKaonBuilder()
{
delete theInelastic;
}
void G4ChipsKaonBuilder::Build()
{
static G4bool onceOnly(true);
if ( onceOnly )
{
if (verb > 0 )
{G4cout << "Info - G4ChipsKaonBuilder::Build() not adding elastic" <<
G4endl;}
attachProcess(G4KaonPlus::KaonPlus());
attachProcess(G4KaonMinus::KaonMinus());
attachProcess(G4KaonZeroShort::KaonZeroShort());
attachProcess(G4KaonZeroLong::KaonZeroLong());
onceOnly=false;
}
}
void G4ChipsKaonBuilder::attachProcess(G4ParticleDefinition * pDef)
{
if ( verb > 0 ) {
G4cout << " Using G4Qinelastic for " << pDef->GetParticleName()
<< G4endl;
}
G4ProcessManager* pMan = pDef->GetProcessManager();
pMan->AddDiscreteProcess(theInelastic);
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4DecayPhysics.cc,v 1.1 2006/10/31 11:35:02 gunter Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4DecayPhysics.cc,v 1.2 2010/06/03 14:37:24 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -54,6 +54,10 @@
#include "G4ShortLivedConstructor.hh"
G4DecayPhysics::G4DecayPhysics(G4int ver)
: G4VPhysicsConstructor("Decay"), verbose(ver), wasActivated(false)
{}
G4DecayPhysics::G4DecayPhysics(const G4String& name, G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
{}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmDNAPhysics.cc,v 1.2 2009/11/01 13:21:13 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4EmDNAPhysics.cc,v 1.8 2010/11/25 07:44:55 sincerti Exp $
// GEANT4 tag $Name: geant4-09-04 $
#include "G4EmDNAPhysics.hh"
@@ -38,19 +38,11 @@
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAExcitation.hh"
#include "G4DNAEmfietzoglouExcitationModel.hh"
#include "G4DNAMillerGreenExcitationModel.hh"
#include "G4DNABornExcitationModel.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNAIonisation.hh"
#include "G4DNABornIonisationModel.hh"
#include "G4DNARuddIonisationModel.hh"
#include "G4DNAChargeDecrease.hh"
#include "G4DNADingfelderChargeDecreaseModel.hh"
#include "G4DNAChargeIncrease.hh"
#include "G4DNADingfelderChargeIncreaseModel.hh"
// particles
@@ -61,6 +53,7 @@
// e+
#include "G4Positron.hh"
#include "G4eMultipleScattering.hh"
#include "G4GoudsmitSaundersonMscModel.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
@@ -78,9 +71,14 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics::G4EmDNAPhysics(
G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
G4EmDNAPhysics::G4EmDNAPhysics(G4int ver)
: G4VPhysicsConstructor("G4EmDNAPhysics"), verbose(ver)
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics::G4EmDNAPhysics(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmDNAPhysics"), verbose(ver)
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -131,10 +129,10 @@ void G4EmDNAPhysics::ConstructProcess()
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic();
theDNAElasticProcess->SetModel(new G4DNAScreenedRutherfordElasticModel());
// theDNAElasticProcess->SetModel(new G4DNAChampionElasticModel());
// or alternative model
// theDNAElasticProcess->SetModel(new G4DNAChampionElasticModel());
theDNAElasticProcess->SetModel(new G4DNAScreenedRutherfordElasticModel());
pmanager->AddDiscreteProcess(theDNAElasticProcess);
@@ -144,6 +142,12 @@ void G4EmDNAPhysics::ConstructProcess()
// *** Ionisation ***
pmanager->AddDiscreteProcess(new G4DNAIonisation());
// *** Vibrational excitation ***
pmanager->AddDiscreteProcess(new G4DNAVibExcitation());
// *** Attachment ***
pmanager->AddDiscreteProcess(new G4DNAAttachment());
} else if ( particleName == "proton" ) {
pmanager->AddDiscreteProcess(new G4DNAExcitation());
@@ -151,6 +155,7 @@ void G4EmDNAPhysics::ConstructProcess()
pmanager->AddDiscreteProcess(new G4DNAChargeDecrease());
} else if ( particleName == "hydrogen" ) {
pmanager->AddDiscreteProcess(new G4DNAExcitation());
pmanager->AddDiscreteProcess(new G4DNAIonisation());
pmanager->AddDiscreteProcess(new G4DNAChargeIncrease());
@@ -184,6 +189,7 @@ void G4EmDNAPhysics::ConstructProcess()
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->SetStepLimitType(fUseDistanceToBoundary);
msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
pmanager->AddProcess(msc, -1, 1, 1);
G4eIonisation* eIoni = new G4eIonisation();
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmExtraPhysics.cc,v 1.3 2008/01/08 10:36:32 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4EmExtraPhysics.cc,v 1.4 2010/06/02 17:21:29 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -52,11 +52,20 @@
#include "G4MuonMinus.hh"
#include "G4ProcessManager.hh"
G4EmExtraPhysics::G4EmExtraPhysics(const G4String& name):
G4VPhysicsConstructor(name), wasBuilt(false), gnActivated(false), munActivated(false),
synActivated(false), synchOn(false), gammNucOn(true), muNucOn(false),
theElectronSynch(0), thePositronSynch(0), theGNPhysics(0), theMuNuc1(0),
theMuNuc2(0)
G4EmExtraPhysics::G4EmExtraPhysics(G4int ver):
G4VPhysicsConstructor("G4GammaLeptoNuclearPhys"), wasBuilt(false), gnActivated(false),
munActivated(false), synActivated(false), synchOn(false), gammNucOn(true), muNucOn(false),
theElectronSynch(0), thePositronSynch(0), theGNPhysics(0), theMuNuc1(0), theMuNuc2(0),
verbose(ver)
{
theMessenger = new G4EmMessenger(this);
}
G4EmExtraPhysics::G4EmExtraPhysics(const G4String&):
G4VPhysicsConstructor("G4GammaLeptoNuclearPhys"), wasBuilt(false), gnActivated(false),
munActivated(false), synActivated(false), synchOn(false), gammNucOn(true), muNucOn(false),
theElectronSynch(0), thePositronSynch(0), theGNPhysics(0), theMuNuc1(0), theMuNuc2(0),
verbose(1)
{
theMessenger = new G4EmMessenger(this);
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmLivermorePhysics.cc,v 1.7 2009/11/24 12:53:22 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4EmLivermorePhysics.cc,v 1.12 2010/10/10 15:18:34 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
#include "G4EmLivermorePhysics.hh"
@@ -79,12 +79,14 @@
#include "G4hIonisation.hh"
#include "G4ionIonisation.hh"
#include "G4alphaIonisation.hh"
#include "G4IonParametrisedLossModel.hh"
#include "G4NuclearStopping.hh"
// msc models
#include "G4UrbanMscModel93.hh"
#include "G4WentzelVIModel.hh"
#include "G4GoudsmitSaundersonMscModel.hh"
#include "G4CoulombScattering.hh"
//
@@ -113,9 +115,16 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmLivermorePhysics::G4EmLivermorePhysics(
G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
G4EmLivermorePhysics::G4EmLivermorePhysics(G4int ver)
: G4VPhysicsConstructor("G4EmLivermorePhysics"), verbose(ver)
{
G4LossTableManager::Instance();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmLivermorePhysics::G4EmLivermorePhysics(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmLivermorePhysics"), verbose(ver)
{
G4LossTableManager::Instance();
}
@@ -210,7 +219,8 @@ void G4EmLivermorePhysics::ConstructProcess()
} else if (particleName == "e-") {
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc, -1, 1, 1);
@@ -218,7 +228,7 @@ void G4EmLivermorePhysics::ConstructProcess()
G4eIonisation* eIoni = new G4eIonisation();
G4LivermoreIonisationModel* theIoniLivermore = new
G4LivermoreIonisationModel();
theIoniLivermore->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theIoniLivermore->SetHighEnergyLimit(1*MeV);
eIoni->AddEmModel(0, theIoniLivermore, new G4UniversalFluctuation() );
eIoni->SetStepFunction(0.2, 100*um); //
pmanager->AddProcess(eIoni, -1, 2, 2);
@@ -236,7 +246,8 @@ void G4EmLivermorePhysics::ConstructProcess()
// Identical to G4EmStandardPhysics_option3
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc, -1, 1, 1);
@@ -309,6 +320,9 @@ void G4EmLivermorePhysics::ConstructProcess()
particleName == "D-" ||
particleName == "Ds+" ||
particleName == "Ds-" ||
particleName == "anti_He3" ||
particleName == "anti_alpha" ||
particleName == "anti_deuteron" ||
particleName == "anti_lambda_c+" ||
particleName == "anti_omega-" ||
particleName == "anti_proton" ||
@@ -316,6 +330,7 @@ void G4EmLivermorePhysics::ConstructProcess()
particleName == "anti_sigma_c++" ||
particleName == "anti_sigma+" ||
particleName == "anti_sigma-" ||
particleName == "anti_triton" ||
particleName == "anti_xi_c+" ||
particleName == "anti_xi-" ||
particleName == "deuteron" ||
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmLivermorePolarizedPhysics.cc,v 1.6 2009/11/24 12:53:22 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4EmLivermorePolarizedPhysics.cc,v 1.12 2010/11/10 17:33:02 flongo Exp $
// GEANT4 tag $Name: geant4-09-04 $
#include "G4EmLivermorePolarizedPhysics.hh"
@@ -36,13 +36,13 @@
// gamma
#include "G4PhotoElectricEffect.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4LivermorePolarizedPhotoElectricModel.hh"
#include "G4ComptonScattering.hh"
#include "G4LivermorePolarizedComptonModel.hh"
#include "G4GammaConversion.hh"
#include "G4LivermoreGammaConversionModel.hh"
#include "G4LivermorePolarizedGammaConversionModel.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermorePolarizedRayleighModel.hh"
@@ -79,12 +79,14 @@
#include "G4hIonisation.hh"
#include "G4ionIonisation.hh"
#include "G4alphaIonisation.hh"
#include "G4IonParametrisedLossModel.hh"
#include "G4NuclearStopping.hh"
// msc models
#include "G4UrbanMscModel93.hh"
#include "G4WentzelVIModel.hh"
#include "G4GoudsmitSaundersonMscModel.hh"
#include "G4CoulombScattering.hh"
//
@@ -113,9 +115,16 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmLivermorePolarizedPhysics::G4EmLivermorePolarizedPhysics(
G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
G4EmLivermorePolarizedPhysics::G4EmLivermorePolarizedPhysics(G4int ver)
: G4VPhysicsConstructor("G4EmLivermorePolarizedPhysics"), verbose(ver)
{
G4LossTableManager::Instance();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmLivermorePolarizedPhysics::G4EmLivermorePolarizedPhysics(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmLivermorePolarizedPhysics"), verbose(ver)
{
G4LossTableManager::Instance();
}
@@ -181,7 +190,7 @@ void G4EmLivermorePolarizedPhysics::ConstructProcess()
if (particleName == "gamma") {
G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel = new G4LivermorePhotoElectricModel();
G4LivermorePolarizedPhotoElectricModel* theLivermorePhotoElectricModel = new G4LivermorePolarizedPhotoElectricModel();
theLivermorePhotoElectricModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
pmanager->AddDiscreteProcess(thePhotoElectricEffect);
@@ -193,7 +202,7 @@ void G4EmLivermorePolarizedPhysics::ConstructProcess()
pmanager->AddDiscreteProcess(theComptonScattering);
G4GammaConversion* theGammaConversion = new G4GammaConversion();
G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel = new G4LivermoreGammaConversionModel();
G4LivermorePolarizedGammaConversionModel* theLivermoreGammaConversionModel = new G4LivermorePolarizedGammaConversionModel();
theLivermoreGammaConversionModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
pmanager->AddDiscreteProcess(theGammaConversion);
@@ -207,7 +216,8 @@ void G4EmLivermorePolarizedPhysics::ConstructProcess()
} else if (particleName == "e-") {
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc, -1, 1, 1);
@@ -215,7 +225,7 @@ void G4EmLivermorePolarizedPhysics::ConstructProcess()
G4eIonisation* eIoni = new G4eIonisation();
G4LivermoreIonisationModel* theIoniLivermore = new
G4LivermoreIonisationModel();
theIoniLivermore->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theIoniLivermore->SetHighEnergyLimit(1*MeV);
eIoni->AddEmModel(0, theIoniLivermore, new G4UniversalFluctuation() );
eIoni->SetStepFunction(0.2, 100*um); //
pmanager->AddProcess(eIoni, -1, 2, 2);
@@ -233,7 +243,8 @@ void G4EmLivermorePolarizedPhysics::ConstructProcess()
// Identical to G4EmStandardPhysics_option3
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc, -1, 1, 1);
@@ -306,6 +317,9 @@ void G4EmLivermorePolarizedPhysics::ConstructProcess()
particleName == "D-" ||
particleName == "Ds+" ||
particleName == "Ds-" ||
particleName == "anti_He3" ||
particleName == "anti_alpha" ||
particleName == "anti_deuteron" ||
particleName == "anti_lambda_c+" ||
particleName == "anti_omega-" ||
particleName == "anti_proton" ||
@@ -313,6 +327,7 @@ void G4EmLivermorePolarizedPhysics::ConstructProcess()
particleName == "anti_sigma_c++" ||
particleName == "anti_sigma+" ||
particleName == "anti_sigma-" ||
particleName == "anti_triton" ||
particleName == "anti_xi_c+" ||
particleName == "anti_xi-" ||
particleName == "deuteron" ||
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmPenelopePhysics.cc,v 1.7 2009/11/24 12:53:22 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4EmPenelopePhysics.cc,v 1.12 2010/10/10 15:18:34 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
#include "G4EmPenelopePhysics.hh"
@@ -80,12 +80,14 @@
#include "G4hIonisation.hh"
#include "G4ionIonisation.hh"
#include "G4alphaIonisation.hh"
#include "G4IonParametrisedLossModel.hh"
#include "G4NuclearStopping.hh"
// msc models
#include "G4UrbanMscModel93.hh"
#include "G4WentzelVIModel.hh"
#include "G4GoudsmitSaundersonMscModel.hh"
#include "G4CoulombScattering.hh"
//
@@ -114,9 +116,16 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmPenelopePhysics::G4EmPenelopePhysics(
G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
G4EmPenelopePhysics::G4EmPenelopePhysics(G4int ver)
: G4VPhysicsConstructor("G4EmPenelopePhysics"), verbose(ver)
{
G4LossTableManager::Instance();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmPenelopePhysics::G4EmPenelopePhysics(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmPenelopePhysics"), verbose(ver)
{
G4LossTableManager::Instance();
}
@@ -215,7 +224,8 @@ void G4EmPenelopePhysics::ConstructProcess()
} else if (particleName == "e-") {
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc, -1, 1, 1);
@@ -239,7 +249,8 @@ void G4EmPenelopePhysics::ConstructProcess()
} else if (particleName == "e+") {
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc, -1, 1, 1);
@@ -330,6 +341,9 @@ void G4EmPenelopePhysics::ConstructProcess()
particleName == "D-" ||
particleName == "Ds+" ||
particleName == "Ds-" ||
particleName == "anti_He3" ||
particleName == "anti_alpha" ||
particleName == "anti_deuteron" ||
particleName == "anti_lambda_c+" ||
particleName == "anti_omega-" ||
particleName == "anti_proton" ||
@@ -337,6 +351,7 @@ void G4EmPenelopePhysics::ConstructProcess()
particleName == "anti_sigma_c++" ||
particleName == "anti_sigma+" ||
particleName == "anti_sigma-" ||
particleName == "anti_triton" ||
particleName == "anti_xi_c+" ||
particleName == "anti_xi-" ||
particleName == "deuteron" ||
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics.cc,v 1.20 2009/10/30 18:36:15 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4EmStandardPhysics.cc,v 1.24 2010/10/10 15:18:34 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -56,6 +56,8 @@
#include "G4eMultipleScattering.hh"
#include "G4MuMultipleScattering.hh"
#include "G4hMultipleScattering.hh"
#include "G4CoulombScattering.hh"
#include "G4WentzelVIModel.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
@@ -69,6 +71,7 @@
#include "G4hIonisation.hh"
#include "G4ionIonisation.hh"
#include "G4alphaIonisation.hh"
#include "G4Gamma.hh"
#include "G4Electron.hh"
@@ -89,8 +92,16 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysics::G4EmStandardPhysics(G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
G4EmStandardPhysics::G4EmStandardPhysics(G4int ver)
: G4VPhysicsConstructor("G4EmStandard"), verbose(ver)
{
G4LossTableManager::Instance();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysics::G4EmStandardPhysics(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmStandard"), verbose(ver)
{
G4LossTableManager::Instance();
}
@@ -168,10 +179,13 @@ void G4EmStandardPhysics::ConstructProcess()
} else if (particleName == "mu+" ||
particleName == "mu-" ) {
pmanager->AddProcess(new G4MuMultipleScattering,-1, 1, 1);
pmanager->AddProcess(new G4MuIonisation, -1, 2, 2);
pmanager->AddProcess(new G4MuBremsstrahlung, -1,-3, 3);
pmanager->AddProcess(new G4MuPairProduction, -1,-4, 4);
G4MuMultipleScattering* msc = new G4MuMultipleScattering();
msc->AddEmModel(0, new G4WentzelVIModel());
pmanager->AddProcess(msc, -1, 1, 1);
pmanager->AddProcess(new G4MuIonisation, -1, 2, 2);
pmanager->AddProcess(new G4MuBremsstrahlung, -1,-3, 3);
pmanager->AddProcess(new G4MuPairProduction, -1,-4, 4);
pmanager->AddDiscreteProcess(new G4CoulombScattering());
} else if (particleName == "alpha" ||
particleName == "He3") {
@@ -201,6 +215,9 @@ void G4EmStandardPhysics::ConstructProcess()
particleName == "D-" ||
particleName == "Ds+" ||
particleName == "Ds-" ||
particleName == "anti_He3" ||
particleName == "anti_alpha" ||
particleName == "anti_deuteron" ||
particleName == "anti_lambda_c+" ||
particleName == "anti_omega-" ||
particleName == "anti_proton" ||
@@ -208,6 +225,7 @@ void G4EmStandardPhysics::ConstructProcess()
particleName == "anti_sigma_c++" ||
particleName == "anti_sigma+" ||
particleName == "anti_sigma-" ||
particleName == "anti_triton" ||
particleName == "anti_xi_c+" ||
particleName == "anti_xi-" ||
particleName == "deuteron" ||
@@ -229,6 +247,7 @@ void G4EmStandardPhysics::ConstructProcess()
}
G4EmProcessOptions opt;
opt.SetVerbose(verbose);
opt.SetPolarAngleLimit(0.2);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics_option1.cc,v 1.15 2009/10/30 18:36:15 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4EmStandardPhysics_option1.cc,v 1.21 2010/11/20 21:07:26 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -41,6 +41,8 @@
// 13.02.2007 V.Ivanchenko set skin=0.0
// 15.05.2007 V.Ivanchenko rename to _option1
// 21.04.2008 V.Ivanchenko add long-lived D and B mesons
// 19.11.2010 V.Ivanchenko added WentzelVI model for muons;
// disable ApplyCut option for compatibility with 9.2
//
//----------------------------------------------------------------------------
//
@@ -58,7 +60,8 @@
#include "G4eMultipleScattering.hh"
#include "G4MuMultipleScattering.hh"
#include "G4hMultipleScattering.hh"
#include "G4MscStepLimitType.hh"
#include "G4CoulombScattering.hh"
#include "G4WentzelVIModel.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
@@ -72,6 +75,7 @@
#include "G4hIonisation.hh"
#include "G4ionIonisation.hh"
#include "G4alphaIonisation.hh"
#include "G4Gamma.hh"
#include "G4Electron.hh"
@@ -92,9 +96,16 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysics_option1::G4EmStandardPhysics_option1(
G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
G4EmStandardPhysics_option1::G4EmStandardPhysics_option1(G4int ver)
: G4VPhysicsConstructor("G4EmStandard_opt1"), verbose(ver)
{
G4LossTableManager::Instance();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysics_option1::G4EmStandardPhysics_option1(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmStandard_opt1"), verbose(ver)
{
G4LossTableManager::Instance();
}
@@ -180,10 +191,13 @@ void G4EmStandardPhysics_option1::ConstructProcess()
} else if (particleName == "mu+" ||
particleName == "mu-" ) {
pmanager->AddProcess(new G4MuMultipleScattering,-1, 1, 1);
pmanager->AddProcess(new G4MuIonisation, -1, 2, 2);
pmanager->AddProcess(new G4MuBremsstrahlung, -1,-3, 3);
pmanager->AddProcess(new G4MuPairProduction, -1,-4, 4);
G4MuMultipleScattering* msc = new G4MuMultipleScattering();
msc->AddEmModel(0, new G4WentzelVIModel());
pmanager->AddProcess(msc, -1, 1, 1);
pmanager->AddProcess(new G4MuIonisation, -1, 2, 2);
pmanager->AddProcess(new G4MuBremsstrahlung, -1,-3, 3);
pmanager->AddProcess(new G4MuPairProduction, -1,-4, 4);
pmanager->AddDiscreteProcess(new G4CoulombScattering());
} else if (particleName == "alpha" ||
particleName == "He3") {
@@ -213,6 +227,9 @@ void G4EmStandardPhysics_option1::ConstructProcess()
particleName == "D-" ||
particleName == "Ds+" ||
particleName == "Ds-" ||
particleName == "anti_He3" ||
particleName == "anti_alpha" ||
particleName == "anti_deuteron" ||
particleName == "anti_lambda_c+" ||
particleName == "anti_omega-" ||
particleName == "anti_proton" ||
@@ -220,6 +237,7 @@ void G4EmStandardPhysics_option1::ConstructProcess()
particleName == "anti_sigma_c++" ||
particleName == "anti_sigma+" ||
particleName == "anti_sigma-" ||
particleName == "anti_triton" ||
particleName == "anti_xi_c+" ||
particleName == "anti_xi-" ||
particleName == "deuteron" ||
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics_option2.cc,v 1.20 2009/11/24 12:53:22 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4EmStandardPhysics_option2.cc,v 1.29 2010/11/21 15:47:03 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -56,6 +56,8 @@
#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4PEEffectFluoModel.hh"
#include "G4KleinNishinaModel.hh"
#include "G4eMultipleScattering.hh"
#include "G4hMultipleScattering.hh"
@@ -67,7 +69,10 @@
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eBremsstrahlungModel.hh"
#include "G4eplusAnnihilation.hh"
#include "G4Generator2BS.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4MuIonisation.hh"
#include "G4MuBremsstrahlung.hh"
@@ -77,6 +82,7 @@
#include "G4hIonisation.hh"
#include "G4ionIonisation.hh"
#include "G4alphaIonisation.hh"
//#include "G4IonParametrisedLossModel.hh"
#include "G4Gamma.hh"
@@ -98,9 +104,16 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysics_option2::G4EmStandardPhysics_option2(
G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
G4EmStandardPhysics_option2::G4EmStandardPhysics_option2(G4int ver)
: G4VPhysicsConstructor("G4EmStandard_opt2"), verbose(ver)
{
G4LossTableManager::Instance();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysics_option2::G4EmStandardPhysics_option2(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmStandard_opt2"), verbose(ver)
{
G4LossTableManager::Instance();
}
@@ -158,28 +171,46 @@ void G4EmStandardPhysics_option2::ConstructProcess()
if (particleName == "gamma") {
pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
pmanager->AddDiscreteProcess(new G4ComptonScattering);
G4PhotoElectricEffect* pe = new G4PhotoElectricEffect;
pe->SetModel(new G4PEEffectFluoModel());
G4ComptonScattering* cs = new G4ComptonScattering;
cs->SetModel(new G4KleinNishinaModel());
pmanager->AddDiscreteProcess(pe);
pmanager->AddDiscreteProcess(cs);
pmanager->AddDiscreteProcess(new G4GammaConversion);
} else if (particleName == "e-") {
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4WentzelVIModel());
//msc->SetRangeFactor(0.04);
//msc->AddEmModel(0, new G4UrbanMscModel93());
// msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
pmanager->AddProcess(msc, -1, 1, 1);
G4eBremsstrahlung* brem = new G4eBremsstrahlung();
G4eBremsstrahlungModel* br = new G4eBremsstrahlungModel();
br->SetAngularDistribution(new G4Generator2BS());
brem->SetEmModel(br);
pmanager->AddProcess(msc, -1, 1, 1);
pmanager->AddProcess(new G4eIonisation, -1, 2, 2);
pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3);
pmanager->AddProcess(brem, -1, 3, 3);
//pmanager->AddDiscreteProcess(new G4CoulombScattering());
} else if (particleName == "e+") {
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4WentzelVIModel());
//msc->SetRangeFactor(0.04);
// msc->AddEmModel(0, new G4GoudsmitSaundersonMscModel());
pmanager->AddProcess(msc, -1, 1, 1);
G4eBremsstrahlung* brem = new G4eBremsstrahlung();
G4eBremsstrahlungModel* br = new G4eBremsstrahlungModel();
br->SetAngularDistribution(new G4Generator2BS());
brem->SetEmModel(br);
pmanager->AddProcess(msc, -1, 1, 1);
pmanager->AddProcess(new G4eIonisation, -1, 2, 2);
pmanager->AddProcess(new G4eBremsstrahlung, -1,-3, 3);
pmanager->AddProcess(brem, -1, 3, 3);
pmanager->AddProcess(new G4eplusAnnihilation, 0,-1, 4);
//pmanager->AddDiscreteProcess(new G4CoulombScattering());
} else if (particleName == "mu+" ||
particleName == "mu-" ) {
@@ -213,7 +244,9 @@ void G4EmStandardPhysics_option2::ConstructProcess()
particleName == "kaon-" ||
particleName == "proton" ) {
pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1);
G4hMultipleScattering* msc = new G4hMultipleScattering();
msc->AddEmModel(0, new G4WentzelVIModel());
pmanager->AddProcess(msc, -1, 1, 1);
pmanager->AddProcess(new G4hIonisation, -1, 2, 2);
pmanager->AddProcess(new G4hBremsstrahlung, -1,-3, 3);
pmanager->AddProcess(new G4hPairProduction, -1,-4, 4);
@@ -224,6 +257,9 @@ void G4EmStandardPhysics_option2::ConstructProcess()
particleName == "D-" ||
particleName == "Ds+" ||
particleName == "Ds-" ||
particleName == "anti_He3" ||
particleName == "anti_alpha" ||
particleName == "anti_deuteron" ||
particleName == "anti_lambda_c+" ||
particleName == "anti_omega-" ||
particleName == "anti_proton" ||
@@ -231,6 +267,7 @@ void G4EmStandardPhysics_option2::ConstructProcess()
particleName == "anti_sigma_c++" ||
particleName == "anti_sigma+" ||
particleName == "anti_sigma-" ||
particleName == "anti_triton" ||
particleName == "anti_xi_c+" ||
particleName == "anti_xi-" ||
particleName == "deuteron" ||
@@ -257,18 +294,19 @@ void G4EmStandardPhysics_option2::ConstructProcess()
opt.SetVerbose(verbose);
opt.SetApplyCuts(true);
// Physics tables
// Scattering options
//
//opt.SetMinEnergy(0.1*keV);
// opt.SetMaxEnergy(10*TeV);
//opt.SetDEDXBinning(77);
//opt.SetLambdaBinning(77);
//opt.SetSplineFlag(true);
opt.SetPolarAngleLimit(0.2);
// Ionization
//
//opt.SetSubCutoff(true);
// Deexcitation
//
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics_option3.cc,v 1.18 2009/11/24 12:53:22 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4EmStandardPhysics_option3.cc,v 1.24 2010/11/21 15:47:03 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -50,6 +50,8 @@
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4RayleighScattering.hh"
#include "G4PEEffectFluoModel.hh"
#include "G4KleinNishinaModel.hh"
#include "G4eMultipleScattering.hh"
#include "G4MuMultipleScattering.hh"
@@ -62,6 +64,7 @@
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4MuIonisation.hh"
#include "G4MuBremsstrahlung.hh"
@@ -93,9 +96,16 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(
G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(G4int ver)
: G4VPhysicsConstructor("G4EmStandard_opt3"), verbose(ver)
{
G4LossTableManager::Instance();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmStandard_opt3"), verbose(ver)
{
G4LossTableManager::Instance();
}
@@ -153,15 +163,19 @@ void G4EmStandardPhysics_option3::ConstructProcess()
if (particleName == "gamma") {
pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
pmanager->AddDiscreteProcess(new G4ComptonScattering);
G4PhotoElectricEffect* pe = new G4PhotoElectricEffect;
pe->SetModel(new G4PEEffectFluoModel());
G4ComptonScattering* cs = new G4ComptonScattering;
cs->SetModel(new G4KleinNishinaModel());
pmanager->AddDiscreteProcess(pe);
pmanager->AddDiscreteProcess(cs);
pmanager->AddDiscreteProcess(new G4GammaConversion);
pmanager->AddDiscreteProcess(new G4RayleighScattering);
//pmanager->AddDiscreteProcess(new G4RayleighScattering);
} else if (particleName == "e-") {
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc, -1, 1, 1);
G4eIonisation* eIoni = new G4eIonisation();
@@ -172,7 +186,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
} else if (particleName == "e+") {
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->AddEmModel(0, new G4UrbanMscModel93());
//msc->AddEmModel(0, new G4UrbanMscModel93());
msc->SetStepLimitType(fUseDistanceToBoundary);
pmanager->AddProcess(msc, -1, 1, 1);
G4eIonisation* eIoni = new G4eIonisation();
@@ -231,6 +245,9 @@ void G4EmStandardPhysics_option3::ConstructProcess()
particleName == "D-" ||
particleName == "Ds+" ||
particleName == "Ds-" ||
particleName == "anti_He3" ||
particleName == "anti_alpha" ||
particleName == "anti_deuteron" ||
particleName == "anti_lambda_c+" ||
particleName == "anti_omega-" ||
particleName == "anti_proton" ||
@@ -238,6 +255,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
particleName == "anti_sigma_c++" ||
particleName == "anti_sigma+" ||
particleName == "anti_sigma-" ||
particleName == "anti_triton" ||
particleName == "anti_xi_c+" ||
particleName == "anti_xi-" ||
particleName == "deuteron" ||
@@ -265,8 +283,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
// Multiple Coulomb scattering
//
//opt.SetMscStepLimitation(fUseDistanceToBoundary);
//opt.SetMscRangeFactor(0.02);
opt.SetPolarAngleLimit(0.2);
// Physics tables
//
@@ -274,12 +291,15 @@ void G4EmStandardPhysics_option3::ConstructProcess()
opt.SetMaxEnergy(10*TeV);
opt.SetDEDXBinning(220);
opt.SetLambdaBinning(220);
//opt.SetSplineFlag(true);
opt.SetPolarAngleLimit(0.2);
// Ionization
//
//opt.SetSubCutoff(true);
// Deexcitation
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4FTFBinaryNeutronBuilder.cc,v 1.4 2009/03/31 18:38:33 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFBinaryNeutronBuilder.cc,v 1.5 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2008 G.Folger
//
// Modified:
// 18.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -42,6 +44,7 @@
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4NeutronInelasticCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4FTFBinaryNeutronBuilder::
G4FTFBinaryNeutronBuilder(G4bool quasiElastic)
@@ -96,5 +99,6 @@ Build(G4NeutronInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
aP->AddDataSet(new G4NeutronInelasticCrossSection);
aP->AddDataSet(new G4CrossSectionPairGG(
new G4NeutronInelasticCrossSection(), 91*GeV));
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4FTFBinaryPiKBuilder.cc,v 1.3 2009/03/31 18:38:33 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFBinaryPiKBuilder.cc,v 1.4 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2008 G.Folger
//
// Modified:
// 18.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -41,87 +43,89 @@
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4PiNuclearCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4FTFBinaryPiKBuilder::
G4FTFBinaryPiKBuilder(G4bool quasiElastic)
{
thePiData = new G4PiNuclearCrossSection;
theMin = 4*GeV;
theModel = new G4TheoFSGenerator("FTFB");
{
thePiData = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
theMin = 4*GeV;
theModel = new G4TheoFSGenerator("FTFB");
theStringModel = new G4FTFModel;
theStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theStringModel = new G4FTFModel;
theStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4BinaryCascade;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theCascade = new G4BinaryCascade;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
theModel->SetTransport(theCascade);
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
}
theModel->SetTransport(theCascade);
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
}
G4FTFBinaryPiKBuilder:: ~G4FTFBinaryPiKBuilder()
{
delete theCascade;
delete theStringDecay;
delete theStringModel;
delete theModel;
if ( theQuasiElastic ) delete theQuasiElastic;
}
{
delete theCascade;
delete theStringDecay;
delete theStringModel;
delete theModel;
if ( theQuasiElastic ) delete theQuasiElastic;
}
void G4FTFBinaryPiKBuilder::
Build(G4HadronElasticProcess * ) {}
void G4FTFBinaryPiKBuilder::
Build(G4PionPlusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
{
theModel->SetMinEnergy(theMin);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4PionMinusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
{
theModel->SetMinEnergy(theMin);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4KaonPlusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4KaonPlusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4KaonMinusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4KaonMinusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4KaonZeroLInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4KaonZeroLInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4KaonZeroSInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
}
void G4FTFBinaryPiKBuilder::
Build(G4KaonZeroSInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4FTFBinaryProtonBuilder.cc,v 1.3 2009/03/31 18:38:33 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFBinaryProtonBuilder.cc,v 1.4 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2008 G.Folger
//
// Modified:
// 18.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -42,6 +44,7 @@
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4FTFBinaryProtonBuilder::
G4FTFBinaryProtonBuilder(G4bool quasiElastic)
@@ -76,7 +79,8 @@ Build(G4ProtonInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
aP->RegisterMe(theModel);
aP->AddDataSet(new G4ProtonInelasticCrossSection);
aP->AddDataSet(new G4CrossSectionPairGG(
new G4ProtonInelasticCrossSection(), 91*GeV));
}
G4FTFBinaryProtonBuilder::
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4FTFBuilder.cc,v 1.2 2009/11/25 19:33:18 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFBuilder.cc,v 1.3 2009/12/29 17:54:25 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -45,15 +45,16 @@
#include "G4GeneratorPrecompoundInterface.hh"
#include "G4LundStringFragmentation.hh"
#include "G4BinaryCascade.hh"
#include "G4PreCompoundModel.hh"
G4FTFBuilder::G4FTFBuilder(const G4String& aName) : G4VHadronModelBuilder(aName)
G4FTFBuilder::G4FTFBuilder(const G4String& aName, G4PreCompoundModel* p)
: G4VHadronModelBuilder(aName), thePreCompound(p)
{}
G4FTFBuilder::~G4FTFBuilder()
{
delete theStringDecay;
//delete theStringModel; // is deleted by the model
}
G4HadronicInteraction* G4FTFBuilder::BuildModel()
@@ -64,14 +65,22 @@ G4HadronicInteraction* G4FTFBuilder::BuildModel()
theStringModel->SetFragmentationModel(theStringDecay);
theFTFModel->SetHighEnergyGenerator(theStringModel);
if(GetName() == "FTFP") {
theFTFModel->SetTransport(new G4GeneratorPrecompoundInterface());
} else if(GetName() == "FTFC") {
if(!thePreCompound) {
thePreCompound = new G4PreCompoundModel(new G4ExcitationHandler());
}
if(GetName() == "FTFC") {
theFTFModel->SetTransport(new G4QStringChipsParticleLevelInterface());
} else if(GetName() == "FTFB") {
theFTFModel->SetTransport(new G4BinaryCascade());
G4BinaryCascade* bic = new G4BinaryCascade();
bic->SetDeExcitation(thePreCompound);
theFTFModel->SetTransport(bic);
} else {
theFTFModel->SetTransport(new G4GeneratorPrecompoundInterface());
G4GeneratorPrecompoundInterface* pint = new G4GeneratorPrecompoundInterface();
pint->SetDeExcitation(thePreCompound);
theFTFModel->SetTransport(pint);
}
return theFTFModel;
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4FTFPNeutronBuilder.cc,v 1.5 2009/04/23 18:54:57 japost Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFPNeutronBuilder.cc,v 1.7 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2002 J.P. Wellisch
//
// Modified:
// 18.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -42,6 +44,7 @@
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4NeutronInelasticCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4FTFPNeutronBuilder::
G4FTFPNeutronBuilder(G4bool quasiElastic)
@@ -51,11 +54,11 @@ G4FTFPNeutronBuilder(G4bool quasiElastic)
theModel = new G4TheoFSGenerator("FTFP");
theStringModel = new G4FTFModel;
theStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation);
theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetTransport(theCascade);
@@ -80,6 +83,8 @@ G4FTFPNeutronBuilder::
delete thePreEquilib;
delete theCascade;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theHandler;
delete theLund;
}
void G4FTFPNeutronBuilder::
@@ -103,7 +108,8 @@ Build(G4NeutronInelasticProcess * aP)
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
aP->AddDataSet(new G4NeutronInelasticCrossSection);
aP->AddDataSet(new G4CrossSectionPairGG(
new G4NeutronInelasticCrossSection(), 91*GeV));
}
// 2002 by J.P. Wellisch
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4FTFPPiKBuilder.cc,v 1.5 2009/04/23 18:54:57 japost Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFPPiKBuilder.cc,v 1.7 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2002 J.P. Wellisch
//
// Modified:
// 18.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -41,96 +43,100 @@
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4PiNuclearCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4FTFPPiKBuilder::
G4FTFPPiKBuilder(G4bool quasiElastic)
{
thePiData = new G4PiNuclearCrossSection;
theMin = 4*GeV;
theMax = 100*TeV;
theModel = new G4TheoFSGenerator("FTFP");
{
thePiData = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
theMin = 4*GeV;
theMax = 100*TeV;
theModel = new G4TheoFSGenerator("FTFP");
theStringModel = new G4FTFModel;
theStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theStringModel = new G4FTFModel;
theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
theModel->SetTransport(theCascade);
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
}
theModel->SetTransport(theCascade);
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
}
G4FTFPPiKBuilder:: ~G4FTFPPiKBuilder()
{
delete theCascade;
delete theStringDecay;
delete theStringModel;
delete theModel;
if ( theQuasiElastic ) delete theQuasiElastic;
}
G4FTFPPiKBuilder::~G4FTFPPiKBuilder()
{
delete theCascade;
delete theStringDecay;
delete theStringModel;
delete theModel;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theHandler;
delete theLund;
}
void G4FTFPPiKBuilder::
Build(G4HadronElasticProcess * ) {}
void G4FTFPPiKBuilder::
Build(G4PionPlusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
void G4FTFPPiKBuilder::
Build(G4PionMinusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
void G4FTFPPiKBuilder::
Build(G4KaonPlusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
}
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
}
void G4FTFPPiKBuilder::
Build(G4KaonMinusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
}
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
}
void G4FTFPPiKBuilder::
Build(G4KaonZeroLInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
}
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
}
void G4FTFPPiKBuilder::
Build(G4KaonZeroSInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
}
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
}
// 2002 by J.P. Wellisch
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4FTFPProtonBuilder.cc,v 1.6 2009/04/23 18:54:57 japost Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4FTFPProtonBuilder.cc,v 1.8 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2002 J.P. Wellisch
//
// Modified:
// 18.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -42,6 +44,7 @@
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4FTFPProtonBuilder::
G4FTFPProtonBuilder(G4bool quasiElastic)
@@ -51,11 +54,11 @@ G4FTFPProtonBuilder(G4bool quasiElastic)
theModel = new G4TheoFSGenerator("FTFP");
theStringModel = new G4FTFModel;
theStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation);
theStringDecay = new G4ExcitedStringDecay(theLund = new G4LundStringFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetHighEnergyGenerator(theStringModel);
@@ -77,7 +80,8 @@ Build(G4ProtonInelasticProcess * aP)
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(theMax);
aP->RegisterMe(theModel);
aP->AddDataSet(new G4ProtonInelasticCrossSection);
aP->AddDataSet(new G4CrossSectionPairGG(
new G4ProtonInelasticCrossSection(), 91*GeV));
}
G4FTFPProtonBuilder::
@@ -88,6 +92,8 @@ G4FTFPProtonBuilder::
delete theModel;
delete theCascade;
if ( theQuasiElastic ) delete theQuasiElastic;
delete theHandler;
delete theLund;
}
void G4FTFPProtonBuilder::
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronDElasticPhysics.cc,v 1.3 2008/05/19 10:21:34 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4HadronDElasticPhysics.cc,v 1.7 2010/07/29 10:52:14 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -42,36 +42,58 @@
// 19.02.2007 A.Howard set QModelLowLimit and LowestEnergyLimit to zero
// for neutrons
// 06.03.2007 V.Ivanchenko use updated interface to G4UElasticCrossSection
// 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
//
//----------------------------------------------------------------------------
//
// Diffuse optical model for sampling scattering
// BBG cross sections for p, pi+-
// XS cross sections for n
// LHEP cross sections for other particles
#include "G4HadronDElasticPhysics.hh"
#include "G4HadronicProcess.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronicInteraction.hh"
#include "G4DiffuseElastic.hh"
#include "G4HadronElastic.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4HadronicProcess.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4IonConstructor.hh"
#include "G4Neutron.hh"
#include "G4VQCrossSection.hh"
#include "G4UElasticCrossSection.hh"
#include "G4WHadronElasticProcess.hh"
#include "G4VHadronElastic.hh"
#include "G4CHIPSElastic.hh"
#include "G4ElasticHadrNucleusHE.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
#include "G4NeutronElasticXS.hh"
#include "G4DiffuseElastic.hh"
#include "G4NeutronElasticXS.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
G4HadronDElasticPhysics::G4HadronDElasticPhysics(G4int ver, G4bool hp)
: G4VPhysicsConstructor("DElastic"), mname("DElastic"), verbose(ver),
hpFlag(hp), wasActivated(false)
G4HadronDElasticPhysics::G4HadronDElasticPhysics(G4int ver)
: G4VPhysicsConstructor("hElasticDIFFUSE"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) G4cout << "### HadronDElasticPhysics" << G4endl;
if(verbose > 1) {
G4cout << "### G4HadronDElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
}
G4HadronDElasticPhysics::G4HadronDElasticPhysics(G4int ver, G4bool)
: G4VPhysicsConstructor("hElasticDIFFUSE"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) {
G4cout << "### G4HadronDElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
}
G4HadronDElasticPhysics::~G4HadronDElasticPhysics()
@@ -96,19 +118,24 @@ void G4HadronDElasticPhysics::ConstructProcess()
if(wasActivated) return;
wasActivated = true;
if(verbose > 1)
G4cout << "### HadronDElasticPhysics Construct Processes with the model <"
<< mname << ">" << G4endl;
//G4double elimit = 1.0*GeV;
if(verbose > 1) {
G4cout << "### HadronDElasticPhysics Construct Processes " << G4endl;
}
//G4VHadronElastic* plep0 = new G4VHadronElastic();
//G4VHadronElastic* plep1 = new G4VHadronElastic();
//plep1->SetMaxEnergy(elimit);
// G4CHIPSElastic* chipsp = new G4CHIPSElastic();
// G4CHIPSElastic* chipsn = new G4CHIPSElastic();
//G4ElasticHadrNucleusHE* he = new G4ElasticHadrNucleusHE();
//he->SetMinEnergy(elimit);
G4UHadronElasticProcess* hel = 0;
G4DiffuseElastic* model = 0;
G4double elimit = 11.0*MeV;
G4HadronElastic* he = new G4HadronElastic();
G4VQCrossSection* man = he->GetCS();
he->SetMaxEnergy(elimit);
theParticleIterator->reset();
while( (*theParticleIterator)() )
{
@@ -139,36 +166,23 @@ void G4HadronDElasticPhysics::ConstructProcess()
pname == "triton") {
G4ProcessManager* pmanager = particle->GetProcessManager();
hel = new G4UHadronElasticProcess("hElastic");
hel->SetQElasticCrossSection(man);
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
if(pname == "proton") {
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
} else if (pname == "pi+" || pname == "pi-") {
hel->AddDataSet(new G4BGGPionElasticXS(particle));
} else {
hel->AddDataSet(new G4UElasticCrossSection(particle));
}
model = new G4DiffuseElastic(particle);
hel->RegisterMe(model);
hel->RegisterMe(he);
pmanager->AddDiscreteProcess(hel);
// neutron case
} else if(pname == "neutron") {
G4ProcessManager* pmanager = particle->GetProcessManager();
hel = new G4UHadronElasticProcess("hElastic");
hel->SetQElasticCrossSection(man);
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
hel->AddDataSet(new G4NeutronElasticXS());
model = new G4DiffuseElastic(particle);
if(hpFlag) {
model->SetMinEnergy(19.5*MeV);
G4NeutronHPElastic* modelHP = new G4NeutronHPElastic();
hel->RegisterMe(modelHP);
hel->AddDataSet(new G4NeutronHPElasticData());
} else {
hel->RegisterMe(he);
}
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
@@ -23,36 +23,33 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronElasticPhysics.cc,v 1.9 2008/12/01 16:57:22 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4HadronElasticPhysics.cc,v 1.16 2010/09/24 12:54:13 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronElasticPhysics
// ClassName: G4HadronElasticPhysics
//
// Author: 11 April 2006 V. Ivanchenko
// Author: 23 November 2006 V. Ivanchenko
//
// Modified:
// 05.07.2006 V.Ivanchenko define process by particle name;
// fix problem of initialisation of HP
// 24.07.2006 V.Ivanchenko add G4NeutronHPElasticData
// 10.08.2006 V.Ivanchenko separate neutrons from other particles
// 17.11.2006 V.Ivanchenko do not redefine G4HadronElastic default parameters
// 19.02.2007 V.Ivanchenko set QModelLowLimit and LowestEnergyLimit to zero
// 19.02.2007 A.Howard set QModelLowLimit and LowestEnergyLimit to zero
// for neutrons
// 06.03.2007 V.Ivanchenko use updated interface to G4UElasticCrossSection
// 21.03.2007 V.Ivanchenko Use G4BGGNucleonElasticXS and G4BGGPionElasticXS;
// Reduce thresholds for HE and Q-models to zero
// 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
// 29.07.2010 V.Ivanchenko rename this class from G4HadronHElasticPhysics to
// G4HadronElasticPhysics, old version of the class
// is renamed to G4HadronElasticPhysics93
//
//----------------------------------------------------------------------------
//
// CHIPS for sampling scattering for p and n
// Glauber model for samplimg of high energy pi+- (E > 1GeV)
// LHEP sampling model for the other particle
// BBG cross sections for p, n and pi+-
// LHEP cross sections for other particles
#include "G4HadronElasticPhysics.hh"
#include "G4HadronicProcess.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronicInteraction.hh"
#include "G4LElastic.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
@@ -61,32 +58,42 @@
#include "G4IonConstructor.hh"
#include "G4Neutron.hh"
#include "G4VQCrossSection.hh"
#include "G4UElasticCrossSection.hh"
#include "G4WHadronElasticProcess.hh"
#include "G4VHadronElastic.hh"
#include "G4CHIPSElastic.hh"
#include "G4ElasticHadrNucleusHE.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
#include "G4NeutronElasticXS.hh"
#include "G4CHIPSElasticXS.hh"
G4HadronElasticPhysics::G4HadronElasticPhysics(
const G4String& name, G4int ver, G4bool hp, G4bool glauber)
: G4VPhysicsConstructor(name), mname(name), verbose(ver), hpFlag(hp),
glFlag(glauber),wasActivated(false)
G4HadronElasticPhysics::G4HadronElasticPhysics(G4int ver)
: G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) G4cout << "### HadronElasticPhysics" << G4endl;
model = 0;
neutronModel = 0;
neutronHPModel = 0;
if(verbose > 1) {
G4cout << "### G4HadronElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
}
G4HadronElasticPhysics::G4HadronElasticPhysics(const G4String&,
G4int ver, G4bool, const G4String&)
: G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) {
G4cout << "### G4HadronElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
}
G4HadronElasticPhysics::~G4HadronElasticPhysics()
{
delete model;
delete neutronModel;
delete neutronHPModel;
}
{}
void G4HadronElasticPhysics::ConstructParticle()
{
// G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
// G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
@@ -100,31 +107,29 @@ void G4HadronElasticPhysics::ConstructParticle()
void G4HadronElasticPhysics::ConstructProcess()
{
if(wasActivated) return;
if(wasActivated) { return; }
wasActivated = true;
G4double elimit = 1.0*GeV;
if(verbose > 1) {
G4cout << "### HadronElasticPhysics Construct Processes with the model <"
<< mname << ">" << G4endl;
G4cout << "### HadronElasticPhysics Construct Processes with HE limit "
<< elimit << " MeV" << G4endl;
}
G4HadronicProcess* hel = 0;
G4VQCrossSection* man = 0;
if(mname == "elastic") {
G4HadronElastic* he = new G4HadronElastic();
model = he;
man = he->GetCS();
he->SetQModelLowLimit(0.0);
he->SetLowestEnergyLimit(0.0);
} else {
model = new G4LElastic();
}
G4VHadronElastic* plep0 = new G4VHadronElastic();
G4VHadronElastic* plep1 = new G4VHadronElastic();
plep1->SetMaxEnergy(elimit);
G4CHIPSElastic* chipsp = new G4CHIPSElastic();
G4CHIPSElastic* chipsn = new G4CHIPSElastic();
G4ElasticHadrNucleusHE* he = new G4ElasticHadrNucleusHE();
he->SetMinEnergy(elimit);
theParticleIterator->reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String pname = particle->GetParticleName();
if(pname == "anti_lambda" ||
pname == "anti_neutron" ||
@@ -140,6 +145,9 @@ void G4HadronElasticPhysics::ConstructProcess()
pname == "kaon0L" ||
pname == "lambda" ||
pname == "omega-" ||
pname == "pi-" ||
pname == "pi+" ||
pname == "proton" ||
pname == "sigma-" ||
pname == "sigma+" ||
pname == "xi-" ||
@@ -147,83 +155,40 @@ void G4HadronElasticPhysics::ConstructProcess()
pname == "deuteron" ||
pname == "triton") {
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(glFlag) hel->AddDataSet(new G4UElasticCrossSection(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
G4ProcessManager* pmanager = particle->GetProcessManager();
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
if(pname == "proton") {
//hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
hel->AddDataSet(new G4CHIPSElasticXS());
hel->RegisterMe(chipsp);
} else if (pname == "pi+" || pname == "pi-") {
hel->AddDataSet(new G4BGGPionElasticXS(particle));
hel->RegisterMe(plep1);
hel->RegisterMe(he);
} else {
hel->RegisterMe(plep0);
}
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1)
G4cout << "### HadronElasticPhysics added for "
<< particle->GetParticleName() << G4endl;
// proton case
} else if(pname == "proton") {
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(glFlag) hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1)
G4cout << "### HadronElasticPhysics added for "
<< particle->GetParticleName() << G4endl;
// neutron case
} else if(pname == "neutron") {
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
G4HadronElastic* nhe = new G4HadronElastic();
nhe->SetQModelLowLimit(0.0);
nhe->SetLowestEnergyLimit(0.0);
neutronModel = nhe;
h->SetQElasticCrossSection(nhe->GetCS());
hel = h;
if(glFlag) hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
neutronModel = new G4LElastic();
}
G4ProcessManager* pmanager = particle->GetProcessManager();
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
//hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
hel->AddDataSet(new G4CHIPSElasticXS());
hel->RegisterMe(chipsn);
if(hpFlag) {
neutronModel->SetMinEnergy(19.5*MeV);
neutronHPModel = new G4NeutronHPElastic();
hel->RegisterMe(neutronHPModel);
hel->AddDataSet(new G4NeutronHPElasticData());
}
hel->RegisterMe(neutronModel);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1)
G4cout << "### HadronElasticPhysics added for "
<< particle->GetParticleName() << G4endl;
// pion case
} else if(pname == "pi+" || pname == "pi-") {
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(glFlag) hel->AddDataSet(new G4BGGPionElasticXS(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1)
G4cout << "### HadronElasticPhysics added for "
<< particle->GetParticleName() << G4endl;
}
}
}
@@ -0,0 +1,241 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronElasticPhysics93.cc,v 1.1 2010/07/29 10:52:14 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronElasticPhysics93
//
// Author: 11 April 2006 V. Ivanchenko
//
// Modified:
// 05.07.2006 V.Ivanchenko define process by particle name;
// fix problem of initialisation of HP
// 24.07.2006 V.Ivanchenko add G4NeutronHPElasticData
// 10.08.2006 V.Ivanchenko separate neutrons from other particles
// 17.11.2006 V.Ivanchenko do not redefine G4HadronElastic default parameters
// 19.02.2007 V.Ivanchenko set QModelLowLimit and LowestEnergyLimit to zero
// 19.02.2007 A.Howard set QModelLowLimit and LowestEnergyLimit to zero
// for neutrons
// 06.03.2007 V.Ivanchenko use updated interface to G4UElasticCrossSection
//
//----------------------------------------------------------------------------
//
#include "G4HadronElasticPhysics93.hh"
#include "G4HadronicProcess.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronicInteraction.hh"
#include "G4LElastic.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4IonConstructor.hh"
#include "G4Neutron.hh"
#include "G4VQCrossSection.hh"
#include "G4UElasticCrossSection.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
G4HadronElasticPhysics93::G4HadronElasticPhysics93(G4int ver)
: G4VPhysicsConstructor("elastic"), mname("elastic"),verbose(ver),
hpFlag(false), glFlag(false),wasActivated(false)
{
if(verbose > 1) G4cout << "### HadronElasticPhysics93" << G4endl;
model = 0;
neutronModel = 0;
neutronHPModel = 0;
}
G4HadronElasticPhysics93::G4HadronElasticPhysics93(
const G4String& name, G4int ver, G4bool hp, G4bool glauber)
: G4VPhysicsConstructor(name), mname(name), verbose(ver), hpFlag(hp),
glFlag(glauber),wasActivated(false)
{
if(verbose > 1) G4cout << "### HadronElasticPhysics93" << G4endl;
model = 0;
neutronModel = 0;
neutronHPModel = 0;
}
G4HadronElasticPhysics93::~G4HadronElasticPhysics93()
{
delete model;
delete neutronModel;
delete neutronHPModel;
}
void G4HadronElasticPhysics93::ConstructParticle()
{
// G4cout << "G4HadronElasticPhysics93::ConstructParticle" << G4endl;
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
// Construct light ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
void G4HadronElasticPhysics93::ConstructProcess()
{
if(wasActivated) return;
wasActivated = true;
if(verbose > 1) {
G4cout << "### HadronElasticPhysics93 Construct Processes with the model <"
<< mname << ">" << G4endl;
}
G4HadronicProcess* hel = 0;
G4VQCrossSection* man = 0;
if(mname == "elastic") {
G4HadronElastic* he = new G4HadronElastic();
model = he;
man = he->GetCS();
he->SetQModelLowLimit(0.0);
he->SetLowestEnergyLimit(0.0);
} else {
model = new G4LElastic();
}
theParticleIterator->reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String pname = particle->GetParticleName();
if(pname == "anti_lambda" ||
pname == "anti_neutron" ||
pname == "anti_omega-" ||
pname == "anti_proton" ||
pname == "anti_sigma-" ||
pname == "anti_sigma+" ||
pname == "anti_xi-" ||
pname == "anti_xi0" ||
pname == "kaon-" ||
pname == "kaon+" ||
pname == "kaon0S" ||
pname == "kaon0L" ||
pname == "lambda" ||
pname == "omega-" ||
pname == "sigma-" ||
pname == "sigma+" ||
pname == "xi-" ||
pname == "alpha" ||
pname == "deuteron" ||
pname == "triton") {
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(glFlag) hel->AddDataSet(new G4UElasticCrossSection(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
}
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1)
G4cout << "### HadronElasticPhysics93 added for "
<< particle->GetParticleName() << G4endl;
// proton case
} else if(pname == "proton") {
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(glFlag) hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
}
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1)
G4cout << "### HadronElasticPhysics93 added for "
<< particle->GetParticleName() << G4endl;
// neutron case
} else if(pname == "neutron") {
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
G4HadronElastic* nhe = new G4HadronElastic();
nhe->SetQModelLowLimit(0.0);
nhe->SetLowestEnergyLimit(0.0);
neutronModel = nhe;
h->SetQElasticCrossSection(nhe->GetCS());
hel = h;
if(glFlag) hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
neutronModel = new G4LElastic();
}
if(hpFlag) {
neutronModel->SetMinEnergy(19.5*MeV);
neutronHPModel = new G4NeutronHPElastic();
hel->RegisterMe(neutronHPModel);
hel->AddDataSet(new G4NeutronHPElasticData());
}
hel->RegisterMe(neutronModel);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1)
G4cout << "### HadronElasticPhysics93 added for "
<< particle->GetParticleName() << G4endl;
// pion case
} else if(pname == "pi+" || pname == "pi-") {
if(mname == "elastic") {
G4UHadronElasticProcess* h = new G4UHadronElasticProcess("hElastic");
h->SetQElasticCrossSection(man);
hel = h;
if(glFlag) hel->AddDataSet(new G4BGGPionElasticXS(particle));
} else {
hel = new G4HadronElasticProcess("hElastic");
}
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1)
G4cout << "### HadronElasticPhysics93 added for "
<< particle->GetParticleName() << G4endl;
}
}
}
@@ -0,0 +1,191 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronElasticPhysicsHP.cc,v 1.3 2010/09/23 18:53:20 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronElasticPhysicsHP
//
// Author: 3 June 2010 V. Ivanchenko
//
// Modified:
//
//----------------------------------------------------------------------------
//
// CHIPS for sampling scattering for p and n
// HP model for n with E < 20 MeV
// Glauber model for samplimg of high energy pi+- (E > 1GeV)
// LHEP sampling model for the other particle
// BBG cross sections for n, p and pi+-
// HP cross sections for n n with E < 20 MeV
// LHEP cross sections for other particles
#include "G4HadronElasticPhysicsHP.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4IonConstructor.hh"
#include "G4Neutron.hh"
#include "G4WHadronElasticProcess.hh"
#include "G4VHadronElastic.hh"
#include "G4CHIPSElastic.hh"
#include "G4ElasticHadrNucleusHE.hh"
#include "G4NeutronHPElastic.hh"
#include "G4UElasticCrossSection.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
#include "G4NeutronElasticXS.hh"
#include "G4CHIPSElasticXS.hh"
#include "G4NeutronHPElastic.hh"
#include "G4NeutronHPElasticData.hh"
G4HadronElasticPhysicsHP::G4HadronElasticPhysicsHP(G4int ver)
: G4VPhysicsConstructor("hElasticWEL_CHIPS_HP"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) {
G4cout << "### G4HadronElasticPhysicsHP: " << GetPhysicsName()
<< G4endl;
}
}
G4HadronElasticPhysicsHP::~G4HadronElasticPhysicsHP()
{}
void G4HadronElasticPhysicsHP::ConstructParticle()
{
// G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
// Construct light ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
void G4HadronElasticPhysicsHP::ConstructProcess()
{
if(wasActivated) return;
wasActivated = true;
G4double elimit = 1.0*GeV;
if(verbose > 1) {
G4cout << "### HadronElasticPhysicsHP Construct Processes with HE limit "
<< elimit << " MeV" << G4endl;
}
G4VHadronElastic* plep0 = new G4VHadronElastic();
G4VHadronElastic* plep1 = new G4VHadronElastic();
plep1->SetMaxEnergy(elimit);
G4CHIPSElastic* chipsp = new G4CHIPSElastic();
G4CHIPSElastic* chipsn = new G4CHIPSElastic();
G4ElasticHadrNucleusHE* he = new G4ElasticHadrNucleusHE();
he->SetMinEnergy(elimit);
theParticleIterator->reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator->value();
G4String pname = particle->GetParticleName();
if(pname == "anti_lambda" ||
pname == "anti_neutron" ||
pname == "anti_omega-" ||
pname == "anti_proton" ||
pname == "anti_sigma-" ||
pname == "anti_sigma+" ||
pname == "anti_xi-" ||
pname == "anti_xi0" ||
pname == "kaon-" ||
pname == "kaon+" ||
pname == "kaon0S" ||
pname == "kaon0L" ||
pname == "lambda" ||
pname == "omega-" ||
pname == "pi-" ||
pname == "pi+" ||
pname == "proton" ||
pname == "sigma-" ||
pname == "sigma+" ||
pname == "xi-" ||
pname == "alpha" ||
pname == "deuteron" ||
pname == "triton") {
G4ProcessManager* pmanager = particle->GetProcessManager();
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
if(pname == "proton") {
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
hel->AddDataSet(new G4CHIPSElasticXS());
hel->RegisterMe(chipsp);
} else if (pname == "pi+" || pname == "pi-") {
hel->AddDataSet(new G4BGGPionElasticXS(particle));
hel->RegisterMe(plep1);
hel->RegisterMe(he);
} else {
hel->RegisterMe(plep0);
}
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysicsHP: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
// neutron case
} else if(pname == "neutron") {
G4ProcessManager* pmanager = particle->GetProcessManager();
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
hel->AddDataSet(new G4CHIPSElasticXS());
hel->RegisterMe(chipsn);
chipsn->SetMinEnergy(19.5*MeV);
G4NeutronHPElastic* hp = new G4NeutronHPElastic();
hel->RegisterMe(hp);
hel->AddDataSet(new G4NeutronHPElasticData());
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysicsHP: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
}
}
}
@@ -0,0 +1,137 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronElasticPhysicsLHEP.cc,v 1.2 2010/06/03 14:28:32 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronElasticPhysicsLHEP
//
// Author: 3 June 2010 V. Ivanchenko
//
// Modified:
//
//----------------------------------------------------------------------------
//
// LHEP x-sectios and sampling
#include "G4HadronElasticPhysicsLHEP.hh"
#include "G4HadronicProcess.hh"
#include "G4HadronElasticProcess.hh"
#include "G4HadronicInteraction.hh"
#include "G4LElastic.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4IonConstructor.hh"
#include "G4Neutron.hh"
G4HadronElasticPhysicsLHEP::G4HadronElasticPhysicsLHEP(G4int ver)
: G4VPhysicsConstructor("hElasticLHEP"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) {
G4cout << "### G4HadronElasticPhysicsLHEP: " << GetPhysicsName()
<< G4endl;
}
}
G4HadronElasticPhysicsLHEP::~G4HadronElasticPhysicsLHEP()
{}
void G4HadronElasticPhysicsLHEP::ConstructParticle()
{
// G4cout << "G4HadronElasticPhysicsLHEP::ConstructParticle" << G4endl;
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
// Construct light ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
void G4HadronElasticPhysicsLHEP::ConstructProcess()
{
if(wasActivated) return;
wasActivated = true;
if(verbose > 1) {
G4cout << "### HadronElasticPhysicsLHEP Construct Processes"
<< G4endl;
}
G4HadronicProcess* hel = 0;
G4HadronicInteraction* model = new G4LElastic();
theParticleIterator->reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator->value();
G4ProcessManager* pmanager = particle->GetProcessManager();
G4String pname = particle->GetParticleName();
if(pname == "anti_lambda" ||
pname == "anti_neutron" ||
pname == "anti_omega-" ||
pname == "anti_proton" ||
pname == "anti_sigma-" ||
pname == "anti_sigma+" ||
pname == "anti_xi-" ||
pname == "anti_xi0" ||
pname == "kaon-" ||
pname == "kaon+" ||
pname == "kaon0S" ||
pname == "kaon0L" ||
pname == "lambda" ||
pname == "omega-" ||
pname == "sigma-" ||
pname == "sigma+" ||
pname == "xi-" ||
pname == "neutron" ||
pname == "proton" ||
pname == "pi+" ||
pname == "pi-" ||
pname == "alpha" ||
pname == "deuteron" ||
pname == "triton") {
hel = new G4HadronElasticProcess("hElasticLHEP");
hel->RegisterMe(model);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysicsLHEP added for "
<< particle->GetParticleName() << G4endl;
}
}
}
}
@@ -0,0 +1,177 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronElasticPhysicsXS.cc,v 1.2 2010/06/03 14:28:32 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronElasticPhysicsXS
//
// Author: 3 June 2010 V. Ivanchenko
//
// Modified:
//
//----------------------------------------------------------------------------
//
// CHIPS for sampling scattering for p and n
// Glauber model for samplimg of high energy pi+- (E > 1GeV)
// LHEP sampling model for the other particle
// BBG cross sections for p and pi+-
// XS cross sections for neutrons
// LHEP cross sections for other particles
#include "G4HadronElasticPhysicsXS.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4IonConstructor.hh"
#include "G4Neutron.hh"
#include "G4WHadronElasticProcess.hh"
#include "G4VHadronElastic.hh"
#include "G4CHIPSElastic.hh"
#include "G4ElasticHadrNucleusHE.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
#include "G4NeutronElasticXS.hh"
G4HadronElasticPhysicsXS::G4HadronElasticPhysicsXS(G4int ver)
: G4VPhysicsConstructor("hElasticWEL_CHIPS_XS"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) {
G4cout << "### G4HadronElasticPhysicsHP: " << GetPhysicsName()
<< G4endl;
}
}
G4HadronElasticPhysicsXS::~G4HadronElasticPhysicsXS()
{}
void G4HadronElasticPhysicsXS::ConstructParticle()
{
// G4cout << "G4HadronElasticPhysics::ConstructParticle" << G4endl;
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
// Construct light ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
void G4HadronElasticPhysicsXS::ConstructProcess()
{
if(wasActivated) return;
wasActivated = true;
G4double elimit = 1.0*GeV;
if(verbose > 1) {
G4cout << "### HadronElasticPhysics Construct Processes with HE limit "
<< elimit << " MeV" << G4endl;
}
G4VHadronElastic* plep0 = new G4VHadronElastic();
G4VHadronElastic* plep1 = new G4VHadronElastic();
plep1->SetMaxEnergy(elimit);
G4CHIPSElastic* chipsp = new G4CHIPSElastic();
G4CHIPSElastic* chipsn = new G4CHIPSElastic();
G4ElasticHadrNucleusHE* he = new G4ElasticHadrNucleusHE();
he->SetMinEnergy(elimit);
theParticleIterator->reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator->value();
G4String pname = particle->GetParticleName();
if(pname == "anti_lambda" ||
pname == "anti_neutron" ||
pname == "anti_omega-" ||
pname == "anti_proton" ||
pname == "anti_sigma-" ||
pname == "anti_sigma+" ||
pname == "anti_xi-" ||
pname == "anti_xi0" ||
pname == "kaon-" ||
pname == "kaon+" ||
pname == "kaon0S" ||
pname == "kaon0L" ||
pname == "lambda" ||
pname == "omega-" ||
pname == "pi-" ||
pname == "pi+" ||
pname == "proton" ||
pname == "sigma-" ||
pname == "sigma+" ||
pname == "xi-" ||
pname == "alpha" ||
pname == "deuteron" ||
pname == "triton") {
G4ProcessManager* pmanager = particle->GetProcessManager();
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
if(pname == "proton") {
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
hel->RegisterMe(chipsp);
} else if (pname == "pi+" || pname == "pi-") {
hel->AddDataSet(new G4BGGPionElasticXS(particle));
hel->RegisterMe(plep1);
hel->RegisterMe(he);
} else {
hel->RegisterMe(plep0);
}
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysicsXS: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
// neutron case
} else if(pname == "neutron") {
G4ProcessManager* pmanager = particle->GetProcessManager();
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
hel->AddDataSet(new G4NeutronElasticXS());
hel->RegisterMe(chipsn);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysicsXS: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
}
}
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronHElasticPhysics.cc,v 1.7 2009/11/28 17:35:01 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4HadronHElasticPhysics.cc,v 1.10 2010/07/29 10:52:14 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -35,9 +35,15 @@
// Modified:
// 21.03.07 (V.Ivanchenko) Use G4BGGNucleonElasticXS and G4BGGPionElasticXS;
// Reduce thresholds for HE and Q-models to zero
// 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
//
//----------------------------------------------------------------------------
//
// CHIPS for sampling scattering for p and n
// Glauber model for samplimg of high energy pi+- (E > 1GeV)
// LHEP sampling model for the other particle
// BBG cross sections for p, n and pi+-
// LHEP cross sections for other particles
#include "G4HadronHElasticPhysics.hh"
@@ -53,18 +59,28 @@
#include "G4VHadronElastic.hh"
#include "G4CHIPSElastic.hh"
#include "G4ElasticHadrNucleusHE.hh"
#include "G4NeutronHPElastic.hh"
#include "G4UElasticCrossSection.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
#include "G4NeutronElasticXS.hh"
G4HadronHElasticPhysics::G4HadronHElasticPhysics(G4int ver, G4bool hp,
const G4String& type)
: G4VPhysicsConstructor("HElastic"), verbose(ver),
hpFlag(hp), wasActivated(false), subtype(type)
G4HadronHElasticPhysics::G4HadronHElasticPhysics(G4int ver)
: G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) G4cout << "### HadronHElasticPhysics" << G4endl;
// if(verbose > 1) {
G4cout << "### G4HadronHElasticPhysics: " << GetPhysicsName()
<< " is obsolete and soon will be removed" << G4endl;
}
G4HadronHElasticPhysics::G4HadronHElasticPhysics(G4int ver, G4bool,
const G4String&)
: G4VPhysicsConstructor("hElasticWEL_CHIPS"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) {
G4cout << "### G4HadronHElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
}
G4HadronHElasticPhysics::~G4HadronHElasticPhysics()
@@ -86,7 +102,7 @@ void G4HadronHElasticPhysics::ConstructParticle()
void G4HadronHElasticPhysics::ConstructProcess()
{
if(wasActivated) return;
if(wasActivated) { return; }
wasActivated = true;
G4double elimit = 1.0*GeV;
@@ -144,7 +160,6 @@ void G4HadronHElasticPhysics::ConstructProcess()
hel->RegisterMe(plep1);
hel->RegisterMe(he);
} else {
//hel->AddDataSet(new G4UElasticCrossSection(particle));
hel->RegisterMe(plep0);
}
pmanager->AddDiscreteProcess(hel);
@@ -158,19 +173,9 @@ void G4HadronHElasticPhysics::ConstructProcess()
G4ProcessManager* pmanager = particle->GetProcessManager();
G4WHadronElasticProcess* hel = new G4WHadronElasticProcess();
if(subtype == "QBBC_XGGSN") {
hel->AddDataSet(new G4NeutronElasticXS());
} else {
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
}
hel->AddDataSet(new G4BGGNucleonElasticXS(particle));
hel->RegisterMe(chipsn);
if(hpFlag) {
chipsn->SetMinEnergy(19.5*MeV);
G4NeutronHPElastic* hp = new G4NeutronHPElastic();
hel->RegisterMe(hp);
hel->AddDataSet(new G4NeutronHPElasticData());
}
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronQElasticPhysics.cc,v 1.7 2008/05/19 10:21:34 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4HadronQElasticPhysics.cc,v 1.9 2010/06/03 14:28:32 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -33,9 +33,12 @@
// Author: 17 Nov 2006 V.Ivanchenko
//
// Modified:
// 03.06.2010 V.Ivanchenko cleanup constructors and ConstructProcess method
//
//----------------------------------------------------------------------------
//
// CHIPS x-sections and generator (G4QElastic) for n and p
// LHEP x-section and generator for the rest
#include "G4HadronQElasticPhysics.hh"
@@ -53,11 +56,25 @@
#include "G4BaryonConstructor.hh"
#include "G4IonConstructor.hh"
G4HadronQElasticPhysics::G4HadronQElasticPhysics(
const G4String& name, G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
G4HadronQElasticPhysics::G4HadronQElasticPhysics(G4int ver)
: G4VPhysicsConstructor("hElasticCHIPS_LHEP"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) G4cout << "### HadronQElasticPhysics" << G4endl;
if(verbose > 1) {
G4cout << "### G4HadronQElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
model = 0;
}
G4HadronQElasticPhysics::G4HadronQElasticPhysics(const G4String&, G4int ver)
: G4VPhysicsConstructor("hElasticCHIPS_UELAST"), verbose(ver),
wasActivated(false)
{
if(verbose > 1) {
G4cout << "### G4HadronQElasticPhysics: " << GetPhysicsName()
<< G4endl;
}
model = 0;
}
@@ -81,15 +98,15 @@ void G4HadronQElasticPhysics::ConstructParticle()
void G4HadronQElasticPhysics::ConstructProcess()
{
if(wasActivated) return;
if(wasActivated) { return; }
wasActivated = true;
G4double elimit = DBL_MAX;
if(verbose > 1)
if(verbose > 1) {
G4cout << "### HadronQElasticPhysics: use HE limit " << elimit << " MeV"
<< G4endl;
}
process = new G4QElastic();
model = new G4HadronElastic();
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4IonBinaryCascadePhysics.cc,v 1.2 2009/02/16 10:15:35 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4IonBinaryCascadePhysics.cc,v 1.4 2010/07/30 14:20:08 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -50,6 +50,7 @@
#include "G4TripathiCrossSection.hh"
#include "G4TripathiLightCrossSection.hh"
#include "G4IonsShenCrossSection.hh"
#include "G4IonProtonCrossSection.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
@@ -58,9 +59,18 @@
// Nuclei
#include "G4IonConstructor.hh"
G4IonBinaryCascadePhysics::G4IonBinaryCascadePhysics(G4int ver)
: G4VPhysicsConstructor("IonBinaryCascade"), verbose(ver), wasActivated(false)
{
emax = 20.*GeV;
emaxLHEP = 1.*TeV;
eminBIC = 0.*MeV;
if(verbose > 1) G4cout << "### G4IonBinaryCascadePhysics" << G4endl;
}
G4IonBinaryCascadePhysics::G4IonBinaryCascadePhysics(const G4String& name,
G4int verb)
: G4VPhysicsConstructor(name), verbose(verb), wasActivated(false)
G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
{
emax = 20.*GeV;
emaxLHEP = 1.*TeV;
@@ -74,6 +84,7 @@ G4IonBinaryCascadePhysics::~G4IonBinaryCascadePhysics()
delete fTripathi;
delete fTripathiLight;
delete fShen;
delete fIonH;
delete fLEDModel;
delete fLETModel;
delete fLEAModel;
@@ -87,7 +98,7 @@ G4IonBinaryCascadePhysics::~G4IonBinaryCascadePhysics()
void G4IonBinaryCascadePhysics::ConstructProcess()
{
if(wasActivated) return;
if(wasActivated) { return; }
wasActivated = true;
G4BinaryLightIonReaction* fBC= new G4BinaryLightIonReaction();
@@ -95,6 +106,7 @@ void G4IonBinaryCascadePhysics::ConstructProcess()
fShen = new G4IonsShenCrossSection;
fTripathi = new G4TripathiCrossSection;
fTripathiLight = new G4TripathiLightCrossSection;
fIonH = new G4IonProtonCrossSection;
fLEDModel = new G4LEDeuteronInelastic();
fLETModel = new G4LETritonInelastic();
@@ -120,6 +132,7 @@ void G4IonBinaryCascadePhysics::AddProcess(const G4String& name,
hadi->AddDataSet(fShen);
hadi->AddDataSet(fTripathi);
hadi->AddDataSet(fTripathiLight);
if(p == G4GenericIon::GenericIon()) { hadi->AddDataSet(fIonH); }
hmodel->SetMinEnergy(eminBIC);
hmodel->SetMaxEnergy(emax);
hadi->RegisterMe(hmodel);
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4IonInclAblaPhysics.cc,v 1.1 2009/07/19 18:24:03 kaitanie Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4IonInclAblaPhysics.cc,v 1.2 2010/06/03 15:03:53 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -58,9 +58,22 @@
// Nuclei
#include "G4IonConstructor.hh"
G4IonInclAblaPhysics::G4IonInclAblaPhysics(G4int ver)
: G4VPhysicsConstructor("IonInclAbla"), verbose(ver), wasActivated(false)
{
// INCL/ABLA light ion maximum energy is 3.0 GeV/nucleon
emax_d = 2 * 3.0 * GeV;
emax_t = 3 * 3.0 * GeV;
emax_he3 = 3 * 3.0 * GeV;
emax_alpha = 4 * 3.0 * GeV;
emaxLHEP = 1.*TeV;
emin = 0.*MeV;
if(verbose > 1) G4cout << "### G4IonInclAblaPhysics" << G4endl;
}
G4IonInclAblaPhysics::G4IonInclAblaPhysics(const G4String& name,
G4int verb)
: G4VPhysicsConstructor(name), verbose(verb), wasActivated(false)
G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
{
// INCL/ABLA light ion maximum energy is 3.0 GeV/nucleon
emax_d = 2 * 3.0 * GeV;
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4IonPhysics.cc,v 1.1 2006/10/31 11:35:02 gunter Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4IonPhysics.cc,v 1.2 2010/06/03 14:37:24 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -55,6 +55,12 @@
// Nuclei
#include "G4IonConstructor.hh"
G4IonPhysics::G4IonPhysics(G4int)
: G4VPhysicsConstructor("IonPhysics")
, wasActivated(false)
{
}
G4IonPhysics::G4IonPhysics(const G4String& name)
: G4VPhysicsConstructor(name), wasActivated(false)
{
@@ -111,7 +117,3 @@ void G4IonPhysics::ConstructProcess()
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
// 2002 by J.P. Wellisch
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4IonQMDPhysics.cc,v 1.1 2009/11/27 17:25:15 gunter Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4IonQMDPhysics.cc,v 1.4 2010/09/30 21:23:05 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -59,9 +59,20 @@
// Nuclei
#include "G4IonConstructor.hh"
G4IonQMDPhysics::G4IonQMDPhysics(G4int ver)
: G4VPhysicsConstructor("IonQMD"), verbose(ver), wasActivated(false)
{
eminBIC = 0.*MeV;
eminQMD = 100.*MeV;
emaxQMD = 10.*GeV;
emaxLHEP = 1.*TeV;
overlap = 10*MeV;
if(verbose > 1) G4cout << "### G4IonQMDPhysics" << G4endl;
}
G4IonQMDPhysics::G4IonQMDPhysics(const G4String& name,
G4int verb)
: G4VPhysicsConstructor(name), verbose(verb), wasActivated(false)
G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
{
eminBIC = 0.*MeV;
eminQMD = 100.*MeV;
@@ -106,10 +117,10 @@ void G4IonQMDPhysics::ConstructProcess()
fLETModel = new G4LETritonInelastic();
fLEAModel = new G4LEAlphaInelastic();
AddProcess("dInelastic", G4Deuteron::Deuteron(), fBC,0, fLEDModel);
AddProcess("tInelastic",G4Triton::Triton(), fBC,0, fLETModel);
AddProcess("He3Inelastic",G4He3::He3(), fBC,0, 0);
AddProcess("alphaInelastic", G4Alpha::Alpha(), fBC,0, fLEAModel);
AddProcess("dInelastic", G4Deuteron::Deuteron(), fBC, fQMD, fLEDModel );
AddProcess("tInelastic",G4Triton::Triton(), fBC, fQMD, fLETModel );
AddProcess("He3Inelastic",G4He3::He3(), fBC, fQMD, 0 );
AddProcess("alphaInelastic", G4Alpha::Alpha(), fBC, fQMD, fLEAModel );
AddProcess("ionInelastic",G4GenericIon::GenericIon(), fBC, fQMD, 0);
}
@@ -135,7 +146,7 @@ void G4IonQMDPhysics::AddProcess(const G4String& name,
if(QMD) {
QMD->SetMinEnergy(eminQMD);
BIC->SetMaxEnergy(eminQMD-overlap);
BIC->SetMaxEnergy(eminQMD+overlap);
QMD->SetMaxEnergy(emaxQMD);
hadi->RegisterMe(QMD);
}
@@ -0,0 +1,88 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4KaonBuilder.cc,v 1.1 2010/11/19 16:21:40 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4KaonBuilder
//
// Author: 2010 G.Folger
// devired from G4PiKBuilder
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4KaonBuilder.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
G4KaonBuilder::
G4KaonBuilder(): wasActivated(false)
{
theKaonPlusInelastic=new G4KaonPlusInelasticProcess;
theKaonMinusInelastic=new G4KaonMinusInelasticProcess;
theKaonZeroLInelastic=new G4KaonZeroLInelasticProcess;
theKaonZeroSInelastic=new G4KaonZeroSInelasticProcess;
}
G4KaonBuilder::
~G4KaonBuilder(){
delete theKaonPlusInelastic;
delete theKaonMinusInelastic;
delete theKaonZeroLInelastic;
delete theKaonZeroSInelastic;
}
void G4KaonBuilder::
Build()
{
wasActivated = true;
std::vector<G4VKaonBuilder *>::iterator i;
for(i=theModelCollections.begin(); i!=theModelCollections.end(); i++)
{
(*i)->Build(theKaonPlusInelastic);
(*i)->Build(theKaonMinusInelastic);
(*i)->Build(theKaonZeroLInelastic);
(*i)->Build(theKaonZeroSInelastic);
}
G4ProcessManager * theProcMan;
theProcMan = G4KaonPlus::KaonPlus()->GetProcessManager();
theProcMan->AddDiscreteProcess(theKaonPlusInelastic);
theProcMan = G4KaonMinus::KaonMinus()->GetProcessManager();
theProcMan->AddDiscreteProcess(theKaonMinusInelastic);
theProcMan = G4KaonZeroLong::KaonZeroLong()->GetProcessManager();
theProcMan->AddDiscreteProcess(theKaonZeroLInelastic);
theProcMan = G4KaonZeroShort::KaonZeroShort()->GetProcessManager();
theProcMan->AddDiscreteProcess(theKaonZeroSInelastic);
}
@@ -0,0 +1,84 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4LEPPionBuilder
//
// Author: 2010 G.Folger
// devired from G4LEPPiKBuilder
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4LEPPionBuilder.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4ProcessManager.hh"
G4LEPPionBuilder::
G4LEPPionBuilder()
{
theMin = 0;
theMax = 55*GeV;
}
G4LEPPionBuilder::
~G4LEPPionBuilder()
{
delete theLEPionPlusModel;
}
void G4LEPPionBuilder::
Build(G4HadronElasticProcess *)
{
G4cout << "Info - G4LEPPionBuilder::Build() not adding elastic" << G4endl;
}
void G4LEPPionBuilder::
Build(G4PionPlusInelasticProcess * aP)
{
theLEPionPlusModel = new G4LEPionPlusInelastic();
theLEPionPlusModel->SetMinEnergy(theMin);
theLEPionPlusModel->SetMaxEnergy(theMax);
aP->RegisterMe(theLEPionPlusModel);
}
void G4LEPPionBuilder::
Build(G4PionMinusInelasticProcess * aP)
{
theLEPionMinusModel = new G4LEPionMinusInelastic();
theLEPionMinusModel->SetMinEnergy(theMin);
theLEPionMinusModel->SetMaxEnergy(theMax);
aP->RegisterMe(theLEPionMinusModel);
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4LHEPStoppingPhysics.cc,v 1.1 2006/10/31 11:35:03 gunter Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4LHEPStoppingPhysics.cc,v 1.2 2010/06/03 15:03:53 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -56,6 +56,10 @@
#include "G4AntiProtonAnnihilationAtRest.hh"
#include "G4AntiNeutronAnnihilationAtRest.hh"
G4LHEPStoppingPhysics::G4LHEPStoppingPhysics(G4int ver)
: G4VPhysicsConstructor("LHEP Stopping"), verbose(ver), wasActivated(false)
{}
G4LHEPStoppingPhysics::G4LHEPStoppingPhysics(const G4String& nam, G4int ver)
: G4VPhysicsConstructor(nam), verbose(ver), wasActivated(false)
{}
@@ -0,0 +1,81 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4MiscCHIPSBuilder
//
// Author: 2010, G.Folger
//
// created by modifying G4QInelasticCHIPSBuilder to apply only to MISC particles
// -----------------------------------------------------------------------------
#include "G4MiscCHIPSBuilder.hh"
G4MiscCHIPSBuilder::G4MiscCHIPSBuilder(G4int ver):
verbose(ver), wasActivated(false)
{
// pointer to the particle table
theParticleTable = G4ParticleTable::GetParticleTable();
theParticleIterator = theParticleTable->GetIterator();
}
G4MiscCHIPSBuilder::~G4MiscCHIPSBuilder()
{
if(wasActivated) delete inelastic;
}
void G4MiscCHIPSBuilder::Build()
{
if(wasActivated) return;
wasActivated = true;
theParticleIterator->reset();
inelastic = new G4QInelastic();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator->value();
G4String pname = particle->GetParticleName();
if(pname == "kaon-" || pname == "kaon+" || pname == "kaon0S" || pname == "kaon0L" ||
pname == "pi-" || pname == "pi+" || pname == "neutron" || pname == "proton" )
{
if(verbose>1)G4cout<<"** G4MiscCHIPSBuilder: "<<pname<<" already defined"<<G4endl;
}
else if( pname == "lambda" || pname == "sigma+" || pname == "sigma0" ||
pname == "sigma-" || pname == "xi0" || pname == "xi-" || pname == "omega-" ||
pname == "anti_proton" || pname == "anti_neutron" || pname == "anti_lambda" ||
pname == "anti_sigma+" || pname == "anti_sigma0" || pname == "anti_sigma-" ||
pname == "anti_xi0" || pname == "anti_xi-" || pname == "anti_omega-" )
{
if(verbose>1)G4cout<< "__G4QInelCHIPSBuilder: "<< pname <<" is defined here"<<G4endl;
G4ProcessManager* pmanager = particle->GetProcessManager();
pmanager->AddDiscreteProcess(inelastic);
if(verbose>1) G4cout<<"###> G4MiscCHIPSBuilder: "<<inelastic->GetProcessName()
<<" is added for "<<pname<<G4endl;
}
}
}
@@ -0,0 +1,94 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4NeutronCrossSectionXS.cc,v 1.4 2010/07/29 10:52:14 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4NeutronCrossSectionXS
//
// Author: 3 June 2010 V. Ivanchenko
//
// Modified:
//
//----------------------------------------------------------------------------
//
// Inelastic and capture cross section from XS database added
// on top of existing Physics List
#include "G4NeutronCrossSectionXS.hh"
#include "G4DataQuestionaire.hh"
#include "G4NeutronInelasticXS.hh"
#include "G4NeutronCaptureXS.hh"
#include "G4ParticleDefinition.hh"
#include "G4HadronicProcess.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4HadronicProcessType.hh"
#include "G4Neutron.hh"
G4NeutronCrossSectionXS::G4NeutronCrossSectionXS(G4int ver) :
G4VPhysicsConstructor("NeutronXS"), verbose(ver)
{
G4DataQuestionaire q(no,no,no,no,no,neutronxs);
}
G4NeutronCrossSectionXS::~G4NeutronCrossSectionXS()
{}
void G4NeutronCrossSectionXS::ConstructParticle()
{
G4Neutron::Neutron();
}
void G4NeutronCrossSectionXS::ConstructProcess()
{
G4NeutronInelasticXS* xinel = new G4NeutronInelasticXS();
G4NeutronCaptureXS* xcap = new G4NeutronCaptureXS();
const G4ParticleDefinition* neutron = G4Neutron::Neutron();
if(verbose > 1) {
G4cout << "### G4NeutronCrossSectionXS: use alternative neutron X-sections"
<< G4endl;
}
G4ProcessVector* pv = neutron->GetProcessManager()->GetProcessList();
G4int n = pv->size();
G4HadronicProcess* had = 0;
for(G4int i=0; i<n; i++) {
if(fHadronInelastic == ((*pv)[i])->GetProcessSubType()) {
had = static_cast<G4HadronicProcess*>((*pv)[i]);
had->AddDataSet(xinel);
} else if(fCapture == ((*pv)[i])->GetProcessSubType()) {
had = static_cast<G4HadronicProcess*>((*pv)[i]);
had->AddDataSet(xcap);
}
}
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4NeutronTrackingCut.cc,v 1.5 2008/09/17 18:19:15 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4NeutronTrackingCut.cc,v 1.6 2010/06/04 15:28:35 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -44,6 +44,14 @@
#include "G4Neutron.hh"
#include "G4NeutronKiller.hh"
G4NeutronTrackingCut::G4NeutronTrackingCut(G4int ver)
: G4VPhysicsConstructor("neutronTrackingCut")
, verbose(ver), wasActivated(false)
{
timeLimit = 10.*microsecond;
kineticEnergyLimit = 0.0;
}
G4NeutronTrackingCut::G4NeutronTrackingCut(const G4String& name, G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
{
@@ -41,6 +41,30 @@
#include "G4EmSaturation.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4OpticalPhysics::G4OpticalPhysics(G4int verbose)
: G4VPhysicsConstructor("Optical")
,
wasActivated(false),
fScintillationProcess(0),
fCerenkovProcess(0),
fOpWLSProcess(0),
fOpAbsorptionProcess(0),
fOpRayleighScatteringProcess(0),
fOpMieHGScatteringProcess(0),
fOpBoundaryProcess(0),
fMaxNumPhotons(100),
fMaxBetaChange(10.0),
fYieldFactor(1.),
fExcitationRatio(0.0),
fSurfaceModel(unified),
fProfile("delta"),
fTrackSecondariesFirst(true),
fScintillationByParticleType(false)
{
verboseLevel = verbose;
fMessenger = new G4OpticalPhysicsMessenger(this);
}
G4OpticalPhysics::G4OpticalPhysics(G4int verbose, const G4String& name)
: G4VPhysicsConstructor(name),
@@ -51,6 +75,7 @@ G4OpticalPhysics::G4OpticalPhysics(G4int verbose, const G4String& name)
fOpWLSProcess(0),
fOpAbsorptionProcess(0),
fOpRayleighScatteringProcess(0),
fOpMieHGScatteringProcess(0),
fOpBoundaryProcess(0),
fMaxNumPhotons(100),
fMaxBetaChange(10.0),
@@ -58,7 +83,8 @@ G4OpticalPhysics::G4OpticalPhysics(G4int verbose, const G4String& name)
fExcitationRatio(0.0),
fSurfaceModel(unified),
fProfile("delta"),
fTrackSecondariesFirst(true)
fTrackSecondariesFirst(true),
fScintillationByParticleType(false)
{
verboseLevel = verbose;
fMessenger = new G4OpticalPhysicsMessenger(this);
@@ -78,6 +104,7 @@ G4OpticalPhysics::~G4OpticalPhysics()
delete fOpAbsorptionProcess;
delete fOpRayleighScatteringProcess;
delete fOpMieHGScatteringProcess;
delete fOpBoundaryProcess;
}
@@ -113,6 +140,7 @@ void G4OpticalPhysics::ConstructProcess()
fOpAbsorptionProcess = new G4OpAbsorption();
fOpRayleighScatteringProcess = new G4OpRayleigh();
fOpMieHGScatteringProcess = new G4OpMieHG();
fOpBoundaryProcess = new G4OpBoundaryProcess();
fOpBoundaryProcess->SetModel(fSurfaceModel);
@@ -128,10 +156,12 @@ void G4OpticalPhysics::ConstructProcess()
o << "Optical Photon without a Process Manager";
G4Exception("G4OpticalPhysics::ConstructProcess()","",
FatalException,o.str().c_str());
return;
}
pManager->AddDiscreteProcess(fOpAbsorptionProcess);
pManager->AddDiscreteProcess(fOpRayleighScatteringProcess);
pManager->AddDiscreteProcess(fOpMieHGScatteringProcess);
pManager->AddDiscreteProcess(fOpBoundaryProcess);
pManager->AddDiscreteProcess(fOpWLSProcess);
@@ -139,6 +169,7 @@ void G4OpticalPhysics::ConstructProcess()
fScintillationProcess->SetScintillationYieldFactor(fYieldFactor);
fScintillationProcess->SetScintillationExcitationRatio(fExcitationRatio);
fScintillationProcess->SetTrackSecondariesFirst(fTrackSecondariesFirst);
fScintillationProcess->SetScintillationByParticleType(fScintillationByParticleType);
// Use Birks Correction in the Scintillation process
@@ -249,6 +280,14 @@ void G4OpticalPhysics::AddScintillationSaturation(G4EmSaturation* saturation)
fScintillationProcess->AddSaturation(saturation);
}
void G4OpticalPhysics::SetScintillationByParticleType(G4bool scintillationByParticleType)
{
fScintillationByParticleType = scintillationByParticleType;
if (fScintillationProcess)
fScintillationProcess->SetScintillationByParticleType(scintillationByParticleType);
}
void G4OpticalPhysics::SetTrackSecondariesFirst(G4bool trackSecondariesFirst)
{
fTrackSecondariesFirst = trackSecondariesFirst;
@@ -54,6 +54,7 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
fSetCerenkovMaxPhotonsCmd(0),
fSetCerenkovMaxBetaChangeCmd(0),
fSetScintillationYieldFactorCmd(0),
fSetScintillationByParticleTypeCmd(0),
fSetOpticalSurfaceModelCmd(0),
fSetWLSTimeProfileCmd(0),
fSetTrackSecondariesFirstCmd(0)
@@ -105,6 +106,12 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
fSetScintillationYieldFactorCmd->SetRange("ScintillationYieldFactor>=0");
fSetScintillationYieldFactorCmd->AvailableForStates(G4State_Idle,G4State_GeomClosed,G4State_EventProc);
fSetScintillationByParticleTypeCmd
= new G4UIcmdWithABool("/optics_engine/setScintillationByParticleType", this);
fSetScintillationByParticleTypeCmd->SetGuidance("Activate/Inactivate scintillation process by particle type");
fSetScintillationByParticleTypeCmd->SetParameterName("ScintillationByParticleTypeActivation", false);
fSetScintillationByParticleTypeCmd->AvailableForStates(G4State_Idle,G4State_GeomClosed,G4State_EventProc);
fSetOpticalSurfaceModelCmd
= new G4UIcmdWithAString("/optics_engine/setOpticalSurfaceModel", this);
fSetOpticalSurfaceModelCmd
@@ -140,6 +147,7 @@ G4OpticalPhysicsMessenger::~G4OpticalPhysicsMessenger()
delete fSetCerenkovMaxPhotonsCmd;
delete fSetCerenkovMaxBetaChangeCmd;
delete fSetScintillationYieldFactorCmd;
delete fSetScintillationByParticleTypeCmd;
delete fSetOpticalSurfaceModelCmd;
delete fSetWLSTimeProfileCmd;
delete fSetTrackSecondariesFirstCmd;
@@ -159,6 +167,8 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command, G4String newVa
GetOpAbsorptionProcess();
else if ( newValue == "OpRayleigh" ) fSelectedProcess = fOpticalPhysics->
GetOpRayleighProcess();
else if ( newValue == "OpMieHG" ) fSelectedProcess = fOpticalPhysics->
GetOpMieHGProcess();
else if ( newValue == "OpBoundary" ) fSelectedProcess = fOpticalPhysics->
GetOpBoundaryProcess();
else if ( newValue == "OpWLS" ) fSelectedProcess = fOpticalPhysics->
@@ -207,7 +217,12 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command, G4String newVa
fOpticalPhysics
->SetScintillationYieldFactor(
fSetScintillationYieldFactorCmd->GetNewDoubleValue(newValue));
}
}
else if (command == fSetScintillationByParticleTypeCmd) {
fOpticalPhysics
->SetScintillationByParticleType(
fSetScintillationByParticleTypeCmd->GetNewBoolValue(newValue));
}
else if (command == fSetOpticalSurfaceModelCmd) {
if ( newValue == "glisur" ) {
fOpticalPhysics
@@ -0,0 +1,76 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PionBuilder.cc,v 1.1 2010/11/19 16:21:40 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4PionBuilder
//
// Author: 2010 G.Folger
// devired from G4PiKBuilder
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4PionBuilder.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
G4PionBuilder::
G4PionBuilder(): wasActivated(false)
{
thePionPlusInelastic=new G4PionPlusInelasticProcess;
thePionMinusInelastic=new G4PionMinusInelasticProcess;
}
G4PionBuilder::
~G4PionBuilder(){
delete thePionPlusInelastic;
delete thePionMinusInelastic;
}
void G4PionBuilder::
Build()
{
wasActivated = true;
std::vector<G4VPionBuilder *>::iterator i;
for(i=theModelCollections.begin(); i!=theModelCollections.end(); i++)
{
(*i)->Build(thePionPlusInelastic);
(*i)->Build(thePionMinusInelastic);
}
G4ProcessManager * theProcMan;
theProcMan = G4PionPlus::PionPlus()->GetProcessManager();
theProcMan->AddDiscreteProcess(thePionPlusInelastic);
theProcMan = G4PionMinus::PionMinus()->GetProcessManager();
theProcMan->AddDiscreteProcess(thePionMinusInelastic);
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QAtomicPhysics.cc,v 1.1 2009/11/20 10:24:28 mkossov Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QAtomicPhysics.cc,v 1.2 2010/06/03 14:37:24 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -89,6 +89,12 @@
#include "G4Alpha.hh"
#include "G4GenericIon.hh"
G4QAtomicPhysics::G4QAtomicPhysics(G4int ver)
: G4VPhysicsConstructor("CHIPS Atomic"), verbose(ver)
{
G4LossTableManager::Instance();
}
G4QAtomicPhysics::G4QAtomicPhysics(G4int ver, const G4String& name)
: G4VPhysicsConstructor(name), verbose(ver)
{
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QCaptureAtRestPhysics.cc,v 1.1 2009/11/16 19:12:10 mkossov Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QCaptureAtRestPhysics.cc,v 1.2 2010/06/03 15:03:53 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -39,6 +39,13 @@
#include "G4QCaptureAtRestPhysics.hh"
G4QCaptureAtRestPhysics::G4QCaptureAtRestPhysics(G4int ver)
: G4VPhysicsConstructor("CHIPS nuclear_capture")
, verbose(ver), wasActivated(false)
{
if(verbose > 1) G4cout << "###> G4QCaptureAtRestPhysics is initialized" << G4endl;
}
G4QCaptureAtRestPhysics::G4QCaptureAtRestPhysics(const G4String& name, G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
{
@@ -0,0 +1,118 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QElasticPhysics.cc,v 1.2 2010/06/04 10:44:07 mkossov Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4QElasticPhysics
//
// Author: 3 Nov 2010 M. Kosov
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4QElasticPhysics.hh"
#include "G4UHadronElasticProcess.hh"
#include "G4HadronicInteraction.hh"
#include "G4HadronElastic.hh"
#include "G4QElastic.hh"
#include "G4VQCrossSection.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4IonConstructor.hh"
G4QElasticPhysics::G4QElasticPhysics(const G4String& name, G4int ver)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false)
{
if(verbose > 1) G4cout << "### QElasticPhysics is initialized" << G4endl;
model = 0;
}
void G4QElasticPhysics::ConstructParticle()
{
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
// Construct light ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
void G4QElasticPhysics::ConstructProcess()
{
if(wasActivated) return;
wasActivated = true;
process = new G4QElastic();
theParticleIterator->reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator->value();
G4String pname = particle->GetParticleName();
G4ProcessManager* pmanager = particle->GetProcessManager();
if(pname == "anti_neutron" ||
pname == "anti_proton" ||
pname == "anti_lambda" ||
pname == "anti_sigma-" ||
pname == "anti_sigma0" ||
pname == "anti_sigma+" ||
pname == "anti_xi-" ||
pname == "anti_xi0" ||
pname == "anti_omega-" ||
pname == "pi-" ||
pname == "pi+" ||
pname == "kaon-" ||
pname == "kaon+" ||
pname == "kaon0S" ||
pname == "kaon0L" ||
pname == "lambda" ||
pname == "sigma-" ||
pname == "sigma0" ||
pname == "sigma+" ||
pname == "xi-" ||
pname == "xi0" ||
pname == "omega-" )
{
pmanager->AddDiscreteProcess(process);
if(verbose>0) G4cout<<"### G4QElastic process is added for particle="<<pname<<G4endl;
}
}
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QGSBinaryNeutronBuilder.cc,v 1.3 2009/03/31 11:03:50 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QGSBinaryNeutronBuilder.cc,v 1.4 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -41,6 +41,7 @@
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4CrossSectionPairGG.hh"
#include "G4NeutronInelasticCrossSection.hh"
G4QGSBinaryNeutronBuilder::
@@ -99,6 +100,7 @@ Build(G4NeutronInelasticProcess * aP)
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
aP->RegisterMe(theModel);
aP->AddDataSet(new G4NeutronInelasticCrossSection);
aP->AddDataSet(new G4CrossSectionPairGG(
new G4NeutronInelasticCrossSection(), 91*GeV));
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QGSBinaryPiKBuilder.cc,v 1.3 2009/03/31 11:03:50 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QGSBinaryPiKBuilder.cc,v 1.4 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -41,11 +41,13 @@
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4PiNuclearCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4QGSBinaryPiKBuilder::
G4QGSBinaryPiKBuilder(G4bool quasiElastic)
{
thePiData = new G4PiNuclearCrossSection;
thePiData = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
theMin = 12*GeV;
theModel = new G4TheoFSGenerator("QGSB");
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QGSBinaryProtonBuilder.cc,v 1.3 2009/03/31 11:03:50 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QGSBinaryProtonBuilder.cc,v 1.4 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -42,6 +42,7 @@
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4QGSBinaryProtonBuilder::
G4QGSBinaryProtonBuilder(G4bool quasiElastic)
@@ -71,7 +72,8 @@ void G4QGSBinaryProtonBuilder::
Build(G4ProtonInelasticProcess * aP)
{
// G4cout << "adding inelastic Proton in QGSBinary" << G4endl;
aP->AddDataSet(new G4ProtonInelasticCrossSection);
aP->AddDataSet(new G4CrossSectionPairGG(
new G4ProtonInelasticCrossSection(), 91*GeV));
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
aP->RegisterMe(theModel);
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QGSBuilder.cc,v 1.1 2009/10/04 16:29:54 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QGSBuilder.cc,v 1.3 2010/06/19 11:12:58 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -47,10 +47,14 @@
#include "G4QGSMFragmentation.hh"
#include "G4ExcitedStringDecay.hh"
#include "G4BinaryCascade.hh"
#include "G4PreCompoundModel.hh"
#include "G4ExcitationHandler.hh"
G4QGSBuilder::G4QGSBuilder(const G4String& aName, G4bool quasiel, G4bool diff)
: G4VHadronModelBuilder(aName), quasielFlag(quasiel), diffFlag(diff)
G4QGSBuilder::G4QGSBuilder(const G4String& aName, G4PreCompoundModel* p,
G4bool quasiel, G4bool diff)
: G4VHadronModelBuilder(aName), thePreCompound(p),
quasielFlag(quasiel), diffFlag(diff)
{
theProjectileDiffraction = 0;
theQuasiElastic = 0;
@@ -62,13 +66,15 @@ G4QGSBuilder::~G4QGSBuilder()
delete theQuasiElastic;
delete theQGStringDecay;
delete theQGStringModel;
delete theQGSM;
}
G4HadronicInteraction* G4QGSBuilder::BuildModel()
{
G4TheoFSGenerator* theQGSModel = new G4TheoFSGenerator(GetName());
theQGStringModel = new G4QGSModel< G4QGSParticipants >;
theQGStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation());
theQGSM = new G4QGSMFragmentation();
theQGStringDecay = new G4ExcitedStringDecay(theQGSM);
theQGStringModel->SetFragmentationModel(theQGStringDecay);
theQGSModel->SetHighEnergyGenerator(theQGStringModel);
@@ -81,14 +87,22 @@ G4HadronicInteraction* G4QGSBuilder::BuildModel()
theQGSModel->SetProjectileDiffraction(theProjectileDiffraction);
}
if(GetName() == "QGSP") {
theQGSModel->SetTransport(new G4GeneratorPrecompoundInterface());
} else if(GetName() == "QGSC") {
if(!thePreCompound) {
thePreCompound = new G4PreCompoundModel(new G4ExcitationHandler());
}
if(GetName() == "QGSC") {
theQGSModel->SetTransport(new G4QStringChipsParticleLevelInterface());
} else if(GetName() == "QGSB") {
theQGSModel->SetTransport(new G4BinaryCascade());
G4BinaryCascade* bic = new G4BinaryCascade();
bic->SetDeExcitation(thePreCompound);
theQGSModel->SetTransport(bic);
} else {
theQGSModel->SetTransport(new G4GeneratorPrecompoundInterface());
G4GeneratorPrecompoundInterface* pint = new G4GeneratorPrecompoundInterface();
pint->SetDeExcitation(thePreCompound);
theQGSModel->SetTransport(pint);
}
return theQGSModel;
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QGSPNeutronBuilder.cc,v 1.5 2009/03/31 11:03:50 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QGSPNeutronBuilder.cc,v 1.8 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2002 J.P. Wellisch
//
// Modified:
// 17.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -42,6 +44,7 @@
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4NeutronInelasticCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4QGSPNeutronBuilder::
G4QGSPNeutronBuilder(G4bool quasiElastic, G4bool projectileDiffraction)
@@ -50,11 +53,11 @@ G4QGSPNeutronBuilder(G4bool quasiElastic, G4bool projectileDiffraction)
theModel = new G4TheoFSGenerator("QGSP");
theStringModel = new G4QGSModel< G4QGSParticipants >;
theStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation);
theStringDecay = new G4ExcitedStringDecay(theQGSM = new G4QGSMFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetTransport(theCascade);
@@ -73,8 +76,7 @@ G4QGSPNeutronBuilder(G4bool quasiElastic, G4bool projectileDiffraction)
{ theProjectileDiffraction=0;}
}
G4QGSPNeutronBuilder::
~G4QGSPNeutronBuilder()
G4QGSPNeutronBuilder::~G4QGSPNeutronBuilder()
{
delete theStringDecay;
delete theStringModel;
@@ -83,6 +85,8 @@ G4QGSPNeutronBuilder::
if ( theQuasiElastic ) delete theQuasiElastic;
if ( theProjectileDiffraction ) delete theProjectileDiffraction;
delete theModel;
delete theQGSM;
delete theHandler;
}
void G4QGSPNeutronBuilder::
@@ -106,7 +110,8 @@ Build(G4NeutronInelasticProcess * aP)
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
aP->RegisterMe(theModel);
aP->AddDataSet(new G4NeutronInelasticCrossSection);
aP->AddDataSet(new G4CrossSectionPairGG(
new G4NeutronInelasticCrossSection(), 91*GeV));
}
// 2002 by J.P. Wellisch
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QGSPPiKBuilder.cc,v 1.5 2009/03/31 11:03:50 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QGSPPiKBuilder.cc,v 1.8 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2002 J.P. Wellisch
//
// Modified:
// 17.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -42,21 +44,22 @@
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4PiNuclearCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4QGSPPiKBuilder::
G4QGSPPiKBuilder(G4bool quasiElastic, G4bool projectileDiffraction)
{
thePiData = new G4PiNuclearCrossSection();
thePiData = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
theMin = 12*GeV;
theModel = new G4TheoFSGenerator("QGSP");
theStringModel = new G4QGSModel< G4QGSParticipants >;
theStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation);
theStringDecay = new G4ExcitedStringDecay(theQGSM = new G4QGSMFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetHighEnergyGenerator(theStringModel);
@@ -75,7 +78,7 @@ G4QGSPPiKBuilder(G4bool quasiElastic, G4bool projectileDiffraction)
theModel->SetTransport(theCascade);
}
G4QGSPPiKBuilder::
~G4QGSPPiKBuilder()
{
@@ -86,6 +89,8 @@ G4QGSPPiKBuilder::
delete theStringDecay;
delete theStringModel;
delete theModel;
delete theQGSM;
delete theHandler;
}
void G4QGSPPiKBuilder::
@@ -0,0 +1,119 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QGSPPionBuilder.cc,v 1.1 2010/11/19 16:21:40 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4QGSPPionBuilder
//
// Author: 2010 G.Folger
// devired from G4QGSPPiKBuilder
//
// Modified:
// 17.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
//
#include "G4QGSPPionBuilder.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4PiNuclearCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4QGSPPionBuilder::
G4QGSPPionBuilder(G4bool quasiElastic, G4bool projectileDiffraction)
{
thePiData = new G4CrossSectionPairGG(new G4PiNuclearCrossSection(), 91*GeV);
theMin = 12*GeV;
theModel = new G4TheoFSGenerator("QGSP");
theStringModel = new G4QGSModel< G4QGSParticipants >;
theStringDecay = new G4ExcitedStringDecay(theQGSM = new G4QGSMFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetHighEnergyGenerator(theStringModel);
if (quasiElastic)
{
theQuasiElastic=new G4QuasiElasticChannel;
theModel->SetQuasiElasticChannel(theQuasiElastic);
} else
{ theQuasiElastic=0;}
if ( projectileDiffraction )
{
theProjectileDiffraction=new G4ProjectileDiffractiveChannel;
theModel->SetProjectileDiffraction(theProjectileDiffraction);
} else
{ theProjectileDiffraction=0;}
theModel->SetTransport(theCascade);
}
G4QGSPPionBuilder::
~G4QGSPPionBuilder()
{
delete theCascade;
delete thePreEquilib;
if ( theQuasiElastic ) delete theQuasiElastic;
if ( theProjectileDiffraction ) delete theProjectileDiffraction;
delete theStringDecay;
delete theStringModel;
delete theModel;
delete theQGSM;
delete theHandler;
}
void G4QGSPPionBuilder::
Build(G4HadronElasticProcess * ) {}
void G4QGSPPionBuilder::
Build(G4PionPlusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
void G4QGSPPionBuilder::
Build(G4PionMinusInelasticProcess * aP)
{
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
aP->AddDataSet(thePiData);
aP->RegisterMe(theModel);
}
// 2002 by J.P. Wellisch
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QGSPProtonBuilder.cc,v 1.5 2009/03/31 11:03:50 vnivanch Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QGSPProtonBuilder.cc,v 1.8 2010/11/18 14:52:22 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
@@ -33,6 +33,8 @@
// Author: 2002 J.P. Wellisch
//
// Modified:
// 17.11.2010 G.Folger, use G4CrossSectionPairGG for relativistic rise of cross
// section at high energies.
// 30.03.2009 V.Ivanchenko create cross section by new
//
//----------------------------------------------------------------------------
@@ -42,6 +44,7 @@
#include "G4ParticleTable.hh"
#include "G4ProcessManager.hh"
#include "G4ProtonInelasticCrossSection.hh"
#include "G4CrossSectionPairGG.hh"
G4QGSPProtonBuilder::
G4QGSPProtonBuilder(G4bool quasiElastic, G4bool projectileDiffraction)
@@ -50,11 +53,11 @@ G4QGSPProtonBuilder(G4bool quasiElastic, G4bool projectileDiffraction)
theModel = new G4TheoFSGenerator("QGSP");
theStringModel = new G4QGSModel< G4QGSParticipants >;
theStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation);
theStringDecay = new G4ExcitedStringDecay(theQGSM = new G4QGSMFragmentation);
theStringModel->SetFragmentationModel(theStringDecay);
theCascade = new G4GeneratorPrecompoundInterface;
thePreEquilib = new G4PreCompoundModel(new G4ExcitationHandler);
thePreEquilib = new G4PreCompoundModel(theHandler = new G4ExcitationHandler);
theCascade->SetDeExcitation(thePreEquilib);
theModel->SetTransport(theCascade);
@@ -77,7 +80,8 @@ void G4QGSPProtonBuilder::
Build(G4ProtonInelasticProcess * aP)
{
// G4cout << "adding inelastic Proton in QGSP" << G4endl;
aP->AddDataSet(new G4ProtonInelasticCrossSection());
aP->AddDataSet(new G4CrossSectionPairGG(
new G4ProtonInelasticCrossSection(), 91*GeV));
theModel->SetMinEnergy(theMin);
theModel->SetMaxEnergy(100*TeV);
aP->RegisterMe(theModel);
@@ -97,6 +101,8 @@ G4QGSPProtonBuilder::~G4QGSPProtonBuilder()
delete theStringDecay;
delete theStringModel;
delete theModel;
delete theQGSM;
delete theHandler;
}
// 2002 by J.P. Wellisch
@@ -0,0 +1,84 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QIonPhysics.cc,v 1.1 2010/06/03 09:31:41 mkossov Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4QIonPhysics
//
// Author: 03/06/2010, M. Kossov
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4QIonPhysics.hh"
G4QIonPhysics::G4QIonPhysics(const G4String& name)
: G4VPhysicsConstructor(name), wasActivated(false){}
void G4QIonPhysics::ConstructProcess()
{
G4ProcessManager* pManager = 0;
fQAAInelasticProcess = new G4QLowEnergy();
fQAAElasticProcess = new G4QIonIonElastic();
// Deuteron
pManager = G4Deuteron::Deuteron()->GetProcessManager();
pManager->AddDiscreteProcess(fQAAInelasticProcess);
pManager->AddDiscreteProcess(fQAAElasticProcess);
// Triton
pManager = G4Triton::Triton()->GetProcessManager();
pManager->AddDiscreteProcess(fQAAInelasticProcess);
pManager->AddDiscreteProcess(fQAAElasticProcess);
// He3
pManager = G4He3::He3()->GetProcessManager();
pManager->AddDiscreteProcess(fQAAInelasticProcess);
pManager->AddDiscreteProcess(fQAAElasticProcess);
// Alpha
pManager = G4Alpha::Alpha()->GetProcessManager();
pManager->AddDiscreteProcess(fQAAInelasticProcess);
pManager->AddDiscreteProcess(fQAAElasticProcess);
// GenericIon
pManager = G4GenericIon::GenericIon()->GetProcessManager();
pManager->AddDiscreteProcess(fQAAInelasticProcess);
pManager->AddDiscreteProcess(fQAAElasticProcess);
wasActivated = true;
}
void G4QIonPhysics::ConstructParticle()
{
// Construct light ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QNeutrinoPhysics.cc,v 1.3 2009/11/30 18:44:49 mkossov Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QNeutrinoPhysics.cc,v 1.4 2010/06/03 14:37:24 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -39,6 +39,15 @@
#include "G4QNeutrinoPhysics.hh"
G4QNeutrinoPhysics::G4QNeutrinoPhysics(G4int):
G4VPhysicsConstructor("CHIPS neutrino-nuclear"), wasBuilt(false), nuEleActivated(false),
nuMuoActivated(false), nuTauActivated(false), nuEleOn(false),
nuMuoOn(false), nuTauOn(false), nuNucBias(1.), inelastic(0)
{
theMessenger = G4QMessenger::GetPointer();
theMessenger->Add(this);
}
G4QNeutrinoPhysics::G4QNeutrinoPhysics(const G4String& name):
G4VPhysicsConstructor(name), wasBuilt(false), nuEleActivated(false),
nuMuoActivated(false), nuTauActivated(false), nuEleOn(false),
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QPhotoNuclearPhysics.cc,v 1.2 2009/11/16 19:12:10 mkossov Exp $
// GEANT4 tag $Name: geant4-09-03 $
// $Id: G4QPhotoNuclearPhysics.cc,v 1.5 2010/06/13 20:41:00 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -40,6 +40,16 @@
#include "G4QPhotoNuclearPhysics.hh"
G4QPhotoNuclearPhysics::G4QPhotoNuclearPhysics(G4int):
G4VPhysicsConstructor("CHIPS photo-nuclear"), wasBuilt(false), SynchRActivated(false),
GamNucActivated(false), EleNucActivated(false), MuoNucActivated(false),
TauNucActivated(false), synchrOn(true), synchrMinGam(227.), gamNucOn(true),
eleNucOn(true), muoNucOn(true), tauNucOn(true), photoNucBias(1.)
{
theMessenger = G4QMessenger::GetPointer();
theMessenger->Add(this);
}
G4QPhotoNuclearPhysics::G4QPhotoNuclearPhysics(const G4String& name):
G4VPhysicsConstructor(name), wasBuilt(false), SynchRActivated(false),
GamNucActivated(false), EleNucActivated(false), MuoNucActivated(false),
@@ -193,6 +203,7 @@ void G4QPhotoNuclearPhysics::BuildSynchRad()
if(SynchRActivated) return;
SynchRActivated = true;
synchrad = new G4QSynchRad();
theParticleIterator->reset();
while( (*theParticleIterator)() )
{
G4ParticleDefinition* particle = theParticleIterator->value();
@@ -23,8 +23,8 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4QStoppingPhysics.cc,v 1.2 2007/04/26 16:03:18 gunter Exp $
// GEANT4 tag $Name: geant4-09-02 $
// $Id: G4QStoppingPhysics.cc,v 1.5 2010/06/03 16:28:39 gunter Exp $
// GEANT4 tag $Name: geant4-09-04-beta-01 $
//
//---------------------------------------------------------------------------
//
@@ -49,6 +49,13 @@
#include "G4BaryonConstructor.hh"
#include "G4MuonMinus.hh"
G4QStoppingPhysics::G4QStoppingPhysics(G4int ver)
: G4VPhysicsConstructor("stopping"), verbose(ver), wasActivated(false) ,
useMuonMinusCaptureAtRest(true)
{
if(verbose > 1) G4cout << "### G4QStoppingPhysics" << G4endl;
}
G4QStoppingPhysics::G4QStoppingPhysics(const G4String& name, G4int ver,
G4bool UseMuonMinusCapture)
: G4VPhysicsConstructor(name), verbose(ver), wasActivated(false) ,
@@ -35,6 +35,10 @@
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4RadioactiveDecayPhysics::G4RadioactiveDecayPhysics(G4int)
: G4VPhysicsConstructor("G4RadioactiveDecay"), theRadioactiveDecay(0)
{}
G4RadioactiveDecayPhysics::G4RadioactiveDecayPhysics(const G4String& name)
: G4VPhysicsConstructor(name), theRadioactiveDecay(0)
{}
@@ -0,0 +1,46 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4VKaonBuilder.cc,v 1.1 2010/11/19 16:21:40 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4VKaonBuilder
//
// Author: 2010 G.Folger
// devired from G4VPiKBuilder
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4VKaonBuilder.hh"
G4VKaonBuilder::G4VKaonBuilder()
{}
G4VKaonBuilder::~G4VKaonBuilder()
{}
@@ -0,0 +1,46 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4VPionBuilder.cc,v 1.1 2010/11/19 16:21:40 gunter Exp $
// GEANT4 tag $Name: geant4-09-04 $
//
//---------------------------------------------------------------------------
//
// ClassName: G4VPionBuilder
//
// Author: 2010 G.Folger
// devired from G4VPiKBuilder
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4VPionBuilder.hh"
G4VPionBuilder::G4VPionBuilder()
{}
G4VPionBuilder::~G4VPionBuilder()
{}