Subversion Repositories f9daq

Compare Revisions

No changes between revisions

Ignore whitespace Rev 29 → Rev 30

/sipmScan/examples/plot_tdc_C.lib
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/sipmScan/examples/mppc.cpp
0,0 → 1,188
#include "TROOT.h"
#include "TFile.h"
#include "TBenchmark.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TPad.h"
#include "TF1.h"
#include "TGraph.h"
#include "TSpectrum.h"
 
#include "RTUtil.h"
 
#define TDC_BIN (25./1000.) //1 TDC bin in ns
#define MIKRO_BIN 0.49609/1000. //1 mikro step in mm
 
#define HFILL_COLOR 18
 
void mppc(char *fname, char *plopt="t", int nChannels = 1, double fitw=1.0, char *fitf="g")
{
char fullname[256];
//get ROOT file with histograms
char fnameroot[1024];
TFile * rootfile;
TDirectory *dir;
sprintf(fnameroot, "root/%s.root", fname);
rootfile = (TFile *) gROOT->FindObject(fname);
if(rootfile==NULL) rootfile = new TFile(fnameroot);
if(rootfile==NULL) {
printf("Cannot open root file %s!!!\n",fnameroot);
return;
}
dir = (TDirectory*) rootfile;
// set draw style
gStyle->SetOptStat("ne");
gStyle->SetPalette(1, 0);
gStyle->SetPaperSize(TStyle::kA4);
gStyle->SetStatBorderSize(1);
gStyle->SetFrameBorderMode(0);
gStyle->SetFrameFillColor(0);
gStyle->SetCanvasBorderMode(0);
gStyle->SetPadBorderMode(0);
gStyle->SetPadColor(0);
gStyle->SetCanvasColor(0);
gStyle->SetStatColor(0);
gStyle->SetOptFit(11);
gStyle->SetOptStat();
gStyle->SetPadRightMargin(0.15);
gStyle->SetPadLeftMargin(0.12);
//gStyle->SetTitleYOffset(1.4);
TCanvas *c[16];
int cc=-1;
char hname[256];
TH1F *hp1d; TH2F *hp2d;
// 2d Scan --------------------------------------------------------------------------------------------
 
if( strchr(plopt, '2') != NULL ) {
c[++cc] = new TCanvas("2D Scan", fname, 650, 400, 600, 600);
int i=0;
gPad->SetLogz();
sprintf(hname, "h2d%d",i); hp2d = (TH2F *) dir->Get(hname);
(hp2d->GetYaxis())->SetLabelOffset(0.01);
hp2d->SetTitle("; X [mm]; Y[mm]");
hp2d->DrawCopy("COLZ");
sprintf(fullname, "ps/%s_2d.eps", fname);
c[cc]->SaveAs(fullname);
}
 
// 1d Scan Y ------------------------------------------------------------------------------------------
 
if( strchr(plopt, 'y') != NULL ) {
c[++cc] = new TCanvas("Y Scan", fname, 250, 200, 600, 600);
int i=0;
//gPad->SetLogy();
sprintf(hname, "hnhitsy%d",i); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("Y Scan; Y; Count");
hp1d->DrawCopy();
sprintf(fullname, "ps/%s_y.eps", fname);
c[cc]->SaveAs(fullname);
}
// 1d Scan X ------------------------------------------------------------------------------------------
 
if( strchr(plopt, 'x') != NULL ) {
c[++cc] = new TCanvas("X Scan", fname, 250, 200, 600, 600);
int i=0;
//gPad->SetLogy();
sprintf(hname, "hnhitsx%d",i); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("X Scan; X; Count");
hp1d->DrawCopy();
sprintf(fullname, "ps/%s_x.eps", fname);
c[cc]->SaveAs(fullname);
}
// Fits of corrected TDCs -----------------------------------------------------------------------------
 
TF1 *fg = new TF1("fg", "gaus");
TF1 *fgg = new TF1("fgg", "gaus(0)+gaus(3)");
fgg->SetParNames("Constant","Mean","Sigma","Constant2","Mean2","Sigma2");
if( strchr(plopt, 'f') != NULL ) {
c[++cc] = new TCanvas("Corrected TDCs", fname, 50*(cc+1), 0, 600, 850);
//c[cc]->Divide(2,4);
c[cc]->Divide(nChannels);
 
for(int i=0;i<nChannels;i++) {
c[cc]->cd(i+1); gPad->SetLogy();
sprintf(hname, "hctdc%d",i); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("cTDC; TDC [ns]; N");
(hp1d->GetXaxis())->SetRangeUser(-40*TDC_BIN,160*TDC_BIN);
if( hp1d->GetMaximum() < 50 ) continue;
//(hp1d->GetXaxis())->SetRangeUser(-0.25,0.75);
if( strcmp(fitf, "g")==0 ) {
fg->SetParameters(hp1d->GetMaximum(), hp1d->GetBinCenter(hp1d->GetMaximumBin()), 0.05);
hp1d->Fit(fg, "0ql", "", fg->GetParameter(1)-0.1*fitw, fg->GetParameter(1)+0.05*fitw);
hp1d->Fit(fg, "ql", "", fg->GetParameter(1)-0.1*fitw, fg->GetParameter(1)+0.05*fitw);
printf("Ch[%d] Sigma =%6.1lfps\n",i,fg->GetParameter(2)*1000.);
}
else if( strcmp(fitf, "gg")==0 ) {
//fgg->SetParameters(2600.,0*TDC_BIN,2*TDC_BIN, 100.,0*TDC_BIN,10*TDC_BIN);
fgg->SetParameters(hp1d->GetMaximum(), hp1d->GetBinCenter(hp1d->GetMaximumBin()), 0.03,
hp1d->GetMaximum(), hp1d->GetBinCenter(hp1d->GetMaximumBin())/10., 0.1);
hp1d->Fit(fgg, "0ql", "", -50*TDC_BIN, 50*TDC_BIN);
hp1d->Fit(fgg, "ql", "", fgg->GetParameter(1)-2.5*fitw*fgg->GetParameter(2),
fgg->GetParameter(1)+3.5*fitw*fgg->GetParameter(2));
printf("Ch[%d] Sigma =%6.1lfps\n",i,fgg->GetParameter(2)*1000.);
/*
fg->SetRange(-50., 200.);
fg->SetParameters(fgg->GetParameter(0), fgg->GetParameter(1), fgg->GetParameter(2));
fg->SetLineColor(2);
fg->DrawCopy("LSAME");
fg->SetParameters(fgg->GetParameter(3), fgg->GetParameter(4), fgg->GetParameter(5));
fg->SetLineColor(3);
fg->DrawCopy("LSAME");
*/
} else {printf("Wrong fit function (parameter 4)!!!\n"); return;}
}
sprintf(fullname, "ps/%s_cTDC.eps", fname);
c[cc]->SaveAs(fullname);
}
// TDCs -----------------------------------------------------------------------------------------------
 
if( strchr(plopt, 't') != NULL ) {
c[++cc] = new TCanvas("Raw TDC", fname, 0, 500, 600, 430);
int i=0;
gPad->SetLogy();
sprintf(hname, "htdc%d",i); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("TDC; TDC [ns]; N");
(hp1d->GetXaxis())->SetRangeUser(-10,20);
hp1d->DrawCopy();
//if( hp1d->GetMaximum() < 10 ) continue;
fg->SetParameters(hp1d->GetMaximum(), hp1d->GetBinCenter(hp1d->GetMaximumBin()), 0.25);
fg->SetLineColor(kRed);
hp1d->Fit(fg,"0QL", "", fg->GetParameter(1)-0.5, fg->GetParameter(1)+0.5);
hp1d->Fit(fg,"QL", "", fg->GetParameter(1)-0.8, fg->GetParameter(1)+0.8);
 
printf("Ch[%d] RAW Sigma =%6.1lfps\n",i,fg->GetParameter(2)*1000.);
sprintf(fullname, "ps/%s_TDC.eps", fname);
c[cc]->SaveAs(fullname);
}
 
//rootfile->Close();
}
/sipmScan/examples/plot_adc_tdc.C
0,0 → 1,9
{
TFile *file0 = new TFile("C:/HOME/dino/l2d/root/test.root");
//TNtuple *ntuple = (TNtuple*) file0->Get("nt");
TCanvas *canvas1 = new TCanvas("canvas1","canvas1",1000,500);
canvas1->Divide(2);
canvas1->cd(1);
htdc->Draw();
 
}
/sipmScan/examples/plotThresholdScan.C
0,0 → 1,471
#include "TROOT.h"
#include "TFile.h"
#include "TBenchmark.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TPad.h"
#include "TF1.h"
#include "TGraph.h"
#include "TSpectrum.h"
#include "stdio.h"
 
#include "RTUtil.h"
 
double getNoise(TH2F*, int, int);
 
