cadianiso.cpp

Go to the documentation of this file.
00001 #include "cadijoint.h"
00002 #include <iostream>
00003 #include "Aniso1DMTObjective.h"
00004 #include "MTStation.h"
00005 #include "gentypes.h"
00006 #include "CLevanisoConf.h"
00007 #include "MTFitSetup.h"
00008 #include <boost/bind.hpp>
00009 #include "PTensor1DMTObjective.h"
00010 #include <boost/shared_ptr.hpp>
00011 #include "PTensorMTStation.h"
00012 
00013 
00014 using namespace std;
00015 
00016 boost::shared_ptr<PlottableObjective> MTObjective;
00017 CLevanisoConf Configuration;
00018 
00019 void misfit(float *p, float *misfit, int *m)
00020 {
00021         const int nlayers = abs(*m)/4;
00022         const int nparam = nlayers * 4; 
00023         ttranscribed mtmember(nparam);
00024         for (int i = 0; i < nparam; ++i)
00025         {
00026                 mtmember(i) = p[i];
00027         } 
00028         *misfit = 0.0;
00029         if (Configuration.weights.at(0) > 0)
00030         {
00031                 //cout << "Calculating MT misfit" << endl; 
00032                 *misfit += Configuration.weights.at(0) * MTObjective->CalcPerformance(mtmember);
00033         }
00034 }
00035 
00036 
00037 void init(int* nd, float* ranges)
00038 {
00039         MTStation MTData;
00040         PTensorMTStation PTData;
00041         Configuration.GetData("levaniso.conf");
00042         try
00043         {
00044                 MTData.GetData(Configuration.mtinputdata);
00045         }
00046         catch(CFatalException &e)
00047         {
00048                 cerr << e.what() << endl; 
00049         }
00050         
00051         
00052         if(Configuration.mtfit == "ptensor")
00053                 {
00054                         
00055                         PTData.GetData(Configuration.ptensordata);
00056                         boost::shared_ptr<PTensor1DMTObjective> PTObjective(new PTensor1DMTObjective(PTData));
00057                         MTObjective = PTObjective;
00058                 }
00059                 else
00060                 {
00061                         
00062                         MTData.GetData(Configuration.mtinputdata);
00063                         boost::shared_ptr<Aniso1DMTObjective> AnisoObjective(new Aniso1DMTObjective(MTData));
00064                         SetupMTFitParameters(Configuration,*AnisoObjective);
00065                         MTObjective = AnisoObjective;
00066                 }
00067         
00068                 
00069         const int nlayers = Configuration.minres.size();
00070         const int nparams =  nlayers * 4;
00071         *nd = nparams;
00072         ttranscribed mtmember(nparams);
00073         copy(Configuration.startres.begin(),Configuration.startres.end(),mtmember.begin());
00074         copy(Configuration.startthick.begin(),Configuration.startthick.end(),mtmember.begin()+nlayers);
00075         copy(Configuration.startaniso.begin(),Configuration.startaniso.end(),mtmember.begin()+2*nlayers);
00076         copy(Configuration.startstrike.begin(),Configuration.startstrike.end(),mtmember.begin()+3*nlayers);
00077         MTObjective->CalcPerformance(mtmember);
00078         
00079         
00080         for (int i = 0; i < nlayers; ++i)
00081         {
00082                 ranges[2*i] = Configuration.minres.at(i);
00083                 ranges[2*i+1] = Configuration.maxres.at(i);
00084         }
00085         for (int i = 0; i < nlayers; ++i)
00086         {
00087                 ranges[2*i+2*nlayers] = Configuration.minthick.at(i);
00088                 ranges[2*i+2*nlayers+1] = Configuration.maxthick.at(i);
00089         }
00090         for (int i = 0; i < nlayers; ++i)
00091         {
00092                 ranges[2*i+4*nlayers] = Configuration.minaniso.at(i);
00093                 ranges[2*i+4*nlayers+1] = Configuration.maxaniso.at(i);
00094         }
00095         for (int i = 0; i < nlayers; ++i)
00096         {
00097                 ranges[2*i+6*nlayers] = Configuration.minstrike.at(i);
00098                 ranges[2*i+6*nlayers+1] = Configuration.maxstrike.at(i);
00099         }
00100         cout << "Init finished ! " << endl;;
00101 }

Generated on Fri Jul 4 15:30:20 2008 for GPLIB++ by  doxygen 1.5.5