Message: High Precision Neutron Capture Not Logged In (login)
 Next-in-Thread Next-in-Thread
 Next-in-Forum Next-in-Forum

None High Precision Neutron Capture 

Keywords: HPCapture Au Cross Sections
Forum: Hadronic Processes
Date: 05 Jun, 2006
From: Enrico Billi <billi@bo.infn.it>

Dear all, i am developing a simulation for Au and titanium neutron capture processes, here you are the code, you may see in GenericIon process the radioactive decay:

PhysListHadron::PhysListHadron(const G4String& name) : G4VPhysicsConstructor(name) { }

PhysListHadron::~PhysListHadron() { }

void PhysListHadron::ConstructProcess()
{
  G4ProcessManager * pManager = 0;

  // this will be the model class for high energies
  G4TheoFSGenerator * theTheoModel = new G4TheoFSGenerator;
  // all models for treatment of thermal nucleus
  G4Evaporation * theEvaporation = new G4Evaporation;
  G4PhotonEvaporation * thePhotonEvaporation = new G4PhotonEvaporation;
  G4FermiBreakUp * theFermiBreakUp = new G4FermiBreakUp;
  G4StatMF * theMF = new G4StatMF;
  // Evaporation logic
  G4ExcitationHandler * theHandler = new G4ExcitationHandler;
  theHandler->SetPhotonEvaporation(thePhotonEvaporation);
  theHandler->SetEvaporation(theEvaporation);
  theHandler->SetFermiModel(theFermiBreakUp);
  theHandler->SetMultiFragmentation(theMF);
  theHandler->SetMaxAandZForFermiBreakUp(12, 6);
  theHandler->SetMinEForMultiFrag(5*MeV);
  // Pre equilibrium stage
  G4PreCompoundModel * thePreEquilib = new G4PreCompoundModel(theHandler);

  // a no-cascade generator-precompound interaface
  G4GeneratorPrecompoundInterface * theCascade = new G4GeneratorPrecompoundInterface;
  theCascade->SetDeExcitation(thePreEquilib);

  // here come the high energy parts
  // the string model; still not quite according to design - Explicite use of the forseen interfaces
  G4VPartonStringModel * theStringModel;
  theStringModel = new G4QGSModel<G4QGSParticipants>;
  theTheoModel->SetTransport(theCascade);
  theTheoModel->SetHighEnergyGenerator(theStringModel);
  theTheoModel->SetMinEnergy(10*GeV);  // 15 GeV may be the right limit
  theTheoModel->SetMaxEnergy(100*TeV);

  G4VLongitudinalStringDecay * theFragmentation = new G4QGSMFragmentation;
  G4ExcitedStringDecay * theStringDecay = new G4ExcitedStringDecay(theFragmentation);
  theStringModel->SetFragmentationModel(theStringDecay);

  // Elastic Process
  G4HadronElasticProcess* theElasticProcess = new G4HadronElasticProcess();
  theElasticProcess->RegisterMe(new G4LElastic());

  // ---------------------------------------------------------------------------
  // Hadron elastic process
  // for all particles except neutrons

  theParticleIterator->reset();
  while((*theParticleIterator)())
  {
    G4ParticleDefinition* particle = theParticleIterator->value();
    G4String particleName = particle->GetParticleName();
    if (particleName != "neutron")
    {
      G4ProcessManager* pManager = particle->GetProcessManager();
      if (particle->GetPDGMass() > 110.*MeV && theElasticProcess->IsApplicable(*particle) && !particle->IsShortLived())
      {
	pManager->AddDiscreteProcess(theElasticProcess);
	G4cout << "### Elastic model are registered for " << particle->GetParticleName() << G4endl;
      }
    }
  }

  ////////////
  // PROTON //
  ////////////
  pManager = G4Proton::Proton()->GetProcessManager();
  //INELASTIC
  G4ProtonInelasticProcess* theProtonInelastic = new G4ProtonInelasticProcess();
    // BC
  G4BinaryCascade* theBC = new G4BinaryCascade;
  theBC->SetMaxEnergy(10.5*GeV);
  theProtonInelastic->RegisterMe(theBC);
    // HIGH ENERGY
  theProtonInelastic->RegisterMe(theTheoModel);
    // ADD CROSS-SECTIONS
  G4ProtonInelasticCrossSection * theProtonData = new G4ProtonInelasticCrossSection;
  theProtonInelastic->AddDataSet(theProtonData);
  pManager->AddDiscreteProcess(theProtonInelastic);

  /////////////
  // NEUTRON //
  /////////////
  pManager = G4Neutron::Neutron()->GetProcessManager();

  // ELASTIC
  G4HadronElasticProcess* theNeutronElasticProcess = new G4HadronElasticProcess();
  G4LElastic* theNElasticModel = new G4LElastic();
  G4NeutronHPElastic* theElasticNeutron = new G4NeutronHPElastic();
  theNeutronElasticProcess->RegisterMe(theNElasticModel);
  theNElasticModel->SetMinEnergy(20.*MeV);
  theNeutronElasticProcess->RegisterMe(theElasticNeutron);
  theElasticNeutron->SetMaxEnergy(20.*MeV);

  G4NeutronHPElasticData* theNeutronData = new G4NeutronHPElasticData;
  theNeutronElasticProcess->AddDataSet(theNeutronData);
  pManager->AddDiscreteProcess(theNeutronElasticProcess);

  // INELASTIC
  G4NeutronInelasticProcess* theNeutronInelastic = new G4NeutronInelasticProcess();
    //HP Inelastic Model
  G4NeutronHPInelastic* theHPNeutronInelasticModel = new G4NeutronHPInelastic();
  theHPNeutronInelasticModel->SetMaxEnergy(20.*MeV);
  theNeutronInelastic->RegisterMe(theHPNeutronInelasticModel);
  G4NeutronHPInelasticData* theNeutronData1 = new G4NeutronHPInelasticData;
  theNeutronInelastic->AddDataSet(theNeutronData1);
    // BC
  G4BinaryCascade* neutronBC = new G4BinaryCascade;
  neutronBC->SetMinEnergy(20.*MeV);
  neutronBC->SetMaxEnergy(6.*GeV);
  theNeutronInelastic->RegisterMe(neutronBC);
  theNeutronInelastic->RegisterMe(theTheoModel);
    //HIGH ENERGY
  G4LENeutronInelastic* theNeutronLEPModel = new G4LENeutronInelastic();
  theNeutronLEPModel->SetMinEnergy(4.*GeV);
  G4HENeutronInelastic* theNeutronHEPModel = new G4HENeutronInelastic();
  theNeutronInelastic->RegisterMe(theNeutronLEPModel);
  theNeutronInelastic->RegisterMe(theNeutronHEPModel);
    // now the cross-sections
  G4NeutronInelasticCrossSection* theNeutronData2 = new G4NeutronInelasticCrossSection;
  theNeutronInelastic->AddDataSet(theNeutronData2);
  pManager->AddDiscreteProcess(theNeutronInelastic);

  // FISSION
  G4HadronFissionProcess* theFissionProcess = new G4HadronFissionProcess();
    //normal
  G4LFission* theFissionModel = new G4LFission();
  theFissionModel->SetMinEnergy(20.*MeV);
  theFissionProcess->RegisterMe(theFissionModel);
    //HP
  G4NeutronHPFission* theHPNeutronFissionModel = new G4NeutronHPFission();
  theHPNeutronFissionModel->SetMaxEnergy(20.*MeV);
  theFissionProcess->RegisterMe(theHPNeutronFissionModel);
  pManager->AddDiscreteProcess(theFissionProcess);

  //CAPTURE
  G4HadronCaptureProcess* theCaptureProcess = new G4HadronCaptureProcess;
    //normal
  G4LCapture* theCaptureModel = new G4LCapture;
  theCaptureProcess->RegisterMe(theCaptureModel);
  theCaptureModel->SetMinEnergy(20.*MeV);
    //HP
  G4NeutronHPCapture* theHPNeutronCaptureModel = new G4NeutronHPCapture;
  theHPNeutronCaptureModel->SetMaxEnergy(20.*MeV);
  theCaptureProcess->RegisterMe(theHPNeutronCaptureModel);
  G4NeutronHPCaptureData* theNeutronData3 = new G4NeutronHPCaptureData;
  theCaptureProcess->AddDataSet(theNeutronData3);
  pManager->AddDiscreteProcess(theCaptureProcess);

  // LIGHT ION REACTIONS
  G4BinaryLightIonReaction * theIonBC= new G4BinaryLightIonReaction;
  theIonBC->SetMinEnergy(1*MeV);
  theIonBC->SetMaxEnergy(20*GeV);
  G4TripathiCrossSection * TripathiCrossSection= new G4TripathiCrossSection;
  G4IonsShenCrossSection * aShen = new G4IonsShenCrossSection;

  // DEUTERON
  pManager = G4Deuteron::Deuteron()->GetProcessManager();
  theDeuteronInelasticProcess = new G4DeuteronInelasticProcess("inelastic");
  G4LEDeuteronInelastic* theDeuteronInelasticModel = new G4LEDeuteronInelastic;
  theDeuteronInelasticModel->SetMaxEnergy(100*MeV);
  theDeuteronInelasticProcess->AddDataSet(TripathiCrossSection);
  theDeuteronInelasticProcess->AddDataSet(aShen);
  theDeuteronInelasticProcess->RegisterMe(theDeuteronInelasticModel);
  theDeuteronInelasticProcess->RegisterMe(theIonBC);
  pManager->AddDiscreteProcess(theDeuteronInelasticProcess);
  // TRITON
  pManager = G4Triton::Triton()->GetProcessManager();
  theTritonInelasticProcess =  new G4TritonInelasticProcess("inelastic");
  G4LETritonInelastic* theTritonInelasticModel = new G4LETritonInelastic;
  theTritonInelasticModel->SetMaxEnergy(100*MeV);
  theTritonInelasticProcess->AddDataSet(TripathiCrossSection);
  theTritonInelasticProcess->AddDataSet(aShen);
  theTritonInelasticProcess->RegisterMe(theTritonInelasticModel);
  theTritonInelasticProcess->RegisterMe(theIonBC);
  pManager->AddDiscreteProcess(theTritonInelasticProcess);
  // ALPHA
  pManager = G4Alpha::Alpha()->GetProcessManager();
  theAlphaInelasticProcess = new G4AlphaInelasticProcess("inelastic");
  G4LEAlphaInelastic* theAlphaInelasticModel = new G4LEAlphaInelastic;
  theAlphaInelasticModel->SetMaxEnergy(100*MeV);
  theAlphaInelasticProcess->AddDataSet(TripathiCrossSection);
  theAlphaInelasticProcess->AddDataSet(aShen);
  theAlphaInelasticProcess->RegisterMe(theAlphaInelasticModel);
  theAlphaInelasticProcess->RegisterMe(theIonBC);
  pManager->AddDiscreteProcess(theAlphaInelasticProcess);

  // GENERIC ION
  pManager = G4GenericIon::GenericIon()->GetProcessManager();
  G4RadioactiveDecay*  theRadioactiveDecay = new G4RadioactiveDecay("RadioactiveDecay");
  pManager->SetVerboseLevel(0);
  pManager->AddProcess(theRadioactiveDecay);
  pManager->SetProcessOrdering(theRadioactiveDecay, idxPostStep);
  pManager->SetProcessOrdering(theRadioactiveDecay, idxAtRest);

  // ELASTIC
  pManager->AddDiscreteProcess(theElasticProcess);
  theIonInelasticProcess = new G4IonInelasticProcess();
  theIonInelasticProcess->AddDataSet(TripathiCrossSection);
  theIonInelasticProcess->AddDataSet(aShen);
  G4BinaryLightIonReaction * theGenIonBC= new G4BinaryLightIonReaction;
  theGenIonBC->SetMinEnergy(0*MeV);
  theGenIonBC->SetMaxEnergy(20*GeV);
  theIonInelasticProcess->RegisterMe(theIonBC);
  pManager->AddDiscreteProcess(theIonInelasticProcess);

}