int plotThreshold(char filename[256] = "test", char plopt[256]="th", int chXstart=0, int chXend=7, int chYstart=0, int chYend=7, bool debug = false)
{
const int c_nChannels = 64;
const double c_xOffset = 1; // mm
const double c_yOffset = 0.7;
int map[8][8]={{32,34,53,55,40,42,61,63},
{48,50,37,39,56,58,45,47},
{33,35,52,54,41,43,60,62},
{49,51,36,38,57,59,44,46},
{17,19,4,6,25,27,12,14},
{1,3,20,22,9,11,28,30},
{16,18,5,7,24,26,13,15},
{0,2,21,23,8,10,29,31}
};
char fnameroot[256];
TFile* rootfile;
sprintf(fnameroot, "root/%s.root", filename);
rootfile = (TFile *) gROOT->FindObject(filename);
if(rootfile==NULL) rootfile = new TFile(fnameroot);
if(rootfile==NULL) {
printf("Cannot open root file %s!!!\n",fnameroot);
return(0);
}
 
// set draw style
gStyle->SetOptStat("ne");
gStyle->SetPalette(1, 0);
gStyle->SetPaperSize(TStyle::kA4);
gStyle->SetStatBorderSize(1);
gStyle->SetFrameBorderMode(0);
gStyle->SetFrameFillColor(0);
gStyle->SetCanvasBorderMode(0);
gStyle->SetPadBorderMode(0);
gStyle->SetPadColor(0);
gStyle->SetCanvasColor(0);
gStyle->SetStatColor(0);
gStyle->SetOptFit(11);
gStyle->SetOptStat();
gStyle->SetPadRightMargin(0.15);
gStyle->SetPadLeftMargin(0.12);
//gStyle->SetTitleYOffset(1.4);
 
if (strstr(plopt, "th") != NULL) {
TCanvas* canvas1 = new TCanvas("canvas1","",500,500);
canvas1->cd();
TH2F* h_threshold = (TH2F*) rootfile->Get("h_threshold");
h_threshold->Draw("colz");
}
if( strstr(plopt, "all") != NULL ) {
TCanvas *canvas2 = new TCanvas("canvas2","Hits x;;",2000,2000);
TCanvas *canvas3 = new TCanvas("canvas3","Hits y;;",2000,2000);
canvas2->Divide(8,8);
canvas3->Divide(8,8);
TH1F* h_hitsx;
TH1F* h_hitsy;
for(int i=0; i<c_nChannels; i++) {
canvas2->cd(i+1);
char hname[128];
sprintf(hname, "hnhitsx%d", i);
h_hitsx = (TH1F*)rootfile->Get(hname);
h_hitsx->Draw();
canvas3->cd(i+1);
sprintf(hname, "hnhitsy%d", i);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}
}
if( strstr(plopt, "x") != NULL ) {
TCanvas *canvas10 = new TCanvas("canvas10","Ch x;;",500,500);
TH1F* h_hitsx;
canvas10->cd();
char hname[128];
sprintf(hname, "hnhitsx%d", chXstart);
h_hitsx = (TH1F*)rootfile->Get(hname);
h_hitsx->Draw();
}
if( strstr(plopt, "y") != NULL ) {
TCanvas *canvas11 = new TCanvas("canvas11","Ch x;;",500,500);
TH1F* h_hitsy;
canvas11->cd();
char hname[128];
sprintf(hname, "hnhitsy%d", chXstart);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}
if( strstr(plopt, "share") != NULL ) {
/*TCanvas *canvas4 = new TCanvas("canvas1","canvas1",1000,1000);
int nChannels = chYend-chYstart+1;
int ncols = nChannels/2;
printf("nch %d nch\\2 %d\n", nChannels, ncols);
canvas4->Divide(2,ncols);
TH1F* h_hitsy;
for(int i=chYstart; i<=chYend; i++){
canvas4->cd(i-chYstart+1);
char hname[128];
int chPosition = map[0][i];
sprintf(hname, "hnhitsy%d", chPosition);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}*/
TCanvas *canvas4 = new TCanvas("canvas4","canvas4",500,500);
canvas4->cd();
for(int i=chXstart; i<=chXend; i++) {
TH1F* h_hitsx;
char hname[128];
int chPosition = map[i][chYstart];
sprintf(hname, "hnhitsx%d", chPosition);
h_hitsx = (TH1F*)rootfile->Get(hname);
h_hitsx->SetTitle("Scan X;x [mm]; Entries");
h_hitsx->GetYaxis()->SetTitleOffset(1.3);
h_hitsx->SetStats(0);
if (i == chXstart)
h_hitsx->Draw();
else {
h_hitsx->SetLineColor(i+1);
h_hitsx->Draw("same");
}
}
//sprintf(fullname, "ps/%s_Yshare.eps", filename);
//canvas4->SaveAs(fullname);
TCanvas *canvas5 = new TCanvas("canvas5","canvas5",500,500);
canvas5->cd();
for(int i=chYstart; i<=chYend; i++) {
TH1F* h_hitsy;
char hname[128];
int chPosition = map[chXstart][i];
sprintf(hname, "hnhitsy%d", chPosition);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->SetTitle("Scan Y;y [mm]; Entries");
h_hitsy->GetYaxis()->SetTitleOffset(1.3);
h_hitsy->SetStats(0);
if (i == chYstart)
h_hitsy->Draw();
else {
h_hitsy->SetLineColor(i+1);
h_hitsy->Draw("same");
}
}
//sprintf(fullname, "ps/%s_Yshare.eps", filename);
//canvas5->SaveAs(fullname);
}
/** Draws the signal from 8 channels in x-row
* for one specific y bin, so the background and cross-talk
* can be estimated.
* Draws also a 2d scan of these channels.
*/
if (strstr(plopt, "line") != NULL) {
TCanvas* canvas6 = new TCanvas("canvas6","canvas6",500,500);
canvas6->cd(0);
gStyle->SetOptStat(0);
TH2F* h0 = (TH2F*) rootfile->Get("h2d0");
Int_t binsX = h0->GetXaxis()->GetNbins();
Int_t minX = h0->GetXaxis()->GetFirst();
Int_t maxX = h0->GetXaxis()->GetLast()+1;
Int_t binsY = h0->GetYaxis()->GetNbins();
Int_t minY = h0->GetYaxis()->GetFirst();
Int_t maxY = h0->GetYaxis()->GetLast()+1;
Double_t xLowUser = h0->GetXaxis()->GetBinLowEdge(minX);
Double_t xUpUser = h0->GetXaxis()->GetBinUpEdge(maxX);
Double_t yLowUser = h0->GetYaxis()->GetBinLowEdge(minY);
Double_t yUpUser = h0->GetYaxis()->GetBinUpEdge(maxY);
if (debug) printf("xLow %f xUp %f\n",xLowUser,xUpUser);
//! 1-dimension position in x vs. hits
TH2F* h[8];
TH1F* h_line[8];
for(int j=0; j<8; j++) {
h_line[j] = new TH1F("h_line", "h_line", binsX, xLowUser, xUpUser);
}
for(int j=chXstart; j<=chXend; j++) {
int chPosition = map[j][chYstart];
char hname[128];
sprintf(hname, "h2d%d", chPosition);
int histogram = j;
h[histogram] = (TH2F *) rootfile->Get(hname);
int noise = getNoise(h[histogram], 1, 160);
for(int k=minX; k<=maxX; k++) {
int l=chYstart*20+12;
//for(int l=12; l<=16; l++) {
double signal = h[histogram]->GetBinContent(k,l);
//signal -= noise;
//signal /= 5*10000.0;
double eta = -log(1 - signal);
double x = k*(xUpUser-xLowUser)/double(binsX);
//double y = l*(yUpUser-yLowUser)/double(binsY);
h_line[j]->Fill(x-c_xOffset, signal);
//}
}
if (j == chXstart) {
h_line[j]->SetTitle("SiPM#2 w/o noise subtraction;x[mm];Hits");
//h_line[j]->GetYaxis()->SetRangeUser(-0.05, 0.3);
//h_line[j]->GetYaxis()->SetRangeUser(-50, 2500);
h_line[j]->Draw("");
}
else {
h_line[j]->SetLineColor(j+1);
h_line[j]->Draw("same");
}
}
//! 2d scan
TCanvas* canvas61 = new TCanvas("canvas61","canvas61",8*200,300);
canvas61->cd();
TH2F* h_corrected = new TH2F("h_corrected","h_corrected",binsX,xLowUser,xUpUser, binsY,yLowUser,yUpUser);
for(int i=chXstart; i<=chXend; i++) {
//int canvasPosition = nX*(i-chYstart)+(j-chXstart)+1;
//int canvasPosition = nX*(chYend-i)+chXstart+1;
//if (debug) printf("canvas %d\n",canvasPosition);
int chPosition = map[i][chYstart];
char hname[128];
sprintf(hname, "h2d%d", chPosition);
int histogram = i;
h[histogram] = (TH2F *) rootfile->Get(hname);
int noise = getNoise(h[histogram], 1, 100);
for(int k=minX; k<=maxX; k++) {
for(int l=minY; l<=maxY; l++) {
int signal = h[histogram]->GetBinContent(k,l); // detected
//p /= 10000.;
//double p0 = 1.0 - p; // events with zero photons
//double eta = (-log(p0) * p0 ) / (1-p0-0.00001);
//double eta = -log(p0);
//printf("p=%f p0=%f log(p0)=%f eta=%f\n",p,p0,log(p0),eta);
//double signal = ((p - noise) > 0.1) ? (p-noise) : 0.1;
double p = signal - noise;
p /= 10000.0;
double eta = -log(1 - p);
double x = k*(xUpUser-xLowUser)/double(binsX);
double y = l*(yUpUser-yLowUser)/double(binsY);
h_corrected->Fill(x-c_xOffset, y-c_yOffset, eta);
}
}
}
h_corrected->SetTitle("SiPM#2 n_pe = - ln(P0);x[mm];y[mm]");
h_corrected->GetZaxis()->SetRangeUser(-0.05,0.30);
h_corrected->Draw("colz");
}
/** Draws the sum of the channels
* Each channel is a 2d plot
* Intended for the study of 1 channel
*/
if (strstr(plopt, "2d") != NULL) {
int nX = chXend - chXstart + 1;
int nY = chYend - chYstart + 1;
TCanvas* canvas7 = new TCanvas("canvas7","canvas7", nX*400,nY*400);
printf("nx %d ny %d\n",nX,nY);
canvas7->Divide(nX,nY);
for(int i=chYstart; i<=chYend; i++) {
for(int j=chXstart; j<=chXend; j++) {
//int canvasPosition = nX*(i-chYstart)+(j-chXstart)+1;
int canvasPosition = nX*(chYend-i)+(j-chXstart)+1;
if (debug) printf("canvas %d\n",canvasPosition);
canvas7->cd(canvasPosition);
char hname[128];
int chPosition = map[j][i];
sprintf(hname, "h2d%d", chPosition);
TH2F* h_2d = (TH2F*)rootfile->Get(hname);
h_2d->Draw("colz");
} //x
}
// Number of photoelectrons - Poissonian correction
TCanvas* canvas8 = new TCanvas("canvas8","canvas8", 1000,1000);
canvas8->cd();
gStyle->SetOptStat(0);
char hname[128];
int chPosition = map[1][2];
sprintf(hname, "h2d%d", chPosition);
TH2F* h_2d = (TH2F*)rootfile->Get(hname);
 
Int_t binsX = h_2d->GetXaxis()->GetNbins();
Int_t minX = h_2d->GetXaxis()->GetFirst();
Int_t maxX = h_2d->GetXaxis()->GetLast()+1;
Int_t binsY = h_2d->GetYaxis()->GetNbins();
Int_t minY = h_2d->GetYaxis()->GetFirst();
Int_t maxY = h_2d->GetYaxis()->GetLast()+1;
Double_t xLowUser = h_2d->GetXaxis()->GetBinLowEdge(minX);
Double_t xUpUser = h_2d->GetXaxis()->GetBinUpEdge(maxX);
Double_t yLowUser = h_2d->GetYaxis()->GetBinLowEdge(minY);
Double_t yUpUser = h_2d->GetYaxis()->GetBinUpEdge(maxY);
if (debug) printf("xLow %f xUp %f\n",xLowUser,xUpUser);
TH2F* h_corrected = new TH2F("h_corrected","h_corrected",binsX, xLowUser, xUpUser, binsY, yLowUser, yUpUser);
double noise = getNoise(h_2d, 1, 89);
if(debug) printf("Noise = %f\n", noise);
for(int k=minX; k<=maxX; k++) {
for(int j=minY; j<=maxY; j++) {
double signal = h_2d->GetBinContent(k,j); // detected
//double p = ((signal - noise) > 1) ? (signal-noise) : 1;
double p = signal - noise;
p /= 10000.;
double p0 = 1.0 - p; // events with zero photons
//double eta = (-log(p0) * p0 ) / (1-p0-0.00001);
double eta = -log(p0); // constant of the poissonian statistics
if (debug) printf("p=%f p0=%f log(p0)=%f eta=%f\n",p,p0,log(p0),eta);
double x = k*(xUpUser-xLowUser)/double(binsX);
double y = j*(yUpUser-yLowUser)/double(binsY);
h_corrected->Fill(x+3,y+8, eta);
}
}
h_corrected->SetTitle("n_pe = - ln P(0);x[mm];y[mm]");
h_corrected->GetZaxis()->SetRangeUser(-0.05,0.3);
h_corrected->Draw("colz");
// collection efficiency
int nPoints =0;
double efficiency=0;
for (int i=18; i<=58; i++) {
for (int j=19; j<=59; j++) {
double signal = h_corrected->GetBinContent(i,j);
if(debug) printf("signal %f\n",signal);
efficiency += signal;
nPoints++;
}
}
printf("Signal sum = %f\n # of points = %d\n",efficiency,nPoints);
}
/** Draws the sum of channel signals
* Each channel is a 2d ('h2d') histogram
* Suitable for 8x8 chs scan
*/
if( strstr(plopt, "sum") != NULL ) {
int nX = chXend - chXstart + 1;
int nY = chYend - chYstart + 1;
TCanvas* canvas12 = new TCanvas("canvas12","c2",8*200, 8*200);
canvas12->cd();
gStyle->SetOptStat(0);
 
// final histogram parameters
TH2F* h0 = (TH2F*) rootfile->Get("h2d0");
Int_t binsX = h0->GetXaxis()->GetNbins();
Int_t minX = h0->GetXaxis()->GetFirst();
Int_t maxX = h0->GetXaxis()->GetLast()+1;
Int_t binsY = h0->GetYaxis()->GetNbins();
Int_t minY = h0->GetYaxis()->GetFirst();
Int_t maxY = h0->GetYaxis()->GetLast()+1;
Double_t xLowUser = h0->GetXaxis()->GetBinLowEdge(minX);
Double_t xUpUser = h0->GetXaxis()->GetBinUpEdge(maxX);
Double_t yLowUser = h0->GetYaxis()->GetBinLowEdge(minY);
Double_t yUpUser = h0->GetYaxis()->GetBinUpEdge(maxY);
if (debug) printf("xLow %f xUp %f\n",xLowUser,xUpUser);
TH2F* h_corrected = new TH2F("h_corrected","h_corrected",binsX,xLowUser,xUpUser, binsY,yLowUser,yUpUser);
TH2F* h[9];
// 2d histogram noise subtraction and poisson scaling
for(int i=chYstart; i<=chYend; i++) {
for(int j=chXstart; j<=chXend; j++) {
int chPosition = map[j][i];
char hname[128];
sprintf(hname, "h2d%d", chPosition);
int histogram = nX*(i-chYstart)+(j-chXstart);
h[histogram] = (TH2F *) rootfile->Get(hname);
int noise = getNoise(h[histogram], 1, 170);
if (debug) printf("noise: %d\n",noise);
for(int k=minX; k<=maxX; k++) {
for(int l=minY; l<=maxY; l++) {
int signal = h[histogram]->GetBinContent(k,l); // detected
//double p = ((signal - noise) > 0.1) ? (signal-noise) : 0.1;
double p = signal - noise;
p /= 10000.;
double p0 = 1.0 - p; // events with zero photons
//double eta = (-log(p0) * p0 ) / (1-p0-0.00001);
double eta = -log(p0);
//printf("p=%f p0=%f log(p0)=%f eta=%f\n",p,p0,log(p0),eta);
double x = k*(xUpUser-xLowUser)/double(binsX);
double y = l*(yUpUser-yLowUser)/double(binsY);
h_corrected->Fill(x-c_xOffset, y-c_yOffset, signal);
}
}
}
}
h_corrected->SetTitle("SiPM#2 n_p.e.;x[mm];y[mm]");
//h_corrected->GetZaxis()->SetRangeUser(-0.05,.30);
h_corrected->Draw("colz");
TCanvas* canvas13 = new TCanvas("canvas13","canvas13",600,300);
canvas13->Divide(2);
canvas13->cd(1);
h[16]->Draw("colz");
canvas13->cd(2);
h[8]->Draw("colz");
}
/** Draws the beam profile and fits it with error function
* on some background function
*/
if (strstr(plopt, "beam") != NULL) {
TCanvas* canvas9 = new TCanvas("canvas9","canvas9", 500,500);
canvas9->cd();
char hname[128];
sprintf(hname, "hnhitsx%d", 36);
TH1F* h_laser = (TH1F*)rootfile->Get(hname);
h_laser->Draw();
h_laser->SetStats(1);
TF1* err = new TF1("err","[0]+[1]*TMath::Erf((x-[2])/[3])",17.2,17.50);
err->SetParameter(0,2500);
err->SetParameter(1, h_laser->GetMaximum());
err->SetParameter(2, h_laser->GetBinCenter(h_laser->GetMaximumBin()));
err->SetParameter(3, 0.001);
h_laser->Fit(err,"qr");
h_laser->Fit(err,"lr");
double sigma = err->GetParameter(3);
printf("sigma = %2.0f um, FWHM = %2.0f um\n", sigma*1000, 2.35*sigma*1000);
}
if (strstr(plopt, "map") != NULL) {
for (int i=7; i>=0; i--) {
//for (int j=7; j>=0; j--) printf("(%d, %d) ", j,i);
for (int j=7; j>=0; j--) printf("%2d ", map[j][i]);
printf("\n");
}
}
return(0);
}
 
