Changeset 384 in Sophya for trunk/SophyaPI/PIext/piafitting.cc


Ignore:
Timestamp:
Aug 12, 1999, 4:34:22 PM (26 years ago)
Author:
ercodmgr
Message:

Diverses modifs + Fonc. Link Dyn pour fitting - Reza+cmv 12/8/99

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaPI/PIext/piafitting.cc

    r381 r384  
    150150, mFit(NULL)
    151151, mV(NULL), mH(NULL), mM(NULL), mH2(NULL), mIm(NULL), mG(NULL)
     152, mDlUFunc(NULL), mNameFitFunc(""), mFitFunc(NULL), mFitFuncDer(NULL)
     153, mUFNVar(0), mUFNPar(0)
    152154{
    153155// Init et Set des options
     
    176178usage += "\n Usage: fitlin nomobj func [o:... o:...]";
    177179piac->RegisterCommand(kw,usage,this,"Fitting");
     180
     181kw = "crfitfun";
     182usage = "Creation de user function ";
     183usage += "\n Usage: crfitfun file func nvar npar";
     184piac->RegisterCommand(kw,usage,this,"Fitting");
    178185}
    179186
     
    185192if(mGData != NULL) {delete mGData; mGData=NULL;}
    186193if(FWindFit != NULL) {delete FWindFit; FWindFit=NULL;}
     194if (mDlUFunc != NULL) delete mDlUFunc;
    187195}
    188196
     
    658666if(mFunc && (mOpt.okres||mOpt.okfun)) {
    659667  NamedObjMgr omg;
    660   string nomres = mNObj + "res";
    661   string nomfun = mNObj + "fun";
     668  string nomres = mNObj + "_res";
     669  string nomfun = mNObj + "_fun";
    662670  if(mV) {
    663671    if(mOpt.okres) {Vector* ob = mV->FitResidus(*mFit);  if(ob) omg.AddObj(ob,nomres);}
     
    673681    if(mOpt.okfun) {Histo2D* ob = mH2->FitFunction(*mFit); if(ob) omg.AddObj(ob,nomfun);}
    674682  } else if(mIm) {
    675     if(mOpt.okres) {RzImage* ob = mIm->FitResidus(*mFit);  if(ob) omg.AddObj(ob,nomres);}
    676     if(mOpt.okfun) {RzImage* ob = mIm->FitFunction(*mFit); if(ob) omg.AddObj(ob,nomfun);}
     683    if(mOpt.okres) {
     684      RzImage* ob = mIm->FitResidus(*mFit); 
     685      if(ob) {ImageR4* rob = new ImageR4(*ob); omg.AddObj(rob,nomres); delete ob;}
     686    }
     687    if(mOpt.okfun) {
     688      RzImage* ob = mIm->FitFunction(*mFit);
     689      if(ob) {ImageR4* rob = new ImageR4(*ob); omg.AddObj(rob,nomfun); delete ob;}
     690    }
    677691  } else if(mG) {
    678692    if(mOpt.okres) {GeneralFitData* ob = mG->FitResidus(*mFit);  if(ob) omg.AddObj(ob,nomres);}
     
    713727
    714728return;
     729}
     730
     731/* --Methode-- */
     732void PIAFitter::LinkFitFunc(string const & fname, string const & funcname, int nvar, int npar)
     733{
     734
     735if ((nvar < 1) || (npar < 1)) return;
     736
     737if (mDlUFunc != NULL) delete mDlUFunc;  // Nous en avons deja un, on nettoie
     738
     739mDlUFunc = NULL;
     740mFitFunc = NULL;
     741mFitFuncDer = NULL;
     742mUFNVar= mUFNPar = 0;
     743mNameFitFunc = "";
     744
     745// On compile le fichier C, on fabrique un .so et on l'ouvre
     746mDlUFunc = PDynLinkMgr::BuildFromCFile(fname);
     747if (mDlUFunc == NULL) {
     748  cerr << "PIAFitter::LinkFitFunc() Erreur building .so " << endl;
     749  return;
     750  }
     751
     752// On recupere la fonction de fit
     753mFitFunc = (DlUserFitFunc) mDlUFunc->GetFunction(funcname);
     754if (mFitFunc == NULL) { // Probleme, on n'a pas trouve etc ...
     755  cerr << "PIAFitter::LinkFitFunc() Erreur linking function " << funcname << endl;
     756  delete mDlUFunc;
     757  mDlUFunc = NULL;
     758  return;
     759  }
     760
     761// On recupere la fonction de derives
     762string fnameder = funcname+"_der";
     763mFitFuncDer = (DlUserFitFuncDer) mDlUFunc->GetFunction(fnameder);
     764if (mFitFunc == NULL) {
     765  cout << "PIAFitter::LinkFitFunc() No derive for " << fnameder << endl;
     766  }
     767
     768mNameFitFunc = funcname;
     769mUFNVar = nvar;
     770mUFNPar = npar;
     771
     772cout << "PIAFitter::LinkFitFunc() UserFitFunc" << funcname
     773     << " NVar=" << nvar << " NPar=" << npar << endl;
     774
     775}
     776/* --Methode-- */
     777void PIAFitter::PrepareFitFuncCFile(string const & fname, string const & funcname, int nvar, int npar)
     778{
     779// A Faire
    715780}
    716781
     
    760825  FWindFit = new PIAFitterWind(mApp,this);
    761826  FWindFit->Show();
    762 }
     827} else if (kw == "crfitfun") {
     828  if (tokens.size() < 4) {
     829    cout <<"Usage:crfitfun ... " << endl; return(0); }
     830    LinkFitFunc(tokens[0], tokens[1], 1, 7);
     831    double par[7]={1000,0.,0.,1.,1.,0.1,100.};
     832    double x[2]={1.,1.};
     833    cout<<"Salut:"<<mFitFunc(x,par)<<endl;
     834}
     835
    763836
    764837return(0);
Note: See TracChangeset for help on using the changeset viewer.