Changeset 804 in Sophya for trunk/SophyaLib/TArray/matharr.cc


Ignore:
Timestamp:
Apr 3, 2000, 7:36:01 PM (25 years ago)
Author:
ansari
Message:

Amelioation / debugging de la classe TArray<T> - TVector et TMatrix

heritent maintenant de TArray<T> - Classe RCMatrix rendu prive au fichier
sopemtx.cc - linfit.cc integre a sopemtx.cc

Reza 03/04/2000

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/TArray/matharr.cc

    r787 r804  
    1313TArray<T>& MathArray<T>::ApplyFunctionInPlace(TArray<T> & a, Arr_DoubleFunctionOfX f)
    1414{
     15  if (a.NbDimensions() < 1)
     16    throw RangeCheckError("MathArray<T>::ApplyFunctionInPlace(TArray<T> & a..) Not Allocated Array a !");
    1517  T * pe;
    1618  uint_8 j,k;
     
    3638TArray<T>& MathArray<T>::ApplyFunctionInPlace(TArray<T> & a, Arr_FloatFunctionOfX f)
    3739{
     40  if (a.NbDimensions() < 1)
     41    throw RangeCheckError("MathArray<T>::ApplyFunctionInPlace(TArray<T> & a..) Not Allocated Array a !");
    3842  T * pe;
    3943  uint_8 j,k;
     
    7579}
    7680
     81template <class T>
     82double MathArray<T>::MeanSigma(TArray<T> const & a, double & mean, double & sig)
     83{
     84  if (a.NbDimensions() < 1)
     85    throw RangeCheckError("MathArray<T>::MeanSigma(TArray<T> const & a..) Not Allocated Array a !");
     86  const T * pe;
     87  uint_8 j,k;
     88  mean=0.;
     89  sig = 0.;
     90  double valok;
     91  if (a.AvgStep() > 0)   {  // regularly spaced elements
     92    uint_8 step = a.AvgStep();
     93    uint_8 maxx = a.Size()*step;
     94    pe = a.Data();
     95    for(k=0; k<maxx; k+=step )  {
     96      valok = (double) pe[k];
     97      mean += valok;  sig += valok*valok;
     98    }
     99  }
     100  else {    // Non regular data spacing ...
     101    uint_4 ka = a.MaxSizeKA();
     102    uint_8 step = a.Step(ka);
     103    uint_8 gpas = a.Size(ka)*step;
     104    for(j=0; j<a.Size(); j += a.Size(ka))  {
     105      pe = a.DataBlock().Begin()+a.Offset(j);
     106      for(k=0; k<gpas; k+=step) {
     107        valok = (double) pe[k];
     108        mean += valok;  sig += valok*valok;
     109      }
     110    }
     111  }
     112  double dsz = (double)(a.Size());
     113  mean /= dsz;
     114  sig = sig/dsz - mean*mean;
     115  if (sig >= 0.) sig = sqrt(sig);
     116  return(mean);
     117}
     118
    77119///////////////////////////////////////////////////////////////
    78120#ifdef __CXX_PRAGMA_TEMPLATES__
Note: See TracChangeset for help on using the changeset viewer.