G4IonINCLXXPhysics.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00028 //---------------------------------------------------------------------------
00029 //
00030 // ClassName:   G4IonINCLXXPhysics
00031 //
00032 // Author:      D. Mancusi
00033 //
00034 // Modified:
00035 //
00036 //----------------------------------------------------------------------------
00037 //
00038 
00039 #include "G4IonINCLXXPhysics.hh"
00040 
00041 #include "G4SystemOfUnits.hh"
00042 #include "G4DeuteronInelasticProcess.hh"
00043 #include "G4TritonInelasticProcess.hh"
00044 #include "G4AlphaInelasticProcess.hh"
00045 #include "G4HadronInelasticProcess.hh"
00046 
00047 #include "G4INCLXXInterface.hh"
00048 #include "G4TripathiCrossSection.hh"
00049 #include "G4TripathiLightCrossSection.hh"
00050 #include "G4IonsShenCrossSection.hh"
00051 
00052 #include "G4ParticleDefinition.hh"
00053 #include "G4ParticleTable.hh"
00054 #include "G4ProcessManager.hh"
00055 
00056 // Nuclei
00057 #include "G4IonConstructor.hh"
00058 #include "G4BuilderType.hh"
00059 
00060 // factory
00061 #include "G4PhysicsConstructorFactory.hh"
00062 //
00063 G4_DECLARE_PHYSCONSTR_FACTORY(G4IonINCLXXPhysics);
00064 
00065 
00066 G4IonINCLXXPhysics::G4IonINCLXXPhysics(G4int ver) :
00067   G4VPhysicsConstructor("IonINCLXX"),
00068   fINCLXXIons(NULL),
00069   fTripathi(NULL),
00070   fTripathiLight(NULL),
00071   fShen(NULL),
00072   fLEDModel(NULL),
00073   fLETModel(NULL),
00074   fLEAModel(NULL),
00075   verbose(ver), wasActivated(false)
00076 {
00077   // INCLXX light ion maximum energy is 3.0 GeV/nucleon
00078   emax_d     = 2 * 3.0 * GeV;
00079   emax_t     = 3 * 3.0 * GeV;
00080   emax_he3   = 3 * 3.0 * GeV;
00081   emax_alpha = 4 * 3.0 * GeV;
00082   emax       = 16 * 3.0 * GeV;
00083   emaxLHEP   = 1.*TeV;
00084   emin       = 0.*MeV;
00085   SetPhysicsType(bIons);
00086   if(verbose > 1) G4cout << "### G4IonINCLXXPhysics" << G4endl;
00087 }
00088 
00089 G4IonINCLXXPhysics::G4IonINCLXXPhysics(const G4String& name, 
00090                                                      G4int ver)
00091   :  G4VPhysicsConstructor(name),
00092   fINCLXXIons(NULL),
00093   fTripathi(NULL),
00094   fTripathiLight(NULL),
00095   fShen(NULL),
00096   fLEDModel(NULL),
00097   fLETModel(NULL),
00098   fLEAModel(NULL),
00099   verbose(ver), wasActivated(false)
00100 {
00101   // INCLXX light ion maximum energy is 3.0 GeV/nucleon
00102   emax_d     = 2 * 3.0 * GeV;
00103   emax_t     = 3 * 3.0 * GeV;
00104   emax_he3   = 3 * 3.0 * GeV;
00105   emax_alpha = 4 * 3.0 * GeV;
00106   emax       = 16 * 3.0 * GeV;
00107   emaxLHEP   = 1.*TeV;
00108   emin       = 0.*MeV;
00109   SetPhysicsType(bIons);
00110   if(verbose > 1) G4cout << "### G4IonINCLXXPhysics" << G4endl;
00111 }
00112 
00113 G4IonINCLXXPhysics::~G4IonINCLXXPhysics()
00114 {
00115   if(wasActivated) {
00116     delete fTripathi;
00117     delete fTripathiLight;
00118     delete fShen;
00119     delete fLEDModel;
00120     delete fLETModel;
00121     delete fLEAModel;
00122     G4int i;
00123     G4int n = p_list.size();
00124     for(i=0; i<n; i++) {delete p_list[i];}
00125     delete fINCLXXIons;
00126   }
00127 }
00128 
00129 void G4IonINCLXXPhysics::ConstructProcess()
00130 {
00131   if(wasActivated) return;
00132   wasActivated = true;
00133 
00134   fINCLXXIons= new G4INCLXXInterface();
00135   fShen = new G4IonsShenCrossSection;
00136   fTripathi = new G4TripathiCrossSection;
00137   fTripathiLight = new G4TripathiLightCrossSection;
00138 
00139   fLEDModel = new G4LEDeuteronInelastic();
00140   fLETModel = new G4LETritonInelastic();
00141   fLEAModel = new G4LEAlphaInelastic();
00142 
00143   AddProcess("dInelastic", G4Deuteron::Deuteron(), fINCLXXIons, fLEDModel, emax_d);
00144   AddProcess("tInelastic",G4Triton::Triton(),  fINCLXXIons, fLETModel, emax_t);
00145   AddProcess("He3Inelastic",G4He3::He3(),  fINCLXXIons, 0, emax_he3);
00146   AddProcess("alphaInelastic", G4Alpha::Alpha(),  fINCLXXIons, fLEAModel, emax_alpha);
00147   AddProcess("ionInelastic",G4GenericIon::GenericIon(),  fINCLXXIons, 0, emax);
00148 }
00149 
00150 void G4IonINCLXXPhysics::AddProcess(const G4String& name,
00151                                            G4ParticleDefinition* p, 
00152                                            G4HadronicInteraction* hmodel,
00153                                            G4HadronicInteraction* lmodel,
00154                                       const G4double inclxxEnergyUpperLimit = 3.0 * GeV)
00155 {
00156   G4HadronInelasticProcess* hadi = new G4HadronInelasticProcess(name, p);
00157   p_list.push_back(hadi);
00158   G4ProcessManager* pManager = p->GetProcessManager();
00159   pManager->AddDiscreteProcess(hadi);
00160   hadi->AddDataSet(fShen);
00161   hadi->AddDataSet(fTripathi);
00162   hadi->AddDataSet(fTripathiLight);
00163   hmodel->SetMinEnergy(emin);
00164   hmodel->SetMaxEnergy(inclxxEnergyUpperLimit);
00165   hadi->RegisterMe(hmodel);
00166   if(lmodel) {
00167     lmodel->SetMinEnergy(inclxxEnergyUpperLimit - MeV);
00168     lmodel->SetMaxEnergy(emaxLHEP);
00169     hadi->RegisterMe(lmodel);
00170   }
00171   if(verbose > 1) {
00172     G4cout << "Register " << hadi->GetProcessName()
00173            << " for " << p->GetParticleName()
00174            << " INCLXX/G4DeexcitationHandler for E(MeV)= " << emin << " - " << inclxxEnergyUpperLimit;
00175     if(lmodel) {
00176       G4cout  << " LHEP for E(MeV)= " << inclxxEnergyUpperLimit-MeV << " - " << emaxLHEP;
00177     }
00178     G4cout << G4endl;
00179   }
00180 }
00181 
00182 void G4IonINCLXXPhysics::ConstructParticle()
00183 {
00184   //  Construct light ions
00185   G4IonConstructor pConstructor;
00186   pConstructor.ConstructParticle();  
00187 }

Generated on Mon May 27 17:48:39 2013 for Geant4 by  doxygen 1.4.7