#ifndef REACTIONXS_H #define REACTIONXS_H #include #include "NdbDefs.h" #include "NdbMF.h" #include "NdbMT.h" #include "NdbParticleList.h" #include "NdbMaterial.h" // --- Interpolation types ---- #define IT_HISTOGRAM 1 #define IT_LINLIN 2 #define IT_LINLOG 3 #define IT_LOGLIN 4 #define IT_LOGLOG 5 #define IT_GAMOW 6 /* ========= NdbMTReactionXS ============ */ class NdbMTReactionXS : public NdbMT { protected: TArrayF ene; // Energy in eV TArrayF xs; // Cross section in barn Float_t minxs, // Minimum and maxxs; // Maximum limits of XS NdbParticle projectile; // Projectile particle NdbParticleList daugthers; // Reaction products NdbMaterial residual; // Residual nucleus Double_t QM; // Mass-difference Q value (eV) Double_t QI; // reaction Q for the lowest // energy state Int_t LR; // Complex or "breakup" flag. Int_t NP; // No. Points (x,y) Int_t NR; // interpolation regions Int_t IT; // Interpolation type public: NdbMTReactionXS(int aMt, const char *desc) : NdbMT(aMt,desc) { LR = -1; NP = -1; NR = -1; minxs = maxxs = 0.0; } ~NdbMTReactionXS() override {} // --- Access functions --- inline Float_t Energy(int i) { return ene[i]; } inline Float_t XS(int i) { return xs[i]; } inline Int_t Pairs() const { return NP; } inline Int_t InterpolationType() const { return IT; } inline Int_t InterpolationRegions() const { return NR; } inline Float_t MassDifference() const { return QM; } inline Float_t ReactionQ() const { return QI; } // --- Input/Output routines --- Bool_t LoadENDF(const char *filename); // --- Interpolation routines --- Int_t BinSearch( Float_t e); Float_t Interpolate(Float_t e); // --- Limits --- inline Float_t MinEnergy() { return ene[0]; } inline Float_t MaxEnergy() { return ene[NP-1]; } inline Float_t MinXS() const { return minxs; } inline Float_t MaxXS() const { return maxxs; } ClassDefOverride(NdbMTReactionXS,1) }; // NdbMTReactionXS #endif