Subversion Repositories f9daq

Rev

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

  1. #include "TROOT.h"
  2. #include "TFile.h"
  3. #include "TBenchmark.h"
  4. #include "TH1F.h"
  5. #include "TH2F.h"
  6. gROOT->Reset();
  7.  
  8. #include "TCanvas.h"
  9. #include "TStyle.h"
  10. #include "TPad.h"
  11. #include "TF1.h"
  12. #include "TGraph.h"
  13. #include "TSpectrum.h"
  14.  
  15. #include "DrootHelper.cpp"
  16.  
  17.                        
  18. #define NCH 2
  19.  
  20. //-------------------------------------------------------------------------------------
  21.  
  22. void SetGS() {
  23.   const UInt_t Number = 2;
  24.   Double_t Red[Number]   = {0.00, 1.00};
  25.   Double_t Green[Number] = {0.00, 1.00};
  26.   Double_t Blue[Number]  = {0.00, 1.00};
  27.   Double_t Stops[Number] = {0.00, 1.00};
  28.  
  29.   Int_t nb=50;
  30.   TColor::CreateGradientColorTable(Number, Stops, Red, Green, Blue, nb);
  31. }
  32.  
  33.  
  34. //-------------------------------------------------------------------------------------
  35. Double_t ConstantStep(Double_t x)
  36. {
  37.         if(x<=0) return 0.;
  38.         else return 1.;
  39. }
  40.  
  41. // =======================================================================================================
  42.  
  43. void plotCorTDC(TH1F *hp1d, char *hTitle, double fitmin, double fitmax, double drawmin, double drawmax)
  44. {
  45.         char sbuff[256];
  46.        
  47.         TLegend *leg1 = new TLegend(0.57,0.76,0.88,0.88);      
  48.         leg1->SetFillColor(0);
  49.         leg1->SetBorderSize(1);
  50.         leg1->SetTextSize(0.05);
  51.         leg1->SetTextAlign(22);
  52.  
  53.         //gStyle->SetOptFit(111);
  54.         sprintf(sbuff, "%s;Time[ns];", hTitle);
  55.         hp1d->SetTitle(sbuff);
  56.         //~ hp1d->GetXaxis()->SetRangeUser(2*fitmin, 2*fitmax);
  57.         hp1d->GetXaxis()->SetRangeUser(drawmin, drawmax);
  58.         //~ hcTDC->DrawClone();
  59.  
  60.         //~ TF1 *fs = new TF1("fs","pol0(0) + gaus(1)");
  61.        
  62.         TF1 *fs = new TF1("fs","gaus(0) + ([3]*exp((x)/[4]) + [5]) * (0.5+0.5*TMath::Erf((x-[6])/[7]))");
  63.         fs->SetParName(0, "G_Const"); fs->SetParName(1, "G_Mean"); fs->SetParName(2, "G_Sigma");
  64.         fs->SetParName(3, "Exp_p0"); fs->SetParName(4, "Exp_p1"); fs->SetParName(5, "Exp_p2");
  65.         fs->SetParName(6, "Erf_p0"); fs->SetParName(7, "Erf_p1");
  66. //~
  67.         TF1 *fg1 = new TF1("fg1", "gaus(0)"); fg1->SetNpx(400);
  68.         TF1 *fe1 = new TF1("fe1", "[0]*exp((x)/[1]) + [2]");
  69.         TF1 *ferf1 = new TF1("ferf1", "[0]*(0.5+0.5*TMath::Erf((x-[1])/[2]))");
  70.         TF1 *fe1erf = new TF1("fe1erf", "([0]*exp((x)/[1]) + [2]) * (0.5+0.5*TMath::Erf((x-[3])/[4]))"); fe1erf->SetNpx(400);
  71.  
  72.         double fitampl = hp1d->GetMaximum();
  73.         double fitcenter = hp1d->GetBinCenter(hp1d->GetMaximumBin());
  74.  
  75.         fs->SetNpx(400);
  76.         fs->SetParameters(fitampl, fitcenter, 0.01,   1e2, -0.1, 1e1,   0, 0.05);
  77.        
  78.         // G + Er + Ex                 
  79.         //fs->SetParLimits( 1, -0.1, 0.1);
  80.         //fs->SetParLimits( 2, 0.018, 0.5);
  81.         fs->SetParLimits( 4, -0.3, 0);
  82.         //fs->SetParLimits( 6, -1e-1, 1e-1);
  83.         fs->SetParLimits( 7, 0.04, 0.6);
  84.        
  85.         //~ // G
  86.         //~ fs->SetParameters(fitampl/100., fitampl, fitcenter, 0.01);
  87.        
  88.         hp1d->Fit(fs,"Q","",fitmin, fitmax);
  89.  
  90.         //~ printf("Chi / NDF = %lf/%lf\n", fs->GetChisquare(), fs->GetNDF());
  91.  
  92.         fg1->SetParameters(fs->GetParameter(0), fs->GetParameter(1), fs->GetParameter(2));
  93.         //~ fe1->SetParameters(fs->GetParameter(3), fs->GetParameter(4), fs->GetParameter(5));
  94.         //~ ferf1->SetParameters(1e4, fs->GetParameter(6), fs->GetParameter(7));
  95.         fe1erf->SetParameters(fs->GetParameter(3), fs->GetParameter(4), fs->GetParameter(5), fs->GetParameter(6), fs->GetParameter(7));
  96.  
  97.         fg1->SetLineColor(kRed);    fg1->SetLineWidth(1); fg1->SetLineStyle(1); fg1->SetRange(fitmin, fitmax); fg1->DrawCopy("SAME");
  98.         //~ fe1->SetLineColor(kBlue);   fe1->SetLineWidth(1); fe1->SetLineStyle(1); fe1->SetRange(fitmin, fitmax); fe1->DrawCopy("SAME");
  99.         //~ ferf1->SetLineColor(kYellow); ferf1->SetLineWidth(1);ferf1->SetLineStyle(1);ferf1->SetRange(fitmin, fitmax);ferf1->DrawCopy("SAME");
  100.         fe1erf->SetLineColor(kBlue); fe1erf->SetLineWidth(1);fe1erf->SetLineStyle(1);fe1erf->SetRange(fitmin, fitmax);fe1erf->DrawCopy("SAME");
  101.  
  102.         double HalfMax = fitampl/2.0;
  103.         double MinHalfMax = fs->GetX(HalfMax, -0.5, fitcenter);
  104.         double MaxHalfMax = fs->GetX(HalfMax, fitcenter, 1.5);
  105.         double FWHM = MaxHalfMax - MinHalfMax;
  106.         double sigmaFWHM = fs->GetParameter(2);
  107.         printf("Corrected %s resolution FWHM = %.1lf [ps]\n", hTitle, FWHM*1000);
  108.         //~ fprintf(fp,"%lf ", FWHM*1000);
  109.  
  110.         sprintf(sbuff, "FWHM = %.0lf ps", FWHM*1000);
  111.         leg1->AddEntry((TF1*)fs->Clone(),sbuff, "L");
  112.         leg1->Draw();
  113. }
  114.  
  115. // =======================================================================================================
  116.  
  117. 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)
  118. {
  119.     char sbuff[256];
  120.    
  121.         char *fitopt="crystal1";
  122.         double inmin=-10;
  123.          double inmax=10;
  124.         double Ecut_lo = 450.;
  125.   double Ecut_hi = 625.;
  126.  
  127.  
  128.         int printeps = 0;
  129.         int printgif=-1, double fitlo=1.0, double fithi=1.0;
  130.         int ch=0;
  131.         char fullname[256];
  132.        
  133.         //get ROOT file with histograms
  134.         char fnameroot[1024];
  135.         TFile * rootfile;
  136.         TDirectory *dir;
  137.        
  138.         sprintf(fnameroot, "root/%s.root", fname);
  139.         rootfile = (TFile *) gROOT->FindObject(fname);
  140.         if(rootfile==NULL) rootfile = new TFile(fnameroot);
  141.         if(rootfile==NULL) {
  142.           printf("Cannot open root file %s!!!\n",fnameroot);
  143.           return;
  144.         }
  145.         dir = (TDirectory*) rootfile;
  146.        
  147.         DrSetDrawStyle();
  148.  
  149.   TCanvas *c[64];
  150.   int cc=-1;
  151.   char hname[256], htitle[256];
  152.   TH1F *hp1d, *hp1dcut; TH2F *hp2d;
  153.  
  154.   TLegend *leg[64];
  155.   int legi = -1;
  156.   TH1F *legentry[64];
  157.   int legentryi = -1;
  158.  
  159.   TGraph *graph[16];
  160.         int igraph=-1;
  161.  
  162.   int colarr[20] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, kOrange, 10,11,12,13,14,15,16,17,18,19};
  163.   int legsty[] = {1,7,2,3,9,6,9,5,6};
  164.  
  165.   TF1 *fg = new TF1("fg", "gaus"); fg->SetNpx(300);
  166.    
  167.         TF1 *fgg = new TF1("fgg", "gaus(0)+gaus(3)"); fg->SetNpx(300);
  168.         fgg->SetParName(0,"G1_Const"); fgg->SetParName(3,"G2_Const");
  169.         fgg->SetParName(1,"G1_Mean" ); fgg->SetParName(4,"G2_Mean" );
  170.         fgg->SetParName(2,"G1_Sigma"); fgg->SetParName(5,"G2_Sigma");
  171.        
  172.         TF1 *fg3 = new TF1("fg3", "gaus(0)+gaus(3)+gaus(6)"); fg3->SetNpx(300);
  173.         fg3->SetParName(0,"G1_Const"); fg3->SetParName(3,"G2_Const"); fg3->SetParName(6,"G3_Const");
  174.         fg3->SetParName(1,"G1_Mean" ); fg3->SetParName(4,"G2_Mean" ); fg3->SetParName(7,"G3_Mean" );
  175.         fg3->SetParName(2,"G1_Sigma"); fg3->SetParName(5,"G2_Sigma"); fg3->SetParName(8,"G3_Sigma");
  176.        
  177.         TF1 *fg4 = new TF1("fg4", "gaus(0)+gaus(3)+gaus(6)+gaus(9)"); fg4->SetNpx(300);
  178.         fg4->SetParName(0,"G1_Const"); fg4->SetParName(3,"G2_Const"); fg4->SetParName(6,"G3_Const"); fg4->SetParName(9,"G4_Const");
  179.         fg4->SetParName(1,"G1_Mean" ); fg4->SetParName(4,"G2_Mean" ); fg4->SetParName(7,"G3_Mean" ); fg4->SetParName(10,"G4_Mean" );
  180.         fg4->SetParName(2,"G1_Sigma"); fg4->SetParName(5,"G2_Sigma"); fg4->SetParName(8,"G3_Sigma"); fg4->SetParName(11,"G4_Sigma");
  181.        
  182.         TF1 *fg5 = new TF1("fg5", "gaus(0)+gaus(3)+gaus(6)+gaus(9)+gaus(12)"); fg5->SetNpx(300);
  183.         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");
  184.         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" );
  185.         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");
  186.    
  187. // ------------------------------------------------------------------- 
  188.  
  189.     if( strchr(plopt, 'a') != NULL ) {
  190.        
  191.         //~ gStyle->SetOptStat(1111);  
  192.         gStyle->SetOptStat(0); 
  193.         gStyle->SetOptFit(0);  
  194.        
  195.         c[++cc] = new TCanvas("a", "a", 0, 0, 1600, 900);
  196.                 c[cc]->Divide(2,2);
  197.        
  198.         int draw_cuts = 0;
  199.                 int chmap[] = {0,1,2,31};
  200.                
  201.         for(int ich = 0;ich<4;ich++) {
  202.                         (c[cc]->cd(ich+1))->SetLogy(1);
  203.             sprintf(hname, "hadc%d", chmap[ich]);
  204.             hp1d = DrTH1F(dir, hname, "");
  205.             sprintf(htitle, "ADC%d;ADC;Count", chmap[ich]); hp1d->SetTitle(htitle);
  206.             //~ hp1d->GetXaxis()->SetRangeUser(0,2000);
  207.             //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
  208.             hp1d->SetLineColor(kBlack);
  209.             hp1d->DrawClone();
  210.            
  211.             if(draw_cuts) {
  212.                 sprintf(hname, "hadc_cut%d", chmap[ich]);
  213.                 hp1dcut = DrTH1F(dir, hname, "");
  214.                 hp1dcut->SetLineColor(kRed);
  215.                 hp1dcut->DrawClone("SAME");
  216.             }
  217.                 }
  218.                        
  219.         sprintf(fullname, "gif/%s_a.gif", fname);  c[cc]->SaveAs(fullname);
  220.     }
  221.    
  222. // ------------------------------------------------------------------- 
  223.  
  224.     if( strchr(plopt, 't') != NULL ) {
  225.        
  226.         gStyle->SetOptStat(1111);      
  227.         //~ gStyle->SetOptStat(0);     
  228.         gStyle->SetOptFit(0);  
  229.        
  230.         c[++cc] = new TCanvas("t", "t", 0, 0, 1600, 900);
  231.                 c[cc]->Divide(2,2);
  232.        
  233.         int draw_cuts = 0;
  234.                 int chmap[] = {0,1,2,31};
  235.                
  236.         for(int ich = 0;ich<4;ich++) {
  237.                         (c[cc]->cd(ich+1))->SetLogy(1);
  238.             sprintf(hname, "htdc%d", chmap[ich]);
  239.             hp1d = DrTH1F(dir, hname, "");
  240.             sprintf(htitle, "TDC%d - TRIGGER;Time [ns];Count", chmap[ich]); hp1d->SetTitle(htitle);
  241.             hp1d->GetXaxis()->SetRangeUser(-50,50);
  242.             //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
  243.             hp1d->SetLineColor(kBlack);
  244.             hp1d->DrawClone();
  245.            
  246.             if(draw_cuts) {
  247.                 sprintf(hname, "htdc_cut%d", chmap[ich]);
  248.                 hp1dcut = DrTH1F(dir, hname, "");
  249.                 hp1dcut->SetLineColor(kRed);
  250.                 hp1dcut->DrawClone("SAME");
  251.             }
  252.                 }
  253.                        
  254.         sprintf(fullname, "gif/%s_t.gif", fname);  c[cc]->SaveAs(fullname);
  255.     }
  256.    
  257. // ------------------------------------------------------------------- 
  258.  
  259.     if( strchr(plopt, 'f') != NULL ) {
  260.        
  261.         gStyle->SetOptStat(1111);      
  262.         //~ gStyle->SetOptStat(0);     
  263.         gStyle->SetOptFit(0);  
  264.        
  265.         c[++cc] = new TCanvas("f", "f", 0, 0, 1600, 900);
  266.                 c[cc]->Divide(2,2);
  267.        
  268.         int draw_cuts = 0;
  269.                 int chmap[] = {0,1,2,31};
  270.                
  271.         for(int ich = 0;ich<4;ich++) {
  272.                         (c[cc]->cd(ich+1))->SetLogy(1);
  273.             sprintf(hname, "hctdc%d", chmap[ich]);
  274.             hp1d = DrTH1F(dir, hname, "");
  275.             sprintf(htitle, "corTDC%d - TRIGGER;Time [ns];Count", chmap[ich]); hp1d->SetTitle(htitle);
  276.             hp1d->GetXaxis()->SetRangeUser(-30,30);
  277.             //~ hp1d->GetYaxis()->SetRangeUser(0.9,hp1d->GetMaximum()*1.1);
  278.             hp1d->SetLineColor(kBlack);
  279.             hp1d->DrawClone();
  280.            
  281.             if(draw_cuts) {
  282.                 sprintf(hname, "hctdc_cut%d", chmap[ich]);
  283.                 hp1dcut = DrTH1F(dir, hname, "");
  284.                 hp1dcut->SetLineColor(kRed);
  285.                 hp1dcut->DrawClone("SAME");
  286.             }
  287.                 }
  288.                        
  289.         sprintf(fullname, "gif/%s_f.gif", fname);  c[cc]->SaveAs(fullname);
  290.     }
  291.    
  292. // ------------------------------------------------------------------- 
  293.  
  294.     if( strchr(plopt, 'c') != NULL ) {
  295.        
  296.         //gStyle->SetOptStat(1111);    
  297.         gStyle->SetOptStat(0); 
  298.         gStyle->SetOptFit(0);  
  299.        
  300.         c[++cc] = new TCanvas("c", "c", 0, 0, 1600, 900);
  301.                 c[cc]->Divide(2,2);
  302.        
  303.         int draw_cuts = 0;
  304.                 int chmap[] = {0,1,2,31};
  305.                
  306.         for(int ich = 0;ich<4;ich++) {
  307.                         (c[cc]->cd(ich+1))->SetLogz(1);
  308.             sprintf(hname, "hcor%d", chmap[ich]);
  309.             hp2d = DrTH2F(dir, hname, "");
  310.             sprintf(htitle, "TDC%d - TRIGGER;ADC;Time [ns];Count", chmap[ich]); hp2d->SetTitle(htitle);
  311.             hp2d->GetXaxis()->SetRangeUser(0,2048);
  312.             hp2d->DrawClone("COLZ");
  313.                 }
  314.                        
  315.         sprintf(fullname, "gif/%s_c.gif", fname);  c[cc]->SaveAs(fullname);
  316.     }
  317. //~ // -------------------------------------------------------------------     
  318.  
  319.     //~ if( strchr(plopt, 'c') != NULL ) {
  320.        
  321.         gStyle->SetOptStat(1111);      
  322.         //~ gStyle->SetOptStat(0);     
  323.         //~ gStyle->SetOptFit(0);      
  324.        
  325.         //~ c[++cc] = new TCanvas("c", "c", 0, 0, 1600, 900);
  326.        
  327.         //~ int draw_cuts = 0;
  328.                
  329.         //~ int ich = chich;
  330.                         //~ (c[cc]->cd(1))->SetLogz(1);
  331.             //~ sprintf(hname, "hcor%d", ich);
  332.             //~ hp2d = DrTH2F(dir, hname, "");
  333.             //~ sprintf(htitle, "TDC%d - TRIGGER;ADC;Time [ns];Count", ich); hp2d->SetTitle(htitle);
  334.             //~ hp2d->GetXaxis()->SetRangeUser(512,2048);
  335.             //~ hp2d->GetYaxis()->SetRangeUser(-10,20);
  336.             //~ hp2d->DrawClone("COLZ");
  337.                
  338.                        
  339.         //~ sprintf(fullname, "gif/%s_c.gif", fname);  c[cc]->SaveAs(fullname);
  340.     //~ }
  341.    
  342. // ------------------------------------------------------------------- 
  343. }
  344.