From 9bf6b941db151d7bad3893a759068b9ebca1d54c Mon Sep 17 00:00:00 2001 From: redford_s Date: Tue, 28 Mar 2017 17:17:45 +0200 Subject: [PATCH] Analysis per pixel type for current source scan. --- JFMC_CurrentSourceScan.cpp | 187 +++++++++++++++++++++++++++---------- 1 file changed, 140 insertions(+), 47 deletions(-) diff --git a/JFMC_CurrentSourceScan.cpp b/JFMC_CurrentSourceScan.cpp index d8a5707..4bf7473 100644 --- a/JFMC_CurrentSourceScan.cpp +++ b/JFMC_CurrentSourceScan.cpp @@ -11,12 +11,17 @@ #include "TGraphErrors.h" #include "TF1.h" #include "TFile.h" +#include "TPaveStats.h" +#include "TLegend.h" #include #include int main(int argc, char* argv[]) { + jungfrauStyle(); + gROOT->SetBatch(1); + gStyle->SetOptFit(11); if (argc != 4) { cout << "Correct usage:" << endl; @@ -366,7 +371,7 @@ int main(int argc, char* argv[]) { TH2F *g1map_avg = new TH2F("g1map_avg","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); TH2F *g2map_avg = new TH2F("g2map_avg","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); - TH1F *g1overg2 = new TH1F("g1overg2","",100,10,15); + TH1F *g1overg2 = new TH1F("g1overg2","",100,11,15); TH1F *g1overg2er = new TH1F("g1overg2er","",100,0,2); TH2F *g1overg2_map = new TH2F("g1overg2_map","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); @@ -384,6 +389,13 @@ int main(int argc, char* argv[]) { TH2F *diffFromLinG1map = new TH2F("diffFromLinG1map","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); TH2F *diffFromLinG2map = new TH2F("diffFromLinG2map","",NC,-0.5,NC-0.5,NR,-0.5,NR-0.5); + TH1F *g1overg2_isEdge = new TH1F("g1overg2_isEdge","",100,11,15); + TH1F *g1overg2_isInnerEdge = new TH1F("g1overg2_isInnerEdge","",100,11,15); + TH1F *g1overg2_isDouble = new TH1F("g1overg2_isDouble","",100,11,15); + TH1F *g1overg2_isNextToDouble = new TH1F("g1overg2_isNextToDouble","",100,11,15); + TH1F *g1overg2_isQuad = new TH1F("g1overg2_isQuad","",100,11,15); + TH1F *g1overg2_isBulk = new TH1F("g1overg2_isBulk","",100,11,15); + for (int i = 0; i < NCH; i++) { if (pixel_mask[i] == 1) { vector r0_adc; @@ -450,6 +462,8 @@ int main(int argc, char* argv[]) { fit2->SetParameter(0, 10000.); fit2->SetParameter(1, -0.1); fit2->SetLineColor(kGreen+2); + fit2->SetParName(0,"G1 const"); + fit2->SetParName(1,"G1 grad"); grap_g1->Fit(fit2,"QR",""); g1_avg->Fill(fit2->GetParameter(1)); @@ -483,6 +497,8 @@ int main(int argc, char* argv[]) { fit3->SetParameter(0, 10000.); fit3->SetParameter(1, -0.01); fit3->SetLineColor(kRed); + fit3->SetParName(0,"G2 const"); + fit3->SetParName(1,"G2 grad"); grap_g2->Fit(fit3,"QR+",""); g2_avg->Fill(fit3->GetParameter(1)); @@ -505,10 +521,54 @@ int main(int argc, char* argv[]) { g1overg2er->Fill(abs(fit2->GetParameter(1)/fit3->GetParameter(1))*sqrt(pow((fit2->GetParError(1)/fit2->GetParameter(1)),2) + pow((fit3->GetParError(1)/fit3->GetParameter(1)),2))); g1overg2_map->Fill(i%NC,i/NC,fit2->GetParameter(1) / fit3->GetParameter(1)); g1overg2er_map->Fill(i%NC,i/NC,abs(fit2->GetParameter(1)/fit3->GetParameter(1))*sqrt(pow((fit2->GetParError(1)/fit2->GetParameter(1)),2) + pow((fit3->GetParError(1)/fit3->GetParameter(1)),2))); + + if (isEdge(i)) { + g1overg2_isEdge->Fill(fit2->GetParameter(1) / fit3->GetParameter(1)); + } + if (isInnerEdge(i)) { + g1overg2_isInnerEdge->Fill(fit2->GetParameter(1) / fit3->GetParameter(1)); + } + if (isDouble(i)) { + g1overg2_isDouble->Fill(fit2->GetParameter(1) / fit3->GetParameter(1)); + } + if (isNextToDouble(i)) { + g1overg2_isNextToDouble->Fill(fit2->GetParameter(1) / fit3->GetParameter(1)); + } + if (isQuad(i)) { + g1overg2_isQuad->Fill(fit2->GetParameter(1) / fit3->GetParameter(1)); + } + if (isBulk(i)) { + g1overg2_isBulk->Fill(fit2->GetParameter(1) / fit3->GetParameter(1)); + } + } - if (i > 100000 && i < 100010) { - c1->cd(); + if ((i >= 58000 && i < 58000+10) || // bulk + (i >= 10 && i < 10+10) || // edge + (i >= 1024+10 && i < 1024+10+10) || // inner edge + (i >= (256*1024)+10 && i < (256*1024)+10+10) || // double + (i >= (257*1024)+10 && i < (257*1024)+10+10) || // next to double + (i == (255*1024)+255) // quad + ) { + + string pixel_type = "x"; + if (i >= 58000 && i < 58000+10) { + pixel_type = "b"; + } else if (i >= 10 && i < 10+10) { + pixel_type = "e"; + } else if (i >= 1024+10 && i < 1024+10+10) { + pixel_type = "ie"; + } else if (i >= (256*1024)+10 && i < (256*1024)+10+10) { + pixel_type = "d"; + } else if (i >= (257*1024)+10 && i < (257*1024)+10+10) { + pixel_type = "ntd"; + } else if (i == (255*1024)+255) { + pixel_type = "q"; + } + + mapcanvas->SetLeftMargin(0.13); + mapcanvas->SetRightMargin(0.05); + grap_p1->SetMarkerColor(kGreen+2); grap_p2->SetMarkerColor(kRed); grap_p1->SetMarkerStyle(20); @@ -519,58 +579,57 @@ int main(int argc, char* argv[]) { grap_g2->SetMarkerColor(kRed); grap_g1->SetLineColor(kGreen+2); grap_g2->SetLineColor(kRed); - grap_g1->SetMinimum(0); - grap_g1->SetMaximum(16000); - grap_g2->SetMinimum(0); - grap_g2->SetMaximum(16000); - grap_g1->GetXaxis()->SetTitle("Integration time [#mus]"); - grap_g1->GetXaxis()->SetTitleOffset(1.1); - grap_g1->GetYaxis()->SetTitleOffset(1.5); - grap_g2->GetXaxis()->SetTitle("Integration time [#mus]"); - grap_g2->GetXaxis()->SetTitleOffset(1.1); - grap_g2->GetYaxis()->SetTitleOffset(1.5); - TF1 *fit2_e; - TF1 *fit3_e; + TF1 *fit2_e = new TF1("fit2_e","[0]+[1]*x",0.009,1.1E3); + TF1 *fit3_e = new TF1("fit3_e","[0]+[1]*x",0.009,1.1E3); - if (r1_adc.size() > 1) { - fit2_e = new TF1("fit2_e","[0]+[1]*x",0.009,1.1E3); - fit2_e->SetParameters(fit2->GetParameter(0),fit2->GetParameter(1)); - fit2_e->SetLineColor(kGreen+2); - fit2_e->SetLineStyle(2); - grap_g1->Draw("AP"); - grap_p1->Draw("P"); - fit2_e->Draw("same"); - sprintf(savename,"plots/M%s/CurrentSource/pixel%i_g1.png", module_str.c_str(), i); - c1->SaveAs((const char *)(savename)); - } - if (r3_adc.size() > 1) { - fit3_e = new TF1("fit3_e","[0]+[1]*x",0.009,1.1E3); - fit3_e->SetParameters(fit3->GetParameter(0),fit3->GetParameter(1)); - fit3_e->SetLineColor(kRed); - fit3_e->SetLineStyle(2); - grap_g2->GetXaxis()->SetLimits(0,50); - grap_g2->Draw("AP"); - grap_p2->Draw("P"); - fit3_e->Draw("same"); - sprintf(savename,"plots/M%s/CurrentSource/pixel%i_g2.png", module_str.c_str(), i); - c1->SaveAs((const char *)(savename)); - } + fit2_e->SetParameters(fit2->GetParameter(0),fit2->GetParameter(1)); + fit2_e->SetLineColor(kGreen+2); + fit2_e->SetLineStyle(2); + fit3_e->SetParameters(fit3->GetParameter(0),fit3->GetParameter(1)); + fit3_e->SetLineColor(kRed); + fit3_e->SetLineStyle(2); - grap_g1->Draw("AP"); grap_g1->GetXaxis()->SetLimits(0.009,1.1E2); + grap_g1->SetMinimum(0); + grap_g1->SetMaximum(20000); + grap_g1->GetXaxis()->SetTitle("Integration time [#mus]"); + grap_g1->GetYaxis()->SetTitle("ADC [ADU]"); + grap_g1->GetYaxis()->SetTitleOffset(0.9); + grap_g1->Draw("AP"); + fit2->Draw("same"); + mapcanvas->Update(); + TPaveStats *st0 = (TPaveStats*)grap_g1->FindObject("stats"); + st0->SetX1NDC(0.2); + st0->SetX2NDC(0.54); + st0->SetY1NDC(0.71); + st0->SetY2NDC(0.90); + st0->SetBorderSize(0); + st0->SetTextColor(kGreen+2); + grap_g2->Draw("P"); + fit3->Draw("same"); + mapcanvas->Update(); + TPaveStats *st1 = (TPaveStats*)grap_g2->FindObject("stats"); + st1->SetX1NDC(0.6); + st1->SetX2NDC(0.94); + st1->SetY1NDC(0.71); + st1->SetY2NDC(0.90); + st1->SetBorderSize(0); + st1->SetTextColor(kRed); fit2_e->Draw("same"); - if (r3_adc.size() > 1) { - grap_g2->Draw("P"); - fit3_e->Draw("same"); - } + fit3_e->Draw("same"); grap_p1->Draw("P"); grap_p2->Draw("P"); - c1->SetLogx(); - sprintf(savename,"plots/M%s/CurrentSource/pixel%i.png", module_str.c_str(), i); - c1->SaveAs((const char *)(savename)); - c1->SetLogx(0); + mapcanvas->SetLogx(); + sprintf(savename,"plots/M%s/CurrentSource/pixel_%s_%d.png", module_str.c_str(), pixel_type.c_str(), i); + mapcanvas->SaveAs((const char *)(savename)); + mapcanvas->SetLogx(0); + + mapcanvas->SetLeftMargin(0.1); + mapcanvas->SetRightMargin(0.13); + delete fit2_e; + delete fit3_e; } delete grap_g1; @@ -649,6 +708,40 @@ int main(int argc, char* argv[]) { cout << "G1 overflow " << diffFromLinG1->GetBinContent(101) << endl; cout << "G2 overflow " << diffFromLinG2->GetBinContent(101) << endl; + g1overg2_isEdge->SetLineColor(kBlue); + g1overg2_isInnerEdge->SetLineColor(kCyan); + g1overg2_isDouble->SetLineColor(kGreen+2); + g1overg2_isNextToDouble->SetLineColor(kRed); + g1overg2_isQuad->SetLineColor(kOrange); + + g1overg2_isEdge->Scale(1./g1overg2_isEdge->GetEntries()); + g1overg2_isInnerEdge->Scale(1./g1overg2_isInnerEdge->GetEntries()); + g1overg2_isDouble->Scale(1./g1overg2_isDouble->GetEntries()); + g1overg2_isNextToDouble->Scale(1./g1overg2_isNextToDouble->GetEntries()); + g1overg2_isQuad->Scale(1./g1overg2_isQuad->GetEntries()); + g1overg2_isBulk->Scale(1./g1overg2_isBulk->GetEntries()); + + TLegend *leg = new TLegend(0.62,0.6,0.93,0.93); + leg->AddEntry(g1overg2_isBulk, "Normal", "l"); + leg->AddEntry(g1overg2_isDouble, "Double", "l"); + leg->AddEntry(g1overg2_isNextToDouble, "Next to D", "l"); + leg->AddEntry(g1overg2_isEdge, "Edge", "l"); + leg->AddEntry(g1overg2_isInnerEdge, "Inner E", "l"); + + g1overg2_isDouble->GetXaxis()->SetTitle("G0 / G1"); + g1overg2_isDouble->GetYaxis()->SetTitle("Normalised"); + g1overg2_isDouble->GetYaxis()->SetTitleOffset(1.3); + g1overg2_isDouble->SetMinimum(0.0); + g1overg2_isDouble->SetMaximum(0.16); + g1overg2_isDouble->Draw(); + g1overg2_isEdge->Draw("same"); + g1overg2_isInnerEdge->Draw("same"); + g1overg2_isNextToDouble->Draw("same"); + g1overg2_isBulk->Draw("same"); + leg->Draw("same"); + sprintf(savename,"plots/M%s/CurrentSource/g1overg2_perType.png", module_str.c_str()); + c1->SaveAs((const char *)(savename)); + mapcanvas->cd(); g1map_avg->GetXaxis()->SetTitle("Column");