// //////////////////////////////////////////////////////////////////////////// // // // Title: Ion Physics for Simple and Fast Physics List // // Date: 22 March 2005 // // Author: D.H. Wright (SLAC) // // // // 080430 Modified by T. Koi (SLAC) // // // //////////////////////////////////////////////////////////////////////////// // #include "SFIonPhysics.hh" #include "G4ParticleTable.hh" #include "G4ProcessManager.hh" #include "G4IonConstructor.hh" // processes #include "G4MultipleScattering.hh" #include "G4hIonisation.hh" #include "G4ionIonisation.hh" #include "G4HadronElasticProcess.hh" #include "G4HadronInelasticProcess.hh" #include "G4DeuteronInelasticProcess.hh" #include "G4TritonInelasticProcess.hh" #include "G4AlphaInelasticProcess.hh" // models #include "G4LElastic.hh" #include "G4LEAlphaInelastic.hh" #include "G4LEDeuteronInelastic.hh" #include "G4LETritonInelastic.hh" // cross sections SFIonPhysics::SFIonPhysics(const G4String& name) : G4VPhysicsConstructor(name) {;} SFIonPhysics::~SFIonPhysics() {;} void SFIonPhysics::ConstructParticle() { // Construct light ions (d, t, 3He, alpha, and generic ion) G4IonConstructor ionConstruct; ionConstruct.ConstructParticle(); } void SFIonPhysics::ConstructProcess() { // Hadronic Elastic Process and Model (for all ions except generic ion) G4HadronElasticProcess* elasticProcess = new G4HadronElasticProcess(); G4LElastic* elasticModel = new G4LElastic(); elasticProcess->RegisterMe(elasticModel); // Hadronic inelastic models G4ProcessManager * pManager = 0; /////////////////// // // // Deuteron // // // /////////////////// pManager = G4Deuteron::Deuteron()->GetProcessManager(); // EM processes pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1); pManager->AddProcess(new G4hIonisation(), -1, 2, 2); // hadron elastic pManager->AddDiscreteProcess(elasticProcess); // hadron inelastic G4DeuteronInelasticProcess* dinelProc = new G4DeuteronInelasticProcess(); dinelProc->RegisterMe( new G4LEDeuteronInelastic() ); pManager->AddDiscreteProcess(dinelProc); /////////////////// // // // Triton // // // /////////////////// pManager = G4Triton::Triton()->GetProcessManager(); // EM processes pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1); pManager->AddProcess(new G4hIonisation(), -1, 2, 2); // hadron elastic pManager->AddDiscreteProcess(elasticProcess); // hadron inelastic G4TritonInelasticProcess* tinelProc = new G4TritonInelasticProcess(); tinelProc->RegisterMe( new G4LETritonInelastic() ); pManager->AddDiscreteProcess(tinelProc); /////////////////// // // // 3He // // // /////////////////// pManager = G4He3::He3()->GetProcessManager(); // EM processes pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1); pManager->AddProcess(new G4ionIonisation(), -1, 2, 2); // hadron inelastic /////////////////// // // // Alpha // // // /////////////////// pManager = G4Alpha::Alpha()->GetProcessManager(); // EM processes pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1); pManager->AddProcess(new G4ionIonisation(), -1, 2, 2); // hadron elastic pManager->AddDiscreteProcess(elasticProcess); // hadron inelastic G4AlphaInelasticProcess* ainelProc = new G4AlphaInelasticProcess(); ainelProc->RegisterMe( new G4LEAlphaInelastic() ); pManager->AddDiscreteProcess(ainelProc); /////////////////// // // // generic ion // // // /////////////////// pManager = G4GenericIon::GenericIon()->GetProcessManager(); // EM processes for generic ion pManager->AddProcess(new G4MultipleScattering(), -1, 1, 1); pManager->AddProcess(new G4ionIonisation(), -1, 2, 2); // hadron inelastic }