-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmultiFit.py
75 lines (60 loc) · 2.38 KB
/
multiFit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env python
# encoding: utf-8
"""
multiFit.py
Created by Sam Cook on 2011-02-24.
Copyright (c) 2011 __MyCompanyName__. All rights reserved.
"""
# Fitting multiple functions to different ranges of a 1-D histogram
# To see the output of this macro, click begin_html <a href="gif/multifit.gif" >here</a> end_html
# Example showing how to fit in a sub-range of an histogram
# An histogram is created and filled with the bin contents and errors
# defined in the table below.
# 3 gaussians are fitted in sub-ranges of this histogram.
# A new function (a sum of 3 gaussians) is fitted on another subrange
# Note that when fitting simple functions, such as gaussians, the initial
# values of parameters are automatically computed by ROOT.
# In the more complicated case of the sum of 3 gaussians, the initial values
# of parameters must be given. In this particular case, the initial values
# are taken from the result of the individual fits.
# Author: Rene Brun
from ROOT import *
from time import sleep
def main():
np = 49;
x = [1.913521, 1.953769, 2.347435, 2.883654, 3.493567,
4.047560, 4.337210, 4.364347, 4.563004, 5.054247,
5.194183, 5.380521, 5.303213, 5.384578, 5.563983,
5.728500, 5.685752, 5.080029, 4.251809, 3.372246,
2.207432, 1.227541, 0.8597788,0.8220503,0.8046592,
0.7684097,0.7469761,0.8019787,0.8362375,0.8744895,
0.9143721,0.9462768,0.9285364,0.8954604,0.8410891,
0.7853871,0.7100883,0.6938808,0.7363682,0.7032954,
0.6029015,0.5600163,0.7477068,1.188785, 1.938228,
2.602717, 3.472962, 4.465014, 5.177035]
h = TH1F("h","Example of several fits in subranges",np,85,134)
h.SetMaximum(7)
for i in range(np):
h.SetBinContent(i+1,x[i])
h.Draw()
par = []
g1 = TF1("g1","gaus",85,95)
g2 = TF1("g2","gaus",98,108)
g3 = TF1("g3","gaus",110,121)
total = TF1("total","gaus(0)+gaus(3)+gaus(6)",85,125)
total.SetLineColor(2)
h.Fit(g1,"R")
h.Fit(g2,"R+")
h.Fit(g3,"R+")
par = []
par.append(g1.GetParameters())
par.append(g2.GetParameters())
par.append(g3.GetParameters())
# print par
for i in range (3):
for j in range (3):
total.FixParameter(j, par[i][j])
h.Fit(total,"R+")
sleep(60)
if __name__ == '__main__':
main()