[root] / trunk / math / minuit / src / TLinearMinimizer.cxx Repository:
ViewVC logotype

Diff of /trunk/math/minuit/src/TLinearMinimizer.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 25485, Mon Sep 22 07:52:52 2008 UTC revision 25486, Mon Sep 22 12:43:03 2008 UTC
# Line 64  Line 64 
64    
65    
66  TLinearMinimizer::TLinearMinimizer(int ) :  TLinearMinimizer::TLinearMinimizer(int ) :
67       fRobust(false),
68     fDim(0),     fDim(0),
69     fObjFunc(0),     fObjFunc(0),
70     fFitter(0)     fFitter(0)
# Line 72  Line 73 
73     // type is not used - needed for consistency with other minimizer plug-ins     // type is not used - needed for consistency with other minimizer plug-ins
74  }  }
75    
76    TLinearMinimizer::TLinearMinimizer ( const char * type ) :
77       fRobust(false),
78       fDim(0),
79       fObjFunc(0),
80       fFitter(0)
81    {
82       // constructor passing a type of algorithm, (supported now robust via LTS regression)
83    
84       // select type from the string
85       std::string algoname(type);
86       std::transform(algoname.begin(), algoname.end(), algoname.begin(), (int(*)(int)) tolower );
87    
88       if (algoname == "robust") fRobust = true;
89    
90    }
91    
92  TLinearMinimizer::~TLinearMinimizer()  TLinearMinimizer::~TLinearMinimizer()
93  {  {
# Line 131  Line 147 
147     // create TLinearFitter (do it now because olny now now the coordinate dimensions)     // create TLinearFitter (do it now because olny now now the coordinate dimensions)
148     if (fFitter) delete fFitter; // reset by deleting previous copy     if (fFitter) delete fFitter; // reset by deleting previous copy
149     fFitter = new TLinearFitter( static_cast<const ModelFunc::BaseFunc&>(modfunc).NDim() );     fFitter = new TLinearFitter( static_cast<const ModelFunc::BaseFunc&>(modfunc).NDim() );
150     fFitter->StoreData(false);  
151       fFitter->StoreData(fRobust); //  need a copy of data in case of robust fitting
152    
153     fFitter->SetBasisFunctions(&flist);     fFitter->SetBasisFunctions(&flist);
154    
# Line 165  Line 182 
182    
183     if (fFitter == 0 || fObjFunc == 0) return false;     if (fFitter == 0 || fObjFunc == 0) return false;
184    
185     int iret = fFitter->Eval();     int iret = 0;
186       if (!fRobust)
187          iret = fFitter->Eval();
188       else {
189          // robust fitting - get h parameter using tolerance (t.b. improved)
190          double h = Tolerance();
191          std::cout << "do robust fitting with h = " << h << std::endl;
192          iret = fFitter->EvalRobust(h);
193       }
194       fStatus = iret;
195    
196     if (iret != 0) {     if (iret != 0) {
197        Warning("Minimize","TLinearFitter failed in finding the solution");        Warning("Minimize","TLinearFitter failed in finding the solution");
# Line 175  Line 201 
201    
202     // get parameter values     // get parameter values
203     fParams.resize( fDim);     fParams.resize( fDim);
204     fErrors.resize( fDim);     // no error available for robust fitting
205       if (!fRobust) fErrors.resize( fDim);
206     for (unsigned int i = 0; i < fDim; ++i) {     for (unsigned int i = 0; i < fDim; ++i) {
207        fParams[i] = fFitter->GetParameter( i);        fParams[i] = fFitter->GetParameter( i);
208        fErrors[i] = fFitter->GetParError( i );        if (!fRobust) fErrors[i] = fFitter->GetParError( i );
209     }     }
210     fCovar.resize(fDim*fDim);     fCovar.resize(fDim*fDim);
211     double * cov = fFitter->GetCovarianceMatrix();     double * cov = fFitter->GetCovarianceMatrix();
212     std::copy(cov,cov+fDim*fDim,fCovar.begin() );  
213       if (!fRobust && cov) std::copy(cov,cov+fDim*fDim,fCovar.begin() );
214    
215     // calculate chi2 value     // calculate chi2 value
216    

Legend:
Removed from v.25485  
changed lines
  Added in v.25486

Subversion Admin
ViewVC Help
Powered by ViewVC 1.0.9