File indexing completed on 2024-04-06 12:24:20
0001 #ifndef PhysicsTools_Utilities_rootFunction_h
0002 #define PhysicsTools_Utilities_rootFunction_h
0003 #include "PhysicsTools/Utilities/interface/RootFunctionHelper.h"
0004 #include "PhysicsTools/Utilities/interface/Parameter.h"
0005
0006 namespace root {
0007 template <unsigned int args, typename Tag, typename F>
0008 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f) {
0009 return helper::RootFunctionHelper<F, args, Tag>::fun(f);
0010 }
0011
0012 template <unsigned int args, typename F>
0013 typename helper::RootFunctionHelper<F, args>::root_function function(F& f) {
0014 return function_t<args, helper::null_t>(f);
0015 }
0016
0017 template <unsigned int args, typename Tag, typename F>
0018 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f, const funct::Parameter& p0) {
0019 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0020 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0021 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0022 return fun;
0023 }
0024
0025 template <unsigned int args, typename F>
0026 typename helper::RootFunctionHelper<F, args>::root_function function(F& f, const funct::Parameter& p0) {
0027 return function_t<args, helper::null_t>(f, p0);
0028 }
0029
0030 template <unsigned int args, typename Tag, typename F>
0031 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0032 const funct::Parameter& p0,
0033 const funct::Parameter& p1) {
0034 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0035 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0036 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0037 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0038 return fun;
0039 }
0040
0041 template <unsigned int args, typename F>
0042 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0043 const funct::Parameter& p0,
0044 const funct::Parameter& p1) {
0045 return function<args, helper::null_t>(f, p0, p1);
0046 }
0047
0048 template <unsigned int args, typename Tag, typename F>
0049 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0050 const funct::Parameter& p0,
0051 const funct::Parameter& p1,
0052 const funct::Parameter& p2) {
0053 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0054 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0055 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0056 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0057 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0058 return fun;
0059 }
0060
0061 template <unsigned int args, typename F>
0062 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0063 const funct::Parameter& p0,
0064 const funct::Parameter& p1,
0065 const funct::Parameter& p2) {
0066 return function<args, helper::null_t>(f, p0, p1, p2);
0067 }
0068
0069 template <unsigned int args, typename Tag, typename F>
0070 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0071 const funct::Parameter& p0,
0072 const funct::Parameter& p1,
0073 const funct::Parameter& p2,
0074 const funct::Parameter& p3) {
0075 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0076 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0077 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0078 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0079 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0080 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0081 return fun;
0082 }
0083
0084 template <unsigned int args, typename F>
0085 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0086 const funct::Parameter& p0,
0087 const funct::Parameter& p1,
0088 const funct::Parameter& p2,
0089 const funct::Parameter& p3) {
0090 return function<args, helper::null_t>(f, p0, p1, p2, p3);
0091 }
0092
0093 template <unsigned int args, typename Tag, typename F>
0094 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0095 const funct::Parameter& p0,
0096 const funct::Parameter& p1,
0097 const funct::Parameter& p2,
0098 const funct::Parameter& p3,
0099 const funct::Parameter& p4) {
0100 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0101 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0102 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0103 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0104 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0105 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0106 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0107 return fun;
0108 }
0109
0110 template <unsigned int args, typename F>
0111 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0112 const funct::Parameter& p0,
0113 const funct::Parameter& p1,
0114 const funct::Parameter& p2,
0115 const funct::Parameter& p3,
0116 const funct::Parameter& p4) {
0117 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4);
0118 }
0119
0120 template <unsigned int args, typename Tag, typename F>
0121 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0122 const funct::Parameter& p0,
0123 const funct::Parameter& p1,
0124 const funct::Parameter& p2,
0125 const funct::Parameter& p3,
0126 const funct::Parameter& p4,
0127 const funct::Parameter& p5) {
0128 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0129 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0130 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0131 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0132 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0133 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0134 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0135 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0136 return fun;
0137 }
0138
0139 template <unsigned int args, typename F>
0140 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0141 const funct::Parameter& p0,
0142 const funct::Parameter& p1,
0143 const funct::Parameter& p2,
0144 const funct::Parameter& p3,
0145 const funct::Parameter& p4,
0146 const funct::Parameter& p5) {
0147 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5);
0148 }
0149
0150 template <unsigned int args, typename Tag, typename F>
0151 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0152 const funct::Parameter& p0,
0153 const funct::Parameter& p1,
0154 const funct::Parameter& p2,
0155 const funct::Parameter& p3,
0156 const funct::Parameter& p4,
0157 const funct::Parameter& p5,
0158 const funct::Parameter& p6) {
0159 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0160 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0161 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0162 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0163 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0164 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0165 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0166 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0167 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0168 return fun;
0169 }
0170
0171 template <unsigned int args, typename F>
0172 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0173 const funct::Parameter& p0,
0174 const funct::Parameter& p1,
0175 const funct::Parameter& p2,
0176 const funct::Parameter& p3,
0177 const funct::Parameter& p4,
0178 const funct::Parameter& p5,
0179 const funct::Parameter& p6) {
0180 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6);
0181 }
0182
0183 template <unsigned int args, typename Tag, typename F>
0184 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0185 const funct::Parameter& p0,
0186 const funct::Parameter& p1,
0187 const funct::Parameter& p2,
0188 const funct::Parameter& p3,
0189 const funct::Parameter& p4,
0190 const funct::Parameter& p5,
0191 const funct::Parameter& p6,
0192 const funct::Parameter& p7) {
0193 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0194 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0195 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0196 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0197 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0198 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0199 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0200 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0201 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0202 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0203 return fun;
0204 }
0205
0206 template <unsigned int args, typename F>
0207 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0208 const funct::Parameter& p0,
0209 const funct::Parameter& p1,
0210 const funct::Parameter& p2,
0211 const funct::Parameter& p3,
0212 const funct::Parameter& p4,
0213 const funct::Parameter& p5,
0214 const funct::Parameter& p6,
0215 const funct::Parameter& p7) {
0216 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7);
0217 }
0218
0219 template <unsigned int args, typename Tag, typename F>
0220 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0221 const funct::Parameter& p0,
0222 const funct::Parameter& p1,
0223 const funct::Parameter& p2,
0224 const funct::Parameter& p3,
0225 const funct::Parameter& p4,
0226 const funct::Parameter& p5,
0227 const funct::Parameter& p6,
0228 const funct::Parameter& p7,
0229 const funct::Parameter& p8) {
0230 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0231 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0232 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0233 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0234 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0235 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0236 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0237 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0238 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0239 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0240 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0241 return fun;
0242 }
0243
0244 template <unsigned int args, typename F>
0245 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0246 const funct::Parameter& p0,
0247 const funct::Parameter& p1,
0248 const funct::Parameter& p2,
0249 const funct::Parameter& p3,
0250 const funct::Parameter& p4,
0251 const funct::Parameter& p5,
0252 const funct::Parameter& p6,
0253 const funct::Parameter& p7,
0254 const funct::Parameter& p8) {
0255 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8);
0256 }
0257
0258 template <unsigned int args, typename Tag, typename F>
0259 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0260 const funct::Parameter& p0,
0261 const funct::Parameter& p1,
0262 const funct::Parameter& p2,
0263 const funct::Parameter& p3,
0264 const funct::Parameter& p4,
0265 const funct::Parameter& p5,
0266 const funct::Parameter& p6,
0267 const funct::Parameter& p7,
0268 const funct::Parameter& p8,
0269 const funct::Parameter& p9) {
0270 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0271 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0272 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0273 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0274 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0275 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0276 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0277 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0278 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0279 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0280 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0281 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0282 return fun;
0283 }
0284
0285 template <unsigned int args, typename F>
0286 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0287 const funct::Parameter& p0,
0288 const funct::Parameter& p1,
0289 const funct::Parameter& p2,
0290 const funct::Parameter& p3,
0291 const funct::Parameter& p4,
0292 const funct::Parameter& p5,
0293 const funct::Parameter& p6,
0294 const funct::Parameter& p7,
0295 const funct::Parameter& p8,
0296 const funct::Parameter& p9) {
0297 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
0298 }
0299
0300 template <unsigned int args, typename Tag, typename F>
0301 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0302 const funct::Parameter& p0,
0303 const funct::Parameter& p1,
0304 const funct::Parameter& p2,
0305 const funct::Parameter& p3,
0306 const funct::Parameter& p4,
0307 const funct::Parameter& p5,
0308 const funct::Parameter& p6,
0309 const funct::Parameter& p7,
0310 const funct::Parameter& p8,
0311 const funct::Parameter& p9,
0312 const funct::Parameter& p10) {
0313 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0314 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0315 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0316 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0317 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0318 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0319 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0320 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0321 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0322 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0323 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0324 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0325 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0326 return fun;
0327 }
0328
0329 template <unsigned int args, typename F>
0330 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0331 const funct::Parameter& p0,
0332 const funct::Parameter& p1,
0333 const funct::Parameter& p2,
0334 const funct::Parameter& p3,
0335 const funct::Parameter& p4,
0336 const funct::Parameter& p5,
0337 const funct::Parameter& p6,
0338 const funct::Parameter& p7,
0339 const funct::Parameter& p8,
0340 const funct::Parameter& p9,
0341 const funct::Parameter& p10) {
0342 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
0343 }
0344
0345 template <unsigned int args, typename Tag, typename F>
0346 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0347 const funct::Parameter& p0,
0348 const funct::Parameter& p1,
0349 const funct::Parameter& p2,
0350 const funct::Parameter& p3,
0351 const funct::Parameter& p4,
0352 const funct::Parameter& p5,
0353 const funct::Parameter& p6,
0354 const funct::Parameter& p7,
0355 const funct::Parameter& p8,
0356 const funct::Parameter& p9,
0357 const funct::Parameter& p10,
0358 const funct::Parameter& p11) {
0359 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0360 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0361 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0362 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0363 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0364 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0365 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0366 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0367 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0368 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0369 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0370 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0371 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0372 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0373 return fun;
0374 }
0375
0376 template <unsigned int args, typename F>
0377 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0378 const funct::Parameter& p0,
0379 const funct::Parameter& p1,
0380 const funct::Parameter& p2,
0381 const funct::Parameter& p3,
0382 const funct::Parameter& p4,
0383 const funct::Parameter& p5,
0384 const funct::Parameter& p6,
0385 const funct::Parameter& p7,
0386 const funct::Parameter& p8,
0387 const funct::Parameter& p9,
0388 const funct::Parameter& p10,
0389 const funct::Parameter& p11) {
0390 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
0391 }
0392
0393 template <unsigned int args, typename Tag, typename F>
0394 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0395 const funct::Parameter& p0,
0396 const funct::Parameter& p1,
0397 const funct::Parameter& p2,
0398 const funct::Parameter& p3,
0399 const funct::Parameter& p4,
0400 const funct::Parameter& p5,
0401 const funct::Parameter& p6,
0402 const funct::Parameter& p7,
0403 const funct::Parameter& p8,
0404 const funct::Parameter& p9,
0405 const funct::Parameter& p10,
0406 const funct::Parameter& p11,
0407 const funct::Parameter& p12) {
0408 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0409 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0410 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0411 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0412 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0413 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0414 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0415 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0416 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0417 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0418 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0419 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0420 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0421 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0422 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12);
0423 return fun;
0424 }
0425
0426 template <unsigned int args, typename F>
0427 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0428 const funct::Parameter& p0,
0429 const funct::Parameter& p1,
0430 const funct::Parameter& p2,
0431 const funct::Parameter& p3,
0432 const funct::Parameter& p4,
0433 const funct::Parameter& p5,
0434 const funct::Parameter& p6,
0435 const funct::Parameter& p7,
0436 const funct::Parameter& p8,
0437 const funct::Parameter& p9,
0438 const funct::Parameter& p10,
0439 const funct::Parameter& p11,
0440 const funct::Parameter& p12) {
0441 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
0442 }
0443
0444 template <unsigned int args, typename Tag, typename F>
0445 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0446 const funct::Parameter& p0,
0447 const funct::Parameter& p1,
0448 const funct::Parameter& p2,
0449 const funct::Parameter& p3,
0450 const funct::Parameter& p4,
0451 const funct::Parameter& p5,
0452 const funct::Parameter& p6,
0453 const funct::Parameter& p7,
0454 const funct::Parameter& p8,
0455 const funct::Parameter& p9,
0456 const funct::Parameter& p10,
0457 const funct::Parameter& p11,
0458 const funct::Parameter& p12,
0459 const funct::Parameter& p13) {
0460 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0461 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0462 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0463 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0464 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0465 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0466 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0467 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0468 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0469 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0470 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0471 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0472 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0473 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0474 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12);
0475 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13);
0476 return fun;
0477 }
0478
0479 template <unsigned int args, typename F>
0480 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0481 const funct::Parameter& p0,
0482 const funct::Parameter& p1,
0483 const funct::Parameter& p2,
0484 const funct::Parameter& p3,
0485 const funct::Parameter& p4,
0486 const funct::Parameter& p5,
0487 const funct::Parameter& p6,
0488 const funct::Parameter& p7,
0489 const funct::Parameter& p8,
0490 const funct::Parameter& p9,
0491 const funct::Parameter& p10,
0492 const funct::Parameter& p11,
0493 const funct::Parameter& p12,
0494 const funct::Parameter& p13) {
0495 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
0496 }
0497
0498 template <unsigned int args, typename Tag, typename F>
0499 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0500 const funct::Parameter& p0,
0501 const funct::Parameter& p1,
0502 const funct::Parameter& p2,
0503 const funct::Parameter& p3,
0504 const funct::Parameter& p4,
0505 const funct::Parameter& p5,
0506 const funct::Parameter& p6,
0507 const funct::Parameter& p7,
0508 const funct::Parameter& p8,
0509 const funct::Parameter& p9,
0510 const funct::Parameter& p10,
0511 const funct::Parameter& p11,
0512 const funct::Parameter& p12,
0513 const funct::Parameter& p13,
0514 const funct::Parameter& p14) {
0515 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0516 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0517 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0518 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0519 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0520 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0521 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0522 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0523 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0524 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0525 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0526 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0527 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0528 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0529 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12);
0530 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13);
0531 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14);
0532 return fun;
0533 }
0534
0535 template <unsigned int args, typename F>
0536 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0537 const funct::Parameter& p0,
0538 const funct::Parameter& p1,
0539 const funct::Parameter& p2,
0540 const funct::Parameter& p3,
0541 const funct::Parameter& p4,
0542 const funct::Parameter& p5,
0543 const funct::Parameter& p6,
0544 const funct::Parameter& p7,
0545 const funct::Parameter& p8,
0546 const funct::Parameter& p9,
0547 const funct::Parameter& p10,
0548 const funct::Parameter& p11,
0549 const funct::Parameter& p12,
0550 const funct::Parameter& p13,
0551 const funct::Parameter& p14) {
0552 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
0553 }
0554
0555 template <unsigned int args, typename Tag, typename F>
0556 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0557 const funct::Parameter& p0,
0558 const funct::Parameter& p1,
0559 const funct::Parameter& p2,
0560 const funct::Parameter& p3,
0561 const funct::Parameter& p4,
0562 const funct::Parameter& p5,
0563 const funct::Parameter& p6,
0564 const funct::Parameter& p7,
0565 const funct::Parameter& p8,
0566 const funct::Parameter& p9,
0567 const funct::Parameter& p10,
0568 const funct::Parameter& p11,
0569 const funct::Parameter& p12,
0570 const funct::Parameter& p13,
0571 const funct::Parameter& p14,
0572 const funct::Parameter& p15) {
0573 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0574 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0575 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0576 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0577 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0578 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0579 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0580 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0581 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0582 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0583 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0584 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0585 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0586 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0587 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12);
0588 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13);
0589 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14);
0590 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15);
0591 return fun;
0592 }
0593
0594 template <unsigned int args, typename F>
0595 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0596 const funct::Parameter& p0,
0597 const funct::Parameter& p1,
0598 const funct::Parameter& p2,
0599 const funct::Parameter& p3,
0600 const funct::Parameter& p4,
0601 const funct::Parameter& p5,
0602 const funct::Parameter& p6,
0603 const funct::Parameter& p7,
0604 const funct::Parameter& p8,
0605 const funct::Parameter& p9,
0606 const funct::Parameter& p10,
0607 const funct::Parameter& p11,
0608 const funct::Parameter& p12,
0609 const funct::Parameter& p13,
0610 const funct::Parameter& p14,
0611 const funct::Parameter& p15) {
0612 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
0613 }
0614
0615 template <unsigned int args, typename Tag, typename F>
0616 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0617 const funct::Parameter& p0,
0618 const funct::Parameter& p1,
0619 const funct::Parameter& p2,
0620 const funct::Parameter& p3,
0621 const funct::Parameter& p4,
0622 const funct::Parameter& p5,
0623 const funct::Parameter& p6,
0624 const funct::Parameter& p7,
0625 const funct::Parameter& p8,
0626 const funct::Parameter& p9,
0627 const funct::Parameter& p10,
0628 const funct::Parameter& p11,
0629 const funct::Parameter& p12,
0630 const funct::Parameter& p13,
0631 const funct::Parameter& p14,
0632 const funct::Parameter& p15,
0633 const funct::Parameter& p16) {
0634 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0635 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0636 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0637 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0638 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0639 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0640 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0641 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0642 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0643 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0644 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0645 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0646 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0647 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0648 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12);
0649 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13);
0650 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14);
0651 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15);
0652 helper::RootFunctionHelper<F, args, Tag>::addParameter(p16);
0653 return fun;
0654 }
0655
0656 template <unsigned int args, typename F>
0657 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0658 const funct::Parameter& p0,
0659 const funct::Parameter& p1,
0660 const funct::Parameter& p2,
0661 const funct::Parameter& p3,
0662 const funct::Parameter& p4,
0663 const funct::Parameter& p5,
0664 const funct::Parameter& p6,
0665 const funct::Parameter& p7,
0666 const funct::Parameter& p8,
0667 const funct::Parameter& p9,
0668 const funct::Parameter& p10,
0669 const funct::Parameter& p11,
0670 const funct::Parameter& p12,
0671 const funct::Parameter& p13,
0672 const funct::Parameter& p14,
0673 const funct::Parameter& p15,
0674 const funct::Parameter& p16) {
0675 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16);
0676 }
0677
0678 template <unsigned int args, typename Tag, typename F>
0679 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0680 const funct::Parameter& p0,
0681 const funct::Parameter& p1,
0682 const funct::Parameter& p2,
0683 const funct::Parameter& p3,
0684 const funct::Parameter& p4,
0685 const funct::Parameter& p5,
0686 const funct::Parameter& p6,
0687 const funct::Parameter& p7,
0688 const funct::Parameter& p8,
0689 const funct::Parameter& p9,
0690 const funct::Parameter& p10,
0691 const funct::Parameter& p11,
0692 const funct::Parameter& p12,
0693 const funct::Parameter& p13,
0694 const funct::Parameter& p14,
0695 const funct::Parameter& p15,
0696 const funct::Parameter& p16,
0697 const funct::Parameter& p17) {
0698 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0699 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0700 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0701 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0702 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0703 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0704 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0705 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0706 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0707 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0708 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0709 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0710 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0711 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0712 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12);
0713 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13);
0714 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14);
0715 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15);
0716 helper::RootFunctionHelper<F, args, Tag>::addParameter(p16);
0717 helper::RootFunctionHelper<F, args, Tag>::addParameter(p17);
0718 return fun;
0719 }
0720
0721 template <unsigned int args, typename F>
0722 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0723 const funct::Parameter& p0,
0724 const funct::Parameter& p1,
0725 const funct::Parameter& p2,
0726 const funct::Parameter& p3,
0727 const funct::Parameter& p4,
0728 const funct::Parameter& p5,
0729 const funct::Parameter& p6,
0730 const funct::Parameter& p7,
0731 const funct::Parameter& p8,
0732 const funct::Parameter& p9,
0733 const funct::Parameter& p10,
0734 const funct::Parameter& p11,
0735 const funct::Parameter& p12,
0736 const funct::Parameter& p13,
0737 const funct::Parameter& p14,
0738 const funct::Parameter& p15,
0739 const funct::Parameter& p16,
0740 const funct::Parameter& p17) {
0741 return function<args, helper::null_t>(
0742 f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17);
0743 }
0744
0745 template <unsigned int args, typename Tag, typename F>
0746 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0747 const funct::Parameter& p0,
0748 const funct::Parameter& p1,
0749 const funct::Parameter& p2,
0750 const funct::Parameter& p3,
0751 const funct::Parameter& p4,
0752 const funct::Parameter& p5,
0753 const funct::Parameter& p6,
0754 const funct::Parameter& p7,
0755 const funct::Parameter& p8,
0756 const funct::Parameter& p9,
0757 const funct::Parameter& p10,
0758 const funct::Parameter& p11,
0759 const funct::Parameter& p12,
0760 const funct::Parameter& p13,
0761 const funct::Parameter& p14,
0762 const funct::Parameter& p15,
0763 const funct::Parameter& p16,
0764 const funct::Parameter& p17,
0765 const funct::Parameter& p18) {
0766 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0767 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0768 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0769 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0770 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0771 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0772 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0773 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0774 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0775 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0776 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0777 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0778 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0779 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0780 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12);
0781 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13);
0782 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14);
0783 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15);
0784 helper::RootFunctionHelper<F, args, Tag>::addParameter(p16);
0785 helper::RootFunctionHelper<F, args, Tag>::addParameter(p17);
0786 helper::RootFunctionHelper<F, args, Tag>::addParameter(p18);
0787 return fun;
0788 }
0789
0790 template <unsigned int args, typename F>
0791 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0792 const funct::Parameter& p0,
0793 const funct::Parameter& p1,
0794 const funct::Parameter& p2,
0795 const funct::Parameter& p3,
0796 const funct::Parameter& p4,
0797 const funct::Parameter& p5,
0798 const funct::Parameter& p6,
0799 const funct::Parameter& p7,
0800 const funct::Parameter& p8,
0801 const funct::Parameter& p9,
0802 const funct::Parameter& p10,
0803 const funct::Parameter& p11,
0804 const funct::Parameter& p12,
0805 const funct::Parameter& p13,
0806 const funct::Parameter& p14,
0807 const funct::Parameter& p15,
0808 const funct::Parameter& p16,
0809 const funct::Parameter& p17,
0810 const funct::Parameter& p18) {
0811 return function<args, helper::null_t>(
0812 f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
0813 }
0814
0815 template <unsigned int args, typename Tag, typename F>
0816 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(F& f,
0817 const funct::Parameter& p0,
0818 const funct::Parameter& p1,
0819 const funct::Parameter& p2,
0820 const funct::Parameter& p3,
0821 const funct::Parameter& p4,
0822 const funct::Parameter& p5,
0823 const funct::Parameter& p6,
0824 const funct::Parameter& p7,
0825 const funct::Parameter& p8,
0826 const funct::Parameter& p9,
0827 const funct::Parameter& p10,
0828 const funct::Parameter& p11,
0829 const funct::Parameter& p12,
0830 const funct::Parameter& p13,
0831 const funct::Parameter& p14,
0832 const funct::Parameter& p15,
0833 const funct::Parameter& p16,
0834 const funct::Parameter& p17,
0835 const funct::Parameter& p18,
0836 const funct::Parameter& p19) {
0837 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0838 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0839 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0);
0840 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1);
0841 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2);
0842 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3);
0843 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4);
0844 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5);
0845 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6);
0846 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7);
0847 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8);
0848 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9);
0849 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10);
0850 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11);
0851 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12);
0852 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13);
0853 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14);
0854 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15);
0855 helper::RootFunctionHelper<F, args, Tag>::addParameter(p16);
0856 helper::RootFunctionHelper<F, args, Tag>::addParameter(p17);
0857 helper::RootFunctionHelper<F, args, Tag>::addParameter(p18);
0858 helper::RootFunctionHelper<F, args, Tag>::addParameter(p19);
0859 return fun;
0860 }
0861
0862 template <unsigned int args, typename F>
0863 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0864 const funct::Parameter& p0,
0865 const funct::Parameter& p1,
0866 const funct::Parameter& p2,
0867 const funct::Parameter& p3,
0868 const funct::Parameter& p4,
0869 const funct::Parameter& p5,
0870 const funct::Parameter& p6,
0871 const funct::Parameter& p7,
0872 const funct::Parameter& p8,
0873 const funct::Parameter& p9,
0874 const funct::Parameter& p10,
0875 const funct::Parameter& p11,
0876 const funct::Parameter& p12,
0877 const funct::Parameter& p13,
0878 const funct::Parameter& p14,
0879 const funct::Parameter& p15,
0880 const funct::Parameter& p16,
0881 const funct::Parameter& p17,
0882 const funct::Parameter& p18,
0883 const funct::Parameter& p19) {
0884 return function<args, helper::null_t>(
0885 f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19);
0886 }
0887
0888 template <unsigned int args, typename Tag, typename F>
0889 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(
0890 F& f, const std::vector<funct::Parameter>& pars) {
0891 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0892 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0893 std::vector<funct::Parameter>::const_iterator i, b = pars.begin(), e = pars.end();
0894 for (i = b; i != e; ++i)
0895 helper::RootFunctionHelper<F, args, Tag>::addParameter(*i);
0896 return fun;
0897 }
0898
0899 template <unsigned int args, typename F>
0900 typename helper::RootFunctionHelper<F, args>::root_function function(F& f,
0901 const std::vector<funct::Parameter>& pars) {
0902 return function_t<args, helper::null_t>(f, pars);
0903 }
0904
0905 template <unsigned int args, typename Tag, typename F>
0906 typename helper::RootFunctionHelper<F, args, Tag>::root_function function_t(
0907 F& f, const std::vector<std::shared_ptr<double> >& pars) {
0908 typename helper::RootFunctionHelper<F, args, Tag>::root_function fun =
0909 helper::RootFunctionHelper<F, args, Tag>::fun(f);
0910 std::vector<std::shared_ptr<double> >::const_iterator i, b = pars.begin(), e = pars.end();
0911 for (i = b; i != e; ++i)
0912 helper::RootFunctionHelper<F, args, Tag>::addParameter(*i);
0913 return fun;
0914 }
0915
0916 template <unsigned int args, typename F>
0917 typename helper::RootFunctionHelper<F, args>::root_function function(
0918 F& f, const std::vector<std::shared_ptr<double> >& pars) {
0919 return function_t<args, helper::null_t>(f, pars);
0920 }
0921
0922 }
0923
0924 #endif