#include "machdefs.h" #include #include #include #include #include "datatype.h" #include "nomimagadapter.h" #include "pimgadapter.h" #ifdef SANS_EVOLPLANCK #include "fitsimage.h" #else #include "objfitter.h" #include "fitstarray.h" #endif //--------------------------------------------------------------- // Class Adaptateur d'objet (Pour NamedObjMgr) d'objet Image //--------------------------------------------------------------- /* --Methode-- */ template NOMAdapter_Image::NOMAdapter_Image(Image * o) : NObjMgrAdapter(o) { mImg = o; } /* --Methode-- */ template NOMAdapter_Image::~NOMAdapter_Image() { } /* --Methode-- */ template NObjMgrAdapter* NOMAdapter_Image::Clone(AnyDataObj* o) { Image* im = dynamic_cast *>(o); if (im) return ( new NOMAdapter_Image(im) ); return ( new NObjMgrAdapter(o) ); } /* --Methode-- */ template string NOMAdapter_Image::GetDataObjType() { string type = "Image< "; // type += DecodeTypeIdName(typeid(T).name()); type += DataTypeInfo::getTypeName(); type += " > "; return(type); } /* --Methode-- */ template AnyDataObj* NOMAdapter_Image::CloneDataObj(bool share) { #ifdef SANS_EVOLPLANCK FitsImage * fima = dynamic_cast *>(mImg); if (fima == NULL) return( new Image(*mImg ) ); else return ( new FitsImage(*fima) ); #else return( new Image(*mImg, share) ); #endif } /* --Methode-- */ template void NOMAdapter_Image::ReadFits(string const & flnm) { #ifdef SANS_EVOLPLANCK cerr << " NOMAdapter_Image::ReadFits() Non disponible !! " << endl; #else FitsInFile fis(flnm); fis >> (*mImg); #endif } /* --Methode-- */ template void NOMAdapter_Image::SaveFits(string const & flnm) { #ifdef SANS_EVOLPLANCK FitsImage fim(*mImg, 1); fim.Save(flnm); #else FitsOutFile fos(flnm); fos << (*mImg); #endif } #ifndef SANS_EVOLPLANCK void NOMAdapter_Image< uint_2 >::SaveFits(string const & flnm) { cout << " NOMAdapter_Image< uint_2 >::SaveFits() - Error " << " Not supported uint_2 data type ! " << endl; } void NOMAdapter_Image< uint_2 >::ReadFits(string const & flnm) { cout << " NOMAdapter_Image< uint_2 >::ReadFits() - Error " << " Not supported uint_2 data type ! " << endl; } #endif /* --Methode-- */ template void NOMAdapter_Image::SavePPF(POutPersist& pos, string const & nom) { #ifdef SANS_EVOLPLANCK // PEIDA-EROS L'histo est lui-meme PPersist string tag = nom; // A cause de const mImg->Write(pos,0,tag); #else string s = typeid(*mObj).name(); cout << "NOMAdapter_Image::SavePPF() - Error : Not supported for " << s << endl; #endif } /* --Methode-- */ template void NOMAdapter_Image::Print(ostream& os) { mImg->Print(os); } /* --Methode-- */ template P2DArrayAdapter* NOMAdapter_Image::Get2DArray(string &) { return ( new ImageAdapter(mImg, false) ); } /* --Methode-- */ template NTupleInterface* NOMAdapter_Image::GetNTupleInterface(bool& adel) { adel = true; return( new NTupInt_Image(mImg) ); } /* --Methode-- */ template GeneralFitData* NOMAdapter_Image::GetGeneralFitData(bool& adel ,GeneralFitData::FitErrType errtype,double errscale,double errmin ,int i1,int i2,int j1,int j2) { adel = false; if(!mImg) return(NULL); int nx = mImg->XSize(); int ny = mImg->YSize(); if(nx<=0 || ny<=0) return(NULL); i1 = (i1<0||i1>=nx)? 0: i1; i2 = (i2<0||i2>=nx||i2=ny)? 0: j1; j2 = (j2<0||j2>=ny||j2XPos(i); double y = mImg->YPos(j); double f = (*mImg)(i,j); double e = 1.; e = GeneralFitData::ComputeError(f,e,errtype,errscale,errmin); mGData->AddData2(x,y,f,e); } return mGData; } template AnyDataObj* NOMAdapter_Image::FitResidusObj(GeneralFit& mfit) { #ifdef SANS_EVOLPLANCK RzImage* rzim = mImg->FitResidus(mfit); ImageR4* im = new ImageR4(*rzim); return im; #else Image* im = new Image(ObjectFitter::FitResidus(*mImg,mfit)); return im; #endif } template AnyDataObj* NOMAdapter_Image::FitFunctionObj(GeneralFit& mfit) { #ifdef SANS_EVOLPLANCK RzImage* rzim = mImg->FitFunction(mfit); ImageR4* im = new ImageR4(*rzim); return im; #else Image* im = NULL; //im = new Image(ObjectFitter::FitFunction(*mImg,mfit)); return im; #endif } // ------------------------------------------------------------- /* --Methode-- */ template NTupInt_Image::NTupInt_Image(Image* m) { mImg = m; } /* --Methode-- */ template NTupInt_Image::~NTupInt_Image() { } /* --Methode-- */ template uint_4 NTupInt_Image::NbLines() const { return( mImg->XSize() * mImg->YSize() ); } /* --Methode-- */ template uint_4 NTupInt_Image::NbColumns() const { return(3); } /* --Methode-- */ template r_8* NTupInt_Image::GetLineD(int n) const { int i,j; if ((n < 0) || (n >= mImg->XSize() * mImg->YSize() )) for(i=0; i<3; i++) mRet[i] = 0.; else { i = n%mImg->XSize(); j = n/mImg->XSize(); mRet[0] = i; mRet[1] = j; mRet[2] = (*mImg)(i,j); } return(mRet); } /* --Methode-- */ template string NTupInt_Image::VarList_C(const char* nx) const { string nomx; if (nx) nomx = nx; else nomx = "_xh_"; string vardec = "double x,y,pix,i,j,val; \n"; vardec += "x = i = " + nomx + "[0]; y = j = " + nomx + "[1]; pix = val = " + nomx + "[2]; \n"; return(vardec); } #ifdef __CXX_PRAGMA_TEMPLATES__ #pragma define_template NOMAdapter_Image #pragma define_template NOMAdapter_Image #pragma define_template NOMAdapter_Image #pragma define_template NTupInt_Image #pragma define_template NTupInt_Image #pragma define_template NTupInt_Image #ifdef SANS_EVOLPLANCK #pragma define_template NOMAdapter_Image #pragma define_template NTupInt_Image #endif #endif #if defined(ANSI_TEMPLATES) || defined(__ANSI_TEMPLATES__) || defined(__GNU_TEMPLATES__) template class NOMAdapter_Image; template class NOMAdapter_Image; template class NOMAdapter_Image; template class NTupInt_Image; template class NTupInt_Image; template class NTupInt_Image; #ifdef SANS_EVOLPLANCK template class NOMAdapter_Image; template class NTupInt_Image; #endif #endif