00001 #ifndef PhysicsTools_Utilities_rootFunction_h 00002 #define PhysicsTools_Utilities_rootFunction_h 00003 #include "PhysicsTools/Utilities/interface/RootFunctionHelper.h" 00004 00005 namespace root { 00006 template<unsigned int args, typename Tag, typename F> 00007 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00008 function_t(F& f) { 00009 return helper::RootFunctionHelper<F, args, Tag>::fun(f); 00010 } 00011 00012 template<unsigned int args, typename F> 00013 typename helper::RootFunctionHelper<F, args>::root_function 00014 function(F& f) { 00015 return function_t<args, helper::null_t>(f); 00016 } 00017 00018 template<unsigned int args, typename Tag, typename F> 00019 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00020 function_t(F& f, 00021 const funct::Parameter & p0) { 00022 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00023 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00024 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00025 return fun; 00026 } 00027 00028 template<unsigned int args, typename F> 00029 typename helper::RootFunctionHelper<F, args>::root_function 00030 function(F& f, 00031 const funct::Parameter & p0) { 00032 return function_t<args, helper::null_t>(f, p0); 00033 } 00034 00035 template<unsigned int args, typename Tag, typename F> 00036 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00037 function_t(F& f, 00038 const funct::Parameter & p0, 00039 const funct::Parameter & p1) { 00040 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00041 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00042 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00043 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00044 return fun; 00045 } 00046 00047 template<unsigned int args, typename F> 00048 typename helper::RootFunctionHelper<F, args>::root_function 00049 function(F& f, 00050 const funct::Parameter & p0, 00051 const funct::Parameter & p1) { 00052 return function<args, helper::null_t>(f, p0, p1); 00053 } 00054 00055 template<unsigned int args, typename Tag, typename F> 00056 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00057 function_t(F& f, 00058 const funct::Parameter & p0, 00059 const funct::Parameter & p1, 00060 const funct::Parameter & p2) { 00061 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00062 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00063 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00064 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00065 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00066 return fun; 00067 } 00068 00069 template<unsigned int args, typename F> 00070 typename helper::RootFunctionHelper<F, args>::root_function 00071 function(F& f, 00072 const funct::Parameter & p0, 00073 const funct::Parameter & p1, 00074 const funct::Parameter & p2) { 00075 return function<args, helper::null_t>(f, p0, p1, p2); 00076 } 00077 00078 template<unsigned int args, typename Tag, typename F> 00079 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00080 function_t(F& f, 00081 const funct::Parameter & p0, 00082 const funct::Parameter & p1, 00083 const funct::Parameter & p2, 00084 const funct::Parameter & p3) { 00085 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00086 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00087 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00088 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00089 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00090 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00091 return fun; 00092 } 00093 00094 template<unsigned int args, typename F> 00095 typename helper::RootFunctionHelper<F, args>::root_function 00096 function(F& f, 00097 const funct::Parameter & p0, 00098 const funct::Parameter & p1, 00099 const funct::Parameter & p2, 00100 const funct::Parameter & p3) { 00101 return function<args, helper::null_t>(f, p0, p1, p2, p3); 00102 } 00103 00104 template<unsigned int args, typename Tag, typename F> 00105 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00106 function_t(F& f, 00107 const funct::Parameter & p0, 00108 const funct::Parameter & p1, 00109 const funct::Parameter & p2, 00110 const funct::Parameter & p3, 00111 const funct::Parameter & p4) { 00112 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00113 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00114 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00115 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00116 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00117 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00118 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00119 return fun; 00120 } 00121 00122 template<unsigned int args, typename F> 00123 typename helper::RootFunctionHelper<F, args>::root_function 00124 function(F& f, 00125 const funct::Parameter & p0, 00126 const funct::Parameter & p1, 00127 const funct::Parameter & p2, 00128 const funct::Parameter & p3, 00129 const funct::Parameter & p4) { 00130 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4); 00131 } 00132 00133 template<unsigned int args, typename Tag, typename F> 00134 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00135 function_t(F& f, 00136 const funct::Parameter & p0, 00137 const funct::Parameter & p1, 00138 const funct::Parameter & p2, 00139 const funct::Parameter & p3, 00140 const funct::Parameter & p4, 00141 const funct::Parameter & p5) { 00142 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00143 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00144 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00145 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00146 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00147 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00148 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00149 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00150 return fun; 00151 } 00152 00153 template<unsigned int args, typename F> 00154 typename helper::RootFunctionHelper<F, args>::root_function 00155 function(F& f, 00156 const funct::Parameter & p0, 00157 const funct::Parameter & p1, 00158 const funct::Parameter & p2, 00159 const funct::Parameter & p3, 00160 const funct::Parameter & p4, 00161 const funct::Parameter & p5) { 00162 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5); 00163 } 00164 00165 template<unsigned int args, typename Tag, typename F> 00166 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00167 function_t(F& f, 00168 const funct::Parameter & p0, 00169 const funct::Parameter & p1, 00170 const funct::Parameter & p2, 00171 const funct::Parameter & p3, 00172 const funct::Parameter & p4, 00173 const funct::Parameter & p5, 00174 const funct::Parameter & p6) { 00175 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00176 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00177 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00178 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00179 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00180 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00181 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00182 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00183 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00184 return fun; 00185 } 00186 00187 template<unsigned int args, typename F> 00188 typename helper::RootFunctionHelper<F, args>::root_function 00189 function(F& f, 00190 const funct::Parameter & p0, 00191 const funct::Parameter & p1, 00192 const funct::Parameter & p2, 00193 const funct::Parameter & p3, 00194 const funct::Parameter & p4, 00195 const funct::Parameter & p5, 00196 const funct::Parameter & p6) { 00197 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6); 00198 } 00199 00200 template<unsigned int args, typename Tag, typename F> 00201 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00202 function_t(F& f, 00203 const funct::Parameter & p0, 00204 const funct::Parameter & p1, 00205 const funct::Parameter & p2, 00206 const funct::Parameter & p3, 00207 const funct::Parameter & p4, 00208 const funct::Parameter & p5, 00209 const funct::Parameter & p6, 00210 const funct::Parameter & p7) { 00211 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00212 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00213 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00214 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00215 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00216 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00217 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00218 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00219 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00220 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00221 return fun; 00222 } 00223 00224 template<unsigned int args, typename F> 00225 typename helper::RootFunctionHelper<F, args>::root_function 00226 function(F& f, 00227 const funct::Parameter & p0, 00228 const funct::Parameter & p1, 00229 const funct::Parameter & p2, 00230 const funct::Parameter & p3, 00231 const funct::Parameter & p4, 00232 const funct::Parameter & p5, 00233 const funct::Parameter & p6, 00234 const funct::Parameter & p7) { 00235 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7); 00236 } 00237 00238 template<unsigned int args, typename Tag, typename F> 00239 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00240 function_t(F& f, 00241 const funct::Parameter & p0, 00242 const funct::Parameter & p1, 00243 const funct::Parameter & p2, 00244 const funct::Parameter & p3, 00245 const funct::Parameter & p4, 00246 const funct::Parameter & p5, 00247 const funct::Parameter & p6, 00248 const funct::Parameter & p7, 00249 const funct::Parameter & p8) { 00250 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00251 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00252 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00253 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00254 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00255 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00256 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00257 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00258 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00259 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00260 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00261 return fun; 00262 } 00263 00264 template<unsigned int args, typename F> 00265 typename helper::RootFunctionHelper<F, args>::root_function 00266 function(F& f, 00267 const funct::Parameter & p0, 00268 const funct::Parameter & p1, 00269 const funct::Parameter & p2, 00270 const funct::Parameter & p3, 00271 const funct::Parameter & p4, 00272 const funct::Parameter & p5, 00273 const funct::Parameter & p6, 00274 const funct::Parameter & p7, 00275 const funct::Parameter & p8) { 00276 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8); 00277 } 00278 00279 template<unsigned int args, typename Tag, typename F> 00280 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00281 function_t(F& f, 00282 const funct::Parameter & p0, 00283 const funct::Parameter & p1, 00284 const funct::Parameter & p2, 00285 const funct::Parameter & p3, 00286 const funct::Parameter & p4, 00287 const funct::Parameter & p5, 00288 const funct::Parameter & p6, 00289 const funct::Parameter & p7, 00290 const funct::Parameter & p8, 00291 const funct::Parameter & p9) { 00292 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00293 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00294 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00295 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00296 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00297 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00298 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00299 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00300 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00301 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00302 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00303 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00304 return fun; 00305 } 00306 00307 template<unsigned int args, typename F> 00308 typename helper::RootFunctionHelper<F, args>::root_function 00309 function(F& f, 00310 const funct::Parameter & p0, 00311 const funct::Parameter & p1, 00312 const funct::Parameter & p2, 00313 const funct::Parameter & p3, 00314 const funct::Parameter & p4, 00315 const funct::Parameter & p5, 00316 const funct::Parameter & p6, 00317 const funct::Parameter & p7, 00318 const funct::Parameter & p8, 00319 const funct::Parameter & p9) { 00320 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); 00321 } 00322 00323 template<unsigned int args, typename Tag, typename F> 00324 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00325 function_t(F& f, 00326 const funct::Parameter & p0, 00327 const funct::Parameter & p1, 00328 const funct::Parameter & p2, 00329 const funct::Parameter & p3, 00330 const funct::Parameter & p4, 00331 const funct::Parameter & p5, 00332 const funct::Parameter & p6, 00333 const funct::Parameter & p7, 00334 const funct::Parameter & p8, 00335 const funct::Parameter & p9, 00336 const funct::Parameter & p10) { 00337 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00338 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00339 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00340 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00341 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00342 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00343 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00344 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00345 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00346 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00347 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00348 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00349 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00350 return fun; 00351 } 00352 00353 template<unsigned int args, typename F> 00354 typename helper::RootFunctionHelper<F, args>::root_function 00355 function(F& f, 00356 const funct::Parameter & p0, 00357 const funct::Parameter & p1, 00358 const funct::Parameter & p2, 00359 const funct::Parameter & p3, 00360 const funct::Parameter & p4, 00361 const funct::Parameter & p5, 00362 const funct::Parameter & p6, 00363 const funct::Parameter & p7, 00364 const funct::Parameter & p8, 00365 const funct::Parameter & p9, 00366 const funct::Parameter & p10) { 00367 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10); 00368 } 00369 00370 template<unsigned int args, typename Tag, typename F> 00371 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00372 function_t(F& f, 00373 const funct::Parameter & p0, 00374 const funct::Parameter & p1, 00375 const funct::Parameter & p2, 00376 const funct::Parameter & p3, 00377 const funct::Parameter & p4, 00378 const funct::Parameter & p5, 00379 const funct::Parameter & p6, 00380 const funct::Parameter & p7, 00381 const funct::Parameter & p8, 00382 const funct::Parameter & p9, 00383 const funct::Parameter & p10, 00384 const funct::Parameter & p11) { 00385 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00386 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00387 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00388 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00389 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00390 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00391 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00392 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00393 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00394 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00395 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00396 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00397 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00398 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00399 return fun; 00400 } 00401 00402 template<unsigned int args, typename F> 00403 typename helper::RootFunctionHelper<F, args>::root_function 00404 function(F& f, 00405 const funct::Parameter & p0, 00406 const funct::Parameter & p1, 00407 const funct::Parameter & p2, 00408 const funct::Parameter & p3, 00409 const funct::Parameter & p4, 00410 const funct::Parameter & p5, 00411 const funct::Parameter & p6, 00412 const funct::Parameter & p7, 00413 const funct::Parameter & p8, 00414 const funct::Parameter & p9, 00415 const funct::Parameter & p10, 00416 const funct::Parameter & p11) { 00417 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11); 00418 } 00419 00420 template<unsigned int args, typename Tag, typename F> 00421 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00422 function_t(F& f, 00423 const funct::Parameter & p0, 00424 const funct::Parameter & p1, 00425 const funct::Parameter & p2, 00426 const funct::Parameter & p3, 00427 const funct::Parameter & p4, 00428 const funct::Parameter & p5, 00429 const funct::Parameter & p6, 00430 const funct::Parameter & p7, 00431 const funct::Parameter & p8, 00432 const funct::Parameter & p9, 00433 const funct::Parameter & p10, 00434 const funct::Parameter & p11, 00435 const funct::Parameter & p12) { 00436 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00437 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00438 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00439 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00440 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00441 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00442 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00443 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00444 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00445 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00446 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00447 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00448 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00449 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00450 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12); 00451 return fun; 00452 } 00453 00454 template<unsigned int args, typename F> 00455 typename helper::RootFunctionHelper<F, args>::root_function 00456 function(F& f, 00457 const funct::Parameter & p0, 00458 const funct::Parameter & p1, 00459 const funct::Parameter & p2, 00460 const funct::Parameter & p3, 00461 const funct::Parameter & p4, 00462 const funct::Parameter & p5, 00463 const funct::Parameter & p6, 00464 const funct::Parameter & p7, 00465 const funct::Parameter & p8, 00466 const funct::Parameter & p9, 00467 const funct::Parameter & p10, 00468 const funct::Parameter & p11, 00469 const funct::Parameter & p12) { 00470 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12); 00471 } 00472 00473 template<unsigned int args, typename Tag, typename F> 00474 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00475 function_t(F& f, 00476 const funct::Parameter & p0, 00477 const funct::Parameter & p1, 00478 const funct::Parameter & p2, 00479 const funct::Parameter & p3, 00480 const funct::Parameter & p4, 00481 const funct::Parameter & p5, 00482 const funct::Parameter & p6, 00483 const funct::Parameter & p7, 00484 const funct::Parameter & p8, 00485 const funct::Parameter & p9, 00486 const funct::Parameter & p10, 00487 const funct::Parameter & p11, 00488 const funct::Parameter & p12, 00489 const funct::Parameter & p13) { 00490 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00491 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00492 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00493 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00494 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00495 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00496 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00497 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00498 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00499 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00500 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00501 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00502 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00503 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00504 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12); 00505 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13); 00506 return fun; 00507 } 00508 00509 template<unsigned int args, typename F> 00510 typename helper::RootFunctionHelper<F, args>::root_function 00511 function(F& f, 00512 const funct::Parameter & p0, 00513 const funct::Parameter & p1, 00514 const funct::Parameter & p2, 00515 const funct::Parameter & p3, 00516 const funct::Parameter & p4, 00517 const funct::Parameter & p5, 00518 const funct::Parameter & p6, 00519 const funct::Parameter & p7, 00520 const funct::Parameter & p8, 00521 const funct::Parameter & p9, 00522 const funct::Parameter & p10, 00523 const funct::Parameter & p11, 00524 const funct::Parameter & p12, 00525 const funct::Parameter & p13) { 00526 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13); 00527 } 00528 00529 template<unsigned int args, typename Tag, typename F> 00530 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00531 function_t(F& f, 00532 const funct::Parameter & p0, 00533 const funct::Parameter & p1, 00534 const funct::Parameter & p2, 00535 const funct::Parameter & p3, 00536 const funct::Parameter & p4, 00537 const funct::Parameter & p5, 00538 const funct::Parameter & p6, 00539 const funct::Parameter & p7, 00540 const funct::Parameter & p8, 00541 const funct::Parameter & p9, 00542 const funct::Parameter & p10, 00543 const funct::Parameter & p11, 00544 const funct::Parameter & p12, 00545 const funct::Parameter & p13, 00546 const funct::Parameter & p14) { 00547 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00548 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00549 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00550 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00551 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00552 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00553 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00554 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00555 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00556 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00557 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00558 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00559 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00560 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00561 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12); 00562 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13); 00563 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14); 00564 return fun; 00565 } 00566 00567 template<unsigned int args, typename F> 00568 typename helper::RootFunctionHelper<F, args>::root_function 00569 function(F& f, 00570 const funct::Parameter & p0, 00571 const funct::Parameter & p1, 00572 const funct::Parameter & p2, 00573 const funct::Parameter & p3, 00574 const funct::Parameter & p4, 00575 const funct::Parameter & p5, 00576 const funct::Parameter & p6, 00577 const funct::Parameter & p7, 00578 const funct::Parameter & p8, 00579 const funct::Parameter & p9, 00580 const funct::Parameter & p10, 00581 const funct::Parameter & p11, 00582 const funct::Parameter & p12, 00583 const funct::Parameter & p13, 00584 const funct::Parameter & p14) { 00585 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14); 00586 } 00587 00588 template<unsigned int args, typename Tag, typename F> 00589 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00590 function_t(F& f, 00591 const funct::Parameter & p0, 00592 const funct::Parameter & p1, 00593 const funct::Parameter & p2, 00594 const funct::Parameter & p3, 00595 const funct::Parameter & p4, 00596 const funct::Parameter & p5, 00597 const funct::Parameter & p6, 00598 const funct::Parameter & p7, 00599 const funct::Parameter & p8, 00600 const funct::Parameter & p9, 00601 const funct::Parameter & p10, 00602 const funct::Parameter & p11, 00603 const funct::Parameter & p12, 00604 const funct::Parameter & p13, 00605 const funct::Parameter & p14, 00606 const funct::Parameter & p15) { 00607 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00608 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00609 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00610 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00611 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00612 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00613 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00614 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00615 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00616 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00617 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00618 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00619 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00620 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00621 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12); 00622 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13); 00623 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14); 00624 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15); 00625 return fun; 00626 } 00627 00628 template<unsigned int args, typename F> 00629 typename helper::RootFunctionHelper<F, args>::root_function 00630 function(F& f, 00631 const funct::Parameter & p0, 00632 const funct::Parameter & p1, 00633 const funct::Parameter & p2, 00634 const funct::Parameter & p3, 00635 const funct::Parameter & p4, 00636 const funct::Parameter & p5, 00637 const funct::Parameter & p6, 00638 const funct::Parameter & p7, 00639 const funct::Parameter & p8, 00640 const funct::Parameter & p9, 00641 const funct::Parameter & p10, 00642 const funct::Parameter & p11, 00643 const funct::Parameter & p12, 00644 const funct::Parameter & p13, 00645 const funct::Parameter & p14, 00646 const funct::Parameter & p15) { 00647 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15); 00648 } 00649 00650 template<unsigned int args, typename Tag, typename F> 00651 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00652 function_t(F& f, 00653 const funct::Parameter & p0, 00654 const funct::Parameter & p1, 00655 const funct::Parameter & p2, 00656 const funct::Parameter & p3, 00657 const funct::Parameter & p4, 00658 const funct::Parameter & p5, 00659 const funct::Parameter & p6, 00660 const funct::Parameter & p7, 00661 const funct::Parameter & p8, 00662 const funct::Parameter & p9, 00663 const funct::Parameter & p10, 00664 const funct::Parameter & p11, 00665 const funct::Parameter & p12, 00666 const funct::Parameter & p13, 00667 const funct::Parameter & p14, 00668 const funct::Parameter & p15, 00669 const funct::Parameter & p16) { 00670 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00671 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00672 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00673 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00674 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00675 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00676 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00677 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00678 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00679 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00680 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00681 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00682 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00683 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00684 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12); 00685 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13); 00686 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14); 00687 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15); 00688 helper::RootFunctionHelper<F, args, Tag>::addParameter(p16); 00689 return fun; 00690 } 00691 00692 template<unsigned int args, typename F> 00693 typename helper::RootFunctionHelper<F, args>::root_function 00694 function(F& f, 00695 const funct::Parameter & p0, 00696 const funct::Parameter & p1, 00697 const funct::Parameter & p2, 00698 const funct::Parameter & p3, 00699 const funct::Parameter & p4, 00700 const funct::Parameter & p5, 00701 const funct::Parameter & p6, 00702 const funct::Parameter & p7, 00703 const funct::Parameter & p8, 00704 const funct::Parameter & p9, 00705 const funct::Parameter & p10, 00706 const funct::Parameter & p11, 00707 const funct::Parameter & p12, 00708 const funct::Parameter & p13, 00709 const funct::Parameter & p14, 00710 const funct::Parameter & p15, 00711 const funct::Parameter & p16) { 00712 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16); 00713 } 00714 00715 template<unsigned int args, typename Tag, typename F> 00716 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00717 function_t(F& f, 00718 const funct::Parameter & p0, 00719 const funct::Parameter & p1, 00720 const funct::Parameter & p2, 00721 const funct::Parameter & p3, 00722 const funct::Parameter & p4, 00723 const funct::Parameter & p5, 00724 const funct::Parameter & p6, 00725 const funct::Parameter & p7, 00726 const funct::Parameter & p8, 00727 const funct::Parameter & p9, 00728 const funct::Parameter & p10, 00729 const funct::Parameter & p11, 00730 const funct::Parameter & p12, 00731 const funct::Parameter & p13, 00732 const funct::Parameter & p14, 00733 const funct::Parameter & p15, 00734 const funct::Parameter & p16, 00735 const funct::Parameter & p17) { 00736 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00737 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00738 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00739 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00740 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00741 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00742 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00743 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00744 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00745 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00746 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00747 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00748 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00749 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00750 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12); 00751 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13); 00752 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14); 00753 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15); 00754 helper::RootFunctionHelper<F, args, Tag>::addParameter(p16); 00755 helper::RootFunctionHelper<F, args, Tag>::addParameter(p17); 00756 return fun; 00757 } 00758 00759 template<unsigned int args, typename F> 00760 typename helper::RootFunctionHelper<F, args>::root_function 00761 function(F& f, 00762 const funct::Parameter & p0, 00763 const funct::Parameter & p1, 00764 const funct::Parameter & p2, 00765 const funct::Parameter & p3, 00766 const funct::Parameter & p4, 00767 const funct::Parameter & p5, 00768 const funct::Parameter & p6, 00769 const funct::Parameter & p7, 00770 const funct::Parameter & p8, 00771 const funct::Parameter & p9, 00772 const funct::Parameter & p10, 00773 const funct::Parameter & p11, 00774 const funct::Parameter & p12, 00775 const funct::Parameter & p13, 00776 const funct::Parameter & p14, 00777 const funct::Parameter & p15, 00778 const funct::Parameter & p16, 00779 const funct::Parameter & p17) { 00780 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17); 00781 } 00782 00783 template<unsigned int args, typename Tag, typename F> 00784 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00785 function_t(F& f, 00786 const funct::Parameter & p0, 00787 const funct::Parameter & p1, 00788 const funct::Parameter & p2, 00789 const funct::Parameter & p3, 00790 const funct::Parameter & p4, 00791 const funct::Parameter & p5, 00792 const funct::Parameter & p6, 00793 const funct::Parameter & p7, 00794 const funct::Parameter & p8, 00795 const funct::Parameter & p9, 00796 const funct::Parameter & p10, 00797 const funct::Parameter & p11, 00798 const funct::Parameter & p12, 00799 const funct::Parameter & p13, 00800 const funct::Parameter & p14, 00801 const funct::Parameter & p15, 00802 const funct::Parameter & p16, 00803 const funct::Parameter & p17, 00804 const funct::Parameter & p18) { 00805 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00806 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00807 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00808 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00809 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00810 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00811 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00812 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00813 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00814 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00815 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00816 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00817 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00818 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00819 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12); 00820 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13); 00821 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14); 00822 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15); 00823 helper::RootFunctionHelper<F, args, Tag>::addParameter(p16); 00824 helper::RootFunctionHelper<F, args, Tag>::addParameter(p17); 00825 helper::RootFunctionHelper<F, args, Tag>::addParameter(p18); 00826 return fun; 00827 } 00828 00829 template<unsigned int args, typename F> 00830 typename helper::RootFunctionHelper<F, args>::root_function 00831 function(F& f, 00832 const funct::Parameter & p0, 00833 const funct::Parameter & p1, 00834 const funct::Parameter & p2, 00835 const funct::Parameter & p3, 00836 const funct::Parameter & p4, 00837 const funct::Parameter & p5, 00838 const funct::Parameter & p6, 00839 const funct::Parameter & p7, 00840 const funct::Parameter & p8, 00841 const funct::Parameter & p9, 00842 const funct::Parameter & p10, 00843 const funct::Parameter & p11, 00844 const funct::Parameter & p12, 00845 const funct::Parameter & p13, 00846 const funct::Parameter & p14, 00847 const funct::Parameter & p15, 00848 const funct::Parameter & p16, 00849 const funct::Parameter & p17, 00850 const funct::Parameter & p18) { 00851 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18); 00852 } 00853 00854 template<unsigned int args, typename Tag, typename F> 00855 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00856 function_t(F& f, 00857 const funct::Parameter & p0, 00858 const funct::Parameter & p1, 00859 const funct::Parameter & p2, 00860 const funct::Parameter & p3, 00861 const funct::Parameter & p4, 00862 const funct::Parameter & p5, 00863 const funct::Parameter & p6, 00864 const funct::Parameter & p7, 00865 const funct::Parameter & p8, 00866 const funct::Parameter & p9, 00867 const funct::Parameter & p10, 00868 const funct::Parameter & p11, 00869 const funct::Parameter & p12, 00870 const funct::Parameter & p13, 00871 const funct::Parameter & p14, 00872 const funct::Parameter & p15, 00873 const funct::Parameter & p16, 00874 const funct::Parameter & p17, 00875 const funct::Parameter & p18, 00876 const funct::Parameter & p19) { 00877 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00878 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00879 helper::RootFunctionHelper<F, args, Tag>::addParameter(p0); 00880 helper::RootFunctionHelper<F, args, Tag>::addParameter(p1); 00881 helper::RootFunctionHelper<F, args, Tag>::addParameter(p2); 00882 helper::RootFunctionHelper<F, args, Tag>::addParameter(p3); 00883 helper::RootFunctionHelper<F, args, Tag>::addParameter(p4); 00884 helper::RootFunctionHelper<F, args, Tag>::addParameter(p5); 00885 helper::RootFunctionHelper<F, args, Tag>::addParameter(p6); 00886 helper::RootFunctionHelper<F, args, Tag>::addParameter(p7); 00887 helper::RootFunctionHelper<F, args, Tag>::addParameter(p8); 00888 helper::RootFunctionHelper<F, args, Tag>::addParameter(p9); 00889 helper::RootFunctionHelper<F, args, Tag>::addParameter(p10); 00890 helper::RootFunctionHelper<F, args, Tag>::addParameter(p11); 00891 helper::RootFunctionHelper<F, args, Tag>::addParameter(p12); 00892 helper::RootFunctionHelper<F, args, Tag>::addParameter(p13); 00893 helper::RootFunctionHelper<F, args, Tag>::addParameter(p14); 00894 helper::RootFunctionHelper<F, args, Tag>::addParameter(p15); 00895 helper::RootFunctionHelper<F, args, Tag>::addParameter(p16); 00896 helper::RootFunctionHelper<F, args, Tag>::addParameter(p17); 00897 helper::RootFunctionHelper<F, args, Tag>::addParameter(p18); 00898 helper::RootFunctionHelper<F, args, Tag>::addParameter(p19); 00899 return fun; 00900 } 00901 00902 template<unsigned int args, typename F> 00903 typename helper::RootFunctionHelper<F, args>::root_function 00904 function(F& f, 00905 const funct::Parameter & p0, 00906 const funct::Parameter & p1, 00907 const funct::Parameter & p2, 00908 const funct::Parameter & p3, 00909 const funct::Parameter & p4, 00910 const funct::Parameter & p5, 00911 const funct::Parameter & p6, 00912 const funct::Parameter & p7, 00913 const funct::Parameter & p8, 00914 const funct::Parameter & p9, 00915 const funct::Parameter & p10, 00916 const funct::Parameter & p11, 00917 const funct::Parameter & p12, 00918 const funct::Parameter & p13, 00919 const funct::Parameter & p14, 00920 const funct::Parameter & p15, 00921 const funct::Parameter & p16, 00922 const funct::Parameter & p17, 00923 const funct::Parameter & p18, 00924 const funct::Parameter & p19) { 00925 return function<args, helper::null_t>(f, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19); 00926 } 00927 00928 template<unsigned int args, typename Tag, typename F> 00929 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00930 function_t(F& f, const std::vector<funct::Parameter> & pars) { 00931 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00932 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00933 std::vector<funct::Parameter>::const_iterator i, 00934 b = pars.begin(), e = pars.end(); 00935 for(i = b; i != e; ++i) 00936 helper::RootFunctionHelper<F, args, Tag>::addParameter(*i); 00937 return fun; 00938 } 00939 00940 template<unsigned int args, typename F> 00941 typename helper::RootFunctionHelper<F, args>::root_function 00942 function(F& f, const std::vector<funct::Parameter> & pars) { 00943 return function_t<args, helper::null_t>(f, pars); 00944 } 00945 00946 template<unsigned int args, typename Tag, typename F> 00947 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00948 function_t(F& f, const std::vector<boost::shared_ptr<double> > & pars) { 00949 typename helper::RootFunctionHelper<F, args, Tag>::root_function 00950 fun = helper::RootFunctionHelper<F, args, Tag>::fun(f); 00951 std::vector<boost::shared_ptr<double> >::const_iterator i, 00952 b = pars.begin(), e = pars.end(); 00953 for(i = b; i != e; ++i) 00954 helper::RootFunctionHelper<F, args, Tag>::addParameter(*i); 00955 return fun; 00956 } 00957 00958 template<unsigned int args, typename F> 00959 typename helper::RootFunctionHelper<F, args>::root_function 00960 function(F& f, const std::vector<boost::shared_ptr<double> > & pars) { 00961 return function_t<args, helper::null_t>(f, pars); 00962 } 00963 00964 } 00965 00966 #endif