Page MenuHomeHEPForge

CNucleus.h
No OneTemporary

CNucleus.h

// -*- mode: c++ -*-
//
#ifndef nucleus_
#define nucleus_
#include "CMass.h"
#include "CYrast.h"
#include "CLevelDensity.h"
#include "CAngle.h"
#include <string>
#include <sstream>
#include <cstdlib>
#include <cmath>
#include "CRandom.h"
#include "CAngle.h"
#include "CEvap.h"
#include "CAngleDist.h"
#include "CScission.h"
#include "CWeight.h"
#include "SStoreEvap.h"
#include "TLorentzVector.h" // added TU
using namespace std;
/**
*!\brief storage
*
* this structure store information of the evaporated particle orbital AM
*/
struct SStoreSub
{
float weight; //!< weight factor for the orbital amgular momentum
short unsigned L; //!< orbital angular momentum
};
/**
*!\brief storage
*
* this structure info on complex fragment channels
*/
struct SStore
{
double gamma; //!< decay width of channel
short unsigned iZ; //!< proton number of complex fragment
short unsigned iA; //!< mass number of complex fragment
};
/**
*!\brief storage
*
* structure stores information of evaporation decay sub channels
*/
struct SStoreChan
{
float S2; //!< spin of daughter
float Ek; //!< kinetic energy of evaporated particle (MeV)
float Ex; //!< excitation energy of daughter (MeV)
float gamma; //!< partial decay width for this subchannel (MeV)
float temp; //!< temperature of daughter (MeV)
float UPA; //!< thermal excitation energy per nucleus of daughter (MeV)
short unsigned L; //!< orbital angular momentum of evaporated particle
};
/**
*!\brief Hauser-Feshbach, Bohr-Wheeler, Morretto, formulisms
*
* Class CNucleus impliments the GEMINI statistical mode code.
* It follows the decay of a compound nucleus by a sequential series of
* binary decays. The decay widths are calculated with Hauser-Feshbash
* formulism for light particles and Morreto's transition-state formulism
* for other binary decays
*/
class CNucleus : public CNuclide, public CWeight
{
protected:
float Ecoul; //!< Coulomb barrier (HauserFeshbach)
bool notStatistical; //!< this does not decay statistically, evap. frag. only
short unsigned notStatisticalMode;//!< specifies type of nonStatisical decay
float fPairing; //!< pairing energy
float fShell; //!<shell correction
float fU0; //!< thermal excitation energy
float Erot; //!<yrast energy
float Jmax; //!< max spin with a fission barrier
float fMInertia; //!< spherical moment of inertia
float logLevelDensity; //!< store the log of the level density of the nucleus
float temp; //!< nuclear temperature
int fissionZ; //!< proton number of fission fragment
int fissionA; //!< mass number of fission fragment
int fissioningZ; //!< proton number of fission parent
int fissioningA; //!< mass number of fission parent
float fissionU; //!< thermal excitation energy of both fission fragments
float EdefScission; //!< deformation energy of the scission configuration
bool saddleToSciss; //!< indicated decay during saddle-to-scission transition
float timeSinceSaddle; //!< stores the time since the saddle was crossed
float timeSinceStart; //!< stores the time since the decay began
void saddleToScission();
void massAsymmetry(bool);
bool needSymmetricFission; //!< indicated the Bohr-Wheeler width is needed
static bool const noSymmetry;//!< true - old gemini with Morreto for all
float timeScission; //!< time required to go from saddle to scission
static float const viscosity_scission; //!< viscosity during saddleTosciss
static float const viscosity_saddle; //!< viscosity during saddleTosciss
static float timeTransient; //!< transient fission delay
static float fissionScaleFactor; //!< fission width scaled by this factor
static float barAdd; //!< adds to Sierk fission barrier
static int iPoint; //!< pointer to array of stable fragments
static int iHF; //!< set evaporation mode
int HF; //!< evaporation mode chosen for a given decay
static bool noIMF; //!< no imf emission is considered
static bool BohrWheeler; //!< no imf emission is considered
float selectJ(float,float,float,float);
static int const nStore; //!< number of evap sub Channels allowed
static short unsigned Zshell; //!< enforce shell effects in evaporation
static CYrast yrast; //!< gives fission barriers and rotational energies
static CScission scission; //!< gives scission energeis, etc
static CLevelDensity levelDensity; //!< gives level densities
bool bStable; //!< indicated this nucleus is particle-stable
static float const r0; //!< radius const (fm)
static float const sep; //!< separation between fragments
static float threshold; //!< used to turn off unlikey evaporations
CAngle spin; //!< orientation of the spin axis
float velocity[3]; //!< velocity vector of nucleus in cm/ns
float momentum[3]; //!< momentum vector in MeV/c
static CEvap evap; //!< stores info on evaporated particles
CLightP * lightP; //!< points to the light-particle decay mode
static int const nSub; //!< number of l-waves stores in HF
static int const nSubTl; //!< number of l-waves stores in HF in sumTl
float S2Loop(float Ekvalue);
float S2Width(float Ekvalue);
float EkWidth(float ek);
void getSpin( bool saddle);
float EkLoop();
float getSumTl(float,float);
float getWidthZA(float,short);
void angleEvap();
void angleIsotropic();
void angleGamma();
float S2Start; //!< Hauser-Feshback spin of daughter
float UMin; //!< min thermal excitation energy in Hauser-Feshbach
float EcostMin; //!<the min of the energetic cost of emitting light particles
static short unsigned const lMaxQuantum; //!< number of l-waves to store angular dist
static float de;//!< kinetic-energy interval for integrating in Hauser-Feshb
int lMin; //!< minimum orbital AM for Hauser-Feshbach
int lMax;//!< maximum orbital AM for Hauser-Feshbach
float lPlusSMax; //!< max value of l+S of evaporated particle
float lPlusSMin; //!< min value of l+S of evaporated particle
float rResidue; //!< radius of daughter
float rLightP; //!< radius of evaporated particle
//float fMInertiaOrbit; //!< moment of Inertia for orbital motion
float S2; //!< spin of daughter
float EYrast2; //!< rotational energy of daughter
SStoreEvap * storeEvap; //!< information of evap sub channels
SStoreSub * storeSub; //!< store info on l distribution
int iStore; //!< actual number of evap sub channels
short unsigned EvapZ2; //!< proton number of daughter after evap.
short unsigned EvapA2; //!< mass number of daughter after evap.
short unsigned EvapZ1; //!< proton number of evaporated particle
short unsigned EvapA1; //!< mass number of evaporated particle
short unsigned EvapL; //!< orbital AM of evaporated particle
short unsigned EvapMode; //!< ID number of evap channel
float EvapEx1; //!< excitation ennergy of evap. particle
float EvapEx2; //!< excitation energy of daughter after evap.
float EvapS2; //!< spin of daughter after evap
float EvapS1; //!< spin of evaporated particle
float EvapEk; //!< kinetic energy of evaporated particle (MeV)
float EvapLPlusS; //!< toatl spin plus orbital AM of evaporated particle
static CAngleDist angleDist; //!< selects angular distributions of decays
float GammaEx;//!< excitation energy after gamma emission
float GammaJ; //!< spin after gamma emission
int GammaL; //!< gamma type E1=1, E2 = 2
static float const gammaInhibition[3];
//!<scaling of gamma width from Weisskopf value
static float const wue[3]; //!<coeff for Weisskopf units (gamma decay)
static int const nGamma; //!< number of gamma decay modes considered
void binaryDecay();
void excite(float,float);
void excite(float,double);
void excite(double,float);
void excite(double,double);
void excite(float);
void exciteScission(float,float,bool sym=1);
float asyFissionWidth();
float asyFissionWidthZA();
float asyFissionWidthBW();
void force8Be();
void force5Li();
void force5He();
void force9B();
float evaporationWidthSS();
float gammaWidth();
float gammaWidthE1GDR();
float gammaWidthMultipole(int);
float hauserFeshbach(int);
float weiskopf( bool saddle);
void asyFissionDivide();
void recursiveDecay();
CNucleus*daughterLight; //!< pointer to the lighter of the decay products
CNucleus*daughterHeavy; //!< pointer to the heavier of the decay products
CNucleus*parent; //!< pointer to the parent nucleus
static int const Nproducts;
//!< total number of possible decay products from all decays
static CNucleus *allProducts[];
//!< array of pointer to all decay products (stable or intermediate)
static int iProducts; //!< number of decay products from all decays
static int const Nstable; //!< max number of stable decay products
static int iStable; //!< number of stable decay products
static CNucleus * stableProducts[];
//!< array of pointers to all stable decay products for all CN decays
bool bResidue; //!< true if decay produced an evaporation residue
bool bSymmetricFission; //!< true if decay resulted in symmetric fission
bool bAsymmetricFission; //!< true if decay resulted in asymmetric fission
int multPostLight; //!< number of post-fission neutrons for lighter ff
int multPostHeavy; //!< number of post-fission neutrons for heavier ff
int multPreSaddle; //!< number of pre-scission neutrons emitted
int multSaddleToScission;
//!< number of neutrons emitted between saddle and scission
static float const kRotate; //!< constant to calculated rotational energy
void split(CAngle);
float sigma2; //!< variance of fission mass distribution
float symSaddlePoint;//!< symmetric saddle point energy
static float sumGammaEnergy; //!< store the energy emitted in gamma rays
public:
bool abortEvent; //!< abort the event
float evaporationWidth();
float BohrWheelerWidth();
float LestoneFissionWidth();
float LestoneCorrection(float Usaddle, float momInertiaEff,short iAfAn);
static CRandom ran; //!< pointer to random number generator
static float const pi; //!< 3.14159
//functions
CNucleus(int iZ,int iA);
CNucleus(int iZ,int iA, float fEx, float fJ);
~CNucleus();
float getSumGammaEnergy();
float getTime();
void setNewIsotope(int iZ0, int iA0, float fEx0, float fJ0);
void setCompoundNucleus(float fEx0,float fJ0);
void setCompoundNucleus(float fEx0,double dJ0);
void setCompoundNucleus(double dEx0,float fJ0);
void setCompoundNucleus(double dEx0,double dJ0);
void setSpinAxis(CAngle angle);
void setSpinAxisDegrees(CAngle angle);
void setVelocityPolar(float =0.,float=0.,float=0.);
void setVelocityCartesian(float vx=0.,float vy=0.,float vz=0.);
void reset();
static void resetGlobal();
void print();
void printStableProducts();
void printAllProducts();
void vCMofAllProducts();
void energyConservation();
CNucleus* getProducts(int=-1);
CNucleus* getParent();
CNucleus* getLightDaughter();
CNucleus* getHeavyDaughter();
CNucleus* getCompoundNucleus();
int getNumberOfProducts();
float getTheta();
float getThetaDegrees();
CAngle getAngle();
CAngle getAngleDegrees();
float getKE();
float getVelocity();
float getMomentum();
float* getVelocityVector();
float* getMomentumVector();
static void setTimeTransient(float time);
static void setFissionScaleFactor(float factor);
static void setBarWidth(float width);
static void setDeltaE(float de0);
static void setThreshold(float threshold0);
static void setAddToFisBarrier(float barAdd0);
static void setNoIMF();
static void setYesIMF();
static void setLestone();
static void setBohrWheeler();
static void setSolution(int isol);
static void setEvapMode(int iHF0=2);
static float getTimeTransient();
static float getFissionScaleFactor();
static float getBarWidth();
static float getDeltaE();
static float getThreshold();
static float getAddToFisBarrier();
void decay();
bool isAsymmetricFission();
bool isSymmetricFission();
bool isNotStatistical();
bool isSaddleToScission();
bool isResidue();
int getMultPost();
int getMultPre();
int getMultPostLight();
int getMultPostHeavy();
int getMultPreSaddle();
int getMultSaddleToScission();
int origin; //!< specifies the origin of the fragment, prefission, post , etc
void printParameters();
// Changes TU
TLorentzVector getLorentzVector(); // return 4 mom in GeV
//*******ROOT********
//ClassDef(CNucleus,1) //Gemini Nucleus
};
#endif

File Metadata

Mime Type
text/x-c++
Expires
Sat, Dec 21, 3:18 PM (1 d, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4008577
Default Alt Text
CNucleus.h (12 KB)

Event Timeline