Import Geant4 10.0.0 source tree
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
#
|
||||
# Generated on : 24/9/2010
|
||||
#
|
||||
# $Id: CMakeLists.txt,v 1.1 2010-09-29 19:08:15 bmorgan Exp $
|
||||
# $Id: CMakeLists.txt 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# $Id: GNUmakefile,v 1.5 2008-09-01 17:12:40 vnivanch Exp $
|
||||
# $Id: GNUmakefile 76309 2013-11-08 13:48:42Z gcosmo $
|
||||
# -----------------------------------------------------------
|
||||
# GNUmakefile for hadronic stopping library. G.Folger 10-Dec-97
|
||||
# --------------------------------------------------------------
|
||||
@@ -27,7 +27,6 @@ CPPFLAGS += -I$(G4BASE)/global/management/include \
|
||||
-I$(G4BASE)/processes/management/include \
|
||||
-I$(G4BASE)/processes/hadronic/management/include \
|
||||
-I$(G4BASE)/processes/hadronic/cross_sections/include \
|
||||
-I$(G4BASE)/processes/hadronic/models/high_energy/include \
|
||||
-I$(G4BASE)/processes/hadronic/models/util/include \
|
||||
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
|
||||
-I$(G4BASE)/processes/hadronic/models/management/include \
|
||||
|
||||
@@ -14,6 +14,86 @@ code and to keep track of all tags.
|
||||
* Please list in reverse chronological order (last date on top)
|
||||
---------------------------------------------------------------
|
||||
|
||||
08 Nov 2013 A. Ribon (hadr-stopping-V09-06-11)
|
||||
--------------------------------------------------------------------
|
||||
- Updated GNUmakefile and sources.cmake to reflect removal of HE
|
||||
hadronic models.
|
||||
|
||||
03 Oct 2013 K. Genser (hadr-stopping-V09-06-10)
|
||||
--------------------------------------------------------------------
|
||||
- G4MuonMinusCapture.cc
|
||||
Replaced native PreCompound model with Bertini
|
||||
(G4MuMinusCapturePrecompound with G4CascadeInterface)
|
||||
|
||||
16 July 2013 G. Cosmo (hadr-stopping-V09-06-09)
|
||||
--------------------------------------------------------------------
|
||||
- Correction to CMake scripts for granular build.
|
||||
|
||||
04 June 2013 A. Ribon (hadr-stopping-V09-06-08)
|
||||
--------------------------------------------------------------------
|
||||
- G4MuonMinusCaptureAtRest
|
||||
fix inside .cc file to access ions via IonTable class and
|
||||
GetIon method
|
||||
|
||||
01 May 2013 K. Genser (hadr-stopping-V09-06-07)
|
||||
--------------------------------------------------------------------
|
||||
- G4MuonMinusBoundDecay
|
||||
improved muon capture rate data/lookup and improved
|
||||
calculation of bound muon decay rate
|
||||
|
||||
24 April 2013 K. Genser (hadr-stopping-V09-06-06)
|
||||
--------------------------------------------------------------------
|
||||
- G4MuonMinusBoundDecay.hh, G4MuonMinusBoundDecay.cc
|
||||
G4StopElementSelector.cc
|
||||
corrected calculations and lookup of MuonCaptureRate
|
||||
|
||||
24 April 2013 V. Ivantchenko (hadr-stopping-V09-06-05)
|
||||
--------------------------------------------------------------------
|
||||
- G4EmCaptureCascade - fix inside .cc file instead of .hh
|
||||
|
||||
24 April 2013 V. Ivantchenko (hadr-stopping-V09-06-04)
|
||||
--------------------------------------------------------------------
|
||||
- G4EmCaptureCascade - fixed array length (reported by Coverity)
|
||||
|
||||
15 March 2013 V. Ivantchenko (hadr-stopping-V09-06-03)
|
||||
--------------------------------------------------------------------
|
||||
- G4MuMinusCapturePrecompound, G4EmCaptureCascade,
|
||||
G4MuonMinusBoundDecay, G4StopElementSelector - fixed Coverity warnings,
|
||||
removed "static" const, make physics methods public to be used
|
||||
in unit tests
|
||||
|
||||
28 January 2013 Julia Yarba (hadr-stopping-V09-06-02)
|
||||
---------------------------------------------------------
|
||||
- Remove G4ThreadLocal from G4StopElementSelector, G4MuMinusCaptureCascade,
|
||||
G4MuonMinusBoundDecay, and replace with static const as those arrays are
|
||||
NOT mutable; this is part of adapting for MT processing
|
||||
|
||||
13 December 2012 Michael Kelsey (hadr-stopping-V09-06-01)
|
||||
---------------------------------------------------------
|
||||
- G4AntiNeutronAnnihilationAtRest.hh,cc: Restore this process from the
|
||||
cleanup below. This class does not have a Fritiof-based counterpart.
|
||||
NOTE: Restoration was done using |svn copy -r 66187|, so all prior
|
||||
history of the file is also recovered.
|
||||
|
||||
- sources.cmake: Restore G4AntiNeutronAnnihilationAtRest.hh,cc.
|
||||
|
||||
3 December 2012 Michael Kelsey (hadr-stopping-V09-06-00)
|
||||
--------------------------------------------------------
|
||||
- sources.cmake: Remove all deprecated classes for start of 10.0 development:
|
||||
|
||||
G4AntiNeutronAnnihilationAtRest.hh,cc G4PiMinusStopLi.hh,cc
|
||||
G4AntiProtonAnnihilationAtRest.hh,cc G4PiMinusStopMaterial.hh,cc
|
||||
G4DistributionGenerator.hh,cc G4PiMinusStopN.hh,cc
|
||||
G4KaonMinusAbsorption.hh,cc G4PiMinusStopO.hh,cc
|
||||
G4KaonMinusAbsorptionAtRest.hh,cc G4PiMinusStopPb.hh,cc
|
||||
G4NeutronCaptureAtRest.hh,cc G4PiMinusStopTa.hh,cc
|
||||
G4PiMinusAbsorptionAtRest.hh,cc G4PionMinusAbsorptionAtRest.hh,cc
|
||||
G4PiMinusStopAbsorption.hh,cc G4StopDeexcitation.hh,cc
|
||||
G4PiMinusStopAl.hh,cc G4StopDeexcitationAlgorithm.hh
|
||||
G4PiMinusStopC.hh,cc G4StopDummyDeexcitation.hh,cc
|
||||
G4PiMinusStopCo.hh,cc G4StopTheoDeexcitation.hh,cc
|
||||
G4PiMinusStopCu.hh,cc
|
||||
|
||||
14 November 2012 V. Ivantchenko (hadr-stopping-V09-05-31)
|
||||
--------------------------------------------------------------------
|
||||
- G4MuMinusCapturePrecompound - fixed extra run time memory leak
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4AntiNeutronAnnihilationAtRest.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
// G4AntiNeutronAnnihilationAtRest physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4AntiProtonAnnihilationAtRest physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#ifndef G4AntiProtonAnnihilationAtRest_h
|
||||
#define G4AntiProtonAnnihilationAtRest_h 1
|
||||
|
||||
// Class Description:
|
||||
//
|
||||
// Process for annihilation of p-bar at rest.
|
||||
// To be used in your physics list in case you need this physics.
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4VRestProcess.hh"
|
||||
#include "G4VParticleChange.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4GHEKinematicsVector.hh"
|
||||
#include "G4HadronicProcessType.hh"
|
||||
|
||||
class G4AntiProtonAnnihilationAtRest : public G4VRestProcess
|
||||
|
||||
{
|
||||
private:
|
||||
// hide assignment operator as private
|
||||
G4AntiProtonAnnihilationAtRest& operator=(const G4AntiProtonAnnihilationAtRest &right);
|
||||
G4AntiProtonAnnihilationAtRest(const G4AntiProtonAnnihilationAtRest& );
|
||||
|
||||
public:
|
||||
|
||||
G4AntiProtonAnnihilationAtRest(const G4String& processName ="AntiProtonAnnihilationAtRest",
|
||||
G4ProcessType aType = fHadronic );
|
||||
|
||||
~G4AntiProtonAnnihilationAtRest();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
|
||||
void PreparePhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
G4double AtRestGetPhysicalInteractionLength(const G4Track&,
|
||||
G4ForceCondition*);
|
||||
|
||||
// zero mean lifetime
|
||||
G4double GetMeanLifeTime(const G4Track& ,
|
||||
G4ForceCondition* ) {return 0.0;}
|
||||
|
||||
G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&);
|
||||
|
||||
// return number of secondaries produced
|
||||
G4int GetNumberOfSecondaries();
|
||||
|
||||
// pointer to array containg kinematics of secondaries
|
||||
G4GHEKinematicsVector* GetSecondaryKinematics();
|
||||
|
||||
private:
|
||||
|
||||
void GenerateSecondaries();
|
||||
void Poisso( G4float, G4int* );
|
||||
void Normal( G4float* );
|
||||
void AntiProtonAnnihilation( G4int* );
|
||||
G4double ExNu( G4float );
|
||||
G4int NFac( G4int );
|
||||
|
||||
private:
|
||||
|
||||
// global time-of-flight of stopped AntiProton
|
||||
G4float globalTime;
|
||||
|
||||
// atomic mass of target nucleus
|
||||
G4float targetAtomicMass;
|
||||
|
||||
// charge of target nucleus
|
||||
G4float targetCharge;
|
||||
|
||||
G4GHEKinematicsVector* pv;
|
||||
G4GHEKinematicsVector* eve;
|
||||
G4GHEKinematicsVector* gkin;
|
||||
|
||||
G4float evapEnergy1;
|
||||
G4float evapEnergy3;
|
||||
|
||||
G4int ngkine;
|
||||
|
||||
G4int ntot;
|
||||
G4GHEKinematicsVector result;
|
||||
|
||||
G4float massPionMinus;
|
||||
G4float massProton;
|
||||
G4float massPionZero;
|
||||
G4float massAntiProton;
|
||||
G4float massPionPlus;
|
||||
G4float massGamma;
|
||||
|
||||
G4ParticleDefinition* pdefGamma;
|
||||
G4ParticleDefinition* pdefPionPlus;
|
||||
G4ParticleDefinition* pdefPionZero;
|
||||
G4ParticleDefinition* pdefPionMinus;
|
||||
G4ParticleDefinition* pdefProton;
|
||||
G4ParticleDefinition* pdefAntiProton;
|
||||
G4ParticleDefinition* pdefNeutron;
|
||||
G4ParticleDefinition* pdefDeuteron;
|
||||
G4ParticleDefinition* pdefTriton;
|
||||
G4ParticleDefinition* pdefAlpha;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4DistributionGenerator.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 12 May 1998
|
||||
//
|
||||
|
||||
#ifndef G4DISTRIBUTIONGENERATOR_HH
|
||||
#define G4DISTRIBUTIONGENERATOR_HH
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
|
||||
class G4DistributionGenerator
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4DistributionGenerator(std::vector<G4double>& x,
|
||||
std::vector<G4double>& values);
|
||||
G4DistributionGenerator();
|
||||
|
||||
// Destructor
|
||||
~G4DistributionGenerator();
|
||||
|
||||
G4double Generate(G4double ranflat);
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
// G4DistributionGenerator& operator=(const G4DistributionGenerator &right);
|
||||
|
||||
// Copy constructor
|
||||
// G4DistributionGenerator(const G4DistributionGenerator& );
|
||||
|
||||
std::vector<G4double> _x;
|
||||
std::vector<G4double> _cumProb;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4ElementSelector.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4EmCaptureCascade.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4HadronStoppingProcess.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
//---------------------------------------------------------------------
|
||||
//
|
||||
|
||||
@@ -1,133 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4KaonMinusAbsorption physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#ifndef G4KaonMinusAbsorption_h
|
||||
#define G4KaonMinusAbsorption_h 1
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4VRestProcess.hh"
|
||||
#include "G4VParticleChange.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4GHEKinematicsVector.hh"
|
||||
#include "G4HadronicProcessType.hh"
|
||||
|
||||
// Class Description:
|
||||
//
|
||||
// Alternative process for absorption of K- at rest.
|
||||
// To be used in your physics list in case you need this physics.
|
||||
|
||||
|
||||
class G4KaonMinusAbsorption : public G4VRestProcess
|
||||
|
||||
{
|
||||
private:
|
||||
// hide assignment operator as private
|
||||
G4KaonMinusAbsorption& operator=(const G4KaonMinusAbsorption &right);
|
||||
G4KaonMinusAbsorption(const G4KaonMinusAbsorption& );
|
||||
|
||||
public:
|
||||
|
||||
G4KaonMinusAbsorption(const G4String& processName ="KaonMinusAbsorption",
|
||||
G4ProcessType aType = fHadronic );
|
||||
|
||||
~G4KaonMinusAbsorption();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
|
||||
void PreparePhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
G4double AtRestGetPhysicalInteractionLength(const G4Track&,
|
||||
G4ForceCondition*);
|
||||
|
||||
// zero mean lifetime
|
||||
G4double GetMeanLifeTime(const G4Track& ,
|
||||
G4ForceCondition* ) {return 0.0;}
|
||||
|
||||
G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&);
|
||||
|
||||
// return number of secondaries produced
|
||||
G4int GetNumberOfSecondaries();
|
||||
|
||||
// pointer to array containg kinematics of secondaries
|
||||
G4GHEKinematicsVector* GetSecondaryKinematics();
|
||||
|
||||
private:
|
||||
|
||||
void GenerateSecondaries();
|
||||
void Poisso( G4float, G4int* );
|
||||
void Normal( G4float* );
|
||||
void KaonMinusAbsorption( G4int* );
|
||||
G4int NFac( G4int );
|
||||
|
||||
private:
|
||||
|
||||
// global time-of-flight of stopped AntiProton
|
||||
G4float globalTime;
|
||||
|
||||
// atomic mass of target nucleus
|
||||
G4float targetAtomicMass;
|
||||
|
||||
// charge of target nucleus
|
||||
G4float targetCharge;
|
||||
|
||||
G4GHEKinematicsVector* pv;
|
||||
G4GHEKinematicsVector* eve;
|
||||
G4GHEKinematicsVector* gkin;
|
||||
|
||||
G4float evapEnergy1;
|
||||
G4float evapEnergy3;
|
||||
|
||||
G4int ngkine;
|
||||
|
||||
G4int ntot;
|
||||
G4GHEKinematicsVector result;
|
||||
|
||||
G4float massKaonMinus;
|
||||
G4float massGamma;
|
||||
G4float massPionZero;
|
||||
G4float massProton;
|
||||
G4float massLambda;
|
||||
|
||||
G4ParticleDefinition* pdefKaonMinus;
|
||||
G4ParticleDefinition* pdefGamma;
|
||||
G4ParticleDefinition* pdefPionZero;
|
||||
G4ParticleDefinition* pdefProton;
|
||||
G4ParticleDefinition* pdefNeutron;
|
||||
G4ParticleDefinition* pdefLambda;
|
||||
G4ParticleDefinition* pdefDeuteron;
|
||||
G4ParticleDefinition* pdefTriton;
|
||||
G4ParticleDefinition* pdefAlpha;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,148 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4KaonMinusAbsorptionAtRest.hh
|
||||
//
|
||||
// Author: Christian V"olcker (Christian.Volcker@cern.ch),
|
||||
//
|
||||
// Creation date: 10. November 1997
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4KaonMinusAbsorptionAtRest_h
|
||||
#define G4KaonMinusAbsorptionAtRest_h 1
|
||||
|
||||
// Class Description:
|
||||
//
|
||||
// Process for nuclear absorption of K- at rest.
|
||||
// To be used in your physics list in case you need this physics.
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4VRestProcess.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4Nucleus.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4NucleiProperties.hh"
|
||||
#include "G4HadronicProcessType.hh"
|
||||
|
||||
|
||||
// *********************************************************
|
||||
class G4KaonMinusAbsorptionAtRest : public G4VRestProcess
|
||||
// *********************************************************
|
||||
{
|
||||
private:
|
||||
// hide assignment operator as private
|
||||
G4KaonMinusAbsorptionAtRest& operator=(const G4KaonMinusAbsorptionAtRest &right);
|
||||
G4KaonMinusAbsorptionAtRest(const G4KaonMinusAbsorptionAtRest& );
|
||||
public:
|
||||
G4KaonMinusAbsorptionAtRest(const G4String& processName ="KaonMinusAbsorptionAtRest",
|
||||
G4ProcessType aType = fHadronic );
|
||||
~G4KaonMinusAbsorptionAtRest();
|
||||
|
||||
//override methods...
|
||||
public:
|
||||
G4bool IsApplicable(const G4ParticleDefinition& particle) {
|
||||
return( particle == *(G4KaonMinus::KaonMinus()) );
|
||||
}
|
||||
|
||||
void PreparePhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
// the main method ...
|
||||
G4VParticleChange* AtRestDoIt(const G4Track& aTrack, const G4Step& aStep);
|
||||
|
||||
protected: // why?? might be private....
|
||||
// zero mean lifetime
|
||||
G4double GetMeanLifeTime(const G4Track& aTrack,
|
||||
G4ForceCondition* )
|
||||
{
|
||||
G4double result = 0;
|
||||
if(aTrack.GetMaterial()->GetNumberOfElements() == 1)
|
||||
if(aTrack.GetMaterial()->GetZ()<1.5) result = DBL_MAX;
|
||||
return result;
|
||||
}
|
||||
|
||||
private:
|
||||
// returns proton or neutron with fermi-momentum
|
||||
G4DynamicParticle GetAbsorbingNucleon();
|
||||
|
||||
// returns proton or neutron particle definition;
|
||||
G4ParticleDefinition* SelectAbsorbingNucleon();
|
||||
|
||||
// provides the neutron halo factor for absorption on nucleus surface.
|
||||
// in the G4Nucleus
|
||||
G4double NeutronHaloFactor(G4double Z, G4double N);
|
||||
|
||||
// creates the reaction products
|
||||
G4DynamicParticleVector* KaonNucleonReaction();
|
||||
|
||||
// secondary pion absorption in parent nucleus
|
||||
// if TRUE, then add excitation energy to the Nucleus
|
||||
G4bool AbsorbPionByNucleus(G4DynamicParticle* aPion);
|
||||
|
||||
// secondary Sigma-Lambda conversion
|
||||
// if conversion Done, then add excitation energy to the Nucleus
|
||||
G4DynamicParticle *SigmaLambdaConversion(G4DynamicParticle* aSigma);
|
||||
|
||||
// instance variables ...
|
||||
private:
|
||||
// pointer to current stopped hadron
|
||||
const G4DynamicParticle *stoppedHadron;
|
||||
|
||||
// pointer to current target nucleus
|
||||
G4Nucleus* nucleus;
|
||||
|
||||
// some constant parameters
|
||||
|
||||
G4double pionAbsorptionRate;
|
||||
|
||||
// primary production rates ( for absorption on Carbon)
|
||||
|
||||
G4double rateLambdaZeroPiZero;
|
||||
G4double rateSigmaMinusPiPlus;
|
||||
G4double rateSigmaPlusPiMinus;
|
||||
G4double rateSigmaZeroPiZero;
|
||||
|
||||
G4double rateLambdaZeroPiMinus;
|
||||
G4double rateSigmaZeroPiMinus;
|
||||
G4double rateSigmaMinusPiZero;
|
||||
|
||||
|
||||
// Sigma Lambda Conversion rates
|
||||
// for sigma- p -> lambda n
|
||||
// sigma+ n -> lambda p
|
||||
// sigma- n -> lambda
|
||||
|
||||
G4double sigmaPlusLambdaConversionRate;
|
||||
G4double sigmaMinusLambdaConversionRate;
|
||||
G4double sigmaZeroLambdaConversionRate;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuMinusCaptureCascade.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
// G4MuMinusCaptureCascade physics process --------
|
||||
// Vladimir Ivanchenko, April 2000
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuMinusCapturePrecompound.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuonMinusBoundDecay.hh 69573 2013-05-08 13:35:53Z gcosmo $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
@@ -49,6 +49,10 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// Modifications:
|
||||
// 23/04/2013 K.Genser Made GetMuonCaptureRate and
|
||||
// GetMuonDecayRate public static
|
||||
// 04/30/2013 K.Genser Added GetMuonZeff
|
||||
//
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
@@ -77,12 +81,14 @@ public:
|
||||
|
||||
void ModelDescription(std::ostream& outFile) const;
|
||||
|
||||
static G4double GetMuonCaptureRate(G4int Z, G4int A);
|
||||
|
||||
static G4double GetMuonDecayRate(G4int Z);
|
||||
|
||||
static G4double GetMuonZeff(G4int Z);
|
||||
|
||||
private:
|
||||
|
||||
G4double GetMuonCaptureRate(G4int Z, G4int A);
|
||||
|
||||
G4double GetMuonDecayRate(G4int Z);
|
||||
|
||||
inline void AddNewParticle(G4DynamicParticle* dp, G4double time);
|
||||
|
||||
// hide assignment operator as private
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuonMinusCapture.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
//---------------------------------------------------------------------
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuonMinusCaptureAtRest.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
// G4MuonMinusCaptureAtRest physics process
|
||||
// Larry Felawka (TRIUMF) and Art Olin (TRIUMF) April 1998
|
||||
|
||||
@@ -1,123 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4NeutronCaptureAtRest physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#ifndef G4NeutronCaptureAtRest_h
|
||||
#define G4NeutronCaptureAtRest_h 1
|
||||
|
||||
// Class Description:
|
||||
//
|
||||
// Process for capture of neutrons at rest.
|
||||
// To be used in your physics list in case you need this physics.
|
||||
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4VRestProcess.hh"
|
||||
#include "G4VParticleChange.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4GHEKinematicsVector.hh"
|
||||
#include "G4HadronicProcessType.hh"
|
||||
|
||||
class G4NeutronCaptureAtRest : public G4VRestProcess
|
||||
|
||||
{
|
||||
private:
|
||||
// hide assignment operator as private
|
||||
G4NeutronCaptureAtRest& operator=(const G4NeutronCaptureAtRest &right);
|
||||
G4NeutronCaptureAtRest(const G4NeutronCaptureAtRest& );
|
||||
|
||||
public:
|
||||
|
||||
G4NeutronCaptureAtRest(const G4String& processName ="NeutronCaptureAtRest",
|
||||
G4ProcessType aType = fHadronic );
|
||||
|
||||
~G4NeutronCaptureAtRest();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
|
||||
void PreparePhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
// null physics table
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
G4double AtRestGetPhysicalInteractionLength(const G4Track&,
|
||||
G4ForceCondition*);
|
||||
|
||||
// zero mean lifetime
|
||||
G4double GetMeanLifeTime(const G4Track& ,
|
||||
G4ForceCondition* ) {return 0.0;}
|
||||
|
||||
G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&);
|
||||
|
||||
// return number of secondaries produced
|
||||
G4int GetNumberOfSecondaries();
|
||||
|
||||
// pointer to array containg kinematics of secondaries
|
||||
G4GHEKinematicsVector* GetSecondaryKinematics();
|
||||
|
||||
private:
|
||||
|
||||
void GenerateSecondaries();
|
||||
void Normal( G4float* );
|
||||
void NeutronCapture( G4int* );
|
||||
G4double AtomAs( G4float, G4float );
|
||||
|
||||
private:
|
||||
|
||||
// global time-of-flight of stopped hadron
|
||||
G4float globalTime;
|
||||
|
||||
// atomic mass of target nucleus
|
||||
G4float targetAtomicMass;
|
||||
|
||||
// charge of target nucleus
|
||||
G4float targetCharge;
|
||||
|
||||
G4GHEKinematicsVector* pv;
|
||||
G4GHEKinematicsVector* eve;
|
||||
G4GHEKinematicsVector* gkin;
|
||||
|
||||
G4int ngkine;
|
||||
|
||||
G4int ntot;
|
||||
G4GHEKinematicsVector result;
|
||||
|
||||
G4float massProton;
|
||||
G4float massNeutron;
|
||||
G4float massElectron;
|
||||
G4float massDeuteron;
|
||||
G4float massAlpha;
|
||||
|
||||
G4ParticleDefinition* pdefGamma;
|
||||
G4ParticleDefinition* pdefNeutron;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,108 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusAbsorptionAtRest.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 9 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSABSORPTIONATREST_HH
|
||||
#define G4PIMINUSABSORPTIONATREST_HH
|
||||
|
||||
// Class Description:
|
||||
//
|
||||
// Alternative Process for absorption of pi- at rest.
|
||||
// To be used in your physics list in case you need this physics.
|
||||
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4VRestProcess.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4PiMinusStopAbsorption.hh"
|
||||
#include "G4StopDeexcitation.hh"
|
||||
#include "G4StopDeexcitationAlgorithm.hh"
|
||||
#include "G4HadronicProcessType.hh"
|
||||
|
||||
class G4DynamicParticle;
|
||||
|
||||
class G4PiMinusAbsorptionAtRest : public G4VRestProcess
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusAbsorptionAtRest& operator=(const G4PiMinusAbsorptionAtRest &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusAbsorptionAtRest(const G4PiMinusAbsorptionAtRest& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusAbsorptionAtRest(const G4String& processName ="PiMinusAbsorptionAtRest",
|
||||
G4ProcessType aType = fHadronic );
|
||||
|
||||
// Destructor
|
||||
~G4PiMinusAbsorptionAtRest();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition& particle)
|
||||
{ return ( particle == *(G4PionMinus::PionMinus()) ); }
|
||||
|
||||
void PreparePhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
G4VParticleChange* AtRestDoIt(const G4Track& aTrack, const G4Step& aStep);
|
||||
|
||||
void SetDeexcitationAlgorithm(G4int index);
|
||||
|
||||
protected:
|
||||
|
||||
// zero mean lifetime
|
||||
G4double GetMeanLifeTime(const G4Track& aTrack,
|
||||
G4ForceCondition* )
|
||||
{
|
||||
G4double result = 0;
|
||||
if(aTrack.GetMaterial()->GetNumberOfElements() == 1)
|
||||
if(aTrack.GetMaterial()->GetZ()<1.5) result = DBL_MAX;
|
||||
return result;
|
||||
}
|
||||
private:
|
||||
|
||||
// G4PiMinusStopAbsorption* _stopAbsorption;
|
||||
// G4StopDeexcitation* _stopDeexcitation;
|
||||
G4int _indexDeexcitation;
|
||||
|
||||
G4PiMinusStopMaterial* LoadAlgorithm(int Z);
|
||||
G4StopDeexcitationAlgorithm* LoadNucleusAlgorithm();
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,111 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopAbsorption.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 12 May 1998
|
||||
//
|
||||
// Modifications:
|
||||
// 13 Sep 1998 - Changed DoAbsorption
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPABSORPTION_HH
|
||||
#define G4PIMINUSSTOPABSORPTION_HH
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
|
||||
class G4PiMinusStopAbsorption
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopAbsorption(G4PiMinusStopMaterial* materialAlgo, const G4double Z, const G4double A);
|
||||
|
||||
// Destructor
|
||||
~G4PiMinusStopAbsorption();
|
||||
|
||||
// Return final absorption products
|
||||
G4DynamicParticleVector* DoAbsorption();
|
||||
|
||||
// Energy involved in the absorption process
|
||||
G4double Energy();
|
||||
|
||||
// Return nucleus recoil momentum
|
||||
G4ThreeVector RecoilMomentum();
|
||||
|
||||
// Number of protons in the absorption products
|
||||
G4int NProtons();
|
||||
|
||||
// Number of neutrons in the absorption products
|
||||
G4int NNeutrons();
|
||||
|
||||
void SetVerboseLevel(G4int level);
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopAbsorption& operator=(const G4PiMinusStopAbsorption &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopAbsorption(const G4PiMinusStopAbsorption& );
|
||||
|
||||
G4PiMinusStopMaterial* _materialAlgo; // owned pointer
|
||||
G4DynamicParticleVector* _absorptionProducts;
|
||||
|
||||
G4double _nucleusA;
|
||||
G4double _nucleusZ;
|
||||
|
||||
G4int _level;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopAl.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPAL_HH
|
||||
#define G4PIMINUSSTOPAL_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopAl : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopAl& operator=(const G4PiMinusStopAl &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopAl(const G4PiMinusStopAl& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopAl();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopAl();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eMaxTot;
|
||||
|
||||
static G4double eKinData[10];
|
||||
static G4double eKin[11];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopC.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPC_HH
|
||||
#define G4PIMINUSSTOPC_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopC : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopC& operator=(const G4PiMinusStopC &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopC(const G4PiMinusStopC& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopC();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopC();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eKinData[21];
|
||||
static G4double eKin[22];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopCo.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPCO_HH
|
||||
#define G4PIMINUSSTOPCO_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopCo : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopCo& operator=(const G4PiMinusStopCo &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopCo(const G4PiMinusStopCo& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopCo();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopCo();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eMaxTot;
|
||||
|
||||
static G4double eKinData[11];
|
||||
static G4double eKin[12];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopCu.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPCU_HH
|
||||
#define G4PIMINUSSTOPCU_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopCu : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopCu& operator=(const G4PiMinusStopCu &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopCu(const G4PiMinusStopCu& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopCu();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopCu();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eMaxTot;
|
||||
|
||||
static G4double eKinData[10];
|
||||
static G4double eKin[11];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopLi.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPLI_HH
|
||||
#define G4PIMINUSSTOPLI_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopLi : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopLi& operator=(const G4PiMinusStopLi &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopLi(const G4PiMinusStopLi& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopLi();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopLi();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eMaxTot;
|
||||
|
||||
static G4double eKinData[21];
|
||||
static G4double eKin[22];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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$
|
||||
//
|
||||
// File name: G4PiMinusStopMaterial.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// Modifications:
|
||||
// 13 Sep 1998 - MGP Modified P4Vector
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPMATERIAL_HH
|
||||
#define G4PIMINUSSTOPMATERIAL_HH
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
//#include "G4String.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
|
||||
|
||||
class G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopMaterial& operator=(const G4PiMinusStopMaterial &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopMaterial(const G4PiMinusStopMaterial& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopMaterial();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopMaterial();
|
||||
|
||||
// Definitions of absorption products
|
||||
virtual std::vector<G4ParticleDefinition*>* DefinitionVector();
|
||||
|
||||
// 4-vectors of absorption products
|
||||
virtual std::vector<G4LorentzVector*>* P4Vector(const G4double binding,
|
||||
const G4double mass);
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons()=0;
|
||||
|
||||
protected:
|
||||
|
||||
std::vector<G4ParticleDefinition* >* _definitions;
|
||||
std::vector<G4LorentzVector* >* _momenta;
|
||||
G4DistributionGenerator* _distributionE;
|
||||
G4DistributionGenerator* _distributionAngle;
|
||||
G4double theR;
|
||||
|
||||
G4double GenerateAngle(G4double range);
|
||||
G4LorentzVector MakeP4(G4double p, G4double theta,
|
||||
G4double phi, G4double e);
|
||||
G4double RecoilEnergy(const G4double mass);
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopN.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPN_HH
|
||||
#define G4PIMINUSSTOPN_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopN : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopN& operator=(const G4PiMinusStopN &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopN(const G4PiMinusStopN& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopN();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopN();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eMaxTot;
|
||||
|
||||
static G4double eKinData[10];
|
||||
static G4double eKin[11];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopO.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPO_HH
|
||||
#define G4PIMINUSSTOPO_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopO : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopO& operator=(const G4PiMinusStopO &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopO(const G4PiMinusStopO& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopO();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopO();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eMaxTot;
|
||||
|
||||
static G4double eKinData[10];
|
||||
static G4double eKin[11];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopPb.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPPB_HH
|
||||
#define G4PIMINUSSTOPPB_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopPb : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopPb& operator=(const G4PiMinusStopPb &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopPb(const G4PiMinusStopPb& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopPb();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopPb();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eMaxTot;
|
||||
|
||||
static G4double eKinData[10];
|
||||
static G4double eKin[11];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopTa.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PIMINUSSTOPTA_HH
|
||||
#define G4PIMINUSSTOPTA_HH
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
|
||||
class G4PiMinusStopTa : public G4PiMinusStopMaterial
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4PiMinusStopTa& operator=(const G4PiMinusStopTa &right);
|
||||
|
||||
// Copy constructor
|
||||
G4PiMinusStopTa(const G4PiMinusStopTa& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4PiMinusStopTa();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4PiMinusStopTa();
|
||||
|
||||
// Number of final nucleons, out of generated absorption products
|
||||
virtual G4double FinalNucleons();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
static G4int eKinEntries;
|
||||
static G4int angleEntries;
|
||||
|
||||
static G4double npRatio;
|
||||
|
||||
static G4double nFinalNucleons;
|
||||
|
||||
static G4double eMaxTot;
|
||||
|
||||
static G4double eKinData[10];
|
||||
static G4double eKin[11];
|
||||
|
||||
static G4double angleData[7];
|
||||
static G4double angle[8];
|
||||
|
||||
G4double _clusterSize;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4PionMinusAbsorptionAtRest physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#ifndef G4PionMinusAbsorptionAtRest_h
|
||||
#define G4PionMinusAbsorptionAtRest_h 1
|
||||
|
||||
// Class Description:
|
||||
//
|
||||
// Process for pi- absorption at rest.
|
||||
// To be used in your physics list in case you need this physics.
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4VRestProcess.hh"
|
||||
#include "G4VParticleChange.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4GHEKinematicsVector.hh"
|
||||
#include "G4HadronicProcessType.hh"
|
||||
|
||||
class G4PionMinusAbsorptionAtRest : public G4VRestProcess
|
||||
|
||||
{
|
||||
private:
|
||||
// hide assignment operator as private
|
||||
G4PionMinusAbsorptionAtRest& operator=(const G4PionMinusAbsorptionAtRest &right);
|
||||
G4PionMinusAbsorptionAtRest(const G4PionMinusAbsorptionAtRest& );
|
||||
|
||||
public:
|
||||
|
||||
G4PionMinusAbsorptionAtRest(const G4String& processName ="PionMinusAbsorptionAtRest",
|
||||
G4ProcessType aType = fHadronic);
|
||||
|
||||
~G4PionMinusAbsorptionAtRest();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
|
||||
void PreparePhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
// null physics table
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
|
||||
G4double AtRestGetPhysicalInteractionLength(const G4Track&,
|
||||
G4ForceCondition*);
|
||||
|
||||
// zero mean lifetime
|
||||
G4double GetMeanLifeTime(const G4Track& ,
|
||||
G4ForceCondition* ) {return 0.0;}
|
||||
|
||||
G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&);
|
||||
|
||||
// return number of secondaries produced
|
||||
G4int GetNumberOfSecondaries();
|
||||
|
||||
// pointer to array containg kinematics of secondaries
|
||||
G4GHEKinematicsVector* GetSecondaryKinematics();
|
||||
|
||||
private:
|
||||
|
||||
void GenerateSecondaries();
|
||||
void PionMinusAbsorption( G4int* );
|
||||
void Poisso( G4float, G4int* );
|
||||
void Normal( G4float* );
|
||||
G4double ExNu( G4float );
|
||||
G4int NFac( G4int );
|
||||
|
||||
private:
|
||||
|
||||
// global time-of-flight of stopped PionMinus
|
||||
G4float globalTime;
|
||||
|
||||
// atomic mass of target nucleus
|
||||
G4float targetAtomicMass;
|
||||
|
||||
// charge of target nucleus
|
||||
G4float targetCharge;
|
||||
|
||||
G4GHEKinematicsVector* pv;
|
||||
G4GHEKinematicsVector* eve;
|
||||
G4GHEKinematicsVector* gkin;
|
||||
|
||||
G4float evapEnergy1;
|
||||
G4float evapEnergy3;
|
||||
|
||||
G4int ngkine;
|
||||
|
||||
G4int ntot;
|
||||
G4GHEKinematicsVector result;
|
||||
|
||||
G4float massPionMinus;
|
||||
|
||||
G4ParticleDefinition* pdefGamma;
|
||||
G4ParticleDefinition* pdefPionZero;
|
||||
G4ParticleDefinition* pdefPionMinus;
|
||||
G4ParticleDefinition* pdefProton;
|
||||
G4ParticleDefinition* pdefNeutron;
|
||||
G4ParticleDefinition* pdefDeuteron;
|
||||
G4ParticleDefinition* pdefTriton;
|
||||
G4ParticleDefinition* pdefAlpha;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4StopDeexcitation.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 12 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4STOPDEEXCITATION_HH
|
||||
#define G4STOPDEEXCITATION_HH
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4ReactionProduct.hh"
|
||||
#include "G4ReactionProductVector.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4StopDeexcitationAlgorithm.hh"
|
||||
|
||||
class G4StopDeexcitation
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4StopDeexcitation(G4StopDeexcitationAlgorithm* algorithm);
|
||||
|
||||
// Destructor
|
||||
~G4StopDeexcitation();
|
||||
|
||||
// Return final absorption products
|
||||
G4ReactionProductVector* DoBreakUp(G4double A, G4double Z,
|
||||
G4double excitation, const G4ThreeVector& p) const;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4StopDeexcitation& operator=(const G4StopDeexcitation &right);
|
||||
|
||||
// Copy constructor
|
||||
G4StopDeexcitation(const G4StopDeexcitation& );
|
||||
|
||||
G4StopDeexcitationAlgorithm* _algorithm; // owned pointer
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4StopDeexcitationAlgorithm.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4STOPDEEXCITATIONALGORITHM_HH
|
||||
#define G4STOPDEEXCITATIONALGORITHM_HH
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4ReactionProduct.hh"
|
||||
#include "G4ReactionProductVector.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
#include "G4ios.hh"
|
||||
|
||||
class G4StopDeexcitationAlgorithm
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4StopDeexcitationAlgorithm& operator=(const G4StopDeexcitationAlgorithm &right);
|
||||
|
||||
// Copy constructor
|
||||
G4StopDeexcitationAlgorithm(const G4StopDeexcitationAlgorithm& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4StopDeexcitationAlgorithm() {
|
||||
G4HadronicDeprecate("G4StopDeexcitationAlgorithm");
|
||||
}
|
||||
|
||||
// Destructor
|
||||
virtual ~G4StopDeexcitationAlgorithm() {};
|
||||
|
||||
// Products
|
||||
virtual G4ReactionProductVector* BreakUp(G4double A, G4double Z,
|
||||
G4double excitation, const G4ThreeVector& p) =0;
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,76 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4StopDummyDeexcitation.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4STOPDUMMYDEEXCITATION_HH
|
||||
#define G4STOPDUMMYDEEXCITATION_HH
|
||||
|
||||
#include "G4StopDeexcitationAlgorithm.hh"
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4ReactionProduct.hh"
|
||||
#include "G4ReactionProductVector.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
|
||||
class G4StopDummyDeexcitation: public G4StopDeexcitationAlgorithm
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4StopDummyDeexcitation& operator=(const G4StopDummyDeexcitation &right);
|
||||
|
||||
// Copy constructor
|
||||
G4StopDummyDeexcitation(const G4StopDummyDeexcitation& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4StopDummyDeexcitation();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4StopDummyDeexcitation();
|
||||
|
||||
// Products
|
||||
virtual G4ReactionProductVector* BreakUp(G4double A, G4double Z,
|
||||
G4double excitation, const G4ThreeVector& p);
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
|
||||
G4ReactionProductVector* _products;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4StopElementSelector.hh 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
// Author: V.Ivanchenko (Vladimir.Ivantchenko@cern.ch)
|
||||
//
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4StopTheoDeexcitation.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 18 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#ifndef G4STOPTHEODEEXCITATION_HH
|
||||
#define G4STOPTHEODEEXCITATION_HH
|
||||
|
||||
#include "G4StopDeexcitationAlgorithm.hh"
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
|
||||
class G4StopTheoDeexcitation: public G4StopDeexcitationAlgorithm
|
||||
{
|
||||
|
||||
private:
|
||||
|
||||
// Hide assignment operator as private
|
||||
G4StopTheoDeexcitation& operator=(const G4StopTheoDeexcitation &right);
|
||||
|
||||
// Copy constructor
|
||||
G4StopTheoDeexcitation(const G4StopTheoDeexcitation& );
|
||||
|
||||
public:
|
||||
|
||||
// Constructor
|
||||
G4StopTheoDeexcitation();
|
||||
|
||||
// Destructor
|
||||
virtual ~G4StopTheoDeexcitation();
|
||||
|
||||
// Products
|
||||
virtual G4ReactionProductVector* BreakUp(G4double A, G4double Z,
|
||||
G4double excitation, const G4ThreeVector& p);
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -11,7 +11,7 @@
|
||||
#
|
||||
# Generated on : 24/9/2010
|
||||
#
|
||||
# $Id: sources.cmake,v 1.1 2010-09-29 19:08:23 bmorgan Exp $
|
||||
# $Id: sources.cmake 76309 2013-11-08 13:48:42Z gcosmo $
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
@@ -48,7 +48,6 @@ include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/parton_
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/parton_string/hadronization/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/parton_string/management/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/theo_high_energy/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/high_energy/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/management/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/pre_equilibrium/exciton_model/include)
|
||||
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/models/util/include)
|
||||
@@ -65,77 +64,34 @@ GEANT4_DEFINE_MODULE(NAME G4hadronic_stop
|
||||
HEADERS
|
||||
G4AntiNeutronAnnihilationAtRest.hh
|
||||
G4AntiProtonAbsorptionFritiof.hh
|
||||
G4AntiProtonAnnihilationAtRest.hh
|
||||
G4AntiSigmaPlusAbsorptionFritiof.hh
|
||||
G4DistributionGenerator.hh
|
||||
G4ElementSelector.hh
|
||||
G4EmCaptureCascade.hh
|
||||
G4HadronicAbsorptionFritiof.hh
|
||||
G4HadronStoppingProcess.hh
|
||||
G4KaonMinusAbsorption.hh
|
||||
G4KaonMinusAbsorptionAtRest.hh
|
||||
G4MuMinusCaptureCascade.hh
|
||||
G4MuMinusCapturePrecompound.hh
|
||||
G4MuonMinusBoundDecay.hh
|
||||
G4MuonMinusCapture.hh
|
||||
G4MuonMinusCaptureAtRest.hh
|
||||
G4NeutronCaptureAtRest.hh
|
||||
G4PiMinusAbsorptionAtRest.hh
|
||||
G4HadronicAbsorptionBertini.hh
|
||||
G4PiMinusAbsorptionBertini.hh
|
||||
G4KaonMinusAbsorptionBertini.hh
|
||||
G4SigmaMinusAbsorptionBertini.hh
|
||||
G4PiMinusStopAbsorption.hh
|
||||
G4PiMinusStopAl.hh
|
||||
G4PiMinusStopC.hh
|
||||
G4PiMinusStopCo.hh
|
||||
G4PiMinusStopCu.hh
|
||||
G4PiMinusStopLi.hh
|
||||
G4PiMinusStopMaterial.hh
|
||||
G4PiMinusStopN.hh
|
||||
G4PiMinusStopO.hh
|
||||
G4PiMinusStopPb.hh
|
||||
G4PiMinusStopTa.hh
|
||||
G4PionMinusAbsorptionAtRest.hh
|
||||
G4StopDeexcitation.hh
|
||||
G4StopDeexcitationAlgorithm.hh
|
||||
G4StopDummyDeexcitation.hh
|
||||
G4StopElementSelector.hh
|
||||
G4StopTheoDeexcitation.hh
|
||||
SOURCES
|
||||
G4AntiNeutronAnnihilationAtRest.cc
|
||||
G4AntiProtonAnnihilationAtRest.cc
|
||||
G4DistributionGenerator.cc
|
||||
G4ElementSelector.cc
|
||||
G4EmCaptureCascade.cc
|
||||
G4HadronicAbsorptionFritiof.cc
|
||||
G4HadronStoppingProcess.cc
|
||||
G4KaonMinusAbsorption.cc
|
||||
G4KaonMinusAbsorptionAtRest.cc
|
||||
G4MuMinusCaptureCascade.cc
|
||||
G4MuMinusCapturePrecompound.cc
|
||||
G4MuonMinusBoundDecay.cc
|
||||
G4MuonMinusCapture.cc
|
||||
G4MuonMinusCaptureAtRest.cc
|
||||
G4NeutronCaptureAtRest.cc
|
||||
G4PiMinusAbsorptionAtRest.cc
|
||||
G4HadronicAbsorptionBertini.cc
|
||||
G4PiMinusStopAbsorption.cc
|
||||
G4PiMinusStopAl.cc
|
||||
G4PiMinusStopC.cc
|
||||
G4PiMinusStopCo.cc
|
||||
G4PiMinusStopCu.cc
|
||||
G4PiMinusStopLi.cc
|
||||
G4PiMinusStopMaterial.cc
|
||||
G4PiMinusStopN.cc
|
||||
G4PiMinusStopO.cc
|
||||
G4PiMinusStopPb.cc
|
||||
G4PiMinusStopTa.cc
|
||||
G4PionMinusAbsorptionAtRest.cc
|
||||
G4StopDeexcitation.cc
|
||||
G4StopDummyDeexcitation.cc
|
||||
G4StopElementSelector.cc
|
||||
G4StopTheoDeexcitation.cc
|
||||
GRANULAR_DEPENDENCIES
|
||||
G4baryons
|
||||
G4bosons
|
||||
@@ -148,11 +104,8 @@ GEANT4_DEFINE_MODULE(NAME G4hadronic_stop
|
||||
G4had_string_frag
|
||||
G4had_string_man
|
||||
G4had_theo_max
|
||||
G4hadronic_HE
|
||||
G4hadronic_binary
|
||||
G4hadronic_bert_cascade
|
||||
G4hadronic_body_ci
|
||||
G4hadronic_crosec_ci
|
||||
G4hadronic_bert_cascade
|
||||
G4hadronic_deex_evaporation
|
||||
G4hadronic_deex_fermi_breakup
|
||||
G4hadronic_deex_fission
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4AntiNeutronAnnihilationAtRest.cc 66872 2013-01-15 01:25:57Z japost $
|
||||
// G4AntiNeutronAnnihilationAtRest physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
@@ -235,10 +236,10 @@ G4VParticleChange* G4AntiNeutronAnnihilationAtRest::AtRestDoIt(
|
||||
|
||||
void G4AntiNeutronAnnihilationAtRest::GenerateSecondaries()
|
||||
{
|
||||
static G4int index;
|
||||
static G4int l;
|
||||
static G4int nopt;
|
||||
static G4int i;
|
||||
static G4ThreadLocal G4int index;
|
||||
static G4ThreadLocal G4int l;
|
||||
static G4ThreadLocal G4int nopt;
|
||||
static G4ThreadLocal G4int i;
|
||||
// DHW 15 May 2011: unused: static G4ParticleDefinition* jnd;
|
||||
|
||||
for (i = 1; i <= MAX_SECONDARIES; ++i) {
|
||||
@@ -303,10 +304,10 @@ void G4AntiNeutronAnnihilationAtRest::GenerateSecondaries()
|
||||
|
||||
void G4AntiNeutronAnnihilationAtRest::Poisso(G4float xav, G4int *iran)
|
||||
{
|
||||
static G4int i;
|
||||
static G4float r, p1, p2, p3;
|
||||
static G4int fivex;
|
||||
static G4float rr, ran, rrr, ran1;
|
||||
static G4ThreadLocal G4int i;
|
||||
static G4ThreadLocal G4float r, p1, p2, p3;
|
||||
static G4ThreadLocal G4int fivex;
|
||||
static G4ThreadLocal G4float rr, ran, rrr, ran1;
|
||||
|
||||
// *** GENERATION OF POISSON DISTRIBUTION ***
|
||||
// *** NVE 16-MAR-1988 CERN GENEVA ***
|
||||
@@ -380,7 +381,7 @@ G4int G4AntiNeutronAnnihilationAtRest::NFac(G4int n)
|
||||
{
|
||||
G4int ret_val;
|
||||
|
||||
static G4int i, j;
|
||||
static G4ThreadLocal G4int i, j;
|
||||
|
||||
// *** NVE 16-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
@@ -402,7 +403,7 @@ G4int G4AntiNeutronAnnihilationAtRest::NFac(G4int n)
|
||||
|
||||
void G4AntiNeutronAnnihilationAtRest::Normal(G4float *ran)
|
||||
{
|
||||
static G4int i;
|
||||
static G4ThreadLocal G4int i;
|
||||
|
||||
// *** NVE 14-APR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
@@ -417,24 +418,24 @@ void G4AntiNeutronAnnihilationAtRest::Normal(G4float *ran)
|
||||
|
||||
void G4AntiNeutronAnnihilationAtRest::AntiNeutronAnnihilation(G4int *nopt)
|
||||
{
|
||||
static G4float brr[3] = { G4float(.125),G4float(.25),G4float(.5) };
|
||||
static G4ThreadLocal G4float brr[3] = { G4float(.125),G4float(.25),G4float(.5) };
|
||||
|
||||
G4float r__1;
|
||||
|
||||
static G4int i, ii, kk;
|
||||
static G4int nt;
|
||||
static G4float cfa, eka;
|
||||
static G4int ika, nbl;
|
||||
static G4float ran, pcm;
|
||||
static G4int isw;
|
||||
static G4float tex;
|
||||
static G4ParticleDefinition* ipa1;
|
||||
static G4float ran1, ran2, ekin, tkin;
|
||||
static G4float targ;
|
||||
static G4ParticleDefinition* inve;
|
||||
static G4float ekin1, ekin2, black;
|
||||
static G4float pnrat, rmnve1, rmnve2;
|
||||
static G4float ek, en;
|
||||
static G4ThreadLocal G4int i, ii, kk;
|
||||
static G4ThreadLocal G4int nt;
|
||||
static G4ThreadLocal G4float cfa, eka;
|
||||
static G4ThreadLocal G4int ika, nbl;
|
||||
static G4ThreadLocal G4float ran, pcm;
|
||||
static G4ThreadLocal G4int isw;
|
||||
static G4ThreadLocal G4float tex;
|
||||
static G4ThreadLocal G4ParticleDefinition* ipa1;
|
||||
static G4ThreadLocal G4float ran1, ran2, ekin, tkin;
|
||||
static G4ThreadLocal G4float targ;
|
||||
static G4ThreadLocal G4ParticleDefinition* inve;
|
||||
static G4ThreadLocal G4float ekin1, ekin2, black;
|
||||
static G4ThreadLocal G4float pnrat, rmnve1, rmnve2;
|
||||
static G4ThreadLocal G4float ek, en;
|
||||
|
||||
// *** ANTI NEUTRON ANNIHILATION AT REST ***
|
||||
// *** NVE 04-MAR-1988 CERN GENEVA ***
|
||||
@@ -679,9 +680,9 @@ G4double G4AntiNeutronAnnihilationAtRest::ExNu(G4float ek1)
|
||||
{
|
||||
G4float ret_val, r__1;
|
||||
|
||||
static G4float cfa, gfa, ran1, ran2, ekin1, atno3;
|
||||
static G4int magic;
|
||||
static G4float fpdiv;
|
||||
static G4ThreadLocal G4float cfa, gfa, ran1, ran2, ekin1, atno3;
|
||||
static G4ThreadLocal G4int magic;
|
||||
static G4ThreadLocal G4float fpdiv;
|
||||
|
||||
// *** NUCLEAR EVAPORATION AS FUNCTION OF ATOMIC NUMBER ATNO ***
|
||||
// *** AND KINETIC ENERGY EKIN OF PRIMARY PARTICLE ***
|
||||
|
||||
@@ -1,747 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4AntiProtonAnnihilationAtRest physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#include <string.h>
|
||||
#include <cmath>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "G4AntiProtonAnnihilationAtRest.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4HadronicProcessStore.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
#define MAX_SECONDARIES 100
|
||||
|
||||
// constructor
|
||||
|
||||
G4AntiProtonAnnihilationAtRest::G4AntiProtonAnnihilationAtRest(const G4String& processName,
|
||||
G4ProcessType aType ) :
|
||||
G4VRestProcess (processName, aType), // initialization
|
||||
massPionMinus(G4PionMinus::PionMinus()->GetPDGMass()/GeV),
|
||||
massProton(G4Proton::Proton()->GetPDGMass()/GeV),
|
||||
massPionZero(G4PionZero::PionZero()->GetPDGMass()/GeV),
|
||||
massAntiProton(G4AntiProton::AntiProton()->GetPDGMass()/GeV),
|
||||
massPionPlus(G4PionPlus::PionPlus()->GetPDGMass()/GeV),
|
||||
massGamma(G4Gamma::Gamma()->GetPDGMass()/GeV),
|
||||
pdefGamma(G4Gamma::Gamma()),
|
||||
pdefPionPlus(G4PionPlus::PionPlus()),
|
||||
pdefPionZero(G4PionZero::PionZero()),
|
||||
pdefPionMinus(G4PionMinus::PionMinus()),
|
||||
pdefProton(G4Proton::Proton()),
|
||||
pdefAntiProton(G4AntiProton::AntiProton()),
|
||||
pdefNeutron(G4Neutron::Neutron()),
|
||||
pdefDeuteron(G4Deuteron::Deuteron()),
|
||||
pdefTriton(G4Triton::Triton()),
|
||||
pdefAlpha(G4Alpha::Alpha())
|
||||
{
|
||||
G4HadronicDeprecate("G4AntiProtonAnnihilationAtRest");
|
||||
if (verboseLevel>0) {
|
||||
G4cout << GetProcessName() << " is created "<< G4endl;
|
||||
}
|
||||
SetProcessSubType(fHadronAtRest);
|
||||
pv = new G4GHEKinematicsVector [MAX_SECONDARIES+1];
|
||||
eve = new G4GHEKinematicsVector [MAX_SECONDARIES];
|
||||
gkin = new G4GHEKinematicsVector [MAX_SECONDARIES];
|
||||
|
||||
G4HadronicProcessStore::Instance()->RegisterExtraProcess(this);
|
||||
}
|
||||
|
||||
// destructor
|
||||
|
||||
G4AntiProtonAnnihilationAtRest::~G4AntiProtonAnnihilationAtRest()
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->DeRegisterExtraProcess(this);
|
||||
delete [] pv;
|
||||
delete [] eve;
|
||||
delete [] gkin;
|
||||
}
|
||||
|
||||
void G4AntiProtonAnnihilationAtRest::PreparePhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->RegisterParticleForExtraProcess(this, &p);
|
||||
}
|
||||
|
||||
void G4AntiProtonAnnihilationAtRest::BuildPhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->PrintInfo(&p);
|
||||
}
|
||||
|
||||
// methods.............................................................................
|
||||
|
||||
G4bool G4AntiProtonAnnihilationAtRest::IsApplicable(
|
||||
const G4ParticleDefinition& particle
|
||||
)
|
||||
{
|
||||
return ( &particle == pdefAntiProton );
|
||||
|
||||
}
|
||||
|
||||
// Warning - this method may be optimized away if made "inline"
|
||||
G4int G4AntiProtonAnnihilationAtRest::GetNumberOfSecondaries()
|
||||
{
|
||||
return ( ngkine );
|
||||
|
||||
}
|
||||
|
||||
// Warning - this method may be optimized away if made "inline"
|
||||
G4GHEKinematicsVector* G4AntiProtonAnnihilationAtRest::GetSecondaryKinematics()
|
||||
{
|
||||
return ( &gkin[0] );
|
||||
|
||||
}
|
||||
|
||||
G4double G4AntiProtonAnnihilationAtRest::AtRestGetPhysicalInteractionLength(
|
||||
const G4Track& track,
|
||||
G4ForceCondition* condition
|
||||
)
|
||||
{
|
||||
// beggining of tracking
|
||||
ResetNumberOfInteractionLengthLeft();
|
||||
|
||||
// condition is set to "Not Forced"
|
||||
*condition = NotForced;
|
||||
|
||||
// get mean life time
|
||||
currentInteractionLength = GetMeanLifeTime(track, condition);
|
||||
|
||||
if ((currentInteractionLength <0.0) || (verboseLevel>2)){
|
||||
G4cout << "G4AntiProtonAnnihilationAtRestProcess::AtRestGetPhysicalInteractionLength ";
|
||||
G4cout << "[ " << GetProcessName() << "]" <<G4endl;
|
||||
track.GetDynamicParticle()->DumpInfo();
|
||||
G4cout << " in Material " << track.GetMaterial()->GetName() <<G4endl;
|
||||
G4cout << "MeanLifeTime = " << currentInteractionLength/ns << "[ns]" <<G4endl;
|
||||
}
|
||||
|
||||
return theNumberOfInteractionLengthLeft * currentInteractionLength;
|
||||
|
||||
}
|
||||
|
||||
G4VParticleChange* G4AntiProtonAnnihilationAtRest::AtRestDoIt(
|
||||
const G4Track& track,
|
||||
const G4Step&
|
||||
)
|
||||
//
|
||||
// Handles AntiProtons at rest; a AntiProton can either create secondaries or
|
||||
// do nothing (in which case it should be sent back to decay-handling
|
||||
// section
|
||||
//
|
||||
{
|
||||
|
||||
// Initialize ParticleChange
|
||||
// all members of G4VParticleChange are set to equal to
|
||||
// corresponding member in G4Track
|
||||
|
||||
aParticleChange.Initialize(track);
|
||||
|
||||
// Store some global quantities that depend on current material and particle
|
||||
|
||||
globalTime = track.GetGlobalTime()/s;
|
||||
G4Material * aMaterial = track.GetMaterial();
|
||||
const G4int numberOfElements = aMaterial->GetNumberOfElements();
|
||||
const G4ElementVector* theElementVector = aMaterial->GetElementVector();
|
||||
|
||||
const G4double* theAtomicNumberDensity = aMaterial->GetAtomicNumDensityVector();
|
||||
G4double normalization = 0;
|
||||
for ( G4int i1=0; i1 < numberOfElements; i1++ )
|
||||
{
|
||||
normalization += theAtomicNumberDensity[i1] ; // change when nucleon specific
|
||||
// probabilities are included.
|
||||
}
|
||||
G4double runningSum= 0.;
|
||||
G4double random = G4UniformRand()*normalization;
|
||||
for ( G4int i2=0; i2 < numberOfElements; i2++ )
|
||||
{
|
||||
runningSum += theAtomicNumberDensity[i2]; // change when nucleon specific
|
||||
// probabilities are included.
|
||||
if (random<=runningSum)
|
||||
{
|
||||
targetCharge = G4double((*theElementVector)[i2]->GetZ());
|
||||
targetAtomicMass = (*theElementVector)[i2]->GetN();
|
||||
}
|
||||
}
|
||||
if (random>runningSum)
|
||||
{
|
||||
targetCharge = G4double((*theElementVector)[numberOfElements-1]->GetZ());
|
||||
targetAtomicMass = (*theElementVector)[numberOfElements-1]->GetN();
|
||||
|
||||
}
|
||||
|
||||
if (verboseLevel>1) {
|
||||
G4cout << "G4AntiProtonAnnihilationAtRest::AtRestDoIt is invoked " <<G4endl;
|
||||
}
|
||||
|
||||
G4ParticleMomentum momentum;
|
||||
G4float localtime;
|
||||
|
||||
G4ThreeVector position = track.GetPosition();
|
||||
|
||||
GenerateSecondaries(); // Generate secondaries
|
||||
|
||||
aParticleChange.SetNumberOfSecondaries( ngkine );
|
||||
|
||||
for ( G4int isec = 0; isec < ngkine; isec++ ) {
|
||||
G4DynamicParticle* aNewParticle = new G4DynamicParticle;
|
||||
aNewParticle->SetDefinition( gkin[isec].GetParticleDef() );
|
||||
aNewParticle->SetMomentum( gkin[isec].GetMomentum() * GeV );
|
||||
|
||||
localtime = globalTime + gkin[isec].GetTOF();
|
||||
|
||||
G4Track* aNewTrack = new G4Track( aNewParticle, localtime*s, position );
|
||||
aNewTrack->SetTouchableHandle(track.GetTouchableHandle());
|
||||
aParticleChange.AddSecondary( aNewTrack );
|
||||
|
||||
}
|
||||
|
||||
aParticleChange.ProposeLocalEnergyDeposit( 0.0*GeV );
|
||||
|
||||
aParticleChange.ProposeTrackStatus(fStopAndKill); // Kill the incident AntiProton
|
||||
|
||||
// clear InteractionLengthLeft
|
||||
|
||||
ResetNumberOfInteractionLengthLeft();
|
||||
|
||||
return &aParticleChange;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void G4AntiProtonAnnihilationAtRest::GenerateSecondaries()
|
||||
{
|
||||
static G4int index;
|
||||
static G4int l;
|
||||
static G4int nopt;
|
||||
static G4int i;
|
||||
// DHW 15 May 2011: unused: static G4ParticleDefinition* jnd;
|
||||
|
||||
for (i = 1; i <= MAX_SECONDARIES; ++i) {
|
||||
pv[i].SetZero();
|
||||
}
|
||||
|
||||
ngkine = 0; // number of generated secondary particles
|
||||
ntot = 0;
|
||||
result.SetZero();
|
||||
result.SetMass( massAntiProton );
|
||||
result.SetKineticEnergyAndUpdate( 0. );
|
||||
result.SetTOF( 0. );
|
||||
result.SetParticleDef( pdefAntiProton );
|
||||
|
||||
AntiProtonAnnihilation(&nopt);
|
||||
|
||||
// *** CHECK WHETHER THERE ARE NEW PARTICLES GENERATED ***
|
||||
if (ntot != 0 || result.GetParticleDef() != pdefAntiProton) {
|
||||
// *** CURRENT PARTICLE IS NOT THE SAME AS IN THE BEGINNING OR/AND ***
|
||||
// *** ONE OR MORE SECONDARIES HAVE BEEN GENERATED ***
|
||||
|
||||
// --- INITIAL PARTICLE TYPE HAS BEEN CHANGED ==> PUT NEW TYPE ON ---
|
||||
// --- THE GEANT TEMPORARY STACK ---
|
||||
|
||||
// --- PUT PARTICLE ON THE STACK ---
|
||||
gkin[0] = result;
|
||||
gkin[0].SetTOF( result.GetTOF() * 5e-11 );
|
||||
ngkine = 1;
|
||||
|
||||
// --- ALL QUANTITIES ARE TAKEN FROM THE GHEISHA STACK WHERE THE ---
|
||||
// --- CONVENTION IS THE FOLLOWING ---
|
||||
|
||||
// --- ONE OR MORE SECONDARIES HAVE BEEN GENERATED ---
|
||||
for (l = 1; l <= ntot; ++l) {
|
||||
index = l - 1;
|
||||
// DHW 15 May 2011: unused: jnd = eve[index].GetParticleDef();
|
||||
|
||||
// --- ADD PARTICLE TO THE STACK IF STACK NOT YET FULL ---
|
||||
if (ngkine < MAX_SECONDARIES) {
|
||||
gkin[ngkine] = eve[index];
|
||||
gkin[ngkine].SetTOF( eve[index].GetTOF() * 5e-11 );
|
||||
++ngkine;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// --- NO SECONDARIES GENERATED AND PARTICLE IS STILL THE SAME ---
|
||||
// --- ==> COPY EVERYTHING BACK IN THE CURRENT GEANT STACK ---
|
||||
ngkine = 0;
|
||||
ntot = 0;
|
||||
globalTime += result.GetTOF() * G4float(5e-11);
|
||||
}
|
||||
|
||||
// --- LIMIT THE VALUE OF NGKINE IN CASE OF OVERFLOW ---
|
||||
ngkine = G4int(std::min(ngkine,G4int(MAX_SECONDARIES)));
|
||||
|
||||
} // GenerateSecondaries
|
||||
|
||||
|
||||
void G4AntiProtonAnnihilationAtRest::Poisso(G4float xav, G4int *iran)
|
||||
{
|
||||
static G4int i;
|
||||
static G4float r, p1, p2, p3;
|
||||
static G4int fivex;
|
||||
static G4float rr, ran, rrr, ran1;
|
||||
|
||||
// *** GENERATION OF POISSON DISTRIBUTION ***
|
||||
// *** NVE 16-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
// --- USE NORMAL DISTRIBUTION FOR <X> > 9.9 ---
|
||||
if (xav > G4float(9.9)) {
|
||||
// ** NORMAL DISTRIBUTION WITH SIGMA**2 = <X>
|
||||
Normal(&ran1);
|
||||
ran1 = xav + ran1 * std::sqrt(xav);
|
||||
*iran = G4int(ran1);
|
||||
if (*iran < 0) {
|
||||
*iran = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
fivex = G4int(xav * G4float(5.));
|
||||
*iran = 0;
|
||||
if (fivex > 0) {
|
||||
r = std::exp(-G4double(xav));
|
||||
ran1 = G4UniformRand();
|
||||
if (ran1 > r) {
|
||||
rr = r;
|
||||
for (i = 1; i <= fivex; ++i) {
|
||||
++(*iran);
|
||||
if (i <= 5) {
|
||||
rrr = std::pow(xav, G4float(i)) / NFac(i);
|
||||
}
|
||||
// ** STIRLING' S FORMULA FOR LARGE NUMBERS
|
||||
if (i > 5) {
|
||||
rrr = std::exp(i * std::log(xav) -
|
||||
(i + G4float(.5)) * std::log(i * G4float(1.)) +
|
||||
i - G4float(.9189385));
|
||||
}
|
||||
rr += r * rrr;
|
||||
if (ran1 <= rr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// ** FOR VERY SMALL XAV TRY IRAN=1,2,3
|
||||
p1 = xav * std::exp(-G4double(xav));
|
||||
p2 = xav * p1 / G4float(2.);
|
||||
p3 = xav * p2 / G4float(3.);
|
||||
ran = G4UniformRand();
|
||||
if (ran >= p3) {
|
||||
if (ran >= p2) {
|
||||
if (ran >= p1) {
|
||||
*iran = 0;
|
||||
}
|
||||
else {
|
||||
*iran = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
*iran = 2;
|
||||
}
|
||||
}
|
||||
else {
|
||||
*iran = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // Poisso
|
||||
|
||||
|
||||
G4int G4AntiProtonAnnihilationAtRest::NFac(G4int n)
|
||||
{
|
||||
G4int ret_val;
|
||||
|
||||
static G4int i, j;
|
||||
|
||||
// *** NVE 16-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
ret_val = 1;
|
||||
j = n;
|
||||
if (j > 1) {
|
||||
if (j > 10) {
|
||||
j = 10;
|
||||
}
|
||||
for (i = 2; i <= j; ++i) {
|
||||
ret_val *= i;
|
||||
}
|
||||
}
|
||||
return ret_val;
|
||||
|
||||
} // NFac
|
||||
|
||||
|
||||
void G4AntiProtonAnnihilationAtRest::Normal(G4float *ran)
|
||||
{
|
||||
static G4int i;
|
||||
|
||||
// *** NVE 14-APR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
*ran = G4float(-6.);
|
||||
for (i = 1; i <= 12; ++i) {
|
||||
*ran += G4UniformRand();
|
||||
}
|
||||
|
||||
} // Normal
|
||||
|
||||
|
||||
void G4AntiProtonAnnihilationAtRest::AntiProtonAnnihilation(G4int *nopt)
|
||||
{
|
||||
static G4float brr[3] = { G4float(.125),G4float(.25),G4float(.5) };
|
||||
|
||||
G4float r__1;
|
||||
|
||||
static G4int i, ii, kk;
|
||||
static G4int nt;
|
||||
static G4float cfa, eka;
|
||||
static G4int ika, nbl;
|
||||
static G4float ran, pcm;
|
||||
static G4int isw;
|
||||
static G4float tex;
|
||||
static G4ParticleDefinition* ipa1;
|
||||
static G4float ran1, ran2, ekin, tkin;
|
||||
static G4float targ;
|
||||
static G4ParticleDefinition* inve;
|
||||
static G4float ekin1, ekin2, black;
|
||||
static G4float pnrat, rmnve1, rmnve2;
|
||||
static G4float ek, en;
|
||||
|
||||
// *** ANTI PROTON ANNIHILATION AT REST ***
|
||||
// *** NVE 04-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (09-JULY-1987)
|
||||
|
||||
// NOPT=0 NO ANNIHILATION
|
||||
// NOPT=1 ANNIH.IN PI+ PI-
|
||||
// NOPT=2 ANNIH.IN PI0 PI0
|
||||
// NOPT=3 ANNIH.IN PI- PI0
|
||||
// NOPT=4 ANNIH.IN GAMMA GAMMA
|
||||
|
||||
pv[1].SetZero();
|
||||
pv[1].SetMass( massAntiProton );
|
||||
pv[1].SetKineticEnergyAndUpdate( 0. );
|
||||
pv[1].SetTOF( result.GetTOF() );
|
||||
pv[1].SetParticleDef( result.GetParticleDef() );
|
||||
isw = 1;
|
||||
ran = G4UniformRand();
|
||||
if (ran > brr[0]) {
|
||||
isw = 2;
|
||||
}
|
||||
if (ran > brr[1]) {
|
||||
isw = 3;
|
||||
}
|
||||
if (ran > brr[2]) {
|
||||
isw = 4;
|
||||
}
|
||||
*nopt = isw;
|
||||
// **
|
||||
// ** EVAPORATION
|
||||
// **
|
||||
if (isw == 1) {
|
||||
rmnve1 = massPionPlus;
|
||||
rmnve2 = massPionMinus;
|
||||
}
|
||||
else if (isw == 2) {
|
||||
rmnve1 = massPionZero;
|
||||
rmnve2 = massPionZero;
|
||||
}
|
||||
else if (isw == 3) {
|
||||
rmnve1 = massPionMinus;
|
||||
rmnve2 = massPionZero;
|
||||
}
|
||||
else if (isw == 4) {
|
||||
rmnve1 = massGamma;
|
||||
rmnve2 = massGamma;
|
||||
}
|
||||
ek = massProton + massAntiProton - rmnve1 - rmnve2;
|
||||
tkin = ExNu(ek);
|
||||
ek -= tkin;
|
||||
if (ek < G4float(1e-4)) {
|
||||
ek = G4float(1e-4);
|
||||
}
|
||||
ek *= G4float(.5);
|
||||
en = ek + (rmnve1 + rmnve2) * G4float(.5);
|
||||
r__1 = en * en - rmnve1 * rmnve2;
|
||||
pcm = r__1 > 0 ? std::sqrt(r__1) : 0;
|
||||
pv[2].SetZero();
|
||||
pv[2].SetMass( rmnve1 );
|
||||
pv[3].SetZero();
|
||||
pv[3].SetMass( rmnve2 );
|
||||
if (isw > 3) {
|
||||
pv[2].SetMass( 0. );
|
||||
pv[3].SetMass( 0. );
|
||||
}
|
||||
pv[2].SetEnergyAndUpdate( std::sqrt(pv[2].GetMass()*pv[2].GetMass()+pcm*pcm) );
|
||||
pv[2].SetTOF( result.GetTOF() );
|
||||
pv[3].SetEnergy( std::sqrt(pv[3].GetMass()*pv[3].GetMass()+pcm*pcm) );
|
||||
pv[3].SetMomentumAndUpdate( -pv[2].GetMomentum().x(), -pv[2].GetMomentum().y(), -pv[2].GetMomentum().z() );
|
||||
pv[3].SetTOF( result.GetTOF() );
|
||||
switch ((int)isw) {
|
||||
case 1:
|
||||
pv[2].SetParticleDef( pdefPionPlus );
|
||||
pv[3].SetParticleDef( pdefPionMinus );
|
||||
break;
|
||||
case 2:
|
||||
pv[2].SetParticleDef( pdefPionZero );
|
||||
pv[3].SetParticleDef( pdefPionZero );
|
||||
break;
|
||||
case 3:
|
||||
pv[2].SetParticleDef( pdefPionMinus );
|
||||
pv[3].SetParticleDef( pdefPionZero );
|
||||
break;
|
||||
case 4:
|
||||
pv[2].SetParticleDef( pdefGamma );
|
||||
pv[3].SetParticleDef( pdefGamma );
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
nt = 3;
|
||||
if (targetAtomicMass >= G4float(1.5)) {
|
||||
cfa = (targetAtomicMass - G4float(1.)) /
|
||||
G4float(120.) * G4float(.025) *
|
||||
std::exp(-G4double(targetAtomicMass - G4float(1.)) / G4float(120.));
|
||||
targ = G4float(1.);
|
||||
tex = evapEnergy1;
|
||||
if (tex >= G4float(.001)) {
|
||||
black = (targ * G4float(1.25) +
|
||||
G4float(1.5)) * evapEnergy1 / (evapEnergy1 + evapEnergy3);
|
||||
Poisso(black, &nbl);
|
||||
if (G4float(G4int(targ) + nbl) > targetAtomicMass) {
|
||||
nbl = G4int(targetAtomicMass - targ);
|
||||
}
|
||||
if (nt + nbl > (MAX_SECONDARIES - 2)) {
|
||||
nbl = (MAX_SECONDARIES - 2) - nt;
|
||||
}
|
||||
if (nbl > 0) {
|
||||
ekin = tex / nbl;
|
||||
ekin2 = G4float(0.);
|
||||
for (i = 1; i <= nbl; ++i) {
|
||||
if (nt == (MAX_SECONDARIES - 2)) {
|
||||
continue;
|
||||
}
|
||||
if (ekin2 > tex) {
|
||||
break;
|
||||
}
|
||||
ran1 = G4UniformRand();
|
||||
Normal(&ran2);
|
||||
ekin1 = -G4double(ekin) * std::log(ran1) -
|
||||
cfa * (ran2 * G4float(.5) + G4float(1.));
|
||||
if (ekin1 < G4float(0.)) {
|
||||
ekin1 = std::log(ran1) * G4float(-.01);
|
||||
}
|
||||
ekin1 *= G4float(1.);
|
||||
ekin2 += ekin1;
|
||||
if (ekin2 > tex) {
|
||||
ekin1 = tex - (ekin2 - ekin1);
|
||||
}
|
||||
if (ekin1 < G4float(0.)) {
|
||||
ekin1 = G4float(.001);
|
||||
}
|
||||
ipa1 = pdefNeutron;
|
||||
pnrat = G4float(1.) - targetCharge / targetAtomicMass;
|
||||
if (G4UniformRand() > pnrat) {
|
||||
ipa1 = pdefProton;
|
||||
}
|
||||
++nt;
|
||||
pv[nt].SetZero();
|
||||
pv[nt].SetMass( ipa1->GetPDGMass()/GeV );
|
||||
pv[nt].SetKineticEnergyAndUpdate( ekin1 );
|
||||
pv[nt].SetTOF( result.GetTOF() );
|
||||
pv[nt].SetParticleDef( ipa1 );
|
||||
}
|
||||
if (targetAtomicMass >= G4float(230.) && ek <= G4float(2.)) {
|
||||
ii = nt + 1;
|
||||
kk = 0;
|
||||
eka = ek;
|
||||
if (eka > G4float(1.)) {
|
||||
eka *= eka;
|
||||
}
|
||||
if (eka < G4float(.1)) {
|
||||
eka = G4float(.1);
|
||||
}
|
||||
ika = G4int(G4float(3.6) / eka);
|
||||
for (i = 1; i <= nt; ++i) {
|
||||
--ii;
|
||||
if (pv[ii].GetParticleDef() != pdefProton) {
|
||||
continue;
|
||||
}
|
||||
ipa1 = pdefNeutron;
|
||||
pv[ii].SetMass( ipa1->GetPDGMass()/GeV );
|
||||
pv[ii].SetParticleDef( ipa1 );
|
||||
++kk;
|
||||
if (kk > ika) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// **
|
||||
// ** THEN ALSO DEUTERONS, TRITONS AND ALPHAS
|
||||
// **
|
||||
tex = evapEnergy3;
|
||||
if (tex >= G4float(.001)) {
|
||||
black = (targ * G4float(1.25) + G4float(1.5)) * evapEnergy3 /
|
||||
(evapEnergy1 + evapEnergy3);
|
||||
Poisso(black, &nbl);
|
||||
if (nt + nbl > (MAX_SECONDARIES - 2)) {
|
||||
nbl = (MAX_SECONDARIES - 2) - nt;
|
||||
}
|
||||
if (nbl > 0) {
|
||||
ekin = tex / nbl;
|
||||
ekin2 = G4float(0.);
|
||||
for (i = 1; i <= nbl; ++i) {
|
||||
if (nt == (MAX_SECONDARIES - 2)) {
|
||||
continue;
|
||||
}
|
||||
if (ekin2 > tex) {
|
||||
break;
|
||||
}
|
||||
ran1 = G4UniformRand();
|
||||
Normal(&ran2);
|
||||
ekin1 = -G4double(ekin) * std::log(ran1) -
|
||||
cfa * (ran2 * G4float(.5) + G4float(1.));
|
||||
if (ekin1 < G4float(0.)) {
|
||||
ekin1 = std::log(ran1) * G4float(-.01);
|
||||
}
|
||||
ekin1 *= G4float(1.);
|
||||
ekin2 += ekin1;
|
||||
if (ekin2 > tex) {
|
||||
ekin1 = tex - (ekin2 - ekin1);
|
||||
}
|
||||
if (ekin1 < G4float(0.)) {
|
||||
ekin1 = G4float(.001);
|
||||
}
|
||||
ran = G4UniformRand();
|
||||
inve = pdefDeuteron;
|
||||
if (ran > G4float(.6)) {
|
||||
inve = pdefTriton;
|
||||
}
|
||||
if (ran > G4float(.9)) {
|
||||
inve = pdefAlpha;
|
||||
}
|
||||
++nt;
|
||||
pv[nt].SetZero();
|
||||
pv[nt].SetMass( inve->GetPDGMass()/GeV );
|
||||
pv[nt].SetKineticEnergyAndUpdate( ekin1 );
|
||||
pv[nt].SetTOF( result.GetTOF() );
|
||||
pv[nt].SetParticleDef( inve );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
result = pv[2];
|
||||
if (nt == 2) {
|
||||
return;
|
||||
}
|
||||
for (i = 3; i <= nt; ++i) {
|
||||
if (ntot >= MAX_SECONDARIES) {
|
||||
return;
|
||||
}
|
||||
eve[ntot++] = pv[i];
|
||||
}
|
||||
|
||||
} // AntiProtonAnnihilation
|
||||
|
||||
|
||||
G4double G4AntiProtonAnnihilationAtRest::ExNu(G4float ek1)
|
||||
{
|
||||
G4float ret_val, r__1;
|
||||
|
||||
static G4float cfa, gfa, ran1, ran2, ekin1, atno3;
|
||||
static G4int magic;
|
||||
static G4float fpdiv;
|
||||
|
||||
// *** NUCLEAR EVAPORATION AS FUNCTION OF ATOMIC NUMBER ATNO ***
|
||||
// *** AND KINETIC ENERGY EKIN OF PRIMARY PARTICLE ***
|
||||
// *** NVE 04-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (10-DEC-1986)
|
||||
|
||||
ret_val = G4float(0.);
|
||||
if (targetAtomicMass >= G4float(1.5)) {
|
||||
magic = 0;
|
||||
if (G4int(targetCharge + G4float(.1)) == 82) {
|
||||
magic = 1;
|
||||
}
|
||||
ekin1 = ek1;
|
||||
if (ekin1 < G4float(.1)) {
|
||||
ekin1 = G4float(.1);
|
||||
}
|
||||
if (ekin1 > G4float(4.)) {
|
||||
ekin1 = G4float(4.);
|
||||
}
|
||||
// ** 0.35 VALUE AT 1 GEV
|
||||
// ** 0.05 VALUE AT 0.1 GEV
|
||||
cfa = G4float(.13043478260869565);
|
||||
cfa = cfa * std::log(ekin1) + G4float(.35);
|
||||
if (cfa < G4float(.15)) {
|
||||
cfa = G4float(.15);
|
||||
}
|
||||
ret_val = cfa * G4float(7.716) * std::exp(-G4double(cfa));
|
||||
atno3 = targetAtomicMass;
|
||||
if (atno3 > G4float(120.)) {
|
||||
atno3 = G4float(120.);
|
||||
}
|
||||
cfa = (atno3 - G4float(1.)) /
|
||||
G4float(120.) * std::exp(-G4double(atno3 - G4float(1.)) / G4float(120.));
|
||||
ret_val *= cfa;
|
||||
r__1 = ekin1;
|
||||
fpdiv = G4float(1.) - r__1 * r__1 * G4float(.25);
|
||||
if (fpdiv < G4float(.5)) {
|
||||
fpdiv = G4float(.5);
|
||||
}
|
||||
gfa = (targetAtomicMass - G4float(1.)) /
|
||||
G4float(70.) * G4float(2.) *
|
||||
std::exp(-G4double(targetAtomicMass - G4float(1.)) / G4float(70.));
|
||||
evapEnergy1 = ret_val * fpdiv;
|
||||
evapEnergy3 = ret_val - evapEnergy1;
|
||||
Normal(&ran1);
|
||||
Normal(&ran2);
|
||||
if (magic == 1) {
|
||||
ran1 = G4float(0.);
|
||||
ran2 = G4float(0.);
|
||||
}
|
||||
evapEnergy1 *= ran1 * gfa + G4float(1.);
|
||||
if (evapEnergy1 < G4float(0.)) {
|
||||
evapEnergy1 = G4float(0.);
|
||||
}
|
||||
evapEnergy3 *= ran2 * gfa + G4float(1.);
|
||||
if (evapEnergy3 < G4float(0.)) {
|
||||
evapEnergy3 = G4float(0.);
|
||||
}
|
||||
while ((ret_val = evapEnergy1 + evapEnergy3) >= ek1) {
|
||||
evapEnergy1 *= G4float(1.) - G4UniformRand() * G4float(.5);
|
||||
evapEnergy3 *= G4float(1.) - G4UniformRand() * G4float(.5);
|
||||
}
|
||||
}
|
||||
return ret_val;
|
||||
|
||||
} // ExNu
|
||||
@@ -1,134 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4DistributionGenerator
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
#include "G4ios.hh"
|
||||
#include <assert.h>
|
||||
|
||||
// Constructor
|
||||
|
||||
G4DistributionGenerator::G4DistributionGenerator(std::vector<G4double>& x,
|
||||
std::vector<G4double>& values)
|
||||
|
||||
{
|
||||
G4HadronicDeprecate("G4DistributionGenerator");
|
||||
_x = x;
|
||||
|
||||
// Check boundaries: must be size(x) = size(values) + 1
|
||||
if (x.size() != (values.size() + 1))
|
||||
{ G4cout << " Inconsistent parameters in G4DistributionGenerator "
|
||||
<< G4endl;
|
||||
}
|
||||
assert (x.size() == (values.size() + 1));
|
||||
|
||||
G4double tot = 0.;
|
||||
unsigned int i;
|
||||
for (i=0; i<values.size(); i++) { tot += values[i]; }
|
||||
assert (tot > 0.);
|
||||
|
||||
_cumProb.push_back(0.);
|
||||
// _cumProb.push_back(values[0] / tot);
|
||||
G4double sum = 0.;
|
||||
for (i=0; i<values.size(); i++)
|
||||
{
|
||||
sum += values[i];
|
||||
_cumProb.push_back(sum / tot); }
|
||||
|
||||
// Debugging
|
||||
/*
|
||||
for (i=0; i<values.size(); i++)
|
||||
{ G4cout << values[i] << " " ; }
|
||||
G4cout << " Integral = " << tot << G4endl;
|
||||
for (i=0; i<_cumProb.size(); i++)
|
||||
{
|
||||
G4cout << "Variable " << _x[i]
|
||||
<< " --- cumProb = " << _cumProb[i] << G4endl;
|
||||
}
|
||||
*/
|
||||
// End of debugging
|
||||
|
||||
}
|
||||
|
||||
// Destructor
|
||||
|
||||
G4DistributionGenerator::~G4DistributionGenerator()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
G4double G4DistributionGenerator::Generate(G4double ranflat)
|
||||
{
|
||||
G4double xRandom = _x[0];
|
||||
|
||||
G4int bin = _cumProb.size() - 1;
|
||||
unsigned int i;
|
||||
for (i=1; i<_cumProb.size(); i++)
|
||||
{
|
||||
if (ranflat >= _cumProb[i-1] && ranflat < _cumProb[i])
|
||||
{
|
||||
bin = i - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (bin >= 0 && bin < static_cast<G4int>(_cumProb.size()-1) && bin < static_cast<G4int>(_x.size()-1))
|
||||
{
|
||||
G4double coeff = (ranflat - _cumProb[bin]) * (_x[bin+1] - _x[bin]) /
|
||||
(_cumProb[bin+1] - _cumProb[bin]);
|
||||
xRandom = _x[bin] + coeff;
|
||||
|
||||
// Deugging
|
||||
/*
|
||||
G4cout << "Random = " << ranflat << " Generated " << xRandom << G4endl;
|
||||
*/
|
||||
// Endo of Debugging
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Debugging
|
||||
/*
|
||||
G4cout << "Bin " << bin << " "
|
||||
<< _cumProb.size() << " "
|
||||
<< _x.size()
|
||||
<< G4endl;
|
||||
*/
|
||||
// End of debugging
|
||||
}
|
||||
|
||||
return xRandom;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4ElementSelector.cc 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
// File: G4ElementSelector
|
||||
//
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4EmCaptureCascade.cc 69573 2013-05-08 13:35:53Z gcosmo $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
@@ -94,6 +94,7 @@ G4EmCaptureCascade::G4EmCaptureCascade()
|
||||
fKLevelEnergy[z2] = listKEnergy[i];
|
||||
idx = i;
|
||||
}
|
||||
for( G4int i = 0; i<14; ++i) { fLevelEnergy[i] = 0.0; }
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4HadronStoppingProcess.cc 66367 2012-12-18 09:18:08Z gcosmo $
|
||||
//
|
||||
//---------------------------------------------------------------------
|
||||
//
|
||||
|
||||
@@ -1,572 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4KaonMinusAbsorption physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#include <string.h>
|
||||
#include <cmath>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "G4KaonMinusAbsorption.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "G4HadronicProcessStore.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
#define MAX_SECONDARIES 100
|
||||
|
||||
// constructor
|
||||
|
||||
G4KaonMinusAbsorption::G4KaonMinusAbsorption(const G4String& processName,
|
||||
G4ProcessType aType ) :
|
||||
G4VRestProcess (processName, aType), // initialization
|
||||
massKaonMinus(G4KaonMinus::KaonMinus()->GetPDGMass()/GeV),
|
||||
massGamma(G4Gamma::Gamma()->GetPDGMass()/GeV),
|
||||
massPionZero(G4PionZero::PionZero()->GetPDGMass()/GeV),
|
||||
massProton(G4Proton::Proton()->GetPDGMass()/GeV),
|
||||
massLambda(G4Lambda::Lambda()->GetPDGMass()/GeV),
|
||||
pdefKaonMinus(G4KaonMinus::KaonMinus()),
|
||||
pdefGamma(G4Gamma::Gamma()),
|
||||
pdefPionZero(G4PionZero::PionZero()),
|
||||
pdefProton(G4Proton::Proton()),
|
||||
pdefNeutron(G4Neutron::Neutron()),
|
||||
pdefLambda(G4Lambda::Lambda()),
|
||||
pdefDeuteron(G4Deuteron::Deuteron()),
|
||||
pdefTriton(G4Triton::Triton()),
|
||||
pdefAlpha(G4Alpha::Alpha())
|
||||
{
|
||||
G4HadronicDeprecate("G4KaonMinusAbsorption");
|
||||
if (verboseLevel>0) {
|
||||
G4cout << GetProcessName() << " is created "<< G4endl;
|
||||
}
|
||||
SetProcessSubType(fHadronAtRest);
|
||||
pv = new G4GHEKinematicsVector [MAX_SECONDARIES+1];
|
||||
eve = new G4GHEKinematicsVector [MAX_SECONDARIES];
|
||||
gkin = new G4GHEKinematicsVector [MAX_SECONDARIES];
|
||||
|
||||
G4HadronicProcessStore::Instance()->RegisterExtraProcess(this);
|
||||
}
|
||||
|
||||
// destructor
|
||||
|
||||
G4KaonMinusAbsorption::~G4KaonMinusAbsorption()
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->DeRegisterExtraProcess(this);
|
||||
delete [] pv;
|
||||
delete [] eve;
|
||||
delete [] gkin;
|
||||
}
|
||||
|
||||
void G4KaonMinusAbsorption::PreparePhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->RegisterParticleForExtraProcess(this, &p);
|
||||
}
|
||||
|
||||
void G4KaonMinusAbsorption::BuildPhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->PrintInfo(&p);
|
||||
}
|
||||
|
||||
// methods.............................................................................
|
||||
|
||||
G4bool G4KaonMinusAbsorption::IsApplicable(
|
||||
const G4ParticleDefinition& particle
|
||||
)
|
||||
{
|
||||
return ( &particle == pdefKaonMinus );
|
||||
|
||||
}
|
||||
|
||||
// Warning - this method may be optimized away if made "inline"
|
||||
G4int G4KaonMinusAbsorption::GetNumberOfSecondaries()
|
||||
{
|
||||
return ( ngkine );
|
||||
|
||||
}
|
||||
|
||||
// Warning - this method may be optimized away if made "inline"
|
||||
G4GHEKinematicsVector* G4KaonMinusAbsorption::GetSecondaryKinematics()
|
||||
{
|
||||
return ( &gkin[0] );
|
||||
|
||||
}
|
||||
|
||||
G4double G4KaonMinusAbsorption::AtRestGetPhysicalInteractionLength(
|
||||
const G4Track& track,
|
||||
G4ForceCondition* condition
|
||||
)
|
||||
{
|
||||
// beggining of tracking
|
||||
ResetNumberOfInteractionLengthLeft();
|
||||
|
||||
// condition is set to "Not Forced"
|
||||
*condition = NotForced;
|
||||
|
||||
// get mean life time
|
||||
currentInteractionLength = GetMeanLifeTime(track, condition);
|
||||
|
||||
if ((currentInteractionLength <0.0) || (verboseLevel>2)){
|
||||
G4cout << "G4KaonMinusAbsorptionProcess::AtRestGetPhysicalInteractionLength ";
|
||||
G4cout << "[ " << GetProcessName() << "]" <<G4endl;
|
||||
track.GetDynamicParticle()->DumpInfo();
|
||||
G4cout << " in Material " << track.GetMaterial()->GetName() <<G4endl;
|
||||
G4cout << "MeanLifeTime = " << currentInteractionLength/ns << "[ns]" <<G4endl;
|
||||
}
|
||||
|
||||
return theNumberOfInteractionLengthLeft * currentInteractionLength;
|
||||
|
||||
}
|
||||
|
||||
G4VParticleChange* G4KaonMinusAbsorption::AtRestDoIt(
|
||||
const G4Track& track,
|
||||
const G4Step&
|
||||
)
|
||||
//
|
||||
// Handles KaonMinus at rest; a KaonMinus can either create secondaries or
|
||||
// do nothing (in which case it should be sent back to decay-handling
|
||||
// section
|
||||
//
|
||||
{
|
||||
|
||||
// Initialize ParticleChange
|
||||
// all members of G4VParticleChange are set to equal to
|
||||
// corresponding member in G4Track
|
||||
|
||||
aParticleChange.Initialize(track);
|
||||
|
||||
// Store some global quantities that depend on current material and particle
|
||||
|
||||
globalTime = track.GetGlobalTime()/s;
|
||||
G4Material * aMaterial = track.GetMaterial();
|
||||
const G4int numberOfElements = aMaterial->GetNumberOfElements();
|
||||
const G4ElementVector* theElementVector = aMaterial->GetElementVector();
|
||||
|
||||
const G4double* theAtomicNumberDensity = aMaterial->GetAtomicNumDensityVector();
|
||||
G4double normalization = 0;
|
||||
for ( G4int i1=0; i1 < numberOfElements; i1++ )
|
||||
{
|
||||
normalization += theAtomicNumberDensity[i1] ; // change when nucleon specific
|
||||
// probabilities are included.
|
||||
}
|
||||
G4double runningSum= 0.;
|
||||
G4double random = G4UniformRand()*normalization;
|
||||
for ( G4int i2=0; i2 < numberOfElements; i2++ )
|
||||
{
|
||||
runningSum += theAtomicNumberDensity[i2]; // change when nucleon specific
|
||||
// probabilities are included.
|
||||
if (random<=runningSum)
|
||||
{
|
||||
targetCharge = G4double( ((*theElementVector)[i2])->GetZ());
|
||||
targetAtomicMass = (*theElementVector)[i2]->GetN();
|
||||
}
|
||||
}
|
||||
if (random>runningSum)
|
||||
{
|
||||
targetCharge = G4double((*theElementVector)[numberOfElements-1]->GetZ());
|
||||
targetAtomicMass = (*theElementVector)[numberOfElements-1]->GetN();
|
||||
|
||||
}
|
||||
|
||||
if (verboseLevel>1) {
|
||||
G4cout << "G4KaonMinusAbsorption::AtRestDoIt is invoked " <<G4endl;
|
||||
}
|
||||
|
||||
G4ParticleMomentum momentum;
|
||||
G4float localtime;
|
||||
|
||||
G4ThreeVector position = track.GetPosition();
|
||||
|
||||
GenerateSecondaries(); // Generate secondaries
|
||||
|
||||
aParticleChange.SetNumberOfSecondaries( ngkine );
|
||||
|
||||
for ( G4int isec = 0; isec < ngkine; isec++ ) {
|
||||
G4DynamicParticle* aNewParticle = new G4DynamicParticle;
|
||||
aNewParticle->SetDefinition( gkin[isec].GetParticleDef() );
|
||||
aNewParticle->SetMomentum( gkin[isec].GetMomentum() * GeV );
|
||||
|
||||
localtime = globalTime + gkin[isec].GetTOF();
|
||||
|
||||
G4Track* aNewTrack = new G4Track( aNewParticle, localtime*s, position );
|
||||
aNewTrack->SetTouchableHandle(track.GetTouchableHandle());
|
||||
aParticleChange.AddSecondary( aNewTrack );
|
||||
|
||||
}
|
||||
|
||||
aParticleChange.ProposeLocalEnergyDeposit( 0.0*GeV );
|
||||
|
||||
aParticleChange.ProposeTrackStatus(fStopAndKill); // Kill the incident KaonMinus
|
||||
|
||||
// clear InteractionLengthLeft
|
||||
|
||||
ResetNumberOfInteractionLengthLeft();
|
||||
|
||||
return &aParticleChange;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void G4KaonMinusAbsorption::GenerateSecondaries()
|
||||
{
|
||||
static G4int index;
|
||||
static G4int l;
|
||||
static G4int nopt;
|
||||
static G4int i;
|
||||
// DHW 15 May 2011: unused: static G4ParticleDefinition* jnd;
|
||||
|
||||
for (i = 1; i <= MAX_SECONDARIES; ++i) {
|
||||
pv[i].SetZero();
|
||||
}
|
||||
|
||||
ngkine = 0; // number of generated secondary particles
|
||||
ntot = 0;
|
||||
result.SetZero();
|
||||
result.SetMass( massKaonMinus );
|
||||
result.SetKineticEnergyAndUpdate( 0. );
|
||||
result.SetTOF( 0. );
|
||||
result.SetParticleDef( pdefKaonMinus );
|
||||
|
||||
KaonMinusAbsorption(&nopt);
|
||||
|
||||
// *** CHECK WHETHER THERE ARE NEW PARTICLES GENERATED ***
|
||||
if (ntot != 0 || result.GetParticleDef() != pdefKaonMinus) {
|
||||
// *** CURRENT PARTICLE IS NOT THE SAME AS IN THE BEGINNING OR/AND ***
|
||||
// *** ONE OR MORE SECONDARIES HAVE BEEN GENERATED ***
|
||||
|
||||
// --- INITIAL PARTICLE TYPE HAS BEEN CHANGED ==> PUT NEW TYPE ON ---
|
||||
// --- THE GEANT TEMPORARY STACK ---
|
||||
|
||||
// --- PUT PARTICLE ON THE STACK ---
|
||||
gkin[0] = result;
|
||||
gkin[0].SetTOF( result.GetTOF() * 5e-11 );
|
||||
ngkine = 1;
|
||||
|
||||
// --- ALL QUANTITIES ARE TAKEN FROM THE GHEISHA STACK WHERE THE ---
|
||||
// --- CONVENTION IS THE FOLLOWING ---
|
||||
|
||||
// --- ONE OR MORE SECONDARIES HAVE BEEN GENERATED ---
|
||||
for (l = 1; l <= ntot; ++l) {
|
||||
index = l - 1;
|
||||
// DHW 15 May 2011: unused: jnd = eve[index].GetParticleDef();
|
||||
|
||||
// --- ADD PARTICLE TO THE STACK IF STACK NOT YET FULL ---
|
||||
if (ngkine < MAX_SECONDARIES) {
|
||||
gkin[ngkine] = eve[index];
|
||||
gkin[ngkine].SetTOF( eve[index].GetTOF() * 5e-11 );
|
||||
++ngkine;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// --- NO SECONDARIES GENERATED AND PARTICLE IS STILL THE SAME ---
|
||||
// --- ==> COPY EVERYTHING BACK IN THE CURRENT GEANT STACK ---
|
||||
ngkine = 0;
|
||||
ntot = 0;
|
||||
globalTime += result.GetTOF() * G4float(5e-11);
|
||||
}
|
||||
|
||||
// --- LIMIT THE VALUE OF NGKINE IN CASE OF OVERFLOW ---
|
||||
ngkine = G4int(std::min(ngkine,G4int(MAX_SECONDARIES)));
|
||||
|
||||
} // GenerateSecondaries
|
||||
|
||||
|
||||
void G4KaonMinusAbsorption::Poisso(G4float xav, G4int *iran)
|
||||
{
|
||||
static G4int i;
|
||||
static G4float r, p1, p2, p3;
|
||||
static G4int fivex;
|
||||
static G4float rr, ran, rrr, ran1;
|
||||
|
||||
// *** GENERATION OF POISSON DISTRIBUTION ***
|
||||
// *** NVE 16-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
// --- USE NORMAL DISTRIBUTION FOR <X> > 9.9 ---
|
||||
if (xav > G4float(9.9)) {
|
||||
// ** NORMAL DISTRIBUTION WITH SIGMA**2 = <X>
|
||||
Normal(&ran1);
|
||||
ran1 = xav + ran1 * std::sqrt(xav);
|
||||
*iran = G4int(ran1);
|
||||
if (*iran < 0) {
|
||||
*iran = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
fivex = G4int(xav * G4float(5.));
|
||||
*iran = 0;
|
||||
if (fivex > 0) {
|
||||
r = std::exp(-G4double(xav));
|
||||
ran1 = G4UniformRand();
|
||||
if (ran1 > r) {
|
||||
rr = r;
|
||||
for (i = 1; i <= fivex; ++i) {
|
||||
++(*iran);
|
||||
if (i <= 5) {
|
||||
rrr = std::pow(xav, G4float(i)) / NFac(i);
|
||||
}
|
||||
// ** STIRLING' S FORMULA FOR LARGE NUMBERS
|
||||
if (i > 5) {
|
||||
rrr = std::exp(i * std::log(xav) -
|
||||
(i + G4float(.5)) * std::log(i * G4float(1.)) +
|
||||
i - G4float(.9189385));
|
||||
}
|
||||
rr += r * rrr;
|
||||
if (ran1 <= rr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// ** FOR VERY SMALL XAV TRY IRAN=1,2,3
|
||||
p1 = xav * std::exp(-G4double(xav));
|
||||
p2 = xav * p1 / G4float(2.);
|
||||
p3 = xav * p2 / G4float(3.);
|
||||
ran = G4UniformRand();
|
||||
if (ran >= p3) {
|
||||
if (ran >= p2) {
|
||||
if (ran >= p1) {
|
||||
*iran = 0;
|
||||
}
|
||||
else {
|
||||
*iran = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
*iran = 2;
|
||||
}
|
||||
}
|
||||
else {
|
||||
*iran = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // Poisso
|
||||
|
||||
|
||||
G4int G4KaonMinusAbsorption::NFac(G4int n)
|
||||
{
|
||||
G4int ret_val;
|
||||
|
||||
static G4int i, j;
|
||||
|
||||
// *** NVE 16-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
ret_val = 1;
|
||||
j = n;
|
||||
if (j > 1) {
|
||||
if (j > 10) {
|
||||
j = 10;
|
||||
}
|
||||
for (i = 2; i <= j; ++i) {
|
||||
ret_val *= i;
|
||||
}
|
||||
}
|
||||
return ret_val;
|
||||
|
||||
} // NFac
|
||||
|
||||
|
||||
void G4KaonMinusAbsorption::Normal(G4float *ran)
|
||||
{
|
||||
static G4int i;
|
||||
|
||||
// *** NVE 14-APR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
*ran = G4float(-6.);
|
||||
for (i = 1; i <= 12; ++i) {
|
||||
*ran += G4UniformRand();
|
||||
}
|
||||
|
||||
} // Normal
|
||||
|
||||
|
||||
void G4KaonMinusAbsorption::KaonMinusAbsorption(G4int *nopt)
|
||||
{
|
||||
static G4int i;
|
||||
static G4int nt, nbl;
|
||||
static G4float ran, pcm;
|
||||
static G4int isw;
|
||||
static G4float tex;
|
||||
static G4float ran2, tof1, ekin, ekin1, ekin2, black;
|
||||
static G4float pnrat;
|
||||
static G4ParticleDefinition* ipa1;
|
||||
static G4ParticleDefinition* inve;
|
||||
|
||||
// *** CHARGED KAON ABSORPTION BY A NUCLEUS ***
|
||||
// *** NVE 04-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (09-JULY-1987)
|
||||
|
||||
// PRODUCTION OF A HYPERFRAGMENT WITH SUBSEQUENT DECAY
|
||||
// PANOFSKY RATIO (K- P --> LAMBDA PI0/K- P --> LAMBDA GAMMA) = 3/2
|
||||
|
||||
pv[1].SetZero();
|
||||
pv[1].SetMass( massKaonMinus );
|
||||
pv[1].SetKineticEnergyAndUpdate( 0. );
|
||||
pv[1].SetTOF( result.GetTOF() );
|
||||
pv[1].SetParticleDef( result.GetParticleDef() );
|
||||
if (targetAtomicMass <= G4float(1.5)) {
|
||||
ran = G4UniformRand();
|
||||
tof1 = std::log(ran) * G4float(-12.5);
|
||||
tof1 *= G4float(20.);
|
||||
ran = G4UniformRand();
|
||||
isw = 1;
|
||||
if (ran < G4float(.33)) {
|
||||
isw = 2;
|
||||
}
|
||||
*nopt = isw;
|
||||
pv[3].SetZero();
|
||||
pv[3].SetMass( massLambda );
|
||||
pv[3].SetKineticEnergyAndUpdate( 0. );
|
||||
pv[3].SetTOF( result.GetTOF() + tof1 );
|
||||
pv[3].SetParticleDef( pdefLambda );
|
||||
pcm = massKaonMinus + massProton - massLambda;
|
||||
if (isw != 1) {
|
||||
pv[2].SetZero();
|
||||
pv[2].SetMass( massGamma );
|
||||
pv[2].SetKineticEnergyAndUpdate( pcm );
|
||||
pv[2].SetTOF( result.GetTOF() + tof1 );
|
||||
pv[2].SetParticleDef( pdefGamma );
|
||||
}
|
||||
else {
|
||||
pcm = pcm * pcm - massPionZero * massPionZero;
|
||||
if (pcm <= G4float(0.)) {
|
||||
pcm = G4float(0.);
|
||||
}
|
||||
pv[2].SetZero();
|
||||
pv[2].SetEnergy( std::sqrt(pcm + massPionZero * massPionZero) );
|
||||
pv[2].SetMassAndUpdate( massPionZero );
|
||||
pv[2].SetTOF( result.GetTOF() + tof1 );
|
||||
pv[2].SetParticleDef( pdefPionZero );
|
||||
}
|
||||
result = pv[2];
|
||||
if (ntot < MAX_SECONDARIES-1) {
|
||||
eve[ntot++] = pv[3];
|
||||
}
|
||||
}
|
||||
else {
|
||||
// **
|
||||
// ** STAR PRODUCTION FOR PION ABSORPTION IN HEAVY ELEMENTS
|
||||
// **
|
||||
evapEnergy1 = G4float(.3);
|
||||
evapEnergy3 = G4float(.15);
|
||||
nt = 1;
|
||||
tex = evapEnergy1;
|
||||
black = std::log(targetAtomicMass) * G4float(.5);
|
||||
Poisso(black, &nbl);
|
||||
if (nt + nbl > (MAX_SECONDARIES - 2)) {
|
||||
nbl = (MAX_SECONDARIES - 2) - nt;
|
||||
}
|
||||
if (nbl <= 0) {
|
||||
nbl = 1;
|
||||
}
|
||||
ekin = tex / nbl;
|
||||
ekin2 = G4float(0.);
|
||||
for (i = 1; i <= nbl; ++i) {
|
||||
if (nt == (MAX_SECONDARIES - 2)) {
|
||||
continue;
|
||||
}
|
||||
ran2 = G4UniformRand();
|
||||
ekin1 = -G4double(ekin) * std::log(ran2);
|
||||
ekin2 += ekin1;
|
||||
ipa1 = pdefNeutron;
|
||||
pnrat = G4float(1.) - targetCharge / targetAtomicMass;
|
||||
if (G4UniformRand() > pnrat) {
|
||||
ipa1 = pdefProton;
|
||||
}
|
||||
++nt;
|
||||
pv[nt].SetZero();
|
||||
pv[nt].SetMass( ipa1->GetPDGMass()/GeV );
|
||||
pv[nt].SetKineticEnergyAndUpdate( ekin1 );
|
||||
pv[nt].SetTOF( 2. );
|
||||
pv[nt].SetParticleDef( ipa1 );
|
||||
if (ekin2 > tex) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
tex = evapEnergy3;
|
||||
black = std::log(targetAtomicMass) * G4float(.5);
|
||||
Poisso(black, &nbl);
|
||||
if (nt + nbl > (MAX_SECONDARIES - 2)) {
|
||||
nbl = (MAX_SECONDARIES - 2) - nt;
|
||||
}
|
||||
if (nbl <= 0) {
|
||||
nbl = 1;
|
||||
}
|
||||
ekin = tex / nbl;
|
||||
ekin2 = G4float(0.);
|
||||
for (i = 1; i <= nbl; ++i) {
|
||||
if (nt == (MAX_SECONDARIES - 2)) {
|
||||
continue;
|
||||
}
|
||||
ran2 = G4UniformRand();
|
||||
ekin1 = -G4double(ekin) * std::log(ran2);
|
||||
ekin2 += ekin1;
|
||||
++nt;
|
||||
ran = G4UniformRand();
|
||||
inve = pdefDeuteron;
|
||||
if (ran > G4float(.6)) {
|
||||
inve = pdefTriton;
|
||||
}
|
||||
if (ran > G4float(.9)) {
|
||||
inve = pdefAlpha;
|
||||
}
|
||||
// PV(5,NT)=(ABS(IPA(NT))-28)*RMASS(14) <-- Wrong! (LF)
|
||||
pv[nt].SetZero();
|
||||
pv[nt].SetMass( inve->GetPDGMass()/GeV );
|
||||
pv[nt].SetKineticEnergyAndUpdate( ekin1 );
|
||||
pv[nt].SetTOF( 2. );
|
||||
pv[nt].SetParticleDef( inve );
|
||||
if (ekin2 > tex) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// **
|
||||
// ** STORE ON EVENT COMMON
|
||||
// **
|
||||
ran = G4UniformRand();
|
||||
tof1 = std::log(ran) * G4float(-12.5);
|
||||
tof1 *= G4float(20.);
|
||||
for (i = 2; i <= nt; ++i) {
|
||||
pv[i].SetTOF( result.GetTOF() + tof1 );
|
||||
}
|
||||
result = pv[2];
|
||||
for (i = 3; i <= nt; ++i) {
|
||||
if (ntot >= MAX_SECONDARIES) {
|
||||
break;
|
||||
}
|
||||
eve[ntot++] = pv[i];
|
||||
}
|
||||
}
|
||||
|
||||
} // KaonMinusAbsorption
|
||||
@@ -1,555 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// Author: Christian V"olcker (Christian.Volcker@cern.ch),
|
||||
//
|
||||
// Creation date: November 1997
|
||||
//
|
||||
// Testfile: ../G4KaonMinusAbsorptionAtRestTest.cc
|
||||
//
|
||||
// Modifications:
|
||||
// Maria Grazia Pia September 1998
|
||||
// Various bug fixes, eliminated several memory leaks
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
|
||||
#include "G4KaonMinusAbsorptionAtRest.hh"
|
||||
|
||||
#include "G4StopDeexcitation.hh"
|
||||
#include "G4StopTheoDeexcitation.hh"
|
||||
#include "G4StopDeexcitationAlgorithm.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4HadronicProcessStore.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
G4KaonMinusAbsorptionAtRest::G4KaonMinusAbsorptionAtRest(const G4String& processName,
|
||||
G4ProcessType aType ) :
|
||||
G4VRestProcess (processName, aType)
|
||||
{
|
||||
G4HadronicDeprecate("G4KaonMinusAbsorptionAtRest");
|
||||
if (verboseLevel>0) {
|
||||
G4cout << GetProcessName() << " is created "<< G4endl;
|
||||
}
|
||||
SetProcessSubType(fHadronAtRest);
|
||||
|
||||
// see Cohn et al, PLB27(1968) 527;
|
||||
// Davis et al, PLB1(1967) 434;
|
||||
|
||||
pionAbsorptionRate = 0.07;
|
||||
|
||||
// see VanderVelde-Wilquet et al, Nuov.Cim.39A(1978)538;
|
||||
// see VanderVelde-Wilquet et al, Nuov.Cim.38A(1977)178;
|
||||
// see VanderVelde-Wilquet et al, Nucl.Phys.A241(1975)511;
|
||||
// primary production rates ( for absorption on Carbon)
|
||||
// .. other elements are extrapolated by the halo factor.
|
||||
|
||||
rateLambdaZeroPiZero = 0.052;
|
||||
rateSigmaMinusPiPlus = 0.199;
|
||||
rateSigmaPlusPiMinus = 0.446;
|
||||
rateSigmaZeroPiZero = 0.303;
|
||||
rateLambdaZeroPiMinus = 0.568;
|
||||
rateSigmaZeroPiMinus = 0.216;
|
||||
rateSigmaMinusPiZero = 0.216;
|
||||
|
||||
// for sigma- p -> lambda n
|
||||
// sigma+ n -> lambda p
|
||||
// sigma- n -> lambda
|
||||
// all values compatible with 0.55 same literature as above.
|
||||
|
||||
sigmaPlusLambdaConversionRate = 0.55;
|
||||
sigmaMinusLambdaConversionRate = 0.55;
|
||||
sigmaZeroLambdaConversionRate = 0.55;
|
||||
|
||||
G4HadronicProcessStore::Instance()->RegisterExtraProcess(this);
|
||||
}
|
||||
|
||||
|
||||
G4KaonMinusAbsorptionAtRest::~G4KaonMinusAbsorptionAtRest()
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->DeRegisterExtraProcess(this);
|
||||
}
|
||||
|
||||
void G4KaonMinusAbsorptionAtRest::PreparePhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->RegisterParticleForExtraProcess(this, &p);
|
||||
}
|
||||
|
||||
void G4KaonMinusAbsorptionAtRest::BuildPhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->PrintInfo(&p);
|
||||
}
|
||||
|
||||
G4VParticleChange* G4KaonMinusAbsorptionAtRest::AtRestDoIt
|
||||
(const G4Track& track, const G4Step& )
|
||||
{
|
||||
stoppedHadron = track.GetDynamicParticle();
|
||||
|
||||
// Check applicability
|
||||
|
||||
if (!IsApplicable(*(stoppedHadron->GetDefinition())))
|
||||
{
|
||||
G4cerr <<"G4KaonMinusAbsorptionAtRest:ERROR, particle must be a Kaon!" <<G4endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
G4Material* material;
|
||||
material = track.GetMaterial();
|
||||
nucleus = 0;
|
||||
do
|
||||
{
|
||||
// Select the nucleus, get nucleon
|
||||
nucleus = new G4Nucleus(material);
|
||||
if (nucleus->GetA_asInt() < 1.5)
|
||||
{
|
||||
delete nucleus;
|
||||
nucleus = 0;
|
||||
}
|
||||
} while(nucleus == 0);
|
||||
|
||||
G4double Z = nucleus->GetZ_asInt();
|
||||
G4double A = nucleus->GetA_asInt();
|
||||
|
||||
// Do the interaction with the nucleon
|
||||
G4DynamicParticleVector* absorptionProducts = KaonNucleonReaction();
|
||||
|
||||
//A.R. 26-Jul-2012 Coverity fix
|
||||
if ( ! absorptionProducts ) {
|
||||
G4Exception("G4KaonMinusAbsorptionAtRest::AtRestDoIt()", "HAD_STOP_0001",
|
||||
FatalException, "NULL absorptionProducts");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Secondary interactions
|
||||
|
||||
G4DynamicParticle* thePion;
|
||||
unsigned int i;
|
||||
for(i = 0; i < absorptionProducts->size(); i++)
|
||||
{
|
||||
thePion = (*absorptionProducts)[i];
|
||||
if (thePion->GetDefinition() == G4PionMinus::PionMinus()
|
||||
|| thePion->GetDefinition() == G4PionPlus::PionPlus()
|
||||
|| thePion->GetDefinition() == G4PionZero::PionZero())
|
||||
{
|
||||
if (AbsorbPionByNucleus(thePion))
|
||||
{
|
||||
absorptionProducts->erase(absorptionProducts->begin()+i);
|
||||
i--;
|
||||
delete thePion;
|
||||
if (verboseLevel > 1)
|
||||
G4cout << "G4KaonMinusAbsorption::AtRestDoIt: Pion absorbed in Nucleus"
|
||||
<< G4endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
G4DynamicParticle* theSigma;
|
||||
G4DynamicParticle* theLambda;
|
||||
for (i = 0; i < absorptionProducts->size(); i++)
|
||||
{
|
||||
theSigma = (*absorptionProducts)[i];
|
||||
if (theSigma->GetDefinition() == G4SigmaMinus::SigmaMinus()
|
||||
|| theSigma->GetDefinition() == G4SigmaPlus::SigmaPlus()
|
||||
|| theSigma->GetDefinition() == G4SigmaZero::SigmaZero())
|
||||
{
|
||||
theLambda = SigmaLambdaConversion(theSigma);
|
||||
if (theLambda != 0){
|
||||
absorptionProducts->erase(absorptionProducts->begin()+i);
|
||||
i--;
|
||||
delete theSigma;
|
||||
absorptionProducts->push_back(theLambda);
|
||||
|
||||
if (verboseLevel > 1)
|
||||
G4cout << "G4KaonMinusAbsorption::AtRestDoIt: SigmaLambdaConversion Done"
|
||||
<< G4endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Nucleus deexcitation
|
||||
|
||||
G4double productEnergy = 0.;
|
||||
G4ThreeVector pProducts(0.,0.,0.);
|
||||
|
||||
unsigned int nAbsorptionProducts = 0;
|
||||
if (absorptionProducts != 0) nAbsorptionProducts = absorptionProducts->size();
|
||||
|
||||
for ( i = 0; i<nAbsorptionProducts; i++)
|
||||
{
|
||||
pProducts += (*absorptionProducts)[i]->GetMomentum();
|
||||
productEnergy += (*absorptionProducts)[i]->GetKineticEnergy();
|
||||
}
|
||||
|
||||
G4double newZ = nucleus->GetZ_asInt();
|
||||
G4double newA = nucleus->GetA_asInt();
|
||||
|
||||
G4double bDiff = G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(A),static_cast<G4int>(Z)) -
|
||||
G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(newA), static_cast<G4int>(newZ));
|
||||
|
||||
G4StopDeexcitationAlgorithm* nucleusAlgorithm = new G4StopTheoDeexcitation();
|
||||
G4StopDeexcitation stopDeexcitation(nucleusAlgorithm);
|
||||
|
||||
nucleus->AddExcitationEnergy(bDiff);
|
||||
|
||||
// returns excitation energy for the moment ..
|
||||
G4double energyDeposit = nucleus->GetEnergyDeposit();
|
||||
if (verboseLevel>0)
|
||||
{
|
||||
G4cout << " -- KaonAtRest -- excitation = "
|
||||
<< energyDeposit
|
||||
<< ", pNucleus = "
|
||||
<< pProducts
|
||||
<< ", A: "
|
||||
<< A
|
||||
<< ", "
|
||||
<< newA
|
||||
<< ", Z: "
|
||||
<< Z
|
||||
<< ", "
|
||||
<< newZ
|
||||
<< G4endl;
|
||||
}
|
||||
|
||||
if (energyDeposit < 0.)
|
||||
G4Exception("G4KaonMinusAbsorptionAtRest::AtRestDoIt()", "HAD_STOP_0002",
|
||||
FatalException, "Excitation energy < 0");
|
||||
delete nucleus;
|
||||
|
||||
G4ReactionProductVector* fragmentationProducts = stopDeexcitation.DoBreakUp(newA,newZ,energyDeposit,pProducts);
|
||||
|
||||
unsigned int nFragmentationProducts = 0;
|
||||
if (fragmentationProducts != 0) nFragmentationProducts = fragmentationProducts->size();
|
||||
|
||||
//Initialize ParticleChange
|
||||
aParticleChange.Initialize(track);
|
||||
aParticleChange.SetNumberOfSecondaries(G4int(nAbsorptionProducts+nFragmentationProducts) );
|
||||
|
||||
// update List of alive particles. put energy deposit at the right place ...
|
||||
for (i = 0; i < nAbsorptionProducts; i++)
|
||||
{aParticleChange.AddSecondary((*absorptionProducts)[i]); }
|
||||
if (absorptionProducts != 0) delete absorptionProducts;
|
||||
|
||||
// for (i = 0; i < nFragmentationProducts; i++)
|
||||
// { aParticleChange.AddSecondary(fragmentationProducts->at(i)); }
|
||||
for(i=0; i<nFragmentationProducts; i++)
|
||||
{
|
||||
G4DynamicParticle * aNew =
|
||||
new G4DynamicParticle((*fragmentationProducts)[i]->GetDefinition(),
|
||||
(*fragmentationProducts)[i]->GetTotalEnergy(),
|
||||
(*fragmentationProducts)[i]->GetMomentum());
|
||||
G4double newTime = aParticleChange.GetGlobalTime((*fragmentationProducts)[i]->GetFormationTime());
|
||||
aParticleChange.AddSecondary(aNew, newTime);
|
||||
delete (*fragmentationProducts)[i];
|
||||
}
|
||||
if (fragmentationProducts != 0) delete fragmentationProducts;
|
||||
|
||||
// finally ...
|
||||
aParticleChange.ProposeTrackStatus(fStopAndKill); // Kill the incident Kaon
|
||||
return &aParticleChange;
|
||||
}
|
||||
|
||||
|
||||
G4DynamicParticle G4KaonMinusAbsorptionAtRest::GetAbsorbingNucleon()
|
||||
{
|
||||
G4DynamicParticle aNucleon;
|
||||
|
||||
// Get nucleon definition, based on Z,N of current Nucleus
|
||||
aNucleon.SetDefinition(SelectAbsorbingNucleon());
|
||||
|
||||
// Fermi momentum distribution in three dimensions
|
||||
G4ThreeVector pFermi = nucleus->GetFermiMomentum();
|
||||
aNucleon.SetMomentum(pFermi);
|
||||
|
||||
return aNucleon;
|
||||
}
|
||||
|
||||
G4ParticleDefinition* G4KaonMinusAbsorptionAtRest::SelectAbsorbingNucleon()
|
||||
{
|
||||
// (Ch. Voelcker) extended from ReturnTargetParticle():
|
||||
// Choose a proton or a neutron as the absorbing particle,
|
||||
// taking weight into account!
|
||||
// Update nucleon's atomic numbers.
|
||||
|
||||
G4ParticleDefinition* absorbingParticleDef;
|
||||
|
||||
G4double ranflat = G4UniformRand();
|
||||
|
||||
G4double myZ = nucleus->GetZ_asInt(); // number of protons
|
||||
G4double myN = nucleus->GetA_asInt(); // number of nucleons (not neutrons!!)
|
||||
|
||||
// See VanderVelde-Wilquet et al, Nuov.Cim.39A(1978)538;
|
||||
G4double carbonRatioNP = 0.18; // (Rn/Rp)c, see page 544
|
||||
|
||||
G4double neutronProtonRatio = NeutronHaloFactor(myZ,myN)*carbonRatioNP*(myN-myZ)/myZ;
|
||||
G4double protonProbability = 1./(1.+neutronProtonRatio);
|
||||
|
||||
if ( ranflat < protonProbability )
|
||||
{
|
||||
absorbingParticleDef = G4Proton::Proton();
|
||||
myZ-= 1.;
|
||||
}
|
||||
else
|
||||
{ absorbingParticleDef = G4Neutron::Neutron(); }
|
||||
|
||||
myN -= 1.;
|
||||
nucleus->SetParameters(myN,myZ);
|
||||
return absorbingParticleDef;
|
||||
}
|
||||
|
||||
|
||||
G4double G4KaonMinusAbsorptionAtRest::NeutronHaloFactor(G4double Z, G4double N)
|
||||
{
|
||||
// this function should take care of the probability for absorption
|
||||
// on neutrons, depending on number of protons Z and number of neutrons N-Z
|
||||
// parametrisation from fit to
|
||||
// VanderVelde-Wilquet et al, Nuov.Cim.39A(1978)538;
|
||||
//
|
||||
|
||||
if (Z == 1.) return 1.389; // deuterium
|
||||
else if (Z == 2.) return 1.78; // helium
|
||||
else if (Z == 10.) return 0.66; // neon
|
||||
else
|
||||
return 0.6742+(N-Z)*0.06524;
|
||||
}
|
||||
|
||||
|
||||
G4DynamicParticleVector* G4KaonMinusAbsorptionAtRest::KaonNucleonReaction()
|
||||
{
|
||||
G4DynamicParticleVector* products = new G4DynamicParticleVector();
|
||||
|
||||
G4double ranflat = G4UniformRand();
|
||||
G4double prob = 0;
|
||||
|
||||
G4ParticleDefinition* producedBaryonDef;
|
||||
G4ParticleDefinition* producedMesonDef;
|
||||
|
||||
G4double iniZ = nucleus->GetZ_asInt();
|
||||
G4double iniA = nucleus->GetA_asInt();
|
||||
|
||||
G4DynamicParticle aNucleon = GetAbsorbingNucleon();
|
||||
|
||||
// DHW 15 may 2011: unused: G4double nucleonMass;
|
||||
|
||||
if (aNucleon.GetDefinition() == G4Proton::Proton())
|
||||
{
|
||||
// DHW 15 May 2011: unused: nucleonMass = proton_mass_c2+electron_mass_c2;
|
||||
if ( (prob += rateLambdaZeroPiZero) > ranflat)
|
||||
{ // lambda pi0
|
||||
producedBaryonDef = G4Lambda::Lambda();
|
||||
producedMesonDef = G4PionZero::PionZero();
|
||||
}
|
||||
else if ((prob += rateSigmaPlusPiMinus) > ranflat)
|
||||
{ // sigma+ pi-
|
||||
producedBaryonDef = G4SigmaPlus::SigmaPlus();
|
||||
producedMesonDef = G4PionMinus::PionMinus();
|
||||
}
|
||||
else if ((prob += rateSigmaMinusPiPlus) > ranflat)
|
||||
{ // sigma- pi+
|
||||
producedBaryonDef = G4SigmaMinus::SigmaMinus();
|
||||
producedMesonDef = G4PionPlus::PionPlus();
|
||||
}
|
||||
else
|
||||
{ // sigma0 pi0
|
||||
producedBaryonDef = G4SigmaZero::SigmaZero();
|
||||
producedMesonDef = G4PionZero::PionZero();
|
||||
}
|
||||
}
|
||||
else if (aNucleon.GetDefinition() == G4Neutron::Neutron())
|
||||
{
|
||||
// DHW 15 May 2011: unused: nucleonMass = neutron_mass_c2;
|
||||
if ((prob += rateLambdaZeroPiMinus) > ranflat)
|
||||
{ // lambda pi-
|
||||
producedBaryonDef = G4Lambda::Lambda();
|
||||
producedMesonDef = G4PionMinus::PionMinus();
|
||||
}
|
||||
else if ((prob += rateSigmaZeroPiMinus) > ranflat)
|
||||
{ // sigma0 pi-
|
||||
producedBaryonDef = G4SigmaZero::SigmaZero();
|
||||
producedMesonDef = G4PionMinus::PionMinus();
|
||||
}
|
||||
else
|
||||
{ // sigma- pi0
|
||||
producedBaryonDef = G4SigmaMinus::SigmaMinus();
|
||||
producedMesonDef = G4PionZero::PionZero();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (verboseLevel>0)
|
||||
{
|
||||
G4cout
|
||||
<< "G4KaonMinusAbsorption::KaonNucleonReaction: "
|
||||
<< aNucleon.GetDefinition()->GetParticleName()
|
||||
<< " is not a good nucleon - check G4Nucleus::ReturnTargetParticle()!"
|
||||
<< G4endl;
|
||||
}
|
||||
|
||||
//A.R. 26-Jul-2012 Coverity fix
|
||||
if ( products ) delete products;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
G4double newZ = nucleus->GetZ_asInt();
|
||||
G4double newA = nucleus->GetA_asInt();
|
||||
|
||||
// Modify the Kaon mass to take nuclear binding energy into account
|
||||
// .. using mas formula ..
|
||||
// .. using mass table ..
|
||||
// equivalent to -'initialBindingEnergy+nucleus.GetBindingEnergy' !
|
||||
|
||||
G4double nucleonBindingEnergy =
|
||||
-G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(iniA), static_cast<G4int>(iniZ) )
|
||||
+G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(newA), static_cast<G4int>(newZ) );
|
||||
|
||||
G4DynamicParticle modifiedHadron = (*stoppedHadron);
|
||||
modifiedHadron.SetMass(stoppedHadron->GetMass() + nucleonBindingEnergy);
|
||||
|
||||
// Setup outgoing dynamic particles
|
||||
G4ThreeVector dummy(0.,0.,0.);
|
||||
G4DynamicParticle* producedBaryon = new G4DynamicParticle(producedBaryonDef,dummy);
|
||||
G4DynamicParticle* producedMeson = new G4DynamicParticle(producedMesonDef,dummy);
|
||||
|
||||
// Produce the secondary particles in a twobody process:
|
||||
G4ReactionKinematics theReactionKinematics;
|
||||
theReactionKinematics.TwoBodyScattering( &modifiedHadron, &aNucleon,
|
||||
producedBaryon, producedMeson);
|
||||
|
||||
products->push_back(producedBaryon);
|
||||
products->push_back(producedMeson);
|
||||
|
||||
if (verboseLevel > 1)
|
||||
{
|
||||
G4cout
|
||||
<< "G4KaonMinusAbsorption::KaonNucleonReaction: Number of primaries = "
|
||||
<< products->size()
|
||||
<< ": " <<producedMesonDef->GetParticleName()
|
||||
<< ", " <<producedBaryonDef->GetParticleName() << G4endl;
|
||||
}
|
||||
|
||||
return products;
|
||||
}
|
||||
|
||||
|
||||
G4bool G4KaonMinusAbsorptionAtRest::AbsorbPionByNucleus(G4DynamicParticle* aPion)
|
||||
{
|
||||
// Needs some more investigation!
|
||||
|
||||
G4double ranflat = G4UniformRand();
|
||||
|
||||
if (ranflat < pionAbsorptionRate){
|
||||
// Add pion energy to ExcitationEnergy and NucleusMomentum
|
||||
nucleus->AddExcitationEnergy(aPion->GetTotalEnergy());
|
||||
nucleus->AddMomentum(aPion->GetMomentum());
|
||||
}
|
||||
|
||||
return (ranflat < pionAbsorptionRate);
|
||||
}
|
||||
|
||||
G4DynamicParticle* G4KaonMinusAbsorptionAtRest::SigmaLambdaConversion(G4DynamicParticle* aSigma)
|
||||
{
|
||||
G4double ranflat = G4UniformRand();
|
||||
G4double sigmaLambdaConversionRate;
|
||||
|
||||
G4double A = nucleus->GetA_asInt();
|
||||
G4double Z = nucleus->GetZ_asInt();
|
||||
|
||||
G4double newZ = Z;
|
||||
// DHW 15 May 2011: unused: G4double nucleonMassDifference = 0;
|
||||
|
||||
G4ParticleDefinition* inNucleonDef=NULL;
|
||||
G4ParticleDefinition* outNucleonDef=NULL;
|
||||
|
||||
// Decide which sigma
|
||||
switch((int) aSigma->GetDefinition()->GetPDGCharge()) {
|
||||
|
||||
case 1:
|
||||
sigmaLambdaConversionRate = sigmaPlusLambdaConversionRate;
|
||||
inNucleonDef = G4Neutron::Neutron();
|
||||
outNucleonDef = G4Proton::Proton();
|
||||
newZ = Z+1;
|
||||
// DHW 15 May 2011: unused: nucleonMassDifference = neutron_mass_c2 - proton_mass_c2-electron_mass_c2;
|
||||
break;
|
||||
|
||||
case -1:
|
||||
sigmaLambdaConversionRate = sigmaMinusLambdaConversionRate;
|
||||
inNucleonDef = G4Proton::Proton();
|
||||
outNucleonDef = G4Neutron::Neutron();
|
||||
newZ = Z-1;
|
||||
// DHW 15 May 2011: unused: nucleonMassDifference = proton_mass_c2+electron_mass_c2 - neutron_mass_c2;
|
||||
break;
|
||||
|
||||
case 0:
|
||||
sigmaLambdaConversionRate = sigmaZeroLambdaConversionRate;
|
||||
// The 'outgoing' nucleon is just virtual, to keep the energy-momentum
|
||||
// balance and will not appear in the ParticleChange. Therefore no need
|
||||
// choose between neutron and proton here!
|
||||
inNucleonDef = G4Neutron::Neutron();
|
||||
outNucleonDef = G4Neutron::Neutron();
|
||||
break;
|
||||
|
||||
default:
|
||||
sigmaLambdaConversionRate = 0.;
|
||||
// Add dummy particles to avoid possibility of passing NULL pointers
|
||||
inNucleonDef = G4Proton::Proton();
|
||||
outNucleonDef = G4Proton::Proton();
|
||||
}
|
||||
|
||||
if (ranflat >= sigmaLambdaConversionRate) return 0;
|
||||
|
||||
G4ThreeVector dummy(0.,0.,0.);
|
||||
|
||||
// Fermi momentum distribution in three dimensions
|
||||
G4ThreeVector momentum = nucleus->GetFermiMomentum();
|
||||
|
||||
G4ParticleDefinition* lambdaDef = G4Lambda::Lambda();
|
||||
|
||||
G4DynamicParticle inNucleon(inNucleonDef,momentum);
|
||||
G4DynamicParticle outNucleon(outNucleonDef,dummy);
|
||||
G4DynamicParticle* outLambda = new G4DynamicParticle(lambdaDef,dummy);
|
||||
|
||||
G4ReactionKinematics theReactionKinematics;
|
||||
|
||||
// Now do the twobody scattering
|
||||
theReactionKinematics.TwoBodyScattering(aSigma, &inNucleon,
|
||||
&outNucleon, outLambda);
|
||||
|
||||
// Binding energy of nucleus has changed. This will change the
|
||||
// ExcitationEnergy.
|
||||
// .. using mass formula ..
|
||||
// .. using mass table ..
|
||||
// equivalent to -'initialBindingEnergy+nucleus.GetBindingEnergy' !
|
||||
|
||||
// Add energy and momentum to nucleus, change Z,A
|
||||
nucleus->AddExcitationEnergy(outNucleon.GetKineticEnergy());
|
||||
nucleus->AddMomentum(outNucleon.GetMomentum());
|
||||
nucleus->SetParameters(A,newZ);
|
||||
|
||||
// The calling routine is responsible to delete the sigma!!
|
||||
return outLambda;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuMinusCaptureCascade.cc 68700 2013-04-05 08:44:19Z gcosmo $
|
||||
//
|
||||
// G4MuonMinusCaptureAtRest physics process
|
||||
//
|
||||
@@ -73,11 +73,11 @@ G4double G4MuMinusCaptureCascade::GetKShellEnergy(G4double Z)
|
||||
// the Energy of Hydrogen Atom taken into account finite size of the
|
||||
// nucleus (V.Ivanchenko)
|
||||
const G4int ListK = 28;
|
||||
static G4double ListZK[ListK] = {
|
||||
const G4double ListZK[ListK] = {
|
||||
1., 2., 4., 6., 8., 11., 14., 17., 18., 21., 24.,
|
||||
26., 29., 32., 38., 40., 41., 44., 49., 53., 55.,
|
||||
60., 65., 70., 75., 81., 85., 92.};
|
||||
static G4double ListKEnergy[ListK] = {
|
||||
const G4double ListKEnergy[ListK] = {
|
||||
0.00275, 0.011, 0.043, 0.098, 0.173, 0.326,
|
||||
0.524, 0.765, 0.853, 1.146, 1.472,
|
||||
1.708, 2.081, 2.475, 3.323, 3.627,
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuMinusCapturePrecompound.cc 68700 2013-04-05 08:44:19Z gcosmo $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
@@ -69,6 +69,7 @@ G4MuMinusCapturePrecompound::G4MuMinusCapturePrecompound(
|
||||
fProton = G4Proton::Proton();
|
||||
fNeutron = G4Neutron::Neutron();
|
||||
fThreshold = 10*MeV;
|
||||
fTime = 0.0;
|
||||
fPreCompound = ptr;
|
||||
if(!ptr) {
|
||||
G4HadronicInteraction* p =
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuonMinusBoundDecay.cc 69573 2013-05-08 13:35:53Z gcosmo $
|
||||
//
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
@@ -36,7 +36,14 @@
|
||||
// Creation date: 24 April 2012 on base of G4MuMinusCaptureAtRest
|
||||
//
|
||||
// Modified:
|
||||
//
|
||||
// 04/23/2013 K.Genser Fixed a constant in computation of lambda
|
||||
// as suggested by J P Miller/Y Oksuzian;
|
||||
// Optimized and corrected lambda calculation/lookup
|
||||
// 04/30/2013 K.Genser Improved GetMuonCaptureRate
|
||||
// extended data and lookup to take both Z & A into account
|
||||
// Improved GetMuonDecayRate by using Zeff instead of Z
|
||||
// Extracted Zeff into GetMuonZeff
|
||||
//
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#include "G4MuonMinusBoundDecay.hh"
|
||||
@@ -67,7 +74,7 @@ G4MuonMinusBoundDecay::~G4MuonMinusBoundDecay()
|
||||
|
||||
G4HadFinalState*
|
||||
G4MuonMinusBoundDecay::ApplyYourself(const G4HadProjectile& projectile,
|
||||
G4Nucleus& targetNucleus)
|
||||
G4Nucleus& targetNucleus)
|
||||
{
|
||||
result.Clear();
|
||||
G4int Z = targetNucleus.GetZ_asInt();
|
||||
@@ -114,15 +121,15 @@ G4MuonMinusBoundDecay::ApplyYourself(const G4HadProjectile& projectile,
|
||||
// Calculate electron energy
|
||||
do {
|
||||
do {
|
||||
x = xmin + (xmax-xmin)*G4UniformRand();
|
||||
x = xmin + (xmax-xmin)*G4UniformRand();
|
||||
} while (G4UniformRand() > (3.0 - 2.0*x)*x*x );
|
||||
Eelect = x*fMuMass*0.5;
|
||||
Pelect = 0.0;
|
||||
if(Eelect > electron_mass_c2) {
|
||||
Pelect = std::sqrt(Eelect*Eelect - electron_mass_c2*electron_mass_c2);
|
||||
Pelect = std::sqrt(Eelect*Eelect - electron_mass_c2*electron_mass_c2);
|
||||
} else {
|
||||
Pelect = 0.0;
|
||||
Eelect = electron_mass_c2;
|
||||
Pelect = 0.0;
|
||||
Eelect = electron_mass_c2;
|
||||
}
|
||||
dir = G4RandomDirection();
|
||||
EL = G4LorentzVector(Pelect*dir,Eelect);
|
||||
@@ -139,8 +146,8 @@ G4MuonMinusBoundDecay::ApplyYourself(const G4HadProjectile& projectile,
|
||||
// Create electron
|
||||
//
|
||||
G4DynamicParticle* dp = new G4DynamicParticle(G4Electron::Electron(),
|
||||
EL.vect().unit(),
|
||||
Eelect);
|
||||
EL.vect().unit(),
|
||||
Eelect);
|
||||
|
||||
AddNewParticle(dp, time);
|
||||
//
|
||||
@@ -164,105 +171,243 @@ G4MuonMinusBoundDecay::ApplyYourself(const G4HadProjectile& projectile,
|
||||
|
||||
G4double G4MuonMinusBoundDecay::GetMuonCaptureRate(G4int Z, G4int A)
|
||||
{
|
||||
// Initialized data
|
||||
static G4double zeff[101] = { 0.,
|
||||
1.,1.98,2.95,3.89,4.8,5.72,6.61,7.49,8.32,9.12,9.95,10.69,11.48,12.22,
|
||||
12.91,13.64,14.24,14.89,15.53,16.15,16.75,17.38,18.04,18.49,
|
||||
19.06,19.59,20.1,20.66,21.12,21.61,22.02,22.43,22.84,23.24,
|
||||
23.65,24.06,24.47,24.85,25.23,25.61,25.99,26.37,26.69,27.,
|
||||
27.32,27.63,27.95,28.2,28.42,28.64,28.79,29.03,29.27,29.51,
|
||||
29.75,29.99,30.2,30.36,30.53,30.69,30.85,31.01,31.18,31.34,
|
||||
31.48,31.62,31.76,31.9,32.05,32.19,32.33,32.47,32.61,32.76,
|
||||
32.94,33.11,33.29,33.46,33.64,33.81,34.21,34.18,34.,34.1,
|
||||
34.21,34.31,34.42,34.52,34.63,34.73,34.84,34.94,35.04,35.15,
|
||||
35.25,35.36,35.46,35.57,35.67,35.78 };
|
||||
|
||||
// Mu- capture data from B.B.Balashov, G.Ya.Korenman, P.A.Eramgan
|
||||
// Atomizdat, 1978. (Experimental capture velocities)
|
||||
// Initialize data
|
||||
|
||||
// Mu- capture data from
|
||||
// T. Suzuki, D. F. Measday, J.P. Roalsvig Phys.Rev. C35 (1987) 2212
|
||||
// weighted average of the two most precise measurements
|
||||
|
||||
// Data for Hydrogen from Phys. Rev. Lett. 99(2007)032002
|
||||
// Data for Helium from Phys. Rep. 354(2001)243
|
||||
// Data for Helium from D.F. Measday Phys. Rep. 354(2001)243
|
||||
|
||||
const size_t ListZE = 67;
|
||||
static G4int ListZExp[ListZE] = { 1, 2,
|
||||
3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
|
||||
13, 14, 15, 16, 17, 18, 19, 20, 22, 23,
|
||||
24, 25, 26, 27, 28, 31, 32, 33, 34, 37,
|
||||
38, 39, 40, 41, 42, 45, 46, 47, 48, 49,
|
||||
50, 51, 52, 53, 55, 56, 57, 58, 59, 60,
|
||||
62, 64, 65, 67, 72, 73, 74, 80, 81, 82,
|
||||
83, 90, 92, 93};
|
||||
struct capRate {
|
||||
G4int Z;
|
||||
G4int A;
|
||||
G4double cRate;
|
||||
G4double cRErr;
|
||||
};
|
||||
|
||||
static G4double ListCaptureVel[ListZE] = { 0.000725, 0.000356,
|
||||
0.0057, 0.010, 0.0258, 0.0371, 0.0644,
|
||||
0.0974, 0.144, 0.250, 0.386, 0.479,
|
||||
0.700, 0.849, 1.119, 1.338, 1.40,
|
||||
1.30, 1.98, 2.45, 2.60, 3.19,
|
||||
3.29, 3.91, 4.41, 4.96, 5.74,
|
||||
5.68, 5.53, 6.06, 5.69, 6.89,
|
||||
7.25, 7.89, 8.59, 10.40, 9.22,
|
||||
10.01, 10.00, 10.88, 10.62, 11.37,
|
||||
10.68, 10.49, 9.06, 11.20, 10.98,
|
||||
10.18, 10.71, 11.44, 13.45, 12.32,
|
||||
12.22, 12.09, 12.73, 12.95, 13.03,
|
||||
12.86, 13.13, 13.39, 12.74, 13.78,
|
||||
13.02, 13.26, 13.10, 14.00, 14.70};
|
||||
// this struct has to be sorted by Z when initialized as we exit the
|
||||
// loop once Z is above the stored value; cRErr are not used now but
|
||||
// are included for completeness and future use
|
||||
|
||||
const capRate capRates [] = {
|
||||
{ 1, 1, 0.000725, 0.000017 },
|
||||
{ 2, 3, 0.002149, 0.00017 },
|
||||
{ 2, 4, 0.000356, 0.000026 },
|
||||
{ 3, 6, 0.004647, 0.00012 },
|
||||
{ 3, 7, 0.002229, 0.00012 },
|
||||
{ 4, 9, 0.006107, 0.00019 },
|
||||
{ 5, 10, 0.02757 , 0.00063 },
|
||||
{ 5, 11, 0.02188 , 0.00064 },
|
||||
{ 6, 12, 0.03807 , 0.00031 },
|
||||
{ 6, 13, 0.03474 , 0.00034 },
|
||||
{ 7, 14, 0.06885 , 0.00057 },
|
||||
{ 8, 16, 0.10242 , 0.00059 },
|
||||
{ 8, 18, 0.0880 , 0.0015 },
|
||||
{ 9, 19, 0.22905 , 0.00099 },
|
||||
{ 10, 20, 0.2288 , 0.0045 },
|
||||
{ 11, 23, 0.3773 , 0.0014 },
|
||||
{ 12, 24, 0.4823 , 0.0013 },
|
||||
{ 13, 27, 0.6985 , 0.0012 },
|
||||
{ 14, 28, 0.8656 , 0.0015 },
|
||||
{ 15, 31, 1.1681 , 0.0026 },
|
||||
{ 16, 32, 1.3510 , 0.0029 },
|
||||
{ 17, 35, 1.800 , 0.050 },
|
||||
{ 17, 37, 1.250 , 0.050 },
|
||||
{ 18, 40, 1.2727 , 0.0650 },
|
||||
{ 19, 39, 1.8492 , 0.0050 },
|
||||
{ 20, 40, 2.5359 , 0.0070 },
|
||||
{ 21, 45, 2.711 , 0.025 },
|
||||
{ 22, 48, 2.5908 , 0.0115 },
|
||||
{ 23, 51, 3.073 , 0.022 },
|
||||
{ 24, 50, 3.825 , 0.050 },
|
||||
{ 24, 52, 3.465 , 0.026 },
|
||||
{ 24, 53, 3.297 , 0.045 },
|
||||
{ 24, 54, 3.057 , 0.042 },
|
||||
{ 25, 55, 3.900 , 0.030 },
|
||||
{ 26, 56, 4.408 , 0.022 },
|
||||
{ 27, 59, 4.945 , 0.025 },
|
||||
{ 28, 58, 6.11 , 0.10 },
|
||||
{ 28, 60, 5.56 , 0.10 },
|
||||
{ 28, 62, 4.72 , 0.10 },
|
||||
{ 29, 63, 5.691 , 0.030 },
|
||||
{ 30, 66, 5.806 , 0.031 },
|
||||
{ 31, 69, 5.700 , 0.060 },
|
||||
{ 32, 72, 5.561 , 0.031 },
|
||||
{ 33, 75, 6.094 , 0.037 },
|
||||
{ 34, 80, 5.687 , 0.030 },
|
||||
{ 35, 79, 7.223 , 0.28 },
|
||||
{ 35, 81, 7.547 , 0.48 },
|
||||
{ 37, 85, 6.89 , 0.14 },
|
||||
{ 38, 88, 6.93 , 0.12 },
|
||||
{ 39, 89, 7.89 , 0.11 },
|
||||
{ 40, 91, 8.620 , 0.053 },
|
||||
{ 41, 93, 10.38 , 0.11 },
|
||||
{ 42, 96, 9.298 , 0.063 },
|
||||
{ 45, 103, 10.010 , 0.045 },
|
||||
{ 46, 106, 10.000 , 0.070 },
|
||||
{ 47, 107, 10.869 , 0.095 },
|
||||
{ 48, 112, 10.624 , 0.094 },
|
||||
{ 49, 115, 11.38 , 0.11 },
|
||||
{ 50, 119, 10.60 , 0.11 },
|
||||
{ 51, 121, 10.40 , 0.12 },
|
||||
{ 52, 128, 9.174 , 0.074 },
|
||||
{ 53, 127, 11.276 , 0.098 },
|
||||
{ 55, 133, 10.98 , 0.25 },
|
||||
{ 56, 138, 10.112 , 0.085 },
|
||||
{ 57, 139, 10.71 , 0.10 },
|
||||
{ 58, 140, 11.501 , 0.087 },
|
||||
{ 59, 141, 13.45 , 0.13 },
|
||||
{ 60, 144, 12.35 , 0.13 },
|
||||
{ 62, 150, 12.22 , 0.17 },
|
||||
{ 64, 157, 12.00 , 0.13 },
|
||||
{ 65, 159, 12.73 , 0.13 },
|
||||
{ 66, 163, 12.29 , 0.18 },
|
||||
{ 67, 165, 12.95 , 0.13 },
|
||||
{ 68, 167, 13.04 , 0.27 },
|
||||
{ 72, 178, 13.03 , 0.21 },
|
||||
{ 73, 181, 12.86 , 0.13 },
|
||||
{ 74, 184, 12.76 , 0.16 },
|
||||
{ 79, 197, 13.35 , 0.10 },
|
||||
{ 80, 201, 12.74 , 0.18 },
|
||||
{ 81, 205, 13.85 , 0.17 },
|
||||
{ 82, 207, 13.295 , 0.071 },
|
||||
{ 83, 209, 13.238 , 0.065 },
|
||||
{ 90, 232, 12.555 , 0.049 },
|
||||
{ 92, 238, 12.592 , 0.035 },
|
||||
{ 92, 233, 14.27 , 0.15 },
|
||||
{ 92, 235, 13.470 , 0.085 },
|
||||
{ 92, 236, 13.90 , 0.40 },
|
||||
{ 93, 237, 13.58 , 0.18 },
|
||||
{ 94, 239, 13.90 , 0.20 },
|
||||
{ 94, 242, 12.86 , 0.19 }
|
||||
};
|
||||
|
||||
// Local variables
|
||||
G4double zeff2, xmu, a2ze, r1, r2;
|
||||
G4double lambda;
|
||||
G4double lambda = -1.;
|
||||
|
||||
// == Effective charges from Ford and Wills Nucl Phys 35(1962)295.
|
||||
// == Untabulated charges are interpolated.
|
||||
// == Mu capture lifetime (Goulard and Primakoff PRC10(1974)2034.
|
||||
|
||||
G4int i = Z;
|
||||
if(i > 100) { i = 100; }
|
||||
|
||||
const G4double b0a = -.03;
|
||||
const G4double b0b = -.25;
|
||||
const G4double b0c = 3.24;
|
||||
const G4double t1 = 875.e-10;
|
||||
r1 = zeff[i];
|
||||
zeff2 = r1 * r1;
|
||||
|
||||
// ^-4 -> ^-5 suggested by user
|
||||
xmu = zeff2 * 2.663e-5;
|
||||
a2ze = 0.5 * A / Z;
|
||||
r2 = 1.0 - xmu;
|
||||
lambda = t1 * zeff2 * zeff2 * (r2 * r2) * (1.0 - (1.0 - xmu) * .75704) *
|
||||
(a2ze * b0a + 1.0 - (a2ze - 1.0) * b0b -
|
||||
(2 * (A - Z) + std::fabs(a2ze - 1.) ) * b0c / G4double(A * 4) );
|
||||
|
||||
// == Mu capture data are taken if exist
|
||||
for (size_t j = 0; j < ListZE; ++j) {
|
||||
if( ListZExp[j] == i + 1) {
|
||||
lambda = ListCaptureVel[j] / microsecond;
|
||||
size_t nCapRates = sizeof(capRates)/sizeof(capRates[0]);
|
||||
for (size_t j = 0; j < nCapRates; ++j) {
|
||||
if( capRates[j].Z == Z && capRates[j].A == A ) {
|
||||
lambda = capRates[j].cRate / microsecond;
|
||||
break;
|
||||
}
|
||||
// make sure the data is sorted for the next statement to work correctly
|
||||
if (capRates[j].Z > Z) {break;}
|
||||
}
|
||||
|
||||
if (lambda < 0.) {
|
||||
|
||||
// == Mu capture lifetime (Goulard and Primakoff PRC10(1974)2034.
|
||||
|
||||
const G4double b0a = -0.03;
|
||||
const G4double b0b = -0.25;
|
||||
const G4double b0c = 3.24;
|
||||
const G4double t1 = 875.e-9; // -10-> -9 suggested by user
|
||||
G4double r1 = GetMuonZeff(Z);
|
||||
G4double zeff2 = r1 * r1;
|
||||
|
||||
// ^-4 -> ^-5 suggested by user
|
||||
G4double xmu = zeff2 * 2.663e-5;
|
||||
G4double a2ze = 0.5 *G4double(A) / G4double(Z);
|
||||
G4double r2 = 1.0 - xmu;
|
||||
lambda = t1 * zeff2 * zeff2 * (r2 * r2) * (1.0 - (1.0 - xmu) * .75704) *
|
||||
(a2ze * b0a + 1.0 - (a2ze - 1.0) * b0b -
|
||||
G4double(2 * (A - Z) + std::fabs(a2ze - 1.) ) * b0c / G4double(A * 4) );
|
||||
|
||||
}
|
||||
|
||||
return lambda;
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
G4double G4MuonMinusBoundDecay::GetMuonZeff(G4int Z)
|
||||
{
|
||||
|
||||
// == Effective charges from
|
||||
// "Total Nuclear Capture Rates for Negative Muons"
|
||||
// T. Suzuki, D. F. Measday, J.P. Roalsvig Phys.Rev. C35 (1987) 2212
|
||||
// and if not present from
|
||||
// Ford and Wills Nucl Phys 35(1962)295 or interpolated
|
||||
|
||||
|
||||
const size_t maxZ = 100;
|
||||
const G4double zeff[maxZ+1] =
|
||||
{ 0.,
|
||||
1.00, 1.98, 2.94, 3.89, 4.81, 5.72, 6.61, 7.49, 8.32, 9.14,
|
||||
9.95,10.69,11.48,12.22,12.90,13.64,14.24,14.89,15.53,16.15,
|
||||
16.77,17.38,18.04,18.49,19.06,19.59,20.13,20.66,21.12,21.61,
|
||||
22.02,22.43,22.84,23.24,23.65,24.06,24.47,24.85,25.23,25.61,
|
||||
25.99,26.37,26.69,27.00,27.32,27.63,27.95,28.20,28.42,28.64,
|
||||
28.79,29.03,29.27,29.51,29.75,29.99,30.22,30.36,30.53,30.69,
|
||||
30.85,31.01,31.18,31.34,31.48,31.62,31.76,31.90,32.05,32.19,
|
||||
32.33,32.47,32.61,32.76,32.94,33.11,33.29,33.46,33.64,33.81,
|
||||
34.21,34.18,34.00,34.10,34.21,34.31,34.42,34.52,34.63,34.73,
|
||||
34.84,34.94,35.05,35.16,35.25,35.36,35.46,35.57,35.67,35.78 };
|
||||
|
||||
if (Z<0) {Z=0;}
|
||||
if (Z>G4int(maxZ)) {Z=maxZ;}
|
||||
|
||||
return zeff[Z];
|
||||
|
||||
}
|
||||
|
||||
|
||||
G4double G4MuonMinusBoundDecay::GetMuonDecayRate(G4int Z)
|
||||
{
|
||||
// Decay time on K-shell
|
||||
// N.C.Mukhopadhyay Phys. Rep. 30 (1977) 1.
|
||||
|
||||
G4double lambda = 1.0;
|
||||
if(Z > 1) {
|
||||
G4double x = Z*fine_structure_const;
|
||||
lambda -= 2.5 * x * x;
|
||||
if( 0.5 > lambda ) { lambda = 0.5; }
|
||||
} else {
|
||||
// this is the "small Z" approximation formula (2.9)
|
||||
// Lambda(bound)/Lambda(free) = 1-beta(Z*alpha)**2 with beta~=2.5
|
||||
// we assume that Z is Zeff
|
||||
|
||||
// Published value 0.455851 - Phys. Rev. Lett. 99(2007)032002
|
||||
lambda = 1.00151;
|
||||
// PDG 2012 muon lifetime value is 2.1969811(22) 10e-6s
|
||||
// which when inverted gives 0.45517005 10e+6/s
|
||||
|
||||
struct decRate {
|
||||
G4int Z;
|
||||
G4double dRate;
|
||||
G4double dRErr;
|
||||
};
|
||||
|
||||
// this struct has to be sorted by Z when initialized as we exit the
|
||||
// loop once Z is above the stored value
|
||||
|
||||
const decRate decRates [] = {
|
||||
{ 1, 0.4558514, 0.0000151 }
|
||||
};
|
||||
|
||||
G4double lambda = -1.;
|
||||
|
||||
// size_t nDecRates = sizeof(decRates)/sizeof(decRates[0]);
|
||||
// for (size_t j = 0; j < nDecRates; ++j) {
|
||||
// if( decRates[j].Z == Z ) {
|
||||
// lambda = decRates[j].dRate / microsecond;
|
||||
// break;
|
||||
// }
|
||||
// // make sure the data is sorted for the next statement to work
|
||||
// if (decRates[j].Z > Z) {break;}
|
||||
// }
|
||||
|
||||
// we'll use the above code once we have more data
|
||||
// since we only have one value we just assign it
|
||||
if (Z == 1) {lambda = decRates[0].dRate/microsecond;}
|
||||
|
||||
if (lambda < 0.) {
|
||||
const G4double freeMuonDecayRate = 0.45517005 / microsecond;
|
||||
lambda = 1.0;
|
||||
G4double x = GetMuonZeff(Z)*fine_structure_const;
|
||||
lambda -= 2.5 * x * x;
|
||||
lambda *= freeMuonDecayRate;
|
||||
}
|
||||
return lambda * 0.445164 / microsecond;
|
||||
|
||||
return lambda;
|
||||
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
@@ -270,14 +415,14 @@ G4double G4MuonMinusBoundDecay::GetMuonDecayRate(G4int Z)
|
||||
void G4MuonMinusBoundDecay::ModelDescription(std::ostream& outFile) const
|
||||
{
|
||||
outFile << "Sample probabilities of mu- nuclear capture of decay"
|
||||
<< " from K-shell orbit.\n"
|
||||
<< " Time of projectile is changed taking into account life time"
|
||||
<< " of muonic atom.\n"
|
||||
<< " If decay is sampled primary state become stopAndKill,"
|
||||
<< " else - isAlive.\n"
|
||||
<< "Based of reviews:\n"
|
||||
<< " from K-shell orbit.\n"
|
||||
<< " Time of projectile is changed taking into account life time"
|
||||
<< " of muonic atom.\n"
|
||||
<< " If decay is sampled primary state become stopAndKill,"
|
||||
<< " else - isAlive.\n"
|
||||
<< " Based of reviews:\n"
|
||||
<< " N.C.Mukhopadhyay Phy. Rep. 30 (1977) 1.\n"
|
||||
<< " B.B.Balashov, G.Ya.Korenman, P.A.Eramgan, Atomizdat, 1978.\n";
|
||||
<< " T. Suzuki, D. F. Measday, J.P. Roalsvig Phys.Rev. C35 (1987) 2212\n";
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuonMinusCapture.cc 74377 2013-10-04 08:29:54Z gcosmo $
|
||||
//
|
||||
//---------------------------------------------------------------------
|
||||
//
|
||||
@@ -43,7 +43,8 @@
|
||||
// 20121003 K. Genser -- Changed the constructor argument type
|
||||
// Used two argument base constructor
|
||||
// 20121016 K. Genser -- Reverting to use one argument base c'tor
|
||||
//
|
||||
// 20121002 K. Genser -- Replaced G4MuMinusCapturePrecompound with
|
||||
// G4CascadeInterface (Bertini)
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
#include "G4MuonMinusCapture.hh"
|
||||
@@ -51,7 +52,7 @@
|
||||
#include "G4MuonMinusBoundDecay.hh"
|
||||
#include "G4HadronicInteraction.hh"
|
||||
#include "G4MuonMinus.hh"
|
||||
#include "G4MuMinusCapturePrecompound.hh"
|
||||
#include "G4CascadeInterface.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -60,7 +61,7 @@ G4MuonMinusCapture::G4MuonMinusCapture(G4HadronicInteraction* hiptr)
|
||||
{
|
||||
SetBoundDecay(new G4MuonMinusBoundDecay()); // Owned by InteractionRegistry
|
||||
if (!hiptr) {
|
||||
hiptr = new G4MuMinusCapturePrecompound(); // Owned by InteractionRegistry
|
||||
hiptr = new G4CascadeInterface(); // Owned by InteractionRegistry
|
||||
}
|
||||
RegisterMe(hiptr);
|
||||
}
|
||||
@@ -83,7 +84,7 @@ void G4MuonMinusCapture::ProcessDescription(std::ostream& outFile) const
|
||||
{
|
||||
outFile << "Stopping of mu- using default element selector, EM cascade"
|
||||
<< " sampling and bound decay sampling.\n"
|
||||
<< "Native PreCompound model is used for nuclear capture\n";
|
||||
<< "Bertini model is used for nuclear capture\n";
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4MuonMinusCaptureAtRest.cc 70681 2013-06-04 07:54:04Z gcosmo $
|
||||
//
|
||||
// G4MuonMinusCaptureAtRest physics process
|
||||
// Larry Felawka (TRIUMF) and Art Olin (TRIUMF)
|
||||
@@ -264,7 +264,7 @@ G4ReactionProductVector* G4MuonMinusCaptureAtRest::DoMuCapture()
|
||||
} else if(ia == 4) {
|
||||
pd = G4Triton::Triton();
|
||||
} else {
|
||||
pd = G4ParticleTable::GetParticleTable()->FindIon(1,ia-1,0,1);
|
||||
pd = G4ParticleTable::GetParticleTable()->GetIonTable()->GetIon(1,ia-1,0);
|
||||
}
|
||||
|
||||
// G4cout << "Extra " << pd->GetParticleName() << G4endl;
|
||||
|
||||
@@ -1,431 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4NeutronCaptureAtRest physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#include <string.h>
|
||||
#include <cmath>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "G4NeutronCaptureAtRest.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4HadronicProcessStore.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
#define MAX_SECONDARIES 100
|
||||
|
||||
// constructor
|
||||
|
||||
G4NeutronCaptureAtRest::G4NeutronCaptureAtRest(const G4String& processName,
|
||||
G4ProcessType aType ) :
|
||||
G4VRestProcess (processName, aType), // initialization
|
||||
massProton(G4Proton::Proton()->GetPDGMass()/GeV),
|
||||
massNeutron(G4Neutron::Neutron()->GetPDGMass()/GeV),
|
||||
massElectron(G4Electron::Electron()->GetPDGMass()/GeV),
|
||||
massDeuteron(G4Deuteron::Deuteron()->GetPDGMass()/GeV),
|
||||
massAlpha(G4Alpha::Alpha()->GetPDGMass()/GeV),
|
||||
pdefGamma(G4Gamma::Gamma()),
|
||||
pdefNeutron(G4Neutron::Neutron())
|
||||
{
|
||||
G4HadronicDeprecate("G4NeutronCaptureAtRest");
|
||||
if (verboseLevel>0) {
|
||||
G4cout << GetProcessName() << " is created "<< G4endl;
|
||||
}
|
||||
SetProcessSubType(fHadronAtRest);
|
||||
pv = new G4GHEKinematicsVector [MAX_SECONDARIES+1];
|
||||
eve = new G4GHEKinematicsVector [MAX_SECONDARIES];
|
||||
gkin = new G4GHEKinematicsVector [MAX_SECONDARIES];
|
||||
|
||||
G4HadronicProcessStore::Instance()->RegisterExtraProcess(this);
|
||||
}
|
||||
|
||||
// destructor
|
||||
|
||||
G4NeutronCaptureAtRest::~G4NeutronCaptureAtRest()
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->DeRegisterExtraProcess(this);
|
||||
delete [] pv;
|
||||
delete [] eve;
|
||||
delete [] gkin;
|
||||
}
|
||||
|
||||
void G4NeutronCaptureAtRest::PreparePhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->RegisterParticleForExtraProcess(this, &p);
|
||||
}
|
||||
|
||||
void G4NeutronCaptureAtRest::BuildPhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->PrintInfo(&p);
|
||||
}
|
||||
|
||||
// methods.............................................................................
|
||||
|
||||
G4bool G4NeutronCaptureAtRest::IsApplicable(
|
||||
const G4ParticleDefinition& particle
|
||||
)
|
||||
{
|
||||
return ( &particle == pdefNeutron );
|
||||
|
||||
}
|
||||
|
||||
// Warning - this method may be optimized away if made "inline"
|
||||
G4int G4NeutronCaptureAtRest::GetNumberOfSecondaries()
|
||||
{
|
||||
return ( ngkine );
|
||||
|
||||
}
|
||||
|
||||
// Warning - this method may be optimized away if made "inline"
|
||||
G4GHEKinematicsVector* G4NeutronCaptureAtRest::GetSecondaryKinematics()
|
||||
{
|
||||
return ( &gkin[0] );
|
||||
|
||||
}
|
||||
|
||||
G4double G4NeutronCaptureAtRest::AtRestGetPhysicalInteractionLength(
|
||||
const G4Track& track,
|
||||
G4ForceCondition* condition
|
||||
)
|
||||
{
|
||||
// beggining of tracking
|
||||
ResetNumberOfInteractionLengthLeft();
|
||||
|
||||
// condition is set to "Not Forced"
|
||||
*condition = NotForced;
|
||||
|
||||
// get mean life time
|
||||
currentInteractionLength = GetMeanLifeTime(track, condition);
|
||||
|
||||
if ((currentInteractionLength <0.0) || (verboseLevel>2)){
|
||||
G4cout << "G4NeutronCaptureAtRestProcess::AtRestGetPhysicalInteractionLength ";
|
||||
G4cout << "[ " << GetProcessName() << "]" <<G4endl;
|
||||
track.GetDynamicParticle()->DumpInfo();
|
||||
G4cout << " in Material " << track.GetMaterial()->GetName() <<G4endl;
|
||||
G4cout << "MeanLifeTime = " << currentInteractionLength/ns << "[ns]" <<G4endl;
|
||||
}
|
||||
|
||||
return theNumberOfInteractionLengthLeft * currentInteractionLength;
|
||||
|
||||
}
|
||||
|
||||
G4VParticleChange* G4NeutronCaptureAtRest::AtRestDoIt(
|
||||
const G4Track& track,
|
||||
const G4Step&
|
||||
)
|
||||
//
|
||||
// Handles Neutrons at rest; a Neutron can either create secondaries or
|
||||
// do nothing (in which case it should be sent back to decay-handling
|
||||
// section
|
||||
//
|
||||
{
|
||||
|
||||
// Initialize ParticleChange
|
||||
// all members of G4VParticleChange are set to equal to
|
||||
// corresponding member in G4Track
|
||||
|
||||
aParticleChange.Initialize(track);
|
||||
|
||||
// Store some global quantities that depend on current material and particle
|
||||
|
||||
globalTime = track.GetGlobalTime()/s;
|
||||
G4Material * aMaterial = track.GetMaterial();
|
||||
const G4int numberOfElements = aMaterial->GetNumberOfElements();
|
||||
const G4ElementVector* theElementVector = aMaterial->GetElementVector();
|
||||
|
||||
const G4double* theAtomicNumberDensity = aMaterial->GetAtomicNumDensityVector();
|
||||
G4double normalization = 0;
|
||||
for ( G4int i1=0; i1 < numberOfElements; i1++ )
|
||||
{
|
||||
normalization += theAtomicNumberDensity[i1] ; // change when nucleon specific
|
||||
// probabilities are included.
|
||||
}
|
||||
G4double runningSum= 0.;
|
||||
G4double random = G4UniformRand()*normalization;
|
||||
for ( G4int i2=0; i2 < numberOfElements; i2++ )
|
||||
{
|
||||
runningSum += theAtomicNumberDensity[i2]; // change when nucleon specific
|
||||
// probabilities are included.
|
||||
if (random<=runningSum)
|
||||
{
|
||||
targetCharge = G4double((*theElementVector)[i2]->GetZ());
|
||||
targetAtomicMass = (*theElementVector)[i2]->GetN();
|
||||
}
|
||||
}
|
||||
if (random>runningSum)
|
||||
{
|
||||
targetCharge = G4double((*theElementVector)[numberOfElements-1]->GetZ());
|
||||
targetAtomicMass = (*theElementVector)[numberOfElements-1]->GetN();
|
||||
|
||||
}
|
||||
|
||||
if (verboseLevel>1) {
|
||||
G4cout << "G4NeutronCaptureAtRest::AtRestDoIt is invoked " <<G4endl;
|
||||
}
|
||||
|
||||
G4ParticleMomentum momentum;
|
||||
G4float localtime;
|
||||
|
||||
G4ThreeVector position = track.GetPosition();
|
||||
|
||||
GenerateSecondaries(); // Generate secondaries
|
||||
|
||||
aParticleChange.SetNumberOfSecondaries( ngkine );
|
||||
|
||||
for ( G4int isec = 0; isec < ngkine; isec++ ) {
|
||||
G4DynamicParticle* aNewParticle = new G4DynamicParticle;
|
||||
aNewParticle->SetDefinition( gkin[isec].GetParticleDef() );
|
||||
aNewParticle->SetMomentum( gkin[isec].GetMomentum() * GeV );
|
||||
|
||||
localtime = globalTime + gkin[isec].GetTOF();
|
||||
|
||||
G4Track* aNewTrack = new G4Track( aNewParticle, localtime*s, position );
|
||||
aNewTrack->SetTouchableHandle(track.GetTouchableHandle());
|
||||
aParticleChange.AddSecondary( aNewTrack );
|
||||
|
||||
}
|
||||
|
||||
aParticleChange.ProposeLocalEnergyDeposit( 0.0*GeV );
|
||||
|
||||
aParticleChange.ProposeTrackStatus(fStopAndKill); // Kill the incident Neutron
|
||||
|
||||
// clear InteractionLengthLeft
|
||||
|
||||
ResetNumberOfInteractionLengthLeft();
|
||||
|
||||
return &aParticleChange;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void G4NeutronCaptureAtRest::GenerateSecondaries()
|
||||
{
|
||||
static G4int index;
|
||||
static G4int l;
|
||||
static G4int nopt;
|
||||
static G4int i;
|
||||
// DHW 15 May 2011: unused: static G4ParticleDefinition* jnd;
|
||||
|
||||
for (i = 1; i <= MAX_SECONDARIES; ++i) {
|
||||
pv[i].SetZero();
|
||||
}
|
||||
|
||||
ngkine = 0; // number of generated secondary particles
|
||||
ntot = 0;
|
||||
result.SetZero();
|
||||
result.SetMass( massNeutron );
|
||||
result.SetKineticEnergyAndUpdate( 0. );
|
||||
result.SetTOF( 0. );
|
||||
result.SetParticleDef( pdefNeutron );
|
||||
|
||||
NeutronCapture(&nopt);
|
||||
|
||||
// *** CHECK WHETHER THERE ARE NEW PARTICLES GENERATED ***
|
||||
if (ntot != 0 || result.GetParticleDef() != pdefNeutron) {
|
||||
// *** CURRENT PARTICLE IS NOT THE SAME AS IN THE BEGINNING OR/AND ***
|
||||
// *** ONE OR MORE SECONDARIES HAVE BEEN GENERATED ***
|
||||
|
||||
// --- INITIAL PARTICLE TYPE HAS BEEN CHANGED ==> PUT NEW TYPE ON ---
|
||||
// --- THE GEANT TEMPORARY STACK ---
|
||||
|
||||
// --- PUT PARTICLE ON THE STACK ---
|
||||
gkin[0] = result;
|
||||
gkin[0].SetTOF( result.GetTOF() * 5e-11 );
|
||||
ngkine = 1;
|
||||
|
||||
// --- ALL QUANTITIES ARE TAKEN FROM THE GHEISHA STACK WHERE THE ---
|
||||
// --- CONVENTION IS THE FOLLOWING ---
|
||||
|
||||
// --- ONE OR MORE SECONDARIES HAVE BEEN GENERATED ---
|
||||
for (l = 1; l <= ntot; ++l) {
|
||||
index = l - 1;
|
||||
// DHW 15 May 2011: unused: jnd = eve[index].GetParticleDef();
|
||||
|
||||
// --- ADD PARTICLE TO THE STACK IF STACK NOT YET FULL ---
|
||||
if (ngkine < MAX_SECONDARIES) {
|
||||
gkin[ngkine] = eve[index];
|
||||
gkin[ngkine].SetTOF( eve[index].GetTOF() * 5e-11 );
|
||||
++ngkine;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// --- NO SECONDARIES GENERATED AND PARTICLE IS STILL THE SAME ---
|
||||
// --- ==> COPY EVERYTHING BACK IN THE CURRENT GEANT STACK ---
|
||||
ngkine = 0;
|
||||
ntot = 0;
|
||||
globalTime += result.GetTOF() * G4float(5e-11);
|
||||
}
|
||||
|
||||
// --- LIMIT THE VALUE OF NGKINE IN CASE OF OVERFLOW ---
|
||||
ngkine = G4int(std::min(ngkine,G4int(MAX_SECONDARIES)));
|
||||
|
||||
} // GenerateSecondaries
|
||||
|
||||
|
||||
void G4NeutronCaptureAtRest::Normal(G4float *ran)
|
||||
{
|
||||
static G4int i;
|
||||
|
||||
// *** NVE 14-APR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
*ran = G4float(-6.);
|
||||
for (i = 1; i <= 12; ++i) {
|
||||
*ran += G4UniformRand();
|
||||
}
|
||||
|
||||
} // Normal
|
||||
|
||||
|
||||
void G4NeutronCaptureAtRest::NeutronCapture(G4int *nopt)
|
||||
{
|
||||
static G4int nt;
|
||||
static G4float xp, pcm;
|
||||
static G4float ran;
|
||||
|
||||
// *** ROUTINE FOR CAPTURE OF NEUTRAL BARYONS ***
|
||||
// *** NVE 04-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (02-DEC-1986)
|
||||
|
||||
*nopt = 1;
|
||||
pv[1] = result;
|
||||
pv[2].SetZero();
|
||||
pv[2].SetMass( AtomAs(targetAtomicMass, targetCharge) );
|
||||
pv[2].SetMomentumAndUpdate( 0., 0., 0. );
|
||||
pv[2].SetTOF( result.GetTOF() );
|
||||
pv[2].SetParticleDef( NULL );
|
||||
pv[MAX_SECONDARIES].Add( pv[1], pv[2] );
|
||||
pv[MAX_SECONDARIES].SetMomentum( -pv[MAX_SECONDARIES].GetMomentum().x(), -pv[MAX_SECONDARIES].GetMomentum().y(), -pv[MAX_SECONDARIES].GetMomentum().z() );
|
||||
pv[MAX_SECONDARIES].SetParticleDef( NULL );
|
||||
Normal(&ran);
|
||||
pcm = ran * G4float(.001) + G4float(.0065);
|
||||
ran = G4UniformRand();
|
||||
result.SetTOF( result.GetTOF() - std::log(ran) * G4float(480.) );
|
||||
pv[3].SetZero();
|
||||
pv[3].SetMass( 0. );
|
||||
pv[3].SetKineticEnergyAndUpdate( pcm );
|
||||
pv[3].SetTOF( result.GetTOF() );
|
||||
pv[3].SetParticleDef( pdefGamma );
|
||||
pv[3].Lor( pv[3], pv[MAX_SECONDARIES] );
|
||||
nt = 3;
|
||||
xp = G4float(.008) - pcm;
|
||||
if (xp >= G4float(0.)) {
|
||||
nt = 4;
|
||||
pv[4].SetZero();
|
||||
pv[4].SetMass( 0. );
|
||||
pv[4].SetKineticEnergyAndUpdate( xp );
|
||||
pv[4].SetTOF( result.GetTOF() );
|
||||
pv[4].SetParticleDef( pdefGamma );
|
||||
pv[4].Lor( pv[4], pv[MAX_SECONDARIES] );
|
||||
}
|
||||
result = pv[3];
|
||||
if (nt == 4) {
|
||||
if (ntot < MAX_SECONDARIES-1) {
|
||||
eve[ntot++] = pv[4];
|
||||
}
|
||||
}
|
||||
|
||||
} // NeutronCapture
|
||||
|
||||
|
||||
G4double G4NeutronCaptureAtRest::AtomAs(G4float a, G4float z)
|
||||
{
|
||||
G4float ret_val;
|
||||
G4double d__1, d__2;
|
||||
|
||||
static G4double aa;
|
||||
static G4int ia, iz;
|
||||
static G4double zz;
|
||||
static G4float rma, rmd;
|
||||
static G4int ipp;
|
||||
static G4float rmn, rmp;
|
||||
static G4int izz;
|
||||
static G4float rmel;
|
||||
static G4double mass;
|
||||
|
||||
// *** DETERMINATION OF THE ATOMIC MASS ***
|
||||
// *** NVE 19-MAY-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (02-DEC-1986)
|
||||
|
||||
// --- GET ATOMIC (= ELECTRONS INCL.) MASSES (IN MEV) FROM RMASS ARRAY ---
|
||||
// --- ELECTRON ---
|
||||
rmel = massElectron * G4float(1e3);
|
||||
// --- PROTON ---
|
||||
rmp = massProton * G4float(1e3);
|
||||
// --- NEUTRON ---
|
||||
rmn = massNeutron * G4float(1e3);
|
||||
// --- DEUTERON ---
|
||||
rmd = massDeuteron * G4float(1e3) + rmel;
|
||||
// --- ALPHA ---
|
||||
rma = massAlpha * G4float(1e3) + rmel * G4float(2.);
|
||||
|
||||
ret_val = G4float(0.);
|
||||
aa = a * 1.;
|
||||
zz = z * 1.;
|
||||
ia = G4int(a + G4float(.5));
|
||||
if (ia < 1) {
|
||||
return ret_val;
|
||||
}
|
||||
iz = G4int(z + G4float(.5));
|
||||
if (iz < 0 || iz > ia) {
|
||||
return ret_val;
|
||||
}
|
||||
mass = 0.;
|
||||
if (ia == 1) {
|
||||
if (iz == 0) {
|
||||
mass = rmn;
|
||||
}
|
||||
else if (iz == 1) {
|
||||
mass = rmp + rmel;
|
||||
}
|
||||
}
|
||||
else if (ia == 2 && iz == 1) {
|
||||
mass = rmd;
|
||||
}
|
||||
else if (ia == 4 && iz == 2) {
|
||||
mass = rma;
|
||||
}
|
||||
else if ( (ia == 2 && iz != 1) || ia == 3 || (ia == 4 && iz != 2) || ia > 4) {
|
||||
d__1 = aa / G4float(2.) - zz;
|
||||
d__2 = zz;
|
||||
mass = (aa - zz) * rmn + zz * rmp + zz * rmel - aa * G4float(15.67) +
|
||||
std::pow(aa, .6666667) * G4float(17.23) + d__1 * d__1 * G4float(93.15) / aa +
|
||||
d__2 * d__2 * G4float(.6984523) / std::pow(aa, .3333333);
|
||||
ipp = (ia - iz) % 2;
|
||||
izz = iz % 2;
|
||||
if (ipp == izz) {
|
||||
mass += (ipp + izz - 1) * G4float(12.) * std::pow(aa, -.5);
|
||||
}
|
||||
}
|
||||
ret_val = mass * G4float(.001);
|
||||
return ret_val;
|
||||
|
||||
} // AtomAs
|
||||
@@ -1,290 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusAbsorptionAtRest.hh
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// Modifications:
|
||||
// MGP 4 Jul 1998 Changed excitation energy calculation
|
||||
// MGP 14 Sep 1998 Fixed excitation energy calculation
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusAbsorptionAtRest.hh"
|
||||
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "G4PiMinusStopLi.hh"
|
||||
#include "G4PiMinusStopC.hh"
|
||||
#include "G4PiMinusStopN.hh"
|
||||
#include "G4PiMinusStopO.hh"
|
||||
#include "G4PiMinusStopAl.hh"
|
||||
#include "G4PiMinusStopCu.hh"
|
||||
#include "G4PiMinusStopCo.hh"
|
||||
#include "G4PiMinusStopTa.hh"
|
||||
#include "G4PiMinusStopPb.hh"
|
||||
#include "G4StopTheoDeexcitation.hh"
|
||||
#include "G4StopDummyDeexcitation.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4HadronicProcessStore.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusAbsorptionAtRest::G4PiMinusAbsorptionAtRest(const G4String& processName,
|
||||
G4ProcessType aType) :
|
||||
G4VRestProcess (processName, aType)
|
||||
{
|
||||
G4HadronicDeprecate("G4PiMinusAbsorptionAtRest");
|
||||
|
||||
SetProcessSubType(fHadronAtRest);
|
||||
|
||||
_indexDeexcitation = 0;
|
||||
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << GetProcessName() << " is created "<< G4endl; }
|
||||
G4HadronicProcessStore::Instance()->RegisterExtraProcess(this);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusAbsorptionAtRest::~G4PiMinusAbsorptionAtRest()
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->DeRegisterExtraProcess(this);
|
||||
}
|
||||
|
||||
void G4PiMinusAbsorptionAtRest::PreparePhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->RegisterParticleForExtraProcess(this, &p);
|
||||
}
|
||||
|
||||
void G4PiMinusAbsorptionAtRest::BuildPhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->PrintInfo(&p);
|
||||
}
|
||||
|
||||
G4VParticleChange* G4PiMinusAbsorptionAtRest::AtRestDoIt(const G4Track& track, const G4Step& )
|
||||
{
|
||||
const G4DynamicParticle* stoppedHadron = track.GetDynamicParticle();
|
||||
|
||||
// Check applicability
|
||||
if (! IsApplicable(*(stoppedHadron->GetDefinition())))
|
||||
{
|
||||
G4cerr
|
||||
<< "G4PiMinusAbsorptionAtRest: ERROR, particle must be a pion minus!"
|
||||
<< G4endl;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Get the current material
|
||||
const G4Material* material = track.GetMaterial();
|
||||
|
||||
G4double A=-1;
|
||||
G4double Z=-1;
|
||||
G4double random = G4UniformRand();
|
||||
const G4ElementVector* theElementVector = material->GetElementVector();
|
||||
unsigned int i;
|
||||
G4double sum = 0;
|
||||
G4double totalsum=0;
|
||||
for(i=0; i<material->GetNumberOfElements(); ++i)
|
||||
{
|
||||
if((*theElementVector)[i]->GetZ()!=1) totalsum+=material->GetFractionVector()[i];
|
||||
}
|
||||
for (i = 0; i<material->GetNumberOfElements(); ++i)
|
||||
{
|
||||
if((*theElementVector)[i]->GetZ()!=1) sum += material->GetFractionVector()[i];
|
||||
if ( sum/totalsum > random )
|
||||
{
|
||||
A = (*theElementVector)[i]->GetA()*mole/g;
|
||||
Z = (*theElementVector)[i]->GetZ();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Do the interaction with the nucleon cluster
|
||||
|
||||
G4PiMinusStopMaterial* algorithm = LoadAlgorithm(static_cast<G4int>(Z));
|
||||
G4PiMinusStopAbsorption stopAbsorption(algorithm,Z,A);
|
||||
stopAbsorption.SetVerboseLevel(verboseLevel);
|
||||
|
||||
G4DynamicParticleVector* absorptionProducts = stopAbsorption.DoAbsorption();
|
||||
|
||||
// Deal with the leftover nucleus
|
||||
|
||||
G4double pionEnergy = stoppedHadron->GetTotalEnergy();
|
||||
G4double excitation = pionEnergy - stopAbsorption.Energy();
|
||||
if (excitation < 0.)
|
||||
{
|
||||
G4Exception("G4PiMinusAbsorptionAtRest::AtRestDoIt()", "HAD_STOP_0000",
|
||||
FatalException, "Excitation energy < 0");
|
||||
}
|
||||
if (verboseLevel>0) { G4cout << " excitation " << excitation << G4endl; }
|
||||
|
||||
G4StopDeexcitationAlgorithm* nucleusAlgorithm = LoadNucleusAlgorithm();
|
||||
G4StopDeexcitation stopDeexcitation(nucleusAlgorithm);
|
||||
|
||||
G4double newZ = Z - stopAbsorption.NProtons();
|
||||
G4double newN = A - Z - stopAbsorption.NNeutrons();
|
||||
G4double newA = newZ + newN;
|
||||
G4ReactionProductVector* fragmentationProducts = stopDeexcitation.DoBreakUp(newA,newZ,excitation,stopAbsorption.RecoilMomentum());
|
||||
|
||||
unsigned int nAbsorptionProducts = 0;
|
||||
if (absorptionProducts != 0)
|
||||
{ nAbsorptionProducts = absorptionProducts->size(); }
|
||||
|
||||
unsigned int nFragmentationProducts = 0;
|
||||
if (fragmentationProducts != 0)
|
||||
{ nFragmentationProducts = fragmentationProducts->size(); }
|
||||
|
||||
if (verboseLevel>0)
|
||||
{
|
||||
G4cout << "nAbsorptionProducts = " << nAbsorptionProducts
|
||||
<< " nFragmentationProducts = " << nFragmentationProducts
|
||||
<< G4endl;
|
||||
}
|
||||
|
||||
// Deal with ParticleChange final state
|
||||
|
||||
aParticleChange.Initialize(track);
|
||||
aParticleChange.SetNumberOfSecondaries(G4int(nAbsorptionProducts + nFragmentationProducts));
|
||||
|
||||
for (i = 0; i<nAbsorptionProducts; i++)
|
||||
{ aParticleChange.AddSecondary((*absorptionProducts)[i]); }
|
||||
|
||||
// for (i = 0; i<nFragmentationProducts; i++)
|
||||
// { aParticleChange.AddSecondary(fragmentationProducts->at(i)); }
|
||||
for(i=0; i<nFragmentationProducts; i++)
|
||||
{
|
||||
G4DynamicParticle * aNew =
|
||||
new G4DynamicParticle((*fragmentationProducts)[i]->GetDefinition(),
|
||||
(*fragmentationProducts)[i]->GetMomentum());
|
||||
G4double newTime = aParticleChange.GetGlobalTime((*fragmentationProducts)[i]->GetFormationTime());
|
||||
aParticleChange.AddSecondary(aNew, newTime);
|
||||
delete (*fragmentationProducts)[i];
|
||||
}
|
||||
|
||||
if (fragmentationProducts != 0) delete fragmentationProducts;
|
||||
|
||||
if (_indexDeexcitation == 1) aParticleChange.ProposeLocalEnergyDeposit(excitation);
|
||||
|
||||
// Kill the absorbed pion
|
||||
aParticleChange.ProposeTrackStatus(fStopAndKill);
|
||||
|
||||
return &aParticleChange;
|
||||
|
||||
}
|
||||
|
||||
G4PiMinusStopMaterial* G4PiMinusAbsorptionAtRest::LoadAlgorithm(int Z)
|
||||
{
|
||||
if (verboseLevel>0)
|
||||
{
|
||||
G4cout << "Load material algorithm " << Z << G4endl;
|
||||
}
|
||||
|
||||
G4int index = 0;
|
||||
if (Z > 0 && Z < 4) {index = 3;}
|
||||
if (Z > 3 && Z < 7) {index = 6;}
|
||||
if (Z == 7) {index = 7;}
|
||||
if (Z >= 8 && Z<= 11) {index = 8;}
|
||||
if (Z >= 12 && Z<= 18) {index = 13;}
|
||||
if (Z >=19 && Z<= 27) {index = 27;}
|
||||
if (Z >= 28 && Z<= 51) {index = 29;}
|
||||
if (Z >=52 ) {index = 73;}
|
||||
|
||||
switch (index)
|
||||
{
|
||||
case 3:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load Li algorithm " << G4endl; }
|
||||
return new G4PiMinusStopLi();
|
||||
case 6:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load C algorithm " << G4endl; }
|
||||
return new G4PiMinusStopC();
|
||||
case 7:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load N algorithm " << G4endl; }
|
||||
return new G4PiMinusStopN();
|
||||
case 8:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load O algorithm " << G4endl; }
|
||||
return new G4PiMinusStopO();
|
||||
case 13:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load Al algorithm " << G4endl; }
|
||||
return new G4PiMinusStopAl();
|
||||
case 27:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load Cu algorithm " << G4endl; }
|
||||
return new G4PiMinusStopCu();
|
||||
case 29:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load Co algorithm " << G4endl; }
|
||||
return new G4PiMinusStopCo();
|
||||
case 73:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load Ta algorithm " << G4endl; }
|
||||
return new G4PiMinusStopTa();
|
||||
default:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load default material algorithm " << G4endl; }
|
||||
return new G4PiMinusStopC();
|
||||
}
|
||||
}
|
||||
|
||||
G4StopDeexcitationAlgorithm* G4PiMinusAbsorptionAtRest::LoadNucleusAlgorithm()
|
||||
{
|
||||
|
||||
switch (_indexDeexcitation)
|
||||
{
|
||||
case 0:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load Theo deexcitation " << G4endl; }
|
||||
return new G4StopTheoDeexcitation();
|
||||
case 1:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load Dummy deexcitation " << G4endl; }
|
||||
return new G4StopDummyDeexcitation();
|
||||
default:
|
||||
if (verboseLevel>0)
|
||||
{ G4cout << " =================== Load default deexcitation " << G4endl; }
|
||||
return new G4StopTheoDeexcitation();
|
||||
}
|
||||
}
|
||||
|
||||
void G4PiMinusAbsorptionAtRest::SetDeexcitationAlgorithm(G4int index)
|
||||
{
|
||||
_indexDeexcitation = index;
|
||||
}
|
||||
@@ -1,213 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopAbsorption
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
|
||||
#include "G4PiMinusStopAbsorption.hh"
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4NucleiProperties.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4Nucleus.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopAbsorption::G4PiMinusStopAbsorption(G4PiMinusStopMaterial* materialAlgo,
|
||||
const G4double Z, const G4double A)
|
||||
|
||||
{
|
||||
G4HadronicDeprecate("G4PiMinusStopAbsorption");
|
||||
_materialAlgo = materialAlgo;
|
||||
_nucleusZ = Z;
|
||||
_nucleusA = A;
|
||||
_level = 0;
|
||||
_absorptionProducts = new G4DynamicParticleVector();
|
||||
}
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopAbsorption::~G4PiMinusStopAbsorption()
|
||||
{
|
||||
// Memory management of materialAlgo needs better thought (MGP)
|
||||
delete _materialAlgo;
|
||||
// Who owns it? Memory management is not clear... (MGP)
|
||||
// _absorptionProducts->clearAndDestroy();
|
||||
delete _absorptionProducts;
|
||||
}
|
||||
|
||||
G4DynamicParticleVector* G4PiMinusStopAbsorption::DoAbsorption()
|
||||
{
|
||||
std::vector<G4ParticleDefinition*>* defNucleons = _materialAlgo->DefinitionVector();
|
||||
|
||||
G4double newA = _nucleusA;
|
||||
G4double newZ = _nucleusZ;
|
||||
|
||||
if (defNucleons != 0)
|
||||
{
|
||||
for (unsigned int i=0; i<defNucleons->size(); i++)
|
||||
{
|
||||
if ( (*defNucleons)[i] == G4Proton::Proton())
|
||||
{
|
||||
newA = newA - 1;
|
||||
newZ = newZ - 1;
|
||||
}
|
||||
if ((*defNucleons)[i] == G4Neutron::Neutron())
|
||||
{ newA = newA - 1; }
|
||||
}
|
||||
}
|
||||
|
||||
G4double binding = G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(_nucleusA) ,static_cast<G4int>(_nucleusZ)) / _nucleusA;
|
||||
G4double mass = G4NucleiProperties::GetNuclearMass(static_cast<G4int>(newA),static_cast<G4int>(newZ));
|
||||
|
||||
|
||||
std::vector<G4LorentzVector*>* p4Nucleons = _materialAlgo->P4Vector(binding,mass);
|
||||
|
||||
if (defNucleons != 0 && p4Nucleons != 0)
|
||||
{
|
||||
unsigned int nNucleons = p4Nucleons->size();
|
||||
|
||||
G4double seen = _materialAlgo->FinalNucleons() / 2.;
|
||||
G4int maxN = nNucleons;
|
||||
if (defNucleons->size() < nNucleons) { maxN = defNucleons->size(); }
|
||||
|
||||
for (G4int i=0; i<maxN; i++)
|
||||
{
|
||||
G4DynamicParticle* product;
|
||||
if ((*defNucleons)[i] == G4Proton::Proton())
|
||||
{ product = new G4DynamicParticle(G4Proton::Proton(),*((*p4Nucleons)[i])); }
|
||||
else
|
||||
{ product = new G4DynamicParticle(G4Neutron::Neutron(),*((*p4Nucleons)[i])); }
|
||||
G4double ranflat = G4UniformRand();
|
||||
|
||||
if (ranflat < seen)
|
||||
{ _absorptionProducts->push_back(product); }
|
||||
else
|
||||
{ delete product; }
|
||||
}
|
||||
}
|
||||
|
||||
return _absorptionProducts;
|
||||
|
||||
}
|
||||
|
||||
G4ThreeVector G4PiMinusStopAbsorption::RecoilMomentum()
|
||||
{
|
||||
G4ThreeVector pProducts(0.,0.,0.);
|
||||
|
||||
for (unsigned int i = 0; i< _absorptionProducts->size(); i++)
|
||||
{
|
||||
pProducts = pProducts + (*_absorptionProducts)[i]->GetMomentum();
|
||||
}
|
||||
return pProducts;
|
||||
}
|
||||
|
||||
|
||||
G4int G4PiMinusStopAbsorption::NProtons()
|
||||
{
|
||||
G4int n = 0;
|
||||
G4int entries = _absorptionProducts->size();
|
||||
for (int i = 0; i<entries; i++)
|
||||
{
|
||||
if ((*_absorptionProducts)[i]->GetDefinition() == G4Proton::Proton())
|
||||
{ n = n + 1; }
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
G4int G4PiMinusStopAbsorption::NNeutrons()
|
||||
{
|
||||
G4int n = 0;
|
||||
G4int entries = _absorptionProducts->size();
|
||||
for (int i = 0; i<entries; i++)
|
||||
{
|
||||
if ((*_absorptionProducts)[i]->GetDefinition() == G4Neutron::Neutron())
|
||||
{ n = n + 1; }
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
G4double G4PiMinusStopAbsorption::Energy()
|
||||
{
|
||||
G4double energy = 0.;
|
||||
G4double productEnergy = 0.;
|
||||
G4ThreeVector pProducts(0.,0.,0.);
|
||||
G4int nN = 0;
|
||||
G4int nP = 0;
|
||||
|
||||
|
||||
G4int nAbsorptionProducts = _absorptionProducts->size();
|
||||
|
||||
for (int i = 0; i<nAbsorptionProducts; i++)
|
||||
{
|
||||
productEnergy += (*_absorptionProducts)[i]->GetKineticEnergy();
|
||||
pProducts = pProducts + (*_absorptionProducts)[i]->GetMomentum();
|
||||
if ((*_absorptionProducts)[i]->GetDefinition() == G4Neutron::Neutron()) nN++;
|
||||
if ((*_absorptionProducts)[i]->GetDefinition() == G4Proton::Proton()) nP++;
|
||||
}
|
||||
|
||||
G4double productBinding = (G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(_nucleusA),static_cast<G4int>(_nucleusZ)) / _nucleusA) * nAbsorptionProducts;
|
||||
G4double mass = G4NucleiProperties::GetNuclearMass(_nucleusA - (nP + nN),_nucleusZ - nP);
|
||||
G4double pNucleus = pProducts.mag();
|
||||
G4double eNucleus = std::sqrt(pNucleus*pNucleus + mass*mass);
|
||||
G4double tNucleus = eNucleus - mass;
|
||||
G4double temp =
|
||||
G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(_nucleusA - (nP + nN)),static_cast<G4int>(_nucleusZ - nP)) -
|
||||
G4NucleiProperties::GetBindingEnergy(static_cast<G4int>(_nucleusA),static_cast<G4int>(_nucleusZ));
|
||||
energy = productEnergy + productBinding + tNucleus;
|
||||
|
||||
if (_level > 0)
|
||||
{
|
||||
std::cout << "E products " << productEnergy
|
||||
<< " Binding " << productBinding << " " << temp << " "
|
||||
<< " Tnucleus " << tNucleus
|
||||
<< " energy = " << energy << G4endl;
|
||||
}
|
||||
|
||||
return energy;
|
||||
}
|
||||
|
||||
void G4PiMinusStopAbsorption::SetVerboseLevel(G4int level)
|
||||
{
|
||||
_level = level;
|
||||
return;
|
||||
}
|
||||
@@ -1,133 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopAl
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopAl.hh"
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) = average (E. Gadioli et al., Phys Rev C36 (1987) 741)
|
||||
G4double G4PiMinusStopAl::npRatio = 4;
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopAl::nFinalNucleons = 1.67;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
|
||||
G4int G4PiMinusStopAl::eKinEntries = 10;
|
||||
|
||||
G4double G4PiMinusStopAl::eKinData[10] = { 0.23, 0.58, 1.24, 1.52,
|
||||
1.67,
|
||||
1.52, 1.24, 0.95, 0.58, 0.23};
|
||||
|
||||
G4double G4PiMinusStopAl::eKin[11] = { 5.2, 15., 27., 41.5,
|
||||
49.6,
|
||||
57.7, 79.3, 94.4, 114., 125., 140.};
|
||||
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
|
||||
G4int G4PiMinusStopAl::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopAl::angleData[7] =
|
||||
{ 1.43, 1.67, 2.62, 4.29, 7.62, 11.90, 14.76 };
|
||||
|
||||
G4double G4PiMinusStopAl::angle[8] = { 1.308997, 1.570796, 1.832596, 2.094395,
|
||||
2.356194, 2.617994, 2.967060, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopAl::G4PiMinusStopAl()
|
||||
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition*>();
|
||||
_momenta = new std::vector<G4LorentzVector*>();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopAl::~G4PiMinusStopAl()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopAl::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,151 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopC
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopC.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) = 6.3 +- 1.4 (P. Heusi et al. (Nucl. Phys. A407, 429 [1983])
|
||||
// R = 5.0 +- 1.5 (Ozaki et al.)
|
||||
// R = 8.8 +- 1.3 (Lee et al.)
|
||||
// R = 2.4 +- 1.0 (Nordberg et al.)
|
||||
// Use average value of the first three ones
|
||||
G4double G4PiMinusStopC::npRatio = 6.7;
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// R. Madey et al., Phys. Rev. C25(1982) 3050
|
||||
G4double G4PiMinusStopC::nFinalNucleons = 1.77;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// P. Heusi et al., Nucl. Phys. A407(1983) 429
|
||||
|
||||
G4int G4PiMinusStopC::eKinEntries = 21;
|
||||
|
||||
G4double G4PiMinusStopC::eKinData[21] = { 0.031, 0.045, 0.06, 0.09,
|
||||
0.11, 0.116, 0.14,
|
||||
0.18, 0.21, 0.25,
|
||||
0.3, 0.32, 0.31, 0.3,
|
||||
0.25, 0.18, 0.16,
|
||||
0.15, 0.08, 0.05, 0.01};
|
||||
|
||||
G4double G4PiMinusStopC::eKin[22] = { 8., 17.5, 21., 24.5,
|
||||
27.5, 31., 33.5,
|
||||
37.5, 42.5, 46.4,
|
||||
49., 52.5, 57.5, 62.5,
|
||||
67.5, 72.5, 75.,
|
||||
77.5, 82.5, 87.5, 92.5, 110. };
|
||||
|
||||
//G4double G4PiMinusStopC::eKin[22] = { 15., 20., 22., 25.,
|
||||
// 30., 32., 36.,
|
||||
// 40., 45., 48.,
|
||||
// 50., 54., 60., 65.,
|
||||
// 70., 75., 78.,
|
||||
// 80., 86., 90., 95., 100. };
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// R. Hartmann et al., Nucl. Phys. A308 (1978) 345
|
||||
|
||||
G4int G4PiMinusStopC::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopC::angleData[7] =
|
||||
{ 1.43, 1.67, 2.62, 4.29, 7.62, 11.90, 14.76 };
|
||||
|
||||
G4double G4PiMinusStopC::angle[8] = { 1.308997, 1.570796, 1.832596, 2.094395,
|
||||
2.356194, 2.617994, 2.967060, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopC::G4PiMinusStopC()
|
||||
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition*>();
|
||||
_momenta = new std::vector<G4LorentzVector*>();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopC::~G4PiMinusStopC()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopC::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,137 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopCo
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopCo.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) (E. Gadioli et al., Phys Rev C36 (1987) 741
|
||||
G4double G4PiMinusStopCo::npRatio = 2.5;
|
||||
|
||||
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// (Hartmann et al., Nucl. Phys. A300 (1978) 345
|
||||
G4double G4PiMinusStopCo::nFinalNucleons = 1.38;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// P. Heusi et al., Nucl. Phys. A407(1983) 429
|
||||
|
||||
G4int G4PiMinusStopCo::eKinEntries = 11;
|
||||
|
||||
G4double G4PiMinusStopCo::eKinData[11] = {0.085, 0.09, 0.09, 0.15,
|
||||
0.1, 0.09, 0.08,
|
||||
0.04, 0.03, 0.02, 0.01};
|
||||
|
||||
G4double G4PiMinusStopCo::eKin[12] = { 15., 17.5, 25., 33.,
|
||||
42., 52., 62.,
|
||||
75., 85., 95., 105. };
|
||||
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
|
||||
G4int G4PiMinusStopCo::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopCo::angleData[7] =
|
||||
{6., 8., 9., 10., 25., 40., 45. };
|
||||
|
||||
G4double G4PiMinusStopCo::angle[8] = { 0.5, 0.7, 0.87, 1.4, 2.1,
|
||||
2.44, 2.8, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopCo::G4PiMinusStopCo()
|
||||
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition*>();
|
||||
_momenta = new std::vector<G4LorentzVector*>();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopCo::~G4PiMinusStopCo()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopCo::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,136 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopCu
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopCu.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) = 6.3 +- 1.4 (E. Gadioli et al., Phys Rev C36 (1987) 741)
|
||||
// [looks odd!]
|
||||
G4double G4PiMinusStopCu::npRatio = 2.;
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopCu::nFinalNucleons = 1.72;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
|
||||
G4int G4PiMinusStopCu::eKinEntries = 10;
|
||||
|
||||
G4double G4PiMinusStopCu::eKinData[10] = { 0.24, 0.57, 1.13, 1.38,
|
||||
1.54,
|
||||
1.38, 1.13, 0.84, 0.57, 0.24};
|
||||
|
||||
G4double G4PiMinusStopCu::eKin[11] = { 5.2, 10.2, 19.9, 41.5,
|
||||
49.6,
|
||||
57.7, 79.3, 94.4, 114., 120., 135.};
|
||||
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
|
||||
G4int G4PiMinusStopCu::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopCu::angleData[7] =
|
||||
{ 1.43, 1.67, 2.62, 4.29, 7.62, 11.90, 14.76 };
|
||||
|
||||
G4double G4PiMinusStopCu::angle[8] = { 1.308997, 1.570796, 1.832596, 2.094395,
|
||||
2.356194, 2.617994, 2.967060, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopCu::G4PiMinusStopCu()
|
||||
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition* >();
|
||||
_momenta = new std::vector<G4LorentzVector* >();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopCu::~G4PiMinusStopCu()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopCu::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopLi
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopLi.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) = 6.3 +- 1.4 (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
G4double G4PiMinusStopLi::npRatio = 6.3;
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
G4double G4PiMinusStopLi::nFinalNucleons = 1.9;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// P. Heusi et al., Nucl. Phys. A407(1983) 429
|
||||
|
||||
G4int G4PiMinusStopLi::eKinEntries = 21;
|
||||
|
||||
G4double G4PiMinusStopLi::eKinData[21] = { 0.0018, 0.0025, 0.003, 0.045,
|
||||
0.007, 0.014, 0.023,
|
||||
0.4, 0.09, 0.18,
|
||||
0.25, 0.3, 0.25, 0.2,
|
||||
0.18, 0.08, 0.05,
|
||||
0.023, 0.012, 0.007, 0.02};
|
||||
|
||||
G4double G4PiMinusStopLi::eKin[22] = { 15., 17.5, 22.5, 27.5,
|
||||
32.5, 37.5, 42.5,
|
||||
47.5, 52.5, 57.5,
|
||||
62.5, 67.5, 72.5, 77.5,
|
||||
82.5, 87.5, 92.5,
|
||||
97.5, 102.5, 105. };
|
||||
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
|
||||
G4int G4PiMinusStopLi::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopLi::angleData[7] =
|
||||
{ 0.17, 0.4, 0.7, 1.1, 1.3, 20., 70. };
|
||||
|
||||
G4double G4PiMinusStopLi::angle[8] = { 1.308997, 1.570796, 1.832596, 2.094395,
|
||||
2.356194, 2.617994, 2.967060, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopLi::G4PiMinusStopLi()
|
||||
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition*>();
|
||||
_momenta = new std::vector<G4LorentzVector*>();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopLi::~G4PiMinusStopLi()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopLi::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,199 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopMaterial
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4ios.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4PhysicalConstants.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4PionMinus.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopMaterial::G4PiMinusStopMaterial()
|
||||
{
|
||||
_definitions = 0;
|
||||
_momenta = 0;
|
||||
_distributionE = 0;
|
||||
_distributionAngle = 0;
|
||||
theR = 0.5;
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopMaterial::~G4PiMinusStopMaterial()
|
||||
{
|
||||
if (_definitions != 0) delete _definitions;
|
||||
_definitions = 0;
|
||||
|
||||
//A.R. 26-Jul-2012 Coverity fix
|
||||
if (_momenta != 0) {
|
||||
for (unsigned int i=0; i<_momenta->size(); i++) delete(*_momenta)[i];
|
||||
delete _momenta;
|
||||
}
|
||||
|
||||
delete _distributionE;
|
||||
delete _distributionAngle;
|
||||
}
|
||||
|
||||
std::vector<G4ParticleDefinition*>* G4PiMinusStopMaterial::DefinitionVector()
|
||||
{
|
||||
|
||||
_definitions->push_back(G4Neutron::Neutron());
|
||||
|
||||
G4double ranflat = G4UniformRand();
|
||||
if (ranflat < theR)
|
||||
{ _definitions->push_back(G4Proton::Proton()); }
|
||||
else
|
||||
{ _definitions->push_back(G4Neutron::Neutron()); }
|
||||
|
||||
return _definitions;
|
||||
|
||||
}
|
||||
|
||||
std::vector<G4LorentzVector*>*
|
||||
G4PiMinusStopMaterial::P4Vector(const G4double binding,
|
||||
const G4double massNucleus)
|
||||
{
|
||||
// Generate energy of direct absorption products according to experimental
|
||||
// data. The energy distribution of the two nucleons is assumed to be the
|
||||
// same for protons and neutrons.
|
||||
|
||||
G4double eKin1;
|
||||
G4double eKin2;
|
||||
G4double eRecoil;
|
||||
|
||||
// Assume absorption on two nucleons
|
||||
G4int nNucleons = 2;
|
||||
G4double availableE = G4PionMinus::PionMinus()->GetPDGMass() - nNucleons * binding;
|
||||
G4LorentzVector p1;
|
||||
G4LorentzVector p2;
|
||||
|
||||
do
|
||||
{
|
||||
G4double ranflat;
|
||||
G4double p;
|
||||
G4double energy;
|
||||
G4double mass;
|
||||
|
||||
ranflat = G4UniformRand();
|
||||
eKin1 = _distributionE->Generate(ranflat);
|
||||
mass = (*_definitions)[0]->GetPDGMass();
|
||||
energy = eKin1 + mass;
|
||||
p = std::sqrt(energy*energy - mass*mass);
|
||||
G4double theta1 = pi*G4UniformRand();
|
||||
G4double phi1 = GenerateAngle(2.*pi);
|
||||
p1 = MakeP4(p,theta1,phi1,energy);
|
||||
|
||||
ranflat = G4UniformRand();
|
||||
eKin2 = _distributionE->Generate(ranflat);
|
||||
mass = (*_definitions)[1]->GetPDGMass();
|
||||
energy = eKin2 + mass;
|
||||
p = std::sqrt(energy*energy - mass*mass);
|
||||
ranflat = G4UniformRand();
|
||||
G4double opAngle = _distributionAngle->Generate(ranflat);
|
||||
G4double theta2 = theta1 + opAngle;
|
||||
G4double phi2 = phi1 + opAngle;
|
||||
|
||||
p2 = MakeP4(p,theta2,phi2,energy);
|
||||
|
||||
G4double pNucleus = (p1.vect() + p2.vect()).mag();
|
||||
eRecoil = std::sqrt(pNucleus*pNucleus + massNucleus*massNucleus) - massNucleus;
|
||||
|
||||
// ---- Debug
|
||||
// G4cout << " ---- binding = " << binding << ", nucleus mass = " << massNucleus
|
||||
// << ", p nucleus = " << pNucleus << G4endl;
|
||||
// G4cout << "eKin1,2 " << eKin1 << " " << eKin2 << " eRecoil " << eRecoil
|
||||
// << " availableE " << availableE << G4endl;
|
||||
// ----
|
||||
|
||||
} while ((eKin1 + eKin2 + eRecoil) > availableE);
|
||||
|
||||
//A.R. 26-Jul-2012 Coverity fix
|
||||
if (_momenta != 0) {
|
||||
_momenta->push_back(new G4LorentzVector(p1));
|
||||
_momenta->push_back(new G4LorentzVector(p2));
|
||||
}
|
||||
|
||||
return _momenta;
|
||||
|
||||
}
|
||||
|
||||
G4double G4PiMinusStopMaterial::GenerateAngle(G4double x)
|
||||
{
|
||||
G4double ranflat = G4UniformRand();
|
||||
G4double value = ranflat * x;
|
||||
return value;
|
||||
}
|
||||
|
||||
G4LorentzVector G4PiMinusStopMaterial::MakeP4(G4double p, G4double theta, G4double phi, G4double e)
|
||||
{
|
||||
// G4LorentzVector p4;
|
||||
G4double px = p * std::sin(theta) * std::cos(phi);
|
||||
G4double py = p * std::sin(theta) * std::sin(phi);
|
||||
G4double pz = p * std::cos(theta);
|
||||
G4LorentzVector p4(px,py,pz,e);
|
||||
return p4;
|
||||
}
|
||||
|
||||
G4double G4PiMinusStopMaterial::RecoilEnergy(const G4double mass)
|
||||
{
|
||||
G4ThreeVector p(0.,0.,0.);
|
||||
|
||||
//A.R. 26-Jul-2012 Coverity fix
|
||||
if (_momenta != 0) {
|
||||
for (unsigned int i = 0; i< _momenta->size(); i++)
|
||||
{
|
||||
p = p + (*_momenta)[i]->vect();
|
||||
}
|
||||
}
|
||||
|
||||
G4double pNucleus = p.mag();
|
||||
G4double eNucleus = std::sqrt(pNucleus*pNucleus + mass*mass);
|
||||
|
||||
return eNucleus;
|
||||
}
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopN
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopN.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) = 6.3 +- 1.4 (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopN::npRatio = 6.3;
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopN::nFinalNucleons = 1.76;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// P. Heusi et al., Nucl. Phys. A407(1983) 429
|
||||
|
||||
G4int G4PiMinusStopN::eKinEntries = 10;
|
||||
|
||||
G4double G4PiMinusStopN::eKinData[10] = { 0.24, 1.08, 1.46, 1.69,
|
||||
1.79,
|
||||
1.69, 1.46, 1.08, 0.62, 0.24};
|
||||
|
||||
G4double G4PiMinusStopN::eKin[11] = { 5.2, 15., 27., 41.5,
|
||||
49.6,
|
||||
57.7, 79.3, 94.4, 114., 125., 140.};
|
||||
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
|
||||
G4int G4PiMinusStopN::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopN::angleData[7] =
|
||||
{ 1.43, 1.67, 2.62, 4.29, 7.62, 11.90, 14.76 };
|
||||
|
||||
G4double G4PiMinusStopN::angle[8] = { 1.308997, 1.570796, 1.832596, 2.094395,
|
||||
2.356194, 2.617994, 2.967060, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopN::G4PiMinusStopN()
|
||||
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition*>();
|
||||
_momenta = new std::vector<G4LorentzVector*>();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopN::~G4PiMinusStopN()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopN::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopO
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopO.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) = 6.3 +- 1.4 (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopO::npRatio = 6.3;
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopO::nFinalNucleons = 1.78;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
|
||||
G4int G4PiMinusStopO::eKinEntries = 10;
|
||||
|
||||
G4double G4PiMinusStopO::eKinData[10] = { 0.25, 0.62, 1.58, 1.78,
|
||||
1.87,
|
||||
1.78, 1.58, 1.13, 0.62, 0.25};
|
||||
|
||||
G4double G4PiMinusStopO::eKin[11] = { 5.2, 15., 27., 41.5,
|
||||
49.6,
|
||||
57.7, 79.3, 94.4, 114., 140., 140.};
|
||||
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
|
||||
G4int G4PiMinusStopO::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopO::angleData[7] =
|
||||
{ 1.43, 1.67, 2.62, 4.29, 7.62, 11.90, 14.76 };
|
||||
|
||||
G4double G4PiMinusStopO::angle[8] = { 1.308997, 1.570796, 1.832596, 2.094395,
|
||||
2.356194, 2.617994, 2.967060, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopO::G4PiMinusStopO()
|
||||
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition*>();
|
||||
_momenta = new std::vector<G4LorentzVector*>();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopO::~G4PiMinusStopO()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopO::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,135 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopPb
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopPb.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) (E. Gadioli et al., Phys Rev C36 (1987) 741)
|
||||
G4double G4PiMinusStopPb::npRatio = 6;
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopPb::nFinalNucleons = 1.67;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
|
||||
G4int G4PiMinusStopPb::eKinEntries = 10;
|
||||
|
||||
G4double G4PiMinusStopPb::eKinData[10] = { 0.24, 0.5, 1.03, 1.28,
|
||||
1.44,
|
||||
1.28, 1.03, 0.82, 0.50, 0.22};
|
||||
|
||||
G4double G4PiMinusStopPb::eKin[11] = { 5.2, 15., 27., 41.5,
|
||||
49.6,
|
||||
57.7, 79.3, 94.4, 114., 125., 140.};
|
||||
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
|
||||
G4int G4PiMinusStopPb::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopPb::angleData[7] =
|
||||
{ 1.43, 1.67, 2.62, 4.29, 7.62, 11.90, 14.76 };
|
||||
|
||||
G4double G4PiMinusStopPb::angle[8] = { 1.308997, 1.570796, 1.832596, 2.094395,
|
||||
2.356194, 2.617994, 2.967060, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopPb::G4PiMinusStopPb()
|
||||
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition*>();
|
||||
_momenta = new std::vector<G4LorentzVector*>();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopPb::~G4PiMinusStopPb()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopPb::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4PiMinusStopTa
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4PiMinusStopTa.hh"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Proton.hh"
|
||||
#include "G4Neutron.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ReactionKinematics.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4PiMinusStopMaterial.hh"
|
||||
#include "G4DistributionGenerator.hh"
|
||||
|
||||
// np/pp production ratio
|
||||
// Experimental values:
|
||||
// R(np/pp) = 6.3 +- 1.4 (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopTa::npRatio = 17.;
|
||||
|
||||
// Average numbers of final nucleons detected, for N-pair absorption
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
G4double G4PiMinusStopTa::nFinalNucleons = 1.8;
|
||||
|
||||
// Kinetic energy (MeV) distributions measured for coincident nucleon
|
||||
// emission
|
||||
// (R. Madey et al., Phys Rev C25 (1982) 3050
|
||||
|
||||
G4int G4PiMinusStopTa::eKinEntries = 10;
|
||||
|
||||
G4double G4PiMinusStopTa::eKinData[10] = { 0.24, 0.59, 1.13, 1.38,
|
||||
1.50,
|
||||
1.38, 1.13, 0.83, 0.49, 0.22};
|
||||
|
||||
G4double G4PiMinusStopTa::eKin[11] = { 5.2, 12., 25., 41.5,
|
||||
49.6,
|
||||
57.7, 79.3, 94.4, 104., 120., 140.};
|
||||
|
||||
|
||||
// Opening angle distributions measured for coincident nucleon emission
|
||||
// (P.Heusi et al., Nucl. Phys. A407 (1983) 429
|
||||
|
||||
G4int G4PiMinusStopTa::angleEntries = 7;
|
||||
|
||||
G4double G4PiMinusStopTa::angleData[7] =
|
||||
{ 1.43, 1.67, 2.62, 4.29, 7.62, 11.90, 14.76 };
|
||||
|
||||
G4double G4PiMinusStopTa::angle[8] = { 1.308997, 1.570796, 1.832596, 2.094395,
|
||||
2.356194, 2.617994, 2.967060, 3.1415927 };
|
||||
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4PiMinusStopTa::G4PiMinusStopTa()
|
||||
{
|
||||
// Cluster size: nucleon pair, alpha, triton etc.
|
||||
// First implementation: interaction with nucleon pair only
|
||||
_clusterSize = 2;
|
||||
|
||||
// R ratio
|
||||
theR = 1. / (1. + npRatio);
|
||||
|
||||
_definitions = new std::vector<G4ParticleDefinition*>();
|
||||
_momenta = new std::vector<G4LorentzVector*>();
|
||||
|
||||
std::vector<double> eKinVector;
|
||||
std::vector<double> eKinDataVector;
|
||||
int i;
|
||||
for (i=0; i<eKinEntries; i++)
|
||||
{
|
||||
eKinVector.push_back(eKin[i]);
|
||||
eKinDataVector.push_back(eKinData[i]);
|
||||
}
|
||||
eKinVector.push_back(eKin[eKinEntries]);
|
||||
_distributionE = new G4DistributionGenerator(eKinVector,eKinDataVector);
|
||||
|
||||
std::vector<double> angleVector;
|
||||
std::vector<double> angleDataVector;
|
||||
for (i=0; i<angleEntries; i++)
|
||||
{
|
||||
angleVector.push_back(angle[i]);
|
||||
angleDataVector.push_back(angleData[i]);
|
||||
}
|
||||
angleVector.push_back(angle[angleEntries]);
|
||||
_distributionAngle = new G4DistributionGenerator(angleVector,angleDataVector);
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4PiMinusStopTa::~G4PiMinusStopTa()
|
||||
{}
|
||||
|
||||
G4double G4PiMinusStopTa::FinalNucleons()
|
||||
{
|
||||
return nFinalNucleons;
|
||||
}
|
||||
|
||||
@@ -1,553 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4PionMinusAbsorptionAtRest physics process
|
||||
// Larry Felawka (TRIUMF), April 1998
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#include <string.h>
|
||||
#include <cmath>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "G4PionMinusAbsorptionAtRest.hh"
|
||||
#include "G4DynamicParticle.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4HadronicProcessStore.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
#define MAX_SECONDARIES 100
|
||||
|
||||
// constructor
|
||||
|
||||
G4PionMinusAbsorptionAtRest::G4PionMinusAbsorptionAtRest(const G4String& processName,
|
||||
G4ProcessType aType ) :
|
||||
G4VRestProcess (processName, aType), // initialization
|
||||
massPionMinus(G4PionMinus::PionMinus()->GetPDGMass()/GeV),
|
||||
pdefGamma(G4Gamma::Gamma()),
|
||||
pdefPionZero(G4PionZero::PionZero()),
|
||||
pdefPionMinus(G4PionMinus::PionMinus()),
|
||||
pdefProton(G4Proton::Proton()),
|
||||
pdefNeutron(G4Neutron::Neutron()),
|
||||
pdefDeuteron(G4Deuteron::Deuteron()),
|
||||
pdefTriton(G4Triton::Triton()),
|
||||
pdefAlpha(G4Alpha::Alpha())
|
||||
{
|
||||
G4HadronicDeprecate("G4PiMinusAbsorptionAtRest");
|
||||
|
||||
if (verboseLevel>0) {
|
||||
G4cout << GetProcessName() << " is created "<< G4endl;
|
||||
}
|
||||
SetProcessSubType(fHadronAtRest);
|
||||
pv = new G4GHEKinematicsVector [MAX_SECONDARIES+1];
|
||||
eve = new G4GHEKinematicsVector [MAX_SECONDARIES];
|
||||
gkin = new G4GHEKinematicsVector [MAX_SECONDARIES];
|
||||
|
||||
G4HadronicProcessStore::Instance()->RegisterExtraProcess(this);
|
||||
}
|
||||
|
||||
// destructor
|
||||
|
||||
G4PionMinusAbsorptionAtRest::~G4PionMinusAbsorptionAtRest()
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->DeRegisterExtraProcess(this);
|
||||
delete [] pv;
|
||||
delete [] eve;
|
||||
delete [] gkin;
|
||||
}
|
||||
|
||||
void G4PionMinusAbsorptionAtRest::PreparePhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->RegisterParticleForExtraProcess(this, &p);
|
||||
}
|
||||
|
||||
void G4PionMinusAbsorptionAtRest::BuildPhysicsTable(const G4ParticleDefinition& p)
|
||||
{
|
||||
G4HadronicProcessStore::Instance()->PrintInfo(&p);
|
||||
}
|
||||
|
||||
// methods.............................................................................
|
||||
|
||||
G4bool G4PionMinusAbsorptionAtRest::IsApplicable(
|
||||
const G4ParticleDefinition& particle
|
||||
)
|
||||
{
|
||||
return ( &particle == pdefPionMinus );
|
||||
|
||||
}
|
||||
|
||||
// Warning - this method may be optimized away if made "inline"
|
||||
G4int G4PionMinusAbsorptionAtRest::GetNumberOfSecondaries()
|
||||
{
|
||||
return ( ngkine );
|
||||
|
||||
}
|
||||
|
||||
// Warning - this method may be optimized away if made "inline"
|
||||
G4GHEKinematicsVector* G4PionMinusAbsorptionAtRest::GetSecondaryKinematics()
|
||||
{
|
||||
return ( &gkin[0] );
|
||||
|
||||
}
|
||||
|
||||
G4double G4PionMinusAbsorptionAtRest::AtRestGetPhysicalInteractionLength(
|
||||
const G4Track& track,
|
||||
G4ForceCondition* condition
|
||||
)
|
||||
{
|
||||
// beggining of tracking
|
||||
ResetNumberOfInteractionLengthLeft();
|
||||
|
||||
// condition is set to "Not Forced"
|
||||
*condition = NotForced;
|
||||
|
||||
// get mean life time
|
||||
currentInteractionLength = GetMeanLifeTime(track, condition);
|
||||
|
||||
if ((currentInteractionLength <0.0) || (verboseLevel>2)){
|
||||
G4cout << "G4PionMinusAbsorptionAtRestProcess::AtRestGetPhysicalInteractionLength ";
|
||||
G4cout << "[ " << GetProcessName() << "]" <<G4endl;
|
||||
track.GetDynamicParticle()->DumpInfo();
|
||||
G4cout << " in Material " << track.GetMaterial()->GetName() <<G4endl;
|
||||
G4cout << "MeanLifeTime = " << currentInteractionLength/ns << "[ns]" <<G4endl;
|
||||
}
|
||||
|
||||
return theNumberOfInteractionLengthLeft * currentInteractionLength;
|
||||
|
||||
}
|
||||
|
||||
G4VParticleChange* G4PionMinusAbsorptionAtRest::AtRestDoIt(
|
||||
const G4Track& track,
|
||||
const G4Step&
|
||||
)
|
||||
//
|
||||
// Handles PionMinuss at rest; a PionMinus can either create secondaries or
|
||||
// do nothing (in which case it should be sent back to decay-handling
|
||||
// section
|
||||
//
|
||||
{
|
||||
|
||||
// Initialize ParticleChange
|
||||
// all members of G4VParticleChange are set to equal to
|
||||
// corresponding member in G4Track
|
||||
|
||||
aParticleChange.Initialize(track);
|
||||
|
||||
// Store some global quantities that depend on current material and particle
|
||||
|
||||
globalTime = track.GetGlobalTime()/s;
|
||||
G4Material * aMaterial = track.GetMaterial();
|
||||
const G4int numberOfElements = aMaterial->GetNumberOfElements();
|
||||
const G4ElementVector* theElementVector = aMaterial->GetElementVector();
|
||||
|
||||
const G4double* theAtomicNumberDensity = aMaterial->GetAtomicNumDensityVector();
|
||||
G4double normalization = 0;
|
||||
for ( G4int i1=0; i1 < numberOfElements; i1++ )
|
||||
{
|
||||
normalization += theAtomicNumberDensity[i1] ; // change when nucleon specific
|
||||
// probabilities are included.
|
||||
}
|
||||
G4double runningSum= 0.;
|
||||
G4double random = G4UniformRand()*normalization;
|
||||
for ( G4int i2=0; i2 < numberOfElements; i2++ )
|
||||
{
|
||||
runningSum += theAtomicNumberDensity[i2]; // change when nucleon specific
|
||||
// probabilities are included.
|
||||
if (random<=runningSum)
|
||||
{
|
||||
targetCharge = G4double((*theElementVector)[i2]->GetZ());
|
||||
targetAtomicMass = (*theElementVector)[i2]->GetN();
|
||||
}
|
||||
}
|
||||
if (random>runningSum)
|
||||
{
|
||||
targetCharge = G4double((*theElementVector)[numberOfElements-1]->GetZ());
|
||||
targetAtomicMass = (*theElementVector)[numberOfElements-1]->GetN();
|
||||
|
||||
}
|
||||
|
||||
if (verboseLevel>1) {
|
||||
G4cout << "G4PionMinusAbsorptionAtRest::AtRestDoIt is invoked " <<G4endl;
|
||||
}
|
||||
|
||||
G4ParticleMomentum momentum;
|
||||
G4float localtime;
|
||||
|
||||
G4ThreeVector position = track.GetPosition();
|
||||
|
||||
GenerateSecondaries(); // Generate secondaries
|
||||
|
||||
aParticleChange.SetNumberOfSecondaries( ngkine );
|
||||
|
||||
for ( G4int isec = 0; isec < ngkine; isec++ ) {
|
||||
G4DynamicParticle* aNewParticle = new G4DynamicParticle;
|
||||
aNewParticle->SetDefinition( gkin[isec].GetParticleDef() );
|
||||
aNewParticle->SetMomentum( gkin[isec].GetMomentum() * GeV );
|
||||
|
||||
localtime = globalTime + gkin[isec].GetTOF();
|
||||
|
||||
G4Track* aNewTrack = new G4Track( aNewParticle, localtime*s, position );
|
||||
aNewTrack->SetTouchableHandle(track.GetTouchableHandle());
|
||||
aParticleChange.AddSecondary( aNewTrack );
|
||||
|
||||
}
|
||||
|
||||
aParticleChange.ProposeLocalEnergyDeposit( 0.0*GeV );
|
||||
|
||||
aParticleChange.ProposeTrackStatus(fStopAndKill); // Kill the incident PionMinus
|
||||
|
||||
// clear InteractionLengthLeft
|
||||
|
||||
ResetNumberOfInteractionLengthLeft();
|
||||
|
||||
return &aParticleChange;
|
||||
|
||||
}
|
||||
|
||||
|
||||
void G4PionMinusAbsorptionAtRest::GenerateSecondaries()
|
||||
{
|
||||
static G4int index;
|
||||
static G4int l;
|
||||
static G4int nopt;
|
||||
static G4int i;
|
||||
// DHW 15 May 2011: unused: static G4ParticleDefinition* jnd;
|
||||
|
||||
for (i = 1; i <= MAX_SECONDARIES; ++i) {
|
||||
pv[i].SetZero();
|
||||
}
|
||||
|
||||
ngkine = 0; // number of generated secondary particles
|
||||
ntot = 0;
|
||||
result.SetZero();
|
||||
result.SetMass( massPionMinus );
|
||||
result.SetKineticEnergyAndUpdate( 0. );
|
||||
result.SetTOF( 0. );
|
||||
result.SetParticleDef( pdefPionMinus );
|
||||
|
||||
PionMinusAbsorption(&nopt);
|
||||
|
||||
// *** CHECK WHETHER THERE ARE NEW PARTICLES GENERATED ***
|
||||
if (ntot != 0 || result.GetParticleDef() != pdefPionMinus) {
|
||||
// *** CURRENT PARTICLE IS NOT THE SAME AS IN THE BEGINNING OR/AND ***
|
||||
// *** ONE OR MORE SECONDARIES HAVE BEEN GENERATED ***
|
||||
|
||||
// --- INITIAL PARTICLE TYPE HAS BEEN CHANGED ==> PUT NEW TYPE ON ---
|
||||
// --- THE GEANT TEMPORARY STACK ---
|
||||
|
||||
// --- PUT PARTICLE ON THE STACK ---
|
||||
gkin[0] = result;
|
||||
gkin[0].SetTOF( result.GetTOF() * 5e-11 );
|
||||
ngkine = 1;
|
||||
|
||||
// --- ALL QUANTITIES ARE TAKEN FROM THE GHEISHA STACK WHERE THE ---
|
||||
// --- CONVENTION IS THE FOLLOWING ---
|
||||
|
||||
// --- ONE OR MORE SECONDARIES HAVE BEEN GENERATED ---
|
||||
for (l = 1; l <= ntot; ++l) {
|
||||
index = l - 1;
|
||||
// DHW 15 May 2011: unused: jnd = eve[index].GetParticleDef();
|
||||
|
||||
// --- ADD PARTICLE TO THE STACK IF STACK NOT YET FULL ---
|
||||
if (ngkine < MAX_SECONDARIES) {
|
||||
gkin[ngkine] = eve[index];
|
||||
gkin[ngkine].SetTOF( eve[index].GetTOF() * 5e-11 );
|
||||
++ngkine;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// --- NO SECONDARIES GENERATED AND PARTICLE IS STILL THE SAME ---
|
||||
// --- ==> COPY EVERYTHING BACK IN THE CURRENT GEANT STACK ---
|
||||
ngkine = 0;
|
||||
ntot = 0;
|
||||
globalTime += result.GetTOF() * G4float(5e-11);
|
||||
}
|
||||
|
||||
// --- LIMIT THE VALUE OF NGKINE IN CASE OF OVERFLOW ---
|
||||
ngkine = G4int(std::min(ngkine,G4int(MAX_SECONDARIES)));
|
||||
|
||||
} // GenerateSecondaries
|
||||
|
||||
|
||||
void G4PionMinusAbsorptionAtRest::PionMinusAbsorption(G4int *nopt)
|
||||
{
|
||||
static G4int i;
|
||||
static G4int nt, nbl;
|
||||
static G4float ran, tex;
|
||||
static G4int isw;
|
||||
static G4float ran2, tof1, ekin;
|
||||
static G4float ekin1, ekin2, black;
|
||||
static G4float pnrat;
|
||||
static G4ParticleDefinition* ipa1;
|
||||
static G4ParticleDefinition* inve;
|
||||
|
||||
// *** CHARGED PION ABSORPTION BY A NUCLEUS ***
|
||||
// *** NVE 04-MAR-1988 CERN GENEVA ***
|
||||
|
||||
// ORIGIN : H.FESEFELDT (09-JULY-1987)
|
||||
|
||||
// PANOFSKY RATIO (PI- P --> N PI0/PI- P --> N GAMMA) = 3/2
|
||||
// FOR CAPTURE ON PROTON (HYDROGEN),
|
||||
// STAR PRODUCTION FOR HEAVIER ELEMENTS
|
||||
|
||||
pv[1].SetZero();
|
||||
pv[1].SetMass( massPionMinus );
|
||||
pv[1].SetKineticEnergyAndUpdate( 0. );
|
||||
pv[1].SetTOF( result.GetTOF() );
|
||||
pv[1].SetParticleDef( result.GetParticleDef() );
|
||||
if (targetAtomicMass <= G4float(1.5)) {
|
||||
ran = G4UniformRand();
|
||||
isw = 1;
|
||||
if (ran < G4float(.33)) {
|
||||
isw = 2;
|
||||
}
|
||||
*nopt = isw;
|
||||
ran = G4UniformRand();
|
||||
tof1 = std::log(ran) * G4float(-25.);
|
||||
tof1 *= G4float(20.);
|
||||
if (isw != 1) {
|
||||
pv[2].SetZero();
|
||||
pv[2].SetMass( 0. );
|
||||
pv[2].SetKineticEnergyAndUpdate( .02 );
|
||||
pv[2].SetTOF( result.GetTOF() + tof1 );
|
||||
pv[2].SetParticleDef( pdefGamma );
|
||||
}
|
||||
else {
|
||||
pv[2] = pv[1];
|
||||
pv[2].SetTOF( result.GetTOF() + tof1 );
|
||||
pv[2].SetParticleDef( pdefPionZero );
|
||||
}
|
||||
result = pv[2];
|
||||
}
|
||||
else {
|
||||
// **
|
||||
// ** STAR PRODUCTION FOR PION ABSORPTION IN HEAVY ELEMENTS
|
||||
// **
|
||||
evapEnergy1 = G4float(.0135);
|
||||
evapEnergy3 = G4float(.0058);
|
||||
nt = 1;
|
||||
tex = evapEnergy1;
|
||||
black = std::log(targetAtomicMass) * G4float(.5);
|
||||
Poisso(black, &nbl);
|
||||
if (nbl <= 0) {
|
||||
nbl = 1;
|
||||
}
|
||||
if (nt + nbl > (MAX_SECONDARIES - 2)) {
|
||||
nbl = (MAX_SECONDARIES - 2) - nt;
|
||||
}
|
||||
ekin = tex / nbl;
|
||||
ekin2 = G4float(0.);
|
||||
for (i = 1; i <= nbl; ++i) {
|
||||
if (nt == (MAX_SECONDARIES - 2)) {
|
||||
continue;
|
||||
}
|
||||
ran2 = G4UniformRand();
|
||||
ekin1 = -G4double(ekin) * std::log(ran2);
|
||||
ekin2 += ekin1;
|
||||
ipa1 = pdefNeutron;
|
||||
pnrat = G4float(1.) - targetCharge / targetAtomicMass;
|
||||
if (G4UniformRand() > pnrat) {
|
||||
ipa1 = pdefProton;
|
||||
}
|
||||
++nt;
|
||||
pv[nt].SetZero();
|
||||
pv[nt].SetMass( ipa1->GetPDGMass()/GeV );
|
||||
pv[nt].SetKineticEnergyAndUpdate( ekin1 );
|
||||
pv[nt].SetTOF( 2. );
|
||||
pv[nt].SetParticleDef( ipa1 );
|
||||
if (ekin2 > tex) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
tex = evapEnergy3;
|
||||
black = std::log(targetAtomicMass) * G4float(.5);
|
||||
Poisso(black, &nbl);
|
||||
if (nt + nbl > (MAX_SECONDARIES - 2)) {
|
||||
nbl = (MAX_SECONDARIES - 2) - nt;
|
||||
}
|
||||
if (nbl <= 0) {
|
||||
nbl = 1;
|
||||
}
|
||||
ekin = tex / nbl;
|
||||
ekin2 = G4float(0.);
|
||||
for (i = 1; i <= nbl; ++i) {
|
||||
if (nt == (MAX_SECONDARIES - 2)) {
|
||||
continue;
|
||||
}
|
||||
ran2 = G4UniformRand();
|
||||
ekin1 = -G4double(ekin) * std::log(ran2);
|
||||
ekin2 += ekin1;
|
||||
++nt;
|
||||
ran = G4UniformRand();
|
||||
inve= pdefDeuteron;
|
||||
if (ran > G4float(.6)) {
|
||||
inve = pdefTriton;
|
||||
}
|
||||
if (ran > G4float(.9)) {
|
||||
inve = pdefAlpha;
|
||||
}
|
||||
pv[nt].SetZero();
|
||||
pv[nt].SetMass( inve->GetPDGMass()/GeV );
|
||||
pv[nt].SetKineticEnergyAndUpdate( ekin1 );
|
||||
pv[nt].SetTOF( 2. );
|
||||
pv[nt].SetParticleDef( inve );
|
||||
if (ekin2 > tex) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// **
|
||||
// ** STORE ON EVENT COMMON
|
||||
// **
|
||||
ran = G4UniformRand();
|
||||
tof1 = std::log(ran) * G4float(-25.);
|
||||
tof1 *= G4float(20.);
|
||||
for (i = 2; i <= nt; ++i) {
|
||||
pv[i].SetTOF( result.GetTOF() + tof1 );
|
||||
}
|
||||
result = pv[2];
|
||||
for (i = 3; i <= nt; ++i) {
|
||||
if (ntot >= MAX_SECONDARIES) {
|
||||
break;
|
||||
}
|
||||
eve[ntot++] = pv[i];
|
||||
}
|
||||
}
|
||||
|
||||
} // PionMinusAbsorption
|
||||
|
||||
|
||||
void G4PionMinusAbsorptionAtRest::Poisso(G4float xav, G4int *iran)
|
||||
{
|
||||
static G4int i;
|
||||
static G4float r, p1, p2, p3;
|
||||
static G4int fivex;
|
||||
static G4float rr, ran, rrr, ran1;
|
||||
|
||||
// *** GENERATION OF POISSON DISTRIBUTION ***
|
||||
// *** NVE 16-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
// --- USE NORMAL DISTRIBUTION FOR <X> > 9.9 ---
|
||||
if (xav > G4float(9.9)) {
|
||||
// ** NORMAL DISTRIBUTION WITH SIGMA**2 = <X>
|
||||
Normal(&ran1);
|
||||
ran1 = xav + ran1 * std::sqrt(xav);
|
||||
*iran = G4int(ran1);
|
||||
if (*iran < 0) {
|
||||
*iran = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
fivex = G4int(xav * G4float(5.));
|
||||
*iran = 0;
|
||||
if (fivex > 0) {
|
||||
r = std::exp(-G4double(xav));
|
||||
ran1 = G4UniformRand();
|
||||
if (ran1 > r) {
|
||||
rr = r;
|
||||
for (i = 1; i <= fivex; ++i) {
|
||||
++(*iran);
|
||||
if (i <= 5) {
|
||||
rrr = std::pow(xav, G4float(i)) / NFac(i);
|
||||
}
|
||||
// ** STIRLING' S FORMULA FOR LARGE NUMBERS
|
||||
if (i > 5) {
|
||||
rrr = std::exp(i * std::log(xav) -
|
||||
(i + G4float(.5)) * std::log(i * G4float(1.)) +
|
||||
i - G4float(.9189385));
|
||||
}
|
||||
rr += r * rrr;
|
||||
if (ran1 <= rr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// ** FOR VERY SMALL XAV TRY IRAN=1,2,3
|
||||
p1 = xav * std::exp(-G4double(xav));
|
||||
p2 = xav * p1 / G4float(2.);
|
||||
p3 = xav * p2 / G4float(3.);
|
||||
ran = G4UniformRand();
|
||||
if (ran >= p3) {
|
||||
if (ran >= p2) {
|
||||
if (ran >= p1) {
|
||||
*iran = 0;
|
||||
}
|
||||
else {
|
||||
*iran = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
*iran = 2;
|
||||
}
|
||||
}
|
||||
else {
|
||||
*iran = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // Poisso
|
||||
|
||||
|
||||
G4int G4PionMinusAbsorptionAtRest::NFac(G4int n)
|
||||
{
|
||||
G4int ret_val;
|
||||
static G4int i, j;
|
||||
|
||||
// *** NVE 16-MAR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
ret_val = 1;
|
||||
j = n;
|
||||
if (j > 1) {
|
||||
if (j > 10) {
|
||||
j = 10;
|
||||
}
|
||||
for (i = 2; i <= j; ++i) {
|
||||
ret_val *= i;
|
||||
}
|
||||
}
|
||||
return ret_val;
|
||||
|
||||
} // NFac
|
||||
|
||||
|
||||
void G4PionMinusAbsorptionAtRest::Normal(G4float *ran)
|
||||
{
|
||||
static G4int i;
|
||||
|
||||
// *** NVE 14-APR-1988 CERN GENEVA ***
|
||||
// ORIGIN : H.FESEFELDT (27-OCT-1983)
|
||||
|
||||
*ran = G4float(-6.);
|
||||
for (i = 1; i <= 12; ++i) {
|
||||
*ran += G4UniformRand();
|
||||
}
|
||||
|
||||
} // Normal
|
||||
@@ -1,72 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4StopDeexcitation
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
|
||||
#include "G4StopDeexcitation.hh"
|
||||
#include <vector>
|
||||
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4ParticleTypes.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
|
||||
// Constructor
|
||||
|
||||
G4StopDeexcitation::G4StopDeexcitation(G4StopDeexcitationAlgorithm* algorithm)
|
||||
{
|
||||
G4HadronicDeprecate("G4StopDeexcitation");
|
||||
_algorithm = algorithm;
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4StopDeexcitation::~G4StopDeexcitation()
|
||||
{
|
||||
delete _algorithm;
|
||||
}
|
||||
|
||||
G4ReactionProductVector* G4StopDeexcitation::DoBreakUp(G4double A, G4double Z,
|
||||
G4double excitation,
|
||||
const G4ThreeVector& p) const
|
||||
{
|
||||
G4ReactionProductVector* v = 0;
|
||||
if (_algorithm != 0)
|
||||
{
|
||||
v = _algorithm->BreakUp(A,Z,excitation,p);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4StopDummyDeexcitation
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4StopDummyDeexcitation.hh"
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
// Constructor
|
||||
|
||||
G4StopDummyDeexcitation::G4StopDummyDeexcitation()
|
||||
{
|
||||
G4HadronicDeprecate("G4StopDummyDeexcitation");
|
||||
_products = 0;
|
||||
}
|
||||
|
||||
|
||||
// Destructor
|
||||
|
||||
G4StopDummyDeexcitation::~G4StopDummyDeexcitation()
|
||||
{
|
||||
}
|
||||
|
||||
G4ReactionProductVector* G4StopDummyDeexcitation::BreakUp(G4double /*A*/, G4double /*Z*/,
|
||||
G4double /*excitation*/,
|
||||
const G4ThreeVector& /*p*/)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id$
|
||||
// $Id: G4StopElementSelector.cc 69573 2013-05-08 13:35:53Z gcosmo $
|
||||
//
|
||||
// File: G4StopElementSelector
|
||||
//
|
||||
@@ -36,7 +36,8 @@
|
||||
// 17/05/2006 V.Ivanchenko Cleanup
|
||||
// 02/10/2007 V.Ivanchenko Fixed typo in computation of Lambda-factor
|
||||
// proposed by Victor Pec
|
||||
//
|
||||
// 04/23/2013 K.Genser used new G4MuonMinusBoundDecay
|
||||
// in GetMuonCaptureRate and GetMuonDecayRate
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
#include "G4StopElementSelector.hh"
|
||||
@@ -44,6 +45,7 @@
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4Material.hh"
|
||||
#include "G4MuonMinusBoundDecay.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -123,167 +125,12 @@ G4Element* G4StopElementSelector::GetElement(const G4Material* aMaterial)
|
||||
|
||||
G4double G4StopElementSelector::GetMuonCaptureRate(G4double Z, G4double A)
|
||||
{
|
||||
// Initialized data
|
||||
|
||||
// static std::vector<G4double> zeff(100);
|
||||
static G4double zeff[100] = {
|
||||
1.,1.98,2.95,3.89,4.8,5.72,6.61,7.49,8.32,9.12,9.95,10.69,11.48,12.22,
|
||||
12.91,13.64,14.24,14.89,15.53,16.15,16.75,17.38,18.04,18.49,
|
||||
19.06,19.59,20.1,20.66,21.12,21.61,22.02,22.43,22.84,23.24,
|
||||
23.65,24.06,24.47,24.85,25.23,25.61,25.99,26.37,26.69,27.,
|
||||
27.32,27.63,27.95,28.2,28.42,28.64,28.79,29.03,29.27,29.51,
|
||||
29.75,29.99,30.2,30.36,30.53,30.69,30.85,31.01,31.18,31.34,
|
||||
31.48,31.62,31.76,31.9,32.05,32.19,32.33,32.47,32.61,32.76,
|
||||
32.94,33.11,33.29,33.46,33.64,33.81,34.21,34.18,34.,34.1,
|
||||
34.21,34.31,34.42,34.52,34.63,34.73,34.84,34.94,35.04,35.15,
|
||||
35.25,35.36,35.46,35.57,35.67,35.78 };
|
||||
|
||||
// Mu- capture data from B.B.Balashov, G.Ya.Korenman, P.A.Eramgan
|
||||
// Atomizdat, 1978. (Experimental capture velocities)
|
||||
// Data for Hydrogen from Phys. Rev. Lett. 99(2007)032002
|
||||
|
||||
const size_t ListZE = 66;
|
||||
static G4int ListZExp[ListZE] = {1,
|
||||
3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
|
||||
13, 14, 15, 16, 17, 18, 19, 20, 22, 23,
|
||||
24, 25, 26, 27, 28, 31, 32, 33, 34, 37,
|
||||
38, 39, 40, 41, 42, 45, 46, 47, 48, 49,
|
||||
50, 51, 52, 53, 55, 56, 57, 58, 59, 60,
|
||||
62, 64, 65, 67, 72, 73, 74, 80, 81, 82,
|
||||
83, 90, 92, 93};
|
||||
|
||||
static G4double ListCaptureVel[ListZE] = {0.000725,
|
||||
0.0057, 0.010, 0.0258, 0.0371, 0.0644,
|
||||
0.0974, 0.144, 0.250, 0.386, 0.479,
|
||||
0.700, 0.849, 1.119, 1.338, 1.40,
|
||||
1.30, 1.98, 2.45, 2.60, 3.19,
|
||||
3.29, 3.91, 4.41, 4.96, 5.74,
|
||||
5.68, 5.53, 6.06, 5.69, 6.89,
|
||||
7.25, 7.89, 8.59, 10.40, 9.22,
|
||||
10.01, 10.00, 10.88, 10.62, 11.37,
|
||||
10.68, 10.49, 9.06, 11.20, 10.98,
|
||||
10.18, 10.71, 11.44, 13.45, 12.32,
|
||||
12.22, 12.09, 12.73, 12.95, 13.03,
|
||||
12.86, 13.13, 13.39, 12.74, 13.78,
|
||||
13.02, 13.26, 13.10, 14.00, 14.70};
|
||||
|
||||
|
||||
// Local variables
|
||||
G4double zeff2, xmu, a2ze, r1, r2;
|
||||
G4double lambda;
|
||||
|
||||
// == Effective charges from Ford and Wills Nucl Phys 35(1962)295.
|
||||
// == Untabulated charges are interpolated.
|
||||
// == Mu capture lifetime (Goulard and Primakoff PRC10(1974)2034.
|
||||
|
||||
G4int i = G4int(Z) - 1 ;
|
||||
if(i > 99) i = 99;
|
||||
|
||||
const G4double b0a = -.03;
|
||||
const G4double b0b = -.25;
|
||||
const G4double b0c = 3.24;
|
||||
const G4double t1 = 875.e-10;
|
||||
r1 = zeff[i];
|
||||
zeff2 = r1 * r1;
|
||||
// ^-4 -> ^-5 suggested by user
|
||||
xmu = zeff2 * 2.663e-5;
|
||||
a2ze = 0.5 * A / Z;
|
||||
r2 = 1.0 - xmu;
|
||||
lambda = t1 * zeff2 * zeff2 * (r2 * r2) * (1.0 - (1.0 - xmu) * .75704) *
|
||||
(a2ze * b0a + 1.0 - (a2ze - 1.0) * b0b -
|
||||
(2.0 * (A - Z) + std::abs(a2ze - 1.) ) * b0c / (A * 4.) );
|
||||
|
||||
// == Mu capture data are taken if exist
|
||||
for (unsigned int j = 0; j < ListZE; j++) {
|
||||
if( ListZExp[j] == i + 1) {
|
||||
lambda = ListCaptureVel[j] / microsecond;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return lambda;
|
||||
return G4MuonMinusBoundDecay::GetMuonCaptureRate(G4int(Z),G4int(A));
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
G4double G4StopElementSelector::GetMuonDecayRate(G4double Z, G4double /* A */)
|
||||
{
|
||||
// Decay time on K-shell
|
||||
// N.C.Mukhopadhyay Phys. Rep. 30 (1977) 1.
|
||||
|
||||
G4double lambda = 1.0;
|
||||
if(Z > 1) {
|
||||
G4double x = Z*fine_structure_const;
|
||||
lambda -= 2.5 * x * x;
|
||||
if( 0.5 > lambda ) { lambda = 0.5; }
|
||||
}
|
||||
return lambda * 0.445164 / microsecond;
|
||||
return G4MuonMinusBoundDecay::GetMuonDecayRate(G4int(Z));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// File name: G4StopTheoDeexcitation
|
||||
//
|
||||
// Author: Maria Grazia Pia (pia@genova.infn.it)
|
||||
//
|
||||
// Creation date: 8 May 1998
|
||||
//
|
||||
// Modifications:
|
||||
// MGP 4 July 1998 Modified parameters to force evaporation
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
#include "G4ios.hh"
|
||||
|
||||
#include "G4StopTheoDeexcitation.hh"
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4LorentzVector.hh"
|
||||
#include "G4NucleiProperties.hh"
|
||||
#include "G4Fragment.hh"
|
||||
#include "G4ExcitationHandler.hh"
|
||||
#include "G4DynamicParticleVector.hh"
|
||||
#include "G4HadronicDeprecate.hh"
|
||||
|
||||
// Constructor
|
||||
|
||||
G4StopTheoDeexcitation::G4StopTheoDeexcitation() {
|
||||
G4HadronicDeprecate("G4StopTheoDeexcitation");
|
||||
}
|
||||
|
||||
// Destructor
|
||||
|
||||
G4StopTheoDeexcitation::~G4StopTheoDeexcitation()
|
||||
{}
|
||||
|
||||
G4ReactionProductVector*
|
||||
G4StopTheoDeexcitation::BreakUp(G4double A, G4double Z, G4double excitation,
|
||||
const G4ThreeVector& p)
|
||||
{
|
||||
G4ExcitationHandler theHandler;
|
||||
|
||||
// MF and FB parameters modified by MGP to force evaporation
|
||||
// Max A and Z values for use Fermi Breakup
|
||||
// theHandler.SetMaxAandZForFermiBreakUp(16, 10);
|
||||
// theHandler.SetMaxAandZForFermiBreakUp(2, 1);
|
||||
// Min excitation energy (per nucleon) for use MultiFrag
|
||||
|
||||
theHandler.SetMinEForMultiFrag(300*GeV);
|
||||
|
||||
// Deexcite the nucleus
|
||||
|
||||
G4double atomicMass = G4NucleiProperties::GetNuclearMass(static_cast<G4int>(A),static_cast<G4int>(Z));
|
||||
G4double mass = atomicMass + excitation;
|
||||
G4double pMag = p.mag();
|
||||
G4LorentzVector initialMomentum(p.x(),p.y(),p.z(),std::sqrt(pMag*pMag + mass*mass));
|
||||
G4Fragment theExcitedNucleus(static_cast<G4int>(A),static_cast<G4int>(Z),initialMomentum);
|
||||
|
||||
return theHandler.BreakItUp(theExcitedNucleus);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user