/** Function calculates the noise from one channel
* it runs through the bins along x and returns the average value
*/
double getNoise(TH2F* histogram, int yStart, int yEnd)
{
double noise=0;
int count=0;
for(int j=yStart; j<yEnd; j++) {
double value = histogram->GetBinContent(j,2);
//if (noise < value) noise = value;
noise += value;
count++;
}
return (noise/double(count));
}
/sipmScan/examples/plots.cpp
0,0 → 1,269
#include "TROOT.h"
#include "TFile.h"
#include "TBenchmark.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TPad.h"
#include "TF1.h"
#include "TGraph.h"
#include "TSpectrum.h"
 
#include "RTUtil.h"
 
#define NCH 1
#define TDC_BIN (25./1000.) //1 TDC bin in ns
#define MIKRO_BIN 0.3595/1000. //1 mikro step in mm
 
#define HFILL_COLOR 18
 
void plots(char *fname, char *plopt="atc", double fitw=1.0, char *fitf="g")
{
char fullname[256];
//get ROOT file with histograms
char fnameroot[1024];
TFile * rootfile;
TDirectory *dir;
sprintf(fnameroot, "root/%s.root", fname);
rootfile = (TFile *) gROOT->FindObject(fname);
if(rootfile==NULL) rootfile = new TFile(fnameroot);
if(rootfile==NULL) {
printf("Cannot open root file %s!!!\n",fnameroot);
return;
}
dir = (TDirectory*) rootfile;
// set draw style
gStyle->SetOptStat("ne");
gStyle->SetPalette(1, 0);
gStyle->SetPaperSize(TStyle::kA4);
gStyle->SetStatBorderSize(1);
gStyle->SetFrameBorderMode(0);
gStyle->SetFrameFillColor(0);
gStyle->SetCanvasBorderMode(0);
gStyle->SetPadBorderMode(0);
gStyle->SetPadColor(0);
gStyle->SetCanvasColor(0);
gStyle->SetStatColor(0);
gStyle->SetOptFit(11);
gStyle->SetPadRightMargin(0.1);
RTCanvas *c[16];
int cc=-1;
char hname[256];
TH1F *hp1d; TH2F *hp2d;
// ADCs -----------------------------------------------------------------------------------------------
 
if( strchr(plopt, 'a') != NULL ) {
c[++cc] = new RTCanvas("QDC", fname, 50*(cc+1), 0, 600, 850);
//c[cc]->Divide(2,4);
c[cc]->Divide(NCH);
for(int i=0;i<NCH;i++) {
c[cc]->cd(i+1); gPad->SetLogy();
sprintf(hname, "hadcpos%d",i); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("QDC; QDC; N");
//(hp1d->GetXaxis())->SetRangeUser(0.,2500.);
hp1d->DrawCopy();
}
sprintf(fullname, "ps/%s_QDC.eps", fname);
c[cc]->SaveAs(fullname);
}
// Correlation 2d plots -------------------------------------------------------------------------------
 
if( strchr(plopt, 'c') != NULL ) {
c[++cc] = new RTCanvas("TDCvsQDC", fname, 50*(cc+1), 0, 600, 850);
//c[cc]->Divide(3,3);
c[cc]->Divide(NCH);
for(int i=0;i<NCH;i++) {
c[cc]->cd(i+1); gPad->SetLogz();
sprintf(hname, "hcorpos%d",i); hp2d = (TH2F *) dir->Get(hname);
hp2d->SetTitle("TDCvsQDC; QDC; TDC [ns]");
(hp2d->GetXaxis())->SetRangeUser(0.,500.);
//hp2d->GetYaxis()->SetRangeUser(-1.5,5.0);
hp2d->DrawCopy("COLZ");
}
sprintf(fullname, "ps/%s_cor.eps", fname);
c[cc]->SaveAs(fullname);
}
// Fits of corrected TDCs -----------------------------------------------------------------------------
 
TF1 *fg = new TF1("fg", "gaus");
TF1 *fgg = new TF1("fgg", "gaus(0)+gaus(3)");
fgg->SetParNames("Constant","Mean","Sigma","Constant2","Mean2","Sigma2");
if( strchr(plopt, 'f') != NULL ) {
c[++cc] = new RTCanvas("Corrected TDCs", fname, 50*(cc+1), 0, 600, 850);
//c[cc]->Divide(2,4);
c[cc]->Divide(NCH);
 
for(int i=0;i<NCH;i++) {
c[cc]->cd(i+1); gPad->SetLogy();
sprintf(hname, "hctdc%d",i); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("cTDC; TDC [ns]; N");
(hp1d->GetXaxis())->SetRangeUser(-40*TDC_BIN,160*TDC_BIN);
if( hp1d->GetMaximum() < 50 ) continue;
//(hp1d->GetXaxis())->SetRangeUser(-0.25,0.75);
if( strcmp(fitf, "g")==0 ) {
fg->SetParameters(hp1d->GetMaximum(), hp1d->GetBinCenter(hp1d->GetMaximumBin()), 0.05);
hp1d->Fit(fg, "0ql", "", fg->GetParameter(1)-0.1*fitw, fg->GetParameter(1)+0.05*fitw);
hp1d->Fit(fg, "ql", "", fg->GetParameter(1)-0.1*fitw, fg->GetParameter(1)+0.05*fitw);
printf("Ch[%d] Sigma =%6.1lfps\n",i,fg->GetParameter(2)*1000.);
}
else if( strcmp(fitf, "gg")==0 ) {
//fgg->SetParameters(2600.,0*TDC_BIN,2*TDC_BIN, 100.,0*TDC_BIN,10*TDC_BIN);
fgg->SetParameters(hp1d->GetMaximum(), hp1d->GetBinCenter(hp1d->GetMaximumBin()), 0.03,
hp1d->GetMaximum(), hp1d->GetBinCenter(hp1d->GetMaximumBin())/10., 0.1);
hp1d->Fit(fgg, "0ql", "", -50*TDC_BIN, 50*TDC_BIN);
hp1d->Fit(fgg, "ql", "", fgg->GetParameter(1)-2.5*fitw*fgg->GetParameter(2),
fgg->GetParameter(1)+3.5*fitw*fgg->GetParameter(2));
printf("Ch[%d] Sigma =%6.1lfps\n",i,fgg->GetParameter(2)*1000.);
/*
fg->SetRange(-50., 200.);
fg->SetParameters(fgg->GetParameter(0), fgg->GetParameter(1), fgg->GetParameter(2));
fg->SetLineColor(2);
fg->DrawCopy("LSAME");
fg->SetParameters(fgg->GetParameter(3), fgg->GetParameter(4), fgg->GetParameter(5));
fg->SetLineColor(3);
fg->DrawCopy("LSAME");
*/
} else {printf("Wrong fit function (parameter 4)!!!\n"); return;}
}
sprintf(fullname, "ps/%s_cTDC.eps", fname);
c[cc]->SaveAs(fullname);
}
// TDCs -----------------------------------------------------------------------------------------------
 
if( strchr(plopt, 't') != NULL ) {
c[++cc] = new RTCanvas("Raw TDC", fname, 50*(cc+1), 0, 600, 850);
//c[cc]->Divide(2,4);
c[cc]->Divide(NCH);
for(int i=0;i<NCH;i++) {
c[cc]->cd(i+1); gPad->SetLogy();
sprintf(hname, "htdcpos%d",i); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("TDC; TDC [ns]; N");
(hp1d->GetXaxis())->SetRangeUser(-2,5);
hp1d->DrawCopy();
if( hp1d->GetMaximum() < 50 ) continue;
fg->SetParameters(hp1d->GetMaximum(), hp1d->GetBinCenter(hp1d->GetMaximumBin()), 0.25);
hp1d->Fit(fg,"0QL", "", fg->GetParameter(1)-0.5, fg->GetParameter(1)+0.25);
hp1d->Fit(fg,"QL", "", fg->GetParameter(1)-0.5, fg->GetParameter(1)+0.25);
 
printf("Ch[%d] RAW Sigma =%6.1lfps\n",i,fg->GetParameter(2)*1000.);
}
sprintf(fullname, "ps/%s_TDC.eps", fname);
c[cc]->SaveAs(fullname);
}
// Y scans -----------------------------------------------------------------------------------------------
 
if( strchr(plopt, 'y') != NULL ) {
c[++cc] = new RTCanvas("Yscans", fname, 50*(cc+1), 0, 600, 850);
//c[cc]->Divide(2,4);
c[cc]->Divide(NCH);
for(int i=0;i<NCH;i++) {
c[cc]->cd(i+1); //gPad->SetLogy();
sprintf(hname, "hnhitsy%d",i);
hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("YScan; x; N");
//(hp1d->GetXaxis())->SetRangeUser(-80*TDC_BIN,200*TDC_BIN);
//if(i==0)
hp1d->DrawCopy();
//else hp1d->DrawCopy("SAME");
}
sprintf(fullname, "ps/%s_Ys.eps", fname);
c[cc]->SaveAs(fullname);
}
// X scans -----------------------------------------------------------------------------------------------
TF1 *ferf = new TF1("ferf","[0]+[1]*(1+TMath::Erf((x-[2])/[3]))");
//int cmap[NCH]={40,1,2,8,4,5,6,41};
int cmap[NCH]={1};
if( strchr(plopt, 'x') != NULL ) {
c[++cc] = new RTCanvas("Xscans", fname, 50*(cc+1), 0, 600, 430);
//c[cc]->Divide(2,4);
//c[cc]->Divide(NCH);
/*
sprintf(hname, "hnhitsx%d",4); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("XScan; x; N");
ferf->SetParameters(130,1600,43.4,1.0);
ferf->SetParNames("Offset","Constant","Mean","Sigma");
hp1d->Fit(ferf,"QL");
*/
for(int i=0;i<1;i++) {
 
sprintf(hname, "hnhitsx%d",i); hp1d = (TH1F *) dir->Get(hname);
hp1d->SetTitle("XScan; x; N");
hp1d->SetLineColor(cmap[i]);
(hp1d->GetYaxis())->SetRangeUser(0,hp1d->GetMaximum()*1.2);
if(i==0) hp1d->DrawCopy();
else hp1d->DrawCopy("SAME");
 
// c[cc]->cd(i+1); //gPad->SetLogy();
// sprintf(hname, "hnhitsx%d",i); hp1d = (TH1F *) dir->Get(hname);
// hp1d->SetTitle("XScan; x; N");
//(hp1d->GetXaxis())->SetRangeUser(-80*TDC_BIN,200*TDC_BIN);
// hp1d->DrawCopy();
}
sprintf(fullname, "ps/%s_Xs.eps", fname);
c[cc]->SaveAs(fullname);
}
 
// tdc vs. MCP OUT tdc -----------------------------------------------------------------------------------
 
if( strchr(plopt, 'm') != NULL ) {
c[++cc] = new RTCanvas("TDCvsMCPOUT", fname, 50*(cc+1), 0, 400, 850);
//c[cc]->Divide(2,4);
c[cc]->Divide(NCH);
for(int i=0;i<NCH;i++) {
c[cc]->cd(i+1); gPad->SetLogz();
sprintf(hname, "hmcpoutcor%d",i); hp2d = (TH2F *) dir->Get(hname);
hp2d->SetTitle("TDCvsMCPOUT; MCP OUT TDC [ns]; TDC [ns]");
//(hp1d->GetXaxis())->SetRangeUser(-80*TDC_BIN,200*TDC_BIN);
hp2d->DrawCopy("COLZ");
}
sprintf(fullname, "ps/%s_TDCvsMCPOUT.eps", fname);
c[cc]->SaveAs(fullname);
}
// Charge sharing -----------------------------------------------------------------------------------
 
if( strchr(plopt, 's') != NULL ) {
c[++cc] = new RTCanvas("ChargeSharing", fname, 50*(cc+1), 0, 600, 850);
c[cc]->Divide(1,2);
c[cc]->cd(1); gPad->SetLogz();
sprintf(hname, "hshare"); hp2d = (TH2F *) dir->Get(hname);
hp2d->SetTitle("ChargeSharing; x [mm]; ADC1/(ADC1+ADC2)");
hp2d->DrawCopy("COLZ");
c[cc]->cd(2); //gPad->SetLogy();
TH1F *hprojx = (TH1F*)hp2d->ProjectionX("ProjectionX", 59, 61);
hprojx->Fit("gaus","QL","", hprojx->GetMean()-hprojx->GetRMS(), hprojx->GetMean()+hprojx->GetRMS());
sprintf(fullname, "ps/%s_share.eps", fname);
c[cc]->SaveAs(fullname);
}
//rootfile->Close();
}
/sipmScan/examples/plot_tdc_C.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/sipmScan/examples/plot_tdc_C.exp
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/sipmScan/examples/plot_1d_scan.C
0,0 → 1,15
int plot_1d_scan(char * fname="C:/HOME/dino/l2d/root/scan.root"){
gStyle->SetPalette(1);
TFile *file = new TFile(fname);
TNtuple *ntuple = (TNtuple*) file->Get("nt");
TCanvas *canvas = new TCanvas("canvas","canvas1",800,800);
canvas->Divide(2,2);
canvas->cd(1)->SetLogz(1);
// ntuple2->Draw("y>>h1d(100,0,100)","ch==0 && adc>49");
ntuple->Draw("x>>h1d(100,0,100)","ch==0 && tdc>150 && tdc<180");
//ntuple2->Draw("adc:y>>h0(200,-0.5,199.5,100,0,100)","ch==0","colz");
//canvas2->cd();
//canvas2->SetLogz(1);
// ntuple2->Draw("y>>h3(100,0,100)","ch==3 && adc>40");
}
/sipmScan/examples/plot_sipm.C
0,0 → 1,465
#include "TROOT.h"
#include "TFile.h"
#include "TBenchmark.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TPad.h"
#include "TF1.h"
#include "TGraph.h"
#include "TSpectrum.h"
#include "stdio.h"
 
