Changeset 3062 in Sophya for trunk/SophyaLib/NTools


Ignore:
Timestamp:
Aug 14, 2006, 8:24:21 PM (19 years ago)
Author:
cmv
Message:

dans GeneralFitData int -> int_4
GeneralFitData creation operator =
cmv 14/8/2006

Location:
trunk/SophyaLib/NTools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/NTools/generaldata.cc

    r2870 r3062  
    4848  indique que l'on fournit des erreurs sur les ``nVar'' variables en abscisse.
    4949*/
    50 GeneralFitData::GeneralFitData(unsigned int nVar, unsigned int ndatalloc, uint_2 errx)
     50GeneralFitData::GeneralFitData(uint_4 nVar, uint_4 ndatalloc, uint_2 errx)
    5151  : mNVar(0), mNDataAlloc(0), mNData(0), mNDataGood(0), mOk_EXP(0)
    5252  , mXP(NULL), mErrXP(NULL), mF(NULL), mErr(NULL), mOK(NULL)
     
    8383 if(data.mNData>0) {
    8484   r_8* ret;
    85    for(int i=0;i<data.mNData;i++) {
     85   for(int_4 i=0;i<data.mNData;i++) {
    8686     if( clean && data.mOK[i]==0 ) continue;
    8787       ret = data.GetVec(i,NULL);
     
    120120  Pour redefinir la structure de donnees (ou la creer si on a utilise
    121121  le createur par defaut). Voir les explications des arguments
    122   dans les commentaires du constructeur. Si ``errx''\<0 alors
    123   la valeur prise est celle definie auparavent.
    124 */
    125 void GeneralFitData::Alloc(unsigned int nVar, unsigned int ndatalloc, int_2 errx)
    126 {
    127 ASSERT( nVar>0 && ndatalloc>0 );
    128 
     122  dans les commentaires du constructeur.
     123*/
     124void GeneralFitData::Alloc(uint_4 nVar, uint_4 ndatalloc, uint_2 errx)
     125{
    129126Delete();
    130 
    131 if(errx>=0) mOk_EXP = (uint_2) errx;
     127if(nVar<=0 || ndatalloc<=0) return;
     128
    132129mNVar = nVar;
    133130mNDataAlloc = ndatalloc;
    134131
    135132try {
    136   mXP  = new r_8[nVar*ndatalloc];
    137   if(mOk_EXP) mErrXP  = new r_8[nVar*ndatalloc];
    138   mF   = new r_8[ndatalloc];
    139   mErr = new r_8[ndatalloc];
    140   mOK  = new uint_2[ndatalloc];
     133  mXP = new r_8[nVar*ndatalloc]; memset(mXP,0,nVar*ndatalloc*sizeof(r_8));
     134  if(errx) {
     135    mErrXP = new r_8[nVar*ndatalloc]; memset(mErrXP,0,nVar*ndatalloc*sizeof(r_8));
     136    mOk_EXP = errx;
     137  }
     138  mF = new r_8[ndatalloc]; memset(mF,0,ndatalloc*sizeof(r_8));
     139  mErr = new r_8[ndatalloc]; memset(mErr,0,ndatalloc*sizeof(r_8));
     140  mOK = new uint_2[ndatalloc]; memset(mOK,0,ndatalloc*sizeof(uint_2));
    141141  BuffVar   = new r_8[2*nVar+3];
    142142  BuffVarR4 = (r_4 *) BuffVar;
     
    154154mNVar = mNDataAlloc = mNData = mNDataGood = 0;
    155155if( mXP  != NULL ) {delete [] mXP;  mXP  = NULL;}
    156 if( mErrXP  != NULL ) {delete [] mErrXP;  mErrXP  = NULL;}
     156if( mErrXP  != NULL ) {delete [] mErrXP;  mErrXP  = NULL; mOk_EXP = 0;}
    157157if( mF   != NULL ) {delete [] mF;   mF   = NULL;}
    158158if( mErr != NULL ) {delete [] mErr; mErr = NULL;}
     
    167167  sont sur-ecrites.
    168168*/
    169 void GeneralFitData::SetDataPtr(int ptr)
    170 {
    171  ASSERT(ptr >= 0 && ptr < mNDataAlloc);
     169void GeneralFitData::SetDataPtr(int_4 ptr)
     170{
     171 if(ptr<0 || ptr>=mNDataAlloc) return;
    172172 mNData = ptr;
    173173 mNDataGood = 0;
    174174 if(ptr==0) return;
    175  for(int i=0;i<mNData;i++) if(mOK[i]) mNDataGood++;
     175 for(int_4 i=0;i<mNData;i++) if(mOK[i]) mNDataGood++;
     176}
     177
     178///////////////////////////////////////////////////////////////////
     179/*!
     180  Operateur gd1 = gd2
     181*/
     182GeneralFitData& GeneralFitData::operator = (const GeneralFitData& g)
     183{
     184 if(this == &g) return *this;
     185
     186 Alloc(g.mNVar,g.mNDataAlloc,g.mOk_EXP);
     187
     188 if(g.mXP) memcpy(mXP,g.mXP,mNVar*mNDataAlloc*sizeof(r_8));
     189 if(g.mErrXP) memcpy(mErrXP,g.mErrXP,mNVar*mNDataAlloc*sizeof(r_8));
     190 if(g.mF) memcpy(mF,g.mF,mNDataAlloc*sizeof(r_8));
     191 if(g.mErr) memcpy(mErr,g.mErr,mNDataAlloc*sizeof(r_8));
     192 if(g.mOK) memcpy(mOK,g.mOK,mNDataAlloc*sizeof(uint_2));
     193
     194 return *this;
    176195}
    177196
     
    180199  Pour tuer un point
    181200*/
    182 void GeneralFitData::KillData(int i)
    183 {
    184  ASSERT(i >= 0 && i < mNData);
     201void GeneralFitData::KillData(int_4 i)
     202{
     203 if(i<0 || i>=mNData) return;
    185204
    186205 if( ! mOK[i] ) return;
     
    192211  Pour tuer une serie de points
    193212*/
    194 void GeneralFitData::KillData(int i1,int i2)
    195 {
    196  ASSERT(i1 >= 0 && i1 < mNData);
    197  ASSERT(i2 >= 0 && i2 < mNData);
    198  ASSERT(i1 <= i2 );
    199 
    200  for(int i=i1;i<=i2;i++) KillData(i);
     213void GeneralFitData::KillData(int_4 i1,int_4 i2)
     214{
     215 if(i1<0 || i1>=mNData) return;
     216 if(i2<0 || i2>=mNData) return;
     217 if(i1>i2) return;
     218
     219 for(int_4 i=i1;i<=i2;i++) KillData(i);
    201220}
    202221
     
    205224  Pour re-valider le point numero i ([0,NData]).
    206225*/
    207 void GeneralFitData::ValidData(int i)
    208 {
    209  ASSERT(i >= 0 && i < mNData);
     226void GeneralFitData::ValidData(int_4 i)
     227{
     228 if(i<0 || i>=mNData) return;
    210229
    211230 if( mOK[i] ) return;
    212231 if( mErr[i]<=0. ) return;
    213232 if(mOk_EXP) {
    214    for(int j=0;j<mNVar;j++) if(mErrXP[i*mNVar+j]<=0.) return;
     233   for(int_4 j=0;j<mNVar;j++) if(mErrXP[i*mNVar+j]<=0.) return;
    215234 }
    216235 mOK[i] = 1;
     
    221240  Pour re-valider les points numeros i1 a i2.
    222241*/
    223 void GeneralFitData::ValidData(int i1,int i2)
    224 {
    225  ASSERT(i1 >= 0 && i1 < mNData);
    226  ASSERT(i2 >= 0 && i2 < mNData);
    227  ASSERT(i1 <= i2 );
    228 
    229  for(int i=i1;i<=i2;i++) ValidData(i);
     242void GeneralFitData::ValidData(int_4 i1,int_4 i2)
     243{
     244 if(i1<0 || i1>=mNData) return;
     245 if(i2<0 || i2>=mNData) return;
     246 if(i1>i2) return;
     247
     248 for(int_4 i=i1;i<=i2;i++) ValidData(i);
    230249}
    231250
     
    235254void GeneralFitData::ValidData()
    236255{
    237  for(int i=0;i<mNData;i++) ValidData(i);
     256 for(int_4 i=0;i<mNData;i++) ValidData(i);
    238257}
    239258
     
    242261  Pour redefinir un point a \f$ {x,[errx] ; f,err} \f$
    243262*/
    244 void GeneralFitData::RedefineData1(int i,double x,double f,double err,double errx)
     263void GeneralFitData::RedefineData1(int_4 i,double x,double f,double err,double errx)
    245264{
    246265 RedefineData(i,&x,f,err,&errx);
     
    250269  Pour redefinir un point a \f$ {x,[errx], y,[erry] ; f,err} \f$
    251270*/
    252 void GeneralFitData::RedefineData2(int i,double x,double y,double f
     271void GeneralFitData::RedefineData2(int_4 i,double x,double y,double f
    253272                                  ,double err,double errx,double erry)
    254273{
     
    262281  \f$ {xp[0],[errxp[0]], xp[1],[errxp[1]], xp[2],[errxp[2]],... ; f,err} \f$
    263282*/
    264 void GeneralFitData::RedefineData(int i,double* xp,double f,double err,double* errxp)
    265 {
    266  ASSERT(i>=0 && i<mNData);
     283void GeneralFitData::RedefineData(int_4 i,double* xp,double f,double err,double* errxp)
     284{
     285 if(i<0 || i>=mNData) return;
    267286 bool ok = true;
    268287
    269  int ip = mNVar*i;
    270  for(int j=0;j<mNVar;j++) mXP[ip+j] = xp[j];
     288 int_4 ip = mNVar*i;
     289 for(int_4 j=0;j<mNVar;j++) mXP[ip+j] = xp[j];
    271290 if(mOk_EXP) {
    272291   if(errxp) {
    273      for(int j=0;j<mNVar;j++)
     292     for(int_4 j=0;j<mNVar;j++)
    274293       {mErrXP[ip+j] = errxp[j]; if(errxp[j]<=0.) ok=false;}
    275294   } else {
    276      for(int j=0;j<mNVar;j++) mErrXP[ip+j] = Def_ErrX;
     295     for(int_4 j=0;j<mNVar;j++) mErrXP[ip+j] = Def_ErrX;
    277296     ok=false;
    278297   }
     
    313332void GeneralFitData::AddData(double* xp, double f, double err,double* errxp)
    314333{
    315  ASSERT(mNData < mNDataAlloc);
     334 if(mNData >= mNDataAlloc)
     335   {cout<<"GeneralFitData::AddData Error: no space left"<<endl;; return;}
     336
    316337 bool ok = true;
    317338
    318  int ip = mNVar*mNData;
    319  for(int i=0;i<mNVar;i++) mXP[ip+i] = xp[i];
     339 int_4 ip = mNVar*mNData;
     340 for(int_4 i=0;i<mNVar;i++) mXP[ip+i] = xp[i];
    320341 if(mOk_EXP) {
    321342   if(errxp) {
    322      for(int j=0;j<mNVar;j++)
     343     for(int_4 j=0;j<mNVar;j++)
    323344       {mErrXP[ip+j] = errxp[j]; if(errxp[j]<=0.) ok=false;}
    324345   } else {
    325      for(int j=0;j<mNVar;j++) mErrXP[ip+j] = Def_ErrX;
     346     for(int_4 j=0;j<mNVar;j++) mErrXP[ip+j] = Def_ErrX;
    326347     ok=false;
    327348   }
     
    340361void GeneralFitData::AddData(float* xp, float f, float err, float* errxp)
    341362{
    342  {for(int i=0;i<mNVar;i++) BuffVar[i] = (double) xp[i];}
    343  if(errxp) for(int i=0;i<mNVar;i++) BuffVar[mNVar+i] = (double) errxp[i];
     363 {for(int_4 i=0;i<mNVar;i++) BuffVar[i] = (double) xp[i];}
     364 if(errxp) for(int_4 i=0;i<mNVar;i++) BuffVar[mNVar+i] = (double) errxp[i];
    344365 AddData(BuffVar,(double) f,(double)  err,BuffVar+mNVar);
    345366}
     
    350371  \f$ {x(i),[errx(i)] ; f(i),err(i)} \f$
    351372*/
    352 void GeneralFitData::SetData1(int nData
     373void GeneralFitData::SetData1(int_4 nData
    353374            , double* x, double* f, double *err, double *errx)
    354375{
    355  ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    356 
    357  for(int i=0;i<nData;i++) {
     376 if(nData<=0) return;
     377 if(mNData+nData>mNDataAlloc)
     378   {cout<<"GeneralFitData::SetData1 Error: no space left"<<endl;; return;}
     379
     380 for(int_4 i=0;i<nData;i++) {
    358381   double ex = (errx) ? errx[i]: Def_ErrX;
    359382   double ef = (err ) ? err[i]:  Def_ErrF;
     
    366389  \f$ {x(i),[errx(i)] ; f(i),err(i)} \f$
    367390*/
    368 void GeneralFitData::SetData1(int nData
     391void GeneralFitData::SetData1(int_4 nData
    369392            , float* x, float* f, float* err, float *errx)
    370393{
    371  ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    372 
    373  for(int i=0;i<nData;i++) {
     394 if(nData<=0) return;
     395 if(mNData+nData>mNDataAlloc)
     396   {cout<<"GeneralFitData::SetData1 Error: no space left"<<endl;; return;}
     397
     398 for(int_4 i=0;i<nData;i++) {
    374399   double ex = (errx) ? (double) errx[i]: Def_ErrX;
    375400   double ef = (err ) ? (double) err[i]:  Def_ErrF;
     
    382407  \f$ {x(i),[errx(i)], y(i),[erry(i)], ; f(i),err(i)} \f$
    383408*/
    384 void GeneralFitData::SetData2(int nData, double* x, double* y, double* f
     409void GeneralFitData::SetData2(int_4 nData, double* x, double* y, double* f
    385410                             ,double *err,double *errx,double *erry)
    386411{
    387  ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    388 
    389  for(int i=0;i<nData;i++) {
     412 if(nData<=0) return;
     413 if(mNData+nData>mNDataAlloc)
     414   {cout<<"GeneralFitData::SetData2 Error: no space left"<<endl;; return;}
     415
     416 for(int_4 i=0;i<nData;i++) {
    390417   double ex = (errx) ? (double) errx[i]: Def_ErrX;
    391418   double ey = (erry) ? (double) erry[i]: Def_ErrX;
     
    399426 \f$ {x(i),[errx(i)], y(i),[erry(i)], ; f(i),err(i)} \f$
    400427*/
    401 void GeneralFitData::SetData2(int nData, float* x, float* y, float* f
     428void GeneralFitData::SetData2(int_4 nData, float* x, float* y, float* f
    402429                             ,float *err,float *errx,float *erry)
    403430{
    404  ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    405 
    406  for(int i=0;i<nData;i++) {
     431 if(nData<=0) return;
     432 if(mNData+nData>mNDataAlloc)
     433   {cout<<"GeneralFitData::SetData2 Error: no space left"<<endl;; return;}
     434
     435 for(int_4 i=0;i<nData;i++) {
    407436   double ex = (errx) ? (double) errx[i]: Def_ErrX;
    408437   double ey = (erry) ? (double) erry[i]: Def_ErrX;
     
    426455  \endverbatim
    427456*/
    428 void GeneralFitData::SetData(int nData,double** xp, double *f
     457void GeneralFitData::SetData(int_4 nData,double** xp, double *f
    429458                            , double *err, double** errxp)
    430459{
    431  ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    432  if(mOk_EXP && !errxp) {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;}
    433 
    434  for(int i=0;i<nData;i++) {
    435    {for(int j=0;j<mNVar;j++) BuffVar[j] = *(xp[j]+i);}
     460 if(nData<=0) return;
     461 if(mNData+nData>mNDataAlloc)
     462   {cout<<"GeneralFitData::SetData Error: no space left"<<endl;; return;}
     463
     464 if(mOk_EXP && !errxp) {for(int_4 j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;}
     465
     466 for(int_4 i=0;i<nData;i++) {
     467   {for(int_4 j=0;j<mNVar;j++) BuffVar[j] = *(xp[j]+i);}
    436468   if(mOk_EXP && errxp)
    437      {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = *(errxp[j]+i);}
     469     {for(int_4 j=0;j<mNVar;j++) BuffVar[mNVar+j] = *(errxp[j]+i);}
    438470   double ef = (err) ? err[i]:  Def_ErrF;
    439471   AddData(BuffVar,f[i],ef,BuffVar+mNVar);
     
    444476  Voir commentaire ci-dessus.
    445477*/
    446 void GeneralFitData::SetData(int nData,float** xp, float *f
     478void GeneralFitData::SetData(int_4 nData,float** xp, float *f
    447479                            , float *err, float** errxp)
    448480{
    449  ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    450 
    451  if(mOk_EXP && !errxp) {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;}
    452 
    453  for(int i=0;i<nData;i++) {
    454    {for(int j=0;j<mNVar;j++) BuffVar[j] = (double) *(xp[j]+i);}
     481 if(nData<=0) return;
     482 if(mNData+nData>mNDataAlloc)
     483   {cout<<"GeneralFitData::SetData Error: no space left"<<endl;; return;}
     484
     485 if(mOk_EXP && !errxp) {for(int_4 j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;}
     486
     487 for(int_4 i=0;i<nData;i++) {
     488   {for(int_4 j=0;j<mNVar;j++) BuffVar[j] = (double) *(xp[j]+i);}
    455489   if(mOk_EXP && errxp)
    456      {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = (double) *(errxp[j]+i);}
     490     {for(int_4 j=0;j<mNVar;j++) BuffVar[mNVar+j] = (double) *(errxp[j]+i);}
    457491   double ef = (err) ? err[i]:  Def_ErrF;
    458492   AddData(BuffVar,(double) f[i],ef,BuffVar+mNVar);
     
    476510  Impression du point i
    477511*/
    478 void GeneralFitData::PrintData(int i) const
    479 {
    480  ASSERT(i>=0 && i<mNData);
     512void GeneralFitData::PrintData(int_4 i) const
     513{
     514 if(i<0 || i>=mNData) return;
    481515
    482516 cout<<" "<<i<<" F( ";
    483  {for(int j=0;j<mNVar;j++) cout<<" "<<Absc(j,i);}
     517 {for(int_4 j=0;j<mNVar;j++) cout<<" "<<Absc(j,i);}
    484518 if(mOk_EXP) {
    485519   cout<<"  ;  ";
    486    for(int j=0;j<mNVar;j++) cout<<" "<<EAbsc(j,i);
     520   for(int_4 j=0;j<mNVar;j++) cout<<" "<<EAbsc(j,i);
    487521 }
    488522 cout<<")= "<<Val(i)<<" "<<EVal(i)<<" ("<<IsValid(i)<<")\n";
     
    492526  Impression des points i1 a i2
    493527*/
    494 void GeneralFitData::PrintData(int i1,int i2) const
     528void GeneralFitData::PrintData(int_4 i1,int_4 i2) const
    495529{
    496530 if(i1<0) i1=0;
     
    501535 cout<<"GeneralFitData::PrintData[NData="
    502536     <<mNData<<"/ NDataGood="<<mNDataGood<<"]"<<endl;
    503  for(int i=i1;i<=i2;i++) PrintData(i);
     537 for(int_4 i=i1;i<=i2;i++) PrintData(i);
    504538 cout<<flush;
    505539}
     
    510544void GeneralFitData::PrintData() const
    511545{
    512  ASSERT(mNData>0);
     546  if(mNData<=0) return;
    513547
    514548 PrintData(0,mNData-1);
     
    523557os<<"GeneralFitData:: NVar,ErrX="<<mNVar<<","<<mOk_EXP
    524558  <<" Data: "<<mNData<<" Good,Alloc="<<mNDataGood<<","<<mNDataAlloc<<endl;
    525 for(int k=0;k<2*NVar()+3;k++) {
     559for(int_4 k=0;k<2*NVar()+3;k++) {
    526560  GetMinMax(k,min,max);
    527561  os<<" - "<<k<<" "<<ColumnName(k)<<"  ,  "<<min<<","<<max<<endl;
     
    543577  \endverbatim
    544578*/
    545 int GeneralFitData::GetMnMx(int var,int& imin,int& imax) const
     579int_4 GeneralFitData::GetMnMx(int_4 var,int_4& imin,int_4& imax) const
    546580{
    547581imin = imax = -1;
    548 int ix = var/10;
     582int_4 ix = var/10;
    549583var = var%10;
    550584if(var<0 || var>3) return -1;
    551585if(var>=2 && (ix<0 || ix>=mNVar) ) return -1;
    552586double min=1., max=-1.;
    553 int ntest = 0;
    554 for(int i=0;i<mNData;i++) {
     587int_4 ntest = 0;
     588for(int_4 i=0;i<mNData;i++) {
    555589  if( ! IsValid(i) ) continue;
    556590  double v;
     
    571605  (cf commentaires GetMnMx).
    572606*/
    573 int GeneralFitData::GetMnMx(int var,double& min,double& max) const
     607int_4 GeneralFitData::GetMnMx(int_4 var,double& min,double& max) const
    574608{
    575609min = 1.; max = -1.;
    576 int imin,imax;
    577 int ntest = GetMnMx(var,imin,imax);
     610int_4 imin,imax;
     611int_4 ntest = GetMnMx(var,imin,imax);
    578612if(ntest<=0) return ntest;
    579 int ix = var/10;
     613int_4 ix = var/10;
    580614var = var%10;
    581615if(var==0) {
     
    606640  \endverbatim
    607641*/
    608 int GeneralFitData::GetMeanSigma(int var,double& mean,double& sigma,double min,double max) const
     642int_4 GeneralFitData::GetMeanSigma(int_4 var,double& mean,double& sigma,double min,double max) const
    609643{
    610644mean = sigma = 0.;
    611 int ix = var/10;
     645int_4 ix = var/10;
    612646var = var%10;
    613647if(var<0 || var>3) return -1;
    614648if(var>=2 && (ix<0 || ix>=mNVar) ) return -1;
    615 int ntest = 0;
    616 for(int i=0;i<mNData;i++) {
     649int_4 ntest = 0;
     650for(int_4 i=0;i<mNData;i++) {
    617651  if( ! IsValid(i) ) continue;
    618652  double v;
     
    649683  \endverbatim
    650684*/
    651 int GeneralFitData::GetMoMeMed(int var,double& mode,double& mean,double& median,
     685int_4 GeneralFitData::GetMoMeMed(int_4 var,double& mode,double& mean,double& median,
    652686                               double min,double max,double coeff) const
    653687{
    654688mode = mean = median = 0.;
    655689if(mNData<=0) return -1;
    656 int ix = var/10;
     690int_4 ix = var/10;
    657691var = var%10;
    658692if(var<0 || var>3) return -1;
    659693if(var>=2 && (ix<0 || ix>=mNVar) ) return -1;
    660694double* buff = new double[mNData];
    661 int ntest = 0;
    662 for(int i=0;i<mNData;i++) {
     695int_4 ntest = 0;
     696for(int_4 i=0;i<mNData;i++) {
    663697  if( ! IsValid(i) ) continue;
    664698  double v;
     
    677711  mean /= (double)ntest;
    678712  qsort(buff,(size_t) ntest,sizeof(double),qSort_Dble);
    679   int im;
     713  int_4 im;
    680714  if(ntest%2==1) {
    681715    // nombre impair de points
     
    696730  Cf description ci-dessus ``GetMoMeMed''.
    697731*/
    698 int GeneralFitData::GetMode(int var,double& mode,double min,double max,double coeff) const
     732int_4 GeneralFitData::GetMode(int_4 var,double& mode,double min,double max,double coeff) const
    699733{
    700734double mean,median;
     
    718752  \endverbatim
    719753*/
    720 double GeneralFitData::PolFit(int varx,Poly& pol,int degre,bool ey,double xc) const
     754double GeneralFitData::PolFit(int_4 varx,Poly& pol,int_4 degre,bool ey,double xc) const
    721755{
    722756if(degre<0) return -1.;
     
    727761TVector<r_8> ey2(1);
    728762if(ey) ey2.Realloc(mNDataGood,true);
    729 int ntest = 0;
    730 for(int i=0;i<mNData;i++) {
     763int_4 ntest = 0;
     764for(int_4 i=0;i<mNData;i++) {
    731765  if( ! IsValid(i) ) continue;
    732766  if(ntest>=mNDataGood) return -5.;
     
    767801  \endverbatim
    768802*/
    769 double GeneralFitData::PolFit(int varx,int vary,Poly2& pol,int degre1,int degre2,bool ez
     803double GeneralFitData::PolFit(int_4 varx,int_4 vary,Poly2& pol,int_4 degre1,int_4 degre2,bool ez
    770804                             ,double xc,double yc) const
    771805{
     
    779813TVector<r_8> ez2(1);
    780814if(ez) ez2.Realloc(mNDataGood,true);
    781 int ntest = 0;
    782 for(int i=0;i<mNData;i++) {
     815int_4 ntest = 0;
     816for(int_4 i=0;i<mNData;i++) {
    783817  if( ! IsValid(i) ) continue;
    784818  if(ntest>=mNDataGood) return -5.;
     
    834868  \endverbatim
    835869*/
    836 r_8* GeneralFitData::GetVec(int n, r_8* ret)   const
    837 {
    838 int i;
     870r_8* GeneralFitData::GetVec(int_4 n, r_8* ret)   const
     871{
     872int_4 i;
    839873if (ret == NULL) ret = BuffVar;
    840874for(i=0; i<2*mNVar+3; i++)  ret[i] = 0.;
     
    853887  (meme commentaires que pour GetVec).
    854888*/
    855 r_4* GeneralFitData::GetVecR4(int n, r_4* ret)   const
     889r_4* GeneralFitData::GetVecR4(int_4 n, r_4* ret)   const
    856890{
    857891if (ret == NULL) ret = BuffVarR4;
    858892double *buff = new double[2*mNVar+3];
    859893GetVec(n,buff);
    860 for(int i=0;i<2*mNVar+3;i++) ret[i] = (float) buff[i];
     894for(int_4 i=0;i<2*mNVar+3;i++) ret[i] = (float) buff[i];
    861895delete [] buff;
    862896return ret;
     
    917951void GeneralFitData::GetMinMax(sa_size_t k, double& min, double& max)  const
    918952{
    919 int var;
     953int_4 var;
    920954if(k<0 || k>=2*NVar()+3) return;
    921955else if(k<NVar())      var = 10*k+2;          // Variable Xi
     
    938972sa_size_t GeneralFitData::ColumnIndex(string const & nom)  const
    939973{
    940 char str[64]; int k = -1;
     974char str[64]; int_4 k = -1;
    941975strcpy(str,nom.c_str()); strip(str,'L',' ');
    942976if(str[0]=='y') return 2*NVar();
     
    9721006char buff[256];
    9731007string rets;
    974 int i;
     1008int_4 i;
    9751009rets = "\ndouble";
    9761010for(i=0; i<mNVar; i++) {
     
    10811115
    10821116// Allocation de la place (attention Alloc efface mNData,mNDataGood);
    1083 dobj->Alloc(nvar,ndatalloc,-1);
     1117dobj->Alloc(nvar,ndatalloc,dobj->mOk_EXP);
    10841118dobj->mNData = ndata;
    10851119dobj->mNDataGood = ndatagood;
     
    10871121// Lecture des datas
    10881122is.GetLine(strg, 255);
    1089 int blen = dobj->mNVar + 3;
     1123int_4 blen = dobj->mNVar + 3;
    10901124if(dobj->mOk_EXP) blen += dobj->mNVar;
    10911125double *buff = new double[blen];
    1092 for(int i=0;i<dobj->mNData;i++) {
     1126for(int_4 i=0;i<dobj->mNData;i++) {
    10931127  is.Get(buff, blen);
    1094   int ip = i*dobj->mNVar;
    1095   {for(int j=0;j<dobj->mNVar;j++)  dobj->mXP[ip+j] = buff[j];}
     1128  int_4 ip = i*dobj->mNVar;
     1129  {for(int_4 j=0;j<dobj->mNVar;j++)  dobj->mXP[ip+j] = buff[j];}
    10961130  dobj->mF[i] = buff[dobj->mNVar];
    10971131  dobj->mErr[i] = buff[dobj->mNVar+1];
    10981132  dobj->mOK[i] = (uint_2)(buff[dobj->mNVar+2]+0.01);
    1099   if(dobj->mOk_EXP) {for(int j=0;j<dobj->mNVar;j++)
     1133  if(dobj->mOk_EXP) {for(int_4 j=0;j<dobj->mNVar;j++)
    11001134                        dobj->mErrXP[ip+j] = buff[dobj->mNVar+3+j];}
    11011135}
     
    11291163os.PutLine(strg);
    11301164
    1131 int blen = dobj->mNVar + 3;
     1165int_4 blen = dobj->mNVar + 3;
    11321166if(dobj->mOk_EXP) blen += dobj->mNVar;
    11331167double *buff = new double[blen];
    1134 for(int i=0;i<dobj->mNData;i++) {
    1135   {for(int j=0;j<dobj->mNVar;j++) buff[j] = dobj->Absc(j,i);}
     1168for(int_4 i=0;i<dobj->mNData;i++) {
     1169  {for(int_4 j=0;j<dobj->mNVar;j++) buff[j] = dobj->Absc(j,i);}
    11361170  buff[dobj->mNVar] = dobj->Val(i);
    11371171  buff[dobj->mNVar+1] = dobj->EVal(i);
    11381172  buff[dobj->mNVar+2] = (double) dobj->IsValid(i);
    1139   if(dobj->mOk_EXP) {for(int j=0;j<dobj->mNVar;j++) buff[dobj->mNVar+3+j] = dobj->EAbsc(j,i);}
     1173  if(dobj->mOk_EXP) {for(int_4 j=0;j<dobj->mNVar;j++) buff[dobj->mNVar+3+j] = dobj->EAbsc(j,i);}
    11401174  os.Put(buff, blen);
    11411175}
  • trunk/SophyaLib/NTools/generaldata.h

    r2683 r3062  
    1313namespace SOPHYA {
    1414
     15//  Forward class declaration for Fits handler
     16template <class T>  class FitsHandler;
     17
    1518class GeneralFit;
    1619
     
    2326  friend class GeneralFit;
    2427  friend class ObjFileIO<GeneralFitData>;
     28  friend class FitsHandler<GeneralFitData>;
    2529public:
    2630  //! Valeurs par defaut pour l'utilisation des erreurs
     
    3034    };
    3135
    32   GeneralFitData(unsigned int nVar, unsigned int nDataAlloc, uint_2 errx=0);
     36  GeneralFitData(uint_4 nVar, uint_4 nDataAlloc, uint_2 errx=0);
    3337  GeneralFitData(const GeneralFitData& data, bool clean=false);
    3438  GeneralFitData();
    3539  virtual ~GeneralFitData();
    3640
    37   void Alloc(unsigned int nVar, unsigned int nDataAlloc, int_2 errx=-1);
    38   void SetDataPtr(int ptr = 0);
    39 
    40   void KillData(int i);
    41   void KillData(int i1,int i2);
    42 
    43   void ValidData(int i);
    44   void ValidData(int i1,int i2);
     41  void SetDataPtr(int_4 ptr = 0);
     42
     43  void KillData(int_4 i);
     44  void KillData(int_4 i1,int_4 i2);
     45
     46  void ValidData(int_4 i);
     47  void ValidData(int_4 i1,int_4 i2);
    4548  void ValidData();
    4649
    47   void RedefineData1(int i,double x,double f,double err=Def_ErrF,double errx=Def_ErrX);
    48   void RedefineData2(int i,double x,double y,double f,double err=Def_ErrF
     50  void RedefineData1(int_4 i,double x,double f,double err=Def_ErrF,double errx=Def_ErrX);
     51  void RedefineData2(int_4 i,double x,double y,double f,double err=Def_ErrF
    4952                    ,double errx=Def_ErrX,double erry=Def_ErrX);
    50   void RedefineData(int i,double* xp,double f,double err=Def_ErrF,double* errxp=NULL);
     53  void RedefineData(int_4 i,double* xp,double f,double err=Def_ErrF,double* errxp=NULL);
    5154
    5255  void AddData1(double x, double f, double err=Def_ErrF,double errx=Def_ErrX);
     
    5659  void AddData(float* xp, float f, float err=Def_ErrF,float* errxp=NULL);
    5760
    58   void SetData1(int nData,double* x,double* f,double *err=NULL,double *errx=NULL);
    59   void SetData1(int nData,float* x,float* f,float* err=NULL,float *errx=NULL);
    60   void SetData2(int nData,double* x,double* y,double* f,double *err=NULL
     61  void SetData1(int_4 nData,double* x,double* f,double *err=NULL,double *errx=NULL);
     62  void SetData1(int_4 nData,float* x,float* f,float* err=NULL,float *errx=NULL);
     63  void SetData2(int_4 nData,double* x,double* y,double* f,double *err=NULL
    6164               ,double *errx=NULL,double *erry=NULL);
    62   void SetData2(int nData,float* x,float* y,float* f,float* err=NULL
     65  void SetData2(int_4 nData,float* x,float* y,float* f,float* err=NULL
    6366               ,float *errx=NULL,float *erry=NULL);
    64   void SetData(int nData,double** xp,double *f,double *err=NULL,double** errxp=NULL);
    65   void SetData(int nData,float** xp,float* f,float* err=NULL,float** errxp=NULL);
     67  void SetData(int_4 nData,double** xp,double *f,double *err=NULL,double** errxp=NULL);
     68  void SetData(int_4 nData,float** xp,float* f,float* err=NULL,float** errxp=NULL);
    6669
    6770  void PrintStatus() const;
    68   void PrintData(int i) const;
    69   void PrintData(int i1,int i2) const;
     71  void PrintData(int_4 i) const;
     72  void PrintData(int_4 i1,int_4 i2) const;
    7073  void PrintData() const;
    7174  void Show(ostream& os) const;
    7275  inline void Show() const {Show(cout);}
    7376
     77  //! Operator equal
     78  GeneralFitData& operator = (const GeneralFitData& g);
     79
    7480  //! Retourne la place restante dans la structure (nombre de donnees que l'on peut encore stoquer).
    75   inline int GetSpaceFree() const { return mNDataAlloc - mNData; }
     81  inline int_4 GetSpaceFree() const { return mNDataAlloc - mNData; }
    7682  //! Retourne le nombre de variables Xi
    77   inline int NVar()       const {return mNVar;}
     83  inline int_4 NVar()       const {return mNVar;}
    7884  //! Retourne le nombre de donnees
    79   inline int NData()      const {return mNData;}
     85  inline int_4 NData()      const {return mNData;}
    8086  //! Retourne le nombre de bonnes donnees (utilisees pour le fit)
    81   inline int NDataGood()  const {return mNDataGood;}
     87  inline int_4 NDataGood()  const {return mNDataGood;}
    8288  //! Retourne la place maximale allouee pour les donnees
    83   inline int NDataAlloc() const {return mNDataAlloc;}
     89  inline int_4 NDataAlloc() const {return mNDataAlloc;}
    8490
    8591  //! Retourne 1 si point valide, sinon 0
    86   inline unsigned short int IsValid(int i) const
     92  inline unsigned short IsValid(int_4 i) const
    8793                {if(i>=0 && i<mNData) return mOK[i]; else return 0;}
    8894  //! Retourne ``true'' si il y a des erreurs sur les variables d'abscisse, ``false'' sinon.
     
    9096
    9197  //! Retourne l'abscisse pour 1 dimension (y=f(x)) donnee I
    92   inline double X1(int i) const
     98  inline double X1(int_4 i) const
    9399                {if(i>=0 && i<mNData) return mXP[i]; else return 0.;}
    94100  //! Retourne la 1er abscisse (X) pour (v=f(x,y,z,...)) donnee I
    95   inline double X(int i) const
     101  inline double X(int_4 i) const
    96102                {if(i>=0 && i<mNData) return mXP[i*mNVar]; else return 0.;}
    97103  //! Retourne la 2sd abscisse (Y) pour (v=f(x,y,z,...)) donnee I
    98   inline double Y(int i) const
     104  inline double Y(int_4 i) const
    99105                {if(i>=0 && i<mNData && 1<mNVar) return mXP[i*mNVar+1]; else return 0.;}
    100106  //! etourne la 3ieme abscisse (Z) pour (v=f(x,y,z,...)) donnee I
    101   inline double Z(int i) const
     107  inline double Z(int_4 i) const
    102108                {if(i>=0 && i<mNData && 2<mNVar) return mXP[i*mNVar+2]; else return 0.;}
    103109  //! Retourne la Jieme abscisse (Xj) pour (v=f(x0,x1,x2,...)) donnee I
    104   inline double Absc(int j,int i) const
     110  inline double Absc(int_4 j,int_4 i) const
    105111                {if(i>=0 && i<mNData && j<mNVar)return mXP[i*mNVar+j]; else return 0.;}
    106112  //! Retourne la valeur de la Ieme donnee
    107   inline double Val(int i) const
     113  inline double Val(int_4 i) const
    108114                {if(i>=0 && i<mNData) return mF[i]; else return 0.;}
    109115
    110116  //! Retourne l'erreur (dx) sur l'abscisse pour 1 dimension (y=f(x)) donnee I
    111   inline double EX1(int i) const
     117  inline double EX1(int_4 i) const
    112118                {if(mErrXP && i>=0 && i<mNData) return mErrXP[i]; else return 0.;}
    113119  //! Retourne l'erreur (dx) sur la 1er abscisse (X) pour (v=f(x,y,z,...)) donnee I
    114   inline double EX(int i) const
     120  inline double EX(int_4 i) const
    115121                {if(mErrXP && i>=0 && i<mNData) return mErrXP[i*mNVar]; else return 0.;}
    116122  //! Retourne l'erreur (dy) sur la 2sd abscisse (Y) pour (v=f(x,y,z,...)) donnee I
    117   inline double EY(int i) const
     123  inline double EY(int_4 i) const
    118124                {if(mErrXP && i>=0 && i<mNData && 1<mNVar) return mErrXP[i*mNVar+1];
    119125                 else return 0.;}
    120126  //! Retourne l'erreur (dz) sur la 3ieme abscisse (Z) pour (v=f(x,y,z,...)) donnee I
    121   inline double EZ(int i) const
     127  inline double EZ(int_4 i) const
    122128                {if(mErrXP && i>=0 && i<mNData && 2<mNVar) return mErrXP[i*mNVar+2];
    123129                 else return 0.;}
    124130  //! Retourne l'erreur (dxj) sur la Jieme abscisse (Xj) pour (v=f(x0,x1,x2,...)) donnee I
    125   inline double EAbsc(int j,int i) const
     131  inline double EAbsc(int_4 j,int_4 i) const
    126132                {if(mErrXP && i>=0 && i<mNData && j<mNVar) return mErrXP[i*mNVar+j];
    127133                 else return 0.;}
    128134  //! Retourne l'erreur de la Ieme donnee
    129   inline double EVal(int i) const
     135  inline double EVal(int_4 i) const
    130136                {if(i>=0 && i<mNData) return mErr[i]; else return 0.;}
    131137
    132   r_8* GetVec(int n, r_8* ret=NULL) const;
    133   r_4* GetVecR4(int n, r_4* ret=NULL) const;
    134   int GetMnMx(int var,int& imin,int& imax) const;
    135   int GetMnMx(int var,double& min,double& max) const;
    136   int GetMeanSigma(int var,double& mean,double& sigma,double min=1.,double max=-1.) const;
    137   int GetMoMeMed(int var,double& mode,double& mean,double& median,
     138  r_8* GetVec(int_4 n, r_8* ret=NULL) const;
     139  r_4* GetVecR4(int_4 n, r_4* ret=NULL) const;
     140  int_4 GetMnMx(int_4 var,int_4& imin,int_4& imax) const;
     141  int_4 GetMnMx(int_4 var,double& min,double& max) const;
     142  int_4 GetMeanSigma(int_4 var,double& mean,double& sigma,double min=1.,double max=-1.) const;
     143  int_4 GetMoMeMed(int_4 var,double& mode,double& mean,double& median,
    138144                 double min=1.,double max=-1.,double coeff=0.8) const;
    139   int GetMode(int var,double& mode,double min=1.,double max=-1.,double coeff=0.8) const;
    140   double PolFit(int varx,Poly& pol,int degre,bool ey=true,double xc=0.) const;
    141   double PolFit(int varx,int vary,Poly2& pol,int degre1,int degre2=-1,bool ez=true
     145  int_4 GetMode(int_4 var,double& mode,double min=1.,double max=-1.,double coeff=0.8) const;
     146  double PolFit(int_4 varx,Poly& pol,int_4 degre,bool ey=true,double xc=0.) const;
     147  double PolFit(int_4 varx,int_4 vary,Poly2& pol,int_4 degre1,int_4 degre2=-1,bool ez=true
    142148               ,double xc=0.,double yc=0.) const;
    143149  GeneralFitData FitResidus(GeneralFit& gfit) const;
     
    161167
    162168protected:
     169  void Alloc(uint_4 nVar, uint_4 nDataAlloc, uint_2 errx=0);
    163170  void Delete();
    164171
Note: See TracChangeset for help on using the changeset viewer.