#include <stdio.h>
#include <stdlib.h>
#include <TROOT.h>
#include <TH1D.h>
#include <TH1F.h>
#include <TH2D.h>
#include <TH2F.h>
#include <TH2I.h>
#include <TCanvas.h>
#include <TStyle.h>
#include <TSystem.h>
#include <TFile.h>
#include <TDirectory.h>
#include <TPaveText.h>
#include <TSpectrum.h>
#include <TF1.h>
#include <algorithm>
#include "base.h"
#include "fit.h"
int fit(int kanal) {
GRID m = mapping();
char name[128];
sprintf(name
,"hcharge0_0;%d",m.
pozicijaPixla[kanal
]+1);
TF1 * g0, * g1, * g2, * g3;
float gain;
float mean1, sigma1, mean2;
TH1D * h = (TH1D *) gDirectory->Get(name);
h->GetXaxis()->SetRangeUser(-50,300);
h->Draw();
TSpectrum * s = new TSpectrum(4);
int nfound = s->Search(h);
float * xpeaks = s->GetPositionX();
//SORTIRANJE
for(int i=0; i<nfound;i++){
}
float* first(&xpeaks[0]);
float* last(first + nfound);
std::sort(first, last);
for(int i=0; i<nfound;i++){
}
for (int p=0;p<nfound;p++) {
float xp = xpeaks[p];
printf("Vrh številka %d je na poziciji %f\n",p
,xp
);
if(p==0) {
g0 = new TF1("0ph","gaus",xp-14,xp+14);
h->Fit(g0,"QR");
//g0->GetParameters(&par[0]);
} else if(p==1) {
g1 = new TF1("1ph","gaus",xp-14,xp+14);
h->Fit(g1,"QR+");
//g1->GetParameters(&par[3]);
} else if(p==2) {
g2 = new TF1("2ph","gaus",xp-14,xp+14);
h->Fit(g2,"QR+");
//g2->GetParameters(&par[6]);
} else {
g3 = new TF1("3ph","gaus",xp-14,xp+14);
h->Fit(g3,"QR+");
//g3->GetParameters(&par[9]);
}
}
if(nfound >= 1){
mean1 = g0->GetParameter(1);
sigma1 = g0->GetParameter(2);
if (sigma1<7) gain = 0;
else gain = 30;
} else {
gain = 0;
}
if(nfound > 1){
mean2 = g1->GetParameter(1);
printf("%f \t %f\n", mean1
, mean2
);
if (mean1<mean2) gain = mean2 - mean1;
else gain = mean1 - mean2;
printf("nfound: %d \t gain: %.1f \t mean1: %.1f \t sigma1: %.1f \t mean2: %.1f\n", nfound
, gain
, mean1
, sigma1
, mean2
);
}
delete s;
return gain;
}
/*
for (int p=0;p<nfound;p++) {
float xp = xpeaks[p];
printf("Vrh številka %d je na poziciji %f\n",p,xp);
if(p==0) {
TF1 * g0 = new TF1("0ph","gaus",xp-14,xp+14);
h->Fit(g0,"QR");
g0->GetParameters(&par[0]);
delete g0;
} else if(p==1) {
TF1 * g1 = new TF1("1ph","gaus",xp-14,xp+14);
h->Fit(g1,"QR+");
g1->GetParameters(&par[3]);
delete g1;
} else if(p==2) {
TF1 * g2 = new TF1("2ph","gaus",xp-14,xp+14);
h->Fit(g2,"QR+");
g2->GetParameters(&par[6]);
delete g2;
} else {
TF1 * g3 = new TF1("3ph","gaus",xp-14,xp+14);
h->Fit(g3,"QR+");
g3->GetParameters(&par[9]);
delete g3;
}
}
if(nfound==1) total = new TF1("mstotal","gaus(0)",xpeaks[0]-14,xpeaks[0]+14);
else if(nfound==2) total = new TF1("mstotal","gaus(0)+gaus(3)",xpeaks[0]-14,xpeaks[1]+14);
else if(nfound==3) total = new TF1("mstotal","gaus(0)+gaus(3)+gaus(6)",xpeaks[0]-14,xpeaks[2]+14);
else total = new TF1("mstotal","gaus(0)+gaus(3)+gaus(6)+gaus(9)",xpeaks[0]-14,xpeaks[3]+14);
total->SetParameters(par);
h->Fit(total,"QR0+");
float mean1 = total->GetParameter(1);
//float error1 = total->GetParError(1);
float sigma1 = total->GetParameter(2);
float mean2 = total->GetParameter(4);
//float error2 = total->GetParError(4);
*/
/*
int test(int channel) {
char name[128];
sprintf(name,"hcharge2_0;%d",channel);
TH1D *h=(TH1D *) gDirectory->Get(name);
//h->Draw("");
double par[12];
TSpectrum *s = new TSpectrum(4);
int nfound = s->Search(h,10);
//printf("Found %d candidate peaks to fit\n",nfound);
float *xpeaks = s->GetPositionX();
TF1 *g0 = new TF1("0ph","gaus",xpeaks[0]-3,xpeaks[0]+3);
h->Fit(g0,"QR");
g0->GetParameters(&par[0]);
TF1 *g1 = new TF1("1ph","gaus",xpeaks[1]-3,xpeaks[1]+3);
h->Fit(g1,"QR+");
g1->GetParameters(&par[3]);
//Float_t gainErr = sRt((error1/mean1)*(error1/mean1)+(error2/mean2)*(error2/mean2))
delete s;
return nfound;
}*/