#include "sopnamsp.h" #include "machdefs.h" #include #include #include #include #include #include #include "ntuple.h" #include "histerr.h" #include "constcosmo.h" #include "pkspectrum.h" #include "Minuit2/FunctionMinimum.h" #include "Minuit2/MnMigrad.h" #include "Minuit2/MnUserParameters.h" #include "Minuit2/MnPrint.h" #include "Minuit2/MnMinos.h" #include "Minuit2/MinosError.h" #include "Minuit2/FCNBase.h" using namespace ROOT::Minuit2; #include "Minuit2/FCNBase.h" namespace ROOT { namespace Minuit2 { class MyFCN : public FCNBase { public: MyFCN(HistoErr& herr,GenericFunc& pk); double operator()(const std::vector& par) const; double Up(void) const {return 1.;} private: HistoErr& herr_; GenericFunc& pk_; }; } } // namespace ROOT + Minuit2 void usage(void); void usage(void) { cout<<"usage: cmvfitpk [-k kmin,kmax] -e conchpkrec.ppf observ3d_1.ppf observ3d_2.ppf ..."<=narg) return -2; // --- Create spectrum cout< sigma="<> PPFNameTag("herrconc") >> herrconc; } cout<>> Reading["<> PPFNameTag("hpkrec") >> herr; if(herr.NBins()!=herrconc.NBins()) { cout<<"... bad number of bins: "<klim[1]) {herr.SetErr2(i,-1.); continue;} herr.SetErr2(i,herrconc.Error2(i)); nbinok++; } // --- Initialisation de minuit MnUserParameters upar; const int npar = 2; upar.Add("A",1.,0.01); upar.Add("B",b_ini,b_ini/100.); MyFCN fcn(herr,pkz); if(nbinok1) pos.PutObject(nt,"nt"); return 0; } //-------------------------------------------------- MyFCN::MyFCN(HistoErr& herr,GenericFunc& pk) : herr_(herr) , pk_(pk) { } double MyFCN::operator()(const std::vector& par) const { double xi2 = 0.; for(int i=0;i