#include "RapidityFitBlastWave.h" #include "Minuit2/FCNBase.h" #include "Minuit2/FunctionMinimum.h" #include "Minuit2/MnMigrad.h" #include "Minuit2/MnMinos.h" #include "Minuit2/MnHesse.h" #include "Minuit2/MnUserParameterState.h" #include "Minuit2/MnPrint.h" #include "Minuit2/SimplexMinimizer.h" #include "TMath.h" #include using namespace ROOT::Minuit2; namespace RapidityFitBlastWaveNamespace { double dndy(double y, double A, double eta, double T, double mass) { double ret = 0.; int iters = 100; double deta = 2. * eta / iters; for(int i=0;i &y_, const std::vector &dndy_, const std::vector &err_, double T, double mass): fPositions(y_), fMeasurements(dndy_), fErrors(err_), fT(T), fMass(mass) // fPositions(y_), fMeasurements(dndy_), fErrors(err_), fT(T), fMass(mass), iter(0) { } ~dndyFCN() {} double operator()(const std::vector& par) const { double chi2 = 0.; for(unsigned int i=0;i fPositions; std::vector fMeasurements; std::vector fErrors; double fT, fMass; // int iter; }; } using namespace RapidityFitBlastWaveNamespace; RapidityFitBlastWave::~RapidityFitBlastWave(void) { } RapidityFitBlastWaveParameters RapidityFitBlastWave::PerformFit() { dndyFCN mfunc(y, dndy, err, fT, fMass); std::vector params(2, 0.); params[0] = Parameters.A.value; params[1] = Parameters.eta.value; //params[2] = Parameters.yav.value; MnUserParameters upar; upar.Add("A", Parameters.A.value, Parameters.A.error, Parameters.A.xmin, Parameters.A.xmax); upar.Add("eta", Parameters.eta.value, Parameters.eta.error, Parameters.eta.xmin, Parameters.eta.xmax); //upar.Add("yav", Parameters.yav.value, Parameters.yav.error, Parameters.yav.xmin, Parameters.yav.xmax); int nparams = 2; MnMigrad migrad(mfunc, upar); //std::cout<<"start migrad "<