-
Notifications
You must be signed in to change notification settings - Fork 5
/
getdp_fun.cpp
169 lines (157 loc) · 6.1 KB
/
getdp_fun.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include "getdp_fun.h"
#include <iostream>
double findKeywordValue(std::string &filename, std::string &keystr)
{
std::ifstream infile;
infile.open(filename.c_str(), std::ifstream::in);
if(!infile)
{
std::cout << filename << " File can not open!" << "\n";
std::cout << "Please check the input file" << "\n";
exit(1);
}
char buf[MAX_CHARS_PER_LINE];
char* tokenTmp1;
char* tokenTmp2;
while (!infile.eof())
{
infile.getline(buf, MAX_CHARS_PER_LINE);
char* token = strtok(buf, DELIMITER.c_str());
if (token)
{
tokenTmp1 = token;
if((tokenTmp2 = strtok(NULL, DELIMITER.c_str())) && !strcmp(tokenTmp2, keystr.c_str())) break;
}
}
infile.close();
return atof(tokenTmp1);
}
double findMainKeyValue(std::string &filename, std::string &keystr)
{
std::ifstream infile;
infile.open(filename.c_str(), std::ifstream::in);
if(!infile)
{
std::cout << filename << " File can not open!" << "\n";
std::cout << "Please check the output file" << "\n";
exit(1);
}
char buf[MAX_CHARS_PER_LINE];
char* tokenTmp1;
char* tokenTmp2;
while (!infile.eof())
{
infile.getline(buf, MAX_CHARS_PER_LINE);
char* token = strtok(buf, DELIMITER.c_str());
if (token)
{
tokenTmp1 = token;
if(!strcmp(tokenTmp1, keystr.c_str()) && (tokenTmp2 = strtok(NULL, DELIMITER.c_str()))) break;
}
}
infile.close();
return atof(dToE(std::string(tokenTmp2)).c_str());
}
std::string dToE(std::string cppstr)
{
cppstr.replace(cppstr.find("D"),1,"E");
return cppstr;
}
int parseOpts(int argc, char* argv[],
std::string &infilename, std::string &outfilename,
int &isOrder, double &dsPosition,
int &izOrder, double &dzPosition,
int &sFlag, int &zFlag,
int &ishowRange)
{
for (int i=1; i < argc-1; i+=2)
{
if (argv[i] == std::string("--input"))
infilename = argv[i+1];
else if (argv[i] == std::string("--output"))
outfilename = argv[i+1];
else if (argv[i] == std::string("--sOrder"))
isOrder = atoi(argv[i+1]);
else if (argv[i] == std::string("--zOrder"))
izOrder = atoi(argv[i+1]);
else if (argv[i] == std::string("--sPos"))
dsPosition = atof(argv[i+1]);
else if (argv[i] == std::string("--zPos"))
dzPosition = atof(argv[i+1]);
else if (argv[i] == std::string("--s"))
sFlag = atoi(argv[i+1]);
else if (argv[i] == std::string("--z"))
zFlag = atoi(argv[i+1]);
else if (argv[i] == std::string("--showRange"))
ishowRange = atoi(argv[i+1]);
else
return 0; // unknown options
}
return 1; // parsing success, return
}
void checkParams(int argc, char* argv[])
{
if (argc == 1 || (argc > 1 && (argv[1] == std::string("--help") || argv[1] == std::string("-h"))))
{
std::cout << "Usage: "<< argv[0] << " [--flag value]..." << "\n\n";
std::cout << "Usage Example (1): " << argv[0] << " --input infilename" << " --output outfilename" << " --s 1" << " --sOrder 100" << "\n";
std::cout << "Usage Example (2): " << argv[0] << " --input infilename" << " --output outfilename" << " --z 1" << " --zOrder 100" << "\n";
std::cout << "Usage Example (3): " << argv[0] << " --help" << "\n";
std::cout << "Usage Example (4): " << argv[0] << " --input infilename --showRange 1" << "\n";
std::cout << "\n";
std::cout << "Mandatory Options:" << "\n";
std::cout << "\t" << "--input" << " infile" << "\n";
std::cout << "\t\t" << "TDP output file" << "\n";
std::cout << "\t" << "--output" << " outfile" << "\n";
std::cout << "\t\t" << "File for data dumping" << "\n";
std::cout << "\n";
std::cout << "\t" << "Third mandatory flag: --s or --z" << "\n";
std::cout << "\t\t" << "--s" << " sFlag" << "\n";
std::cout << "\t\t\t" << "Data extraction type: slice" << "\n";
std::cout << "\t\t\t" << "default value: 0, enable by set 1" << "\n";
std::cout << "\t\t\t" << "Meanwhile --sOrder or --sPos should be set" << "\n";
std::cout << "\t" << "Or:" << "\n";
std::cout << "\t\t" << "--z" << " zFlag" << "\n";
std::cout << "\t\t\t" << "Data extraction type: zentry" << "\n";
std::cout << "\t\t\t" << "default value: 0, enable by set 1" << "\n";
std::cout << "\t\t\t" << "Meanwhile --zOrder or --zPos should be set" << "\n";
std::cout << "\n";
std::cout << "Other Options:" << "\n";
std::cout << "\t" << "--sOrder" << " isOrder" << "\n";
std::cout << "\t\t" << "Extract slice order" << "\n";
std::cout << "\t" << "--zOrder" << " izOrder" << "\n";
std::cout << "\t\t" << "Extract z-entry order" << "\n";
std::cout << "\t" << "--sPos" << " dsPos" << "\n";
std::cout << "\t\t" << "Extract slice position in [m]" << "\n";
std::cout << "\t\t" << "if --sOrder and --sPos are all" << "\n";
std::cout << "\t\t" << "defined, --sOrder is used by " << argv[0] << "\n";
std::cout << "\t" << "--zPos" << " dzPos" << "\n";
std::cout << "\t\t" << "Extract zentry position in [m]" << "\n";
std::cout << "\t\t" << "if --zOrder and --zPos are all" << "\n";
std::cout << "\t\t" << "defined, --zOrder is used by " << argv[0] << "\n";
std::cout << "\t" << "--showRange" << " ishowRange" << "\n";
std::cout << "\t\t" << "Flag for showing record range, default 0," << "\n";
std::cout << "\t\t" << "should be used by given --input infilename" << "\n";
std::cout << std::endl;
exit(1);
}
}
void showRange(std::string &infilename)
{
std::string keystr1 = "history";
std::string keystr2 = "entries";
std::string keystr3 = "delz";
std::string keystr4 = "xlamd";
std::string keystr5 = "seperation";
int totalSlices = (int)findKeywordValue(infilename, keystr1);
int totalZentri = (int)findKeywordValue(infilename, keystr2);
double delz = findMainKeyValue(infilename, keystr3);
double xlamd = findMainKeyValue(infilename, keystr4);
double sliceSep = findKeywordValue(infilename, keystr5);
double maxZpos = (totalZentri - 1)*delz*xlamd;
double maxSpos = (totalSlices - 1)*sliceSep;
std::cout << "The z record and s record range:" << "\n";
std::cout << "\t" << "z-pos range: " << "0[1]" << "---" << maxZpos << " m" << " [" << totalZentri << "]" << "\n";
std::cout << "\t" << "s-pos range: " << "0[1]" << "---" << maxSpos << " m" << " [" << totalSlices << "]" << "\n";
std::cout << std::endl;
}