UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
subcor.hpp
1 // subcor.hpp
2 //-------------------------------------------------------------------------
3 #ifndef __subcor_hpp
4 #define __subcor_hpp
5 //=========================================================================
6 
7 #include <mix/Types.h>
8 #include <mix/wenv.h>
9 #include <mix/misc.h>
10 #include <mth/policor.h>
11 #include <zm/ZmProgress.H>
12 #include <math.h>
13 #include <stdlib.h>
14 
15 /**********************************************************************
16 * ПОДПРОГРАММА РАСЧЕТА СРЕДНЕМЕДИАННОГО ЗНАЧЕНИЯ ВЫБОРКИ *
17 * *
18 * ВХОДНЫЕ ДАННЫЕ : *
19 * A(n) real*4 - массив значений для поиска среднего *
20 * n integer*4 - число отсчетов в выборке *
21 * d real*4 - доля отбраковываемых значений d=(0-1); *
22 * число отбpаковываемых значений pавно *
23 * целой части выpaжения M=d*N+0.5; *
24 * кpоме того наложено условие: *
25 * число неотбpакованных значений N-M => 3; *
26 * pекомендуемое значение d=0.1-0.25; *
27 * использование d>0.4 нецелесообpазно *
28 * пpи N<3 отбpаковка не пpоизводится(d=0). *
29 * *
30 * ВЫХОДНЫЕ ДАННЫЕ : *
31 * sum real*4 - среднемедианное значение *
32 * ierr integer*4 - код ошибки: *
33 * ierr=0 - нет ошибок *
34 * ierr=1 - ошибка в параметре N *
35 **********************************************************************/
36 // subroutine medsumk(A,n,d,sum,ierr)
37 
38 extern "C" void Fortran(medsumk)(float*, int*, float*,float*,int*);
39 
40 //-------------------------------------------------------------------------
41 class Subcor
42 {
43  public:
44 
45  Subcor(double **trs, double *hod, int tn, int zn, double dt, double rigCoef, double l1, double l2,
46  int hodStN = 0, int hodLen = 0, int baseLenZ=7, int baseLenT=4,
47  float medCoef = 0.3, double amplCoefMin = 0.8, double amplCoefMax=1.2);
48  ~Subcor();
49 
50  void GetWave(double **outTrs);
51  void SetPBar(Progress *pPrInd);
52 
53  private:
54 
55  void TrAlignment();
56  void TrReAlignment();
57 
58  void TrForm(int trNum, double *trForm);
59  void CalcFVKCoef(int j1, int j2, int i, double *coef);
60  void CalcEnCoef(int j1, int j2, int i, double *coef);
61  double CalcAmplCoef(double *trForm, int trNum);
62  double GetAIJ(int j1, int j2, int i1, int i2);
63 
64  double **trs; // копия входного поля [tn][zn]
65  double **lnTrs; // входное поле после выравнивания [lnTrNum][zmx-zmn]
66  double **lnSepTrs; // выделенная волна [lntrNum][zmx-zmn] c выравниванием
67  double **sepTrs; // выделенная волна [tn][zmx-zmn] в исходном положении double **wFunc; // матрица весовых функций [baseLenZ][lnTrNum] double **sCor; // матрица коэффициентов взаимной корелляции [baseLenZ][baseLenZ] double *hod; // годограф [zmx-zmn] double *fvkCoef; // вектор коэфициентов ВК [baseLenZ] double *enCoef; // вектор энергетич. коэффициентов [baseLenZ] double *shiftAr; // массив сдвигов [zmx-zmn] float *fCoef; // массив для промежуточных вычислений [baseLnZ] double rigCoef; // коэффициент жесткости (1..3) float medCoef; // коэффициент отбраковки для медианнойоценки (0..1) double amplCoefMin; // минимально допустимое значение амплиудного коэффициента double amplCoefMax; // максимально допустимое значение амплиудного коэффициента double l1, l2; // размеры временного окна double dt; // величина временного дискрета int tn, zn; // число осчетов и число трасс входного поля int zmn, zmx; // диапазон номеров трасс для которых определен годограф int lnTrNum; // колличество отсчетов во временном окне int baseLenZ; // размер базы по глубине int baseLenT; // pазмер базы по времени Progress *pPrInd; /**< Progress indicator object or NULL */ }; //========================================================================= #endif // subcor.hpp
68  double **wFunc; // матрица весовых функций [baseLenZ][lnTrNum]
69  double **sCor; // матрица коэффициентов взаимной корелляции [baseLenZ][baseLenZ]
70  double *hod; // годограф [zmx-zmn]
71  double *fvkCoef; // вектор коэфициентов ВК [baseLenZ]
72  double *enCoef; // вектор энергетич. коэффициентов [baseLenZ]
73  double *shiftAr; // массив сдвигов [zmx-zmn]
74  float *fCoef; // массив для промежуточных вычислений [baseLnZ]
75 
76  double rigCoef; // коэффициент жесткости (1..3)
77  float medCoef; // коэффициент отбраковки для медианнойоценки (0..1)
78  double amplCoefMin; // минимально допустимое значение амплиудного коэффициента double amplCoefMax; // максимально допустимое значение амплиудного коэффициента double l1, l2; // размеры временного окна double dt; // величина временного дискрета int tn, zn; // число осчетов и число трасс входного поля int zmn, zmx; // диапазон номеров трасс для которых определен годограф int lnTrNum; // колличество отсчетов во временном окне int baseLenZ; // размер базы по глубине int baseLenT; // pазмер базы по времени Progress *pPrInd; /**< Progress indicator object or NULL */ }; //========================================================================= #endif // subcor.hpp
79  double amplCoefMax; // максимально допустимое значение амплиудного коэффициента double l1, l2; // размеры временного окна double dt; // величина временного дискрета int tn, zn; // число осчетов и число трасс входного поля int zmn, zmx; // диапазон номеров трасс для которых определен годограф int lnTrNum; // колличество отсчетов во временном окне int baseLenZ; // размер базы по глубине int baseLenT; // pазмер базы по времени Progress *pPrInd; /**< Progress indicator object or NULL */ }; //========================================================================= #endif // subcor.hpp
80 
81  double l1, l2; // размеры временного окна
82  double dt; // величина временного дискрета int tn, zn; // число осчетов и число трасс входного поля int zmn, zmx; // диапазон номеров трасс для которых определен годограф int lnTrNum; // колличество отсчетов во временном окне int baseLenZ; // размер базы по глубине int baseLenT; // pазмер базы по времени Progress *pPrInd; /**< Progress indicator object or NULL */ }; //========================================================================= #endif // subcor.hpp
83  int tn, zn; // число осчетов и число трасс входного поля
84  int zmn, zmx; // диапазон номеров трасс для которых определен годограф
85  int lnTrNum; // колличество отсчетов во временном окне
86  int baseLenZ; // размер базы по глубине
87  int baseLenT; // pазмер базы по времени Progress *pPrInd; /**< Progress indicator object or NULL */ }; //========================================================================= #endif // subcor.hpp
88 
89  Progress *pPrInd;
90 };
91 
92 //=========================================================================
93 #endif // subcor.hpp
Definition: Progress.hpp:16
Definition: subcor.hpp:41