00001 #ifndef LFLUK_HH
00002 #define LFLUK_HH
00003
00004 #include <map>
00005 #include <vector>
00006 #include <iostream>
00007 #include <fstream>
00008 #include <cmath>
00009 #include "Rtypes.h"
00010 #include "TMVA/TSpline1.h"
00011
00012 class TFile;
00013 class TH2F;
00014 class TH2D;
00015 class TH2;
00016 class TF1;
00017
00018 class Registry;
00019
00020 class Lfluk {
00021
00022 public:
00023
00024 Lfluk();
00025 virtual ~Lfluk();
00026
00027 void SetConfig(const std::string param, const std::string skew, const std::string na49fit, const double wmin, const double wmax);
00028
00029 void Config(const Registry ®);
00030
00031 void Init();
00032
00033 void SetParameters(std::vector<double> par);
00034
00035 const std::vector<double>& GetParameters() {return fPar;};
00036
00037 double GetWeight(int ptype, double pt, double pz);
00038
00039 double GetMeanPT(int ptype) {return fMeanPT[GetParticleEnum(ptype)];};
00040 double GetReweightedMeanPT(int ptype) {return fWeightedMeanPT[GetParticleEnum(ptype)];};
00041 double GetPTshift(int ptype, double pz_low=0.,double pz_up=120.);
00042 double GetNFrac(int ptype, double pz_low=0., double pz_up=120., double pt_low=0., double pt_up=1.);
00043 TH2F* GetReweightedPTXF(int ptype) {return fWeightedPTXF[GetParticleEnum(ptype)];};
00044 TH2F* GetPTXF(int ptype) {return fPTXF[GetParticleEnum(ptype)];};
00045 TH2D* GetWeightHistogram(int ptype) {return fWeightHist[GetParticleEnum(ptype)];};
00046 TH2* GetWeightHist(const std::string &ptype);
00047
00048
00049 TH1* GetFlukKPiRatio() {return fFlukKPiRat;};
00050 TH1* GetPiPlusReWProj() {return fPiPlusReWProj;};
00051 TH1* GetKPlusf05Proj() {return fKPlusf05Proj;};
00052 TH1* GetKPlusf05PipReWRatio() {return fKPlusf05PipReWRatio;};
00053
00054 private:
00055
00056 typedef enum EParticleType
00057 {
00058 kPiPlus = 8,
00059 kPiMinus = 9,
00060 kKPlus = 11,
00061 kKMinus = 12,
00062 kK0L = 10,
00063 kUnknown = 0
00064 } ParticleType_t;
00065
00066 double CalcWeight(int ptype, double pt, double pz);
00067
00068 double GetSKZPWeight(const Lfluk::ParticleType_t particle, const double pT, const double xF);
00069 double GetSKPCWeight(const Lfluk::ParticleType_t particle, const double pT, const double xF);
00070 double GetQuadWeight(const Lfluk::ParticleType_t particle, const double pT, const double xF);
00071 double GetMeanPTWeight(const Lfluk::ParticleType_t particle, const double pT, const double xF);
00072
00073 void SkewSKZP(const double xF, const double A, const double B, const double C, long double &Ap, long double &Bp, long double &Cp);
00074 void SkewSKPC(const double xF, const double A, const double B, const double C,
00075 const double D, const double E, double &Ap, double &Bp, double &Cp,
00076 double &Dp, double &Ep);
00077
00078 double GetSKZPA(const Lfluk::ParticleType_t particle, double xf) const;
00079 double GetSKZPB(const Lfluk::ParticleType_t particle, double xf) const;
00080 double GetSKZPC(const Lfluk::ParticleType_t particle, double xf) const;
00081
00082 double GetSKPCA(const Lfluk::ParticleType_t particle, double xf) const;
00083 double GetSKPCB(const Lfluk::ParticleType_t particle, double xf) const;
00084 double GetSKPCC(const Lfluk::ParticleType_t particle, double xf) const;
00085 double GetSKPCD(const Lfluk::ParticleType_t particle, double xf) const;
00086 double GetSKPCE(const Lfluk::ParticleType_t particle, double xf) const;
00087
00088 std::string GetParticleName(Lfluk::ParticleType_t ptype);
00089
00090 Lfluk::ParticleType_t GetParticleEnum(const std::string &ptype);
00091 Lfluk::ParticleType_t GetParticleEnum(int ptype);
00092
00093 void RecalculateWeights();
00094
00095
00096 private:
00097
00098 std::string fParam;
00099 std::string fSkew;
00100 std::string fNA49Fit;
00101 std::string fPath;
00102
00103 double fMinW;
00104 double fMaxW;
00105 double fKPiRatScale;
00106
00107 bool fWghtFromHist;
00108 bool fUseFlukPi;
00109
00110 std::vector<double> fPar;
00111 std::vector<ParticleType_t> fPlist;
00112
00113 std::map<Lfluk::ParticleType_t, TH2F* > fPTXF;
00114 std::map<Lfluk::ParticleType_t, TH2F* > fWeightedPTXF;
00115 std::map<Lfluk::ParticleType_t, TH2D* > fWeightHist;
00116 std::map<Lfluk::ParticleType_t, double > fMeanPT;
00117 std::map<Lfluk::ParticleType_t, double > fN;
00118 std::map<Lfluk::ParticleType_t, double > fNWeighted;
00119 std::map<Lfluk::ParticleType_t, double > fWeightedMeanPT;
00120 std::map<Lfluk::ParticleType_t, int > fNBinsY,fNBinsX;
00121
00122
00123 TF1* fNA49pirat;
00124 std::vector<double> fPiRatio;
00125 std::vector<double> fFluka05KPiRatio;
00126 std::vector<double> fFluka05PiRatio;
00127 std::vector<double> fKPiRatio;
00128
00129 bool isFirst;
00130
00131 TH1 *fFlukKPiRat;
00132 TH1 *fFlukPiRat;
00133 TH1 *fPiPlusReWProj;
00134 TH1 *fKPlusf05Proj;
00135 TH1 *fKPlusf05PipReWRatio;
00136
00137
00138 ClassDef(Lfluk,0)
00139 };
00140
00141 #endif