00001 #ifndef UNCOUPLED_IMAGER3D_H
00002 #define UNCOUPLED_IMAGER3D_H
00003
00004 #include <string>
00005 #include "parametermap.h"
00006 #include "kernel.h"
00007 #include "corr3d_ylm.h"
00008 #include "sou3d_ylm.h"
00009 #include "soubase.h"
00010 #include "sou1d_bsplines.h"
00011 #include "sou1d_legendre.h"
00012 #include "sou1d_laguerre.h"
00013 #include "sou1d_hermite.h"
00014 #include "sou1d_chebyshev.h"
00015 #include "sou1d_histo.h"
00016 #include "general_imager3d.h"
00017 #include "bspline_imager1d.h"
00018 #include "basisfunc_imager1d.h"
00019
00020 using namespace std;
00021 using namespace TNT;
00022
00023
00024
00025
00026 template< class TSource1d, class TImager1d >
00027 class CUncoupledImager3d: public CGeneralImager3d {
00028
00029 public:
00030
00031
00033 CUncoupledImager3d( void ): CGeneralImager3d(){}
00034
00035
00037 ~CUncoupledImager3d( void ){}
00038
00039
00041 bool Read( const parameterMap& m ){return CGeneralImager3d::Read(m);}
00042
00043
00045 bool Write( parameterMap& m ){return CGeneralImager3d::Write(m);}
00046
00047
00049 bool convertCorrelationToSource( const CCorrFtn3dSphr& corrin, CSourceFtnBase& souout, const parameterMap& m ){
00050
00051 CSourceFtn3dSphr< TSource1d >* souPtr = dynamic_cast< CSourceFtn3dSphr< TSource1d >* >(&souout);
00052 if (souPtr == NULL) throw MESSAGE << "Source argument must derive from CSourceFtn3dSphr<TSource1d>"<<ENDM_FATAL;
00053
00054 souPtr->lmax = parameter::getI( m, "lmax", corrin.lmax );
00055 souPtr->particle1 = parameter::getS( m, "particle1", corrin.particle1 );
00056 souPtr->particle2 = parameter::getS( m, "particle2", corrin.particle2 );
00057 souPtr->storage_directory = parameter::getS( m, "storage_directory", "." );
00058 souPtr->skip_odd_l = parameter::getB( m, "skip_odd_l", souout.particle1 == souout.particle2 );
00059
00060
00061 if ( kernelPtr == NULL ) set_kernel( parameter::getMap( m, "kernel_settings" ) );
00062
00063 bool result=true;
00064 TImager1d imager;
00065 for ( CCorrFtn3dSphr::const_iterator it=corrin.begin(); it!=corrin.end(); ++it ){
00066 TSource1d souterm;
00067 cout << "Imaging .... term: " << it->first.termName() << endl;
00068 imager.convertCorrelationToSource( it->second, souterm, m, kernelPtr );
00069 souPtr->insert( make_pair( it->first, souterm ) );
00070 }
00071 return result;
00072 }
00073
00074
00076 bool convertSourceToCorrelation( const CSourceFtnBase& souin, CCorrFtn3dSphr& corrout, const parameterMap& m ){
00077 const CSourceFtn3dSphr<TSource1d>* souPtr = dynamic_cast< const CSourceFtn3dSphr<TSource1d>* >(&souin);
00078 if (souPtr == NULL) throw MESSAGE << "Source argument must derive from CSourceFtn3dSphr<TSource1d>"<<ENDM_FATAL;
00079
00080 corrout.lmax=parameter::getI(m,"lmax",souPtr->lmax);
00081 corrout.bigQ=parameter::getB(m,"bigQ",false);
00082 corrout.particle1=parameter::getS(m,"particle1",souin.particle1);
00083 corrout.particle2=parameter::getS(m,"particle2",souin.particle2);
00084 corrout.storage_directory=parameter::getS(m,"storage_directory",".");
00085 corrout.skip_odd_l=parameter::getB(m,"skip_odd_l",corrout.particle1==corrout.particle2);
00086
00087
00088 if ( kernelPtr == NULL ) set_kernel( parameter::getMap( m, "kernel_settings" ) );
00089
00090 bool result=true;
00091 TImager1d imager;
00092 for (
00093 typename CSourceFtn3dSphr<TSource1d>::const_iterator it=souPtr->CSourceFtn3dSphr<TSource1d>::begin();
00094 it!=souPtr->CSourceFtn3dSphr<TSource1d>::end();
00095 ++it
00096 ){
00097 cout <<"Unimaging .... term: "<<it->first.termName()<<endl;
00098 CCorrFtn1dHisto corrterm;
00099 imager.convertSourceToCorrelation( it->second, corrterm, m, kernelPtr );
00100 corrout.insert( make_pair( it->first, corrterm ) );
00101 }
00102 return result;
00103 }
00104
00105
00106
00107
00108
00110 bool initialize_source( const CCorrFtn3dSphr& corrin, CSourceFtnBase& souout ){ return true; }
00111
00112
00114 bool initialize_correlation( const CSourceFtnBase& souin, CCorrFtn3dSphr& corrout ){ return true; }
00115
00116
00118 bool set_no_data( CSourceFtnBase& souout ){ return true; }
00119 };
00120
00121 typedef CUncoupledImager3d< CSourceFtn1dBSpline, CBasisSplineImager1d > UncoupledBasisSplineImager3d;
00122 typedef CUncoupledImager3d< CSourceFtn1dHisto, CBasisSplineImager1d > UncoupledHistoImager3d;
00123 typedef CUncoupledImager3d< CSourceFtn1dLegendrePoly, CBasisFuncImager1d > UncoupledLegendrePolyImager3d;
00124 typedef CUncoupledImager3d< CSourceFtn1dLaguerrePoly, CBasisFuncImager1d > UncoupledLaguerrePolyImager3d;
00125 typedef CUncoupledImager3d< CSourceFtn1dHermitePoly, CBasisFuncImager1d > UncoupledHermitePolyImager3d;
00126 typedef CUncoupledImager3d< CSourceFtn1dChebyshevPoly, CBasisFuncImager1d > UncoupledChebyshevPolyImager3d;
00127
00128 #endif