00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef RECOMULTIFREQ_H
00019 #define RECOMULTIFREQ_H
00020
00021 #include "fieldmap.h"
00022
00023
00024 class RecoMultiFreq : public RecoStep {
00025
00026
00027 STD_string label() const {return "multifreq";}
00028 STD_string description() const {return "Generate multi-frequency ADCs based on fieldmap";}
00029 bool process(RecoData& rd, RecoController& controller);
00030 RecoCoord input_coord() const {return RecoCoord::coord_with_mode(RecoIndex::collected,readout);}
00031 void modify_coord(RecoCoord& coord) const {}
00032 bool query(RecoQueryContext& context);
00033 RecoStep* allocate() const {return new RecoMultiFreq;}
00034 void init();
00035
00036 JDXint max_numof_freq;
00037
00038
00039 bool get_freqs(Data<float,1>& result, const RecoCoord& fmapcoord, double adcdur, RecoController& controller);
00040
00041
00042
00043 typedef STD_map<RecoCoord, Data<float,1> > FreqMap;
00044 FreqMap freqmap;
00045 Mutex freqmutex;
00046
00047 darray echoTimeStamps;
00048 Mutex stampmutex;
00049 };
00050
00052
00053
00054 class RecoFreqComb : public RecoFieldMapUser {
00055
00056
00057 STD_string label() const {return "freqcomb";}
00058 STD_string description() const {return "Combine multi-frequency images using fieldmap";}
00059 bool process(RecoData& rd, RecoController& controller);
00060 RecoCoord input_coord() const {return RecoCoord::coord_with_mode(RecoIndex::collected,freq,line3d,line,readout);}
00061 void modify_coord(RecoCoord& coord) const {coord.set_mode(RecoIndex::single,freq);}
00062 RecoStep* allocate() const {return new RecoFreqComb;}
00063 void init() {}
00064
00065
00066 bool get_freqs(Data<float,1>& result, const RecoCoord& fmapcoord, RecoController& controller);
00067
00068 };
00069
00070
00071 #endif
00072