Subversion Repositories f9daq

Rev

Rev 291 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "TROOT.h"
#include "TFile.h"
#include "TBenchmark.h"
#include "TH1F.h"
#include "TH2F.h"
gROOT->Reset();

#include "TCanvas.h"
#include "TStyle.h"
#include "TPad.h"
#include "TF1.h"
#include "TGraph.h"
#include "TSpectrum.h"

#include "DrootHelper.cpp"

                       
#define NCH 2

//-------------------------------------------------------------------------------------

void SetGS() {
  const UInt_t Number = 2;
  Double_t Red[Number]   = {0.00, 1.00};
  Double_t Green[Number] = {0.00, 1.00};
  Double_t Blue[Number]  = {0.00, 1.00};
  Double_t Stops[Number] = {0.00, 1.00};
 
  Int_t nb=50;
  TColor::CreateGradientColorTable(Number, Stops, Red, Green, Blue, nb);
}


//-------------------------------------------------------------------------------------
Double_t ConstantStep(Double_t x)
{
        if(x<=0) return 0.;
        else return 1.;
}

// =======================================================================================================

void plotCorTDC(TH1F *hp1d, char *hTitle, double fitmin, double fitmax, double drawmin, double drawmax)
{
        char sbuff[256];
       
        TLegend *leg1 = new TLegend(0.57,0.76,0.88,0.88);      
        leg1->SetFillColor(0);
        leg1->SetBorderSize(1);
        leg1->SetTextSize(0.05);
        leg1->SetTextAlign(22);

        //gStyle->SetOptFit(111);
        sprintf(sbuff, "%s;Time[ns];", hTitle);
        hp1d->SetTitle(sbuff);
        //~ hp1d->GetXaxis()->SetRangeUser(2*fitmin, 2*fitmax);
        hp1d->GetXaxis()->SetRangeUser(drawmin, drawmax);
        //~ hcTDC->DrawClone();

        //~ TF1 *fs = new TF1("fs","pol0(0) + gaus(1)");
       
        TF1 *fs = new TF1("fs","gaus(0) + ([3]*exp((x)/[4]) + [5]) * (0.5+0.5*TMath::Erf((x-[6])/[7]))");
        fs->SetParName(0, "G_Const"); fs->SetParName(1, "G_Mean"); fs->SetParName(2, "G_Sigma");
        fs->SetParName(3, "Exp_p0"); fs->SetParName(4, "Exp_p1"); fs->SetParName(5, "Exp_p2");
        fs->SetParName(6, "Erf_p0"); fs->SetParName(7, "Erf_p1");
//~
        TF1 *fg1 = new TF1("fg1", "gaus(0)"); fg1->SetNpx(400);
        TF1 *fe1 = new TF1("fe1", "[0]*exp((x)/[1]) + [2]");
        TF1 *ferf1 = new TF1("ferf1", "[0]*(0.5+0.5*TMath::Erf((x-[1])/[2]))");
        TF1 *fe1erf = new TF1("fe1erf", "([0]*exp((x)/[1]) + [2]) * (0.5+0.5*TMath::Erf((x-[3])/[4]))"); fe1erf->SetNpx(400);

        double fitampl = hp1d->GetMaximum();
        double fitcenter = hp1d->GetBinCenter(hp1d->GetMaximumBin());

        fs->SetNpx(400);
        fs->SetParameters(fitampl, fitcenter, 0.01,   1e2, -0.1, 1e1,   0, 0.05);
       
        // G + Er + Ex                 
        //fs->SetParLimits( 1, -0.1, 0.1);
        //fs->SetParLimits( 2, 0.018, 0.5);
        fs->SetParLimits( 4, -0.3, 0);
        //fs->SetParLimits( 6, -1e-1, 1e-1);
        fs->SetParLimits( 7, 0.04, 0.6);
       
        //~ // G
        //~ fs->SetParameters(fitampl/100., fitampl, fitcenter, 0.01);
       
        hp1d->Fit(fs,"Q","",fitmin, fitmax);

        //~ printf("Chi / NDF = %lf/%lf\n", fs->GetChisquare(), fs->GetNDF());

        fg1->SetParameters(fs->GetParameter(0), fs->GetParameter(1), fs->GetParameter(2));
        //~ fe1->SetParameters(fs->GetParameter(3), fs->GetParameter(4), fs->GetParameter(5));
        //~ ferf1->SetParameters(1e4, fs->GetParameter(6), fs->GetParameter(7));
        fe1erf->SetParameters(fs->GetParameter(3), fs->GetParameter(4), fs->GetParameter(5), fs->GetParameter(6), fs->GetParameter(7));

        fg1->SetLineColor(kRed);    fg1->SetLineWidth(1); fg1->SetLineStyle(1); fg1->SetRange(fitmin, fitmax); fg1->DrawCopy("SAME");
        //~ fe1->SetLineColor(kBlue);   fe1->SetLineWidth(1); fe1->SetLineStyle(1); fe1->SetRange(fitmin, fitmax); fe1->DrawCopy("SAME");
        //~ ferf1->SetLineColor(kYellow); ferf1->SetLineWidth(1);ferf1->SetLineStyle(1);ferf1->SetRange(fitmin, fitmax);ferf1->DrawCopy("SAME");
        fe1erf->SetLineColor(kBlue); fe1erf->SetLineWidth(1);fe1erf->SetLineStyle(1);fe1erf->SetRange(fitmin, fitmax);fe1erf->DrawCopy("SAME");

        double HalfMax = fitampl/2.0;
        double MinHalfMax = fs->GetX(HalfMax, -0.5, fitcenter);
        double MaxHalfMax = fs->GetX(HalfMax, fitcenter, 1.5);
        double FWHM = MaxHalfMax - MinHalfMax;
        double sigmaFWHM = fs->GetParameter(2);
        printf("Corrected %s resolution FWHM = %.1lf [ps]\n", hTitle, FWHM*1000);
        //~ fprintf(fp,"%lf ", FWHM*1000);

        sprintf(sbuff, "FWHM = %.0lf ps", FWHM*1000);
        leg1->AddEntry((TF1*)fs->Clone(),sbuff, "L");
        leg1->Draw();
}

