Browse Source

Work towards templated lagged digital filter FHT, currently only works with Key201 for unknown reasons.

add-code-of-conduct-1
Trevor Irons 6 years ago
parent
commit
b02a8de4b2

+ 9
- 2
Modules/FDEM1D/examples/FHT.cpp View File

@@ -21,7 +21,14 @@
21 21
 using namespace Lemma;
22 22
 
23 23
 int main() {
24
-    std::cout << "FHT test" << std::endl;
24
+//    std::cout << "FHT test" << std::endl;
25
+    auto fht = FHT< FHTKEY201 >::NewSP();
26
+    std::cout << *fht << std::endl;
27
+    std::cout << fht->GetABSER() << std::endl;
25 28
 
26
-    //auto fht = FHT::NewSP();
29
+    auto fht1 = FHT< FHTKEY101 >::NewSP();
30
+    std::cout << *fht1 << std::endl;
31
+    std::cout << fht1->GetABSER() << std::endl;
32
+
33
+    //auto fhtq = FHT< QWEKEY >::NewSP();
27 34
 }

+ 195
- 14
Modules/FDEM1D/include/FHT.h View File

@@ -10,16 +10,18 @@
10 10
 /**
11 11
  * @file
12 12
  * @date      05/02/2018 09:46:38 PM
13
- * @version   $Id$
14 13
  * @author    Trevor Irons (ti)
15
- * @email     tirons@egi.utah.edu
14
+ * @email     Trevor.Irons@utah.edu
16 15
  * @copyright Copyright (c) 2018, University of Utah
17 16
  * @copyright Copyright (c) 2018, Trevor Irons & Lemma Software, LLC
18 17
  */
19 18
 
19
+#ifndef  FHT_INC
20
+#define  FHT_INC
20 21
 
21 22
 #pragma once
22 23
 #include "HankelTransform.h"
24
+#include "CubicSplineInterpolator.h"
23 25
 
