Go to the documentation of this file.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 #ifndef COMPATAUTOCORRCURVES_H
00029 #define COMPATAUTOCORRCURVES_H
00030
00031 #define CompatAUTOCORR_INVALID_VALUE -99
00032
00033 #include "QGpCompatibilityDLLExport.h"
00034 #include "CompatDispersion.h"
00035
00036 namespace QGpCompatibility {
00037
00038 class QGPCOMPATIBILITY_EXPORT CompatAutocorrCurves: public CompatMultiModalFrequency
00039 {
00040 public:
00041 enum FrequencyRange {Complete,NoInitialFlat,FirstSlope};
00042
00043 CompatAutocorrCurves();
00044
00045 CompatAutocorrCurves(int modesCount, int radiusCount, int omegasCount);
00046
00047 CompatAutocorrCurves(const CompatAutocorrCurves * o);
00048
00049 CompatAutocorrCurves(const CompatAutocorrCurves * o,int modesCount);
00050
00051 virtual ~CompatAutocorrCurves();
00052
00053
00054
00055 void calculate(CompatDispersion& disp);
00056
00057
00058 void toStream(FILE * f);
00059
00060 void radiusToReport(QDataStream& s) const;
00061
00062 void reportToRadius(QDataStream& s);
00063
00064 void valuesToReport(QDataStream& s) const;
00065
00066 void reportToOmega(QDataStream& s);
00067
00068 void reportToValues(QDataStream& s);
00069
00070 int toPointVector(int imode,int iRadius,Point2D * pointList);
00071
00072 int toDistancePointVector(int imode,int iomega,Point2D * pointList);
00073
00074 void resetAutocorr();
00075
00076
00077 int omegasCount (int imode, int r) const;
00078
00079 int omegasCount () const {return _omegasCount;}
00080
00081 int radiusCount () const {return _radiusCount;}
00082
00083 double radiusMin (int i) const {return _radiusMin[i];}
00084
00085 double radiusMax (int i) const {return _radiusMax[i];}
00086
00087 double radiusAverage (int i) const {return (_radiusMax[i]+_radiusMin[i])/2;}
00088
00089 QVector<double> * radiusAverage () const;
00090
00091 void setRadius(QVector<double>& rmin,QVector<double>& rmax);
00092 void setRadius(CompatAutocorrCurves * o);
00093 void setRadius(QString radiusFile);
00094 void setRadius(int r, double rmin, double rmax)
00095 {_radiusMin[r]=rmin;_radiusMax[r]=rmax;}
00096 static int getRadiusCount(QString radiusFile);
00097
00098 double value(int i, int r,int m) const {return _values[m][r][i];}
00099
00100 void setValue(int i, int r,int m, double value) {_values[m][r][i]=value;}
00101
00102 void setRangeType(FrequencyRange fr) {_rangeType=fr;}
00103
00104 void resetValues();
00105 void setRayleighModesCount(int rm) {
00106 if(rm<=_modesCount) _rayleighModesCount=rm;
00107 }
00108 uint rayleighModesCount() {return _rayleighModesCount;}
00109 protected:
00110 friend class CompatAutocorrData;
00111 uint _rayleighModesCount;
00112
00113 int _radiusCount;
00114
00115 double * _radiusMin;
00116
00117 double * _radiusMax;
00118
00119 double *** _values;
00120
00121 FrequencyRange _rangeType;
00122
00123 void allocatesRadius();
00124
00125 void deleteValues();
00126
00127 void allocatesValues();
00128 };
00129
00130 }
00131
00132 #endif // COMPATAUTOCORRCURVES_H