when i run it the gamma cascade of Au and titanium exceed the binding energy of neutron. For Au i used a neutron of 4.9eV, it is the energy of one resonance. Here you may see an example:

*********************************************************************************************************
* G4Track Information:   Particle = neutron,   Track ID = 1,   Parent ID = 0
*********************************************************************************************************

Step#      X         Y            Z        KineE    dEStep  StepLeng TrakLeng    Volume  Process
    1      0 fm      0 fm   -625 mum      4.9 eV         0 eV      1.94 cm      1.94 cm      World  Transportation
    2      0 fm      0 fm   -613 mum        0 eV         0 eV        12 mum     1.94 cm     target  LCapture

*********************************************************************************************************
* G4Track Information:   Particle = gamma,   Track ID = 4,   Parent ID = 1
*********************************************************************************************************

Step#      X         Y            Z        KineE    dEStep  StepLeng TrakLeng    Volume  Process
    0      0 fm      0 fm      -613 mum     2.05 MeV        0 eV         0 fm         0 fm     target    initStep

*********************************************************************************************************
* G4Track Information:   Particle = gamma,   Track ID = 3,   Parent ID = 1
*********************************************************************************************************

Step#      X         Y            Z        KineE    dEStep  StepLeng TrakLeng    Volume  Process
    0      0 fm      0 fm      -613 mum     4.63 MeV        0 eV         0 fm         0 fm     target    initStep

*********************************************************************************************************
* G4Track Information:   Particle = gamma,   Track ID = 2,   Parent ID = 1
*********************************************************************************************************

Step#      X         Y            Z        KineE    dEStep  StepLeng TrakLeng    Volume  Process
    0      0 fm      0 fm      -613 mum     3.32 MeV        0 eV         0 fm         0 fm     target    initStep

There may be something wrong in data libraries for Au and Titanium? Which one of HP libraries have been tested? Thank you, Enrico Billi

Inline Depth:
 1 1
 All All
Outline Depth:
 1 1
 2 2
 All All
Add message: (add)

1 None: Re: High Precision Neutron Capture   (Koi, Tatsumi - 05 Jun, 2006)
(_ None: Re:Re: High Precision Neutron Capture   (Enrico Billi - 05 Jun, 2006)
 Add Message Add Message
to: "High Precision Neutron Capture"

 Subscribe Subscribe

This site runs SLAC HyperNews version 1.11-slac-98, derived from the original HyperNews


[ Geant 4 Home | Geant 4 HyperNews | Search | Request New Forum | Feedback ]