Link to Plot.C
===#include "TROOT.h"
- include "TCanvas.h"
- include "TEfficiency.h"
- include "TF1.h"
- include "TFile.h"
- include "TH1D.h"
- include "TH2D.h"
- include "TLatex.h"
- include "TList.h"
- include "TPad.h"
- include "TPaveStats.h"
- include "TPaveText.h"
- include "TProfile.h"
- include "TString.h"
- include "TStyle.h"
- include "TText.h"
- include "TTree.h"
- include "TGraph.h"
- include <cstring>
- include <iostream>
- include <fstream>
- include <stdio.h>
- include <stdlib.h>
using namespace std;
static const Int_t NUMPMT = 14; static const Int_t NUMPIXEL = 16; static const Int_t NUMPADDLE = 14; static const Int_t NUMPADDLES = NUMPMT*NUMPIXEL;
static const float adc_charge = 50*1e-15; // 50 fC, corresponding to an ADC chan static const float e = 1.6e-19; // C, electron charge static const Int_t xcanvas = 800; // width of canvases static const Int_t ycanvas = 800; // height of canvases
TTree *T; // tree from root file, raw adc/tdc/hit data // local arrays to hold data per event from tree Double_t adc[NUMPADDLES]; Double_t adc_c[NUMPADDLES]; Double_t tdcl[NUMPADDLES]; Double_t tdcl_c[NUMPADDLES]; Double_t tdct[NUMPADDLES]; Double_t tdct_c[NUMPADDLES]; Double_t nahit; Double_t nthit; Double_t nhit;
//Latest map Int_t pixel1[NUMPMT]={4, 4, 2, 1, 4, 3, 4,13, 4,13,13,13, 5,13}; Int_t pixel2[NUMPMT]={5, 8,11,13,14,13,16,16,16,16,16,16,16,16}; //Int_t pixel1[NUMPMT]={4, 4, 2, 1, 4, 3, 6,13, 4,13,13,13, 5,13}; //Int_t pixel2[NUMPMT]={5, 8,11,13,14,13,16,16,16,16,16,16,16,16}; //Original map of Ralph/Tommy //Int_t pixel1[NUMPMT]={4, 4, 2, 1, 4, 3, 4,13, 4,13,13,13, 5,13}; //Int_t pixel2[NUMPMT]={5, 8,11,13,14,13,16,16,16,16,16,16,16,16}; //Map to test for missing pixels //Int_t pixel1[NUMPMT]={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //Int_t pixel2[NUMPMT]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Int_t paddleindex[NUMPADDLES];
Int_t run; // run number used in titles of plots Int_t n_events_to_analyze; // number of events to analyze ... -1 = all. TStyle *MyStyle = new TStyle("MyStyle","MyStyle");
void plot(Int_t runno, Int_t n_events=-1){
TString filename; filename.Form("scint_%d.root",runno); TFile *_file0 = TFile::Open(filename);
run=runno;
// Set Canvas preferences
MyStyle->SetTitleFontSize(0.08); MyStyle->SetTitleX(0.15); MyStyle->SetTitleY(0.99); MyStyle->SetStatW(0.9); MyStyle->SetMarkerStyle(6); gStyle->SetCanvasDefH(xcanvas); gStyle->SetCanvasDefW(ycanvas); gStyle->SetPalette(1); gROOT->SetStyle("MyStyle");
T = (TTree *)_file0->Get("T");
// Setting addresses so we can call them later
T->SetBranchAddress("C.cdetm1r.adc",&adc); T->SetBranchAddress("C.cdetm1r.adc_c",&adc_c); T->SetBranchAddress("C.cdetm1r.tdcl",&tdcl); T->SetBranchAddress("C.cdetm1r.tdct",&tdct); T->SetBranchAddress("C.cdetm1r.tdcl_c",&tdcl_c); T->SetBranchAddress("C.cdetm1r.tdct_c",&tdct_c); T->SetBranchAddress("C.cdetm1r.nhit",&nhit); T->SetBranchAddress("C.cdetm1r.nahit",&nahit); T->SetBranchAddress("C.cdetm1r.nthit",&nthit);
Int_t n_entries = T->GetEntries(); // Checks how many total entries in T cout << "Found " << n_entries << " events"<<endl; if (n_events==-1){
n_events_to_analyze = n_entries; cout << "Analyzing all events." << endl;
} else {
if (n_events < n_entries) { n_events_to_analyze = n_events; cout << "Analyzing " << n_events << " events." << endl;
}else{
n_events_to_analyze = n_entries; cout << "Analyzing " << n_entries << " events." << endl; }
}
}
void setPaddleIndices(){
// Setting the location of paddles, taking into account the missing pixels in each PMT
for(Int_t pmt=0; pmt<NUMPMT;pmt++){ Int_t ipaddle = (pmt+1)*NUMPADDLE+1; for(Int_t pixel=0; pixel<NUMPIXEL;pixel++){ Int_t index = pmt*NUMPIXEL+pixel; if (pixel!=pixel1[pmt]-1&&pixel!=pixel2[pmt]-1){ ipaddle--;
paddleindex[ipaddle]=index;
} } }
return; }
Int_t getPaddleIndex(Int_t pmt, Int_t ipaddle){
//pmt numbers are from 0 to 13 as are ipaddle numbers and the code accounts for removed pixels
setPaddleIndices();
Int_t localpaddle = (pmt+1)*NUMPADDLE-ipaddle;
return paddleindex[localpaddle]; }
Int_t getPaddlePixel(Int_t pmt, Int_t ipaddle){
//gives the pixel number for the given paddle number of the pmt, again paddle and pmt numbers are from 0 to 13
setPaddleIndices();
Int_t localpaddle = (pmt+1)*NUMPADDLE-ipaddle;
return paddleindex[localpaddle]-(pmt)*NUMPIXEL; }
void print_event(Int_t adc_cut=50, Int_t start_event=1, Int_t num_events=1, Int_t tdc_min=750, Int_t tdc_width=300){
for (Int_t id=start_event;id<start_event+num_events;id++){ T->GetEntry(id);
cout << "Event " << id << endl; for (Int_t pmt=1; pmt<=NUMPMT;pmt++){ for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipixel = (pmt-1)*NUMPIXEL+index-1; if(tdcl[ipixel]>tdc_min&&tdcl[ipixel]<tdc_min+tdc_width){ cout << "Leading Edge TDC Hit on global pixel " << ipixel << " = " << tdcl[ipixel] << endl; } if(tdct[ipixel]>tdc_min&&tdct[ipixel]<tdc_min+tdc_width){ cout << "Trailing Edge TDC Hit on global pixel " << ipixel << " = " << tdct[ipixel] << endl; } if(adc_c[ipixel]>adc_cut){ cout << "ADC Hit on global pixel " << ipixel << " = " << adc_c[ipixel] << endl; } } } }
return; }
TCanvas *plot_adc_fit(Int_t pmt=1, Int_t tdc_min=750, Int_t tdc_width=300, Int_t adc_neighbor_cut=60, Int_t adc_cut=50){
TString cut, draw, draw1, title, grtitle; title.Form("run_%d_ADC_Fit",run); TCanvas *cADCFit = new TCanvas("cADCFit",title,xcanvas,ycanvas);
title.Form("run_%d_ADC_Mean_Fit",run); TCanvas *cADCMeanFit= new TCanvas("cADCMeanFit",title,xcanvas,ycanvas);
// Setting up different arrays and objects used to create the two canvases.
TH1D *htmp[NUMPIXEL]; TF1 *function; TF1 *function1; Int_t histmax_cut[16], gaus_cut_plus[16]; Float_t gaus_cut_minus[16];
Double_t upixel[NUMPIXEL]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; Double_t epixel[NUMPIXEL]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; Double_t errors[NUMPIXEL]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Double_t constants[16], means[16], sigmas[16];
TString tmpentry; MyStyle->SetStatX(0.9);
MyStyle->SetStatY(0.6); MyStyle->SetStatY(0.4);
setPaddleIndices(); //Setting the geometric paddle locations
Int_t nbin=90; Int_t min=-100, max=800;
for(Int_t i = 1; i <= NUMPIXEL; i++) { tmpentry.Form("htmp%d",i); htmp[i-1] = new TH1D(tmpentry,tmpentry,nbin,min,max); htmp[i-1]->SetLineColor(kRed); title.Form("Run %d ADC Fit pmt %d, paddle %d: %d < tdc < %d",run,pmt,i,tdc_min,tdc_min+tdc_width); htmp[i-1]->SetTitle(title); }
// Filling the histograms using only adc data with good tdc and good adc neighbor cut.
Int_t nentries=n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++) { T->GetEntry(id); Int_t ipaddle = (pmt)*NUMPADDLE+1; for (Int_t pixel=0; pixel < NUMPIXEL; pixel++) { Int_t index = (pmt-1)*NUMPIXEL+pixel; if (pixel!=pixel1[pmt-1]-1 && pixel!=pixel2[pmt-1]-1) { ipaddle--; // if(tdcl[index] > tdc_min && tdcl[index] < tdc_min+tdc_width) // { if (ipaddle < 2) { if (adc_c[paddleindex[ipaddle+1]] < 10) { htmp[pixel]->Fill(adc_c[index]); } } else if (ipaddle > NUMPMT*NUMPADDLE) // should this be > or = ? { if (adc_c[paddleindex[ipaddle-1]] < 10) { htmp[pixel]->Fill(adc_c[index]); } } else { if (adc_c[paddleindex[ipaddle-1]] < 10 && adc_c[paddleindex[ipaddle+1]] < 10) { htmp[pixel]->Fill(adc_c[index]); } } // } } } }
// Creating the canvas of adc data with good tdc and fitting the adc with a gaussian or "landau" function.
cADCFit->Clear(); cADCMeanFit->Clear(); cADCFit->Divide(4,4);
Int_t count = 0; for (Int_t i=0; i<NUMPIXEL; i++)
{ if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
// means[i]=0.0;
// int check = 0; cADCFit->cd(count+1); gPad->SetLogy(); cADCFit->Update();
Int_t entries = htmp[i]->GetEntries(); //float mean = htmp[i]->GetMean(1); //float RMS = htmp[i]->GetRMS(1);
htmp[i]->SetStats(0); htmp[i]->Draw();
Double_t bc =0.0; Double_t bn = 0.0;
for (Int_t j=15; j<100 ;j++){ bc = htmp[i]->GetBinContent(j); if( bc == 0.0 || (bc <htmp[i]->GetBinContent(j+1) && bc < htmp[i]->GetBinContent(j+2) && bc <htmp[i]->GetBinContent(j-1) && bc <htmp[i]->GetBinContent(j-2) && bc <htmp[i]->GetBinContent(j-3) && bc <htmp[i]->GetBinContent(j-4)) ){ bn = htmp[i]->GetBinCenter(j); htmp[i]->Fit("gaus","","",bn,bn+600); break; } }
//htmp[i]->Fit("landau","","", 0, 250); function = htmp[i]->GetFunction("gaus"); function->SetLineColor(1);
constants[i] = function->GetParameter(0); means[i] = function->GetParameter(1); sigmas[i] = function->GetParameter(2);
count++;
} }
// Printing out means and sigmas to screen with corresponding pixel number.
for (Int_t i=0; i<NUMPIXEL; i++) { cout << "Pixel number: " << i+1 << " \t mean = " << means[i] << " \t sigma = " << sigmas[i] << endl; }
title.Form("run_%d_ADC_pmt_%d_tdc_min_%d_max_%d.png",run,pmt,tdc_min,tdc_min+tdc_width); cADCFit->Print(title); cADCFit->cd(0);
// End of work on canvas with adc data fitted with a function
// Creating the canvas of mean adc data with good tdc data.
cADCMeanFit->cd();
Double_t mmean[2]={0,0}; Double_t merror[2]={1,1}; Double_t mpixel[2]={0,0}; Double_t mepixel[2]={0,0}; mpixel[0]=pixel1[pmt-1]; mpixel[1]=pixel2[pmt-1];
Double_t yline[2]={100,100}; Double_t xline[2]={0,17};
// Calculating errors on the mean adc data and printing out number of entries, means, and errors // to screen with corresponding pixel number.
count = 0; for (Int_t i = 0; i < NUMPIXEL; i++) { if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) { Int_t entries = htmp[i]->GetEntries(); errors[i] = sigmas[i]/sqrt(entries); if(means[i] > 1) { cout << "Pixel number: " << i+1 << " \t entries: " << entries << "\t mean: " << means[i] << "\t error: " << errors[i] << endl; }
count++;
} }
// Creating three different graphs for used pixels, missing pixels, and general formatting.
gr = new TGraphErrors(NUMPIXEL,upixel,means,epixel,errors); gr->SetMarkerStyle(21); gr->GetXaxis()->SetTitle("Pixel Number"); gr->GetYaxis()->SetTitle("Mean ADC Fit (Good TDC)"); gr->GetYaxis()->SetTitleOffset(1.4); grtitle.Form("run_%d_pmt_%d_adc_mean",run,pmt); gr->SetTitle(grtitle); gr2 = new TGraphErrors(2,mpixel,mmean,mepixel,merror); gr2->SetMarkerStyle(21); gr2->SetMarkerColor(2); gr2->SetTitle(""); gr3 = new TGraph(2,xline,yline); gr3->SetLineColor(2); gr3->SetLineWidth(2); gr3->SetLineStyle(2); gr3->SetTitle("");
// Drawing the three different graphs to the adc mean values canvas.
gr->Draw("AP"); gr2->Draw("P"); gr3->Draw("L");
cADCMeanFit->Update();
cADCMeanFit->cd(0);
// End of work on canvas with adc mean data.
// Creating a file to output parameters of function fitted to the ADC data with good TDC.
TString filename; filename.Form("run_%d_pmt_%d_adc_fitresults.txt", run, pmt);
ofstream outfile(filename);
outfile << "Run #: " << run << "\t PMT #: " << pmt << " \t Paramters of fitted ADC data with good TDC. \n"; outfile << "Pixel # \t Mean Value \t Error \t Sigma \n" << endl; for(Int_t i = 0; i < NUMPIXEL; i++) { outfile << i+1 << "\t" << means[i] << "\t" << errors[i] << "\t" << sigmas[i] << endl; } cout << "Created output file for parameters." << endl; outfile.close();
return cADCMeanFit; return cADCFit; }
TCanvas *plot_adc(Int_t pmt=1, Int_t tdc_min=750, Int_t tdc_width=300){
TString cut, draw, draw1, title; title.Form("run_%d_ADC",run); TCanvas *cADC= new TCanvas("cADC",title,xcanvas,ycanvas);
TH1D *htmpa[NUMPIXEL];//=new TH1D("htmp","htmp",nbin,min,max); TH1D *htmpb[NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max);
TString tmpentry; MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.6); MyStyle->SetStatW(0.4);
Int_t nbin=600; Int_t min=-100, max=500; for(Int_t icounter=1;icounter<=NUMPIXEL;icounter++){ tmpentry.Form("htmpa%d", icounter); htmpa[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpb%d", icounter); htmpb[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); htmpa[icounter - 1]->SetLineColor(kBlue); htmpb[icounter - 1]->SetLineColor(kRed); title.Form("Run %d ADC pmt %d, paddle %d: %d < tdc < %d",run,pmt,icounter,tdc_min,tdc_min+tdc_width); htmpa[icounter - 1]->SetTitle(title); htmpb[icounter - 1]->SetTitle(title); }
Int_t nentries=n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++){ T->GetEntry(id);
for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipaddle = (pmt-1)*NUMPIXEL+index-1; htmpa[index-1]->Fill(adc_c[ipaddle]); if(tdcl[ipaddle]>tdc_min&&tdcl[ipaddle]<tdc_min+tdc_width){ htmpb[index-1]->Fill(adc_c[ipaddle]); } } }
cADC->Clear();
cADC->Divide(4,4);
//plot histos Int_t icount=0; for (Int_t i=0; i<NUMPIXEL; i++){
if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
//cout<<"into loop 2, i = " << i << endl;
cADC->cd( icount + 1 ); gPad->SetLogy();
cADC->Update(); Int_t entries = htmpa[i]->GetEntries(); float mean = htmpa[i]->GetMean(1); float RMS = htmpa[i]->GetRMS(1); //cout << entries <<" "<< mean <<" "<< RMS <<endl; htmpa[i]->SetStats(0); //current->Modified(); htmpa[i]->Draw(); htmpb[i]->Draw("same");
icount++;
}
}
title.Form("run_%d_ADC_pmt_%d_tdc_min_%d_max_%d.png", run,pmt,tdc_min,tdc_min+tdc_width); cADC->Print(title); cADC->cd(0); return cADC;
}
TCanvas *plot_tdc(Int_t pmt=1, Int_t adc_cut=40, Int_t tdc_min=750, Int_t tdc_width=300){
TString cut, draw, draw1, title; title.Form("run_%d_TDC",run); TCanvas *cTDC= new TCanvas("cTDC",title,xcanvas,ycanvas);
TH1D *htmpa[NUMPIXEL];//=new TH1D("htmp","htmp",nbin,min,max); TH1D *htmpb[NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max);
TString tmpentry; MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.6); MyStyle->SetStatW(0.4);
Int_t nbin=tdc_width; Int_t min=tdc_min, max=tdc_min+tdc_width; for(Int_t icounter=1;icounter<=NUMPIXEL;icounter++){ tmpentry.Form("htmpa%d", icounter); htmpa[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpb%d", icounter); htmpb[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); htmpa[icounter - 1]->SetLineColor(kBlue); htmpb[icounter - 1]->SetLineColor(kRed); title.Form("Run %d ADC pmt %d, paddle %d: %d < tdc < %d",run,pmt,icounter,tdc_min,tdc_min+tdc_width); htmpa[icounter - 1]->SetTitle(title); htmpb[icounter - 1]->SetTitle(title); }
Int_t nentries = n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++){ T->GetEntry(id);
for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipaddle = (pmt-1)*NUMPIXEL+index-1; htmpa[index-1]->Fill(tdcl[ipaddle]); if(adc_c[ipaddle]>adc_cut){ htmpb[index-1]->Fill(tdcl[ipaddle]); } } }
cTDC->Clear();
cTDC->Divide(4,4);
//plot histos Int_t icount=0; for (Int_t i=0; i<NUMPIXEL; i++){
if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
//cout<<"into loop 2, i = " << i << endl;
cTDC->cd( icount + 1 ); //gPad->SetLogy();
cTDC->Update(); Int_t entries = htmpa[i]->GetEntries(); float mean = htmpa[i]->GetMean(1); float RMS = htmpa[i]->GetRMS(1); //cout << entries <<" "<< mean <<" "<< RMS <<endl; htmpa[i]->SetStats(0); //current->Modified(); htmpa[i]->Draw(); htmpb[i]->Draw("same");
icount++;
}
}
title.Form("run_%d_TDC_pmt_%d_adc_cut_%d.png", run,pmt,adc_cut); cTDC->Print(title); cTDC->cd(0); return cTDC;
}
TCanvas *plot_tdc_adc(Int_t pmt=1, Int_t tdc_min=1, Int_t tdc_width=100){
TString cut, draw, draw1, title; title.Form("run_%d_TDC",run); TCanvas *cTDCA= new TCanvas("cTDCA",title,xcanvas,ycanvas);
TH2D *htmpa[NUMPIXEL];//=new TH1D("htmp","htmp",nbin,min,max);
TString tmpentry; MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.6); MyStyle->SetStatW(0.4);
Int_t nbinx=tdc_width; Int_t minx=tdc_min, maxx=tdc_min+tdc_width; Int_t nbiny=350; Int_t miny=0, maxy=350; for(Int_t icounter=1;icounter<=NUMPIXEL;icounter++){ tmpentry.Form("htmpa%d", icounter); htmpa[icounter - 1] = new TH2D(tmpentry,tmpentry,nbinx,minx,maxx,nbiny,miny,maxy); htmpa[icounter - 1]->SetLineColor(kBlue); title.Form("Run %d ADC pmt %d, paddle %d: %d < tdc < %d",run,pmt,icounter,tdc_min,tdc_min+tdc_width); htmpa[icounter - 1]->SetTitle(title); }
Int_t nentries = n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++){ T->GetEntry(id);
for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipaddle = (pmt-1)*NUMPIXEL+index-1; htmpa[index-1]->Fill(tdcl[ipaddle]-tdct[ipaddle],adc_c[ipaddle]); } }
cTDCA->Clear();
cTDCA->Divide(4,4);
//plot histos Int_t icount=0; for (Int_t i=0; i<NUMPIXEL; i++){
if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
//cout<<"into loop 2, i = " << i << endl;
cTDCA->cd( icount + 1 ); //gPad->SetLogy();
cTDCA->Update(); Int_t entries = htmpa[i]->GetEntries(); float mean = htmpa[i]->GetMean(1); float RMS = htmpa[i]->GetRMS(1); //cout << entries <<" "<< mean <<" "<< RMS <<endl; htmpa[i]->SetStats(0); //current->Modified(); htmpa[i]->Draw("COLZ");
icount++;
}
}
title.Form("run_%d_TDC_pmt_%d.png", run,pmt); cTDCA->Print(title); cTDCA->cd(0); return cTDCA;
}
TCanvas *plot_tdc_diff(Int_t pmt=1, Int_t adc_cut=40, Int_t tdc_min=1, Int_t tdc_width=100){
TString cut, draw, draw1, title; title.Form("run_%d_TDC",run); TCanvas *cTDCT= new TCanvas("cTDCT",title,xcanvas,ycanvas);
TH1D *htmpa[NUMPIXEL];//=new TH1D("htmp","htmp",nbin,min,max); TH1D *htmpb[NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max);
TString tmpentry; MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.6); MyStyle->SetStatW(0.4);
Int_t nbin=tdc_width; Int_t min=tdc_min, max=tdc_min+tdc_width; for(Int_t icounter=1;icounter<=NUMPIXEL;icounter++){ tmpentry.Form("htmpa%d", icounter); htmpa[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpb%d", icounter); htmpb[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); htmpa[icounter - 1]->SetLineColor(kBlue); htmpb[icounter - 1]->SetLineColor(kRed); title.Form("Run %d ADC pmt %d, paddle %d: %d < tdc < %d",run,pmt,icounter,tdc_min,tdc_min+tdc_width); htmpa[icounter - 1]->SetTitle(title); htmpb[icounter - 1]->SetTitle(title); }
Int_t nentries = n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++){ T->GetEntry(id);
for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipaddle = (pmt-1)*NUMPIXEL+index-1; htmpa[index-1]->Fill(tdcl[ipaddle]-tdct[ipaddle]); if(adc_c[ipaddle]>adc_cut){ htmpb[index-1]->Fill(tdcl[ipaddle]-tdct[ipaddle]); } } }
cTDCT->Clear();
cTDCT->Divide(4,4);
//plot histos Int_t icount=0; for (Int_t i=0; i<NUMPIXEL; i++){
if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
//cout<<"into loop 2, i = " << i << endl;
cTDCT->cd( icount + 1 ); //gPad->SetLogy();
cTDCT->Update(); Int_t entries = htmpa[i]->GetEntries(); float mean = htmpa[i]->GetMean(1); float RMS = htmpa[i]->GetRMS(1); //cout << entries <<" "<< mean <<" "<< RMS <<endl; htmpa[i]->SetStats(0); //current->Modified(); htmpa[i]->Draw(); htmpb[i]->Draw("same");
icount++;
}
}
title.Form("run_%d_TDC_pmt_%d_adc_cut_%d.png", run,pmt,adc_cut); cTDCT->Print(title); cTDCT->cd(0); return cTDCT;
}
TCanvas *plot_occupancy(Int_t adc_cut=40, Int_t adc_neighbor_cut=10000, Int_t multiplicity_cut=12, Int_t tdc_min=750, Int_t tdc_width=300){
TString cut, draw, draw1, title; title.Form("run_%d_Occupancy",run);
Int_t nbin=196; Int_t min=1, max=197; Int_t nbinm=11; Int_t minm=-1, maxm=10; TH1D *hoccupancy = new TH1D("hoccupancy","hoccupancy",nbin,min,max); TH1D *hmultiplicity = new TH1D("hmultiplicity","hmultiplicity",nbinm,minm,maxm); TH2D *heatmap = new TH2D("heatmap","heatmap",nbin,min,max,nbinm,minm,maxm);
TCanvas *cOCCUPANCY= new TCanvas("cOCCUPANCY",title,xcanvas,ycanvas);
Int_t nentries=n_events_to_analyze;
TString tmpentry;
MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.9); MyStyle->SetStatW(0.2);
setPaddleIndices();
for (Int_t id=1;id<=nentries;id++){
T->GetEntry(id);
Int_t nmultiplicity=0; Int_t good_paddle[500]; for(Int_t icount=0;icount<500;icount++){good_paddle[icount]=-1;}
for(Int_t pmt=0; pmt<NUMPMT;pmt++){
Int_t ipaddle = (pmt+1)*NUMPADDLE+1; for(Int_t pixel=0; pixel<NUMPIXEL;pixel++){ Int_t index = pmt*NUMPIXEL+pixel; if (pixel!=pixel1[pmt]-1&&pixel!=pixel2[pmt]-1){ ipaddle--; if (tdcl[index]>tdc_min&&tdcl[index]<tdc_min+tdc_width){ nmultiplicity++; if (ipaddle == 1){ if (adc_c[index]>adc_cut && adc_c[paddleindex[ipaddle+1]] < adc_neighbor_cut ){ good_paddle[nmultiplicity-1]=ipaddle; } }else if (ipaddle == NUMPMT*NUMPADDLE){ if (adc_c[index]>adc_cut && adc_c[paddleindex[ipaddle-1]] < adc_neighbor_cut ){ good_paddle[nmultiplicity-1]=ipaddle; } }else{ if (adc_c[index]>adc_cut && adc_c[paddleindex[ipaddle-1]] < adc_neighbor_cut && adc_c[paddleindex[ipaddle+1]] < adc_neighbor_cut ){ good_paddle[nmultiplicity-1]=ipaddle; } } }
}
} }
if(nmultiplicity>0&&nmultiplicity<=multiplicity_cut){ for(Int_t icount=0;icount<nmultiplicity;icount++){
hoccupancy->Fill(good_paddle[icount]); heatmap->Fill(good_paddle[icount],nmultiplicity); }
} hmultiplicity->Fill(nmultiplicity); }
cOCCUPANCY->Clear(); cOCCUPANCY->Divide(1,2) ;
title.Form("run_%d_OCCUPANCY_tdc_min_%d_max_%d.png", run,tdc_min,tdc_min+tdc_width); cOCCUPANCY->Print(title); cOCCUPANCY->cd(1);
//gPad->SetLogy();
hoccupancy->Draw(); hoccupancy->GetXaxis()->SetNdivisions(NUMPMT,NUMPMT,0,0); hoccupancy->SetLineColor(kBlue); gPad->SetGridx(); TVirtualPad *c1_1 = cOCCUPANCY->cd(2);
c1_1->Divide(2,1); c1_1->cd(1);
hmultiplicity->Draw(); hmultiplicity->SetLineColor(kBlue);
c1_1->cd(2);
heatmap->Draw("COLZ"); heatmap->GetXaxis()->SetNdivisions(NUMPMT,NUMPMT,0,0); gPad->SetGridx(); return cOCCUPANCY;
}
TCanvas *plot_occupancy_single(Int_t event_id = 1, Int_t adc_cut=40, Int_t multiplicity_cut=12, Int_t tdc_min=750, Int_t tdc_width=200){
TString cut, draw, draw1, title; title.Form("run_%d_Occupancy",run);
Int_t nbin=196; Int_t min=1, max=197; Int_t nbinm=11; Int_t minm=-1, maxm=10; TH1D *hoccupancy = new TH1D("hoccupancy","hoccupancy",nbin,min,max); TH1D *hmultiplicity = new TH1D("hmultiplicity","hmultiplicity",nbinm,minm,maxm);
TCanvas *cOCCUPANCYE= new TCanvas("cOCCUPANCYE",title,xcanvas,ycanvas);
Int_t nentries=n_events_to_analyze;
TString tmpentry;
MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.9); MyStyle->SetStatW(0.2);
//for (Int_t id=1;id<=nentries;id++){ T->GetEntry(event_id);
Int_t nmultiplicity=0; Int_t good_paddle[500]; for(Int_t icount=0;icount<500;icount++){good_paddle[icount]=-1;}
for(Int_t pmt=0; pmt<NUMPMT;pmt++){
Int_t ipaddle = (pmt+1)*NUMPADDLE+1; for(Int_t pixel=0; pixel<NUMPIXEL;pixel++){ Int_t index = pmt*NUMPIXEL+pixel; if (pixel!=pixel1[pmt]-1&&pixel!=pixel2[pmt]-1){ ipaddle--; if (tdcl[index]>tdc_min&&tdcl[index]<tdc_min+tdc_width){ nmultiplicity++; if (adc_c[index]>adc_cut){ good_paddle[nmultiplicity-1]=ipaddle; } }
}
} }
if(nmultiplicity>0&&nmultiplicity<=multiplicity_cut){ for(Int_t icount=0;icount<nmultiplicity;icount++){hoccupancy->Fill(good_paddle[icount]);} } hmultiplicity->Fill(nmultiplicity); //}
cOCCUPANCYE->Clear(); cOCCUPANCYE->Divide(1,2) ;
title.Form("run_%d_OCCUPANCYE_tdc_min_%d_max_%d.png", run,tdc_min,tdc_min+tdc_width); cOCCUPANCYE->Print(title); cOCCUPANCYE->cd(1); hoccupancy->Draw(); hoccupancy->GetXaxis()->SetNdivisions(NUMPMT,NUMPMT,0,0); hoccupancy->SetLineColor(kBlue); gPad->SetGridx(); cOCCUPANCYE->cd(2); hmultiplicity->Draw(); hmultiplicity->SetLineColor(kBlue); return cOCCUPANCYE;
}
TCanvas *plot_ratio(Int_t pmt=1, Int_t tdc_min=750, Int_t tdc_width=200){
TString cut, draw, draw1, title; title.Form("run_%d_ADCRATIO",run); TCanvas *cADCRATIO= new TCanvas("cADCRATIO",title,xcanvas,ycanvas);
TH1D *htmpa[NUMPIXEL];//=new TH1D("htmp","htmp",nbin,min,max); TH1D *htmpb[NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max); TH1D *htmpc[NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max);
TString tmpentry; MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.6); MyStyle->SetStatW(0.4);
Int_t nbin=25; Int_t min=0, max=100; for(Int_t icounter=1;icounter<=NUMPIXEL;icounter++){ tmpentry.Form("htmpa%d", icounter); htmpa[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpb%d", icounter); htmpb[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpc%d", icounter); htmpc[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); htmpa[icounter - 1]->SetLineColor(kBlue); htmpb[icounter - 1]->SetLineColor(kRed); htmpc[icounter - 1]->SetLineColor(kRed); title.Form("Run %d ADC pmt %d, paddle %d: %d < tdc < %d",run,pmt,icounter,tdc_min,tdc_min+tdc_width); htmpa[icounter - 1]->SetTitle(title); htmpb[icounter - 1]->SetTitle(title); htmpc[icounter - 1]->SetTitle(title); }
Int_t nentries=n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++){ T->GetEntry(id);
for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipaddle = (pmt-1)*NUMPIXEL+index-1; htmpa[index-1]->Fill(adc_c[ipaddle]); if(tdcl[ipaddle]>tdc_min&&tdcl[ipaddle]<tdc_min+tdc_width){ htmpb[index-1]->Fill(adc_c[ipaddle]); } } }
cADCRATIO->Clear();
cADCRATIO->Divide(4,4);
//plot histos Int_t icount=0; TF1 *myfit = new TF1("myfit","1.0-0.5*ROOT::Math::erfc((x-[0])/[1])",0,1); myfit->SetParName(0,"Mean"); myfit->SetParName(1,"Width");
for (Int_t i=0; i<NUMPIXEL; i++){
if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
//cout<<"into loop 2, i = " << i << endl;
cADCRATIO->cd( icount + 1 ); //gPad->SetLogy();
//cADC->Update(); Int_t entries = htmpa[i]->GetEntries(); float mean = htmpa[i]->GetMean(1); float RMS = htmpa[i]->GetRMS(1); //cout << entries <<" "<< mean <<" "<< RMS <<endl; htmpb[i]->SetStats(0); //current->Modified();
myfit->SetParameter(0,40.0); myfit->SetParameter(1,10.0); htmpc[i] = (TH1D*)htmpb[i]->Clone(); htmpc[i]->Divide(htmpa[i]); htmpc[i]->Fit("myfit");
// write the mean and sigma of the fit // on the canvas itself
float fitmean = myfit->GetParameter(0); float fitsig = myfit->GetParameter(1);
// create strings to write on plot TString lmean = Form("mean = %1.1f",fitmean); TString lsig = Form("sigma = %1.1f",fitsig);
// create the latex object to write TLatex tl; tl->SetTextSize(0.07); tl->SetTextAngle(0); tl->SetTextColor(1);
// NOTE: first two numbers are the x and y VALUES // on the individual graph/histogram tl->DrawLatex(30,0.85,lmean); tl->DrawLatex(30,0.75,lsig);
icount++;
}
}
title.Form("run_%d_ADCRATIO_pmt_%d_tdc_min_%d_max_%d.png", run,pmt,tdc_min,tdc_min+tdc_width); cADCRATIO->Print(title); cADCRATIO->cd(0); return cADCRATIO;
}
TCanvas *plot_mean_ratio(Int_t pmt=1, Int_t tdc_min=750, Int_t tdc_width=200){
TString cut, draw, draw1, title; title.Form("run_%d_ADCMEANRATIO",run); TCanvas *cADCMEANRATIO= new TCanvas("cADCMEANRATIO",title,xcanvas,ycanvas);
TH1D *htmpa[NUMPIXEL];//=new TH1D("htmp","htmp",nbin,min,max); TH1D *htmpb[NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max); TH1D *htmpc[NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max);
TString tmpentry; MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.6); MyStyle->SetStatW(0.4);
Int_t nbin=25; Int_t min=0, max=100; for(Int_t icounter=1;icounter<=NUMPIXEL;icounter++){ tmpentry.Form("htmpa%d", icounter); htmpa[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpb%d", icounter); htmpb[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpc%d", icounter); htmpc[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); htmpa[icounter - 1]->SetLineColor(kBlue); htmpb[icounter - 1]->SetLineColor(kRed); htmpc[icounter - 1]->SetLineColor(kRed); title.Form("Run %d ADC pmt %d, paddle %d: %d < tdc < %d",run,pmt,icounter,tdc_min,tdc_min+tdc_width); htmpa[icounter - 1]->SetTitle(title); htmpb[icounter - 1]->SetTitle(title); htmpc[icounter - 1]->SetTitle(title); }
Int_t nentries=n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++){
T->GetEntry(id);
for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipaddle = (pmt-1)*NUMPIXEL+index-1; htmpa[index-1]->Fill(adc_c[ipaddle]); if(tdcl[ipaddle]>tdc_min&&tdcl[ipaddle]<tdc_min+tdc_width){ htmpb[index-1]->Fill(adc_c[ipaddle]); } } }
cADCMEANRATIO->Clear();
//plot histos Int_t icount=0;
cADCMEANRATIO->cd();
Double_t mean[NUMPADDLE]={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; Double_t sigma[NUMPADDLE]={1,1,1,1,1,1,1,1,1,1,1,1,1,1}; Double_t paddle[NUMPADDLE]={1,2,3,4,5,6,7,8,9,10,11,12,13,14}; Double_t epaddle[NUMPADDLE]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
TF1 *myfit = new TF1("myfit","1.0-0.5*ROOT::Math::erfc((x-[0])/[1])",0,1); myfit->SetParName(0,"Mean"); myfit->SetParName(1,"Width");
for (Int_t i=0; i<NUMPIXEL; i++){
if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
htmpb[i]->SetStats(0);
myfit->SetParameter(0,40.0); myfit->SetParameter(1,10.0); htmpc[i] = (TH1D*)htmpb[i]->Clone(); htmpc[i]->Divide(htmpa[i]); htmpc[i]->Fit("myfit");
Int_t numentries = htmpc[i]->GetEntries(); mean[icount]=myfit->GetParameter(0); //sigma[icount]=myfit->GetParameter(1)/sqrt(numentries); sigma[icount]=myfit->GetParameter(1);
icount++;
}
}
gr = new TGraphErrors(NUMPADDLE,paddle,mean,epaddle,sigma); gr->SetMarkerStyle(21); gr->GetXaxis()->SetTitle("Paddle Number"); gr->GetYaxis()->SetTitle("50% Threshold (Good TDC)");
gr->GetHistogram()->SetMaximum(100); gr->GetHistogram()->SetMinimum(0);
gr->Draw("AP");
cADCMEANRATIO->Update();
title.Form("run_%d_ADCMEANRATIO_pmt_%d_tdc_min_%d_max_%d.png", run,pmt,tdc_min,tdc_min+tdc_width); cADCMEANRATIO->Print(title); cADCMEANRATIO->cd(); return cADCMEANRATIO;
}
TCanvas *plot_mean_adc(Int_t pmt=1, Int_t tdc_min=750, Int_t tdc_width=200){
TString cut, draw, draw1, title; title.Form("run_%d_ADCMean",run); TCanvas *cADCMean= new TCanvas("cADCMean",title,xcanvas,ycanvas);
TH1D *htmpa[NUMPIXEL];//=new TH1D("htmp","htmp",nbin,min,max);
TString tmpentry; MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.6); MyStyle->SetStatW(0.4);
Int_t nbin=600; Int_t min=-100, max=1000; for(Int_t icounter=1;icounter<=NUMPIXEL;icounter++){ tmpentry.Form("htmpa%d", icounter); htmpa[icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); title.Form("Run %d ADC pmt %d, paddle %d: %d < tdc < %d",run,pmt,icounter,tdc_min,tdc_min+tdc_width); htmpa[icounter - 1]->SetTitle(title); }
Int_t nentries=n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++){ T->GetEntry(id);
for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipaddle = (pmt-1)*NUMPIXEL+index-1; if(tdcl[ipaddle]>tdc_min&&tdcl[ipaddle]<tdc_min+tdc_width){ htmpa[index-1]->Fill(adc_c[ipaddle]); } } }
cADCMean->Clear();
//plot histos Int_t icount=0; cADCMean->cd();
Double_t mean[NUMPIXEL]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; Double_t sigma[NUMPIXEL]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
Double_t pixel[NUMPIXEL]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
Double_t epixel[NUMPIXEL]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Double_t mmean[2]={0,0}; Double_t msigma[2]={1,1}; Double_t mpixel[2]={0,0}; Double_t mepixel[2]={0,0}; mpixel[0]=pixel1[pmt-1]; mpixel[1]=pixel2[pmt-1];
Double_t yline[2]={100,100}; Double_t xline[2]={0,17};
for (Int_t i=0; i<NUMPIXEL; i++){
if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
Int_t entries = htmpa[i]->GetEntries(); mean[i] = htmpa[i]->GetMean(1); sigma[i] = htmpa[i]->GetRMS(1)/sqrt(entries); cout << i+1 << " "<< entries <<" "<< mean[i] <<" "<< sigma[i] <<endl; icount++;
}
}
gr = new TGraphErrors(NUMPIXEL,pixel,mean,epixel,sigma); gr->SetMarkerStyle(21); gr->GetXaxis()->SetTitle("Pixel Number"); gr->GetYaxis()->SetTitle("Mean ADC (Good TDC)"); gr2 = new TGraphErrors(2,mpixel,mmean,mepixel,msigma); gr2->SetMarkerStyle(21); gr2->SetMarkerColor(3); gr3 = new TGraph(2,xline,yline); gr3->SetLineColor(3); gr3->SetLineWidth(4);
gr->Draw("AP"); gr2->Draw("P"); gr3->Draw("L");
cADCMean->Update();
title.Form("run_%d_ADCMean_pmt_%d_tdc_min_%d_max_%d.png", run,pmt,tdc_min,tdc_min+tdc_width); cADCMean->Print(title); cADCMean->cd(0); return cADCMean;
}
TCanvas *calibrate_adc(Int_t ped = 1, Int_t tdc_min=750, Int_t tdc_width=200){
TString cut, draw, draw1, title; title.Form("run_%d_ADCCalibrate",run); TCanvas *cADCCalib= new TCanvas("cADCCalib",title,xcanvas,ycanvas);
TH1D *htmpa[NUMPMT][NUMPIXEL];//=new TH1D("htmp","htmp",nbin,min,max); TH1D *htmpb[NUMPMT][NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max); TH1D *htmpc[NUMPMT][NUMPIXEL];//=new TH1D("htmp1","htmp1",nbin,min,max);
TString tmpentry; MyStyle->SetStatX(0.9); MyStyle->SetStatY(0.6); MyStyle->SetStatW(0.4);
Int_t nbin=600; Int_t min=-100, max=1000;
for (Int_t pmt=1; pmt<=NUMPMT; pmt++){
for(Int_t icounter=1;icounter<=NUMPIXEL;icounter++){ tmpentry.Form("htmpa_%d_%d", pmt,icounter); htmpa[pmt-1][icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpb_%d_%d", pmt,icounter); htmpb[pmt-1][icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); tmpentry.Form("htmpc_%d_%d", pmt,icounter); htmpc[pmt-1][icounter - 1] = new TH1D(tmpentry,tmpentry,nbin,min,max); htmpa[pmt-1][icounter - 1]->SetLineColor(kBlue); htmpb[pmt-1][icounter - 1]->SetLineColor(kRed); htmpc[pmt-1][icounter - 1]->SetLineColor(kGreen); title.Form("Run %d ADC pmt %d, paddle %d: %d < tdc < %d",run,pmt,icounter,tdc_min,tdc_min+tdc_width); htmpa[pmt-1][icounter - 1]->SetTitle(title); htmpb[pmt-1][icounter - 1]->SetTitle(title); htmpc[pmt-1][icounter - 1]->SetTitle(title); }
}
Int_t nentries=n_events_to_analyze;
for (Int_t id=1;id<=nentries;id++){ T->GetEntry(id);
for (Int_t pmt=1; pmt<=NUMPMT; pmt++){ for (Int_t index=1; index<=NUMPIXEL; index++){ Int_t ipaddle = (pmt-1)*NUMPIXEL+index-1; htmpa[pmt-1][index-1]->Fill(adc[ipaddle]); if(tdcl[ipaddle]<tdc_min||tdcl[ipaddle]>tdc_min+tdc_width){ htmpb[pmt-1][index-1]->Fill(adc[ipaddle]); }else{ htmpc[pmt-1][index-1]->Fill(adc[ipaddle]); } } } }
cADCCalib->Clear();
cADCCalib->Divide(4,4);
//plot histos
for (Int_t pmt=1; pmt<=NUMPMT; pmt++){
Int_t icount=0; for (Int_t i=0; i<NUMPIXEL; i++){
//if(i != pixel1[pmt-1]-1 && i != pixel2[pmt-1]-1) {
//cout<<"into loop 2, i = " << i << endl;
cADCCalib->cd( icount + 1 ); gPad->SetLogy();
cADCCalib->Update(); Int_t entries = htmpb[pmt-1][i]->GetEntries(); float mean = htmpb[pmt-1][i]->GetMean(1); float RMS = htmpb[pmt-1][i]->GetRMS(1);
Int_t imean = mean;
float mean2 = htmpc[pmt-1][i]->GetMean(1); float gain;
if (mean2-mean > 2.0){ gain = 100.0/(mean2-mean); }else{ gain = 1.0; }
//cout << entries <<" "<< mean <<" "<< RMS <<endl; if (ped == 1){
if(pmt==1&&i==0) cout << "C.cdetm1r.ped = "; cout << imean << " "; }else{ if(pmt==1&&i==0) cout << "C.cdetm1r.gain = "; cout << gain << " "; }
htmpa[pmt-1][i]->SetStats(0); //current->Modified(); htmpa[pmt-1][i]->Draw(); htmpb[pmt-1][i]->Draw("same"); htmpc[pmt-1][i]->Draw("same");
icount++;
//}
}
cout << endl; }
title.Form("run_%d_ADCCalib_tdc_min_%d_max_%d.png", run,tdc_min,tdc_min+tdc_width); cADCCalib->Print(title); cADCCalib->cd(0); return cADCCalib;
}===