3 #include <utl/AugerUnits.h>
4 #include <utl/NormalDistribution.h>
5 #include <utl/AugerException.h>
35 TFile* f = TFile::Open(fileName.c_str(),
"READ");
38 msg <<
"ERROR: could not open file " << fileName;
42 cout <<
"AachenTankResponse convolving";
43 for (
int theta = GetThetaMinDeg(); theta <= GetThetaMaxDeg(); theta+=2) {
52 ostringstream histoID;
53 histoID <<
"p" << theta <<
"_1";
55 TH1D *histResponse = 0;
56 histResponse =
static_cast<TH1D*
>(f->Get(histoID.str().c_str()));
59 msg <<
"ERROR: Histogram " << histoID.str() <<
" not found in " << fileName <<
"\n";
65 double firstMean = histResponse->GetMean();
66 double firstSigma = histResponse->GetRMS();
67 for (
int ix=1;ix<histResponse->GetNbinsX()+1;++ix)
69 double y = histResponse->GetBinContent(ix);
71 const double x = histResponse->GetXaxis()->GetBinCenter(ix);
72 histResponse->SetBinContent(ix,
NormalPDF(x,firstMean,firstSigma));
78 histResponse->GetXaxis()->GetXmin()+histResponse->GetXaxis()->GetBinWidth(1)/2,
79 histResponse->GetXaxis()->GetBinWidth(1));
80 for (
int ix=1;ix<histResponse->GetNbinsX()+1;++ix)
82 const double& y = histResponse->GetBinContent(ix);
89 TH1D* h0 = histResponse;
90 const int n = h0->GetNbinsX();
91 double* conv =
new double[n];
92 double* last =
new double[n];
93 for (
int i=0;i<n;++i) last[i] = h0->GetBinContent(i+1);
95 for (
int nmu=2;nmu<GetTableLimit();++nmu) {
96 for (
int i=0;i<n;++i) {
98 for (
int ii=0;ii<=i;++ii) {
99 const double p1 = last[ii];
100 const double p2 = h0->GetBinContent(i-ii+1);
108 histResponse->GetXaxis()->GetXmin()+histResponse->GetXaxis()->GetBinWidth(1)/2,
109 histResponse->GetXaxis()->GetBinWidth(1));
110 for (
int i = 0;i<n;++i)
112 const double& y = conv[i];
118 for (
int i=0;i<n;++i) last[i] = conv[i];
126 for (
int nmu=1;nmu<GetTableLimit();++nmu) {
130 gMean.SetPoint(gMean.GetN(),nmu,mean);
131 gSigma.SetPoint(gSigma.GetN(),nmu,
sqrt(truncVar));
134 TF1 fitMean(
"fitMean",
"[0]*x");
135 gMean.Fit(&fitMean,
"0Q");
136 item.
parMean = fitMean.GetParameter(0);
138 TF1 fitSigma(
"fitSigma",
"sqrt([0]+[1]*x)");
139 gSigma.Fit(&fitSigma,
"0Q");
140 item.
parSigma[0] = fitSigma.GetParameter(0);
141 item.
parSigma[1] = fitSigma.GetParameter(1);
150 if (theta <= fTable[0].theta) {
151 return fTable[0].GetTPF(nmu).Density(signal);
154 if (theta >= fTable.back().theta) {
155 return fTable.back().GetTPF(nmu).Density(signal);
158 const InternalTable::const_iterator itu = UpperLimit(theta);
169 return p0 + m*(p1-p0);
174 if (theta <= fTable[0].theta)
175 return 1.0 - fTable[0].GetTPF(nmu).Integral(signalmin);
177 if (theta >= fTable.back().theta)
178 return 1.0 - fTable.back().GetTPF(nmu).Integral(signalmin);
180 const InternalTable::const_iterator itu = UpperLimit(theta);
189 return p0 + m*(p1-p0);
193 if (theta <= fTable[0].theta)
194 return fTable[0].GetTPF(nmu).Moment((
unsigned short)order);
196 if (theta >= fTable.back().theta)
197 return fTable.back().GetTPF(nmu).Moment((
unsigned short)order);
199 const InternalTable::const_iterator itu = UpperLimit(theta);
205 const double m0 = lower.
GetTPF(nmu).
Moment((
unsigned short)order);
206 const double m1 = upper.
GetTPF(nmu).
Moment((
unsigned short)order);
208 return m0 + m*(m1-m0);
212 if (theta <= fTable[0].theta)
213 return fTable[0].GetFittedMean(nmu);
215 if (theta >= fTable.back().theta)
216 return fTable.back().GetFittedMean(nmu);
218 const InternalTable::const_iterator itu = UpperLimit(theta);
227 return m0 + m*(m1-m0);
231 if (theta <= fTable[0].theta)
232 return fTable[0].GetFittedSigma(nmu);
234 if (theta >= fTable.back().theta)
235 return fTable.back().GetFittedSigma(nmu);
237 const InternalTable::const_iterator itu = UpperLimit(theta);
246 return m0 + m*(m1-m0);
tls::TabulatedPDF & GetTPF(int nmu)
double Moment(unsigned short order, double xmin=-DBL_MAX, double xmax=DBL_MAX) const
double GetFittedSigma(double theta, int nmu) const
double NormalPDF(const double x)
double Integral(double xmin=-DBL_MAX, double xmax=DBL_MAX) const
double & GetMean(int nmu)
double GetFittedMean(int nmu) const
double GetFittedMean(double theta, int nmu) const
double PDF(double signal, double theta, int nmu) const
double Variance(double xmin=-DBL_MAX, double xmax=DBL_MAX) const
void OpenFile(const std::string &fileName)
void SetScale(double xmin, double xstep)
double GetFittedSigma(int nmu) const
double CDF(double signalmin, double theta, int nmu) const
double Moment(double theta, int nmu, int order) const
double Quantile(double psum) const
double Density(double x) const