Analysis per pixel type for current source scan.

This commit is contained in:
redford_s
2017-03-28 17:17:45 +02:00
parent 5f4f62e07f
commit 9bf6b941db

View File

@@ -11,12 +11,17 @@
#include "TGraphErrors.h"
#include "TF1.h"
#include "TFile.h"
#include "TPaveStats.h"
#include "TLegend.h"
#include <algorithm>
#include <sstream>
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<double> 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");