Ignore:
Timestamp:
06/28/04 16:34:45 (20 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mfit
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mfit/MTFitLoop.cc

    r3582 r4358  
    4747#include "MTFitLoop.h"
    4848
     49#include <TArrayD.h>
    4950#include <TMinuit.h>
    5051#include <TStopwatch.h>
    5152
    5253#include "MParList.h"
     54#include "MTaskList.h"
     55#include "MEvtLoop.h"
     56
     57#include "MParameters.h"
     58
    5359#include "MRead.h"
    54 #include "MEvtLoop.h"
    5560
    5661#include "MLog.h"
    5762#include "MLogManip.h"
     63
     64ClassImp(MTFitLoop);
     65
     66using namespace std;
    5867
    5968//------------------------------------------------------------------------
     
    7483    MParList *plist = fEvtLoop->GetParList();
    7584
    76     MParameterD   *eval = (MParameterD*)plist->FindCreateObj("MParameterD", fFitParameter);
    77     MParContainer *pars = plist->FindObject(fParametersName);
     85    MParameterD   *eval = (MParameterD*)  plist->FindCreateObj("MParameterD", fFitParameter);
     86    MParContainer *pars = (MParContainer*)plist->FindObject(fParametersName);
    7887
    7988    MRead *read = (MRead*)plist->FindObject("MTaskList")->FindObject("MRead");
     
    104113    if (fDebug>=0)
    105114    {
    106         *fLog << inf << "Set: ";
    107         for (Int_t i=0; i<7; i++)
     115        *fLog << inf << "Set(" << gMinuit->fMaxpar << "): ";
     116        for (Int_t i=0; i<gMinuit->fMaxpar; i++)
    108117            *fLog << par[i] << " ";
    109118        *fLog << endl;
     
    129138}
    130139
    131 MTFitLoop::MTFitLoop()
     140MTFitLoop::MTFitLoop(Int_t num) : fNum(num), fMaxIterations(1000)
    132141{
    133142    fDebug     = -1;
     
    135144}
    136145
    137 void MTFitLoop::Optimize(MEvtLoop &loop)
     146void MTFitLoop::Optimize(MEvtLoop &loop, TArrayD &pars)
    138147{
    139148    *fLog << inf << "Event loop was setup" << endl;
    140     MParList *parlist = loop->GetParList();
     149    MParList *parlist = loop.GetParList();
    141150    if (!parlist)
    142151        return;
    143152
    144     MParContainer *pars = plist->FindObject(fParametersName);
    145     if (!pars)
    146         return;
    147 
    148     fEvtLoop = evtloop;
    149 
    150     MParContainer &parameters = *pars;
     153//    MParContainer *pars = (MParContainer*)parlist->FindObject(fParametersName);
     154//    if (!pars)
     155//        return;
     156
     157    fEvtLoop = &loop;
     158
     159//    MParContainer &parameters = *pars;
    151160
    152161    TMinuit *minsave = gMinuit;
    153162
    154     gMinuit = new TMinuit(parameters.GetSize());
     163    gMinuit = new TMinuit(pars.GetSize());
    155164    gMinuit->SetPrintLevel(-1);
     165    gMinuit->SetMaxIterations(fMaxIterations);
    156166
    157167    gMinuit->SetFCN(fcn);
     
    164174     // less than 0.001*[tolerance]*UP (see [SET ERRordef]).");
    165175     //
    166     if (gMinuit->SetErrorDef(1000))
     176    if (gMinuit->SetErrorDef(1))
    167177    {
    168178        *fLog << err << dbginf << "SetErrorDef failed." << endl;
     
    173183    // Set starting values and step sizes for parameters
    174184    //
    175     for (Int_t i=0; i<parameters.GetSize(); i++)
     185    for (Int_t i=0; i<pars.GetSize(); i++)
    176186    {
    177187        TString name = "par[";
    178188        name += i;
    179189        name += "]";
    180         Double_t vinit = parameters[i];
    181         Double_t step  = fabs(parameters[i]/3);
     190        Double_t vinit = pars[i];
     191        Double_t step  = fabs(pars[i]/3);
    182192
    183193        Double_t limlo = 0; // limlo=limup=0: no limits
     
    192202    }
    193203
    194     for (int i=0; i<parameters.GetSize(); i++)
    195         if (i<fFixParams.GetSize() && fFixParams[i]!=0)
     204    for (int i=0; i<pars.GetSize() && i<fFixedParams.GetSize(); i++)
     205        if (fFixedParams[i]!=0)
    196206            gMinuit->FixParameter(i);
    197         else
    198             gMinuit->Release(i);
    199207
    200208    // Now ready for minimization step:
     
    217225    // Update values of fA, fB:
    218226    //
    219     for (Int_t i=0; i<parameters.GetSize(); i++)
     227    for (Int_t i=0; i<pars.GetSize(); i++)
    220228    {
    221229        Double_t x1, x2;
    222230        gMinuit->GetParameter(i,x1,x2);
    223         parameters[i] = x1;
    224         cout << i << ": " << parameters[i] << endl;
    225     }
    226 
    227     list.SetVariables(parameters);
     231        pars[i] = x1;
     232        cout << i << ": " << pars[i] << endl;
     233    }
     234
     235    //list.SetVariables(pars);
    228236
    229237    gMinuit = minsave;
  • trunk/MagicSoft/Mars/mfit/MTFitLoop.h

    r3582 r4358  
    2828    TArrayC   fFixedParams;
    2929
     30    Int_t fNum;
     31    Int_t fMaxIterations;
     32
    3033public:
    31     MTFitLoop();
     34    MTFitLoop(const Int_t num=0);
    3235
    33     void Optimize(MEvtLoop &loop);
     36    void Optimize(MEvtLoop &loop, TArrayD &pars);
    3437
    3538    void SetNameParameters(const char *parm) { fParametersName = parm; }
     
    3740
    3841    void SetFixedParameters(const TArrayC &c) { fFixedParams = c; }
     42    void SetMaxIterations(Int_t maxiter=500) {fMaxIterations = maxiter;} // for debugging
    3943
    4044    void SetDebug(Int_t n)     { fDebug = n; }
Note: See TracChangeset for help on using the changeset viewer.