Difference between revisions of "Physics List"

From New IAC Wiki
Jump to navigation Jump to search
(Created page with '// // ******************************************************************** // * DISCLAIMER * // * ...')
 
(Blanked the page)
 
Line 1: Line 1:
//
 
// ********************************************************************
 
// * DISCLAIMER                                                      *
 
// *                                                                  *
 
// * The following disclaimer summarizes all the specific disclaimers *
 
// * of contributors to this software. The specific disclaimers,which *
 
// * govern, are listed with their locations in:                      *
 
// *  http://cern.ch/geant4/license                                  *
 
// *                                                                  *
 
// * 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.                                                            *
 
// *                                                                  *
 
// * This  code  implementation is the  intellectual property  of the *
 
// * GEANT4 collaboration.                                            *
 
// * By copying,  distributing  or modifying the Program (or any work *
 
// * based  on  the Program)  you indicate  your  acceptance of  this *
 
// * statement, and all its terms.                                    *
 
// ********************************************************************
 
//
 
//
 
// $Id: BetheBlochPhysicsList.cc,v 1.21 2005/05/30 16:20:23 maire Exp $
 
// GEANT4 tag $Name: geant4-08-00-patch-01 $
 
//
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
  
#include "globals.hh"
 
#include "BetheBlochPhysicsList.hh"
 
 
#include "G4ProcessManager.hh"
 
#include "G4ParticleTypes.hh"
 
#include "G4IonConstructor.hh"
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
BetheBlochPhysicsList::BetheBlochPhysicsList():  G4VUserPhysicsList()
 
