00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef ARCADIA_MCAO_RECONSTRUCTOR_H
00032 #define ARCADIA_MCAO_RECONSTRUCTOR_H
00033
00034 #include <AO_sim_base.h>
00035 #include <pixel_array.h>
00036 #include <vector>
00037 #include "aperture.h"
00038 #include "refractive_atmosphere.h"
00039 #include "lenslet_array.h"
00040 #include "tip_tilt_mirror.h"
00041 #include "deformable_mirror.h"
00042 #include "zernike.h"
00043 #include "Shack_Hartmann_centroids.h"
00044
00045 namespace Arroyo {
00046
00050
00051 class arcadia_mcao_reconstructor :
00052 public AO_sim_base {
00053
00054 private:
00055
00056 static const bool factory_registration;
00057
00060 std::string unique_name() const {return(std::string("Arcadia MCAO reconstructor"));};
00061
00062 protected:
00063
00066 arcadia_mcao_reconstructor(){};
00067
00068 Arroyo::circular_aperture circ_ap;
00069 Arroyo::refractive_atmospheric_model * ref_atm_model;
00070 std::vector<Arroyo::emitter *> guide_stars;
00071 std::vector<bool> tilt_removal_flags;
00072 std::vector<Arroyo::square_lenslet_array> lenslet_arrays;
00073 std::vector<Arroyo::ideal_tip_tilt_mirror<circular_aperture> > ttms;
00074 std::vector<Arroyo::ideal_deformable_mirror<circular_aperture> > dms;
00075 std::vector<std::string> slaving_files;
00076
00077 Arroyo::pixel_array<double> mcao_reconstructor;
00078
00079 public:
00080
00083 arcadia_mcao_reconstructor(const arcadia_mcao_reconstructor & arcadia_mcao_recon);
00084
00087 arcadia_mcao_reconstructor(const char * filename);
00088
00091 arcadia_mcao_reconstructor(const Arroyo::iofits & iof);
00092
00095 arcadia_mcao_reconstructor(const char * arcadia_input_file,
00096 const char * arcadia_mcao_reconstructor_file);
00097
00100 ~arcadia_mcao_reconstructor(){};
00101
00104 arcadia_mcao_reconstructor & operator=(const arcadia_mcao_reconstructor & arcadia_mcao_recon);
00105
00108 void read(const char * filename);
00109
00112 void read(const Arroyo::iofits & iof);
00113
00116 void write(const char * filename) const;
00117
00120 void write(Arroyo::iofits & iof) const;
00121
00124 void print(std::ostream & os, const char * prefix="") const;
00125
00129 void reconstruct_zernike_residuals(const std::vector<Arroyo::Shack_Hartmann_centroids> & shcentroids,
00130 std::vector<Arroyo::zernike> & znkes) const;
00131
00135 void reconstruct_residuals(const std::vector<Arroyo::Shack_Hartmann_centroids> & shcentroids,
00136 std::vector<Arroyo::zernike> & znke,
00137 std::vector<Arroyo::pixel_array<double> > & pixarrs) const;
00138
00139 static int verbose_level;
00140 };
00141
00142
00143
00144
00145
00146
00147
00148 void write_arcadia_input_file(const Arroyo::refractive_atmospheric_model & ref_atm_model,
00149 const Arroyo::circular_aperture & circ_ap,
00150 const std::vector<Arroyo::emitter *> & guide_stars,
00151 const std::vector<Arroyo::square_lenslet_array> & lenslet_arrays,
00152 const std::vector<bool> & tilt_removal_flags,
00153 const std::vector<Arroyo::ideal_tip_tilt_mirror<circular_aperture> > & ttms,
00154 const std::vector<Arroyo::ideal_deformable_mirror<circular_aperture> > & dms,
00155 const std::vector<double> & slaving_thresholds,
00156 const char * filename);
00157
00158 }
00159
00160 #endif