Subversion Repositories f9daq

Compare 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
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: examples/mppc.cpp
===================================================================
--- examples/mppc.cpp (nonexistent)
+++ examples/mppc.cpp (revision 30)
@@ -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();
+}
Index: examples/plot_adc_tdc.C
===================================================================
--- examples/plot_adc_tdc.C (nonexistent)
+++ examples/plot_adc_tdc.C (revision 30)
@@ -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();
+
+}
\ No newline at end of file
Index: examples/plotThresholdScan.C
===================================================================
--- examples/plotThresholdScan.C (nonexistent)
+++ examples/plotThresholdScan.C (revision 30)
@@ -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));
+}
+
Index: examples/plots.cpp
===================================================================
--- examples/plots.cpp (nonexistent)
+++ examples/plots.cpp (revision 30)
@@ -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();
+}
Index: examples/plot_tdc_C.dll
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/examples/plot_tdc_C.dll
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: examples/plot_tdc_C.exp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/examples/plot_tdc_C.exp
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: examples/plot_1d_scan.C
===================================================================
--- examples/plot_1d_scan.C (nonexistent)
+++ examples/plot_1d_scan.C (revision 30)
@@ -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");
+}
\ No newline at end of file
Index: examples/plot_sipm.C
===================================================================
--- examples/plot_sipm.C (nonexistent)
+++ examples/plot_sipm.C (revision 30)
@@ -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));
+}
+
Index: examples/plot_tdc_C.def
===================================================================
--- examples/plot_tdc_C.def (nonexistent)
+++ examples/plot_tdc_C.def (revision 30)
@@ -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
Index: examples/plot_tdc.C
===================================================================
--- examples/plot_tdc.C (nonexistent)
+++ examples/plot_tdc.C (revision 30)
@@ -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);
+}
Index: examples/plot_tdc_C.rootmap
===================================================================
--- examples/plot_tdc_C.rootmap (nonexistent)
+++ examples/plot_tdc_C.rootmap (revision 30)
@@ -0,0 +1 @@
+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
Index: examples/scan2d.cpp
===================================================================
--- examples/scan2d.cpp (nonexistent)
+++ examples/scan2d.cpp (revision 30)
@@ -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;
+}
\ No newline at end of file
Index: examples/plot_tdc_C.d
===================================================================
--- examples/plot_tdc_C.d (nonexistent)
+++ examples/plot_tdc_C.d (revision 30)
@@ -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
Index: examples/plot_tdc_64ch.C
===================================================================
--- examples/plot_tdc_64ch.C (nonexistent)
+++ examples/plot_tdc_64ch.C (revision 30)
@@ -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();
+
+}
\ No newline at end of file