xml/XsilFSpectrum.hh

00001 /*----------------------------------------------------------------------*/
00002 /*                                                                      */
00003 /* Module Name: xsilFSpectrum                                           */
00004 /*                                                                      */
00005 /* Module Description: Classes for LIGO-LW input/output to DMT objects. */
00006 /*                                                                      */
00007 /* Revision History:                                                    */
00008 /* Rel   Date     Programmer    Comments                                */
00009 /* (testing-- R. Rahkola)       Initial revision                        */
00010 /*                                                                      */
00011 /* Documentation References:                                            */
00012 /*      Man Pages: none                                                 */
00013 /*      References: none                                                */
00014 /*                                                                      */
00015 /* Author Information:                                                  */
00016 /* Name          Telephone       Fax             e-mail                 */
00017 /* Rauha Rahkola (509) 372-8141  (509) 372-8137  rrahkola@darkwing.     */
00018 /*                                                        uoregon.edu   */
00019 /*                                                                      */
00020 /*                                                                      */
00021 /*                      -------------------                             */
00022 /*                                                                      */
00023 /*                             LIGO                                     */
00024 /*                                                                      */
00025 /*        THE LASER INTERFEROMETER GRAVITATIONAL WAVE OBSERVATORY.      */
00026 /*                                                                      */
00027 /*                     (C) The LIGO Project, 2001.                      */
00028 /*                                                                      */
00029 /*                                                                      */
00030 /* Caltech                              MIT                             */
00031 /* LIGO Project MS 51-33                LIGO Project NW-17 161          */
00032 /* Pasadena CA 91125                    Cambridge MA 01239              */
00033 /*                                                                      */
00034 /* LIGO Hanford Observatory             LIGO Livingston Observatory     */
00035 /* P.O. Box 1970 S9-02                  19100 LIGO Lane Rd.             */
00036 /* Richland WA 99352                    Livingston, LA 70754            */
00037 /*                                                                      */
00038 /*----------------------------------------------------------------------*/
00039 
00040 #ifndef _GDS_XSILFSPECTRUM_HH
00041 #define _GDS_XSILFSPECTRUM_HH
00042 
00043 #include <complex>
00044 #include <string>
00045 #include <iosfwd>
00046 //=============  xml common header file
00047 #include "xml/Xsil.hh"
00048 //=============  DMT C++ header files
00049 #include "FSpectrum.hh"
00050 #include "FSeries.hh"
00051 #include "Complex.hh"
00052 
00053 namespace xml {
00054 
00063    class xsilFSpectrum {
00064    protected:
00066       int              fLevel;
00068       const FSeries   *fData0;
00070       const FSpectrum *fData1;
00072       const int        fSubtype;
00074       std::ostream& writeFSpectrum (std::ostream &os) const;
00076       std::ostream& writeFSeries (std::ostream &os) const;
00077    
00078    public:
00080       xsilFSpectrum(int level = 1): fLevel(level),fData0(0),fData1(0),
00081       fSubtype(-1) {
00082       }
00084       xsilFSpectrum(const FSpectrum* fs, int level = 1):
00085       fLevel(level),fData0(0),fData1(fs),fSubtype(1) {
00086       }
00088       xsilFSpectrum(const FSpectrum& fs, int level = 1):
00089       fLevel(level),fData0(0),fData1(&fs),fSubtype(1) {
00090       }
00092       xsilFSpectrum(const FSeries* fs, int level = 1):
00093       fLevel(level),fData0(fs),fData1(0),fSubtype(0) {
00094       }
00096       xsilFSpectrum(const FSeries& fs, int level = 1):
00097       fLevel(level),fData0(&fs),fData1(0),fSubtype(0) {
00098       }
00100       std::ostream& write (std::ostream &os) const;
00101    };
00102 
00103    typedef xsilFSpectrum xsilFSeries;
00104 
00111    inline std::ostream& operator<< (std::ostream &os, const xsilFSpectrum &fs) {
00112       return fs.write(os); }
00113 
00119    class xsilHandlerFSpectrum: public xsilHandler {
00120    protected:
00122       std::vector<FSpectrum>     *fSpectrums;
00124       std::vector<FSeries>       *fSeries;
00126       std::string                 fName;
00128       int                         fSubtype;
00130       unsigned long               fSec;
00132       unsigned long               fNsec;
00134       double                      fDt;
00136       float                       fF0;
00138       double                      fDf;
00140       int                         fAverages;
00142       double                      fBW;
00144       bool                        fComplex;
00146       float*                      fData;
00148       int                         fDim1;
00150       int                         fDim2;
00151    
00152    public:
00154       explicit xsilHandlerFSpectrum (std::vector<FSpectrum> *specs, 
00155                         std::vector<FSeries> *sers,
00156                         const attrlist *attr=0, bool ignore=false);
00158       virtual ~xsilHandlerFSpectrum();
00160       virtual bool HandleParameter (const std::string& name,
00161                         const attrlist& attr,
00162                         const bool& p, int N = 1) {
00163          return false; }
00165       virtual bool HandleParameter (const std::string& name,
00166                         const attrlist& attr,
00167                         const char& p, int N = 1) {
00168          return false; }
00170       virtual bool HandleParameter (const std::string& name,
00171                         const attrlist& attr,
00172                         const short& p, int N = 1) {
00173          return false; }
00175       virtual bool HandleParameter(const std::string& name, 
00176                         const attrlist& attr, const int& p, int N=1);
00177    #ifndef __CINT__
00179       virtual bool HandleParameter (const std::string& name,
00180                         const attrlist& attr,
00181                         const long long& p, int N = 1) {
00182          return false; }
00183    #endif
00185       virtual bool HandleParameter (const std::string& name,
00186                         const attrlist& attr,
00187                         const float& p, int N = 1) {
00188          return false; }
00190       virtual bool HandleParameter(const std::string& name, 
00191                         const attrlist& attr, 
00192                         const double& p, int N=1);
00194       virtual bool HandleParameter (const std::string& name,
00195                         const attrlist& attr,
00196                         const std::complex<float>& p, int N = 1) {
00197          return false; }
00199       virtual bool HandleParameter (const std::string& name,
00200                         const attrlist& attr,
00201                         const std::complex<double>& p, int N = 1) {
00202          return false; }
00204       virtual bool HandleParameter(const std::string& name, 
00205                         const attrlist& attr, const std::string& p);
00207       virtual bool HandleTime (const std::string& name, const attrlist& attr,
00208                         unsigned long sec, unsigned long nsec);
00210       virtual bool HandleData (const std::string& name, float* x, 
00211                         int dim1, int dim2=0, int dim3=0, int dim4=0);
00213       virtual bool HandleData (const std::string& name, std::complex<float>* x,
00214                         int dim1, int dim2=0, int dim3=0, int dim4=0);
00216       virtual bool HandleData (const std::string& name, double* x, 
00217                         int dim1, int dim2=0, int dim3=0, int dim4=0) {
00218          return false; }                             
00220       virtual bool HandleData (const std::string& name, std::complex<double>* x,
00221                         int dim1, int dim2=0, int dim3=0, int dim4=0) {
00222          return false; }
00223    };
00224 
00225    typedef xsilHandlerFSpectrum xsilHandlerFSeries;
00226 
00233    class xsilHandlerQueryFSpectrum: public xsilHandlerQuery {
00234    protected:
00236       std::vector<FSpectrum>     *fSpectrum;
00238       std::vector<FSeries>       *fSeries;
00239    
00240    public:
00242       explicit xsilHandlerQueryFSpectrum(std::vector<FSeries> &sers)
00243       : fSpectrum(NULL),fSeries(&sers) {
00244       }
00246       explicit xsilHandlerQueryFSpectrum (std::vector<FSpectrum> &specs)
00247       : fSpectrum(&specs), fSeries(NULL) {
00248       }
00250       xsilHandlerQueryFSpectrum (std::vector<FSpectrum> &specs, 
00251                         std::vector<FSeries> &sers)
00252       : fSpectrum(&specs), fSeries(&sers) {
00253       }
00255       ~xsilHandlerQueryFSpectrum (void) {
00256       }
00258       virtual xsilHandler* GetHandler(const attrlist& attr);
00259    };
00260 
00261    typedef xsilHandlerQueryFSpectrum xsilHandlerQueryFSeries;
00262 
00265 } // namespace xml
00266 
00267 #endif // define GDS_XSILFSPECTRUM_HH
00268 
00269 
00270 
00271 

Generated on Sun Mar 8 19:20:53 2009 for dmt by  doxygen 1.5.4