CNucleus.h

00001 // -*- mode: c++ -*- 
00002 //
00003 #ifndef nucleus_
00004 #define nucleus_
00005 
00006 #include "CMass.h"
00007 #include "CYrast.h"
00008 #include "CLevelDensity.h"
00009 #include "CAngle.h"
00010 #include <string>
00011 #include <sstream>
00012 #include <cstdlib>
00013 #include <cmath>
00014 #include "CRandom.h"
00015 #include "CAngle.h"
00016 #include "CEvap.h"
00017 #include "CAngleDist.h"
00018 #include "CScission.h"
00019 #include "CWeight.h"
00020 #include "SStoreEvap.h"
00021 using namespace std;
00022 
00028 struct SStoreSub
00029 {
00030   float weight; 
00031   short unsigned L; 
00032 };
00033 
00040 struct SStore
00041 {
00042   double gamma; 
00043   short unsigned iZ; 
00044   short unsigned iA; 
00045 };
00046 
00047 
00048 
00054 struct SStoreChan
00055 {
00056   float S2; 
00057   float Ek; 
00058   float Ex; 
00059   float gamma; 
00060   float temp; 
00061   float UPA; 
00062   short unsigned L; 
00063 };
00064 
00065 
00077 class CNucleus : public CNuclide, public CWeight
00078 {
00079  protected:
00080   float Ecoul; 
00081 
00082   bool notStatistical; 
00083 
00084   short unsigned notStatisticalMode;
00085   float fPairing; 
00086   float fShell; 
00087   float fU0; 
00088   float Erot; 
00089   float Jmax; 
00090   float fMInertia; 
00091   float logLevelDensity; 
00092   float temp; 
00093   int fissionZ; 
00094   int fissionA; 
00095   int fissioningZ; 
00096   int fissioningA; 
00097   int iZ1_IMF_Max; 
00098 
00099   float fissionU; 
00100   float EdefScission; 
00101 
00102   bool saddleToSciss; 
00103   float timeSinceSaddle; 
00104   float timeSinceStart; 
00105 
00106   void saddleToScission();
00107   void massAsymmetry(bool);
00108   bool needSymmetricFission; 
00109   static bool const noSymmetry;
00110   float timeScission; 
00111   static float const viscosity_scission; 
00112   static float const viscosity_saddle; 
00113   static float timeTransient; 
00114   static float fissionScaleFactor; 
00115   static float barAdd; 
00116   static int iPoint; 
00117   static int iHF; 
00118   int HF; 
00119   static bool noIMF; 
00120   static bool BohrWheeler; 
00121   float selectJ(float,float,float,float);
00122   static int const nStore; 
00123 
00124   static short unsigned Zshell; 
00125   static CYrast *yrast; 
00126   CScission scission; 
00127   static CLevelDensity *levelDensity; 
00128   bool  bStable; 
00129   static float const r0; 
00130   static float const sep; 
00131   static float threshold; 
00132 
00133   CAngle spin; 
00134   float velocity[3]; 
00135   float momentum[3]; 
00136 
00137 
00138   static CEvap *evap; 
00139 
00140 
00141   CLightP * lightP; 
00142   static int const nSub; 
00143   static int const nSubTl; 
00144   float S2Loop(float Ekvalue);
00145   float S2Width(float Ekvalue);
00146   float EkWidth(float ek);
00147   void getSpin( bool saddle);
00148 
00149   float EkLoop();
00150   float getSumTl(float,float);
00151   float getWidthZA(float,short);
00152   void angleEvap();
00153   void angleIsotropic();
00154   void angleGamma();
00155   float S2Start; 
00156   float UMin; 
00157   float EcostMin; 
00158   static short unsigned const lMaxQuantum; 
00159   static float de;
00160   int lMin; 
00161   int lMax;
00162   float lPlusSMax; 
00163   float lPlusSMin; 
00164   float rResidue; 
00165   float rLightP; 
00166   //float fMInertiaOrbit; //!< moment of Inertia for orbital motion
00167   float S2; 
00168   float EYrast2; 
00169   SStoreEvap * storeEvap; 
00170   SStoreSub * storeSub; 
00171 
00172   int iStore; 
00173   short unsigned EvapZ2; 
00174   short unsigned EvapA2; 
00175   short unsigned EvapZ1; 
00176   short unsigned EvapA1; 
00177   short unsigned EvapL; 
00178   short unsigned EvapMode; 
00179   float EvapEx1; 
00180   float EvapEx2; 
00181   float EvapS2; 
00182   float EvapS1; 
00183   float EvapEk; 
00184   float EvapLPlusS; 
00185 
00186   static CAngleDist angleDist; 
00187 
00188   float GammaEx;
00189   float GammaJ; 
00190   int GammaL; 
00191 
00192   static float const gammaInhibition[3]; 
00194   static float const wue[3]; 
00195   static int const nGamma; 
00196   void binaryDecay();
00197   void exciteScission(float,float,bool sym=1);
00198   float asyFissionWidth();
00199   float asyFissionWidthZA();
00200   float asyFissionWidthBW();
00201   void force8Be();
00202   void force5Li();
00203   void force5He();
00204   void force9B();
00205 
00206   float evaporationWidthSS();
00207   float gammaWidth();
00208   float gammaWidthE1GDR();
00209   float gammaWidthMultipole(int);
00210   float hauserFeshbach(int);
00211   float weiskopf( bool saddle);
00212   void  asyFissionDivide();
00213   void recursiveDecay();
00214   CNucleus*daughterLight;  
00215   CNucleus*daughterHeavy;  
00216   CNucleus*parent; 
00217 
00218   static int const Nproducts; 
00220 
00221 
00222   static CNucleus *allProducts[]; 
00224  
00225   static int iProducts; 
00226 
00227 
00228   static int const Nstable; 
00229   static int iStable; 
00230   static CNucleus * stableProducts[]; 
00232 
00233 
00234   bool bResidue; 
00235   bool bSymmetricFission; 
00236   bool bAsymmetricFission; 
00237   int multPostLight; 
00238   int multPostHeavy; 
00239   int multPreSaddle; 
00240   int multSaddleToScission; 
00242 
00243 
00244   static float const kRotate; 
00245   void split(CAngle);
00246 
00247   float sigma2; 
00248   float symSaddlePoint;
00249   static float sumGammaEnergy; 
00250 
00251  public:
00252 
00253 
00254   bool abortEvent; 
00255   float evaporationWidth();
00256   float BohrWheelerWidth();
00257   float LestoneFissionWidth();
00258   float LestoneCorrection(float Usaddle, float momInertiaEff,short iAfAn);
00259   static CRandom ran; 
00260   static float const pi; 
00261   static double const EkFraction; // !< calculates the Ek spectra down to this
00262                                  // fraction of the maximum
00263   //functions
00264   CNucleus(int iZ,int iA);
00265   CNucleus(int iZ,int iA, float fEx, float fJ);
00266   ~CNucleus();
00267   float getSumGammaEnergy();
00268   float getTime();
00269 
00270   void setNewIsotope(int iZ0, int iA0, float fEx0, float fJ0); 
00271 
00272   void setCompoundNucleus(float fEx0,float fJ0);
00273   void setCompoundNucleus(float fEx0,double dJ0);
00274   void setCompoundNucleus(double dEx0,float fJ0);
00275   void setCompoundNucleus(double dEx0,double dJ0);
00276 
00277   void setSpinAxis(CAngle angle);
00278   void setSpinAxisDegrees(CAngle angle);
00279   void setVelocityPolar(float =0.,float=0.,float=0.);
00280   void setVelocityCartesian(float vx=0.,float vy=0.,float vz=0.);
00281 
00282   void reset();
00283   static void resetGlobal();
00284 
00285   void print();
00286   void printStableProducts();
00287   void printAllProducts();
00288   void vCMofAllProducts();
00289   void energyConservation();
00290 
00291 
00292   CNucleus* getProducts(int=-1);
00293   CNucleus* getParent();
00294   CNucleus* getLightDaughter();
00295   CNucleus* getHeavyDaughter();
00296   CNucleus* getCompoundNucleus();
00297 
00298 
00299   int getNumberOfProducts();
00300   int getZmaxEvap();
00301 
00302 
00303   void excite(float,float);
00304   void excite(float,double);
00305   void excite(double,float);
00306   void excite(double,double);
00307   void excite(float);
00308 
00309   float getTheta();
00310   float getThetaDegrees();
00311   CAngle getAngle();
00312   CAngle getAngleDegrees();
00313   float getKE();
00314   float getVelocity();
00315   float getMomentum();
00316   float* getVelocityVector();
00317   float* getMomentumVector();
00318 
00319   static void setTimeTransient(float time);
00320   static void setFissionScaleFactor(float factor);
00321   static void setBarWidth(float width);
00322   static void setDeltaE(float de0);
00323   static void setThreshold(float threshold0);
00324   static void setAddToFisBarrier(float barAdd0);
00325   static void setNoIMF();
00326   static void setYesIMF();
00327   static void setLestone();
00328   static void setBohrWheeler();
00329   static void setSolution(int isol);
00330   static void setEvapMode(int iHF0=2);
00331 
00332   static float getTimeTransient();
00333   static float getFissionScaleFactor();
00334   static float getBarWidth();
00335   static float getDeltaE();
00336   static float getThreshold();
00337   static float getAddToFisBarrier();
00338 
00339   void decay();
00340   bool isAsymmetricFission();
00341   bool isSymmetricFission();
00342   bool isNotStatistical();
00343   bool isSaddleToScission();
00344   bool isResidue();
00345   int getMultPost();
00346   int getMultPre();
00347   int getMultPostLight();
00348   int getMultPostHeavy();
00349   int getMultPreSaddle();
00350   int getMultSaddleToScission();
00351   float getFissionTimeSymmetric(float & timeScission);
00352   float getFissionTimeAsymmetric();
00353   float getDecayWidth();
00354   float getLogLevelDensity();
00355   int origin; 
00356   int origin2; 
00357   void printParameters();
00358 
00359 
00360   //*******ROOT********
00361     //ClassDef(CNucleus,1)  //Gemini Nucleus
00362 };
00363 #endif 

Generated on Mon Aug 6 14:13:09 2012 by  doxygen 1.4.7