50 JParser<> zap(
"Auxiliary program to fit singles rate distributions.");
63 catch(
const exception &error) {
79 TFile* in = TFile::Open(inputFile.c_str(),
"exist");
81 if (in ==
NULL || !in->IsOpen()) {
82 FATAL(
"File: " << inputFile <<
" not opened." <<
endl);
92 TH2D* h2s = (
TH2D*) in->Get((title+
".2S").c_str());
101 const double factor = 1.0/1000 ;
103 TH1D mean((title+
".1mean").c_str(),
NULL, NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS-0.5) ;
104 TH1D sigma((title+
".1sigma").c_str(),
NULL, NUMBER_OF_PMTS, -0.5, NUMBER_OF_PMTS-0.5) ;
106 for (
int i = 1; i <= h2s->GetXaxis()->
GetNbins(); ++i) {
112 for (
int j = 1 ;
j <= h2s->GetNbinsY() ; ++
j) {
114 slice.SetBinContent(
j, h2s->GetBinContent(i,
j)) ;
115 slice.SetBinError (
j, sqrt(h2s->GetBinContent(i,
j))) ;
119 if (slice.Integral() <= 0.0) {
121 WARNING(
"No data in PMT " << i-1 <<
" of module " << title <<
", skipping fit" <<
endl) ;
126 slice.Scale(1.0/slice.Integral()) ;
129 int binmax = slice.GetMaximumBin() ;
139 TF1 f1(
"f1",
"[0]*exp(-0.5*(x-[1])*(x-[1])/([2]*[2]))/(sqrt(2*pi)*[2])");
142 f1.SetParameter(0, 0.2) ;
143 f1.SetParameter(1, 6.0) ;
144 f1.SetParameter(2, 0.3) ;
147 f1.SetParLimits(0, 0.0, 10.0);
148 f1.SetParLimits(1, 0.0, 20.0);
149 f1.SetParLimits(2, 0.0, 1.0);
156 DEBUG(
"Fit histogram " << slice.GetName() <<
" in range " <<
fitrange <<
" kHz " <<
endl ) ;
158 slice.Fit(&f1, option.c_str(),
"same", max(0.0,
fitrange.first),
fitrange.second) ;
160 DEBUG( f1.GetParameter(0)<<
" "<<f1.GetParameter(1)<<
" "<<f1.GetParameter(2)<<
endl ) ;
162 mean.SetBinContent(i, f1.GetParameter(1)) ;
163 sigma.SetBinContent(i, f1.GetParameter(2)) ;