Analysis per pixel type for current source scan.
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user