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
00032
00033
00034
00035
00036
00037
00038
00039
00040 #ifndef _GDS_XSILFSPECTRUM_HH
00041 #define _GDS_XSILFSPECTRUM_HH
00042
00043 #include <complex>
00044 #include <string>
00045 #include <iosfwd>
00046
00047 #include "xml/Xsil.hh"
00048
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 }
00266
00267 #endif // define GDS_XSILFSPECTRUM_HH
00268
00269
00270
00271