Changeset 490 in Sophya for trunk/SophyaLib/NTools/generaldata.cc


Ignore:
Timestamp:
Oct 21, 1999, 5:25:53 PM (26 years ago)
Author:
ansari
Message:

Merge avec PEIDA++ (~V 3.8) et nettoyage pour nouveau PPersist Reza+cmv 21/10/99

File:
1 edited

Legend:

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

    r307 r490  
    88#include <string>
    99
    10 #if defined(__KCC__)
    11 using std::string ;
    12 #endif
    13 
     10#include "strutil.h"
    1411#include "nbtri.h"
    1512#include "generalfit.h"
     
    134131//--
    135132{
    136 DBASSERT( nVar>0 && ndatalloc>0 );
     133ASSERT( nVar>0 && ndatalloc>0 );
    137134
    138135Delete();
     
    176173//--
    177174{
    178  DBASSERT(ptr >= 0 && ptr < mNDataAlloc);
     175 ASSERT(ptr >= 0 && ptr < mNDataAlloc);
    179176 mNData = ptr;
    180177 mNDataGood = 0;
     
    190187//--
    191188{
    192  DBASSERT(i >= 0 && i < mNData);
     189 ASSERT(i >= 0 && i < mNData);
    193190
    194191 if( ! mOK[i] ) return;
     
    203200//--
    204201{
    205  DBASSERT(i1 >= 0 && i1 < mNData);
    206  DBASSERT(i2 >= 0 && i2 < mNData);
    207  DBASSERT(i1 <= i2 );
     202 ASSERT(i1 >= 0 && i1 < mNData);
     203 ASSERT(i2 >= 0 && i2 < mNData);
     204 ASSERT(i1 <= i2 );
    208205
    209206 for(int i=i1;i<=i2;i++) KillData(i);
     
    217214//--
    218215{
    219  DBASSERT(i >= 0 && i < mNData);
     216 ASSERT(i >= 0 && i < mNData);
    220217
    221218 if( mOK[i] ) return;
     
    234231//--
    235232{
    236  DBASSERT(i1 >= 0 && i1 < mNData);
    237  DBASSERT(i2 >= 0 && i2 < mNData);
    238  DBASSERT(i1 <= i2 );
     233 ASSERT(i1 >= 0 && i1 < mNData);
     234 ASSERT(i2 >= 0 && i2 < mNData);
     235 ASSERT(i1 <= i2 );
    239236
    240237 for(int i=i1;i<=i2;i++) ValidData(i);
     
    281278//--
    282279{
    283  DBASSERT(i>=0 && i<mNData);
     280 ASSERT(i>=0 && i<mNData);
    284281 bool ok = true;
    285282
     
    335332//--
    336333{
    337  DBASSERT(mNData < mNDataAlloc);
     334 ASSERT(mNData < mNDataAlloc);
    338335 bool ok = true;
    339336
     
    377374//--
    378375{
    379  DBASSERT(nData>0 && mNData+nData<=mNDataAlloc);
     376 ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    380377
    381378 for(int i=0;i<nData;i++) {
     
    394391//--
    395392{
    396  DBASSERT(nData>0 && mNData+nData<=mNDataAlloc);
     393 ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    397394
    398395 for(int i=0;i<nData;i++) {
     
    411408//--
    412409{
    413  DBASSERT(nData>0 && mNData+nData<=mNDataAlloc);
     410 ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    414411
    415412 for(int i=0;i<nData;i++) {
     
    429426//--
    430427{
    431  DBASSERT(nData>0 && mNData+nData<=mNDataAlloc);
     428 ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    432429
    433430 for(int i=0;i<nData;i++) {
     
    454451//--
    455452{
    456  DBASSERT(nData>0 && mNData+nData<=mNDataAlloc);
     453 ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    457454 if(mOk_EXP && !errxp) {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;}
    458455
     
    473470//--
    474471{
    475  DBASSERT(nData>0 && mNData+nData<=mNDataAlloc);
     472 ASSERT(nData>0 && mNData+nData<=mNDataAlloc);
    476473
    477474 if(mOk_EXP && !errxp) {for(int j=0;j<mNVar;j++) BuffVar[mNVar+j] = Def_ErrX;}
     
    506503//--
    507504{
    508  DBASSERT(i>=0 && i<mNData);
     505 ASSERT(i>=0 && i<mNData);
    509506
    510507 cout<<" "<<i<<" F( ";
     
    540537//--
    541538{
    542  DBASSERT(mNData>0);
     539 ASSERT(mNData>0);
    543540
    544541 PrintData(0,mNData-1);
    545542}
    546543
    547 //////////////////////////////////////////////////////////////////////
    548 //++
    549 int GeneralFitData::GetMinMax(int var,int& imin,int& imax)
     544//++
     545void GeneralFitData::Show(ostream& os) const
     546//
     547//      Impression de l'etat de la structure de donnees avec bornes sur "s"
     548//--
     549{
     550double min,max;
     551os<<"GeneralFitData:: NVar,ErrX="<<mNVar<<","<<mOk_EXP
     552  <<" Data: "<<mNData<<" Good,Alloc="<<mNDataGood<<","<<mNDataAlloc<<endl;
     553for(int k=0;k<2*NVar()+3;k++) {
     554  GetMinMax(k,min,max);
     555  os<<" - "<<k<<" "<<ColumnName(k)<<"  ,  "<<min<<","<<max<<endl;
     556}
     557return;
     558}
     559
     560//////////////////////////////////////////////////////////////////////
     561//++
     562int GeneralFitData::GetMnMx(int var,int& imin,int& imax) const
    550563//
    551564//      Retourne les numeros des points de valeurs minimum et maximum
     
    582595
    583596//++
    584 int GeneralFitData::GetMinMax(int var,double& min,double& max)
     597int GeneralFitData::GetMnMx(int var,double& min,double& max) const
    585598//
    586599//      Retourne le minimum et le maximum de la variable ``var''
    587 //      (cf commentaires GetMinMax).
     600//      (cf commentaires GetMnMx).
    588601//--
    589602{
    590603min = 1.; max = -1.;
    591604int imin,imax;
    592 int ntest = GetMinMax(var,imin,imax);
     605int ntest = GetMnMx(var,imin,imax);
    593606if(ntest<=0) return ntest;
    594607int ix = var/10;
     
    615628//
    616629//      Retourne la moyenne et le sigma de la variable ``var''
    617 //      (cf commentaires GetMinMax).
     630//      (cf commentaires GetMnMx).
    618631//| - Return : nombre de donnees utilisees, -1 si pb, -2 si sigma<0.
    619632//| - Seuls les points valides de valeur entre min,max sont utilises.
     
    655668//
    656669//      Retourne le mode de la variable ``var''
    657 //      (cf commentaires GetMinMax).
     670//      (cf commentaires GetMnMx).
    658671//| - Return : nombre de donnees utilisees, -1 si pb.
    659672//| - Seuls les points valides de valeur entre min,max sont utilises.
     
    876889//////////////////////////////////////////////////////////////////////
    877890//++
     891// int inline int GetSpaceFree() const
     892//      Retourne la place restante dans la structure (nombre de
     893//      donnees que l'on peut encore stoquer).
     894//--
     895//++
     896// inline int  NVar()       const
     897//      Retourne le nombre de variables Xi
     898//--
     899//++
     900// inline int  NData()
     901//      Retourne le nombre de donnees
     902//--
     903//++
     904// inline int  NDataGood()  const
     905//      Retourne le nombre de bonnes donnees (utilisees pour le fit)
     906//--
     907//++
     908// inline int  NDataAlloc() const
     909//      Retourne la place maximale allouee pour les donnees
     910//--
     911//++
     912// inline unsigned short int IsValid(int i) const
     913//      Retourne 1 si point valide, sinon 0
     914//--
     915//++
     916// inline bool HasXErrors()
     917//      Retourne ``true'' si il y a des erreurs sur les variables
     918//      d'abscisse, ``false'' sinon.
     919//--
     920//++
     921// inline double X1(int i) const
     922//      Retourne l'abscisse pour 1 dimension (y=f(x)) donnee I
     923//--
     924//++
     925// inline double X(int i) const
     926//      Retourne la 1er abscisse (X) pour (v=f(x,y,z,...)) donnee I
     927//--
     928//++
     929// inline double Y(int i) const
     930//      Retourne la 2sd abscisse (Y) pour (v=f(x,y,z,...)) donnee I
     931//--
     932//++
     933// inline double Z(int i) const
     934//      Retourne la 3ieme abscisse (Z) pour (v=f(x,y,z,...)) donnee I
     935//--
     936//++
     937// inline double Absc(int j,int i) const
     938//      Retourne la Jieme abscisse (Xj) pour (v=f(x0,x1,x2,...)) donnee I
     939//--
     940//++
     941// inline double Val(int i) const
     942//      Retourne la valeur de la Ieme donnee
     943//--
     944//++
     945// inline double EX1(int i) const
     946//      Retourne l'erreur (dx) sur l'abscisse pour 1 dimension (y=f(x)) donnee I
     947//--
     948//++
     949// inline double EX(int i) const
     950//      Retourne l'erreur (dx) sur la 1er abscisse (X) pour (v=f(x,y,z,...)) donnee I
     951//--
     952//++
     953// inline double EY(int i) const
     954//      Retourne l'erreur (dy) sur la 2sd abscisse (Y) pour (v=f(x,y,z,...)) donnee I
     955//--
     956//++
     957// inline double EZ(int i) const
     958//      Retourne l'erreur (dz) sur la 3ieme abscisse (Z) pour (v=f(x,y,z,...)) donnee I
     959//--
     960//++
     961// inline double EAbsc(int j,int i) const
     962//      Retourne l'erreur (dxj) sur la Jieme abscisse (Xj) pour (v=f(x0,x1,x2,...)) donnee I
     963//--
     964//++
     965// inline double EVal(int i) const {return mErr[i];}
     966//      Retourne l'erreur de la Ieme donnee
     967//--
     968
     969
     970//////////////////////////////////////////////////////////////////////
     971// ------- Implementation de  l interface NTuple  ---------
     972
     973uint_4 GeneralFitData::NbLines() const
     974{
     975return(NData());
     976}
     977
     978//++
     979uint_4 GeneralFitData::NbColumns() const
     980//
     981//      Retourne le nombre de colonnes du ntuple equivalent:
     982//| Exemple: on a une fonction sur un espace a 4 dimensions:
     983//| "x0,x1,x2,x3    , ex0,ex1,ex2,ex3    , y,   ey ,    ok"
     984//|   0  1  2  3        4   5   6   7      8     9      10
     985//|   |        |        |           |      |     |       |       
     986//|   0       nv-1     nv         2*nv-1  2*nv  2*nv+1  2*nv+2
     987//| soit 2*nvar+3 variables/colonnes.
     988//--
     989{
     990return(2*NVar()+3);
     991}
     992
     993r_8 * GeneralFitData::GetLineD(int n) const
     994{
     995return(GetVec(n,NULL));
     996}
     997
     998r_8 GeneralFitData::GetCell(int n, int k) const
     999{
     1000if(k<0 || k>=2*NVar()+3) return 0.;
     1001r_8 * val = GetVec(n,NULL);
     1002return val[k];
     1003}
     1004
     1005r_8 GeneralFitData::GetCell(int n, string const & nom) const
     1006{
     1007int k = ColumnIndex(nom);
     1008return(GetCell(n,k));
     1009}
     1010
     1011//++
     1012void GeneralFitData::GetMinMax(int k, double& min, double& max)  const
     1013//
     1014//      Retourne le minimum et le maximum de la variable `k'.
     1015//--
     1016{
     1017int var;
     1018if(k<0 || k>=2*NVar()+3) return;
     1019else if(k<NVar())      var = 10*k+2;          // Variable Xi
     1020else if(k<2*NVar())    var = 10*(k-NVar())+3; // Variable EXi
     1021else if(k==2*NVar())   var = 0;               // Variable Y
     1022else if(k==2*NVar()+1) var = 1;               // Variable EY
     1023else {min=0.; max=1.; return;}                // Variable Ok
     1024GetMnMx(var,min,max);
     1025return;
     1026}
     1027
     1028void GeneralFitData::GetMinMax(string const & nom, double& min, double& max)   const
     1029{
     1030int k = ColumnIndex(nom);
     1031GetMinMax(k,min,max);
     1032}
     1033
     1034int GeneralFitData::ColumnIndex(string const & nom)  const
     1035{
     1036char str[64]; int k = -1;
     1037strcpy(str,nom.c_str()); strip(str,'L',' ');
     1038if(str[0]=='y') return 2*NVar();
     1039if(str[0]=='o') return 2*NVar()+2;
     1040if(str[0]=='x') {sscanf(str,"x%d",&k); return k;}
     1041if(str[0]=='e')
     1042  if(str[1]=='y') return 2*NVar()+1;
     1043  else if(str[1]=='x') {sscanf(str,"ex%d",&k); return NVar()+k;}
     1044return -1;
     1045}
     1046
     1047string GeneralFitData::ColumnName(int k) const
     1048{
     1049if(k==2*NVar())                return string("y");
     1050else if(k==2*NVar()+1)         return string("ey");
     1051else if(k==2*NVar()+2)         return string("ok");
     1052else if(k<0 || k>=2*NVar()+3)  return string("");
     1053
     1054char str[64] = "";
     1055if(k<NVar()) sprintf(str,"x%d",k);
     1056else if(k<2*NVar()) sprintf(str,"ex%d",k-NVar());
     1057return string(str);
     1058}
     1059
     1060//++
    8781061string GeneralFitData::VarList_C(const char* nomx)  const
    8791062//
     
    9111094}
    9121095
    913 //////////////////////////////////////////////////////////////////////
    914 //++
    915 // int inline int GetSpaceFree() const
    916 //      Retourne la place restante dans la structure (nombre de
    917 //      donnees que l'on peut encore stoquer).
    918 //--
    919 //++
    920 // inline int  NVar()       const
    921 //      Retourne le nombre de variables Xi
    922 //--
    923 //++
    924 // inline int  NData()
    925 //      Retourne le nombre de donnees
    926 //--
    927 //++
    928 // inline int  NDataGood()  const
    929 //      Retourne le nombre de bonnes donnees (utilisees pour le fit)
    930 //--
    931 //++
    932 // inline int  NDataAlloc() const
    933 //      Retourne la place maximale allouee pour les donnees
    934 //--
    935 //++
    936 // inline unsigned short int IsValid(int i) const
    937 //      Retourne 1 si point valide, sinon 0
    938 //--
    939 //++
    940 // inline bool HasXErrors()
    941 //      Retourne ``true'' si il y a des erreurs sur les variables
    942 //      d'abscisse, ``false'' sinon.
    943 //--
    944 //++
    945 // inline double X1(int i) const
    946 //      Retourne l'abscisse pour 1 dimension (y=f(x)) donnee I
    947 //--
    948 //++
    949 // inline double X(int i) const
    950 //      Retourne la 1er abscisse (X) pour (v=f(x,y,z,...)) donnee I
    951 //--
    952 //++
    953 // inline double Y(int i) const
    954 //      Retourne la 2sd abscisse (Y) pour (v=f(x,y,z,...)) donnee I
    955 //--
    956 //++
    957 // inline double Z(int i) const
    958 //      Retourne la 3ieme abscisse (Z) pour (v=f(x,y,z,...)) donnee I
    959 //--
    960 //++
    961 // inline double Absc(int j,int i) const
    962 //      Retourne la Jieme abscisse (Xj) pour (v=f(x0,x1,x2,...)) donnee I
    963 //--
    964 //++
    965 // inline double Val(int i) const
    966 //      Retourne la valeur de la Ieme donnee
    967 //--
    968 //++
    969 // inline double EX1(int i) const
    970 //      Retourne l'erreur (dx) sur l'abscisse pour 1 dimension (y=f(x)) donnee I
    971 //--
    972 //++
    973 // inline double EX(int i) const
    974 //      Retourne l'erreur (dx) sur la 1er abscisse (X) pour (v=f(x,y,z,...)) donnee I
    975 //--
    976 //++
    977 // inline double EY(int i) const
    978 //      Retourne l'erreur (dy) sur la 2sd abscisse (Y) pour (v=f(x,y,z,...)) donnee I
    979 //--
    980 //++
    981 // inline double EZ(int i) const
    982 //      Retourne l'erreur (dz) sur la 3ieme abscisse (Z) pour (v=f(x,y,z,...)) donnee I
    983 //--
    984 //++
    985 // inline double EAbsc(int j,int i) const
    986 //      Retourne l'erreur (dxj) sur la Jieme abscisse (Xj) pour (v=f(x0,x1,x2,...)) donnee I
    987 //--
    988 //++
    989 // inline double EVal(int i) const {return mErr[i];}
    990 //      Retourne l'erreur de la Ieme donnee
    991 //--
    992 
    9931096///////////////////////////////////////////////////////////
    9941097// --------------------------------------------------------
     
    9971100///////////////////////////////////////////////////////////
    9981101
    999 FIO_GeneralFitData::FIO_GeneralFitData()
    1000 {
    1001 dobj=new GeneralFitData;
    1002 ownobj=true;
    1003 }
    1004 
    1005 FIO_GeneralFitData::FIO_GeneralFitData(string const & filename)
    1006 {
    1007 dobj=new GeneralFitData;
    1008 ownobj=true;
    1009 Read(filename);
    1010 }
    1011 
    1012 FIO_GeneralFitData::FIO_GeneralFitData(const GeneralFitData & obj)
    1013 {
    1014 dobj = new GeneralFitData(obj);
    1015 ownobj=true;
    1016 }
    1017 
    1018 FIO_GeneralFitData::FIO_GeneralFitData(GeneralFitData * obj)
    1019 {
    1020 dobj = obj;
    1021 ownobj=false;
    1022 }
    1023 
    1024 FIO_GeneralFitData::~FIO_GeneralFitData()
    1025 {
    1026 if (ownobj && dobj) delete dobj;
    1027 }
    1028 
    1029 AnyDataObj* FIO_GeneralFitData::DataObj()
    1030 {
    1031 return(dobj);
    1032 }
    1033 
    1034 void FIO_GeneralFitData::ReadSelf(PInPersist& is)
     1102
     1103void ObjFileIO<GeneralFitData>::ReadSelf(PInPersist& is)
    10351104{
    10361105char strg[256];
     
    10761145}
    10771146
    1078 void FIO_GeneralFitData::WriteSelf(POutPersist& os) const
     1147void ObjFileIO<GeneralFitData>::WriteSelf(POutPersist& os) const
    10791148{
    10801149if (dobj == NULL)   return;
     
    11141183return;
    11151184}
     1185
     1186
     1187#ifdef __CXX_PRAGMA_TEMPLATES__
     1188#pragma define_template ObjFileIO<GeneralFitData>
     1189#endif
     1190
     1191#if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES)
     1192template class ObjFileIO<GeneralFitData>;
     1193#endif
Note: See TracChangeset for help on using the changeset viewer.