Changeset 384 in Sophya


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

Location:
trunk/SophyaPI/PIext
Files:
6 edited

Legend:

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

    r361 r384  
    5151// >>>>>>>>>>> Fenetre graphique , changement d'attributs graphiques
    5252else if (kw == "zone") {
    53   if (tokens.size() < 2) { cout << "Usage: zone nx ny" << endl;  return(0); }
     53  while (tokens.size() < 2) tokens.push_back("1");
    5454  int nx, ny;
    5555  nx = ny = 1;
     
    596596
    597597kw = "zone";
    598 usage = "To Divide the Graphic window \n  Usage: zone nx ny";
     598usage = "To Divide the Graphic window \n  Usage: zone [nx=1 ny=1]";
    599599mpiac->RegisterCommand(kw, usage, this, "Graphics");
    600600kw = "newwin";
  • trunk/SophyaPI/PIext/dlftypes.h

    r333 r384  
    1414#endif
    1515
     16// ------------ Fonctions pour trace de fonctions --------------
    1617typedef double (* DlFunctionOfX) (double x);
    1718typedef double (* DlFunctionOfXY) (double x, double y);
     19// ---- Fonctions pour trace d'expressions d'objets ------------
    1820typedef int (* PlotExprFunc) (double* x, double* rx, double* ry, double* rz, double* rt);
    1921typedef int (* NTLoopExprFunc) (double* x, double* rx, double* ry, double* rz,
    2022                                double* rt, int n, int nmax);
     23
     24// ---------- Fonctions UserFit ----------------
     25typedef double (* DlUserFitFunc)(double const*, double const*);
     26typedef double (* DlUserFitFuncDer)(double const*, double const*, double*);
     27
     28// ---------- Fonctions User et gestion de modules chargeables ----
    2129typedef void (* DlUserProcFunction) (vector<string>& args);
    2230typedef void (* DlFunction) ();
  • trunk/SophyaPI/PIext/piacmd.cc

    r374 r384  
    809809
    810810if ( (fip = fopen(file.c_str(),"r")) == NULL ) {
     811  if (file.find('.') >= file.length()) {
     812    cout << "PIACmd::Exec(): Error opening file " << file << endl;
     813    file += ".pic";
     814    cout << "                Trying file " << file << endl;
     815    fip = fopen(file.c_str(),"r");
     816    }
     817  }
     818
     819if(fip == NULL) {
    811820  cerr << "PIACmd::Exec() Error opening file " << file << endl;
    812821  hist << "##! PIACmd::Exec() Error opening file " << file << endl;
  • 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);
  • trunk/SophyaPI/PIext/piafitting.h

    r379 r384  
    3535  virtual ~PIAFitter();
    3636  virtual int Execute(string& keyw, vector<string>& args);
     37  virtual void  LinkFitFunc(string const & fname, string const & funcname, int nvar, int npar);
     38  virtual void  PrepareFitFuncCFile(string const & fname, string const & funcname, int nvar, int npar);
    3739
    3840friend class PIAFitterWind;
     
    8284GeneralFitData* mG; // Do not delete
    8385
     86// Gestion de fonction de fit user
     87PDynLinkMgr* mDlUFunc;
     88string mNameFitFunc;
     89DlUserFitFunc mFitFunc;
     90DlUserFitFuncDer mFitFuncDer;
     91int mUFNVar, mUFNPar;
    8492};
    8593
  • trunk/SophyaPI/PIext/pistdimgapp.cc

    r374 r384  
    11811181    sprintf(strg,"Image: %s -  Pave %d %d \n",  curpimg->Nom().c_str(),
    11821182            curpimg->XPave(),  curpimg->YPave());     
    1183     mps->DrawString(10., 25., strg, PI_Black, PI_BoldFont, 20);
     1183    mps->DrawString(10., 25., strg, PI_Black, PI_DefaultFont, PI_BoldFont, 20);
    11841184    mps->EndBloc();
    11851185
Note: See TracChangeset for help on using the changeset viewer.