GamR  0.0.0
GammaROOT
Loading...
Searching...
No Matches
Efficiency.hh
Go to the documentation of this file.
1#ifndef EFFICIENCY_HH
2#define EFFICIENCY_HH
3
4#include <vector>
5#include <map>
6#include <string>
7
8#include <TH1.h>
9#include <TF1.h>
10#include <TGraphErrors.h>
11#include <TMultiGraph.h>
12
13#include <nucleus/Transition.hh>
14
15namespace GamR {
20
22 namespace Efficiency {
23 double EffCFunc(double *x, double *pars);
24
25 class DataSet {
26 private:
27 std::vector<std::string> fKeys;
28 std::vector<double> fEnergies;
29 std::vector<double> fPeakAreas;
30 std::vector<double> fPeakErrors;
31 std::vector<double> fIntensities;
32 double fNormalisation;
33 std::vector<double> fEfficiencies;
34 std::vector<double> fEfficiencyErrors;
35 bool fAbsolute;
36 double fAbsScale;
37 public:
38 DataSet() { fNormalisation = 1.0; fAbsolute = true; }
39 DataSet(const char *effFile);
40 DataSet(const char *histFile, const char *histName, const char *gateFile, const char *mapName, const char *intensityFile);
41 DataSet(TH1D *fHist, GamR::Nucleus::TransitionMap* fTransitionMap, std::map<std::string, std::pair<double, double> > fIntensityMap);
42 DataSet(std::string areaFile, const char *intensityFile);
43 void SetData(const char *effFile);
44 void SetData(TH1D *fHist, GamR::Nucleus::TransitionMap* fTransitionMap, std::map<std::string, std::pair<double, double> > fIntensityMap);
45 void SetData(std::string areaFile, std::map<std::string, std::pair<double, double> > fIntensityMap);
46 void SetNorm(double fNorm) { fNormalisation = fNorm; }
47 void SetAbsolute(bool fAbs) { fAbsolute = fAbs; }
48 void SetAbsScale(double fScale) { fAbsScale = fScale; }
49 int GetIndex(std::string key);
50 bool GetAbsolute() { return fAbsolute; }
51 std::string GetKey(int i) { return fKeys[i]; }
52 double GetEnergy(int i) { return fEnergies[i]; }
53 double GetPeak(int i) { return fPeakAreas[i]; }
54 double GetIntensity(int i) { return fIntensities[i]; }
55 double GetNorm() { return fNormalisation; }
56 double GetEfficiency(int i) { return fEfficiencies[i]; }
57 double GetNData() { return fEnergies.size(); }
58 void EraseData(std::string key);
59 void Print(const char *fileName);
60 void Clear();
61 TGraphErrors *GetGraph();
62 TGraphErrors *GetGraphErrors();
63 };
64
65 class FitParams {
66 public:
67 std::vector<TFormula> params;
68 std::vector<TFormula> limlow;
69 std::vector<TFormula> limhigh;
70 std::vector<int> fixed;
71 public:
72 FitParams(int nParams) : params(nParams), fixed(nParams), limlow(nParams), limhigh(nParams) {}
73 void SetParams(std::vector<std::string> sParams, std::vector<std::string> sFixed, std::vector<std::string> sLimLow, std::vector<std::string> sLimHigh);
74 };
75
76 class EffFit {
77 private:
78 class GlobalChiSquare;
79
80 public:
81 std::vector<DataSet> fDataSets;
82 double fAbsScale;
83 bool EqualWeights = false;
84 TF1 *EffFunc;
85 EffFit();
86 void AddData(DataSet dataset) { fDataSets.push_back(dataset); }
87 void EraseData(int iDataSet, std::string key) { fDataSets[iDataSet].EraseData(key); }
88 void SetParams(FitParams params);
89 void PrintParams(const char *fileName);
90 void Fit(int quiet = 0);
91 TMultiGraph* Draw(TCanvas *canvas, int detID=0, double xlow=-1, double xhigh=-1, bool log=false);
92 void WriteGraph(std::string outDir);
93 TMultiGraph* DrawRes(TCanvas *canvas, int detID=0, double xlow=-1, double xhigh=-1);
94 void Draw(const char *outFile, double xlow=-1, double xhigh=-1, bool log=false);
95 };
96
98 private:
99 std::map<int, DataSet> fDataSets;
100 public:
102 MultiDataSet(const char *histFile, const char *histName, const char *gateFile, const char *mapName, const char *intensityFile);
103 DataSet& operator[] (int key) { return fDataSets[key]; }
104 std::map<int, DataSet> *GetDataSets() { return &fDataSets; }
105 int GetNPoints(int i) { return fDataSets[i].GetNData(); }
106 };
107
109 private:
110 std::map<int, EffFit> fEffFits;
111 std::map<int, double> fDetNorm;
112 public:
114 void AddData(const char *histFile, const char *histName, const char *gateFile, const char *mapName, const char *intensityFile);
115 void AddData(DataSet dataSet, int ID);
116 void SetAbsScale(double absScale, int ID) { fEffFits[ID].fAbsScale = absScale; }
117 void SetData(const char *effFile, int i, int ID);
118 void SetDetNorms(int ID, int iDataSet, std::string key);
119 void SetNorm(int iDataSet, double factor);
120 void SetNorm(int ID, int iDataSet, double factor);
121 void SetParams(FitParams params);
122 void SetParams(int ID, FitParams params);
123 void EraseData(int ID, int iDataSet, std::string key) { fEffFits[ID].EraseData(iDataSet, key); }
124 void EraseData(int iDataSet, std::string key);
125 void Fit();
126 void Fit(int ID);
127 void WriteGraphs(std::string outDir);
128 void Draw(const char *outFile, double xlow=-1, double xhigh=-1, bool log=false);
129 void PrintDataSet(int i, const char *fileNameBase);
130 void PrintDataSet(int i, int ID, const char *fileNameBase);
131 void PrintParams(const char *outFile);
132 void SetEqualWeights(bool eq);
133 };
134 }
136}
137
138#endif
void log(TVirtualPad *canvas)
double GetIntensity(int i)
Definition Efficiency.hh:54
void SetNorm(double fNorm)
Definition Efficiency.hh:46
void SetAbsScale(double fScale)
Definition Efficiency.hh:48
std::string GetKey(int i)
Definition Efficiency.hh:51
void SetAbsolute(bool fAbs)
Definition Efficiency.hh:47
double GetEfficiency(int i)
Definition Efficiency.hh:56
TGraphErrors * GetGraph()
void SetData(const char *effFile)
void Print(const char *fileName)
void EraseData(std::string key)
TGraphErrors * GetGraphErrors()
int GetIndex(std::string key)
std::vector< DataSet > fDataSets
Definition Efficiency.hh:81
void PrintParams(const char *fileName)
void SetParams(FitParams params)
void Fit(int quiet=0)
void WriteGraph(std::string outDir)
TMultiGraph * Draw(TCanvas *canvas, int detID=0, double xlow=-1, double xhigh=-1, bool log=false)
void AddData(DataSet dataset)
Definition Efficiency.hh:86
void EraseData(int iDataSet, std::string key)
Definition Efficiency.hh:87
TMultiGraph * DrawRes(TCanvas *canvas, int detID=0, double xlow=-1, double xhigh=-1)
void SetParams(std::vector< std::string > sParams, std::vector< std::string > sFixed, std::vector< std::string > sLimLow, std::vector< std::string > sLimHigh)
std::vector< TFormula > params
Definition Efficiency.hh:67
std::vector< TFormula > limlow
Definition Efficiency.hh:68
std::vector< int > fixed
Definition Efficiency.hh:70
std::vector< TFormula > limhigh
Definition Efficiency.hh:69
std::map< int, DataSet > * GetDataSets()
DataSet & operator[](int key)
void SetParams(FitParams params)
void SetData(const char *effFile, int i, int ID)
void AddData(const char *histFile, const char *histName, const char *gateFile, const char *mapName, const char *intensityFile)
void Draw(const char *outFile, double xlow=-1, double xhigh=-1, bool log=false)
void PrintParams(const char *outFile)
void SetDetNorms(int ID, int iDataSet, std::string key)
void WriteGraphs(std::string outDir)
void SetNorm(int iDataSet, double factor)
void PrintDataSet(int i, const char *fileNameBase)
void EraseData(int ID, int iDataSet, std::string key)
void SetAbsScale(double absScale, int ID)
Library to calculate relative efficiencies for HPGe detectors.
Definition Efficiency.cc:36
double EffCFunc(double *x, double *pars)
Definition Gain.cc:19