10 #include "TFitResult.h"
21 namespace ExtractTimeOffsetsAndCEffNS {
27 TH1I *
Get1DHistogram(
const char * plugin,
const char * directoryName,
const char * name,
bool print =
true){
29 TString fullName = TString(plugin) +
"/" + TString(directoryName) +
"/" + TString(name);
30 thisFile->GetObject(fullName, histogram);
32 if (print) cout <<
"Unable to find histogram " << fullName.Data() << endl;
40 TString fullName = TString(name);
41 thisFile->GetObject(fullName, histogram);
43 if (print) cout <<
"Unable to find histogram " << fullName.Data() << endl;
49 TH2I *
Get2DHistogram(
const char * plugin,
const char * directoryName,
const char * name){
51 TString fullName = TString(plugin) +
"/" + TString(directoryName) +
"/" + TString(name);
52 thisFile->GetObject(fullName, histogram);
54 cout <<
"Unable to find histogram " << fullName.Data() << endl;
67 printf(
"ExtractTimeOffsetsAndCEff\n");
71 char outfilename[255];
72 sprintf(outfilename,
"BCALTimeOffsetAndCEff_Results_%i_%s.root",
run,tag.Data());
73 TFile *outputFile = TFile::Open(outfilename,
"RECREATE");
74 outputFile->mkdir(
"Fits");
75 outputFile->mkdir(
"ResultOverview");
79 cout <<
"Unable to open file " <<
filename.Data() <<
"...Exiting" << endl;
138 printf(
"Loaded CCDB parameters\n");
142 ofstream channel_global_offset_File;
144 sprintf(outfilename,
"channel_global_offset_BCAL_%i_%s.txt",
run,tag.Data());
145 channel_global_offset_File.open(outfilename);
150 TF1 *
f1 =
new TF1(
"f1",
"[0]+[1]*x", -200, 200);
151 f1->SetParLimits(0, -20.0, 20.0);
152 f1->SetParLimits(1, 0.85, 1.15);
153 outputFile->cd(
"ResultOverview");
161 TH1I *OldTimeOffsets =
new TH1I(
"OldTimeOffsets",
"Total time offset (pre)", 2000, -4, 4);
162 TH1F *OldTimeOffsetsVsChannel =
new TH1F(
"OldTimeOffsetsVsChannel",
"Total time offset (pre) vs channel;CCDB channel", 768, 0.5, 768.5);
163 TH1I *NewTimeOffsets =
new TH1I(
"NewTimeOffsets",
"Total time offset (post)", 2000, -4, 4);
164 TH1F *NewTimeOffsetsVsChannel =
new TH1F(
"NewTimeOffsetsVsChannel",
"Total time offset (post) vs channel;CCDB channel", 768, 0.5, 768.5);
165 TH1I *NewTimeOffsetsFit =
new TH1I(
"NewTimeOffsetsFit",
"Total time offset fit (post)", 2000, -4, 4);
166 TH1F *NewTimeOffsetsFitVsChannel =
new TH1F(
"NewTimeOffsetsFitVsChannel",
"Total time offset fit (post) vs channel;CCDB channel", 768, 0.5, 768.5);
167 TH1I *RelativeTimeOffsetsFit =
new TH1I(
"RelativeTimeOffsetsFit",
"Change in time offset", 2000, -4, 4);
168 TH1F *RelativeTimeOffsetsFitVsChannel =
new TH1F(
"RelativeTimeOffsetsFitVsChannel",
"Change in time offset vs channel;CCDB channel", 768, 0.5, 768.5);
170 TH1D *priorOffsetHist = NULL;
177 if (priorOffsetHist != NULL) {
178 for (
int i = 1 ; i <= priorOffsetHist->GetNbinsX(); i++){
179 printf(
"%4i %-.3f\n", i,priorOffsetHist->GetBinContent(i));
182 printf(
"Failed to load %s\n",
"CCDB_raw_channel_global_offset");
186 if(residualHist != NULL && priorOffsetHist != NULL){
187 int nBinsX = residualHist->GetNbinsX();
188 int nBinsY = residualHist->GetNbinsY();
190 TString newtag = tag +
"_channel";
194 for (
int i = 1 ; i <= nBinsX; i++){
195 TH1D *projY = residualHist->ProjectionY(
"temp", i, i);
197 float nsPerBin = (projY->GetBinCenter(projY->GetNbinsX()) - projY->GetBinCenter(1)) / projY->GetNbinsX();
198 float timeWindow = 0.5;
199 int binWindow = int(timeWindow / nsPerBin);
200 double maxEntries = 0;
202 for (
int j = 1 ; j <= projY->GetNbinsX();j++){
204 int maxBin = (j + binWindow) <= projY->GetNbinsX() ? (j + binWindow) : projY->GetNbinsX();
205 double sum = 0, nEntries = 0;
206 for (
int bin = minBin; bin <= maxBin; bin++){
207 sum += projY->GetBinContent(bin) * projY->GetBinCenter(bin);
208 nEntries += projY->GetBinContent(bin);
210 if (nEntries > maxEntries) {
211 maxMean = sum / nEntries;
212 maxEntries = nEntries;
217 float priorOffset = priorOffsetHist->GetBinContent(i);
218 float residualOffset = maxMean;
219 float residualOffsetFit = meanhist->GetBinContent(i);
220 float newOffset = priorOffset + residualOffset;
221 float newOffsetFit = priorOffset + residualOffsetFit;
223 OldTimeOffsets->Fill(priorOffset);
224 OldTimeOffsetsVsChannel->SetBinContent(i,priorOffset);
225 NewTimeOffsets->Fill(newOffset);
226 NewTimeOffsetsVsChannel->SetBinContent(i,newOffset);
227 NewTimeOffsetsFit->Fill(newOffsetFit);
228 NewTimeOffsetsFitVsChannel->SetBinContent(i,newOffsetFit);
229 RelativeTimeOffsetsFit->Fill(residualOffsetFit);
230 RelativeTimeOffsetsFitVsChannel->SetBinContent(i,residualOffsetFit);
232 printf(
"%4i %6.3f %+.3f = %6.3f %+.3f = %6.3f\n",
233 i,priorOffset,residualOffset,newOffset,residualOffsetFit,newOffsetFit);
234 channel_global_offset_File << newOffsetFit << endl;;
289 channel_global_offset_File.close();
298 double outermintime=-2, outermaxtime=2;
300 TAxis * xaxis = hist2d->GetXaxis();
301 TAxis * yaxis = hist2d->GetYaxis();
302 int nBinsX = hist2d->GetNbinsX();
303 int nBinsY = hist2d->GetNbinsY();
305 printf(
"bins (%i,%i)\n",nBinsX,nBinsY);
307 TH1D *xmean = hist2d->ProjectionX(
"xmean");
310 gStyle->SetOptStat(2210);
311 gStyle->SetOptFit(1);
314 canvas_fit =
new TCanvas(
"canvas_fit",
"canvas_fit");
317 for (
int i = 1 ; i <= nBinsX; i++){
318 TH1D *singlebin_projY = hist2d->ProjectionY(
"temp", i, i);
319 float center = yaxis->GetBinCenter(singlebin_projY->GetMaximumBin());
321 float mintime = center-width;
322 float maxtime = center+width;
324 TF1 *f_gaus =
new TF1(
"f_gaus",
"gaus",mintime,maxtime);
327 singlebin_projY->SetAxisRange(mintime,maxtime);
328 double mean=0, meanerr=0;
330 singlebin_projY->Fit(f_gaus,
"RQ");
331 mean = f_gaus->GetParameter(1);
332 meanerr = f_gaus->GetParError(1);
333 xmean->SetBinContent(i,mean);
334 xmean->SetBinError(i,meanerr);
335 if (print || meanerr>0.5) {
337 sprintf(plotname,
"plots/gausfitformean/fit_%s_%i.png",tag.Data(),i);
338 canvas_fit->Print(plotname);
340 singlebin_projY->Reset();
sprintf(text,"Post KinFit Cut")
TH1I * Get1DHistogramBasedir(const char *name, bool print=true)
TH2I * Get2DHistogram(const char *plugin, const char *directoryName, const char *name)
TH1I * Get1DHistogram(const char *plugin, const char *directoryName, const char *name, bool print=true)
void ExtractTimeOffsetsAndCEff(int run=2931, TString filename="hd_root.root", TString tag="default")
printf("string=%s", string)