// =======================================================================================================

void plots2(char *fname="480", char *plopt="d", int chich=0, double fitcenter = 1190., double fitw = 70., double comhi_range_hi = 2100., int batch_q=0)
{
    char sbuff[256];
   
        char *fitopt="crystal1";
        double inmin=-10;
         double inmax=10;
        double Ecut_lo = 450.;
  double Ecut_hi = 625.;
 
 
        int printeps = 0;
        int printgif=-1, double fitlo=1.0, double fithi=1.0;
        int ch=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;
        }
        dir = (TDirectory*) rootfile;
       
        DrSetDrawStyle();

  TCanvas *c[64];
  int cc=-1;
  char hname[256], htitle[256];
  TH1F *hp1d, *hp1dcut; TH2F *hp2d;
 
  TLegend *leg[64];
  int legi = -1;
  TH1F *legentry[64];
  int legentryi = -1;
 
  TGraph *graph[16];
        int igraph=-1;
 
  int colarr[20] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, kOrange, 10,11,12,13,14,15,16,17,18,19};
  int legsty[] = {1,7,2,3,9,6,9,5,6};
 
  TF1 *fg = new TF1("fg", "gaus"); fg->SetNpx(300);
   
        TF1 *fgg = new TF1("fgg", "gaus(0)+gaus(3)"); fg->SetNpx(300);
        fgg->SetParName(0,"G1_Const"); fgg->SetParName(3,"G2_Const");
        fgg->SetParName(1,"G1_Mean" ); fgg->SetParName(4,"G2_Mean" );
        fgg->SetParName(2,"G1_Sigma"); fgg->SetParName(5,"G2_Sigma");
       
        TF1 *fg3 = new TF1("fg3", "gaus(0)+gaus(3)+gaus(6)"); fg3->SetNpx(300);
        fg3->SetParName(0,"G1_Const"); fg3->SetParName(3,"G2_Const"); fg3->SetParName(6,"G3_Const");
        fg3->SetParName(1,"G1_Mean" ); fg3->SetParName(4,"G2_Mean" ); fg3->SetParName(7,"G3_Mean" );
        fg3->SetParName(2,"G1_Sigma"); fg3->SetParName(5,"G2_Sigma"); fg3->SetParName(8,"G3_Sigma");
       
        TF1 *fg4 = new TF1("fg4", "gaus(0)+gaus(3)+gaus(6)+gaus(9)"); fg4->SetNpx(300);
        fg4->SetParName(0,"G1_Const"); fg4->SetParName(3,"G2_Const"); fg4->SetParName(6,"G3_Const"); fg4->SetParName(9,"G4_Const");
        fg4->SetParName(1,"G1_Mean" ); fg4->SetParName(4,"G2_Mean" ); fg4->SetParName(7,"G3_Mean" ); fg4->SetParName(10,"G4_Mean" );
        fg4->SetParName(2,"G1_Sigma"); fg4->SetParName(5,"G2_Sigma"); fg4->SetParName(8,"G3_Sigma"); fg4->SetParName(11,"G4_Sigma");
       
        TF1 *fg5 = new TF1("fg5", "gaus(0)+gaus(3)+gaus(6)+gaus(9)+gaus(12)"); fg5->SetNpx(300);
        fg5->SetParName(0,"G1_Const"); fg5->SetParName(3,"G2_Const"); fg5->SetParName(6,"G3_Const"); fg5->SetParName(9,"G4_Const");  fg5->SetParName(12,"G5_Const");
        fg5->SetParName(1,"G1_Mean" ); fg5->SetParName(4,"G2_Mean" ); fg5->SetParName(7,"G3_Mean" ); fg5->SetParName(10,"G4_Mean" ); fg5->SetParName(13,"G5_Mean" );
        fg5->SetParName(2,"G1_Sigma"); fg5->SetParName(5,"G2_Sigma"); fg5->SetParName(8,"G3_Sigma"); fg5->SetParName(11,"G4_Sigma"); fg5->SetParName(14,"G5_Sigma");
   