#include "RTUtil.h"
 
double getNoise(TH2F*, int, int);
 
int plot_sipm(char filename[256] = "test", char plopt[256]="all", int chXstart=0, int chXend=7, int chYstart=0, int chYend=7, bool debug = false)
{
const int c_nChannels = 64;
const double c_xOffset = 1; // mm
const double c_yOffset = 0.7;
int map[8][8]={{32,34,53,55,40,42,61,63},
{48,50,37,39,56,58,45,47},
{33,35,52,54,41,43,60,62},
{49,51,36,38,57,59,44,46},
{17,19,4,6,25,27,12,14},
{1,3,20,22,9,11,28,30},
{16,18,5,7,24,26,13,15},
{0,2,21,23,8,10,29,31}
};
char fnameroot[256];
TFile* rootfile;
sprintf(fnameroot, "root/%s.root", filename);
rootfile = (TFile *) gROOT->FindObject(filename);
if(rootfile==NULL) rootfile = new TFile(fnameroot);
if(rootfile==NULL) {
printf("Cannot open root file %s!!!\n",fnameroot);
return(0);
}
 
// set draw style
gStyle->SetOptStat("ne");
gStyle->SetPalette(1, 0);
gStyle->SetPaperSize(TStyle::kA4);
gStyle->SetStatBorderSize(1);
gStyle->SetFrameBorderMode(0);
gStyle->SetFrameFillColor(0);
gStyle->SetCanvasBorderMode(0);
gStyle->SetPadBorderMode(0);
gStyle->SetPadColor(0);
gStyle->SetCanvasColor(0);
gStyle->SetStatColor(0);
gStyle->SetOptFit(11);
gStyle->SetOptStat();
gStyle->SetPadRightMargin(0.15);
gStyle->SetPadLeftMargin(0.12);
//gStyle->SetTitleYOffset(1.4);
 
if( strstr(plopt, "all") != NULL ) {
TCanvas *canvas2 = new TCanvas("canvas2","Hits x;;",2000,2000);
TCanvas *canvas3 = new TCanvas("canvas3","Hits y;;",2000,2000);
canvas2->Divide(8,8);
canvas3->Divide(8,8);
TH1F* h_hitsx;
TH1F* h_hitsy;
for(int i=0; i<c_nChannels; i++) {
canvas2->cd(i+1);
char hname[128];
sprintf(hname, "hnhitsx%d", i);
h_hitsx = (TH1F*)rootfile->Get(hname);
h_hitsx->Draw();
canvas3->cd(i+1);
sprintf(hname, "hnhitsy%d", i);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}
}
if( strstr(plopt, "x") != NULL ) {
TCanvas *canvas10 = new TCanvas("canvas10","Ch x;;",500,500);
TH1F* h_hitsx;
canvas10->cd();
char hname[128];
sprintf(hname, "hnhitsx%d", chXstart);
h_hitsx = (TH1F*)rootfile->Get(hname);
h_hitsx->Draw();
}
if( strstr(plopt, "y") != NULL ) {
TCanvas *canvas11 = new TCanvas("canvas11","Ch x;;",500,500);
TH1F* h_hitsy;
canvas11->cd();
char hname[128];
sprintf(hname, "hnhitsy%d", chXstart);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}
if( strstr(plopt, "share") != NULL ) {
/*TCanvas *canvas4 = new TCanvas("canvas1","canvas1",1000,1000);
int nChannels = chYend-chYstart+1;
int ncols = nChannels/2;
printf("nch %d nch\\2 %d\n", nChannels, ncols);
canvas4->Divide(2,ncols);
TH1F* h_hitsy;
for(int i=chYstart; i<=chYend; i++){
canvas4->cd(i-chYstart+1);
char hname[128];
int chPosition = map[0][i];
sprintf(hname, "hnhitsy%d", chPosition);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}*/
TCanvas *canvas4 = new TCanvas("canvas4","canvas4",500,500);
canvas4->cd();
for(int i=chXstart; i<=chXend; i++) {
TH1F* h_hitsx;
char hname[128];
int chPosition = map[i][chYstart];
sprintf(hname, "hnhitsx%d", chPosition);
h_hitsx = (TH1F*)rootfile->Get(hname);
h_hitsx->SetTitle("Scan X;x [mm]; Entries");
h_hitsx->GetYaxis()->SetTitleOffset(1.3);
h_hitsx->SetStats(0);
if (i == chXstart)
h_hitsx->Draw();
else {
h_hitsx->SetLineColor(i+1);
h_hitsx->Draw("same");
}
}
//sprintf(fullname, "ps/%s_Yshare.eps", filename);
//canvas4->SaveAs(fullname);
TCanvas *canvas5 = new TCanvas("canvas5","canvas5",500,500);
canvas5->cd();
for(int i=chYstart; i<=chYend; i++) {
TH1F* h_hitsy;
char hname[128];
int chPosition = map[chXstart][i];
sprintf(hname, "hnhitsy%d", chPosition);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->SetTitle("Scan Y;y [mm]; Entries");
h_hitsy->GetYaxis()->SetTitleOffset(1.3);
h_hitsy->SetStats(0);
if (i == chYstart)
h_hitsy->Draw();
else {
h_hitsy->SetLineColor(i+1);
h_hitsy->Draw("same");
}
}
//sprintf(fullname, "ps/%s_Yshare.eps", filename);
//canvas5->SaveAs(fullname);
}
/** Draws the signal from 8 channels in x-row
* for one specific y bin, so the background and cross-talk
* can be estimated.
* Draws also a 2d scan of these channels.
*/
if (strstr(plopt, "line") != NULL) {
TCanvas* canvas6 = new TCanvas("canvas6","canvas6",500,500);
canvas6->cd(0);
gStyle->SetOptStat(0);
TH2F* h0 = (TH2F*) rootfile->Get("h2d0");
Int_t binsX = h0->GetXaxis()->GetNbins();
Int_t minX = h0->GetXaxis()->GetFirst();
Int_t maxX = h0->GetXaxis()->GetLast()+1;
Int_t binsY = h0->GetYaxis()->GetNbins();
Int_t minY = h0->GetYaxis()->GetFirst();
Int_t maxY = h0->GetYaxis()->GetLast()+1;
Double_t xLowUser = h0->GetXaxis()->GetBinLowEdge(minX);
Double_t xUpUser = h0->GetXaxis()->GetBinUpEdge(maxX);
Double_t yLowUser = h0->GetYaxis()->GetBinLowEdge(minY);
Double_t yUpUser = h0->GetYaxis()->GetBinUpEdge(maxY);
if (debug) printf("xLow %f xUp %f\n",xLowUser,xUpUser);
//! 1-dimension position in x vs. hits
TH2F* h[8];
TH1F* h_line[8];
for(int j=0; j<8; j++) {
h_line[j] = new TH1F("h_line", "h_line", binsX, xLowUser, xUpUser);
}
for(int j=chXstart; j<=chXend; j++) {
int chPosition = map[j][chYstart];
char hname[128];
sprintf(hname, "h2d%d", chPosition);
int histogram = j;
h[histogram] = (TH2F *) rootfile->Get(hname);
int noise = getNoise(h[histogram], 1, 160);
for(int k=minX; k<=maxX; k++) {
int l=chYstart*20+12;
//for(int l=12; l<=16; l++) {
double signal = h[histogram]->GetBinContent(k,l);
//signal -= noise;
//signal /= 5*10000.0;
double eta = -log(1 - signal);
double x = k*(xUpUser-xLowUser)/double(binsX);
//double y = l*(yUpUser-yLowUser)/double(binsY);
h_line[j]->Fill(x-c_xOffset, signal);
//}
}
if (j == chXstart) {
h_line[j]->SetTitle("SiPM#2 w/o noise subtraction;x[mm];Hits");
//h_line[j]->GetYaxis()->SetRangeUser(-0.05, 0.3);
//h_line[j]->GetYaxis()->SetRangeUser(-50, 2500);
h_line[j]->Draw("");
}
else {
h_line[j]->SetLineColor(j+1);
h_line[j]->Draw("same");
}
}
//! 2d scan
TCanvas* canvas61 = new TCanvas("canvas61","canvas61",8*200,300);
canvas61->cd();
TH2F* h_corrected = new TH2F("h_corrected","h_corrected",binsX,xLowUser,xUpUser, binsY,yLowUser,yUpUser);
for(int i=chXstart; i<=chXend; i++) {
//int canvasPosition = nX*(i-chYstart)+(j-chXstart)+1;
//int canvasPosition = nX*(chYend-i)+chXstart+1;
//if (debug) printf("canvas %d\n",canvasPosition);
int chPosition = map[i][chYstart];
char hname[128];
sprintf(hname, "h2d%d", chPosition);
int histogram = i;
h[histogram] = (TH2F *) rootfile->Get(hname);
int noise = getNoise(h[histogram], 1, 100);
for(int k=minX; k<=maxX; k++) {
for(int l=minY; l<=maxY; l++) {
int signal = h[histogram]->GetBinContent(k,l); // detected
//p /= 10000.;
//double p0 = 1.0 - p; // events with zero photons
//double eta = (-log(p0) * p0 ) / (1-p0-0.00001);
//double eta = -log(p0);
//printf("p=%f p0=%f log(p0)=%f eta=%f\n",p,p0,log(p0),eta);
//double signal = ((p - noise) > 0.1) ? (p-noise) : 0.1;
double p = signal - noise;
p /= 10000.0;
double eta = -log(1 - p);
double x = k*(xUpUser-xLowUser)/double(binsX);
double y = l*(yUpUser-yLowUser)/double(binsY);
h_corrected->Fill(x-c_xOffset, y-c_yOffset, eta);
}
}
}
h_corrected->SetTitle("SiPM#2 n_pe = - ln(P0);x[mm];y[mm]");
h_corrected->GetZaxis()->SetRangeUser(-0.05,0.30);
h_corrected->Draw("colz");
}
/** Draws the sum of the channels
* Each channel is a 2d plot
* Intended for the study of 1 channel
*/
if (strstr(plopt, "2d") != NULL) {
int nX = chXend - chXstart + 1;
int nY = chYend - chYstart + 1;
TCanvas* canvas7 = new TCanvas("canvas7","canvas7", nX*400,nY*400);
printf("nx %d ny %d\n",nX,nY);
canvas7->Divide(nX,nY);
for(int i=chYstart; i<=chYend; i++) {
for(int j=chXstart; j<=chXend; j++) {
//int canvasPosition = nX*(i-chYstart)+(j-chXstart)+1;
int canvasPosition = nX*(chYend-i)+(j-chXstart)+1;
if (debug) printf("canvas %d\n",canvasPosition);
canvas7->cd(canvasPosition);
char hname[128];
int chPosition = map[j][i];
sprintf(hname, "h2d%d", chPosition);
TH2F* h_2d = (TH2F*)rootfile->Get(hname);
h_2d->Draw("colz");
} //x
}
// Number of photoelectrons - Poissonian correction
TCanvas* canvas8 = new TCanvas("canvas8","canvas8", 1000,1000);
canvas8->cd();
gStyle->SetOptStat(0);
char hname[128];
int chPosition = map[1][2];
sprintf(hname, "h2d%d", chPosition);
TH2F* h_2d = (TH2F*)rootfile->Get(hname);
 
Int_t binsX = h_2d->GetXaxis()->GetNbins();
Int_t minX = h_2d->GetXaxis()->GetFirst();
Int_t maxX = h_2d->GetXaxis()->GetLast()+1;
Int_t binsY = h_2d->GetYaxis()->GetNbins();
Int_t minY = h_2d->GetYaxis()->GetFirst();
Int_t maxY = h_2d->GetYaxis()->GetLast()+1;
Double_t xLowUser = h_2d->GetXaxis()->GetBinLowEdge(minX);
Double_t xUpUser = h_2d->GetXaxis()->GetBinUpEdge(maxX);
Double_t yLowUser = h_2d->GetYaxis()->GetBinLowEdge(minY);
Double_t yUpUser = h_2d->GetYaxis()->GetBinUpEdge(maxY);
if (debug) printf("xLow %f xUp %f\n",xLowUser,xUpUser);
TH2F* h_corrected = new TH2F("h_corrected","h_corrected",binsX, xLowUser, xUpUser, binsY, yLowUser, yUpUser);
double noise = getNoise(h_2d, 1, 89);
if(debug) printf("Noise = %f\n", noise);
for(int k=minX; k<=maxX; k++) {
for(int j=minY; j<=maxY; j++) {
double signal = h_2d->GetBinContent(k,j); // detected
//double p = ((signal - noise) > 1) ? (signal-noise) : 1;
double p = signal - noise;
p /= 10000.;
double p0 = 1.0 - p; // events with zero photons
//double eta = (-log(p0) * p0 ) / (1-p0-0.00001);
double eta = -log(p0); // constant of the poissonian statistics
if (debug) printf("p=%f p0=%f log(p0)=%f eta=%f\n",p,p0,log(p0),eta);
double x = k*(xUpUser-xLowUser)/double(binsX);
double y = j*(yUpUser-yLowUser)/double(binsY);
h_corrected->Fill(x+3,y+8, eta);
}
}
h_corrected->SetTitle("n_pe = - ln P(0);x[mm];y[mm]");
h_corrected->GetZaxis()->SetRangeUser(-0.05,0.3);
h_corrected->Draw("colz");
// collection efficiency
int nPoints =0;
double efficiency=0;
for (int i=18; i<=58; i++) {
for (int j=19; j<=59; j++) {
double signal = h_corrected->GetBinContent(i,j);
if(debug) printf("signal %f\n",signal);
efficiency += signal;
nPoints++;
}
}
printf("Signal sum = %f\n # of points = %d\n",efficiency,nPoints);
}
/** Draws the sum of channel signals
* Each channel is a 2d ('h2d') histogram
* Suitable for 8x8 chs scan
*/
if( strstr(plopt, "sum") != NULL ) {
int nX = chXend - chXstart + 1;
int nY = chYend - chYstart + 1;
TCanvas* canvas12 = new TCanvas("canvas12","c2",8*200, 8*200);
canvas12->cd();
gStyle->SetOptStat(0);
 
// final histogram parameters
TH2F* h0 = (TH2F*) rootfile->Get("h2d0");
Int_t binsX = h0->GetXaxis()->GetNbins();
Int_t minX = h0->GetXaxis()->GetFirst();
Int_t maxX = h0->GetXaxis()->GetLast()+1;
Int_t binsY = h0->GetYaxis()->GetNbins();
Int_t minY = h0->GetYaxis()->GetFirst();
Int_t maxY = h0->GetYaxis()->GetLast()+1;
Double_t xLowUser = h0->GetXaxis()->GetBinLowEdge(minX);
Double_t xUpUser = h0->GetXaxis()->GetBinUpEdge(maxX);
Double_t yLowUser = h0->GetYaxis()->GetBinLowEdge(minY);
Double_t yUpUser = h0->GetYaxis()->GetBinUpEdge(maxY);
if (debug) printf("xLow %f xUp %f\n",xLowUser,xUpUser);
TH2F* h_corrected = new TH2F("h_corrected","h_corrected",binsX,xLowUser,xUpUser, binsY,yLowUser,yUpUser);
TH2F* h[9];
// 2d histogram noise subtraction and poisson scaling
for(int i=chYstart; i<=chYend; i++) {
for(int j=chXstart; j<=chXend; j++) {
int chPosition = map[j][i];
char hname[128];
sprintf(hname, "h2d%d", chPosition);
int histogram = nX*(i-chYstart)+(j-chXstart);
h[histogram] = (TH2F *) rootfile->Get(hname);
int noise = getNoise(h[histogram], 1, 170);
if (debug) printf("noise: %d\n",noise);
for(int k=minX; k<=maxX; k++) {
for(int l=minY; l<=maxY; l++) {
int signal = h[histogram]->GetBinContent(k,l); // detected
//double p = ((signal - noise) > 0.1) ? (signal-noise) : 0.1;
double p = signal - noise;
p /= 10000.;
double p0 = 1.0 - p; // events with zero photons
//double eta = (-log(p0) * p0 ) / (1-p0-0.00001);
double eta = -log(p0);
//printf("p=%f p0=%f log(p0)=%f eta=%f\n",p,p0,log(p0),eta);
double x = k*(xUpUser-xLowUser)/double(binsX);
double y = l*(yUpUser-yLowUser)/double(binsY);
h_corrected->Fill(x-c_xOffset, y-c_yOffset, signal);
}
}
}
}
h_corrected->SetTitle("SiPM#2 n_p.e.;x[mm];y[mm]");
//h_corrected->GetZaxis()->SetRangeUser(-0.05,.30);
h_corrected->Draw("colz");
TCanvas* canvas13 = new TCanvas("canvas13","canvas13",600,300);
canvas13->Divide(2);
canvas13->cd(1);
h[16]->Draw("colz");
canvas13->cd(2);
h[8]->Draw("colz");
}
/** Draws the beam profile and fits it with error function
* on some background function
*/
if (strstr(plopt, "beam") != NULL) {
TCanvas* canvas9 = new TCanvas("canvas9","canvas9", 500,500);
canvas9->cd();
char hname[128];
sprintf(hname, "hnhitsx%d", 36);
TH1F* h_laser = (TH1F*)rootfile->Get(hname);
h_laser->Draw();
h_laser->SetStats(1);
TF1* err = new TF1("err","[0]+[1]*TMath::Erf((x-[2])/[3])",17.2,17.50);
err->SetParameter(0,2500);
err->SetParameter(1, h_laser->GetMaximum());
err->SetParameter(2, h_laser->GetBinCenter(h_laser->GetMaximumBin()));
err->SetParameter(3, 0.001);
h_laser->Fit(err,"qr");
h_laser->Fit(err,"lr");
double sigma = err->GetParameter(3);
printf("sigma = %2.0f um, FWHM = %2.0f um\n", sigma*1000, 2.35*sigma*1000);
}
if (strstr(plopt, "map") != NULL) {
for (int i=7; i>=0; i--) {
//for (int j=7; j>=0; j--) printf("(%d, %d) ", j,i);
for (int j=7; j>=0; j--) printf("%2d ", map[j][i]);
printf("\n");
}
}
return(0);
}
 
