Added mechanism to align kernels with akvo data
authorTrevor Irons <tirons@egi.utah.edu>
Tue, 31 Jan 2017 23:30:20 +0000 (16:30 -0700)
committerTrevor Irons <tirons@egi.utah.edu>
Tue, 31 Jan 2017 23:30:20 +0000 (16:30 -0700)
examples/KV0-3loops.cpp
examples/KernelV0.cpp
include/KernelV0.h
src/KernelV0.cpp

index fc82327..e145bda 100644 (file)
@@ -40,10 +40,6 @@ int main(int argc, char** argv) {
         // Set mag field info
         // From NOAA, Laramie WY, June 9 2016, aligned with mag. north
         earth->SetMagneticFieldIncDecMag( 67, 0, 52750, NANOTESLA );
-        //earth->SetMagneticFieldIncDecMag( 90, 0, 52750, NANOTESLA );
-        std::cout << "B0 " << earth->GetMagneticField( ).transpose() << std::endl;
-        std::cout << "hat BO " << earth->GetMagneticFieldUnitVector().transpose() << std::endl ;
-        std::cout << "hat |BO| " << earth->GetMagneticFieldUnitVector().norm() << std::endl ;
 
     // Transmitter loops
     auto Tx1 = CircularLoop(21, 15, 100+offset/2., 100-offset/2.);
@@ -89,10 +85,10 @@ int main(int argc, char** argv) {
     // We could, I suppose, take the earth model in here? For non-linear that
     // may be more natural to work with?
     std::vector<std::string> tx = {std::string("Coil 1"), std::string("Coil 2"), std::string("Coil 3") };
-    std::vector<std::string> rx = {std::string("Coil 1"), std::string("Coil 2"), std::string("Coil 3") };
+    //std::vector<std::string> rx = {std::string("Coil 1"), std::string("Coil 2"), std::string("Coil 3") };
     //std::vector<std::string> rx = {std::string("Coil 1"), std::string("Coil 2")};//, std::string("Coil 3") };
-    //std::vector<std::string> rx = {std::string(argv[3])};
-    Kern->CalculateK0( tx, rx, true );
+    std::vector<std::string> rx = {std::string(argv[3])};
+    Kern->CalculateK0( tx, rx, false );
 
     std::ofstream dout = std::ofstream(std::string("k0-3Tx-RxCh-") + std::string(argv[3]) + std::string("-tol") + std::string(argv[1])+ std::string(".dat"));
     dout << "# Transmitters: ";
@@ -115,10 +111,9 @@ int main(int argc, char** argv) {
         dout << Kern->GetKernel().imag() << std::endl;
         dout.close();
 
-    //std::ofstream out = std::ofstream(std::string("k0-3Tx-RxCh1-")+std::string(argv[1])+std::string(".yaml"));
-    //std::ofstream out = std::ofstream(std::string("k-coincident.yaml"));
-    //out << *Kern;
-    //out.close();
+    std::ofstream out = std::ofstream(std::string("k0-3Tx-RxCh-") + std::string(argv[3]) + std::string("-tol") + std::string(argv[1])+ std::string(".yaml"));
+    out << *Kern;
+    out.close();
 }
 
 std::shared_ptr<Lemma::PolygonalWireAntenna> CircularLoop ( int nd, Real Radius, Real Offsetx, Real Offsety ) {
index f80bfa7..2507514 100644 (file)
@@ -48,6 +48,8 @@ int main(int argc, char** argv) {
         Kern->SetIntegrationOrigin( (Vector3r() << 0,0,0).finished() );
         Kern->SetTolerance( 1e-12 ); // 1e-12
 
+        Kern->AlignWithAkvoDataset( YAML::LoadFile(argv[2]) );
+
         Kern->SetPulseDuration(0.020);
         VectorXr I(36);
 
index 1179561..d679e24 100644 (file)
@@ -165,6 +165,11 @@ namespace Lemma {
             return ;
         }              // -----  end of method KernelV0::SetIntegrationOrigin  -----
 
+        /**
+         *  Aligns the kernel settings with an Akvo Processed dataset.
+         */
+        void AlignWithAkvoDataset( const YAML::Node& node ) ;
+
         /**
          *   Assign transmiter coils
          */
index 2adc4dd..5cb6a06 100644 (file)
@@ -110,6 +110,23 @@ namespace Lemma {
         return std::make_shared< KernelV0 > ( node, ctor_key() );
     }          // -----  end of method KernelV0::DeSerialize  -----
 
+    //--------------------------------------------------------------------------------------
+    //       Class:  KernelV0
+    //      Method:  AlignWithAkvoDataset
+    //--------------------------------------------------------------------------------------
+    void KernelV0::AlignWithAkvoDataset( const YAML::Node& node ) {
+        if (node["processed"].as<std::string>().substr(0,4) == "Akvo") {
+            std::cout << "Akvo file read\n";
+            std::cout << node["processed"] << std::endl;
+        }
+        if (node["pulseType"].as<std::string>() == "FID") {
+            PulseI  = node["Pulse 1"]["current"].as<VectorXr>();
+            this->SetPulseDuration( node["pulseLength"].as<double>() );
+        } else {
+            std::cerr << "Pulse Type " << node["PulseType"] << "is not supported\n";
+        }
+    }
+
     //--------------------------------------------------------------------------------------
     //       Class:  KernelV0
     //      Method:  DeSerialize