@@ -21,42 +21,6 @@ class MoreFitter {
2121 }
2222 }
2323
24- static F1D gausFit (H1F h1 , String opts ) {
25- def f1 = new F1D(' fit:' + h1. getName(), ' [amp]*gaus(x,[mean],[sigma])' , 0 ,1 )
26-
27- def scale = Math . max(h1. getBinContent(h1. getMaximumBin())/ 500 , 1 )
28- def data = (1 .. < h1. getDataSize(0 )). collectMany{[h1. getDataX(it)]* (h1. getBinContent(it)/ scale as int )}
29- int nlen = data. size()
30- if (nlen== 0 ) {
31- f1. setParameters(0 ,h1. getDataX(0 ),0 )
32- return f1
33- }
34-
35- def (q1,q2,q3) = [data[nlen/ 4 as int], data[nlen/ 2 as int ], data[nlen* 3 / 4 as int ]]
36- def (x1,x2) = [1 , h1. getDataSize(0 )-1 ]. collect{h1. getDataX(it)}
37- def norms = [h1. getBinContent(h1. getMaximumBin())]
38- def mus = [h1. getAxis(). getBinCenter(h1. getMaximumBin()), h1. getMean(), q2, h1. getDataX(h1. getDataSize(0 )/ 2 as int )]
39- def sigs = [h1. getRMS()/ 2, (q3-q1)/ 1.35 ]
40-
41- def makefit = {amp ,mu ,sig ->
42- f1. setParameters(amp,mu,sig)
43- def rng = [mu-2.5 * sig, mu+2.5 * sig]
44- f1. setRange(* rng)
45- DataFitter . fit(f1,h1,opts)
46- (amp,mu,sig) = (0 .. < f1. getNPars()). collect{f1. getParameter(it)}
47- if (mu< x1 || mu> x2 || sig> (x2- x1)) return null
48- return [f1. getChiSquare(), [amp,mu,sig], rng]
49- }
50-
51- def fits = [norms,mus,sigs]. combinations(). findResults{makefit(it)}
52- fits + = fits. findResults{makefit(it[1 ])}
53-
54- def best = fits. min{it[0 ]} ?: [0 , [0 ,x1,x2- x1], [x1,x2]]
55- f1. setParameters(* best[1 ])
56- f1. setRange(* best[2 ])
57- return f1
58- }
59-
6024 static F1D fitgaus (H1F h1 ) {
6125 def f1 = new F1D(' fit:' + h1. getName(), ' [amp]*gaus(x,[mean],[sigma])' , 0 ,1 )
6226 f1. setRange(h1. getDataX(0 ), h1. getDataX(h1. getDataSize(0 )-1 ))
0 commit comments