// ------------------------------------------------------------------- 

    if( strchr(plopt, 'a') != NULL ) {
       
        //~ gStyle->SetOptStat(1111);  
        gStyle->SetOptStat(0); 
        gStyle->SetOptFit(0);  
       
        c[++cc] = new TCanvas("a", "a", 0, 0, 1600, 900);
                c[cc]->Divide(2,2);
       
        int draw_cuts = 0;
                int chmap[] = {0,1,2,31};
               
        for(int ich = 0;ich<4;ich++) {
                        (c[cc]->cd(ich+1))->SetLogy(1);
            sprintf(hname, "hadc%d", chmap[ich]);
            hp1d = DrTH1F(dir, hname, "");
            sprintf(htitle, "ADC%d;ADC;Count", chmap[ich]); hp1d->SetTitle(htitle);
            //~ hp1d->GetXaxis()->SetRangeUser(0,2000);
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
            hp1d->SetLineColor(kBlack);
            hp1d->DrawClone();
           
            if(draw_cuts) {
                sprintf(hname, "hadc_cut%d", chmap[ich]);
                hp1dcut = DrTH1F(dir, hname, "");
                hp1dcut->SetLineColor(kRed);
                hp1dcut->DrawClone("SAME");
            }
                }
                       
        sprintf(fullname, "gif/%s_a.gif", fname);  c[cc]->SaveAs(fullname);
    }
   
// ------------------------------------------------------------------- 

    if( strchr(plopt, 't') != NULL ) {
       
        gStyle->SetOptStat(1111);      
        //~ gStyle->SetOptStat(0);     
        gStyle->SetOptFit(0);  
       
        c[++cc] = new TCanvas("t", "t", 0, 0, 1600, 900);
                c[cc]->Divide(2,2);
       
        int draw_cuts = 0;
                int chmap[] = {0,1,2,31};
               
        for(int ich = 0;ich<4;ich++) {
                        (c[cc]->cd(ich+1))->SetLogy(1);
            sprintf(hname, "htdc%d", chmap[ich]);
            hp1d = DrTH1F(dir, hname, "");
            sprintf(htitle, "TDC%d - TRIGGER;Time [ns];Count", chmap[ich]); hp1d->SetTitle(htitle);
            hp1d->GetXaxis()->SetRangeUser(-50,50);
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
            hp1d->SetLineColor(kBlack);
            hp1d->DrawClone();
           
            if(draw_cuts) {
                sprintf(hname, "htdc_cut%d", chmap[ich]);
                hp1dcut = DrTH1F(dir, hname, "");
                hp1dcut->SetLineColor(kRed);
                hp1dcut->DrawClone("SAME");
            }
                }
                       
        sprintf(fullname, "gif/%s_t.gif", fname);  c[cc]->SaveAs(fullname);
    }
   
