Changeset 1200 in Sophya for trunk/SophyaPI/PIext


Ignore:
Timestamp:
Sep 23, 2000, 2:02:00 AM (25 years ago)
Author:
ercodmgr
Message:

bug dans fiwt (avec fenetre) cmv 23/9/00

Location:
trunk/SophyaPI/PIext
Files:
2 edited

Legend:

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

    r1111 r1200  
    4242class PIAFitterWind :  public PIWindow {
    4343public :
    44                 PIAFitterWind(PIStdImgApp* par, PIAFitter* fiter);
     44                PIAFitterWind(PIStdImgApp* par, PIAFitter* fiter,string func);
    4545  virtual       ~PIAFitterWind();
    4646  virtual void  Show();
     
    5050  PIStdImgApp* mDap;
    5151  PIAFitter*   mFitter;
     52  string mFunc;
    5253  PILabel**    lab; int nlab;
    5354  PIText**     txt; int ntxt;
     
    5657  PIOptMenu**  pom; int npom;
    5758  bool ReFillGData;
     59  bool ReDecodeFunc;
     60  double ErrValue;
    5861  int saveI1,saveI2, saveJ1, saveJ2;
    59   double ErrValue;
     62  double saveErrValue,saveXC,saveYC;
    6063};
    6164
     
    184187, mPar(1), mStep(1), mMin(1), mMax(1), mFix(1)
    185188, mParSave(1), mStepSave(1), mMinSave(1), mMaxSave(1), mFixSave(1)
    186 , mFit(NULL)
     189, mFit(NULL),ApplyXYcentering(false)
    187190, mV(NULL), mH(NULL), mM(NULL), mH2(NULL), mIm(NULL), mG(NULL)
    188191, mFunction(NULL), mFName(""), mFunc(NULL)
     
    549552  else if(mH2) mOpt.xc = (mH2->XMin()+mH2->XMax())/2.;
    550553  else if(mG)  {double mini,maxi; mG->GetMnMx(2,mini,maxi); mOpt.xc=(mini+maxi)/2.;}
    551   else if(mIm) {mOpt.xc = mIm->XOrg() * mIm->XPixSize()*(mOpt.i2-mOpt.i1+1)/2.;}
     554  else if(mIm) {mOpt.xc = mIm->XOrg() + mIm->XPixSize()*(mOpt.i2-mOpt.i1+1)/2.;}
    552555}
    553556if(mOpt.polcy==2 && mNVar>=2) {
     
    555558  if(mH2) mOpt.yc = (mH2->YMin()+mH2->YMax())/2.;
    556559  if(mG)  {double mini,maxi; mG->GetMnMx(12,mini,maxi); mOpt.yc=(mini+maxi)/2.;}
    557   if(mIm) {mOpt.yc = mIm->YOrg() * mIm->YPixSize()*(mOpt.j2-mOpt.j1+1)/2.;}
     560  if(mIm) {mOpt.yc = mIm->YOrg() + mIm->YPixSize()*(mOpt.j2-mOpt.j1+1)/2.;}
    558561}
    559562if(mOpt.err_e>0.) mOpt.err_E=-1.;
     
    612615
    613616  // Remplissage de generalfitdata
    614   if(mFName[0]=='p') {x -= mOpt.xc; if(mNVar>=2) y -= mOpt.yc;}
     617  if(ApplyXYcentering) { // pour fitlin
     618    if(mOpt.polcx>0) x-=mOpt.xc;
     619    if(mNVar>=2 && mOpt.polcy>0) y-=mOpt.yc;
     620  }
    615621  if(mNVar==1)      mGData->AddData1(x,f,e);
    616622  else if(mNVar==2) mGData->AddData2(x,y,f,e);
     
    645651// Fonction a fitter
    646652// ATTENTION: cette methode a besoin que les donnees soient lues
     653//                                    (pour mopt.xc,yc et mNVar)
    647654{
    648655if(func.length()<=0)
     
    660667  int degre=0; if(func.length()>1) sscanf(func.c_str()+1,"%d",&degre);
    661668  cout<<"Fit polynome 1D de degre "<<degre<<endl;
    662   Polyn1D* myf = new Polyn1D(degre,mOpt.xc);
     669  Polyn1D* myf = new Polyn1D(degre,((mOpt.polcx>0)?mOpt.xc:0.));
    663670  mFunction = myf; mNPar = mFunction->NPar(); mFName = func;
    664671
     
    667674  cout<<"Fit d'exponentielle+polynome 1D de degre "<<degre<<endl;
    668675  Exp1DPol* myf;
    669   if(degre>=0) myf = new Exp1DPol((unsigned int)degre,mOpt.xc);
    670        else    myf = new Exp1DPol(mOpt.xc);
     676  if(degre>=0) myf = new Exp1DPol((unsigned int)degre,((mOpt.polcx>0)?mOpt.xc:0.));
     677       else    myf = new Exp1DPol(((mOpt.polcx>0)?mOpt.xc:0.));
    671678  mFunction = myf; mNPar = mFunction->NPar(); mFName = func;
    672679
     
    690697  int degre=0; if(func.length()>1) sscanf(func.c_str()+1,"%d",&degre);
    691698  cout<<"Fit polynome 2D de degre "<<degre<<endl;
    692   Polyn2D* myf = new Polyn2D(degre,mOpt.xc,mOpt.yc);
     699  Polyn2D* myf =
     700    new Polyn2D(degre,((mOpt.polcx>0)?mOpt.xc:0.),((mOpt.polcy>0)?mOpt.yc:0.));
    693701  mFunction = myf; mNPar = mFunction->NPar(); mFName = func;
    694702
     
    11651173CheckOptions();
    11661174if(mOpt.lp>0) PrintOptions();
     1175if(kw == "fitlin") ApplyXYcentering=true; else ApplyXYcentering=false;
    11671176FillGData();
    11681177DecodeFunction(tokens[1]);
    11691178DecodeParam(mSp,mSs,mSm,mSM,mSf);
    1170 if (kw == "fit") {
     1179if(kw == "fit") {
    11711180  int rc = DoFit();
    11721181  if(rc>=0) FitFunRes();
    1173 } else if (kw == "fitlin") {
     1182} else if(kw == "fitlin") {
    11741183  LinFit();
    1175 } else if (kw == "fitw") {
     1184} else if(kw == "fitw") {
    11761185  if(FWindFit!=NULL) {delete FWindFit; FWindFit=NULL;}
    1177   FWindFit = new PIAFitterWind(mApp,this);
     1186  FWindFit = new PIAFitterWind(mApp,this,tokens[1]);
    11781187  FWindFit->Show();
    11791188}
     
    12931302
    12941303/* --Methode-- */
    1295 PIAFitterWind::PIAFitterWind(PIStdImgApp* par, PIAFitter* fiter)
     1304PIAFitterWind::PIAFitterWind(PIStdImgApp* par, PIAFitter* fiter,string func)
    12961305: PIWindow((PIMsgHandler*)par, "PIAFitter", PIWK_normal, 240, 240, 150, 150)
    1297 , mDap(par), mFitter(fiter), ReFillGData(false)
    1298 , saveI1(0), saveI2(0), saveJ1(0), saveJ2(0), ErrValue(1.)
     1306, mDap(par), mFitter(fiter), mFunc(func)
     1307, ReFillGData(false), ReDecodeFunc(false)
     1308, ErrValue(1.)
     1309, saveI1(0), saveI2(0), saveJ1(0), saveJ2(0)
     1310, saveErrValue(1.), saveXC(0.), saveYC(0.)
    12991311{
    13001312#ifdef SANS_EVOLPLANCK
     
    15711583  if(mFitter->mOpt.err_e>0. ) mFitter->mOpt.err_e = ErrValue;
    15721584  if(mFitter->mOpt.err_E>0. ) mFitter->mOpt.err_E = ErrValue;
     1585  if(saveErrValue!=ErrValue) {
     1586    if(lp) cout<<"ErrValue changed: "<<ErrValue<<endl;
     1587    ReFillGData = true;
     1588    saveErrValue = ErrValue;
     1589  }
    15731590dum=txt[1]->GetText(); strcpy(str,dum.c_str()); strip(str,'B',' ');
    15741591  sscanf(str,"%d,%d",&(mFitter->mOpt.lp),&(mFitter->mOpt.lpg));
     
    16021619dum=txt[9]->GetText(); strcpy(str,dum.c_str()); strip(str,'B',' ');
    16031620  sscanf(str,"%lf",&(mFitter->mOpt.yc));
     1621  if(saveXC!=mFitter->mOpt.xc || saveYC!=mFitter->mOpt.yc) {
     1622    if(lp) cout<<"mOpt.xc,yc changed: "<<mFitter->mOpt.xc
     1623               <<" , "<<mFitter->mOpt.xc<<endl;
     1624    ReFillGData = true; ReDecodeFunc = true;
     1625    saveXC = mFitter->mOpt.xc; saveYC = mFitter->mOpt.yc;
     1626  }
    16041627
    16051628if(npar>0) {
     
    16401663  if(lp) cout<<"Do the fit"<<endl;
    16411664  mFitter->CheckOptions();
    1642   if(ReFillGData) mFitter->FillGData();
     1665  if(ReFillGData) {
     1666    if(lp) cout<<"ReFill Data"<<endl;
     1667    mFitter->FillGData();
     1668  }
    16431669  ReFillGData = false;
     1670  if(ReDecodeFunc) mFitter->DecodeFunction(mFunc);
     1671  ReDecodeFunc = false;
    16441672  int rc = mFitter->DoFit();
    16451673  if(rc>=0) mFitter->FitFunRes();
     
    16801708  if(lp) cout<<"Centrage X polcx="<<mFitter->mOpt.polcx
    16811709             <<" xc="<<mFitter->mOpt.xc<<endl;
    1682   ReFillGData = true;
     1710  ReFillGData = true; ReDecodeFunc = true;
    16831711}
    16841712else if(2011<=msg && msg<=2013) {
     
    16861714  if(lp) cout<<"Centrage Y polcy="<<mFitter->mOpt.polcy
    16871715             <<" yc="<<mFitter->mOpt.yc<<endl;
    1688   ReFillGData = true;
     1716  ReFillGData = true; ReDecodeFunc = true;
    16891717}
    16901718else if(msg>=1500 && msg<2000) {
  • trunk/SophyaPI/PIext/piafitting.h

    r1105 r1200  
    9898DFOPTIONS mOpt;
    9999DFOPTIONS mOptSave;
     100bool ApplyXYcentering;
    100101// Possibles objets a fitter
    101102Vector* mV; Histo* mH; // Do not delete
Note: See TracChangeset for help on using the changeset viewer.