// This may look like C code, but it is really -*- C++ -*- // Adaptateurs pour TMatrix TVector du package Sophya // R. Ansari 1/99 // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA #ifndef PITVMAAD_H_SEEN #define PITVMAAD_H_SEEN #include "machdefs.h" #include #include "parradapter.h" #include "tmatrix.h" #include "tvector.h" // Adaptateur de vecteurs SOPHYA a P1DArrayAdapter template class POTVectorAdapter : public P1DArrayAdapter { public : POTVectorAdapter(TVector* v, bool ad=false) : P1DArrayAdapter(v->NElts()) { aDel = ad; mVec = v; } virtual ~POTVectorAdapter() { if (aDel) delete mVec; } virtual double Value(int i) { return((*mVec)(i)); } protected: bool aDel; TVector* mVec; }; typedef POTVectorAdapter POVectorAdapter; double POTVectorAdapter< complex >::Value(int i) { double re,im; re = (*mVec)(i).real(); im = (*mVec)(i).imag(); return(sqrt(re*re+im*im)); } double POTVectorAdapter< complex >::Value(int i) { double re,im; re = (*mVec)(i).real(); im = (*mVec)(i).imag(); return(sqrt(re*re+im*im)); } // Adaptateur de matrice SOPHYA a P2DArrayAdapter // Attention MatrixAdapter(X=Colonne, Y= Row) = Matrix(row, col) template class POTMatrixAdapter : public P2DArrayAdapter { public : POTMatrixAdapter(TMatrix* mtx, bool ad=false) : P2DArrayAdapter(mtx->NCols(), mtx->NRows()) { aDel = ad; mMtx = mtx; } virtual ~POTMatrixAdapter() { if (aDel) delete mMtx; } virtual double Value(int ix, int iy) { return((double)(*mMtx)(iy, ix)); } protected: bool aDel; TMatrix* mMtx; }; typedef POTMatrixAdapter POMatrixAdapter; double POTMatrixAdapter< complex >::Value(int ix, int iy) { double re,im; re = (*mMtx)(iy, ix).real(); im = (*mMtx)(iy, ix).imag(); return(sqrt(re*re+im*im)); } double POTMatrixAdapter< complex >::Value(int ix, int iy) { double re,im; re = (*mMtx)(iy, ix).real(); im = (*mMtx)(iy, ix).imag(); return(sqrt(re*re+im*im)); } #endif