Changeset 390 in Sophya for trunk/SophyaPI


Ignore:
Timestamp:
Aug 13, 1999, 4:01:37 PM (26 years ago)
Author:
ercodmgr
Message:

preparation auto ini fit cmv 13/8/99

Location:
trunk/SophyaPI/PIext
Files:
2 edited

Legend:

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

    r386 r390  
    118118//|      F : initialisation a partir des resultats et de l'etat du fit precedent
    119119//|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:)
     120//|      a : initialisation automatique des parametres du fit (si disponible)
     121//|          (option non prioritaire sur les definitions p:,s:,m:,M:,f:o:
     122//|           et sur l'initialisation pa l'option "F")
    120123//|      f : generation d'un Objet identique contenant la fonction fittee
    121124//|      r : generation d'un Objet identique contenant les residus
     
    176179, mFit(NULL)
    177180, mV(NULL), mH(NULL), mM(NULL), mH2(NULL), mIm(NULL), mG(NULL)
    178 , mFunction(NULL), mFName(""), mFunc(NULL)
     181, mFunction(NULL), mFName(""), mFunc(NULL), mFitUserFunc(false)
    179182, mDlUFunc(NULL), mNameFitFunc(""), mFitFunc(NULL), mFitFuncDer(NULL)
    180183, mUFNVar(0), mUFNPar(0)
     
    249252mOpt.i1 = mOpt.j1 = mOpt.i2 = mOpt.j2 = -1;
    250253mOpt.fromlastfit = false;
     254mOpt.autoinifit = false;
    251255}
    252256
     
    263267if(strstr(opt.c_str(),",F,"))  // init options/param a partir du fit precedent
    264268  {mOpt = mOptSave; mOpt.fromlastfit = true;}
     269if(strstr(opt.c_str(),",a,")) mOpt.autoinifit = true; // init auto par fit
    265270if(strstr(opt.c_str(),",r,")) mOpt.okres = true;  // residus
    266271if(strstr(opt.c_str(),",f,")) mOpt.okfun = true;  // fonction fittee
     
    436441    <<" TypE="<<mOpt.err_e<<","<<mOpt.err_E
    437442    <<" StpX2="<<mOpt.stc2<<" Nstep="<<mOpt.nstep<<endl
    438     <<" Init.LFit="<<mOpt.fromlastfit
     443    <<" Init.LFit="<<mOpt.fromlastfit<<" AutoIni.Fit="<<mOpt.autoinifit
    439444    <<" lp,lpg="<<mOpt.lp<<","<<mOpt.lpg<<endl;
    440445return;
     
    504509if(mFunc!=NULL)     {delete mFunc;     mFunc=NULL;}
    505510mNPar=0;
     511mFitUserFunc = false;
    506512
    507513if(func == mNameFitFunc) { // Fonction utilisateur
    508514  mFunc = new GeneralFunc(mUFNVar,mUFNPar,mFitFunc,mFitFuncDer);
    509515  mNPar = mUFNPar;
     516  mFitUserFunc = true;
    510517  cout<<"Fonction utilisateur nvar="<<mUFNVar<<", npar="<<mNPar<<endl;
    511518} else if(func[0]=='p' && mNVar==1) { //polynome
     
    596603
    597604/* --Methode-- */
     605void PIAFitter::AutoIniFit(void)
     606// Initialisation automatique des parametres du fit
     607{
     608cout<<"CMV: to be done : PIAFitter::AutoIniFit"<<endl;
     609if(mFitUserFunc) { // Fonction utilisateur
     610  cout<<"PIAFitter::AutoIniFit : Fonction utilisateur, pas d'init auto"<<endl;
     611
     612} else if(mFName[0]=='p' && mNVar==1) { //poly 1D
     613  cout<<"PIAFitter::AutoIniFit : Auto Init type polynome 1D"<<endl;
     614
     615} else if(mFName[0]=='e' && mNVar==1) { //expo+pol 1D
     616  cout<<"PIAFitter::AutoIniFit : Auto Init type expo+pol 1D"<<endl;
     617
     618} else if(mFName[0]=='g' && mNVar==1) { //gauss en haut 1D
     619  cout<<"PIAFitter::AutoIniFit : Auto Init type gauss_haut+pol 1D"<<endl;
     620
     621} else if(mFName[0]=='G' && mNVar==1) { //gauss en vol 1D
     622  cout<<"PIAFitter::AutoIniFit : Auto Init type gauss_vol+pol 1D"<<endl;
     623
     624} else if(mFName[0]=='p' && mNVar==2) { //poly 2D
     625  cout<<"PIAFitter::AutoIniFit : Auto Init type polynome 2D"<<endl;
     626
     627} else if((mFName[0]=='G'||mFName[0]=='d') && mNVar==2) { //gauss+fond en vol
     628  cout<<"PIAFitter::AutoIniFit : Auto Init type gauss_vol+fond 2D"<<endl;
     629
     630} else if(mFName[0]=='D' && mNVar==2) { //DLgauss+fond en vol 2D
     631  cout<<"PIAFitter::AutoIniFit : Auto Init type DLgauss_vol+fond 2D"<<endl;
     632  Vector dum(mNPar);
     633  dum = mPar;  mPar(6)=0.5;   mPar(7)=dum(6);
     634  dum = mStep; mStep(6)=0.05; mStep(7)=dum(6);
     635  dum = mMin;  mMin(6)=0.;    mMin(7)=dum(6);
     636  dum = mMax;  mMax(6)=10.;   mMax(7)=dum(6);
     637  dum = mFix;  mFix(6)=1.1;   mFix(7)=dum(6);
     638
     639} else if(mFName[0]=='M' && mNVar==2) { //Moffat+fond en vol 2D
     640  cout<<"PIAFitter::AutoIniFit : Auto Init type moffat_vol+fond 2D"<<endl;
     641  Vector dum(mNPar);
     642  dum = mPar;  mPar(6)=2.5;   mPar(7)=dum(6);
     643  dum = mStep; mStep(6)=0.05; mStep(7)=dum(6);
     644  dum = mMin;  mMin(6)=1.2;   mMin(7)=dum(6);
     645  dum = mMax;  mMax(6)=10.;   mMax(7)=dum(6);
     646  dum = mFix;  mFix(6)=1.1;   mFix(7)=dum(6);
     647
     648} else {
     649  cout<<"PIAFitter::AutoIniFit : Fonction "<<mFName
     650      <<", \n  pas d'init auto en dim "<<mNVar<<endl;
     651  return;
     652}
     653
     654return;
     655}
     656
     657/* --Methode-- */
    598658void PIAFitter::InitParFromLastFit(void)
    599659// Initialisation du fit a partir des resultats du fit precedent
     
    625685if(mNPar==0) return;
    626686ReSetParam();
     687if(mOpt.autoinifit)  AutoIniFit();
    627688if(mOpt.fromlastfit) InitParFromLastFit();
    628689Vector* v=NULL; string* s=NULL;
     
    913974
    914975// Alloc de la taille
    915 nlab = 14+npar;   lab = new PILabel*[nlab];    {for(int i=0;i<nlab;i++) lab[i]=NULL;}
     976nlab = 13+npar;   lab = new PILabel*[nlab];    {for(int i=0;i<nlab;i++) lab[i]=NULL;}
    916977ntxt = 10+4*npar; txt = new PIText*[ntxt];     {for(int i=0;i<ntxt;i++) txt[i]=NULL;}
    917 nbut = 5;         but = new PIButton*[nbut];   {for(int i=0;i<nbut;i++) but[i]=NULL;}
     978nbut = 6;         but = new PIButton*[nbut];   {for(int i=0;i<nbut;i++) but[i]=NULL;}
    918979nckb = 2+npar;    ckb = new PICheckBox*[nckb]; {for(int i=0;i<nckb;i++) ckb[i]=NULL;}
    919980npom = 3;         pom = new PIOptMenu*[npom];  {for(int i=0;i<npom;i++) pom[i]=NULL;}
     
    933994// new ligne
    934995cpx = spx; cpy = spy;
    935 string dum = "Object: "+mFitter->mNObj+" , Fun: "+mFitter->mFName;
     996string dum = "Object: "+mFitter->mNObj+" , Fun: ";
     997if(mFitter->mFitUserFunc) dum+=mFitter->mNameFitFunc; else dum+=mFitter->mFName;
    936998lab[0] = new PILabel(this,dum.c_str(),4*bsx,bsy,cpx,cpy);
    937999lab[0]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
     
    10391101but[4]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    10401102cpx += bsx+spx;
    1041 lab[7] = new PILabel(this,mFitter->mFName.c_str(),2*bsx,bsy,cpx,cpy);
    1042 lab[7]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
     1103but[5] = new PIButton(this, "Ini Auto",444,bsx,bsy,cpx,cpy);
     1104but[5]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    10431105
    10441106// new ligne
    10451107cpx = spx; cpy += bsy+spy;
    1046 lab[8] = new PILabel(this,"Par",bsx/2,bsy,cpx,cpy);
     1108lab[7] = new PILabel(this,"Par",bsx/2,bsy,cpx,cpy);
     1109lab[7]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
     1110cpx += int(bsx/2.+spx);
     1111lab[8] = new PILabel(this,"Fx",bsx/3,bsy,cpx,cpy);
    10471112lab[8]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    1048 cpx += int(bsx/2.+spx);
    1049 lab[9] = new PILabel(this,"Fx",bsx/3,bsy,cpx,cpy);
     1113cpx += int(bsx/3.+spx);
     1114lab[9] = new PILabel(this,"Init",bsx,bsy,cpx,cpy);
    10501115lab[9]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    1051 cpx += int(bsx/3.+spx);
    1052 lab[10] = new PILabel(this,"Init",bsx,bsy,cpx,cpy);
     1116cpx += bsx+spx;
     1117lab[10] = new PILabel(this,"Step",bsx,bsy,cpx,cpy);
    10531118lab[10]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    10541119cpx += bsx+spx;
    1055 lab[11] = new PILabel(this,"Step",bsx,bsy,cpx,cpy);
     1120lab[11] = new PILabel(this,"Min",bsx,bsy,cpx,cpy);
    10561121lab[11]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    10571122cpx += bsx+spx;
    1058 lab[12] = new PILabel(this,"Min",bsx,bsy,cpx,cpy);
     1123lab[12] = new PILabel(this,"Max",bsx,bsy,cpx,cpy);
    10591124lab[12]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    1060 cpx += bsx+spx;
    1061 lab[13] = new PILabel(this,"Max",bsx,bsy,cpx,cpy);
    1062 lab[13]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    10631125
    10641126// new lines: Parametres (npar lignes)
     
    10671129    cpx = spx; cpy += bsy+spy;
    10681130    char str[8]; sprintf(str,"P%d",i);
    1069     lab[14+i] = new PILabel(this,str,bsx/2,bsy,cpx,cpy);
    1070     lab[14+i]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
     1131    lab[13+i] = new PILabel(this,str,bsx/2,bsy,cpx,cpy);
     1132    lab[13+i]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    10711133    cpx += int(bsx/2.+spx);
    10721134    // Attention pas de message entre 1500 et 2000 (permet 500 parametres!)
    1073     ckb[2+i] = new PICheckBox(this,"",1500+i,bsx/3,bsy,cpx,cpy+bsy/2);
     1135    ckb[2+i] = new PICheckBox(this,"",1500+i,bsx/3,bsy,cpx,cpy+spy);
    10741136    ckb[2+i]->SetBinding(PIBK_elastic,PIBK_elastic, PIBK_elastic,PIBK_elastic);
    10751137    cpx+=int(bsx/3.+spx);
     
    12511313  if(rc>=0) mFitter->FitFunRes();
    12521314}
     1315else if(msg ==444) {
     1316  if(lp) cout<<"Automatic initialisation"<<endl;
     1317  mFitter->AutoIniFit();
     1318}
    12531319else if(msg==1001) {
    12541320  if(ckb[0]->GetState()) {
  • trunk/SophyaPI/PIext/piafitting.h

    r385 r390  
    5050  int lp,lpg;
    5151  int i1,i2,j1,j2;
    52   bool fromlastfit;
     52  bool fromlastfit,autoinifit;
    5353} DFOPTIONS ;
    5454
     
    6262void DecodeFunction(string func);
    6363void ReSetParam(void);
     64void AutoIniFit(void);
    6465void InitParFromLastFit(void);
    6566void DecodeParam(string par,string step,string min,string max,string fix);
     
    8889GeneralFunction* mFunction; string mFName;
    8990// Gestion de fonction de fit definie par l'utilisateur
     91bool mFitUserFunc;
    9092GeneralFunc* mFunc;
    9193PDynLinkMgr* mDlUFunc;
Note: See TracChangeset for help on using the changeset viewer.