|
@@ -54,8 +54,9 @@ namespace Lemma {
|
54
|
54
|
|
55
|
55
|
/**
|
56
|
56
|
* \ingroup Merlin
|
57
|
|
- * \brief
|
58
|
|
- * \details
|
|
57
|
+ * \brief Calculated the initial amplitude imaging kernel of a sNMR experiment
|
|
58
|
+ * \details This class calculates the imaging kernel for a free induction decay
|
|
59
|
+ * pulse. The methodology follows from Weichman et al., 2000.
|
59
|
60
|
*/
|
60
|
61
|
class KernelV0 : public LemmaObject {
|
61
|
62
|
|
|
@@ -108,7 +109,7 @@ namespace Lemma {
|
108
|
109
|
*/
|
109
|
110
|
virtual YAML::Node Serialize() const;
|
110
|
111
|
|
111
|
|
- /*
|
|
112
|
+ /**
|
112
|
113
|
* Factory method for generating concrete class.
|
113
|
114
|
* @return a std::shared_ptr of type KernelV0
|
114
|
115
|
*/
|
|
@@ -125,6 +126,32 @@ namespace Lemma {
|
125
|
126
|
// ==================== OPERATIONS =======================
|
126
|
127
|
|
127
|
128
|
/**
|
|
129
|
+ * Calculates a single imaging kernel, however, phased arrays are supported
|
|
130
|
+ * so that more than one transmitter and/or receiver can be specified.
|
|
131
|
+ * @param[in] tx is the list of transmitters to use for a kernel, use the same labels as
|
|
132
|
+ * used in PushCoil.
|
|
133
|
+ * @param[in] rx is the list of receivers to use for a kernel, use the same labels as
|
|
134
|
+ * used in PushCoil. @see PushCoil
|
|
135
|
+ * @param[in] vtkOutput generates a VTK hyperoctree file as well, useful for visualization.
|
|
136
|
+ * requires compilation of Lemma with VTK. The VTK files can become very large.
|
|
137
|
+ */
|
|
138
|
+ void CalculateK0 (const std::vector< std::string >& tx, const std::vector< std::string >& rx,
|
|
139
|
+ bool vtkOutput=false );
|
|
140
|
+
|
|
141
|
+ /**
|
|
142
|
+ * Aligns the kernel settings with an Akvo Processed dataset.
|
|
143
|
+ */
|
|
144
|
+ void AlignWithAkvoDataset( const YAML::Node& node ) ;
|
|
145
|
+
|
|
146
|
+ /**
|
|
147
|
+ * Assign transmiter coils
|
|
148
|
+ */
|
|
149
|
+ inline void PushCoil( const std::string& label, std::shared_ptr<PolygonalWireAntenna> ant ) {
|
|
150
|
+ TxRx[label] = ant;
|
|
151
|
+ }
|
|
152
|
+
|
|
153
|
+ // ==================== INQUIRY =======================
|
|
154
|
+ /**
|
128
|
155
|
* @return std::shared_ptr<LayeredEarthEM>
|
129
|
156
|
*/
|
130
|
157
|
inline std::shared_ptr<LayeredEarthEM> GetSigmaModel ( ) {
|
|
@@ -171,31 +198,6 @@ namespace Lemma {
|
171
|
198
|
} // ----- end of method KernelV0::SetIntegrationOrigin -----
|
172
|
199
|
|
173
|
200
|
/**
|
174
|
|
- * Aligns the kernel settings with an Akvo Processed dataset.
|
175
|
|
- */
|
176
|
|
- void AlignWithAkvoDataset( const YAML::Node& node ) ;
|
177
|
|
-
|
178
|
|
- /**
|
179
|
|
- * Assign transmiter coils
|
180
|
|
- */
|
181
|
|
- inline void PushCoil( const std::string& label, std::shared_ptr<PolygonalWireAntenna> ant ) {
|
182
|
|
- TxRx[label] = ant;
|
183
|
|
- }
|
184
|
|
-
|
185
|
|
- /**
|
186
|
|
- * Calculates a single imaging kernel, however, phased arrays are supported
|
187
|
|
- * so that more than one transmitter and/or receiver can be specified.
|
188
|
|
- * @param[in] tx is the list of transmitters to use for a kernel, use the same labels as
|
189
|
|
- * used in PushCoil.
|
190
|
|
- * @param[in] rx is the list of receivers to use for a kernel, use the same labels as
|
191
|
|
- * used in PushCoil. @see PushCoil
|
192
|
|
- * @param[in] vtkOutput generates a VTK hyperoctree file as well, useful for visualization.
|
193
|
|
- * requires compilation of Lemma with VTK. The VTK files can become very large.
|
194
|
|
- */
|
195
|
|
- void CalculateK0 (const std::vector< std::string >& tx, const std::vector< std::string >& rx,
|
196
|
|
- bool vtkOutput=false );
|
197
|
|
-
|
198
|
|
- /**
|
199
|
201
|
* Sets the temperature, which has implications in calculation of \f$ M_N^{(0)}\f$. Units in
|
200
|
202
|
* Kelvin.
|
201
|
203
|
*/
|
|
@@ -205,12 +207,15 @@ namespace Lemma {
|
205
|
207
|
|
206
|
208
|
/**
|
207
|
209
|
* Sets the tolerance to use for making the adaptive mesh
|
208
|
|
- *
|
|
210
|
+ * @param[in] ttol is the tolerance to use
|
209
|
211
|
*/
|
210
|
212
|
inline void SetTolerance(const Real& ttol) {
|
211
|
213
|
tol = ttol;
|
212
|
214
|
}
|
213
|
215
|
|
|
216
|
+ /**
|
|
217
|
+ * @param[in] taup sets the pulse duration
|
|
218
|
+ */
|
214
|
219
|
inline void SetPulseDuration(const Real& taup) {
|
215
|
220
|
Taup = taup;
|
216
|
221
|
}
|
|
@@ -223,7 +228,6 @@ namespace Lemma {
|
223
|
228
|
Interfaces = iface;
|
224
|
229
|
}
|
225
|
230
|
|
226
|
|
- // ==================== INQUIRY =======================
|
227
|
231
|
/**
|
228
|
232
|
* Returns the name of the underlying class, similiar to Python's type
|
229
|
233
|
* @return string of class name
|
|
@@ -302,7 +306,7 @@ namespace Lemma {
|
302
|
306
|
MatrixXcr Kern;
|
303
|
307
|
|
304
|
308
|
std::shared_ptr< LayeredEarthEM > SigmaModel = nullptr;
|
305
|
|
- std::shared_ptr< FieldPoints > cpoints;
|
|
309
|
+ std::shared_ptr< FieldPoints > cpoints = nullptr;
|
306
|
310
|
|
307
|
311
|
std::map< std::string , std::shared_ptr< PolygonalWireAntenna > > TxRx;
|
308
|
312
|
std::map< std::string , std::shared_ptr< EMEarth1D > > EMEarths;
|