ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/branches/new_design/OOPSE-2.0/src/io/ZConsReader.cpp
Revision: 1818
Committed: Wed Dec 1 20:05:49 2004 UTC (19 years, 7 months ago) by tim
File size: 3879 byte(s)
Log Message:
visitors get built

File Contents

# User Rev Content
1 tim 1818 #include "constraints/ZconsData.hpp"
2 tim 1492 #include "io/ZConsReader.hpp"
3     #include "utils/simError.h"
4 tim 1818 namespace oopse {
5 gezelter 1490
6     ZConsReader::ZConsReader(SimInfo* info)
7     :istream(NULL){
8    
9     GenericData* data;
10 tim 1625 StringGenericData* filename;
11 gezelter 1490 this->info = info;
12    
13     //retrieve output filename of z force
14 tim 1701 data = info->getPropertyByName(ZCONSFILENAME_ID);
15 gezelter 1490 if(!data) {
16    
17    
18     sprintf( painCave.errMsg,
19     "ZConsReader error: If you use an ZConstraint\n"
20     " , you must set output filename of z-force.\n");
21     painCave.isFatal = 1;
22     simError();
23    
24     }
25     else{
26    
27 tim 1625 filename = dynamic_cast<StringGenericData*>(data);
28 gezelter 1490
29     if(!filename){
30    
31     sprintf( painCave.errMsg,
32     "ZConsReader error: Can not get property from SimInfo\n");
33     painCave.isFatal = 1;
34     simError();
35    
36     }
37     else{
38     zconsFileName = filename->getData();
39     }
40    
41     }
42    
43     istream = new ifstream(zconsFileName.c_str());
44    
45     if (!istream){
46     cerr << "open " << filename << "error" << endl;
47     exit(1);
48     }
49    
50     readHeader();
51     }
52    
53 tim 1818 ZConsReader::ZConsReader(const std::string& filename){
54 gezelter 1490 istream = new ifstream(zconsFileName.c_str());
55    
56     if (!istream){
57     cerr << "open " << filename << "error" << endl;
58     exit(1);
59     }
60    
61     readHeader();
62     }
63    
64     ZConsReader::~ZConsReader(){
65     istream->close();
66     }
67    
68     int ZConsReader::getNumZMol(){
69     return nZMol;
70     }
71    
72     vector<int> ZConsReader::getZConsIndex(){
73     return index;
74     }
75    
76     vector<double> ZConsReader::getZConsPos(){
77     return zconsPos;
78     }
79    
80     //double ZConsReader::getKRatio(){
81     // return kRatio;
82     //}
83    
84     double ZConsReader::getCurTime(){
85     return curTime;
86     }
87    
88 tim 1818 std::vector<double> ZConsReader::getCurZPos(){
89 gezelter 1490 return curZPos;
90     }
91    
92 tim 1818 std::vector<double> ZConsReader::getCurFZ(){
93 gezelter 1490 return curFZ;
94     }
95    
96     void ZConsReader::readHeader(){
97     const int MAXBUFFERSIZE = 2000;
98     char line[MAXBUFFERSIZE];
99     int zmolIndex;
100     float zmolPos;
101     int sscanfCount;
102    
103     istream->getline(line, MAXBUFFERSIZE);
104    
105     cout << line << endl;
106     //skip the comment lines
107     while(line[0] == '#')
108     istream->getline(line, MAXBUFFERSIZE);
109    
110     sscanfCount = sscanf(line, "%d", &nZMol);
111    
112     if (sscanfCount != 1){
113     cerr << "ZConsReader Error : reading file error" << endl;
114     exit(1);
115     }
116    
117     for(int i = 0 ; i < nZMol; i++){
118    
119     istream->getline(line, MAXBUFFERSIZE);
120    
121     sscanfCount = sscanf(line, "%d\t%f", &zmolIndex, &zmolPos);
122     if (sscanfCount != 2){
123     cerr << "ZConsReader Error : reading file error" << endl;
124     exit(1);
125     }
126    
127     index.push_back(zmolIndex);
128     zconsPos.push_back(zmolPos);
129     }
130    
131     curZPos.resize(nZMol);
132     curFZ.resize(nZMol);
133     }
134    
135     void ZConsReader::readNextFrame(){
136     const int MAXBUFFERSIZE = 2000;
137     char line[MAXBUFFERSIZE];
138     int tempNZMol;
139     int sscanfCount;
140     int tempIndex;
141     float tempCurTime;
142     float tempFZ;
143     float tempCurZPos;
144     float tempZconsPos;
145    
146     istream->getline(line, MAXBUFFERSIZE);
147     sscanfCount = sscanf(line, "%f", &tempCurTime);
148     if (sscanfCount != 1){
149     cerr << "ZConsReader Error : reading file error" << endl;
150     exit(1);
151     }
152     curTime = tempCurTime;
153    
154     istream->getline(line, MAXBUFFERSIZE);
155     sscanfCount = sscanf(line, "%d", &tempNZMol);
156     if (sscanfCount != 1){
157     cerr << "ZConsReader Error : reading file error" << endl;
158     exit(1);
159     }
160    
161     if (tempNZMol != nZMol){
162     cerr << "ZConsReader Error: reading file error" << endl;
163     exit(1);
164     }
165    
166     for(int i = 0; i < nZMol; i++){
167     istream->getline(line, MAXBUFFERSIZE);
168     sscanfCount = sscanf(line, "%d\t%f\t%f\t%f", &tempIndex, &tempFZ, &tempCurZPos,&tempZconsPos);
169     if (sscanfCount != 4){
170     cerr << "ZConsReader Error : reading file error" << endl;
171     exit(1);
172     }
173    
174     index[i] = tempIndex;
175     curFZ[i] = tempFZ;
176     curZPos[i]= tempCurZPos;
177     zconsPos[i] = tempZconsPos;
178     }
179    
180     }
181    
182     bool ZConsReader::hasNextFrame(){
183     return istream->peek() != EOF ? true : false;
184     }
185    
186 tim 1818 }

Properties

Name Value
svn:executable *