00001 #include "TimeSeriesData.h"
00002 #include "BirrpAsciiFormat.h"
00003 #include "MtuFormat.h"
00004 #include "CsvFormat.h"
00005 #include "LemiTsFormat.h"
00006 #include "CFatalException.h"
00007 #include "convert.h"
00008 #include "Util.h"
00009 #include <iostream>
00010
00011 using namespace std;
00012 TimeSeriesData::TimeSeriesData()
00013 {
00014 }
00015
00016 TimeSeriesData::~TimeSeriesData()
00017 {
00018 }
00019
00020
00021 void TimeSeriesData::GetData(std::string filename)
00022 {
00023 string ending;
00024
00025 ending = GetFileExtension(filename);
00026 if ( ending == ".ts3" || ending == ".TS3" || ending == ".ts4" ||
00027 ending == ".TS4" || ending == ".ts5" || ending == ".TS5")
00028 {
00029 Data = boost::shared_ptr<TimeSeries>(new MtuFormat);
00030 datatype = mtu;
00031 }
00032 else
00033 if (ending == ".asc")
00034 {
00035 Data = boost::shared_ptr<TimeSeries>(new BirrpAsciiFormat);
00036 datatype = birrp;
00037 }
00038 else
00039 if (ending == ".csv")
00040 {
00041 Data = boost::shared_ptr<TimeSeries>(new CsvFormat);
00042 datatype = csv;
00043 }
00044 else
00045 if (ending == ".lem")
00046 {
00047 Data = boost::shared_ptr<TimeSeries>(new LemiTsFormat);
00048 datatype = lemi;
00049 }
00050 else
00051 {
00052 datatype= tsunknown;
00053 throw CFatalException( "Unknown data format or file does not exist : " + filename);
00054 }
00055 name = filename;
00056 unsigned int dotpos = name.find('.',0);
00057 if (dotpos != string::npos)
00058 name.erase(dotpos);
00059 Data->GetData(filename);
00060 }
00061
00062 TimeSeriesData& TimeSeriesData::operator=(const TimeSeriesData& source)
00063 {
00064 if (this != &source)
00065 {
00066 this->Data = source.Data;
00067 }
00068 return *this;
00069 }
00070
00071 void TimeSeriesData::WriteAsMtu(std::string filename_base)
00072 {
00073 if (datatype == mtu)
00074 {
00075 switch (int(Data->GetSamplerate()))
00076 {
00077 case 2400:
00078 Data->WriteData(filename_base+".ts3");
00079 break;
00080 case 150:
00081 Data->WriteData(filename_base+".ts4");
00082 break;
00083 case 15:
00084 Data->WriteData(filename_base+".ts5");
00085 break;
00086 default:
00087 throw CFatalException("Unknown samplerate ! Cannot write file. Value is: "+stringify(Data->GetSamplerate()));
00088 break;
00089 }
00090 }
00091 else
00092 {
00093 throw CFatalException("Data conversion not implemented yet ! ");
00094 }
00095 }
00096
00097 void TimeSeriesData::WriteAsBirrp(std:: string filename_base)
00098 {
00099
00100 if (datatype == birrp)
00101 Data->WriteData(filename_base+".asc");
00102 else
00103 {
00104 BirrpAsciiFormat BirrpData;
00105 BirrpData = *Data;
00106 BirrpData.WriteData(filename_base+".asc");
00107 }
00108 }
00109
00110 void TimeSeriesData::WriteAsLemi(std::string filename_base)
00111 {
00112 if (datatype == lemi)
00113 Data->WriteData(filename_base+".lem");
00114 else
00115 {
00116 LemiTsFormat LemiData;
00117 LemiData = *Data;
00118 LemiData.WriteData(filename_base+".lem");
00119 }
00120 }
00121
00122 void TimeSeriesData::WriteAsCsv(std:: string filename_base)
00123 {
00124 throw CFatalException("Csv write not implemented yet ! ");
00125 }
00126
00127 void TimeSeriesData::WriteBack(std:: string filename_base)
00128 {
00129 switch (datatype)
00130 {
00131 case lemi:
00132 WriteAsLemi(filename_base);
00133 break;
00134 case birrp:
00135 WriteAsBirrp(filename_base);
00136 break;
00137 case mtu:
00138 WriteAsMtu(filename_base);
00139 break;
00140 case csv:
00141 WriteAsCsv(filename_base);
00142 break;
00143 default:
00144 throw CFatalException("Cannot write back data ! Unknown datatype !");
00145 break;
00146 }
00147 }