CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
rootTf1.h
Go to the documentation of this file.
1 #ifndef PhysicsTools_Utilities_rootTf1_h
2 #define PhysicsTools_Utilities_rootTf1_h
5 #include "TF1.h"
6 
7 namespace root {
8 
9  template<typename Tag, typename F>
10  TF1 tf1_t(const char * name, F& f, double min, double max) {
11  TF1 fun(name, root::function_t<1, Tag>(f), min, max, 0);
12  return fun;
13  }
14 
15  template<typename F>
16  TF1 tf1(const char * name, F& f, double min, double max) {
17  return tf1_t<helper::null_t>(name, f, min, max);
18  }
19 
20  template<typename Tag, typename F>
21  TF1 tf1_t(const char * name, F& f, double min, double max,
22  const funct::Parameter & p0) {
23  TF1 fun(name, root::function_t<1, Tag>(f, p0), min, max, 1);
24  fun.SetParameter(0, *p0.ptr());
25  fun.SetParName(0, p0.name().c_str());
26  return fun;
27  }
28 
29  template<typename F>
30  TF1 tf1(const char * name, F& f, double min, double max,
31  const funct::Parameter & p0) {
32  return tf1_t<helper::null_t>(name, f, min, max, p0);
33  }
34 
35  template<typename Tag, typename F>
36  TF1 tf1_t(const char * name, F& f, double min, double max,
37  const funct::Parameter & p0,
38  const funct::Parameter & p1) {
39  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1), min, max, 2);
40  fun.SetParameter(0, *p0.ptr());
41  fun.SetParName(0, p0.name().c_str());
42  fun.SetParameter(1, *p1.ptr());
43  fun.SetParName(1, p1.name().c_str());
44  return fun;
45  }
46 
47  template<typename F>
48  TF1 tf1(const char * name, F& f, double min, double max,
49  const funct::Parameter & p0,
50  const funct::Parameter & p1) {
51  return tf1_t<helper::null_t>(name, f, min, max, p0, p1);
52  }
53 
54  template<typename Tag, typename F>
55  TF1 tf1_t(const char * name, F& f, double min, double max,
56  const funct::Parameter & p0,
57  const funct::Parameter & p1,
58  const funct::Parameter & p2) {
59  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2), min, max, 3);
60  fun.SetParameter(0, *p0.ptr());
61  fun.SetParName(0, p0.name().c_str());
62  fun.SetParameter(1, *p1.ptr());
63  fun.SetParName(1, p1.name().c_str());
64  fun.SetParameter(2, *p2.ptr());
65  fun.SetParName(2, p2.name().c_str());
66  return fun;
67  }
68 
69  template<typename F>
70  TF1 tf1(const char * name, F& f, double min, double max,
71  const funct::Parameter & p0,
72  const funct::Parameter & p1,
73  const funct::Parameter & p2) {
74  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2);
75  }
76 
77  template<typename Tag, typename F>
78  TF1 tf1_t(const char * name, F& f, double min, double max,
79  const funct::Parameter & p0,
80  const funct::Parameter & p1,
81  const funct::Parameter & p2,
82  const funct::Parameter & p3) {
83  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3), min, max, 4);
84  fun.SetParameter(0, *p0.ptr());
85  fun.SetParName(0, p0.name().c_str());
86  fun.SetParameter(1, *p1.ptr());
87  fun.SetParName(1, p1.name().c_str());
88  fun.SetParameter(2, *p2.ptr());
89  fun.SetParName(2, p2.name().c_str());
90  fun.SetParameter(3, *p3.ptr());
91  fun.SetParName(3, p3.name().c_str());
92  return fun;
93  }
94 
95  template<typename F>
96  TF1 tf1(const char * name, F& f, double min, double max,
97  const funct::Parameter & p0,
98  const funct::Parameter & p1,
99  const funct::Parameter & p2,
100  const funct::Parameter & p3) {
101  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3);
102  }
103 
104  template<typename Tag, typename F>
105  TF1 tf1_t(const char * name, F& f, double min, double max,
106  const funct::Parameter & p0,
107  const funct::Parameter & p1,
108  const funct::Parameter & p2,
109  const funct::Parameter & p3,
110  const funct::Parameter & p4) {
111  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4), min, max, 5);
112  fun.SetParameter(0, *p0.ptr());
113  fun.SetParName(0, p0.name().c_str());
114  fun.SetParameter(1, *p1.ptr());
115  fun.SetParName(1, p1.name().c_str());
116  fun.SetParameter(2, *p2.ptr());
117  fun.SetParName(2, p2.name().c_str());
118  fun.SetParameter(3, *p3.ptr());
119  fun.SetParName(3, p3.name().c_str());
120  fun.SetParameter(4, *p4.ptr());
121  fun.SetParName(4, p4.name().c_str());
122  return fun;
123  }
124 
125  template<typename F>
126  TF1 tf1(const char * name, F& f, double min, double max,
127  const funct::Parameter & p0,
128  const funct::Parameter & p1,
129  const funct::Parameter & p2,
130  const funct::Parameter & p3,
131  const funct::Parameter & p4) {
132  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4);
133  }
134 
135  template<typename Tag, typename F>
136  TF1 tf1_t(const char * name, F& f, double min, double max,
137  const funct::Parameter & p0,
138  const funct::Parameter & p1,
139  const funct::Parameter & p2,
140  const funct::Parameter & p3,
141  const funct::Parameter & p4,
142  const funct::Parameter & p5) {
143  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5), min, max, 6);
144  fun.SetParameter(0, *p0.ptr());
145  fun.SetParName(0, p0.name().c_str());
146  fun.SetParameter(1, *p1.ptr());
147  fun.SetParName(1, p1.name().c_str());
148  fun.SetParameter(2, *p2.ptr());
149  fun.SetParName(2, p2.name().c_str());
150  fun.SetParameter(3, *p3.ptr());
151  fun.SetParName(3, p3.name().c_str());
152  fun.SetParameter(4, *p4.ptr());
153  fun.SetParName(4, p4.name().c_str());
154  fun.SetParameter(5, *p5.ptr());
155  fun.SetParName(5, p5.name().c_str());
156  return fun;
157  }
158 
159  template<typename F>
160  TF1 tf1(const char * name, F& f, double min, double max,
161  const funct::Parameter & p0,
162  const funct::Parameter & p1,
163  const funct::Parameter & p2,
164  const funct::Parameter & p3,
165  const funct::Parameter & p4,
166  const funct::Parameter & p5) {
167  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5);
168  }
169 
170  template<typename Tag, typename F>
171  TF1 tf1_t(const char * name, F& f, double min, double max,
172  const funct::Parameter & p0,
173  const funct::Parameter & p1,
174  const funct::Parameter & p2,
175  const funct::Parameter & p3,
176  const funct::Parameter & p4,
177  const funct::Parameter & p5,
178  const funct::Parameter & p6) {
179  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6), min, max, 7);
180  fun.SetParameter(0, *p0.ptr());
181  fun.SetParName(0, p0.name().c_str());
182  fun.SetParameter(1, *p1.ptr());
183  fun.SetParName(1, p1.name().c_str());
184  fun.SetParameter(2, *p2.ptr());
185  fun.SetParName(2, p2.name().c_str());
186  fun.SetParameter(3, *p3.ptr());
187  fun.SetParName(3, p3.name().c_str());
188  fun.SetParameter(4, *p4.ptr());
189  fun.SetParName(4, p4.name().c_str());
190  fun.SetParameter(5, *p5.ptr());
191  fun.SetParName(5, p5.name().c_str());
192  fun.SetParameter(6, *p6.ptr());
193  fun.SetParName(6, p6.name().c_str());
194  return fun;
195  }
196 
197  template<typename F>
198  TF1 tf1(const char * name, F& f, double min, double max,
199  const funct::Parameter & p0,
200  const funct::Parameter & p1,
201  const funct::Parameter & p2,
202  const funct::Parameter & p3,
203  const funct::Parameter & p4,
204  const funct::Parameter & p5,
205  const funct::Parameter & p6) {
206  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6);
207  }
208 
209  template<typename Tag, typename F>
210  TF1 tf1_t(const char * name, F& f, double min, double max,
211  const funct::Parameter & p0,
212  const funct::Parameter & p1,
213  const funct::Parameter & p2,
214  const funct::Parameter & p3,
215  const funct::Parameter & p4,
216  const funct::Parameter & p5,
217  const funct::Parameter & p6,
218  const funct::Parameter & p7) {
219  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7), min, max, 8);
220  fun.SetParameter(0, *p0.ptr());
221  fun.SetParName(0, p0.name().c_str());
222  fun.SetParameter(1, *p1.ptr());
223  fun.SetParName(1, p1.name().c_str());
224  fun.SetParameter(2, *p2.ptr());
225  fun.SetParName(2, p2.name().c_str());
226  fun.SetParameter(3, *p3.ptr());
227  fun.SetParName(3, p3.name().c_str());
228  fun.SetParameter(4, *p4.ptr());
229  fun.SetParName(4, p4.name().c_str());
230  fun.SetParameter(5, *p5.ptr());
231  fun.SetParName(5, p5.name().c_str());
232  fun.SetParameter(6, *p6.ptr());
233  fun.SetParName(6, p6.name().c_str());
234  fun.SetParameter(7, *p7.ptr());
235  fun.SetParName(7, p7.name().c_str());
236  return fun;
237  }
238 
239  template<typename F>
240  TF1 tf1(const char * name, F& f, double min, double max,
241  const funct::Parameter & p0,
242  const funct::Parameter & p1,
243  const funct::Parameter & p2,
244  const funct::Parameter & p3,
245  const funct::Parameter & p4,
246  const funct::Parameter & p5,
247  const funct::Parameter & p6,
248  const funct::Parameter & p7) {
249  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7);
250  }
251 
252  template<typename Tag, typename F>
253  TF1 tf1_t(const char * name, F& f, double min, double max,
254  const funct::Parameter & p0,
255  const funct::Parameter & p1,
256  const funct::Parameter & p2,
257  const funct::Parameter & p3,
258  const funct::Parameter & p4,
259  const funct::Parameter & p5,
260  const funct::Parameter & p6,
261  const funct::Parameter & p7,
262  const funct::Parameter & p8) {
263  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8), min, max, 9);
264  fun.SetParameter(0, *p0.ptr());
265  fun.SetParName(0, p0.name().c_str());
266  fun.SetParameter(1, *p1.ptr());
267  fun.SetParName(1, p1.name().c_str());
268  fun.SetParameter(2, *p2.ptr());
269  fun.SetParName(2, p2.name().c_str());
270  fun.SetParameter(3, *p3.ptr());
271  fun.SetParName(3, p3.name().c_str());
272  fun.SetParameter(4, *p4.ptr());
273  fun.SetParName(4, p4.name().c_str());
274  fun.SetParameter(5, *p5.ptr());
275  fun.SetParName(5, p5.name().c_str());
276  fun.SetParameter(6, *p6.ptr());
277  fun.SetParName(6, p6.name().c_str());
278  fun.SetParameter(7, *p7.ptr());
279  fun.SetParName(7, p7.name().c_str());
280  fun.SetParameter(8, *p8.ptr());
281  fun.SetParName(8, p8.name().c_str());
282  return fun;
283  }
284 
285  template<typename F>
286  TF1 tf1(const char * name, F& f, double min, double max,
287  const funct::Parameter & p0,
288  const funct::Parameter & p1,
289  const funct::Parameter & p2,
290  const funct::Parameter & p3,
291  const funct::Parameter & p4,
292  const funct::Parameter & p5,
293  const funct::Parameter & p6,
294  const funct::Parameter & p7,
295  const funct::Parameter & p8) {
296  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8);
297  }
298 
299  template<typename Tag, typename F>
300  TF1 tf1_t(const char * name, F& f, double min, double max,
301  const funct::Parameter & p0,
302  const funct::Parameter & p1,
303  const funct::Parameter & p2,
304  const funct::Parameter & p3,
305  const funct::Parameter & p4,
306  const funct::Parameter & p5,
307  const funct::Parameter & p6,
308  const funct::Parameter & p7,
309  const funct::Parameter & p8,
310  const funct::Parameter & p9) {
311  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), min, max, 10);
312  fun.SetParameter(0, *p0.ptr());
313  fun.SetParName(0, p0.name().c_str());
314  fun.SetParameter(1, *p1.ptr());
315  fun.SetParName(1, p1.name().c_str());
316  fun.SetParameter(2, *p2.ptr());
317  fun.SetParName(2, p2.name().c_str());
318  fun.SetParameter(3, *p3.ptr());
319  fun.SetParName(3, p3.name().c_str());
320  fun.SetParameter(4, *p4.ptr());
321  fun.SetParName(4, p4.name().c_str());
322  fun.SetParameter(5, *p5.ptr());
323  fun.SetParName(5, p5.name().c_str());
324  fun.SetParameter(6, *p6.ptr());
325  fun.SetParName(6, p6.name().c_str());
326  fun.SetParameter(7, *p7.ptr());
327  fun.SetParName(7, p7.name().c_str());
328  fun.SetParameter(8, *p8.ptr());
329  fun.SetParName(8, p8.name().c_str());
330  fun.SetParameter(9, *p9.ptr());
331  fun.SetParName(9, p9.name().c_str());
332  return fun;
333  }
334 
335  template<typename F>
336  TF1 tf1(const char * name, F& f, double min, double max,
337  const funct::Parameter & p0,
338  const funct::Parameter & p1,
339  const funct::Parameter & p2,
340  const funct::Parameter & p3,
341  const funct::Parameter & p4,
342  const funct::Parameter & p5,
343  const funct::Parameter & p6,
344  const funct::Parameter & p7,
345  const funct::Parameter & p8,
346  const funct::Parameter & p9) {
347  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
348  }
349 
350  template<typename Tag, typename F>
351  TF1 tf1_t(const char * name, F& f, double min, double max,
352  const funct::Parameter & p0,
353  const funct::Parameter & p1,
354  const funct::Parameter & p2,
355  const funct::Parameter & p3,
356  const funct::Parameter & p4,
357  const funct::Parameter & p5,
358  const funct::Parameter & p6,
359  const funct::Parameter & p7,
360  const funct::Parameter & p8,
361  const funct::Parameter & p9,
362  const funct::Parameter & p10) {
363  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), min, max, 11);
364  fun.SetParameter(0, *p0.ptr());
365  fun.SetParName(0, p0.name().c_str());
366  fun.SetParameter(1, *p1.ptr());
367  fun.SetParName(1, p1.name().c_str());
368  fun.SetParameter(2, *p2.ptr());
369  fun.SetParName(2, p2.name().c_str());
370  fun.SetParameter(3, *p3.ptr());
371  fun.SetParName(3, p3.name().c_str());
372  fun.SetParameter(4, *p4.ptr());
373  fun.SetParName(4, p4.name().c_str());
374  fun.SetParameter(5, *p5.ptr());
375  fun.SetParName(5, p5.name().c_str());
376  fun.SetParameter(6, *p6.ptr());
377  fun.SetParName(6, p6.name().c_str());
378  fun.SetParameter(7, *p7.ptr());
379  fun.SetParName(7, p7.name().c_str());
380  fun.SetParameter(8, *p8.ptr());
381  fun.SetParName(8, p8.name().c_str());
382  fun.SetParameter(9, *p9.ptr());
383  fun.SetParName(9, p9.name().c_str());
384  fun.SetParameter(10, *p10.ptr());
385  fun.SetParName(10, p10.name().c_str());
386  return fun;
387  }
388 
389  template<typename F>
390  TF1 tf1(const char * name, F& f, double min, double max,
391  const funct::Parameter & p0,
392  const funct::Parameter & p1,
393  const funct::Parameter & p2,
394  const funct::Parameter & p3,
395  const funct::Parameter & p4,
396  const funct::Parameter & p5,
397  const funct::Parameter & p6,
398  const funct::Parameter & p7,
399  const funct::Parameter & p8,
400  const funct::Parameter & p9,
401  const funct::Parameter & p10) {
402  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
403  }
404 
405  template<typename Tag, typename F>
406  TF1 tf1_t(const char * name, F& f, double min, double max,
407  const funct::Parameter & p0,
408  const funct::Parameter & p1,
409  const funct::Parameter & p2,
410  const funct::Parameter & p3,
411  const funct::Parameter & p4,
412  const funct::Parameter & p5,
413  const funct::Parameter & p6,
414  const funct::Parameter & p7,
415  const funct::Parameter & p8,
416  const funct::Parameter & p9,
417  const funct::Parameter & p10,
418  const funct::Parameter & p11) {
419  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), min, max, 12);
420  fun.SetParameter(0, *p0.ptr());
421  fun.SetParName(0, p0.name().c_str());
422  fun.SetParameter(1, *p1.ptr());
423  fun.SetParName(1, p1.name().c_str());
424  fun.SetParameter(2, *p2.ptr());
425  fun.SetParName(2, p2.name().c_str());
426  fun.SetParameter(3, *p3.ptr());
427  fun.SetParName(3, p3.name().c_str());
428  fun.SetParameter(4, *p4.ptr());
429  fun.SetParName(4, p4.name().c_str());
430  fun.SetParameter(5, *p5.ptr());
431  fun.SetParName(5, p5.name().c_str());
432  fun.SetParameter(6, *p6.ptr());
433  fun.SetParName(6, p6.name().c_str());
434  fun.SetParameter(7, *p7.ptr());
435  fun.SetParName(7, p7.name().c_str());
436  fun.SetParameter(8, *p8.ptr());
437  fun.SetParName(8, p8.name().c_str());
438  fun.SetParameter(9, *p9.ptr());
439  fun.SetParName(9, p9.name().c_str());
440  fun.SetParameter(10, *p10.ptr());
441  fun.SetParName(10, p10.name().c_str());
442  fun.SetParameter(11, *p11.ptr());
443  fun.SetParName(11, p11.name().c_str());
444  return fun;
445  }
446 
447  template<typename F>
448  TF1 tf1(const char * name, F& f, double min, double max,
449  const funct::Parameter & p0,
450  const funct::Parameter & p1,
451  const funct::Parameter & p2,
452  const funct::Parameter & p3,
453  const funct::Parameter & p4,
454  const funct::Parameter & p5,
455  const funct::Parameter & p6,
456  const funct::Parameter & p7,
457  const funct::Parameter & p8,
458  const funct::Parameter & p9,
459  const funct::Parameter & p10,
460  const funct::Parameter & p11) {
461  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
462  }
463 
464  template<typename Tag, typename F>
465  TF1 tf1_t(const char * name, F& f, double min, double max,
466  const funct::Parameter & p0,
467  const funct::Parameter & p1,
468  const funct::Parameter & p2,
469  const funct::Parameter & p3,
470  const funct::Parameter & p4,
471  const funct::Parameter & p5,
472  const funct::Parameter & p6,
473  const funct::Parameter & p7,
474  const funct::Parameter & p8,
475  const funct::Parameter & p9,
476  const funct::Parameter & p10,
477  const funct::Parameter & p11,
478  const funct::Parameter & p12) {
479  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), min, max, 13);
480  fun.SetParameter(0, *p0.ptr());
481  fun.SetParName(0, p0.name().c_str());
482  fun.SetParameter(1, *p1.ptr());
483  fun.SetParName(1, p1.name().c_str());
484  fun.SetParameter(2, *p2.ptr());
485  fun.SetParName(2, p2.name().c_str());
486  fun.SetParameter(3, *p3.ptr());
487  fun.SetParName(3, p3.name().c_str());
488  fun.SetParameter(4, *p4.ptr());
489  fun.SetParName(4, p4.name().c_str());
490  fun.SetParameter(5, *p5.ptr());
491  fun.SetParName(5, p5.name().c_str());
492  fun.SetParameter(6, *p6.ptr());
493  fun.SetParName(6, p6.name().c_str());
494  fun.SetParameter(7, *p7.ptr());
495  fun.SetParName(7, p7.name().c_str());
496  fun.SetParameter(8, *p8.ptr());
497  fun.SetParName(8, p8.name().c_str());
498  fun.SetParameter(9, *p9.ptr());
499  fun.SetParName(9, p9.name().c_str());
500  fun.SetParameter(10, *p10.ptr());
501  fun.SetParName(10, p10.name().c_str());
502  fun.SetParameter(11, *p11.ptr());
503  fun.SetParName(11, p11.name().c_str());
504  fun.SetParameter(12, *p12.ptr());
505  fun.SetParName(12, p12.name().c_str());
506  return fun;
507  }
508 
509  template<typename F>
510  TF1 tf1(const char * name, F& f, double min, double max,
511  const funct::Parameter & p0,
512  const funct::Parameter & p1,
513  const funct::Parameter & p2,
514  const funct::Parameter & p3,
515  const funct::Parameter & p4,
516  const funct::Parameter & p5,
517  const funct::Parameter & p6,
518  const funct::Parameter & p7,
519  const funct::Parameter & p8,
520  const funct::Parameter & p9,
521  const funct::Parameter & p10,
522  const funct::Parameter & p11,
523  const funct::Parameter & p12) {
524  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
525  }
526 
527  template<typename Tag, typename F>
528  TF1 tf1_t(const char * name, F& f, double min, double max,
529  const funct::Parameter & p0,
530  const funct::Parameter & p1,
531  const funct::Parameter & p2,
532  const funct::Parameter & p3,
533  const funct::Parameter & p4,
534  const funct::Parameter & p5,
535  const funct::Parameter & p6,
536  const funct::Parameter & p7,
537  const funct::Parameter & p8,
538  const funct::Parameter & p9,
539  const funct::Parameter & p10,
540  const funct::Parameter & p11,
541  const funct::Parameter & p12,
542  const funct::Parameter & p13) {
543  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), min, max, 14);
544  fun.SetParameter(0, *p0.ptr());
545  fun.SetParName(0, p0.name().c_str());
546  fun.SetParameter(1, *p1.ptr());
547  fun.SetParName(1, p1.name().c_str());
548  fun.SetParameter(2, *p2.ptr());
549  fun.SetParName(2, p2.name().c_str());
550  fun.SetParameter(3, *p3.ptr());
551  fun.SetParName(3, p3.name().c_str());
552  fun.SetParameter(4, *p4.ptr());
553  fun.SetParName(4, p4.name().c_str());
554  fun.SetParameter(5, *p5.ptr());
555  fun.SetParName(5, p5.name().c_str());
556  fun.SetParameter(6, *p6.ptr());
557  fun.SetParName(6, p6.name().c_str());
558  fun.SetParameter(7, *p7.ptr());
559  fun.SetParName(7, p7.name().c_str());
560  fun.SetParameter(8, *p8.ptr());
561  fun.SetParName(8, p8.name().c_str());
562  fun.SetParameter(9, *p9.ptr());
563  fun.SetParName(9, p9.name().c_str());
564  fun.SetParameter(10, *p10.ptr());
565  fun.SetParName(10, p10.name().c_str());
566  fun.SetParameter(11, *p11.ptr());
567  fun.SetParName(11, p11.name().c_str());
568  fun.SetParameter(12, *p12.ptr());
569  fun.SetParName(12, p12.name().c_str());
570  fun.SetParameter(13, *p13.ptr());
571  fun.SetParName(13, p13.name().c_str());
572  return fun;
573  }
574 
575  template<typename F>
576  TF1 tf1(const char * name, F& f, double min, double max,
577  const funct::Parameter & p0,
578  const funct::Parameter & p1,
579  const funct::Parameter & p2,
580  const funct::Parameter & p3,
581  const funct::Parameter & p4,
582  const funct::Parameter & p5,
583  const funct::Parameter & p6,
584  const funct::Parameter & p7,
585  const funct::Parameter & p8,
586  const funct::Parameter & p9,
587  const funct::Parameter & p10,
588  const funct::Parameter & p11,
589  const funct::Parameter & p12,
590  const funct::Parameter & p13) {
591  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
592  }
593 
594  template<typename Tag, typename F>
595  TF1 tf1_t(const char * name, F& f, double min, double max,
596  const funct::Parameter & p0,
597  const funct::Parameter & p1,
598  const funct::Parameter & p2,
599  const funct::Parameter & p3,
600  const funct::Parameter & p4,
601  const funct::Parameter & p5,
602  const funct::Parameter & p6,
603  const funct::Parameter & p7,
604  const funct::Parameter & p8,
605  const funct::Parameter & p9,
606  const funct::Parameter & p10,
607  const funct::Parameter & p11,
608  const funct::Parameter & p12,
609  const funct::Parameter & p13,
610  const funct::Parameter & p14) {
611  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14), min, max, 15);
612  fun.SetParameter(0, *p0.ptr());
613  fun.SetParName(0, p0.name().c_str());
614  fun.SetParameter(1, *p1.ptr());
615  fun.SetParName(1, p1.name().c_str());
616  fun.SetParameter(2, *p2.ptr());
617  fun.SetParName(2, p2.name().c_str());
618  fun.SetParameter(3, *p3.ptr());
619  fun.SetParName(3, p3.name().c_str());
620  fun.SetParameter(4, *p4.ptr());
621  fun.SetParName(4, p4.name().c_str());
622  fun.SetParameter(5, *p5.ptr());
623  fun.SetParName(5, p5.name().c_str());
624  fun.SetParameter(6, *p6.ptr());
625  fun.SetParName(6, p6.name().c_str());
626  fun.SetParameter(7, *p7.ptr());
627  fun.SetParName(7, p7.name().c_str());
628  fun.SetParameter(8, *p8.ptr());
629  fun.SetParName(8, p8.name().c_str());
630  fun.SetParameter(9, *p9.ptr());
631  fun.SetParName(9, p9.name().c_str());
632  fun.SetParameter(10, *p10.ptr());
633  fun.SetParName(10, p10.name().c_str());
634  fun.SetParameter(11, *p11.ptr());
635  fun.SetParName(11, p11.name().c_str());
636  fun.SetParameter(12, *p12.ptr());
637  fun.SetParName(12, p12.name().c_str());
638  fun.SetParameter(13, *p13.ptr());
639  fun.SetParName(13, p13.name().c_str());
640  fun.SetParameter(14, *p14.ptr());
641  fun.SetParName(14, p14.name().c_str());
642  return fun;
643  }
644 
645  template<typename F>
646  TF1 tf1(const char * name, F& f, double min, double max,
647  const funct::Parameter & p0,
648  const funct::Parameter & p1,
649  const funct::Parameter & p2,
650  const funct::Parameter & p3,
651  const funct::Parameter & p4,
652  const funct::Parameter & p5,
653  const funct::Parameter & p6,
654  const funct::Parameter & p7,
655  const funct::Parameter & p8,
656  const funct::Parameter & p9,
657  const funct::Parameter & p10,
658  const funct::Parameter & p11,
659  const funct::Parameter & p12,
660  const funct::Parameter & p13,
661  const funct::Parameter & p14) {
662  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
663  }
664 
665  template<typename Tag, typename F>
666  TF1 tf1_t(const char * name, F& f, double min, double max,
667  const funct::Parameter & p0,
668  const funct::Parameter & p1,
669  const funct::Parameter & p2,
670  const funct::Parameter & p3,
671  const funct::Parameter & p4,
672  const funct::Parameter & p5,
673  const funct::Parameter & p6,
674  const funct::Parameter & p7,
675  const funct::Parameter & p8,
676  const funct::Parameter & p9,
677  const funct::Parameter & p10,
678  const funct::Parameter & p11,
679  const funct::Parameter & p12,
680  const funct::Parameter & p13,
681  const funct::Parameter & p14,
682  const funct::Parameter & p15) {
683  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
684  p10, p11, p12, p13, p14, p15), min, max, 16);
685  fun.SetParameter(0, *p0.ptr());
686  fun.SetParName(0, p0.name().c_str());
687  fun.SetParameter(1, *p1.ptr());
688  fun.SetParName(1, p1.name().c_str());
689  fun.SetParameter(2, *p2.ptr());
690  fun.SetParName(2, p2.name().c_str());
691  fun.SetParameter(3, *p3.ptr());
692  fun.SetParName(3, p3.name().c_str());
693  fun.SetParameter(4, *p4.ptr());
694  fun.SetParName(4, p4.name().c_str());
695  fun.SetParameter(5, *p5.ptr());
696  fun.SetParName(5, p5.name().c_str());
697  fun.SetParameter(6, *p6.ptr());
698  fun.SetParName(6, p6.name().c_str());
699  fun.SetParameter(7, *p7.ptr());
700  fun.SetParName(7, p7.name().c_str());
701  fun.SetParameter(8, *p8.ptr());
702  fun.SetParName(8, p8.name().c_str());
703  fun.SetParameter(9, *p9.ptr());
704  fun.SetParName(9, p9.name().c_str());
705  fun.SetParameter(10, *p10.ptr());
706  fun.SetParName(10, p10.name().c_str());
707  fun.SetParameter(11, *p11.ptr());
708  fun.SetParName(11, p11.name().c_str());
709  fun.SetParameter(12, *p12.ptr());
710  fun.SetParName(12, p12.name().c_str());
711  fun.SetParameter(13, *p13.ptr());
712  fun.SetParName(13, p13.name().c_str());
713  fun.SetParameter(14, *p14.ptr());
714  fun.SetParName(14, p14.name().c_str());
715  fun.SetParameter(15, *p15.ptr());
716  fun.SetParName(15, p15.name().c_str());
717  return fun;
718  }
719 
720  template<typename F>
721  TF1 tf1(const char * name, F& f, double min, double max,
722  const funct::Parameter & p0,
723  const funct::Parameter & p1,
724  const funct::Parameter & p2,
725  const funct::Parameter & p3,
726  const funct::Parameter & p4,
727  const funct::Parameter & p5,
728  const funct::Parameter & p6,
729  const funct::Parameter & p7,
730  const funct::Parameter & p8,
731  const funct::Parameter & p9,
732  const funct::Parameter & p10,
733  const funct::Parameter & p11,
734  const funct::Parameter & p12,
735  const funct::Parameter & p13,
736  const funct::Parameter & p14,
737  const funct::Parameter & p15) {
738  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
739  }
740 
741  template<typename Tag, typename F>
742  TF1 tf1_t(const char * name, F& f, double min, double max,
743  const funct::Parameter & p0,
744  const funct::Parameter & p1,
745  const funct::Parameter & p2,
746  const funct::Parameter & p3,
747  const funct::Parameter & p4,
748  const funct::Parameter & p5,
749  const funct::Parameter & p6,
750  const funct::Parameter & p7,
751  const funct::Parameter & p8,
752  const funct::Parameter & p9,
753  const funct::Parameter & p10,
754  const funct::Parameter & p11,
755  const funct::Parameter & p12,
756  const funct::Parameter & p13,
757  const funct::Parameter & p14,
758  const funct::Parameter & p15,
759  const funct::Parameter & p16) {
760  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
761  p10, p11, p12, p13, p14, p15, p16), min, max, 17);
762  fun.SetParameter(0, *p0.ptr());
763  fun.SetParName(0, p0.name().c_str());
764  fun.SetParameter(1, *p1.ptr());
765  fun.SetParName(1, p1.name().c_str());
766  fun.SetParameter(2, *p2.ptr());
767  fun.SetParName(2, p2.name().c_str());
768  fun.SetParameter(3, *p3.ptr());
769  fun.SetParName(3, p3.name().c_str());
770  fun.SetParameter(4, *p4.ptr());
771  fun.SetParName(4, p4.name().c_str());
772  fun.SetParameter(5, *p5.ptr());
773  fun.SetParName(5, p5.name().c_str());
774  fun.SetParameter(6, *p6.ptr());
775  fun.SetParName(6, p6.name().c_str());
776  fun.SetParameter(7, *p7.ptr());
777  fun.SetParName(7, p7.name().c_str());
778  fun.SetParameter(8, *p8.ptr());
779  fun.SetParName(8, p8.name().c_str());
780  fun.SetParameter(9, *p9.ptr());
781  fun.SetParName(9, p9.name().c_str());
782  fun.SetParameter(10, *p10.ptr());
783  fun.SetParName(10, p10.name().c_str());
784  fun.SetParameter(11, *p11.ptr());
785  fun.SetParName(11, p11.name().c_str());
786  fun.SetParameter(12, *p12.ptr());
787  fun.SetParName(12, p12.name().c_str());
788  fun.SetParameter(13, *p13.ptr());
789  fun.SetParName(13, p13.name().c_str());
790  fun.SetParameter(14, *p14.ptr());
791  fun.SetParName(14, p14.name().c_str());
792  fun.SetParameter(15, *p15.ptr());
793  fun.SetParName(15, p15.name().c_str());
794  fun.SetParameter(16, *p16.ptr());
795  fun.SetParName(16, p16.name().c_str());
796  return fun;
797  }
798 
799  template<typename F>
800  TF1 tf1(const char * name, F& f, double min, double max,
801  const funct::Parameter & p0,
802  const funct::Parameter & p1,
803  const funct::Parameter & p2,
804  const funct::Parameter & p3,
805  const funct::Parameter & p4,
806  const funct::Parameter & p5,
807  const funct::Parameter & p6,
808  const funct::Parameter & p7,
809  const funct::Parameter & p8,
810  const funct::Parameter & p9,
811  const funct::Parameter & p10,
812  const funct::Parameter & p11,
813  const funct::Parameter & p12,
814  const funct::Parameter & p13,
815  const funct::Parameter & p14,
816  const funct::Parameter & p15,
817  const funct::Parameter & p16) {
818  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16);
819  }
820 
821  template<typename Tag, typename F>
822  TF1 tf1_t(const char * name, F& f, double min, double max,
823  const funct::Parameter & p0,
824  const funct::Parameter & p1,
825  const funct::Parameter & p2,
826  const funct::Parameter & p3,
827  const funct::Parameter & p4,
828  const funct::Parameter & p5,
829  const funct::Parameter & p6,
830  const funct::Parameter & p7,
831  const funct::Parameter & p8,
832  const funct::Parameter & p9,
833  const funct::Parameter & p10,
834  const funct::Parameter & p11,
835  const funct::Parameter & p12,
836  const funct::Parameter & p13,
837  const funct::Parameter & p14,
838  const funct::Parameter & p15,
839  const funct::Parameter & p16,
840  const funct::Parameter & p17) {
841  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
842  p10, p11, p12, p13, p14, p15, p16, p17), min, max, 18);
843  fun.SetParameter(0, *p0.ptr());
844  fun.SetParName(0, p0.name().c_str());
845  fun.SetParameter(1, *p1.ptr());
846  fun.SetParName(1, p1.name().c_str());
847  fun.SetParameter(2, *p2.ptr());
848  fun.SetParName(2, p2.name().c_str());
849  fun.SetParameter(3, *p3.ptr());
850  fun.SetParName(3, p3.name().c_str());
851  fun.SetParameter(4, *p4.ptr());
852  fun.SetParName(4, p4.name().c_str());
853  fun.SetParameter(5, *p5.ptr());
854  fun.SetParName(5, p5.name().c_str());
855  fun.SetParameter(6, *p6.ptr());
856  fun.SetParName(6, p6.name().c_str());
857  fun.SetParameter(7, *p7.ptr());
858  fun.SetParName(7, p7.name().c_str());
859  fun.SetParameter(8, *p8.ptr());
860  fun.SetParName(8, p8.name().c_str());
861  fun.SetParameter(9, *p9.ptr());
862  fun.SetParName(9, p9.name().c_str());
863  fun.SetParameter(10, *p10.ptr());
864  fun.SetParName(10, p10.name().c_str());
865  fun.SetParameter(11, *p11.ptr());
866  fun.SetParName(11, p11.name().c_str());
867  fun.SetParameter(12, *p12.ptr());
868  fun.SetParName(12, p12.name().c_str());
869  fun.SetParameter(13, *p13.ptr());
870  fun.SetParName(13, p13.name().c_str());
871  fun.SetParameter(14, *p14.ptr());
872  fun.SetParName(14, p14.name().c_str());
873  fun.SetParameter(15, *p15.ptr());
874  fun.SetParName(15, p15.name().c_str());
875  fun.SetParameter(16, *p16.ptr());
876  fun.SetParName(16, p16.name().c_str());
877  fun.SetParameter(17, *p17.ptr());
878  fun.SetParName(17, p17.name().c_str());
879  return fun;
880  }
881 
882  template<typename F>
883  TF1 tf1(const char * name, F& f, double min, double max,
884  const funct::Parameter & p0,
885  const funct::Parameter & p1,
886  const funct::Parameter & p2,
887  const funct::Parameter & p3,
888  const funct::Parameter & p4,
889  const funct::Parameter & p5,
890  const funct::Parameter & p6,
891  const funct::Parameter & p7,
892  const funct::Parameter & p8,
893  const funct::Parameter & p9,
894  const funct::Parameter & p10,
895  const funct::Parameter & p11,
896  const funct::Parameter & p12,
897  const funct::Parameter & p13,
898  const funct::Parameter & p14,
899  const funct::Parameter & p15,
900  const funct::Parameter & p16,
901  const funct::Parameter & p17) {
902  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17);
903  }
904 
905  template<typename Tag, typename F>
906  TF1 tf1_t(const char * name, F& f, double min, double max,
907  const funct::Parameter & p0,
908  const funct::Parameter & p1,
909  const funct::Parameter & p2,
910  const funct::Parameter & p3,
911  const funct::Parameter & p4,
912  const funct::Parameter & p5,
913  const funct::Parameter & p6,
914  const funct::Parameter & p7,
915  const funct::Parameter & p8,
916  const funct::Parameter & p9,
917  const funct::Parameter & p10,
918  const funct::Parameter & p11,
919  const funct::Parameter & p12,
920  const funct::Parameter & p13,
921  const funct::Parameter & p14,
922  const funct::Parameter & p15,
923  const funct::Parameter & p16,
924  const funct::Parameter & p17,
925  const funct::Parameter & p18) {
926  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
927  p10, p11, p12, p13, p14, p15, p16, p17, p18), min, max, 19);
928  fun.SetParameter(0, *p0.ptr());
929  fun.SetParName(0, p0.name().c_str());
930  fun.SetParameter(1, *p1.ptr());
931  fun.SetParName(1, p1.name().c_str());
932  fun.SetParameter(2, *p2.ptr());
933  fun.SetParName(2, p2.name().c_str());
934  fun.SetParameter(3, *p3.ptr());
935  fun.SetParName(3, p3.name().c_str());
936  fun.SetParameter(4, *p4.ptr());
937  fun.SetParName(4, p4.name().c_str());
938  fun.SetParameter(5, *p5.ptr());
939  fun.SetParName(5, p5.name().c_str());
940  fun.SetParameter(6, *p6.ptr());
941  fun.SetParName(6, p6.name().c_str());
942  fun.SetParameter(7, *p7.ptr());
943  fun.SetParName(7, p7.name().c_str());
944  fun.SetParameter(8, *p8.ptr());
945  fun.SetParName(8, p8.name().c_str());
946  fun.SetParameter(9, *p9.ptr());
947  fun.SetParName(9, p9.name().c_str());
948  fun.SetParameter(10, *p10.ptr());
949  fun.SetParName(10, p10.name().c_str());
950  fun.SetParameter(11, *p11.ptr());
951  fun.SetParName(11, p11.name().c_str());
952  fun.SetParameter(12, *p12.ptr());
953  fun.SetParName(12, p12.name().c_str());
954  fun.SetParameter(13, *p13.ptr());
955  fun.SetParName(13, p13.name().c_str());
956  fun.SetParameter(14, *p14.ptr());
957  fun.SetParName(14, p14.name().c_str());
958  fun.SetParameter(15, *p15.ptr());
959  fun.SetParName(15, p15.name().c_str());
960  fun.SetParameter(16, *p16.ptr());
961  fun.SetParName(16, p16.name().c_str());
962  fun.SetParameter(17, *p17.ptr());
963  fun.SetParName(17, p17.name().c_str());
964  fun.SetParameter(18, *p18.ptr());
965  fun.SetParName(18, p18.name().c_str());
966  return fun;
967  }
968 
969  template<typename F>
970  TF1 tf1(const char * name, F& f, double min, double max,
971  const funct::Parameter & p0,
972  const funct::Parameter & p1,
973  const funct::Parameter & p2,
974  const funct::Parameter & p3,
975  const funct::Parameter & p4,
976  const funct::Parameter & p5,
977  const funct::Parameter & p6,
978  const funct::Parameter & p7,
979  const funct::Parameter & p8,
980  const funct::Parameter & p9,
981  const funct::Parameter & p10,
982  const funct::Parameter & p11,
983  const funct::Parameter & p12,
984  const funct::Parameter & p13,
985  const funct::Parameter & p14,
986  const funct::Parameter & p15,
987  const funct::Parameter & p16,
988  const funct::Parameter & p17,
989  const funct::Parameter & p18) {
990  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
991  }
992 
993  template<typename Tag, typename F>
994  TF1 tf1_t(const char * name, F& f, double min, double max,
995  const funct::Parameter & p0,
996  const funct::Parameter & p1,
997  const funct::Parameter & p2,
998  const funct::Parameter & p3,
999  const funct::Parameter & p4,
1000  const funct::Parameter & p5,
1001  const funct::Parameter & p6,
1002  const funct::Parameter & p7,
1003  const funct::Parameter & p8,
1004  const funct::Parameter & p9,
1005  const funct::Parameter & p10,
1006  const funct::Parameter & p11,
1007  const funct::Parameter & p12,
1008  const funct::Parameter & p13,
1009  const funct::Parameter & p14,
1010  const funct::Parameter & p15,
1011  const funct::Parameter & p16,
1012  const funct::Parameter & p17,
1013  const funct::Parameter & p18,
1014  const funct::Parameter & p19) {
1015  TF1 fun(name, root::function_t<1, Tag>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9,
1016  p10, p11, p12, p13, p14, p15, p16, p17, p18, p19), min, max, 20);
1017  fun.SetParameter(0, *p0.ptr());
1018  fun.SetParName(0, p0.name().c_str());
1019  fun.SetParameter(1, *p1.ptr());
1020  fun.SetParName(1, p1.name().c_str());
1021  fun.SetParameter(2, *p2.ptr());
1022  fun.SetParName(2, p2.name().c_str());
1023  fun.SetParameter(3, *p3.ptr());
1024  fun.SetParName(3, p3.name().c_str());
1025  fun.SetParameter(4, *p4.ptr());
1026  fun.SetParName(4, p4.name().c_str());
1027  fun.SetParameter(5, *p5.ptr());
1028  fun.SetParName(5, p5.name().c_str());
1029  fun.SetParameter(6, *p6.ptr());
1030  fun.SetParName(6, p6.name().c_str());
1031  fun.SetParameter(7, *p7.ptr());
1032  fun.SetParName(7, p7.name().c_str());
1033  fun.SetParameter(8, *p8.ptr());
1034  fun.SetParName(8, p8.name().c_str());
1035  fun.SetParameter(9, *p9.ptr());
1036  fun.SetParName(9, p9.name().c_str());
1037  fun.SetParameter(10, *p10.ptr());
1038  fun.SetParName(10, p10.name().c_str());
1039  fun.SetParameter(11, *p11.ptr());
1040  fun.SetParName(11, p11.name().c_str());
1041  fun.SetParameter(12, *p12.ptr());
1042  fun.SetParName(12, p12.name().c_str());
1043  fun.SetParameter(13, *p13.ptr());
1044  fun.SetParName(13, p13.name().c_str());
1045  fun.SetParameter(14, *p14.ptr());
1046  fun.SetParName(14, p14.name().c_str());
1047  fun.SetParameter(15, *p15.ptr());
1048  fun.SetParName(15, p15.name().c_str());
1049  fun.SetParameter(16, *p16.ptr());
1050  fun.SetParName(16, p16.name().c_str());
1051  fun.SetParameter(17, *p17.ptr());
1052  fun.SetParName(17, p17.name().c_str());
1053  fun.SetParameter(18, *p18.ptr());
1054  fun.SetParName(18, p18.name().c_str());
1055  fun.SetParameter(19, *p19.ptr());
1056  fun.SetParName(19, p19.name().c_str());
1057  return fun;
1058  }
1059 
1060 
1061  template<typename F>
1062  TF1 tf1(const char * name, F& f, double min, double max,
1063  const funct::Parameter & p0,
1064  const funct::Parameter & p1,
1065  const funct::Parameter & p2,
1066  const funct::Parameter & p3,
1067  const funct::Parameter & p4,
1068  const funct::Parameter & p5,
1069  const funct::Parameter & p6,
1070  const funct::Parameter & p7,
1071  const funct::Parameter & p8,
1072  const funct::Parameter & p9,
1073  const funct::Parameter & p10,
1074  const funct::Parameter & p11,
1075  const funct::Parameter & p12,
1076  const funct::Parameter & p13,
1077  const funct::Parameter & p14,
1078  const funct::Parameter & p15,
1079  const funct::Parameter & p16,
1080  const funct::Parameter & p17,
1081  const funct::Parameter & p18,
1082  const funct::Parameter & p19) {
1083  return tf1_t<helper::null_t>(name, f, min, max, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19);
1084  }
1085 
1086  template<typename Tag, typename F>
1087  TF1 tf1_t(const char * name, F& f, double min, double max,
1088  const std::vector<funct::Parameter> & p) {
1089  TF1 fun(name, root::function_t<1, Tag>(f, p), min, max, p.size());
1090  for(size_t i = 0; i < p.size(); ++i) {
1091  fun.SetParameter(i, *p[i].ptr());
1092  fun.SetParName(i, p[i].name().c_str());
1093  }
1094  return fun;
1095  }
1096 
1097  template<typename F>
1098  TF1 tf1(const char * name, F& f, double min, double max,
1099  const std::vector<funct::Parameter> & p) {
1100  return tf1_t<helper::null_t>(name, f, min, max, p);
1101  }
1102 
1103  template<typename Tag, typename F>
1104  TF1 tf1_t(const char * name, F& f, double min, double max,
1105  const std::vector<boost::shared_ptr<double> > & p) {
1106  TF1 fun(name, root::function_t<1, Tag>(f, p), min, max, p.size());
1107  for(size_t i = 0; i < p.size(); ++i)
1108  fun.SetParameter(i, *p[i]);
1109  return fun;
1110  }
1111 
1112  template<typename F>
1113  TF1 tf1(const char * name, F& f, double min, double max,
1114  const std::vector<boost::shared_ptr<double> > & p) {
1115  return tf1_t<helper::null_t>(name, f, min, max, p);
1116  }
1117 
1118 }
1119 
1120 #endif
int i
Definition: DBlmapReader.cc:9
const std::string & name() const
Definition: Parameter.h:13
TF1 tf1_t(const char *name, F &f, double min, double max)
Definition: rootTf1.h:10
boost::shared_ptr< double > ptr() const
Definition: Parameter.h:19
#define min(a, b)
Definition: mlp_lapack.h:161
const T & max(const T &a, const T &b)
double p4[4]
Definition: TauolaWrapper.h:92
double f[11][100]
double p2[4]
Definition: TauolaWrapper.h:90
TF1 tf1(const char *name, F &f, double min, double max)
Definition: rootTf1.h:16
double p1[4]
Definition: TauolaWrapper.h:89
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:281
double p3[4]
Definition: TauolaWrapper.h:91
string root
initialization
Definition: dbtoconf.py:70