#include "TFile.h" #include "TCanvas.h" #include "TH1F.h" #include "TF1.h" #include #include #include Double_t myFullFitFunction(Double_t *x, Double_t *par) { Double_t value = par[0]+par[1]*exp(-x[0]/par[2])+par[3]*exp(-x[0]/par[4]); return value; } double calibratedADC_500k_adc11(float adc_cout) { // return time in us return 13.5*adc_cout/1000.; } void readData() { gStyle->SetOptFit(kTRUE); //std::string fileNameString = "/afs/le.infn.it/user/s/spagnolo/html/LabFNSN/aa2018-2019/muLifetime/Cal_del10680ns_500k.dat"; //std::string fileNameString = "/afs/le.infn.it/user/s/spagnolo/html/LabFNSN/aa2018-2019/muLifetime/Cal_del20000ns_500k.dat"; std::string fileNameString = "/afs/le.infn.it/user/s/spagnolo/html/LabFNSN/aa2018-2019/muLifetime/muLifeTime_500k_0605.dat"; ifstream inputFile; //abilita la lettura da file (input File Stream) TCanvas* ct11; // canvas per il tempo del adc 11 TCanvas* cadc[12]; // array di 12 puntatori a Canvas (tavolozze) TH1F* hadc[12]; // array di 12 puntatory a TH1F (istogrammi) TH1F* ht11; // array di 12 puntatory a TH1F (istogrammi) ht11 = new TH1F("t11","t11",100,0.,30.); ct11 = new TCanvas("t11","t11",800,600); std::string htit; // stringa utile per definire il nome dell'istogramma float adc_min = -0.5; float adc_max = 1999.5; int nbin_adc = 2000; float adc_binw = adc_max-adc_min; adc_binw = adc_binw/float(nbin_adc); //int nbin_t = nbin_adc; //float t_binw = t_max - t_min; //t_binw = t_binw/float(nbin_t); for (int j=0;j<12;++j) { htit="ADC_channel_"; ostringstream aa; // output_string_stream //from sstream aa<"<> evn >> timeSinceJan1970 >> timeSinceStart >> timeSinceLast; for (int j=0;j<12;++j) aLineStream >> adc_val[j]; /// get all 12 adc values //std::cout<<" adc_values = "; for (int j=0;j<12;++j) { //std::cout<<" "<Fill( float( adc_val[j] ) ); } double time = calibratedADC_500k_adc11(float( adc_val[11])) ; ht11->Fill(time); ++evc; if (evc%100==0) // se il resto della divisione per 100 di evc e' uguale a 0 ...... { cadc[11]->cd(); hadc[11]->Draw(); cadc[11]->Update(); std::cout<<"n. of lines read so far is "<cd(); hadc[j]->Draw(); } ct11->cd(); ht11->Draw(); double lowerLimit = 1.; double upperLimit = 20.; int npar = 5; TF1 *f1 = new TF1("f1",myFullFitFunction,lowerLimit,upperLimit,npar); //3 è il numero dei parametri e tf1 è un oggetto usato per i fit f1->SetParName(0,"constant"); f1->SetParName(1,"normShort"); f1->SetParName(2,"tauShort"); f1->SetParName(3,"normLong"); f1->SetParName(4,"tauLong"); f1->SetParameter(0,500.); f1->SetParameter(1,1000.); f1->SetParameter(2,.250); f1->SetParameter(3,1000.); f1->SetParameter(4,2.); ht11->Fit("f1","R"); return; }