/** Function calculates the noise from one channel
* it runs through the bins along x and returns the average value
*/
double getNoise(TH2F* histogram, int yStart, int yEnd)
{
double noise=0;
int count=0;
for(int j=yStart; j<yEnd; j++) {
double value = histogram->GetBinContent(j,2);
//if (noise < value) noise = value;
noise += value;
count++;
}
return (noise/double(count));
}
/sipmScan/examples/plot_tdc_C.def
0,0 → 1,58
LIBRARY plot_tdc_C
EXPORTS
?G__plot_tdc_C_ACLiC_dictLN_TVectorTlEfloatgR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_TMatrixTBaselEfloatgR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_TVectorTlEdoublegR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_TMatrixTBaselEdoublegR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_iteratorlErandom_access_iterator_tagcOcharcOlongcOcharmUcOcharaNgR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_vectorlEROOTcLcLTSchemaHelpercOallocatorlEROOTcLcLTSchemaHelpergRsPgR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN__RanitlEROOTcLcLTSchemaHelpercOlongcOROOTcLcLTSchemaHelpermUcOROOTcLcLTSchemaHelperaNgR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_iteratorlErandom_access_iterator_tagcOROOTcLcLTSchemaHelpercOlongcOROOTcLcLTSchemaHelpermUcOROOTcLcLTSchemaHelperaNgR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_reverse_iteratorlEvectorlEROOTcLcLTSchemaHelpercOallocatorlEROOTcLcLTSchemaHelpergRsPgRcLcLiteratorgR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_reverse_iteratorlEvectorlEROOTcLcLTSchemaHelpercOallocatorlEROOTcLcLTSchemaHelpergRsPgRcLcLconst_iteratorgR@@3UG__linked_taginfo@@A DATA
?G__plot_tdc_C_ACLiC_dictLN_iteratorlEbidirectional_iterator_tagcOTObjectmUcOlongcOconstsPTObjectmUmUcOconstsPTObjectmUaNgR@@3UG__linked_taginfo@@A DATA
?strchr@@YAPADPADH@Z
?strstr@@YAPADPADPBD@Z
??2TObject@@SAPAXI@Z
??1TDatime@@UAE@XZ
??_R0?AVTDatime@@@8 DATA
?IsA@TDatime@@UBEPAVTClass@@XZ
?SetCanvasColor@TStyle@@QAEXF@Z
?SetCanvasBorderMode@TStyle@@QAEXH@Z
?SetPadColor@TStyle@@QAEXF@Z
?SetPadBorderMode@TStyle@@QAEXH@Z
?SetPadBottomMargin@TStyle@@QAEXM@Z
?SetPadTopMargin@TStyle@@QAEXM@Z
?SetPadLeftMargin@TStyle@@QAEXM@Z
?SetPadRightMargin@TStyle@@QAEXM@Z
?SetFrameFillColor@TStyle@@QAEXF@Z
?SetFrameBorderMode@TStyle@@QAEXH@Z
?SetHistFillColor@TStyle@@QAEXF@Z
?SetStatColor@TStyle@@QAEXH@Z
?SetStatBorderSize@TStyle@@QAEXF@Z
?RTSetStyle@@YAXPAVTStyle@@@Z
??0RTCanvas@@QAE@PAD0HHHH@Z
?Divide@RTCanvas@@QAEXHH@Z
?Divide@RTCanvas@@QAEXH@Z
?cd@RTCanvas@@QAEPAVTPad@@H@Z
?SaveAs@RTCanvas@@QAEXPBD@Z
?Update@RTCanvas@@QAEXXZ
?plot_tdc@@YAHPAD0HHHH@Z
G__cpp_dllrevplot_tdc_C_ACLiC_dict
?sizep2memfunc@G__Sizep2memfuncplot_tdc_C_ACLiC_dict@@QAEIXZ
G__cpp_setup_inheritanceplot_tdc_C_ACLiC_dict
G__cpp_setup_typetableplot_tdc_C_ACLiC_dict
G__cpp_setup_memvarplot_tdc_C_ACLiC_dict
G__cpp_setup_memfuncplot_tdc_C_ACLiC_dict
G__cpp_setup_globalplot_tdc_C_ACLiC_dict
G__cpp_setup_funcplot_tdc_C_ACLiC_dict
G__cpp_reset_tagtableplot_tdc_C_ACLiC_dict
G__cpp_setup_tagtableplot_tdc_C_ACLiC_dict
??1G__cpp_setup_initplot_tdc_C_ACLiC_dict@@QAE@XZ
??0RTCanvas@@QAE@XZ
G__set_cpp_environmentplot_tdc_C_ACLiC_dict
??0G__Sizep2memfuncplot_tdc_C_ACLiC_dict@@QAE@XZ
?G__get_sizep2memfuncplot_tdc_C_ACLiC_dict@@YAIXZ
G__cpp_setupplot_tdc_C_ACLiC_dict
??0G__cpp_setup_initplot_tdc_C_ACLiC_dict@@QAE@XZ
?G__cpp_setup_initializerplot_tdc_C_ACLiC_dict@@3VG__cpp_setup_initplot_tdc_C_ACLiC_dict@@A DATA
/sipmScan/examples/plot_tdc.C
0,0 → 1,238
#include "TROOT.h"
#include "TFile.h"
#include "TBenchmark.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TPad.h"
#include "TF1.h"
#include "TGraph.h"
#include "TSpectrum.h"
#include "stdio.h"
 
