initial upload
This commit is contained in:
203
archive/xyzdiff/datafunc.h
Normal file
203
archive/xyzdiff/datafunc.h
Normal file
@@ -0,0 +1,203 @@
|
||||
#include "iostream"
|
||||
#include "fstream"
|
||||
#include "iomanip"
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
#include "cmath"
|
||||
#include "string.h"
|
||||
#include "sstream"
|
||||
#include "vector"
|
||||
|
||||
#define ADD "-a"
|
||||
#define MINUS "-m"
|
||||
#define RANGE "-r"
|
||||
#define INTERVAL "-i"
|
||||
#define OUTFILE "-o"
|
||||
#define BOLDRED "\033[1m\033[31m"
|
||||
#define RESET "\033[0m"
|
||||
#define MAX 1e+30
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef vector<double> _1dArray;
|
||||
|
||||
int xyz_add_minus(char* filename1,
|
||||
char* filename2,
|
||||
char* outname,
|
||||
double* range,
|
||||
double* interval,
|
||||
int caltype)
|
||||
{
|
||||
string temp_str;
|
||||
stringstream temp_ss;
|
||||
double xmin,xmax,ymin,ymax,dx,dy;
|
||||
double x,y,data;
|
||||
|
||||
xmin = *range; xmax = *(range+1);
|
||||
ymin = *(range+2); ymax = *(range+3);
|
||||
dx = *interval; dy = *(interval+1);
|
||||
|
||||
int M = int (xmax - xmin)/dx + 1;
|
||||
int N = int (ymax - ymin)/dy + 1;
|
||||
|
||||
double** data1 = new double* [M];
|
||||
for (int i=0;i<M;i++)
|
||||
data1[i] = new double [N];
|
||||
|
||||
double** data2 = new double* [M];
|
||||
for (int i=0;i<M;i++)
|
||||
data2[i] = new double [N];
|
||||
|
||||
ifstream infile1(filename1);
|
||||
ifstream infile2(filename2);
|
||||
|
||||
if(!infile1||!infile2) return -1;
|
||||
|
||||
for (int i = 0; i < M*N; i++)
|
||||
{
|
||||
getline(infile1,temp_str);
|
||||
if (*(temp_str.begin()) == '#') continue;
|
||||
else
|
||||
{
|
||||
temp_ss.clear();
|
||||
temp_ss << temp_str;
|
||||
if (temp_ss >> x >> y >> data)
|
||||
{
|
||||
data1[int ((x - xmin)/dx)][int ((y - ymin)/dy)] = data;
|
||||
}
|
||||
else cout << "wrong enterence of " << filename1 << ": " << temp_str << endl;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < M*N; i++)
|
||||
{
|
||||
getline(infile2,temp_str);
|
||||
if (*(temp_str.begin()) == '#') continue;
|
||||
else
|
||||
{
|
||||
temp_ss.clear();
|
||||
temp_ss << temp_str;
|
||||
if (temp_ss >> x >> y >> data)
|
||||
{
|
||||
data2[int ((x - xmin)/dx)][int ((y - ymin)/dy)] = data;
|
||||
}
|
||||
else cout << "wrong enterence of " << filename2 << ": " << temp_str << endl;
|
||||
}
|
||||
}
|
||||
infile1.close();
|
||||
infile2.close();
|
||||
|
||||
ofstream outfile(outname);
|
||||
if (caltype==1)
|
||||
{
|
||||
for (int i = 0; i < M; i++)
|
||||
{
|
||||
for (int j = 0; j < N; j++)
|
||||
{
|
||||
outfile << xmin+dx*i << " " << ymin+dy*j << " " << setprecision(16) << data1[i][j] - data2[i][j] << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (caltype==2)
|
||||
{
|
||||
for (int i = 0; i < M; i++)
|
||||
{
|
||||
for (int j = 0; j < N; j++)
|
||||
{
|
||||
outfile << xmin+dx*i << " " << ymin+dy*j << " " << setprecision(16) << data1[i][j] + data2[i][j] << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cout<<"error - wrong caltype"<<endl;
|
||||
return -1;
|
||||
}
|
||||
outfile.close();
|
||||
|
||||
for (int i=0;i<M;i++)
|
||||
delete[] data1[i];
|
||||
delete[] data1;
|
||||
for (int i=0;i<M;i++)
|
||||
delete[] data2[i];
|
||||
delete[] data2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int xyz_add_minus(char* filename1,
|
||||
char* filename2,
|
||||
char* outname,
|
||||
int caltype)
|
||||
{
|
||||
string temp_str;
|
||||
stringstream temp_ss;
|
||||
|
||||
_1dArray x,y,data,data2;
|
||||
double temp_x,temp_y,temp_data;
|
||||
|
||||
ifstream infile1(filename1);
|
||||
ifstream infile2(filename2);
|
||||
|
||||
if(!infile1||!infile2) return -1;
|
||||
|
||||
while(getline(infile1,temp_str))
|
||||
{
|
||||
if (*(temp_str.begin()) == '#') continue;
|
||||
else
|
||||
{
|
||||
temp_ss.clear();
|
||||
temp_ss << temp_str;
|
||||
if (temp_ss >> temp_x >> temp_y >> temp_data)
|
||||
{
|
||||
x.push_back(temp_x);
|
||||
y.push_back(temp_y);
|
||||
data.push_back(temp_data);
|
||||
}
|
||||
else cout << "wrong enterence of " << filename1 << ": " << temp_str << endl;
|
||||
}
|
||||
}
|
||||
|
||||
while(getline(infile2,temp_str))
|
||||
{
|
||||
if (*(temp_str.begin()) == '#') continue;
|
||||
else
|
||||
{
|
||||
temp_ss.clear();
|
||||
temp_ss << temp_str;
|
||||
if (temp_ss >> temp_x >> temp_y >> temp_data)
|
||||
{
|
||||
x.push_back(temp_x);
|
||||
y.push_back(temp_y);
|
||||
data2.push_back(temp_data);
|
||||
}
|
||||
else cout << "wrong enterence of " << filename2 << ": " << temp_str << endl;
|
||||
}
|
||||
}
|
||||
|
||||
infile1.close();
|
||||
infile2.close();
|
||||
|
||||
ofstream outfile(outname);
|
||||
if (caltype==1)
|
||||
{
|
||||
for (int i = 0; i < data.size(); i++)
|
||||
{
|
||||
outfile << x.at(i) << " " << y.at(i) << " " << setprecision(16) << data.at(i) - data2.at(i) << endl;
|
||||
}
|
||||
}
|
||||
else if (caltype==2)
|
||||
{
|
||||
for (int i = 0; i < data.size(); i++)
|
||||
{
|
||||
outfile << x.at(i) << " " << y.at(i) << " " << setprecision(16) << data.at(i) + data2.at(i) << endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cout<<"error - wrong caltype"<<endl;
|
||||
return -1;
|
||||
}
|
||||
outfile.close();
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user