// ------------------------------------------------------------------- 

    if( strchr(plopt, 'f') != NULL ) {
       
        gStyle->SetOptStat(1111);      
        //~ gStyle->SetOptStat(0);     
        gStyle->SetOptFit(0);  
       
        c[++cc] = new TCanvas("f", "f", 0, 0, 1600, 900);
                c[cc]->Divide(2,2);
       
        int draw_cuts = 0;
                int chmap[] = {0,1,2,31};
               
        for(int ich = 0;ich<4;ich++) {
                        (c[cc]->cd(ich+1))->SetLogy(1);
            sprintf(hname, "hctdc%d", chmap[ich]);
            hp1d = DrTH1F(dir, hname, "");
            sprintf(htitle, "corTDC%d - TRIGGER;Time [ns];Count", chmap[ich]); hp1d->SetTitle(htitle);
            hp1d->GetXaxis()->SetRangeUser(-30,30);
            //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
            hp1d->SetLineColor(kBlack);
            hp1d->DrawClone();
           
            if(draw_cuts) {
                sprintf(hname, "hctdc_cut%d", chmap[ich]);
                hp1dcut = DrTH1F(dir, hname, "");
                hp1dcut->SetLineColor(kRed);
                hp1dcut->DrawClone("SAME");
            }
                }
                       
        sprintf(fullname, "gif/%s_f.gif", fname);  c[cc]->SaveAs(fullname);
    }
   
// ------------------------------------------------------------------- 

    if( strchr(plopt, 'c') != NULL ) {
       
        //gStyle->SetOptStat(1111);    
        gStyle->SetOptStat(0); 
        gStyle->SetOptFit(0);  
       
        c[++cc] = new TCanvas("c", "c", 0, 0, 1600, 900);
                c[cc]->Divide(2,2);
       
        int draw_cuts = 0;
                int chmap[] = {0,1,2,31};
               
        for(int ich = 0;ich<4;ich++) {
                        (c[cc]->cd(ich+1))->SetLogz(1);
            sprintf(hname, "hcor%d", chmap[ich]);
            hp2d = DrTH2F(dir, hname, "");
            sprintf(htitle, "TDC%d - TRIGGER;ADC;Time [ns];Count", chmap[ich]); hp2d->SetTitle(htitle);
            hp2d->GetXaxis()->SetRangeUser(0,2048);
            hp2d->DrawClone("COLZ");
                }
                       
        sprintf(fullname, "gif/%s_c.gif", fname);  c[cc]->SaveAs(fullname);
    }
//~ // -------------------------------------------------------------------     

    //~ if( strchr(plopt, 'c') != NULL ) {
       
        gStyle->SetOptStat(1111);      
        //~ gStyle->SetOptStat(0);     
        //~ gStyle->SetOptFit(0);      
       
        //~ c[++cc] = new TCanvas("c", "c", 0, 0, 1600, 900);
       
        //~ int draw_cuts = 0;
               
        //~ int ich = chich;
                        //~ (c[cc]->cd(1))->SetLogz(1);
            //~ sprintf(hname, "hcor%d", ich);
            //~ hp2d = DrTH2F(dir, hname, "");
            //~ sprintf(htitle, "TDC%d - TRIGGER;ADC;Time [ns];Count", ich); hp2d->SetTitle(htitle);
            //~ hp2d->GetXaxis()->SetRangeUser(512,2048);
            //~ hp2d->GetYaxis()->SetRangeUser(-10,20);
            //~ hp2d->DrawClone("COLZ");
               
                       
        //~ sprintf(fullname, "gif/%s_c.gif", fname);  c[cc]->SaveAs(fullname);
    //~ }
   
// ------------------------------------------------------------------- 
}