//#include "../RTUtil.h"
 
int plot_tdc(char* filename = "test", char *plopt="t", int chXstart=0, int chXend=7, int chYstart=0, int chYend=7)
{
const int c_nChannels = 64;
char fullname[256];
int map[8][8]={{32,34,53,55,40,42,61,63},
{48,50,37,39,56,58,45,47},
{33,35,52,54,41,43,60,62},
{49,51,36,38,57,59,44,46},
{17,19,4,6,25,27,12,14},
{1,3,20,22,9,11,28,30},
{16,18,5,7,24,26,13,15},
{0,2,21,23,8,10,29,31}
};
char fnameroot[256];
TFile* rootfile;
sprintf(fnameroot, "root/%s.root", filename);
rootfile = (TFile *) gROOT->FindObject(filename);
if(rootfile==NULL) rootfile = new TFile(fnameroot);
if(rootfile==NULL) {
printf("Cannot open root file %s!!!\n",fnameroot);
return(0);
}
 
// set draw style
gStyle->SetOptStat("ne");
gStyle->SetPalette(1, 0);
gStyle->SetPaperSize(TStyle::kA4);
gStyle->SetStatBorderSize(1);
gStyle->SetFrameBorderMode(0);
gStyle->SetFrameFillColor(0);
gStyle->SetCanvasBorderMode(0);
gStyle->SetPadBorderMode(0);
gStyle->SetPadColor(0);
gStyle->SetCanvasColor(0);
gStyle->SetStatColor(0);
gStyle->SetOptFit(11);
gStyle->SetOptStat();
gStyle->SetPadRightMargin(0.15);
gStyle->SetPadLeftMargin(0.12);
//gStyle->SetTitleYOffset(1.4);
if( strchr(plopt, 't') != NULL ) {
TCanvas* canvas1 = new TCanvas("canvas1","canvas1",1000,1000);
TH2F* htdc = (TH2F*) rootfile->Get("htdc");
canvas1->cd();
htdc->Draw("colz");
TH2F* h_correctedTDC = (TH2F*) rootfile->Get("h_correctedTDC");
TCanvas* canvas6 = new TCanvas("canvas6","canvas6",500,500);
canvas6->cd();
h_correctedTDC->Draw("colz");
TH1D* channelY = htdc->ProjectionX("",54,54);
channelY->SetStats(0);
channelY->SetTitle(";TDC [ns];Events");
channelY->GetYaxis()->SetTitleOffset(1.7);
//channelY->GetXaxis()->SetRangeUser(-40,40);
//channelY->Draw();
 
TF1* f_gaus = new TF1("f_gaus","gaus(0)+gaus(3)",-10,20);
f_gaus->SetParNames("Constant1","Mean1","Sigma1","Constant2","Mean2","Sigma2");
f_gaus->SetParameters(channelY->GetMaximum(), channelY->GetBinCenter(channelY->GetMaximumBin()), 0.5,
channelY->GetMaximum(), channelY->GetBinCenter(channelY->GetMaximumBin())/10.0, 0.05);
/*channelY->Fit(f_gaus,"0ql","",f_gaus->GetParameter(1)-0.1,f_gaus->GetParameter(1)+0.05);
channelY->Fit(f_gaus,"ql","",f_gaus->GetParameter(1)-0.1,f_gaus->GetParameter(1)+0.05);
channelY->Fit(f_gaus,"0qlr","",-20,20);
channelY->Fit(f_gaus,"qlr","",f_gaus->GetParameter(1)-2*f_gaus->GetParameter(2),
f_gaus->GetParameter(1)+2*f_gaus->GetParameter(2));*/
}
if( strchr(plopt, 'all') != NULL ) {
TCanvas *canvas2 = new TCanvas("canvas2","Hits x;;",2000,2000);
TCanvas *canvas3 = new TCanvas("canvas3","Hits y;;",2000,2000);
canvas2->Divide(8,8);
canvas3->Divide(8,8);
TH1F* h_hitsx;
TH1F* h_hitsy;
for(int i=0; i<64; i++) {
canvas2->cd(i+1);
char hname[128];
sprintf(hname, "hnhitsx%d", i);
h_hitsx = (TH1F*)rootfile->Get(hname);
h_hitsx->Draw();
canvas3->cd(i+1);
sprintf(hname, "hnhitsy%d", i);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}
}
if( strchr(plopt, 'x') != NULL ) {
TCanvas *canvas10 = new TCanvas("canvas10","Ch x;;",500,500);
TH1F* h_hitsx;
canvas10->cd();
char hname[128];
sprintf(hname, "hnhitsx%d", chXstart);
h_hitsx = (TH1F*)rootfile->Get(hname);
h_hitsx->Draw();
}
if( strchr(plopt, 'y') != NULL ) {
TCanvas *canvas11 = new TCanvas("canvas11","Ch x;;",500,500);
TH1F* h_hitsy;
canvas11->cd();
char hname[128];
sprintf(hname, "hnhitsy%d", chXstart);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}
if( strstr(plopt, "share") != NULL ) {
/*TCanvas *canvas4 = new TCanvas("canvas1","canvas1",1000,1000);
int nChannels = chYend-chYstart+1;
int ncols = nChannels/2;
printf("nch %d nch\\2 %d\n", nChannels, ncols);
canvas4->Divide(2,ncols);
TH1F* h_hitsy;
for(int i=chYstart; i<=chYend; i++){
canvas4->cd(i-chYstart+1);
char hname[128];
int chPosition = map[0][i];
sprintf(hname, "hnhitsy%d", chPosition);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->Draw();
}*/
TCanvas *canvas5 = new TCanvas("canvas5","canvas5",500,500);
canvas5->cd();
for(int i=chYstart; i<=chYend; i++) {
TH1F* h_hitsy;
char hname[128];
int chPosition = map[chXstart][i];
sprintf(hname, "hnhitsy%d", chPosition);
h_hitsy = (TH1F*)rootfile->Get(hname);
h_hitsy->SetTitle("Scan Y;y [mm]; Entries");
h_hitsy->GetYaxis()->SetTitleOffset(1.3);
h_hitsy->SetStats(0);
if (i == chYstart)
h_hitsy->Draw();
else {
h_hitsy->SetLineColor(i+1);
h_hitsy->Draw("same");
}
}
sprintf(fullname, "ps/%s_Yshare.eps", filename);
canvas5->SaveAs(fullname);
}
if (strstr(plopt, "2d") != NULL) {
int nX = chXend - chXstart + 1;
int nY = chYend - chYstart + 1;
TCanvas* canvas7 = new TCanvas("canvas7","canvas7", nX*250,nY*250);
printf("nx %d ny %d\n",nX,nY);
canvas7->Divide(nX,nY);
for(int i=chYstart; i<=chYend; i++) {
for(int j=chXstart; j<=chXend; j++) {
int canvasPosition = nX*(i-chYstart)+(j-chXstart)+1;
printf("canvas %d\n",canvasPosition);
canvas7->cd(canvasPosition);
char hname[128];
int chPosition = map[j][i];
sprintf(hname, "h2d%d", chPosition);
TH2F* h_2d = (TH2F*)rootfile->Get(hname);
h_2d->Draw("colz");
} //x
}
/*
TCanvas* canvas8 = new TCanvas("canvas8","canvas8", 1000,1000);
char hname[128];
int chPosition = map[0][7];
sprintf(hname, "h2d%d", chPosition);
TH2F* h_2d1 = (TH2F*)rootfile->Get(hname);
chPosition = map[0][8];
sprintf(hname, "h2d%d", chPosition);
TH2F* h_2d2 = (TH2F*)rootfile->Get(hname);
h_2d1->SetOption("colz");
h_2d1->Draw();
h_2d2->SetOption("colz");
h_2d2->Draw("same");*/
}
if( strstr(plopt, "sum") != NULL ) {
int nX = chXend - chXstart + 1;
int nY = chYend - chYstart + 1;
TCanvas* canvas12 = new TCanvas("canvas12","c2",1000,1000);
gStyle->SetOptStat(11);
//c2->Divide(1,4);
//TVirtualPad *pad=c2->cd();
//pad->SetLogz();
TH2F* h[64];
for(int i=chYstart; i<=chYend; i++) {
for(int j=chXstart; j<=chXend; j++) {
int chPosition = map[j][i];
char hname[128];
sprintf(hname, "h2d%d", chPosition);
int histogram = nX*(i-chYstart)+(j-chXstart);
h[histogram] = (TH2F *) rootfile->Get(hname);
if (histogram) h[0]->Add(h[histogram]);
}
}
h[0]->Draw("COLZ");
}
if (strstr(plopt, "beam") != NULL) {
TCanvas* canvas9 = new TCanvas("canvas9","canvas9", 500,500);
char hname[128];
sprintf(hname, "hnhitsx%d", 36);
TH1F* h_laser = (TH1F*)rootfile->Get(hname);
h_laser->Draw();
h_laser->SetStats(1);
TF1* err = new TF1("err","[0]+[1]*TMath::Erf((x-[2])/[3])");
err->SetParameters(0,h_laser->GetMaximum(),17.04,0.0001);
h_laser->Fit(err,"l");
}
return(0);
}
/sipmScan/examples/plot_tdc_C.rootmap
0,0 → 1,0
Library.plot_tdc_C: plot_tdc_C libCore.dll libMathCore.dll libRIO.dll libGpad.dll libGraf.dll libHist.dll libHist.dll libMatrix.dll libMathCore.dll libGraf.dll libHist.dll libMatrix.dll libMathCore.dll libRIO.dll libSpectrum.dll libHist.dll libMatrix.dll
/sipmScan/examples/scan2d.cpp
0,0 → 1,87
#include "stdio.h"
#include "TROOT.h"
#include "TFile.h"
#include "TNtuple.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TF1.h"
#include "TMath.h"
#include "TStyle.h"
#include "TCanvas.h"
#include "TLine.h"
#include "zlib/zlib.h"
 
