#include #include #include "perrors.h" #include "ntuple.h" #define BADVAL -1.e19 #define LENNAME 8 #define LENNAME1 (LENNAME+1) //++ // Class NTuple // Lib Outils++ // include ntuple.h // // Classe de ntuples //-- /* --Methode-- */ //++ NTuple::NTuple() // // Createur par defaut //-- { mNVar = mNEnt = mBlk = mNBlk = 0; mVar = NULL; mNames = NULL; mInfo = NULL; } //++ NTuple::NTuple(int nvar, char** noms, int blk) // // Createur d'un ntuple de `nvar' variables dont les // noms sont dans le tableau de cahines de caracteres `noms' // avec `blk' d'evenements par blocks. //-- { mNVar = mNEnt = mBlk = mNBlk = 0; mVar = NULL; mNames = NULL; mInfo = NULL; if (nvar <= 0) THROW(sizeMismatchErr); mNVar = nvar; mVar = new r_4[nvar]; if (blk < 10) blk = 10; mBlk = blk; // On prend des noms de LENNAME char pour le moment mNames = new char[nvar*LENNAME1]; r_4* pt = new r_4[nvar*blk]; mNBlk = 1; mPtr.push_back(pt); int i; for(i=0; i= mNBlk) { r_4* pt = new r_4[mNVar*mBlk]; mNBlk++; mPtr.push_back(pt); } int offb = mNEnt-numb*mBlk; memcpy((mPtr[numb]+offb*mNVar), x, mNVar*sizeof(r_4)); mNEnt++; return; } /* --Methode-- */ //++ float NTuple::GetVal(int n, int k) const // // Retourne la valeur de la variable `k' de l'evenement `n'. //-- { if (n >= mNEnt) return(BADVAL); if ( (k < 0) || (k >= mNVar) ) return(BADVAL); int numb = n/mBlk; int offb = n-numb*mBlk; return(*(mPtr[numb]+offb*mNVar+k)); } /* --Methode-- */ //++ int NTuple::IndexNom(const char* nom) const // // Retourne le numero de la variable de nom `nom'. //-- { int i; for(i=0; i= 0) && (k < mNVar)) strcpy(nomretour, mNames+k*LENNAME1); return(nomretour); } /* --Methode-- */ //++ string NTuple::VarList_C(const char* nomx) const // // Retourne une chaine de caracteres avec la declaration des noms de // variables. si "nomx!=NULL" , des instructions d'affectation // a partir d'un tableau "nomx[i]" sont ajoutees. //-- { string rets; int i; for(i=0; i 0) ) rets += ";"; if (i%5 == 0) rets += "\ndouble "; else rets += ","; rets += mNames+i*LENNAME1; } rets += "; \n"; if (nomx) { char buff[256]; for(i=0; i 0) ) rets += "\n"; } } return(rets); } /* --Methode-- */ //++ r_4* NTuple::GetVec(int n, r_4* ret) const // // Retourne l'evenement `n' dans le vecteur `ret'. //-- { int i; if (ret == NULL) ret = mVar; if (n >= mNEnt) { for(i=0; i= mNVar) ) return; int jb,ib,i; float x; i=0; for(jb=0; jb< mNBlk; jb++) for(ib=0; ib< mBlk; ib++) { if (i >= mNEnt) break; i++; x = *(mPtr[jb]+ib*mNVar+k); if(i==1) {min = x; max = x;} if (x < min) min = x; if (x > max) max = x; } return; } /* --Methode-- */ //++ DVList& NTuple::Info() // // Renvoie une référence sur l'objet DVList Associé //-- { if (mInfo == NULL) mInfo = new DVList; return(*mInfo); } /* --Methode-- */ //++ void NTuple::Print(int num, int nmax) const // // Imprime `nmax' evenements a partir du numero `num'. //-- { int i,j; printf("Num "); for(i=0; i mNEnt) nmax = mNEnt; for(i=num; i> (*mInfo); } int jb; for(jb=0; jb