284 float nu,
rho,lzmlh,amax,chiSq0;
286 std::vector<float> res(nData);
287 std::vector<float>
beta(nParam);
288 std::vector<float> dp(nParam);
289 std::vector<float> alpsav(nParam);
290 std::vector<float> psav(nParam);
291 std::vector<float> dydp(nData*nParam);
292 std::vector<float>
alpha(nParam*nParam);
294 bool haslimits =
false;
295 for(j=0;j<nParam;j++){
304 dgauss(
p, nParam, nData, dydp);
308 for(j = 0; j < nParam; j++){
309 if(
alpha[j*nParam+j]>amax)amax=
alpha[j*nParam+j];
313 for(j = 0; j < nParam; j++){
314 alpsav[j]=
alpha[j*nParam+j];
315 alpha[j*nParam+j]=alpsav[j]+lambda;
323 for(j=0;j<nParam;j++){
330 for(j=0;j<nParam;j++){
331 if (
p[j]<=plimmin[j] ||
p[j]>=plimmax[j]) chiSqr*=10000;
336 for(j=0;j<nParam;j++){
337 lzmlh+=dp[j]*(lambda*dp[j]+
beta[j]);
339 rho=2.*(chiSq0-chiSqr)/lzmlh;
341 for (j=0;j<nParam;j++)
p[j]=psav[j];
345 for(j = 0; j < nParam; j++){
346 alpha[j*nParam+j]=alpsav[j]+lambda;
351 lambda=lambda*fmax(0.333333,1.-
pow(2.*rho-1.,3));
352 dchiSqr=chiSqr-chiSq0;
double beta(double KE, const simb::MCParticle *part)
void solve_matrix(const std::vector< float > &beta, const std::vector< float > &alpha, const int npar, std::vector< float > &dp)
void fgauss(const float yd[], const float p[], const int npar, const int ndat, std::vector< float > &res)
static int max(int a, int b)
float cal_xi2(const std::vector< float > &res, const int ndat)
void dgauss(const float p[], const int npar, const int ndat, std::vector< float > &dydp)
void setup_matrix(const std::vector< float > &res, const std::vector< float > &dydp, const int npar, const int ndat, std::vector< float > &beta, std::vector< float > &alpha)