printmu.cpp

Go to the documentation of this file.
00001 #include <iostream>
00002 #include <fstream>
00003 #include "MTStation.h"
00004 #include "MTSampleGenerator.h"
00005 #include "Jacknife.h"
00006 #include <boost/function.hpp>
00007 #include "Util.h"
00008 
00009 using namespace std;
00010 using namespace gplib;
00011 
00012 /*!
00013  * \addtogroup UtilProgs Utility Programs
00014  *@{
00015  * \file
00016  * Calculate various dimensionality indicators for MT data and their errors and write them to a file
00017  */
00018 
00019 //! This helper function calculates the errors for a single parameter and writes the values to a file in ascii format
00020 void WriteParameterToFile(const MTStation &Data, const string &filename,
00021     boost::function<double (const MTTensor*)> f)
00022   {
00023     // we use a fixed number of samples for the jacknifing
00024     const int errorcases = 10000;
00025     const double errorfloor = 0.02;
00026     double JackMean, JackErr;
00027     ofstream muoutfile(filename.c_str());
00028     //for each period
00029     for (size_t i = 0; i < Data.GetMTData().size(); ++i)
00030       {
00031         //calculate the error
00032         MTSampleGenerator Generator(f, Data.GetMTData().at(i), errorfloor);
00033         Jacknife<MTSampleGenerator> ErrEst(errorcases, Generator);
00034         ErrEst.CalcErrors(JackMean, JackErr);
00035         // and write period, data, error to a file
00036         muoutfile << 1. / Data.GetMTData().at(i).GetFrequency();
00037         muoutfile << " " << f(&Data.GetMTData().at(i)) << " " << sqrt(JackErr)
00038             << endl;
00039       }
00040   }
00041 
00042 int main(int argc, char *argv[])
00043   {
00044     string infilename;
00045     MTStation Data;
00046     // find out which file to work on
00047     if (argc == 2)
00048       {
00049         infilename = argv[1];
00050       }
00051     else
00052       {
00053         infilename = AskFilename("Infilename: ");
00054       }
00055     //read in the data from the file
00056     Data.GetData(infilename);
00057     //write out various dimensionality indicators
00058     WriteParameterToFile(Data, infilename + ".mu", &MTTensor::GetMu);
00059     WriteParameterToFile(Data, infilename + ".kappa", &MTTensor::GetKappa);
00060     WriteParameterToFile(Data, infilename + ".sigma", &MTTensor::GetSigma);
00061     WriteParameterToFile(Data, infilename + ".eta", &MTTensor::GetEta);
00062     WriteParameterToFile(Data, infilename + ".Q", &MTTensor::GetQ);
00063     WriteParameterToFile(Data, infilename + ".I1", &MTTensor::GetI1);
00064     WriteParameterToFile(Data, infilename + ".I2", &MTTensor::GetI2);
00065     WriteParameterToFile(Data, infilename + ".I3", &MTTensor::GetI3);
00066     WriteParameterToFile(Data, infilename + ".I4", &MTTensor::GetI4);
00067     WriteParameterToFile(Data, infilename + ".I5", &MTTensor::GetI5);
00068     WriteParameterToFile(Data, infilename + ".I6", &MTTensor::GetI6);
00069     WriteParameterToFile(Data, infilename + ".I7", &MTTensor::GetI7);
00070     //we cannot write this with WriteParameterToFile, so we do it separately
00071     ofstream muoutfile((infilename + ".d2").c_str());
00072     for (size_t i = 0; i < Data.GetMTData().size(); ++i)
00073       {
00074         muoutfile << 1. / Data.GetMTData().at(i).GetFrequency();
00075         muoutfile << " " << 2 * Data.GetMTData().at(i).GetdBerd()
00076             / Data.GetMTData().at(i).GetD2() << endl;
00077       }
00078 
00079   }
00080 /*@}*/
00081 

Generated on Tue May 4 16:52:14 2010 for GPLIB++ by  doxygen 1.5.8