00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef RECOGRID_H
00019 #define RECOGRID_H
00020
00021 #include "step.h"
00022
00023
00024
00025 template<int NDim>
00026 class RecoGrid : public RecoStep {
00027
00028
00029 STD_string label() const {return "grid"+postfix();}
00030 STD_string description() const {return "Grid signal data with arbitrary k-space trajectory in "+itos(NDim)+" dimensions";}
00031 bool process(RecoData& rd, RecoController& controller);
00032 RecoCoord input_coord() const {return RecoCoord::coord_with_mode(RecoIndex::collected, readout);}
00033 void modify_coord(RecoCoord& coord) const {if(NDim==2) coord.set_mode(RecoIndex::collected, line);}
00034 bool query(RecoQueryContext& context);
00035 RecoStep* allocate() const {return new RecoGrid<NDim>;}
00036 void init();
00037
00038 JDXbool deapo_shift;
00039 JDXfilter kernel;
00040 JDXfloat kernelwidth;
00041 JDXfloat gridScale;
00042
00043 static STD_string postfix() {return itos(NDim)+"d";}
00044
00045 static TinyVector<int,NDim> gridshape(const RecoCoord& coord, RecoController& controller);
00046
00047 const Gridding<STD_complex,NDim>& get_gridder(const RecoCoord& coord, RecoController& controller);
00048
00049
00050 typedef STD_map<const KspaceTraj*, Gridding<STD_complex,NDim> > GridderMap;
00051 GridderMap gridmap;
00052 Mutex gridmutex;
00053
00054 };
00055
00056
00058
00059
00060 template<int NDim>
00061 class RecoDeapodize : public RecoStep {
00062
00063
00064 STD_string label() const {return "deapodize"+postfix();}
00065 STD_string description() const {return "De-apodize gridded data in "+itos(NDim)+" dimensions";}
00066 bool process(RecoData& rd, RecoController& controller);
00067 RecoCoord input_coord() const {return RecoCoord::coord_with_mode(RecoIndex::collected, line3d, line, readout);}
00068 void modify_coord(RecoCoord& coord) const {}
00069 RecoStep* allocate() const {return new RecoDeapodize;}
00070 void init() {}
00071
00072 static STD_string postfix() {return itos(NDim)+"d";}
00073
00074 };
00075
00076 class RecoGridCut : public RecoStep {
00077
00078
00079 STD_string label() const {return "gridcut"; }
00080 STD_string description() const {return "Cut out central part of image to remove effects from gridding on a denser grid";}
00081 bool process(RecoData& rd, RecoController& controller);
00082 RecoCoord input_coord() const {return RecoCoord::coord_with_mode(RecoIndex::collected, line3d, line, readout);}
00083 void modify_coord(RecoCoord& coord) const {}
00084 RecoStep* allocate() const {return new RecoGridCut;}
00085 void init() {}
00086 };
00087
00088
00089 #endif
00090