Import Geant4 10.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2016-06-30 14:12:05 +02:00
parent a654a7ab1f
commit 4ec577e5c4
2021 changed files with 100995 additions and 78277 deletions
@@ -1,4 +1,4 @@
$Id: History 94087 2015-11-05 15:10:09Z gcosmo $
$Id: History 97177 2016-05-27 12:44:22Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,20 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
26-May-2016, A. Ribon (phys-ctor-hinelastic-V10-02-02)
- G4HadronPhysicsQGSP_BIC_AllHP : treat only proton with ParticleHP in
this class, and move the others (deuteron, triton, 3He, alpha) to
the new class G4IonPhysicsPHP.
06-Apr-2016, A. Ribon (phys-ctor-hinelastic-V10-02-01)
- G4HadronPhysicsFTFP_BERT_ATL : created new constructor for ATLAS, similar
to G4HadronPhysicsFTFP_BERT but with the transition between BERT and FTFP
in the energy region [9, 12] GeV.
04-Dec-2015, A. Ribon (phys-ctor-hinelastic-V10-02-00)
- G4HadronPhysicsQGSP_BIC_AllHP : activate ParticleHP for deuteron,
triton, He3 and alpha.
05-Nov-2015, A. Ribon (phys-ctor-hinelastic-V10-01-05)
- Removed neutron_hp/
@@ -0,0 +1,109 @@
//
// ********************************************************************
// * 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:$
//
//---------------------------------------------------------------------------
// Author: Alberto Ribon
// Date: April 2016
//
// Hadron physics for the new physics list FTFP_BERT_ATL.
// This is a modified version of the FTFP_BERT hadron physics for ATLAS.
// The hadron physics of FTFP_BERT_ATL has the transition between Bertini
// (BERT) intra-nuclear cascade model and Fritiof (FTF) string model in the
// energy region [9, 12] GeV (instead of [4, 5] GeV as in FTFP_BERT).
//---------------------------------------------------------------------------
//
#ifndef G4HadronPhysicsFTFP_BERT_ATL_h
#define G4HadronPhysicsFTFP_BERT_ATL_h 1
#include "globals.hh"
#include "G4ios.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4PiKBuilder.hh"
#include "G4BertiniPiKBuilder.hh"
#include "G4FTFPPiKBuilder.hh"
#include "G4ProtonBuilder.hh"
#include "G4BertiniProtonBuilder.hh"
#include "G4FTFPNeutronBuilder.hh"
#include "G4FTFPProtonBuilder.hh"
#include "G4NeutronBuilder.hh"
#include "G4BertiniNeutronBuilder.hh"
#include "G4FTFPNeutronBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
class G4ComponentGGHadronNucleusXsc;
class G4HadronPhysicsFTFP_BERT_ATL : public G4VPhysicsConstructor
{
public:
G4HadronPhysicsFTFP_BERT_ATL(G4int verbose =1);
G4HadronPhysicsFTFP_BERT_ATL(const G4String& name, G4bool quasiElastic=false);
virtual ~G4HadronPhysicsFTFP_BERT_ATL();
public:
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
void CreateModels();
G4bool QuasiElastic;
// Simplify handling of TLS data, encapsulate everyhing in a structure
struct ThreadPrivate {
G4NeutronBuilder * theNeutrons;
G4BertiniNeutronBuilder * theBertiniNeutron;
G4FTFPNeutronBuilder * theFTFPNeutron;
G4PiKBuilder * thePiK;
G4BertiniPiKBuilder * theBertiniPiK;
G4FTFPPiKBuilder * theFTFPPiK;
G4ProtonBuilder * thePro;
G4BertiniProtonBuilder * theBertiniPro;
G4FTFPProtonBuilder * theFTFPPro;
G4HyperonFTFPBuilder * theHyperon;
G4AntiBarionBuilder * theAntiBaryon;
G4FTFPAntiBarionBuilder * theFTFPAntiBaryon;
G4ComponentGGHadronNucleusXsc * xsKaon;
G4VCrossSectionDataSet * xsNeutronInelasticXS;
G4VCrossSectionDataSet * xsNeutronCaptureXS;
};
static G4ThreadLocal ThreadPrivate* tpdata;
};
#endif
@@ -54,18 +54,6 @@
#include "G4BinaryNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4DeuteronBuilder.hh"
#include "G4DeuteronPHPBuilder.hh"
#include "G4TritonBuilder.hh"
#include "G4TritonPHPBuilder.hh"
#include "G4He3Builder.hh"
#include "G4He3PHPBuilder.hh"
#include "G4AlphaBuilder.hh"
#include "G4AlphaPHPBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
@@ -105,22 +93,6 @@ class G4HadronPhysicsQGSP_BIC_AllHP : public G4VPhysicsConstructor
G4BinaryProtonBuilder * theBinaryProton;
G4ProtonPHPBuilder * thePHPProton;
G4DeuteronBuilder * theDeuteronB;
G4DeuteronPHPBuilder * thePHPDeuteron;
G4BinaryDeuteronBuilder * theBinaryDeuteron;
G4TritonBuilder * theTritonB;
G4TritonPHPBuilder * thePHPTriton;
G4BinaryTritonBuilder * theBinaryTriton;
G4He3Builder * theHe3B;
G4He3PHPBuilder * thePHPHe3;
G4BinaryHe3Builder * theBinaryHe3;
G4AlphaBuilder * theAlphaB;
G4AlphaPHPBuilder * thePHPAlpha;
G4BinaryAlphaBuilder * theBinaryAlpha;
G4HyperonFTFPBuilder * theHyperon;
G4AntiBarionBuilder * theAntiBaryon;
@@ -11,7 +11,7 @@
#
# Generated on : 10/01/2013
#
# $Id: sources.cmake 94087 2015-11-05 15:10:09Z gcosmo $
# $Id: sources.cmake 96328 2016-04-06 15:52:31Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -92,6 +92,7 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_hinelastic
G4HadronPhysicsFTFP_BERT.hh
G4HadronPhysicsFTFP_BERT_HP.hh
G4HadronPhysicsFTFP_BERT_TRV.hh
G4HadronPhysicsFTFP_BERT_ATL.hh
G4HadronPhysicsNuBeam.hh
G4HadronPhysicsQGS_BIC.hh
G4HadronPhysicsQGSP_BERT.hh
@@ -109,6 +110,7 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_hinelastic
G4HadronPhysicsFTFP_BERT.cc
G4HadronPhysicsFTFP_BERT_HP.cc
G4HadronPhysicsFTFP_BERT_TRV.cc
G4HadronPhysicsFTFP_BERT_ATL.cc
G4HadronPhysicsNuBeam.cc
G4HadronPhysicsQGS_BIC.cc
G4HadronPhysicsQGSP_BERT.cc
@@ -0,0 +1,222 @@
//
// ********************************************************************
// * 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:$
//
//---------------------------------------------------------------------------
// Author: Alberto Ribon
// Date: April 2016
//
// Hadron physics for the new physics list FTFP_BERT_ATL.
// This is a modified version of the FTFP_BERT hadron physics for ATLAS.
// The hadron physics of FTFP_BERT_ATL has the transition between Bertini
// (BERT) intra-nuclear cascade model and Fritiof (FTF) string model in the
// energy region [9, 12] GeV (instead of [4, 5] GeV as in FTFP_BERT).
//---------------------------------------------------------------------------
//
#include <iomanip>
#include "G4HadronPhysicsFTFP_BERT_ATL.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4ShortLivedConstructor.hh"
#include "G4ComponentGGHadronNucleusXsc.hh"
#include "G4CrossSectionInelastic.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronRadCapture.hh"
#include "G4NeutronInelasticXS.hh"
#include "G4NeutronCaptureXS.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4PhysListUtil.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronPhysicsFTFP_BERT_ATL);
G4ThreadLocal G4HadronPhysicsFTFP_BERT_ATL::ThreadPrivate* G4HadronPhysicsFTFP_BERT_ATL::tpdata=0;
G4HadronPhysicsFTFP_BERT_ATL::G4HadronPhysicsFTFP_BERT_ATL(G4int)
: G4VPhysicsConstructor("hInelastic FTFP_BERT_ATL")
/* , theNeutrons(0)
, theBertiniNeutron(0)
, theFTFPNeutron(0)
, thePiK(0)
, theBertiniPiK(0)
, theFTFPPiK(0)
, thePro(0)
, theBertiniPro(0)
, theFTFPPro(0)
, theHyperon(0)
, theAntiBaryon(0)
, theFTFPAntiBaryon(0) */
, QuasiElastic(false)
/*, xsKaon(0)
, xsNeutronInelasticXS(0)
, xsNeutronCaptureXS(0)*/
{}
G4HadronPhysicsFTFP_BERT_ATL::G4HadronPhysicsFTFP_BERT_ATL(const G4String& name, G4bool quasiElastic)
: G4VPhysicsConstructor(name)
/* , theNeutrons(0)
, theBertiniNeutron(0)
, theFTFPNeutron(0)
, thePiK(0)
, theBertiniPiK(0)
, theFTFPPiK(0)
, thePro(0)
, theBertiniPro(0)
, theFTFPPro(0)
, theHyperon(0)
, theAntiBaryon(0)
, theFTFPAntiBaryon(0)*/
, QuasiElastic(quasiElastic)
/*, xsKaonMinus(0)
, xsNeutronInelasticXS(0)
, xsNeutronCaptureXS(0)*/
{}
void G4HadronPhysicsFTFP_BERT_ATL::CreateModels()
{
G4double minFTFP = 9.0 * GeV;
G4double maxBERT = 12.0 * GeV;
G4cout << " FTFP_BERT_ATL : new threshold between BERT and FTFP"
<< " is over the interval " << minFTFP/GeV << " to " << maxBERT/GeV
<< " GeV." << G4endl;
QuasiElastic= false;
tpdata->theNeutrons=new G4NeutronBuilder;
tpdata->theNeutrons->RegisterMe(tpdata->theFTFPNeutron=new G4FTFPNeutronBuilder(QuasiElastic));
tpdata->theFTFPNeutron->SetMinEnergy(minFTFP);
tpdata->theNeutrons->RegisterMe(tpdata->theBertiniNeutron=new G4BertiniNeutronBuilder);
tpdata->theBertiniNeutron->SetMinEnergy(0.0*GeV);
tpdata->theBertiniNeutron->SetMaxEnergy(maxBERT);
tpdata->thePro=new G4ProtonBuilder;
tpdata->thePro->RegisterMe(tpdata->theFTFPPro=new G4FTFPProtonBuilder(QuasiElastic));
tpdata->theFTFPPro->SetMinEnergy(minFTFP);
tpdata->thePro->RegisterMe(tpdata->theBertiniPro=new G4BertiniProtonBuilder);
tpdata->theBertiniPro->SetMaxEnergy(maxBERT);
tpdata->thePiK=new G4PiKBuilder;
tpdata->thePiK->RegisterMe(tpdata->theFTFPPiK=new G4FTFPPiKBuilder(QuasiElastic));
tpdata->theFTFPPiK->SetMinEnergy(minFTFP);
tpdata->thePiK->RegisterMe(tpdata->theBertiniPiK=new G4BertiniPiKBuilder);
tpdata->theBertiniPiK->SetMaxEnergy(maxBERT);
tpdata->theHyperon=new G4HyperonFTFPBuilder;
tpdata->theAntiBaryon=new G4AntiBarionBuilder;
tpdata->theAntiBaryon->RegisterMe(tpdata->theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(QuasiElastic));
}
G4HadronPhysicsFTFP_BERT_ATL::~G4HadronPhysicsFTFP_BERT_ATL()
{
if (!tpdata) return;
delete tpdata->theNeutrons;
delete tpdata->theBertiniNeutron;
delete tpdata->theFTFPNeutron;
delete tpdata->thePiK;
delete tpdata->theBertiniPiK;
delete tpdata->theFTFPPiK;
delete tpdata->thePro;
delete tpdata->theBertiniPro;
delete tpdata->theFTFPPro;
delete tpdata->theHyperon;
delete tpdata->theAntiBaryon;
delete tpdata->theFTFPAntiBaryon;
//Note that here we need to set to 0 the pointer
//since tpdata is static and if thread are "reused"
//it can be problematic
delete tpdata; tpdata = 0;
}
void G4HadronPhysicsFTFP_BERT_ATL::ConstructParticle()
{
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
G4ShortLivedConstructor pShortLivedConstructor;
pShortLivedConstructor.ConstructParticle();
}
#include "G4ProcessManager.hh"
void G4HadronPhysicsFTFP_BERT_ATL::ConstructProcess()
{
if ( tpdata == 0 ) tpdata = new ThreadPrivate;
CreateModels();
tpdata->theNeutrons->Build();
tpdata->thePro->Build();
tpdata->thePiK->Build();
// --- Kaons ---
tpdata->xsKaon = new G4ComponentGGHadronNucleusXsc();
G4VCrossSectionDataSet * kaonxs = new G4CrossSectionInelastic(tpdata->xsKaon);
G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(kaonxs);
G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(kaonxs);
G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(kaonxs);
G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(kaonxs);
tpdata->theHyperon->Build();
tpdata->theAntiBaryon->Build();
// --- Neutrons ---
tpdata->xsNeutronInelasticXS = (G4NeutronInelasticXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4NeutronInelasticXS::Default_Name());
G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(tpdata->xsNeutronInelasticXS);
G4HadronicProcess* capture = 0;
G4ProcessManager* pmanager = G4Neutron::Neutron()->GetProcessManager();
G4ProcessVector* pv = pmanager->GetProcessList();
for ( size_t i=0; i < static_cast<size_t>(pv->size()); ++i ) {
if ( fCapture == ((*pv)[i])->GetProcessSubType() ) {
capture = static_cast<G4HadronicProcess*>((*pv)[i]);
}
}
if ( ! capture ) {
capture = new G4HadronCaptureProcess("nCapture");
pmanager->AddDiscreteProcess(capture);
}
tpdata->xsNeutronCaptureXS = (G4NeutronCaptureXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4NeutronCaptureXS::Default_Name());
capture->AddDataSet(tpdata->xsNeutronCaptureXS);
capture->RegisterMe(new G4NeutronRadCapture());
}
@@ -29,14 +29,9 @@
//
// ClassName: G4HadronPhysicsQGSP_BIC_AllHP
//
// Author: 2006 G.Folger
// Author: 2013 P. Arce
//
// Based on G4HadronPhysicsQGSP_BIC
//
// Modified:
// 25.04.2007 G.Folger: Add code for quasielastic
// 31.10.2012 A.Ribon: Use G4MiscBuilder
// 19.03.2013 A.Ribon: Replace LEP with FTFP and BERT
// based on G4HadronPhysicsQGSP_BIC_HP
//
//----------------------------------------------------------------------------
//
@@ -160,40 +155,6 @@ void G4HadronPhysicsQGSP_BIC_AllHP::CreateModels()
tpdata->thePHPProton->SetMinEnergy(0.*MeV);
tpdata->thePHPProton->SetMaxEnergy(200*MeV);
//ParticleHP
tpdata->theDeuteronB=new G4DeuteronBuilder;
tpdata->thePHPDeuteron=new G4DeuteronPHPBuilder;
tpdata->theDeuteronB->RegisterMe(tpdata->thePHPDeuteron);
tpdata->thePHPDeuteron->SetMaxEnergy(200*MeV);
tpdata->theDeuteronB->RegisterMe(tpdata->theBinaryDeuteron=new G4BinaryDeuteronBuilder);
tpdata->theBinaryDeuteron->SetMaxEnergy(maxBIC);
//ParticleHP
tpdata->theTritonB=new G4TritonBuilder;
tpdata->thePHPTriton=new G4TritonPHPBuilder;
tpdata->theTritonB->RegisterMe(tpdata->thePHPTriton);
tpdata->thePHPTriton->SetMaxEnergy(200*MeV);
tpdata->theTritonB->RegisterMe(tpdata->theBinaryTriton=new G4BinaryTritonBuilder);
tpdata->theBinaryTriton->SetMaxEnergy(maxBIC);
//ParticleHP
tpdata->theHe3B=new G4He3Builder;
tpdata->thePHPHe3=new G4He3PHPBuilder;
tpdata->theHe3B->RegisterMe(tpdata->thePHPHe3);
tpdata->thePHPHe3->SetMaxEnergy(200*MeV);
tpdata->theHe3B->RegisterMe(tpdata->theBinaryHe3=new G4BinaryHe3Builder);
tpdata->theBinaryHe3->SetMaxEnergy(maxBIC);
//ParticleHP
tpdata->theAlphaB=new G4AlphaBuilder;
tpdata->thePHPAlpha=new G4AlphaPHPBuilder;
tpdata->theAlphaB->RegisterMe(tpdata->thePHPAlpha);
tpdata->thePHPAlpha->SetMaxEnergy(200*MeV);
tpdata->theAlphaB->RegisterMe(tpdata->theBinaryAlpha=new G4BinaryAlphaBuilder);
tpdata->theBinaryAlpha->SetMaxEnergy(maxBIC);
tpdata->thePiKB=new G4PiKBuilder;
tpdata->thePiKB->RegisterMe(tpdata->theQGSPPiK=new G4QGSPPiKBuilder(quasiElasticQGS));
tpdata->thePiKB->RegisterMe(tpdata->theFTFPPiK=new G4FTFPPiKBuilder(quasiElasticFTF));
@@ -214,10 +175,6 @@ G4HadronPhysicsQGSP_BIC_AllHP::~G4HadronPhysicsQGSP_BIC_AllHP()
//ParticleHP
delete tpdata->thePHPNeutron;
delete tpdata->thePHPProton;
delete tpdata->thePHPDeuteron;
delete tpdata->thePHPTriton;
delete tpdata->thePHPHe3;
delete tpdata->thePHPAlpha;
delete tpdata->theBinaryNeutron;
delete tpdata->theQGSPNeutron;
delete tpdata->theFTFPNeutron;
@@ -247,9 +204,6 @@ void G4HadronPhysicsQGSP_BIC_AllHP::ConstructParticle()
G4ShortLivedConstructor pShortLivedConstructor;
pShortLivedConstructor.ConstructParticle();
G4IonConstructor pIonConstructor;
pIonConstructor.ConstructParticle();
}
#include "G4ProcessManager.hh"