14 void Init(Int_t n, Float_t mean, Float_t sigma);
35 Float_t
Moment3(Float_t sum1, Float_t sum2, Float_t sum3, Int_t n, Float_t m[3]);
57 Float_t pos = sumi1/
sum;
59 m[1] = sumi2/sum-pos*pos;
64 m[1] = TMath::Sqrt(m[1]);
65 m3 = (sumi3-3*pos*sumi2+3*pos*pos*sumi1-pos*pos*pos*
sum)/sum;
66 Float_t sign = m3/TMath::Abs(m3);
67 m3 = TMath::Power(sign*m3,1/3.);
78 Float_t * buffer =
new Float_t[
fNSample];
82 if (buffer[i]>1000) buffer[i]=1000;
86 TMath::Sort(fNSample,buffer,index,kFALSE);
89 Float_t median = buffer[index[fNSample/3]];
91 Float_t sum06[4] = {0.,0.,0.,0.};
92 Float_t sum07[4] = {0.,0.,0.,0.};
93 Float_t sum08[4] = {0.,0.,0.,0.};
94 Float_t sum010[4] = {0.,0.,0.,0.};
96 Float_t suml06[4] = {0.,0.,0.,0.};
97 Float_t suml07[4] = {0.,0.,0.,0.};
98 Float_t suml08[4] = {0.,0.,0.,0.};
99 Float_t suml010[4] = {0.,0.,0.,0.};
103 Float_t amp = buffer[index[i]];
104 Float_t lamp = median*TMath::Log(1.+amp/median);
108 sum06[2]+= amp*amp*amp;
111 suml06[1]+= lamp*lamp;
112 suml06[2]+= lamp*lamp*lamp;
119 sum07[2]+= amp*amp*amp;
122 suml07[1]+= lamp*lamp;
123 suml07[2]+= lamp*lamp*lamp;
129 sum08[2]+= amp*amp*amp;
132 suml08[1]+= lamp*lamp;
133 suml08[2]+= lamp*lamp*lamp;
139 sum010[2]+= amp*amp*amp;
142 suml010[1]+= lamp*lamp;
143 suml010[2]+= lamp*lamp*lamp;
174 TFile
f(
"Landau.root",
"recreate");
175 TTree *
tree =
new TTree(
"Landau",
"Landau");
176 tree->Branch(
"Landau",
"TLandauMean",&landau);
178 for (Int_t i=0;i<nsamples;i++){
179 Int_t n = 20 + Int_t(gRandom->Rndm()*150);
180 Float_t mean = 40. +gRandom->Rndm()*50.;
181 Float_t sigma = 5. +gRandom->Rndm()*15.;
182 landau->
Init(n, mean, sigma);
195 TH1F *
LandauTest(Float_t meano, Float_t sigma, Float_t meanlog0, Int_t n,Float_t ratio)
204 TCanvas * pad =
new TCanvas(
"Landau test");
206 TH1F * h1 =
new TH1F(
"h1",
"Logarithmic mean",300,0,4*meano);
207 TH1F * h2 =
new TH1F(
"h2",
"Logarithmic amplitudes",300,0,8*meano);
208 TH1F * h3 =
new TH1F(
"h3",
"Mean",300,0,4*meano);
209 TH1F * h4 =
new TH1F(
"h4",
"Amplitudes",300,0,8*meano);
211 for(Int_t j=0;j<10000;j++){
213 Float_t * buffer =
new Float_t[n];
214 Float_t * buffer2=
new Float_t[n];
216 for (Int_t i=0;i<n;i++) {
217 buffer[i] = gRandom->Landau(meano,sigma);
218 buffer2[i] = buffer[i];
221 for (Int_t i=1;i<n-1;i++) {
222 buffer[i] = buffer2[i]*1.0+ buffer2[i-1]*0.0+ buffer2[i+1]*0.0;
223 buffer[i] = TMath::Min(buffer[i],1000.);
225 Int_t *index =
new Int_t[n];
226 TMath::Sort(n,buffer,index,kFALSE);
233 for (Int_t i=0;i<n*ratio;i++) {
234 if (buffer[index[i]]<1000.){
235 Float_t amp = meanlog0*TMath::Log(1+buffer[index[i]]/meanlog0);
245 Float_t meanlog =meanlog0;
246 for (Int_t i=0;i<n*ratio;i++) {
247 if (buffer[index[i]]<1000.){
248 Float_t amp = meanlog*TMath::Log(1.+buffer[index[i]]/(meanlog));
250 sum2+=buffer[index[i]];
253 h4->Fill(buffer[index[i]]);
257 mean = (TMath::Exp(mean/meanlog)-1)*meanlog;
258 Float_t mean2 = sum2/used;
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
void Init(Int_t n, Float_t mean, Float_t sigma)
Double_t landau(Double_t *xp, Double_t *pp)
TH1F * LandauTest(Float_t meano, Float_t sigma, Float_t meanlog0, Int_t n, Float_t ratio)
void GenerLandau(Int_t nsamples)
Float_t Moment3(Float_t sum1, Float_t sum2, Float_t sum3, Int_t n, Float_t m[3])