{
 
  defaultCutValue = 1.0*cm;
 
  SetVerboseLevel(1);
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
BetheBlochPhysicsList::~BetheBlochPhysicsList()
 
{}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
void BetheBlochPhysicsList::ConstructParticle()
 
{
 
  // In this method, static member functions should be called
 
  // for all particles which you want to use.
 
  // This ensures that objects of these particle types will be
 
  // created in the program.
 
 
  ConstructBosons();
 
  ConstructLeptons();
 
  ConstructMesons();
 
  ConstructBaryons();
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
void BetheBlochPhysicsList::ConstructBosons()
 
{
 
  // pseudo-particles
 
  G4Geantino::GeantinoDefinition();
 
  G4ChargedGeantino::ChargedGeantinoDefinition();
 
 
  // gamma
 
  G4Gamma::GammaDefinition();
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
void BetheBlochPhysicsList::ConstructLeptons()
 
{
 
  // leptons
 
  //  e+/-
 
  G4Electron::ElectronDefinition();
 
  G4Positron::PositronDefinition();
 
  // mu+/-
 
  G4MuonPlus::MuonPlusDefinition();
 
  G4MuonMinus::MuonMinusDefinition();
 
  // nu_e
 
  G4NeutrinoE::NeutrinoEDefinition();
 
  G4AntiNeutrinoE::AntiNeutrinoEDefinition();
 
  // nu_mu
 
  G4NeutrinoMu::NeutrinoMuDefinition();
 
  G4AntiNeutrinoMu::AntiNeutrinoMuDefinition();
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
void BetheBlochPhysicsList::ConstructMesons()
 
{
 
  //  mesons
 
  //    light mesons
 
  G4PionPlus::PionPlusDefinition();
 
  G4PionMinus::PionMinusDefinition();
 
  G4PionZero::PionZeroDefinition();
 
  G4Eta::EtaDefinition();
 
  G4EtaPrime::EtaPrimeDefinition();
 
  G4KaonPlus::KaonPlusDefinition();
 
  G4KaonMinus::KaonMinusDefinition();
 
  G4KaonZero::KaonZeroDefinition();
 
  G4AntiKaonZero::AntiKaonZeroDefinition();
 
  G4KaonZeroLong::KaonZeroLongDefinition();
 
  G4KaonZeroShort::KaonZeroShortDefinition();
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
void BetheBlochPhysicsList::ConstructBaryons()
 
{
 
  //  barions
 
  G4Proton::ProtonDefinition();
 
  G4AntiProton::AntiProtonDefinition();
 
 
  G4Neutron::NeutronDefinition();
 
  G4AntiNeutron::AntiNeutronDefinition();
 
 
  G4IonConstructor ion;
 
  ion.ConstructParticle();
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
void BetheBlochPhysicsList::ConstructProcess()
 
{
 
  AddTransportation();
 
  ConstructEM();
 
  //ConstructPN();
 
  ConstructGeneral();
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
#include "G4ComptonScattering.hh"
 
#include "G4GammaConversion.hh"
 
#include "G4PhotoElectricEffect.hh"
 
 
#include "G4MultipleScattering.hh"
 
 
#include "G4eIonisation.hh"
 
#include "G4eBremsstrahlung.hh"
 
#include "G4eplusAnnihilation.hh"
 
 
#include "G4MuIonisation.hh"
 
#include "G4MuBremsstrahlung.hh"
 
#include "G4MuPairProduction.hh"
 
 
#include "G4hIonisation.hh"
 
 
//#include "G4PenelopeIonisation.hh"
 
 
//#include "G4ionIonisation.hh"
 
 
//#include "G4StepLimiter.hh"
 
//#include "G4UserSpecialCuts.hh"
 
 
// this include file defindes the class  G4HadronElasticProcess
 
 
#include "G4NeutronHPorLElastic.hh"
 
//#include "G4NeutronHPElastic.hh"
 
//#include "G4LElastic.hh"
 
 
 
// hadron elastic scattering processes
 
//#include "G4ElasticHadrNucleusHE.hh"  /* for high energy elestic scattering */
 
//#include "G4LElastic.hh"
 
//#include "G4NeutronHPElastic.hh"
 
 
#include "G4GammaNuclearReaction.hh"
 
#include "G4PhotoNuclearProcess.hh"
 
 
#include "G4StepLimiter.hh"
 
#include "G4UserSpecialCuts.hh"
 
 
#include <G4PhotoNuclearCrossSection.hh>
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
void BetheBlochPhysicsList::ConstructEM()
 
{
 
  theParticleIterator->reset();
 
  while( (*theParticleIterator)() ){
 
    G4ParticleDefinition* particle = theParticleIterator->value();
 
    G4ProcessManager* pmanager = particle->GetProcessManager();
 
    G4String particleName = particle->GetParticleName();
 
 
    //G4GammaNuclearReaction* gammaNuclear = new G4GammaNuclearReaction();
 
    //G4PhotoNuclearProcess* photoNuclearProcess = new G4PhotoNuclearProcess();
 
   
 
    if (particleName == "gamma") {
 
      // gamma       
 
      pmanager->AddDiscreteProcess(new G4PhotoElectricEffect);
 
      //pmanager->AddDiscreteProcess(new G4LowEnergyPhotoElectric);
 
      pmanager->AddDiscreteProcess(new G4ComptonScattering);
 
      //pmanager->AddDiscreteProcess(new G4LowEnergyCompton);
 
      pmanager->AddDiscreteProcess(new G4GammaConversion);
 
      //pmanager->AddDiscreteProcess(new G4LowEnergyGammaConversion);
 
      //pmanager->AddDiscrete(new G4PenelopeIonisation);
 
      //pmanager->AddDiscrete(new G4LowEnergyRayleigh());
 
 
  //00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00
 
 
  G4GammaNuclearReaction* gammaNuclear = new G4GammaNuclearReaction();
 
  G4PhotoNuclearProcess* photoNuclearProcess = new G4PhotoNuclearProcess();
 
  photoNuclearProcess->RegisterMe(gammaNuclear);
 
  pmanager->AddDiscreteProcess(photoNuclearProcess);
 
 
 
  //00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00
 
 
 
 
 
    } else if (particleName == "e-") {
 
      //electron
 
      pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
 
      pmanager->AddProcess(new G4eIonisation,      -1, 2,2);
 
      pmanager->AddProcess(new G4eBremsstrahlung,  -1, 3,3);     
 
 
    } else if (particleName == "proton") {
 
      //proton
 
 
      //AddProcess(process name, proccess when at rest, continuous proces flag, discrete process flag);
 
      pmanager->AddProcess(new G4hIonisation,      -1, 1,1);
 
      pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
 
      //      G4ionIonisation* iIon= new G4ionIonisation();
 
      //      pmanager->AddProcess(iIon,-1, 1,2);
 
      //step limit
 
      pmanager->AddProcess(new G4StepLimiter,      -1,-1,3);       
 
 
    } else if (particleName == "e+") {
 
      //positron
 
      pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
 
      pmanager->AddProcess(new G4eIonisation,      -1, 2,2);
 
      pmanager->AddProcess(new G4eBremsstrahlung,  -1, 3,3);
 
      pmanager->AddProcess(new G4eplusAnnihilation,  0,-1,4);
 
 
    } else if( particleName == "mu+" ||
 
              particleName == "mu-"    ) {
 
      //muon 
 
      pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
 
      pmanager->AddProcess(new G4MuIonisation,      -1, 2,2);
 
      pmanager->AddProcess(new G4MuBremsstrahlung,  -1, 3,3);
 
      pmanager->AddProcess(new G4MuPairProduction,  -1, 4,4);
 
 
      //00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00
 
   
 
  } else if (particleName == "neutron") {
 
      //neutron
 
 
 
      // available neutron elastic scattering models
 
 
      //G4LElastic* elasticModel = new G4LElastic();
 
      //G4NeutronHPElastic* elasticModel = new G4NeutronHPElastic();
 
      G4NeutronHPorLElastic* elasticModel = new G4NeutronHPorLElastic();
 
      // define process to handle elastic scattering
 
      G4HadronElasticProcess* hadElastProc = new G4HadronElasticProcess();
 
      // register the model you are using for eleastic scatterin
 
      hadElastProc->RegisterMe(elasticModel);
 
      // add the elastic scattering process to the process manager
 
 
      pmanager->AddDiscreteProcess(hadElastProc);
 
      pmanager->AddProcess(new G4StepLimiter,      -1,-1,3);       
 
    //00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00//00   
 
   
 
    } else if ((!particle->IsShortLived()) &&
 
      (particle->GetPDGCharge() != 0.0) &&
 
      (particle->GetParticleName() != "chargedgeantino")) {
 
      //all others charged particles except geantino
 
      pmanager->AddProcess(new G4MultipleScattering,-1, 1,1);
 
      pmanager->AddProcess(new G4hIonisation,      -1, 2,2);
 
      //step limit
 
      pmanager->AddProcess(new G4StepLimiter,      -1,-1,3);       
 
      ///pmanager->AddProcess(new G4UserSpecialCuts,  -1,-1,4); 
 
    }
 
  }
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
#include "G4Decay.hh"
 
void BetheBlochPhysicsList::ConstructGeneral()
 
{
 
  // Add Decay Process
 
  G4Decay* theDecayProcess = new G4Decay();
 
  theParticleIterator->reset();
 
  while( (*theParticleIterator)() ){
 
    G4ParticleDefinition* particle = theParticleIterator->value();
 
    G4ProcessManager* pmanager = particle->GetProcessManager();
 
    if (theDecayProcess->IsApplicable(*particle)) {
 
      pmanager ->AddProcess(theDecayProcess);
 
      // set ordering for PostStepDoIt and AtRestDoIt
 
      pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep);
 
      pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest);
 
    }
 
  }
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 
 
void BetheBlochPhysicsList::SetCuts()
 
{
 
  //G4VUserPhysicsList::SetCutsWithDefault method sets
 
  //the default cut value for all particle types
 
  //
 
  SetCutsWithDefault();
 
   
 
  if (verboseLevel>0) DumpCutValuesTable();
 
}
 
 
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
 

Latest revision as of 03:54, 10 January 2010