GaussFcn2.cxx

Go to the documentation of this file.
00001 // @(#)root/minuit2:$Id: GaussFcn2.cxx 20880 2007-11-19 11:23:41Z rdm $
00002 // Authors: M. Winkler, F. James, L. Moneta, A. Zsenei   2003-2005  
00003 
00004 /**********************************************************************
00005  *                                                                    *
00006  * Copyright (c) 2005 LCG ROOT Math team,  CERN/PH-SFT                *
00007  *                                                                    *
00008  **********************************************************************/
00009 
00010 #include "GaussFcn2.h"
00011 #include "GaussFunction.h"
00012 
00013 #include <iostream>
00014 #include <assert.h>
00015 
00016 namespace ROOT {
00017 
00018    namespace Minuit2 {
00019 
00020 
00021 double GaussFcn2::operator()(const std::vector<double>& par) const {
00022 
00023   assert(par.size() == 6);
00024 
00025   GaussFunction gauss1 = GaussFunction(par[0], par[1], par[2]);
00026   GaussFunction gauss2 = GaussFunction(par[3], par[4], par[5]);
00027 
00028   double chi2 = 0.;
00029   int nmeas = fMeasurements.size();
00030   for(int n = 0; n < nmeas; n++) {
00031     chi2 += ((gauss1(fPositions[n]) + gauss2(fPositions[n]) - fMeasurements[n])*(gauss1(fPositions[n]) + gauss2(fPositions[n]) - fMeasurements[n])/fMVariances[n]);
00032   }
00033 
00034   return chi2;
00035 }
00036 
00037 void GaussFcn2::Init() {
00038 
00039   // calculate initial Value of chi2
00040 
00041   int nmeas = fMeasurements.size();
00042   double x = 0.;
00043   double x2 = 0.;
00044   double norm = 0.;
00045   double dx = fPositions[1]-fPositions[0];
00046   double c = 0.;
00047   for(int i = 0; i < nmeas; i++) {
00048     norm += fMeasurements[i];
00049     x += (fMeasurements[i]*fPositions[i]);
00050     x2 += (fMeasurements[i]*fPositions[i]*fPositions[i]);
00051     c += dx*fMeasurements[i];
00052   }
00053   double mean = x/norm;
00054   double rms2 = x2/norm - mean*mean;
00055 
00056 //   std::cout<<"FCN initial mean: "<<mean<<std::endl;
00057 //   std::cout<<"FCN initial sigma: "<<sqrt(rms2)<<std::endl;
00058 
00059   std::vector<double> par; 
00060   par.push_back(mean); par.push_back(sqrt(rms2)); par.push_back(c);
00061   par.push_back(mean); par.push_back(sqrt(rms2)); par.push_back(c);
00062 
00063   fMin = (*this)(par);
00064 //   std::cout<<"GaussFcnHistoData2 initial chi2: "<<fMin<<std::endl;
00065          
00066 }
00067 
00068 
00069   }  // namespace Minuit2
00070 
00071 }  // namespace ROOT

Generated on Tue Jul 5 14:37:12 2011 for ROOT_528-00b_version by  doxygen 1.5.1