File indexing completed on 2025-08-06 08:16:11
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 char name[100];
0017 TH2D* BH_Residual_vsPhi_[16];
0018 TH2D* BH_Residual_vsPhi_PC_[16];
0019
0020
0021 TH2D* BH_Residual_vsPhi_Corrected_[16];
0022 TH2D* BH_Residual_vsPhi_PC_Corrected_[16];
0023
0024 void TripleFit(TH2*);
0025
0026 void DNL_CorrectionArray(int REBIN=1)
0027 {
0028
0029
0030 for( int i=0; i<16; i++)
0031 {
0032 sprintf(name, "BH_Residual_vsPhi_%d", i);
0033 _file0->GetObject(name, BH_Residual_vsPhi_[i]);
0034
0035 sprintf(name, "BH_Residual_vsPhi_PC_%d", i);
0036 _file0->GetObject(name, BH_Residual_vsPhi_PC_[i]);
0037 }
0038
0039
0040 for (int i=1; i<15; i++)
0041 {
0042 BH_Residual_vsPhi_[i]->Rebin2D(1, REBIN);
0043 BH_Residual_vsPhi_PC_[i]->Rebin2D(1, REBIN);
0044
0045 sprintf(name, "BH_Residual_vsPhi_Corrected_%d", i);
0046 BH_Residual_vsPhi_Corrected_[i] = (TH2D*)BH_Residual_vsPhi_[i]->Clone(name);
0047 BH_Residual_vsPhi_Corrected_[i]->Reset();
0048
0049 sprintf(name, "BH_Residual_vsPhi_PC_Corrected_%d", i);
0050 BH_Residual_vsPhi_PC_Corrected_[i] = (TH2D*)BH_Residual_vsPhi_PC_[i]->Clone(name);
0051 BH_Residual_vsPhi_PC_Corrected_[i]->Reset();
0052 }
0053
0054
0055 for (int k=1; k<15; k++)
0056 {
0057 cout << "Calculating corrections for layer " << k << endl;
0058 for (int i=1; i<BH_Residual_vsPhi_[k]->GetNbinsX()+1; i++)
0059 {
0060 double correction = BH_Residual_vsPhi_[k]->ProfileX()->GetBinContent(i);
0061 double correction_PC = BH_Residual_vsPhi_PC_[k]->ProfileX()->GetBinContent(i);
0062
0063 double xValue = BH_Residual_vsPhi_[k]->GetXaxis()->GetBinCenter(i);
0064 double xValue_PC = BH_Residual_vsPhi_PC_[k]->GetXaxis()->GetBinCenter(i);
0065
0066 for (int j=1; j< BH_Residual_vsPhi_[k]->GetNbinsY()+1; j++)
0067 {
0068 int getBin;
0069 double content, yValue;
0070
0071 getBin = BH_Residual_vsPhi_[k]->GetBin(i,j);
0072 content = BH_Residual_vsPhi_[k]->GetBinContent(getBin);
0073 yValue = BH_Residual_vsPhi_[k]->GetYaxis()->GetBinCenter(j);
0074 BH_Residual_vsPhi_Corrected_[k]->Fill(xValue, yValue-correction, content);
0075
0076 getBin = BH_Residual_vsPhi_PC_[k]->GetBin(i,j);
0077 content = BH_Residual_vsPhi_PC_[k]->GetBinContent(getBin);
0078 yValue = BH_Residual_vsPhi_PC_[k]->GetYaxis()->GetBinCenter(j);
0079 BH_Residual_vsPhi_PC_Corrected_[k]->Fill(xValue_PC, yValue-correction_PC, content);
0080 }
0081 }
0082 }
0083
0084 for (int i=1; i<15; i++)
0085 {
0086 TripleFit(BH_Residual_vsPhi_Corrected_[i]);
0087 TripleFit(BH_Residual_vsPhi_PC_Corrected_[i]);
0088 }
0089 }
0090
0091 TF1* GAUSS = 0;
0092
0093 void TripleFit(TH2* hist)
0094 {
0095
0096 if (hist->Integral()<1000) { return; }
0097
0098 TH1D* ProjectionY = hist->ProjectionY();
0099 double min = ProjectionY->GetBinCenter(1);
0100 double max = ProjectionY->GetBinCenter(ProjectionY->GetNbinsX());
0101
0102 double amp = ProjectionY->GetBinContent(ProjectionY->GetMaximumBin());
0103 double mean = ProjectionY->GetMean();
0104 double sigma = ProjectionY->GetRMS();
0105
0106 if (!GAUSS) { GAUSS = new TF1("GAUSS", "[0]*exp(-(x-[1])*(x-[1])/(2.0*[2]*[2]))", min, max); }
0107
0108 for (int j=0; j<3; j++)
0109 {
0110 GAUSS->SetParameter(0,amp);
0111 GAUSS->SetParameter(1,mean);
0112 GAUSS->SetParameter(2,sigma);
0113
0114 ProjectionY->Fit(GAUSS, "Q0", "", min, max);
0115
0116 amp = ProjectionY->GetFunction("GAUSS")->GetParameter(0);
0117 mean = ProjectionY->GetFunction("GAUSS")->GetParameter(1);
0118 sigma = ProjectionY->GetFunction("GAUSS")->GetParameter(2);
0119
0120 min = mean - 2.0*sigma;
0121 max = mean + 2.0*sigma;
0122 }
0123
0124
0125 cout << "Name: " << hist->GetName();
0126 cout << "\t Amp:" << amp;
0127 cout << "\t Mean:" << mean;
0128 cout << "\t Sigma:" << sigma;
0129 cout << endl;
0130 }
0131