24 26
 namespace Lemma {
25 27
 
@@ -37,9 +39,13 @@ namespace Lemma {
37 39
                @see GQChave
38 40
                @see QWEKey
39 41
      */
42
+    template < HANKELTRANSFORMTYPE Type >
40 43
     class FHT : public HankelTransform {
41 44
 
42
-        friend std::ostream &operator<<(std::ostream &stream, const FHT &ob);
45
+        friend std::ostream &operator<<(std::ostream &stream, const FHT<Type> &ob) {
46
+            stream << ob.Serialize(); // << "\n";
47
+            return stream;
48
+        }
43 49
 
44 50
         public:
45 51
 
@@ -49,7 +55,7 @@ namespace Lemma {
49 55
          * Default protected constructor, use NewSP methods to construct
50 56
          * @see FHT::NewSP
51 57
          */
52
-        FHT (const ctor_key& key ) : HankelTransform( key ) {
58
+        explicit FHT (const ctor_key& key ) : HankelTransform( key ) {
53 59
         }
54 60
 
55 61
         /**
@@ -76,7 +82,13 @@ namespace Lemma {
76 82
          *  @return a YAML::Node
77 83
          *   @see FHT::DeSerialize
78 84
          */
79
-        YAML::Node Serialize() const;
85
+        YAML::Node Serialize() const {
86
+            YAML::Node node = HankelTransform::Serialize();
87
+            node.SetTag( this->GetName() ); // + enum2String(Type) );
88
+            //node.SetTag( enum2String(Type) );
89
+            //node["var"] = 0;
90
+            return node;
91
+        }
80 92
 
81 93
         /**
82 94
          *   Constructs an FHT object from a YAML::Node.
@@ -88,20 +100,54 @@ namespace Lemma {
88 100
 
89 101
         // ====================  OPERATIONS    =======================
90 102
 
91
-        Complex Zgauss(const int&, const Lemma::EMMODE&, const int&, const Real&, const Real&, Lemma::KernelEM1DBase*) {
92
-            return 0;
103
+        Complex Zgauss(const int&, const Lemma::EMMODE&, const int&, const Real&,
104
+            const Real&, Lemma::KernelEM1DBase* Kernel) {
105
+            // TODO, in 101 or 51 we never reach here!!
106
+            std::cout << "Zgauss " << std::endl;
107
+            return this->Zans(0, Kernel->GetManagerIndex());
108
+        }
109
+
110
+        /// Computes related kernels, if applicable, otherwise this is
111
+        /// just a dummy function.
112
+        void ComputeRelated(const Real& rho, std::shared_ptr<KernelEM1DBase> Kernel) {
93 113
         }
94 114
 
115
+        void ComputeRelated(const Real& rho, std::vector< std::shared_ptr<KernelEM1DBase> > KernelVec) {
116
+        }
117
+
118
+        void ComputeRelated(const Real& rho, std::shared_ptr<KernelEM1DManager> KernelManager);
119
+
120
+        void ComputeLaggedRelated(const Real& rho, const int& nlag, std::shared_ptr<KernelEM1DManager> KernelManager);
121
+
95 122
         // ====================  ACCESS        =======================
96 123
 
124
+        /**
125
+         *  @param[in] rho is the argument for lagged convolution evaluation from the
126
+         *             spline after calculation.
127
+         */
128
+        void SetLaggedArg(const Real& rho) {
129
+            for (int i=0; i<Zans.cols(); ++ i) {
130
+                Zans(0, i) = Complex( splineVecReal[i]->Interpolate(rho),
131
+                                      splineVecImag[i]->Interpolate(rho) );
132
+            }
133
+            return ;
134
+        }
135
+
97 136
         // ====================  INQUIRY       =======================
98 137
 
138
+        /**
139
+         *  @return filter asbscissa spacing
140
+         */
141
+        inline Real GetABSER();
142
+        //{
143
+        //    return 0; //this->WT(0,0)/this->WT(1,0);
144
+        //}
145
+
99 146
         /** Returns the name of the underlying class, similiar to Python's type */
100
-        virtual std::string GetName() const {
101
-            return this->CName;
147
+        inline std::string GetName() const {
148
+            return enum2String(Type); //this->CName;
102 149
         }
103 150
 
104
-
105 151
         protected:
106 152
 
107 153
         // ====================  LIFECYCLE     =======================
@@ -110,12 +156,147 @@ namespace Lemma {
110 156
 
111 157
         private:
112 158
 
113
-        static constexpr auto CName = "FHT";
159
+        // Filter Weights, these are specialized for each template type
160
+		static const Eigen::Matrix<Real, Eigen::Dynamic, 3>  WT;
161
+
162
+        /// Spines for lagged convolutions (real part)
163
+        std::vector <std::shared_ptr<CubicSplineInterpolator> > splineVecReal;
164
+
165
+        /// Spines for lagged convolutions (imaginary part)
166
+        std::vector < std::shared_ptr<CubicSplineInterpolator> > splineVecImag;
167
+
168
+        /// Holds answer, dimensions are NumConv, and NumberRelated.
169
+        Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic> Zans;
170
+
171
+        /** ASCII string representation of the class name */
172
+        //static constexpr auto CName = "FHT";
173
+
174
+    }; // -----  end of class  FHT  ----
175
+
176
+    // Specialisations
177
+    // Note that ANDERSON801, CHAVE, QWEKEY will throw errors as they are not consistent
178
+    //      part of this class
179
+    template < HANKELTRANSFORMTYPE Type >
180
+    Real FHT< Type >::GetABSER() {
181
+        return WT(0,0)/WT(1,0);
182
+    }
183
+
184
+    /* specializations could provide slighly better performance */
185
+//     template < >
186
+//     Real FHT< FHTKEY201 >::GetABSER() {
187
+//         return WT(0,0)/WT(1,0);
188
+//     }
189
+//
190
+//     template < >
191
+//     Real FHT< FHTKEY101 >::GetABSER() {
192
+//         return WT(0,0)/WT(1,0);
193
+//     }
194
+//
195
+//     template < >
196
+//     Real FHT< FHTKEY51 >::GetABSER() {
197
+//         return WT(0,0)/WT(1,0);
198
+//     }
199
+
200
+    //--------------------------------------------------------------------------------------
201
+    //       Class:  FHT
202
+    //      Method:  ComputeRelated
203
+    //--------------------------------------------------------------------------------------
204
+    template < HANKELTRANSFORMTYPE Type >
205
+    void FHT<Type>::ComputeRelated ( const Real& rho, std::shared_ptr<KernelEM1DManager> KernelManager ) {
206
+
207
+        int nrel = (int)(KernelManager->GetSTLVector().size());
208
+        Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic > Zwork;
209
+        Zans= Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic>::Zero(1, nrel);
210
+        Zwork.resize(WT.rows(), nrel);
211
+        VectorXr lambda = WT.col(0).array()/rho;
212
+        int NumFun = 0;
213
+        int idx = 0;
214
+
215
+        // Get Kernel values
216
+        for (int ir=0; ir<lambda.size(); ++ir) {
217
+            // irelated loop
218
+            ++NumFun;
219
+            KernelManager->ComputeReflectionCoeffs(lambda(ir), idx, rho);
220
+            for (int ir2=0; ir2<nrel; ++ir2) {
221
+                // Zwork* needed due to sign convention of filter weights
222
+ 			    Zwork(ir, ir2) = std::conj(KernelManager->GetSTLVector()[ir2]->RelBesselArg(lambda(ir)));
223
+            }
224
+        }
225
+
226
+        for (int ir2=0; ir2<nrel; ++ir2) {
227
+            Zans(0, ir2) = Zwork.col(ir2).dot(WT.col(KernelManager->GetSTLVector()[ir2]->GetBesselOrder() + 1))/rho;
228
+        }
229
+        return ;
230
+    }		// -----  end of method FHT::ComputeRelated  -----
231
+
232
+
233
+    //--------------------------------------------------------------------------------------
234
+    //       Class:  FHT
235
+    //      Method:  ComputeLaggedRelated
236
+    //--------------------------------------------------------------------------------------
237
+    template < HANKELTRANSFORMTYPE Type >
238
+    void FHT<Type>::ComputeLaggedRelated ( const Real& rho, const int& nlag, std::shared_ptr<KernelEM1DManager> KernelManager ) {
239
+
240
+        int nrel = (int)(KernelManager->GetSTLVector().size());
241
+
242
+        Eigen::Matrix< Complex, Eigen::Dynamic, Eigen::Dynamic > Zwork;
243
+        Zans= Eigen::Matrix<Complex, Eigen::Dynamic, Eigen::Dynamic>::Zero(nlag, nrel);
244
+        Zwork.resize(WT.rows()+nlag, nrel);  // Zwork needs to be expanded to filter length + nlag
245
+
246
+        // lambda needs to be expanded to include lagged results
247
+        VectorXr lambda = (VectorXr(WT.rows()+nlag) << WT.col(0).array()/rho, VectorXr::Zero(nlag)).finished();
248
+        for (int ilam =WT.rows(); ilam< nlag+WT.rows(); ++ilam) {
249
+            lambda(ilam) = lambda(ilam-1)/GetABSER();
250
+        }
251
+
252
+        int NumFun = 0;
253
+        int idx = 0;
254
+
255
+        VectorXr Arg(nlag);
256
+        Arg(nlag-1) = rho;
257
+        for (int ilag=nlag-2; ilag>=0; --ilag) {
258
+            Arg(ilag) = Arg(ilag+1) * GetABSER();
259
+        }
260
+
261
+        // Get Kernel values
262
+        for (int ir=0; ir<lambda.size(); ++ir) {
263
+            // irelated loop
264
+            ++NumFun;
265
+            KernelManager->ComputeReflectionCoeffs(lambda(ir), idx, rho);
266
+            for (int ir2=0; ir2<nrel; ++ir2) {
267
+ 			    Zwork(ir, ir2) = std::conj(KernelManager->GetSTLVector()[ir2]->RelBesselArg(lambda(ir)));
268
+            }
269
+        }
270
+
271
+        // Inner product and scale
272
+        int ilagr = nlag-1; // Zwork is in opposite order from Arg
273
+        for (int ilag=0; ilag<nlag; ++ilag) {
274
+            for (int ir2=0; ir2<nrel; ++ir2) {
275
+                Zans(ilagr, ir2) = Zwork.col(ir2).segment(ilag,WT.rows()).dot( WT.col(KernelManager->GetSTLVector()[ir2]->GetBesselOrder()+1) ) / Arg(ilagr);
276
+            }
277
+            ilagr -= 1;
278
+        }
279
+
280
+        // make sure vectors are empty
281
+        splineVecReal.clear();
282
+        splineVecImag.clear();
283
+
284
+        // Now do cubic spline
285
+        for (int ii=0; ii<Zans.cols(); ++ii) {
286
+            auto SplineR = CubicSplineInterpolator::NewSP();
287
+            SplineR->SetKnots( Arg, Zans.col(ii).real() );
288
+            splineVecReal.push_back(SplineR);
289
+
290
+            auto SplineI = CubicSplineInterpolator::NewSP();
291
+            SplineI->SetKnots( Arg, Zans.col(ii).imag() );
292
+            splineVecImag.push_back(SplineI);
293
+        }
294
+        return ;
295
+    }		// -----  end of method FHT::ComputeLaggedRelated  -----
114 296
 
115
-    }; // -----  end of class  FHT  -----
116 297
 }  // -----  end of namespace Lemma ----
117 298
 
299
+#endif   // ----- #ifndef FHT_INC  -----
300
+
118 301
 /* vim: set tabstop=4 expandtab: */
119 302
 /* vim: set filetype=cpp: */
120
-
121
-

+ 1
- 1
Modules/FDEM1D/include/HankelTransform.h View File

@@ -91,7 +91,7 @@ namespace Lemma {
91 91
                 HankelTransform ( const YAML::Node& node, const ctor_key& );
92 92
 
93 93
                 /// Default protected constructor.
94
-                ~HankelTransform ( );
94
+                virtual ~HankelTransform ( );
95 95
 
96 96
             private:
97 97
 

+ 4
- 1
Modules/FDEM1D/include/HankelTransformFactory.h View File

@@ -22,6 +22,8 @@
22 22
 #include "LemmaObject.h"
23 23
 
24 24
 #include "FHTAnderson801.h"
25
+#include "FHT.h"
26
+
25 27
 #include "FHTKey201.h"
26 28
 #include "FHTKey101.h"
27 29
 #include "FHTKey51.h"
@@ -96,7 +98,8 @@ namespace Lemma {
96 98
                 case ANDERSON801:
97 99
                     return FHTAnderson801::NewSP();
98 100
                 case FHTKEY201:
99
-                    return FHTKey201::NewSP();
101
+                    //return FHTKey201::NewSP();
102
+                    return FHT<FHTKEY201>::NewSP();
100 103
                 case FHTKEY101:
101 104
                     return FHTKey101::NewSP();
102 105
                 case FHTKEY51:

+ 4
- 0
Modules/FDEM1D/src/CMakeLists.txt View File

@@ -30,6 +30,10 @@ set (FDEM1DSOURCE
30 30
 	${CMAKE_CURRENT_SOURCE_DIR}/FHTKey201.cpp
31 31
 	${CMAKE_CURRENT_SOURCE_DIR}/FHTKey101.cpp
32 32
 	${CMAKE_CURRENT_SOURCE_DIR}/FHTKey51.cpp
33
+
34
+	# Templated FHT
35
+	${CMAKE_CURRENT_SOURCE_DIR}/FHT.cpp
36
+
33 37
 	# Gaussian Quadrature
34 38
 	${CMAKE_CURRENT_SOURCE_DIR}/GQChave.cpp
35 39
 	${CMAKE_CURRENT_SOURCE_DIR}/QWEKey.cpp

+ 7
- 7
Modules/FDEM1D/src/DipoleSource.cpp View File

@@ -749,7 +749,6 @@ namespace Lemma {
749 749
     }
750 750
 
751 751
     void DipoleSource::UpdateFields( const int& ifreq, HankelTransform* Hankel, const Real& wavef) {
752
-
753 752
         Vector3r Pol = Phat;
754 753
 
755 754
         switch (Type) {
@@ -875,8 +874,6 @@ namespace Lemma {
875 874
 
876 875
             case UNGROUNDEDELECTRICDIPOLE:
877 876
 
878
-                //Hankel->ComputeRelated(rho, KernelManager);
879
-
880 877
                 if (std::abs(Pol[2]) > 0) { // z dipole
881 878
                     switch(FieldsToCalculate) {
882 879
                         case E:
@@ -912,7 +909,8 @@ namespace Lemma {
912 909
                                      0. );
913 910
                     } // Fields to calculate Z polarity Electric dipole
914 911
                 }
915
-                if (std::abs(Pol[1]) > 0 || std::abs(Pol[0]) > 0) { // y dipole
912
+                if (std::abs(Pol[1]) > 0 || std::abs(Pol[0]) > 0) { // x or y dipole
913
+
916 914
                     switch(FieldsToCalculate) {
917 915
                         case E:
918 916
                             f(0) = 0;
@@ -934,11 +932,15 @@ namespace Lemma {
934 932
                             }
935 933
                             break;
936 934
                         case H:
935
+                            //std::cout << "Fuck me gently with a chainsaw..." << std::endl;
936
+                            //std::cout << f.cols() << "\t" << f.rows() << std::endl;
937
+                            //std::cout << "kern" <<  KernelManager->GetRAWKernel(ik[5]);
937 938
                             f(5) = Hankel->Zgauss(5, TM, 0, rho, wavef, KernelManager->GetRAWKernel(ik[5]));
938 939
                             f(6) = Hankel->Zgauss(6, TM, 1, rho, wavef, KernelManager->GetRAWKernel(ik[6]));
939 940
                             f(7) = Hankel->Zgauss(7, TE, 0, rho, wavef, KernelManager->GetRAWKernel(ik[7]))*KernelManager->GetRAWKernel(ik[7])->GetZs()/KernelManager->GetRAWKernel(ik[7])->GetZm();
940 941
                             f(8) = Hankel->Zgauss(8, TE, 1, rho, wavef, KernelManager->GetRAWKernel(ik[8]))*KernelManager->GetRAWKernel(ik[8])->GetZs()/KernelManager->GetRAWKernel(ik[8])->GetZm();
941 942
                             f(9) = Hankel->Zgauss(9, TE, 1, rho, wavef, KernelManager->GetRAWKernel(ik[9]))*KernelManager->GetRAWKernel(ik[9])->GetZs()/KernelManager->GetRAWKernel(ik[9])->GetZm();
943
+                            //std::cout << "HARDER!!!!" << std::endl;
942 944
                             if (std::abs(Pol[1]) > 0) {
943 945
                                 this->Receivers->AppendHfield(ifreq, irec,
944 946
                                         Pol[1]*QPI*(sps*f(5)+c2p*f(6)/rho-cps*f(7)+c2p*f(8)/rho)*Moment,
@@ -953,6 +955,7 @@ namespace Lemma {
953 955
                                     Pol[0]*Moment*QPI*sp*f(9) );
954 956
                                 // Analytic whole space solution
955 957
                             }
958
+                            //std::cout << "ahhhhhh!!!!!!!!!" << std::endl;
956 959
                             break;
957 960
 
958 961
                         case BOTH:
@@ -996,10 +999,8 @@ namespace Lemma {
996 999
 
997 1000
                 break; // UNGROUNDEDELECTRICDIPOLE
998 1001
 
999
-
1000 1002
             case MAGNETICDIPOLE:
1001 1003
 
1002
-
1003 1004
                 //Hankel->ComputeRelated(rho, KernelManager);
1004 1005
                 if (std::abs(Pol[2]) > 0) { // z dipole
1005 1006
                     switch(FieldsToCalculate) {
@@ -1125,7 +1126,6 @@ namespace Lemma {
1125 1126
                 throw NonValidDipoleType(this);
1126 1127
 
1127 1128
         } // Source Type Switch
1128
-
1129 1129
     }
1130 1130
 
1131 1131
     // ====================  INQUIRY       ======================

+ 2
- 1
Modules/FDEM1D/src/EMEarth1D.cpp View File

@@ -231,7 +231,8 @@ namespace Lemma {
231 231
         if (Antenna->GetName() == std::string("PolygonalWireAntenna") || Antenna->GetName() == std::string("TEMTransmitter") ) {
232 232
             icalc += 1;
233 233
             // Check to see if they are all on a plane? If so we can do this fast
234
-            if (Antenna->IsHorizontallyPlanar() && ( HankelType == ANDERSON801 || HankelType== FHTKEY201  )) {
234
+            if (Antenna->IsHorizontallyPlanar() && ( HankelType == ANDERSON801 || HankelType== FHTKEY201 || HankelType==FHTKEY101 ||
235
+                                                     HankelType == FHTKEY51 )) {
235 236
                 #ifdef HAVE_BOOST_PROGRESS
236 237
                 if (progressbar) {
237 238
                     disp = new boost::progress_display( Receivers->GetNumberOfPoints()*Antenna->GetNumberOfFrequencies() );

+ 371
- 0
Modules/FDEM1D/src/FHT.cpp View File

@@ -17,5 +17,376 @@
17 17
  * @copyright Copyright (c) 2018, Trevor Irons & Lemma Software, LLC
18 18
  */
19 19
 
20
+#include "FHT.h"
20 21
 
22
+namespace Lemma {
21 23
 
24
+    template<>
25
+    const Eigen::Matrix<Real, Eigen::Dynamic, 3>  FHT<FHTKEY201>::WT =
26
+        ( Eigen::Matrix<Real, 201, 3>()   <<
27
+        // Base                   J0                      J1
28
+          4.1185887075357082e-06, 1.5020099209519960e-03, 4.7827871332506182e-10
29
+        , 4.6623077830484039e-06,-1.0381698214761684e-02,-2.9784175503440788e-09
30
+        , 5.2778064058937756e-06, 3.6840860097595164e-02, 9.7723832770897220e-09
31
+        , 5.9745606155328603e-06,-8.9903380392274704e-02,-2.2382340996085809e-08
32
+        , 6.7632974390298035e-06, 1.7082286536833860e-01, 4.0446774329470848e-08
33
+        , 7.6561600412698171e-06,-2.7115749656836280e-01,-6.1734815854553919e-08
34
+        , 8.6668946776271221e-06, 3.7649328091859574e-01, 8.3293912185608189e-08
35
+        , 9.8110623273521872e-06,-4.7220778569122657e-01,-1.0249453502284080e-07
36
+        , 1.1106278265924788e-05, 5.4778211089647089e-01, 1.1780779749909977e-07
37
+        , 1.2572483264760042e-05,-5.9823516853035097e-01,-1.2870061460834850e-07
38
+        , 1.4232250593579901e-05, 6.2345791612185331e-01, 1.3559243438349901e-07
39
+        , 1.6111133551969887e-05,-6.2650436648257724e-01,-1.3921010821521872e-07
40
+        , 1.8238058880617237e-05, 6.1197225351173345e-01, 1.4065745722769670e-07
41
+        , 2.0645772109076137e-05,-5.8470173866140451e-01,-1.4074881908375281e-07
42
+        , 2.3371341696506312e-05, 5.4911055789616858e-01, 1.4051720878600928e-07
43
+        , 2.6456729726989950e-05,-5.0878861684860843e-01,-1.4040746687777830e-07
44
+        , 2.9949437945688260e-05, 4.6652106345430200e-01, 1.4127886061686993e-07
45
+        , 3.3903239082024059e-05,-4.2426478870289325e-01,-1.4315595655055356e-07
46
+        , 3.8379004719130766e-05, 3.8339538911933357e-01, 1.4689283208027915e-07
47
+        , 4.3445642455208216e-05,-3.4472344791723936e-01,-1.5210916706348747e-07
48
+        , 4.9181156785051293e-05, 3.0876891466890510e-01, 1.5989801550138741e-07
49
+        , 5.5673850034776868e-05,-2.7570439368364807e-01,-1.6940918407911260e-07
50
+        , 6.3023681838995322e-05, 2.4562331000974616e-01, 1.8227089415749844e-07
51
+        , 7.1343808090545215e-05,-2.1839207265400126e-01,-1.9695856878603369e-07
52
+        , 8.0762323056016586e-05, 1.9393194321380827e-01, 2.1603952427106760e-07
53
+        , 9.1424231478173270e-05,-1.7198162962644575e-01,-2.3691320619292838e-07
54
+        , 1.0349368102719458e-04, 1.5242270280410272e-01, 2.6369843208466607e-07
55
+        , 1.1715648947091054e-04,-1.3494945901825492e-01,-2.9202021404039016e-07
56
+        , 1.3262300547161834e-04, 1.1946763189654602e-01, 3.2852445086324662e-07
57
+        , 1.5013134705348249e-04,-1.0565870880444576e-01,-3.6589094553627693e-07
58
+        , 1.6995106759902750e-04, 9.3482355548033913e-02, 4.1487501036863030e-07
59
+        , 1.9238730581535294e-04,-8.2612525279836244e-02,-4.6327136995173986e-07
60
+        , 2.1778548356175115e-04, 7.3077763526174969e-02, 5.2852697369750518e-07
61
+        , 2.4653662386513240e-04,-6.4536481281701225e-02,-5.9034983719954077e-07
62
+        , 2.7908337099788406e-04, 5.7096310621587334e-02, 6.7710211611560898e-07
63
+        , 3.1592680530155527e-04,-5.0384859605213800e-02,-7.5512942807901028e-07
64
+        , 3.5763415767542709e-04, 4.4599557396733047e-02, 8.7062473466409799e-07
65
+        , 4.0484754250000483e-04,-3.9316995063444334e-02,-9.6788530918130449e-07
66
+        , 4.5829384344501882e-04, 3.4838544754296139e-02, 1.1222658353725904e-06
67
+        , 5.1879590436097246e-04,-3.0664946477420088e-02,-1.2417228058919743e-06
68
+        , 5.8728519754599128e-04, 2.7221072240291456e-02, 1.4493467036899140e-06
69
+        , 6.6481616442494776e-04,-2.3901586108434601e-02,-1.5932456559208080e-06
70
+        , 7.5258244942583781e-04, 2.1281566646364738e-02, 1.8747045814274419e-06
71
+        , 8.5193527698548301e-04,-1.8612484595521447e-02,-2.0433320340041385e-06
72
+        , 9.6440425461164468e-04, 1.6655386303461400e-02, 2.4285695351967146e-06
73
+        , 1.0917209222795108e-03,-1.4472420076504743e-02,-2.6179926456520528e-06
74
+        , 1.2358454107222641e-03, 1.3057747649606617e-02, 3.1511729661391781e-06
75
+        , 1.3989966190390965e-03,-1.1226286001060300e-02,-3.3492412032881268e-06
76
+        , 1.5836863762264436e-03, 1.0266818557930830e-02, 4.0964186613549959e-06
77
+        , 1.7927581125735061e-03,-8.6738022421653585e-03,-4.2758275751239154e-06
78
+        , 2.0294306362957340e-03, 8.1103368670848164e-03, 5.3371197552207799e-06
79
+        , 2.2973476893787268e-03,-6.6573628142085938e-03,-5.4435423773626499e-06
80
+        , 2.6006340455800008e-03, 6.4551189810889585e-03, 6.9725766921672099e-06
81
+        , 2.9439590142573526e-03,-5.0524015117839084e-03,-6.9045562968161745e-06
82
+        , 3.3326083277104117e-03, 5.1989014270506263e-03, 9.1397025436977438e-06
83
+        , 3.7725655187922052e-03,-3.7597430078747883e-03,-8.7148373033635960e-06
84
+        , 4.2706040416570154e-03, 4.2640545165292636e-03, 1.2029590806160379e-05
85
+        , 4.8343915539089625e-03,-2.6994965688974474e-03,-1.0927976968519436e-05
86
+        , 5.4726079656493079e-03, 3.5928000560587229e-03, 1.5912526719455299e-05
87
+        , 6.1950790728715292e-03,-1.8061291289989019e-03,-1.3582559661331659e-05
88
+        , 7.0129278325854246e-03, 3.1436470898586703e-03, 2.1176226828087565e-05
89
+        , 7.9387456086585442e-03,-1.0244200001620755e-03,-1.6678205993448338e-05
90
+        , 8.9867860248264830e-03, 2.8888297674091743e-03, 2.8384979250408712e-05
91
+        , 1.0173184409377162e-02,-3.0605070741955765e-04,-2.0132088397797457e-05
92
+        , 1.1516206210016314e-02, 2.8125907445050334e-03, 3.8372045311188108e-05
93
+        , 1.3036528203437736e-02, 3.9337862066047565e-04,-2.3702184335455945e-05
94
+        , 1.4757556829019875e-02, 2.9102041487017727e-03, 5.2385308850007940e-05
95
+        , 1.6705788547622769e-02, 1.1170884769911178e-03,-2.6854373943701261e-05
96
+        , 1.8911217773465227e-02, 3.1876763415953362e-03, 7.2318581557902158e-05
97
+        , 2.1407798659484324e-02, 1.9097806429850762e-03,-2.8535361884516687e-05
98
+        , 2.4233967845691123e-02, 3.6621020321465411e-03, 1.0108123118106823e-04
99
+        , 2.7433236218606032e-02, 2.8203783587849949e-03,-2.6788477540644352e-05
100
+        , 3.1054858792331431e-02, 4.3626885599390430e-03, 1.4319185407094621e-04
101
+        , 3.5154593024557458e-02, 3.9050024915686802e-03,-1.8108424211338017e-05
102
+        , 3.9795557242315927e-02, 5.3324923486866077e-03, 2.0573561552327273e-04
103
+        , 4.5049202393557801e-02, 5.2303399394270488e-03, 3.6361648565843316e-06
104
+        , 5.0996412085361466e-02, 6.6309348458396984e-03, 2.9991264692859609e-04
105
+        , 5.7728747844643331e-02, 6.8775540687037451e-03, 4.8993332079278846e-05
106
+        , 6.5349858773045680e-02, 8.3371689988226087e-03, 4.4354733854670903e-04
107
+        , 7.3977077298642363e-02, 8.9468564745410102e-03, 1.3589101811995494e-04
108
+        , 8.3743225592195963e-02, 1.0554326601376745e-02, 6.6515823521273764e-04
109
+        , 9.4798660459030126e-02, 1.1562765604509096e-02, 2.9451991608624389e-04
110
+        , 1.0731358818908403e-01, 1.3414536265660639e-02, 1.0105553806271136e-03
111
+        , 1.2148068500391276e-01, 1.4879837399735491e-02, 5.7533964792254050e-04
112
+        , 1.3751806344428075e-01, 1.7084241336519569e-02, 1.5535077418254303e-03
113
+        , 1.5567263036799733e-01, 1.9088092654441269e-02, 1.0621193133794828e-03
114
+        , 1.7622388825676111e-01, 2.1768513715084332e-02, 2.4128970258747457e-03
115
+        , 1.9948823835583873e-01, 2.4416120601223806e-02, 1.8929698186109245e-03
116
+        , 2.2582385189647586e-01, 2.7711234465350204e-02, 3.7800177772191607e-03
117
+        , 2.5563618439697788e-01, 3.1127164234404547e-02, 3.2937343278959356e-03
118
+        , 2.8938421793905067e-01, 3.5184140220277452e-02, 5.9612179800391544e-03
119
+        , 3.2758752752368947e-01, 3.9497913113638941e-02, 5.6295935320552241e-03
120
+        , 3.7083428029819565e-01, 4.4449762157204989e-02, 9.4422526803168080e-03
121
+        , 4.1979029080811425e-01, 4.9758433269983887e-02, 9.4810228247137925e-03
122
+        , 4.7520927168614446e-01, 5.5667457114992429e-02, 1.4979159139973408e-02
123
+        , 5.3794443759467447e-01, 6.1949790434151823e-02, 1.5745093424331037e-02
124
+        , 6.0896164107289685e-01, 6.8682064905571841e-02, 2.3708966370000140e-02
125
+        , 6.8935424252422239e-01, 7.5616743950118387e-02, 2.5740590762136872e-02
126
+        , 7.8035994327803426e-01, 8.2584983563572259e-02, 3.7232782843117498e-02
127
+        , 8.8337984088275090e-01, 8.9193635262987042e-02, 4.1225008900614292e-02
128
+        , 1.0000000000000000e+00, 9.4874686942005279e-02, 5.7507103212277359e-02
129
+        , 1.1320158709991752e+00, 9.8891681869094042e-02, 6.4044642846235691e-02
130
+        , 1.2814599321940212e+00, 1.0004294654495730e-01, 8.6091796551857253e-02
131
+        , 1.4506329812931589e+00, 9.7016844329802857e-02, 9.4717139804457451e-02
132
+        , 1.6421395578187052e+00, 8.7789596149914384e-02, 1.2172497389177185e-01
133
+        , 1.8589280418463421e+00, 7.0509767592855419e-02, 1.2853597000398900e-01
134
+        , 2.1043360464154781e+00, 4.2778853484849347e-02, 1.5450777327408322e-01
135
+        , 2.3821418024579781e+00, 3.5584532926218175e-03, 1.4755964090969320e-01
136
+        , 2.6966223273530128e+00,-4.7210453264879347e-02, 1.5621399202016978e-01
137
+        , 3.0526192726543444e+00,-1.0489787743225988e-01, 1.1147620703185755e-01
138
+        , 3.4556134647626755e+00,-1.6020950407348281e-01, 7.7489831356083380e-02
139
+        , 3.9118092861497971e+00,-1.9459781573132096e-01,-2.7628266850147711e-02
140
+        , 4.4282301962435247e+00,-1.8490774599542381e-01,-1.0198730178317840e-01
141
+        , 5.0128268625854631e+00,-1.0754165020025190e-01,-2.2039889971111640e-01
142
+        , 5.6745995670177445e+00, 3.6037727487476613e-02,-2.1185762869925318e-01
143
+        , 6.4237367714291338e+00, 1.9759013047489976e-01,-1.6052415083152241e-01
144
+        , 7.2717719763787807e+00, 2.6132313321851336e-01, 9.1649025798681089e-02
145
+        , 8.2317612875478190e+00, 1.1713996822458939e-01, 2.3792823877700942e-01
146
+        , 9.3184844237807365e+00,-1.8758779281301441e-01, 2.6075777853738125e-01
147
+        , 1.0548672261378394e+01,-3.0238114997462151e-01,-1.5662188259001042e-01
148
+        , 1.1941264417849103e+01, 4.8163135684567732e-02,-2.8932081756330175e-01
149
+        , 1.3517700840802913e+01, 3.6399529664885466e-01, 1.3148519116247689e-02
150
+        , 1.5302251891207787e+01,-1.4910233461562913e-01, 4.2691302759079564e-01
151
+        , 1.7322392002874359e+01,-2.6373490348543854e-01,-4.0005050006489040e-01
152
+        , 1.9609222670922968e+01, 4.0362661807718703e-01, 1.1513789407450359e-01
153
+        , 2.2197951281441636e+01,-3.1409794650104578e-01, 9.3748244358717620e-02
154
+        , 2.5128433154258410e+01, 1.8179369405131079e-01,-1.6037231301955096e-01
155
+        , 2.8445785143962375e+01,-9.0738718042631769e-02, 1.5071857939129532e-01
156
+        , 3.2201080245997971e+01, 4.2946487545160242e-02,-1.2120369075996129e-01
157
+        , 3.6452133901787732e+01,-2.0586135807067835e-02, 9.4110656079982341e-02
158
+        , 4.1264394108610787e+01, 1.0392667161913182e-02,-7.3742238434584328e-02
159
+        , 4.6711949038112273e+01,-5.6117848068723023e-03, 5.9038567576124905e-02
160
+        , 5.2878667676447755e+01, 3.2402025511569896e-03,-4.8288117528475852e-02
161
+        , 5.9859491047029913e+01,-1.9858724388273777e-03, 4.0197054299576880e-02
162
+        , 6.7761893895170928e+01, 1.2807317326135252e-03,-3.3919787720641081e-02
163
+        , 7.6707539338295589e+01,-8.6253791756068252e-04, 2.8918247156763971e-02
164
+        , 8.6834151956244213e+01, 6.0296590782143555e-04,-2.4845271759013743e-02
165
+        , 9.8297638159222487e+01,-4.3548936996943465e-04, 2.1470449751150148e-02
166
+        , 1.1127448647797397e+02, 3.2375891570874245e-04,-1.8635828020057092e-02
167
+        , 1.2596448473034971e+02,-2.4698212240059978e-04, 1.6229579362363859e-02
168
+        , 1.4259379589698909e+02, 1.9279062274925971e-04,-1.4170085406786529e-02
169
+        , 1.6141844006140866e+02,-1.5357911509105972e-04, 1.2396084121011890e-02
170
+        , 1.8272823602144376e+02, 1.2453787849367440e-04,-1.0860414401084047e-02
171
+        , 2.0685126325595743e+02,-1.0255126402954421e-04, 9.5259444245356633e-03
172
+        , 2.3415891294197226e+02, 8.5558482209476271e-05,-8.3628577447233381e-03
173
+        , 2.6507160578622688e+02,-7.2170928476334345e-05, 7.3468029551253195e-03
174
+        , 3.0006526470124555e+02, 6.1436863283080017e-05,-6.4576043210966359e-03
175
+        , 3.3967864197737873e+02,-5.2693349406473615e-05, 5.6783439955994880e-03
176
+        , 3.8452161375783919e+02, 4.5471255142623729e-05,-4.9946949167265437e-03
177
+        , 4.3528456951608860e+02,-3.9433284158653591e-05, 4.3944258108608806e-03
178
+        , 4.9274904109325632e+02, 3.4332971164795619e-05,-3.8670264019660858e-03
179
+        , 5.5779973493719069e+02,-2.9987212220165472e-05, 3.4034180355556670e-03
180
+        , 6.3143815278803334e+02, 2.6257657435614391e-05,-2.9957260668529964e-03
181
+        , 7.1479801051045558e+02,-2.3037978256349448e-05, 2.6370977166248776e-03
182
+        , 8.0916269245647072e+02, 2.0245071331016652e-05,-2.3215540117372982e-03
183
+        , 9.1598501008114988e+02,-1.7812925644382519e-05, 2.0438677474690805e-03
184
+        , 1.0369095690092008e+03, 1.5688305607849465e-05,-1.7994616759226389e-03
185
+        , 1.1737980889093292e+03,-1.3827679492110470e-05, 1.5843226896713463e-03
186
+        , 1.3287580659938624e+03, 1.2195005442258958e-05,-1.3949288614414647e-03
187
+        , 1.5041752194232211e+03,-1.0760110818279243e-05, 1.2281869708886250e-03
188
+        , 1.7027502211507524e+03, 9.4974857670959145e-06,-1.0813786997088304e-03
189
+        , 1.9275402746900081e+03,-8.3853711343938338e-06, 9.5211407460757294e-04
190
+        , 2.1820061829391980e+03, 7.4050612540713192e-06,-8.3829103020448140e-04
191
+        , 2.4700656297055034e+03,-6.5403682860228500e-06, 7.3806018220987763e-04
192
+        , 2.7961534952362003e+03, 5.7772102413267325e-06,-6.4979406671247244e-04
193
+        , 3.1652901343571971e+03,-5.1032933218796731e-06, 5.7206022901230412e-04
194
+        , 3.5831586684094545e+03, 4.5078641320869195e-06,-5.0359764543483573e-04
195
+        , 4.0561924809477755e+03,-3.9815111951817114e-06, 4.4329604122300101e-04
196
+        , 4.5916742642604040e+03, 3.5159993210292339e-06,-3.9017773206623073e-04
197
+        , 5.1978481416012310e+03,-3.1041249680128287e-06, 3.4338166974098888e-04
198
+        , 5.8840465913361650e+03, 2.7395854235553632e-06,-3.0214941633163506e-04
199
+        , 6.6608341270911405e+03,-2.4168587823583312e-06, 2.6581280850704716e-04
200
+        , 7.5401699459601114e+03, 2.1310948134441218e-06,-2.3378310479588391e-04
201
+        , 8.5355920488578286e+03,-1.8780185742021288e-06, 2.0554143583887405e-04
202
+        , 9.6624256676814348e+03, 1.6538488252707735e-06,-1.8063040107732216e-04
203
+        , 1.0938019208165191e+04,-1.4552318768651144e-06, 1.5864667598176302e-04
204
+        , 1.2382011340936813e+04, 1.2791890865306748e-06,-1.3923451235168759e-04
205
+        , 1.4016633352832258e+04,-1.1230741959148155e-06, 1.2208003098625932e-04
206
+        , 1.5867051413382505e+04, 9.8453630538596172e-07,-1.0690622166177854e-04
207
+        , 1.7961754025908867e+04,-8.6148574493190796e-07, 9.3468580362568137e-05
208
+        , 2.0332990628312182e+04, 7.5206242699701732e-07,-8.1551328581234316e-05
209
+        , 2.3017268096126892e+04,-6.5460810334682633e-07, 7.0964174631531072e-05
210
+        , 2.6055912791858576e+04, 5.6764451596029765e-07,-6.1539592468666665e-05
211
+        , 2.9495706813754354e+04,-4.8985884555184997e-07, 5.3130609116145443e-05
212
+        , 3.3389608239508460e+04, 4.2009674106879252e-07,-4.5609105983126460e-05
213
+        , 3.7797566453568354e+04,-3.5736212641225517e-07, 3.8864648584181207e-05
214
+        , 4.2787445110585410e+04, 3.0082215969939671e-07,-3.2803856352344075e-05
215
+        , 4.8436066944688770e+04,-2.4981510481639669e-07, 2.7350296775876261e-05
216
+        , 5.4830396510166145e+04, 2.0385823466866512e-07,-2.2444816150805301e-05
217
+        , 6.2068879062685897e+04,-1.6265189071584773e-07, 1.8046076281584239e-05
218
+        , 7.0262956194088882e+04, 1.2607416700611311e-07,-1.4130826937491561e-05
219
+        , 7.9538781555028458e+04,-9.4158417913450858e-08, 1.0693106849359383e-05
220
+        , 9.0039163080228551e+04, 6.7043911217063425e-08,-7.7412053314530284e-06
221
+        , 1.0192576161830177e+05,-4.4891090827293947e-08, 5.2910576443698300e-06
222
+        , 1.1538157981559623e+05, 2.7761325666544702e-08,-3.3552268362550323e-06
223
+        , 1.3061377957221285e+05,-1.5480404355710375e-08, 1.9282956206367452e-06
224
+        , 1.4785687144693290e+05, 7.5327300141098751e-09,-9.7253712572058755e-07
225
+        , 1.6737632511421290e+05,-3.0524770418657847e-09, 4.1100807632959352e-07
226
+        , 1.8947265645880660e+05, 9.5877856096830783e-10,-1.3553176263207053e-07
227
+        , 2.1448605423174356e+05,-2.0575286298055636e-10, 3.0748587523233524e-08
228
+        , 2.4280161749832361e+05, 2.2414416956474645e-11,-3.5668195345476294e-09 ).finished();
229
+
230
+    template<>
231
+    const Eigen::Matrix<Real, Eigen::Dynamic, 3>  FHT<FHTKEY101>::WT =
232
+        ( Eigen::Matrix<Real, 101, 3>()   <<
233
+       // Base                   J0                        J1
234
+       5.5308437014783363e-04,   5.1818808036862153e-02,   4.1746363961646286e-06,
235
+       6.4259236035555788e-04,  -2.9258492652779172e-01,  -2.5993370843637242e-05,
236
+       7.4658580837667996e-04,   8.7289913080159265e-01,   9.2506838353721647e-05,
237
+       8.6740895730700251e-04,  -1.8525183961240297e+00,  -2.4318740269846489e-04,
238
+       1.0077854290485113e-03,   3.2096055660873608e+00,   5.2276050788732404e-04,
239
+       1.1708796207911744e-03,  -4.9248158048315069e+00,  -9.5803859755432658e-04,
240
+       1.3603680375478939e-03,   7.0219167445719828e+00,   1.5308357107396591e-03,
241
+       1.5805221687362171e-03,  -9.4781099645811544e+00,  -2.1584605764249656e-03,
242
+       1.8363047770289071e-03,   1.2098564895534539e+01,   2.7161344302423967e-03,
243
+       2.1334817700377098e-03,  -1.4476661837664896e+01,  -3.0845361397036195e-03,
244
+       2.4787521766663585e-03,   1.6146079632847474e+01,   3.2133980102756368e-03,
245
+       2.8798991580882430e-03,  -1.6810370923047440e+01,  -3.1305779240645847e-03,
246
+       3.3459654574712720e-03,   1.6506202923977266e+01,   2.9239120736637542e-03,
247
+       3.8874572434761303e-03,  -1.5534747212675301e+01,  -2.6680602560576316e-03,
248
+       4.5165809426126703e-03,   1.4267433361428399e+01,   2.4131379039476304e-03,
249
+       5.2475183991813838e-03,  -1.2939053370802849e+01,  -2.1549566068119440e-03,
250
+       6.0967465655156379e-03,   1.1628520257389562e+01,   1.9058200916563901e-03,
251
+       7.0834089290521185e-03,  -1.0325503688577493e+01,  -1.6533122444456158e-03,
252
+       8.2297470490200302e-03,   9.0574401975545840e+00,   1.4391633836110848e-03,
253
+       9.5616019305435132e-03,  -7.8759096646654951e+00,  -1.2363666069459527e-03,
254
+       1.1108996538242306e-02,   6.8446506699312666e+00,   1.0907227256323094e-03,
255
+       1.2906812580479873e-02,  -5.9542991234257840e+00,  -9.2712769282234358e-04,
256
+       1.4995576820477703e-02,   5.1830565431894602e+00,   8.2888526218099687e-04,
257
+       1.7422374639493515e-02,  -4.4805481279340267e+00,  -6.7675613963809832e-04,
258
+       2.0241911445804391e-02,   3.8608298760715378e+00,   6.3558641899842260e-04,
259
+       2.3517745856009110e-02,  -3.3125736597743227e+00,  -4.8591507683128695e-04,
260
+       2.7323722447292573e-02,   2.8648088091590589e+00,   5.1892328126100203e-04,
261
+       3.1745636378067953e-02,  -2.4710577422247479e+00,  -3.3190335155472070e-04,
262
+       3.6883167401240015e-02,   2.1450315408533416e+00,   4.6189809360776176e-04,
263
+       4.2852126867040180e-02,  -1.8334353019592327e+00,  -1.8326476919948130e-04,
264
+       4.9787068367863944e-02,   1.5850020809005190e+00,   4.7669939315323097e-04,
265
+       5.7844320874838456e-02,  -1.3468969891769780e+00,  -1.7380345519175726e-05,
266
+       6.7205512739749784e-02,   1.1802299801807625e+00,   5.9009214750893949e-04,
267
+       7.8081666001153169e-02,  -9.9988174688478793e-01,   2.1645139320505843e-04,
268
+       9.0717953289412512e-02,   8.8503813256539254e-01,   8.5203135609860704e-04,
269
+       1.0539922456186433e-01,  -7.3165077099639619e-01,   5.9560990889710838e-04,
270
+       1.2245642825298191e-01,   6.5909386165012596e-01,   1.3651107378683781e-03,
271
+       1.4227407158651359e-01,  -5.3038429622108840e-01,   1.2606987195022564e-03,
272
+       1.6529888822158656e-01,   5.0119791866928076e-01,   2.3131990435032663e-03,
273
+       1.9204990862075413e-01,  -3.8269840749371159e-01,   2.4572002938857678e-03,
274
+       2.2313016014842982e-01,   3.8622329595139565e-01,   4.0408430887840449e-03,
275
+       2.5924026064589156e-01,  -2.6413330193320073e-01,   4.6278078809669602e-03,
276
+       3.0119421191220208e-01,   3.0353632730294311e-01,   7.1437051276295131e-03,
277
+       3.4993774911115533e-01,  -1.7255655176111537e-01,   8.5723466849983495e-03,
278
+       4.0656965974059917e-01,   2.5119774955173280e-01,   1.2684763573137947e-02,
279
+       4.7236655274101469e-01,  -9.8536724013140092e-02,   1.5643387012124067e-02,
280
+       5.4881163609402650e-01,   2.1755876398162183e-01,   2.2480928663078600e-02,
281
+       6.3762815162177333e-01,  -3.4268716744688760e-02,   2.8124131719595692e-02,
282
+       7.4081822068171788e-01,   1.9925218957836366e-01,   3.9373999883133115e-02,
283
+       8.6070797642505781e-01,   1.8319735495994052e-02,   4.9445586323210833e-02,
284
+       1.0000000000000000e+00,   1.8963099219918259e-01,   6.7326587032714463e-02,
285
+       1.1618342427282831e+00,   5.7228135568732394e-02,   8.3541701874077570e-02,
286
+       1.3498588075760032e+00,   1.7266316834158107e-01,   1.0961776964853986e-01,
287
+       1.5683121854901687e+00,   6.8141322181604499e-02,   1.3118216481048459e-01,
288
+       1.8221188003905089e+00,   1.2468074033081850e-01,   1.6144181878027153e-01,
289
+       2.1170000166126748e+00,   2.1678852838804014e-02,   1.7704476632134886e-01,
290
+       2.4596031111569494e+00,   1.1114005126278175e-02,   1.9032654055463888e-01,
291
+       2.8576511180631639e+00,  -1.0424806190544497e-01,   1.6333927603825021e-01,
292
+       3.3201169227365472e+00,  -1.6473681128667569e-01,   1.1034442879456068e-01,
293
+       3.8574255306969740e+00,  -2.3603153458714107e-01,  -1.1282682226217962e-02,
294
+       4.4816890703380645e+00,  -2.2093965064386309e-01,  -1.4579378661401318e-01,
295
+       5.2069798271798486e+00,  -7.5633542915308175e-02,  -2.7560051939484942e-01,
296
+       6.0496474644129448e+00,   1.3358180223826097e-01,  -2.3333751023296440e-01,
297
+       7.0286875805892928e+00,   3.3949946683489907e-01,  -5.9615109981928909e-03,
298
+       8.1661699125676499e+00,   1.2815187347111337e-01,   3.2380356528743487e-01,
299
+       9.4877358363585262e+00,  -2.2988301163130145e-01,   2.1970582679149839e-01,
300
+       1.1023176380641601e+01,  -3.3425750283830036e-01,  -2.8302631898505476e-01,
301
+       1.2807103782663029e+01,   4.4350537603751145e-01,  -2.2706962776315812e-01,
302
+       1.4879731724872830e+01,  -8.8943820418669634e-02,   4.7351258711649669e-01,
303
+       1.7287781840567639e+01,  -1.8646079800862164e-01,  -3.5417866045339608e-01,
304
+       2.0085536923187668e+01,   2.4494657419883456e-01,   1.6582378621661517e-01,
305
+       2.3336064580942711e+01,  -2.0169045144304532e-01,  -5.1221107687420810e-02,
306
+       2.7112638920657883e+01,   1.4661206655803793e-01,   3.5484710794282063e-03,
307
+       3.1500392308747923e+01,  -1.0564640256629308e-01,   1.1614894738175324e-02,
308
+       3.6598234443677974e+01,   7.8487036158411266e-02,  -1.4776256489774963e-02,
309
+       4.2521082000062783e+01,  -6.0533748554794195e-02,   1.4194293010344678e-02,
310
+       4.9402449105530167e+01,   4.8243702864613026e-02,  -1.2609914713728791e-02,
311
+       5.7397457045446188e+01,  -3.9347085461672239e-02,   1.0854082569077052e-02,
312
+       6.6686331040925154e+01,   3.2489421068688185e-02,  -9.2082270347668624e-03,
313
+       7.7478462925260828e+01,  -2.6982535264609676e-02,   7.7880648968821110e-03,
314
+       9.0017131300521811e+01,   2.2530196869950080e-02,  -6.6089268276601255e-03,
315
+       1.0458498557711414e+02,  -1.8947601435977172e-02,   5.6159700146012417e-03,
316
+       1.2151041751873485e+02,   1.6017457455233256e-02,  -4.7432063636330263e-03,
317
+       1.4117496392147686e+02,  -1.3519422964231352e-02,   3.9609893136500528e-03,
318
+       1.6402190729990167e+02,   1.1318328695851308e-02,  -3.2753768787828126e-03,
319
+       1.9056626845862999e+02,  -9.3839154851987506e-03,   2.6945716306237466e-03,
320
+       2.2140641620418697e+02,   7.7256174599644543e-03,  -2.2042319512562145e-03,
321
+       2.5723755590577474e+02,  -6.3199190181430056e-03,   1.7733135127602079e-03,
322
+       2.9886740096706029e+02,   5.0986473606509210e-03,  -1.3773733375919272e-03,
323
+       3.4723438047873447e+02,  -3.9929354358609528e-03,   1.0137885881408651e-03,
324
+       4.0342879349273511e+02,   2.9783618569305080e-03,  -6.9751488719640639e-04,
325
+       4.6871738678241655e+02,  -2.0802747552777045e-03,   4.4545125438205673e-04,
326
+       5.4457191012592898e+02,   1.3429398653973710e-03,  -2.6373575275283686e-04,
327
+       6.3270229281225352e+02,  -7.9345560431147465e-04,   1.4519595835116970e-04,
328
+       7.3509518924197266e+02,   4.2530878973518046e-04,  -7.4640168948626184e-05,
329
+       8.5405876252615155e+02,  -2.0457624610548748e-04,   3.5826939350044606e-05,
330
+       9.9227471560502534e+02,   8.6750842046621606e-05,  -1.5854604622793124e-05,
331
+       1.1528587427833875e+03,  -3.1406113278782205e-05,   6.2412989356183992e-06,
332
+       1.3394307643944169e+03,   9.1385289919391839e-06,  -2.0349222128793154e-06,
333
+       1.5561965278371533e+03,  -1.8949818224609619e-06,   4.8072849734177625e-07,
334
+       1.8080424144560632e+03,   2.0794387557779629e-07,  -6.0462736574031818e-08).finished();
335
+
336
+    template<>
337
+    const Eigen::Matrix<Real, Eigen::Dynamic, 3>  FHT<FHTKEY51>::WT =
338
+        ( Eigen::Matrix<Real, 51, 3>()   <<
339
+       // Base                   J0                        J1
340
+           4.9915939069102170e-03,   6.5314496156480717e-02,   3.8409924166118657e-05,
341
+           6.1703482511978082e-03,  -2.2265895125268051e-01,  -9.4382633059055269e-05,
342
+           7.6274629409160176e-03,   4.2794928430042073e-01,   1.6377612356675232e-04,
343
+           9.4286721829279947e-03,  -5.8890658905204007e-01,  -1.7853487610334151e-04,
344
+           1.1655233178024955e-02,   6.7897324897038758e-01,   1.9759569268356316e-04,
345
+           1.4407591843112350e-02,  -6.8296549495756353e-01,  -1.2796247718553291e-04,
346
+           1.7809914185937643e-02,   6.4702210424566342e-01,   1.3163370416771999e-04,
347
+           2.2015687754376449e-02,  -5.6843090153083187e-01,   1.7066927559149181e-05,
348
+           2.7214645856121149e-02,   4.9960500362966542e-01,   4.1368007808198310e-05,
349
+           3.3641326918204623e-02,  -4.0923517268678855e-01,   2.3582259002758631e-04,
350
+           4.1585655121173182e-02,   3.5487831784012780e-01,  -1.9929745662753875e-05,
351
+           5.1406019627642255e-02,  -2.7408257835871558e-01,   5.8196110748926486e-04,
352
+           6.3545442443014022e-02,   2.4668368971888163e-01,   1.1164151202379049e-05,
353
+           7.8551564282309541e-02,  -1.7348161774657314e-01,   1.2053942009238238e-03,
354
+           9.7101350057185065e-02,   1.7509173908347012e-01,   2.8328713800714110e-04,
355
+           1.2003162851145673e-01,  -1.0007796678766585e-01,   2.4375075610646724e-03,
356
+           1.4837684372696586e-01,   1.3297302593795621e-01,   1.1709289200267103e-03,
357
+           1.8341572156771246e-01,  -4.3822390117083297e-02,   5.0080095645252103e-03,
358
+           2.2672895630607542e-01,   1.1415804492335258e-01,   3.5856849047131551e-03,
359
+           2.8027051982381157e-01,   4.2584271963990363e-03,   1.0536604059335859e-02,
360
+           3.4645581033005746e-01,   1.1496183925974515e-01,   9.6674718436839564e-03,
361
+           4.2827061721265969e-01,   5.1313336759457658e-02,   2.2583365267100426e-02,
362
+           5.2940581770869455e-01,   1.3312389010285514e-01,   2.4201911801947001e-02,
363
+           6.5442388190885858e-01,   1.0111673764393908e-01,   4.8602551164692191e-02,
364
+           8.0896469756649991e-01,   1.6331446488042209e-01,   5.6856974938076565e-02,
365
+           1.0000000000000000e+00,   1.4704406144951229e-01,   1.0202078096072606e-01,
366
+           1.2361478850785035e+00,   1.8341391219815678e-01,   1.2202639829343022e-01,
367
+           1.5280615937840571e+00,   1.5073655145087875e-01,   1.9561985197118459e-01,
368
+           1.8889101074258496e+00,   1.2356364992866918e-01,   2.1570853920674185e-01,
369
+           2.3349722343978727e+00,   1.1529465836107913e-02,   2.8552388758852060e-01,
370
+           2.8863709892679585e+00,  -1.2852626053530605e-01,   2.0559964796530625e-01,
371
+           3.5679813939355345e+00,  -2.9874216118407571e-01,   1.1666011451374350e-01,
372
+           4.4105526541128617e+00,  -3.1330553036684633e-01,  -2.3636714743601936e-01,
373
+           5.4520953354089947e+00,  -3.2332453606385231e-02,  -3.4036030266164258e-01,
374
+           6.7395961181122024e+00,   4.2056051544727674e-01,  -1.9475364255836261e-01,
375
+           8.3311374876876929e+00,   1.3883637369942961e-01,   5.7608115965662166e-01,
376
+           1.0298517985703377e+01,  -5.0223684329542873e-01,  -2.1471464584834585e-01,
377
+           1.2730491227470161e+01,   3.7996073748731690e-01,  -1.2611070492338947e-01,
378
+           1.5736769806847677e+01,  -1.7984404170109178e-01,   2.0019703515125831e-01,
379
+           1.9452974714702009e+01,   7.0557286965350657e-02,  -1.6147664664730754e-01,
380
+           2.4046753552064487e+01,  -2.7522277139686569e-02,   1.1398023016900673e-01,
381
+           2.9725343546388515e+01,   1.1909130661901874e-02,  -7.9924455203352035e-02,
382
+           3.6744920558100112e+01,  -5.8977428045126450e-03,   5.7024556382799692e-02,
383
+           4.5422155835273074e+01,   3.2648420034561555e-03,  -4.1006636508593382e-02,
384
+           5.6148501871478999e+01,  -1.9304039780209286e-03,   2.9192063091319696e-02,
385
+           6.9407851838755207e+01,   1.1594138315987755e-03,  -2.0089573135329029e-02,
386
+           8.5798369258319340e+01,  -6.7050941490060716e-04,   1.2965400526524978e-02,
387
+           1.0605947270185592e+02,   3.5089803807606258e-04,  -7.5154910983038946e-03,
388
+           1.3110519287294045e+02,  -1.5287051174029577e-04,   3.6269079130258285e-03,
389
+           1.6206540689269471e+02,   4.8238483411813232e-05,  -1.2668720233377250e-03,
390
+           2.0033680997479166e+02,  -8.0433917146487977e-06,   2.3403502580547994e-04).finished();
391
+
392
+}		// -----  end of Lemma  name  -----

Loading…
Cancel
Save