CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/PhysicsTools/Utilities/interface/rootFunction.h

Go to the documentation of this file.
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