int scan2d(char * fname="test", char *plopt="2d", double value=0){
char fullname[256];
//get ROOT file with histograms
char fnameroot[1024];
TFile * rootfile;
TDirectory *dir;
sprintf(fnameroot, "root/%s.root", fname);
rootfile = (TFile *) gROOT->FindObject(fname);
if(rootfile==NULL) rootfile = new TFile(fnameroot);
if(rootfile==NULL) {
printf("Cannot open root file %s!!!\n",fnameroot);
return 0;
}
dir = (TDirectory*) rootfile;
// set draw style
gStyle->SetOptStat("ne");
gStyle->SetPalette(1, 0);
gStyle->SetPaperSize(TStyle::kA4);
gStyle->SetStatBorderSize(1);
gStyle->SetFrameBorderMode(0);
gStyle->SetFrameFillColor(0);
gStyle->SetCanvasBorderMode(0);
gStyle->SetPadBorderMode(0);
gStyle->SetPadColor(0);
gStyle->SetCanvasColor(0);
gStyle->SetStatColor(0);
gStyle->SetOptFit(11);
gStyle->SetOptStat();
gStyle->SetPadRightMargin(0.15);
gStyle->SetPadLeftMargin(0.12);
//gStyle->SetTitleYOffset(1.4);
TCanvas *c;
int cc=-1;
char hname[256];
TH1F *hp1d; TH2F *hp2d;
c = new TCanvas("2D Scan", fname, 650, 0, 600, 1200);
c ->Divide(2,4);
for (int i=0;i<8;i++){
TVirtualPad *pad=c->cd(i%4*2+i/4+1);
if( strstr(plopt, "2d") != NULL ) {
pad->SetLogz();
pad->SetLogy(0);
sprintf(hname, "h2d%d",i); hp2d = (TH2F *) dir->Get(hname);
(hp2d->GetYaxis())->SetLabelOffset(0.01);
hp2d->SetTitle("; X [mm]; Y[mm]");
hp2d->DrawCopy("COLZ");
sprintf(fullname, "ps/%s_2d.pdf", fname);
}
if( strstr(plopt, "adc") != NULL ) {
pad->SetLogy(1);
pad->SetLogz(0);
sprintf(hname, "hadc%d",i); hp1d = (TH1F *) dir->Get(hname);
if (value>0) (hp1d->GetXaxis())->SetRangeUser(0,value);
(hp1d->GetYaxis())->SetLabelOffset(0.01);
hp1d->SetTitle("; ADC (a.u.); N");
hp1d->DrawCopy();
sprintf(fullname, "ps/%s_adc.pdf", fname);
}
}
c->SaveAs(fullname);
return 0;
}
/sipmScan/examples/plot_tdc_C.d
0,0 → 1,76
#
# DO NOT DELETE
 
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TROOT.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TDirectory.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TNamed.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TObject.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/Rtypes.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/RConfig.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/RVersion.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/DllImport.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/Rtypeinfo.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TGenericClassInfo.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TSchemaHelper.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TStorage.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TVersionCheck.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/Riosfwd.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TBuffer.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TString.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TRefCnt.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TMathBase.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TList.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TSeqCollection.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TCollection.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TIterator.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TDatime.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TUUID.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TFile.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TDirectoryFile.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TUrl.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TBenchmark.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TStopwatch.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TH1F.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TH1.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TAxis.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TAttAxis.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TArrayD.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TArray.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TAttLine.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TAttFill.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TAttMarker.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TArrayC.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TArrayS.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TArrayI.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TArrayF.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/Foption.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TVectorFfwd.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TVectorDfwd.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TH2F.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TH2.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TMatrixFBasefwd.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TMatrixDBasefwd.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TCanvas.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TPad.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TVirtualPad.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TAttPad.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TVirtualX.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TAttText.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/GuiTypes.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/Buttons.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TQObject.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TAttCanvas.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TCanvasImp.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TStyle.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TF1.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TFormula.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TBits.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TObjArray.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TFormulaPrimitive.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/Math/ParamFunctor.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TGraph.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TSpectrum.h RTUtil.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TPaveLabel.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TPave.h
C:\HOME\dino\l2d\plot_tdc.o: /cygdrive/C\root/include/TBox.h RTUtil.cpp
C:\HOME\dino\l2d\plot_tdc.C: C:\root\include\cintdictversion.h
/sipmScan/examples/plot_tdc_64ch.C
0,0 → 1,30
#include "TROOT.h"
#include "TFile.h"
#include "TBenchmark.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TPad.h"
#include "TF1.h"
#include "TGraph.h"
#include "TSpectrum.h"
 
#include "RTUtil.h"
 
int plot_tdc()
{
TFile *file0 = new TFile("C:/HOME/dino/l2d/root/test.root");
//TNtuple *ntuple = (TNtuple*) file0->Get("nt");
TCanvas *canvas1 = new TCanvas("canvas1","canvas1",1000,1000);
TH2F* htdc = (TH2F*) file0->Get("htdc");
canvas1->Divide(2,2);
canvas1->cd(1);
htdc->Draw();
TH1F* h1ch = new TH1F("h1ch","h1ch",256,0,256);
htdc->ProjectionX("h1ch",33,34,"");
canvas1->cd(2);
h1ch->Draw();
}