27 #include <QtCore/QDir>
28 #include <QtCore/QFile>
29 #include <QtCore/QList>
54 const QMap<QString, int>* defaultCableSignByStn,
55 const QMap<QString, QString>* rinexFileNameByStn,
56 const QMap<QString, double>* rinexPressureOffsetByStn,
57 bool have2overwriteAntabFile,
bool reportAllTsysData,
58 const QString& altPath2InputFiles,
59 const QString& orderOfMeteo)
61 QMap<QString, QString> logFileByKey;
62 QMap<QString, QString> cdmsFileByKey;
63 QMap<QString, QString> pcmtFileByKey;
64 QMap<QString, QString> metFileByKey;
66 QString path2logFiles(
"");
71 bool haveFoundSomething=
false;
72 bool haveVlbaLog=
false;
73 bool doLogs=
true, doCdms=
true, doPcmt=
true, doMets=
true;
79 doLogs = doCdms = doPcmt = doMets =
false;
80 for (
int i=0; i<kinds.size(); i++)
81 if (kinds.at(i) ==
"log")
83 else if (kinds.at(i) ==
"cdms")
85 else if (kinds.at(i) ==
"pcmt")
87 else if (kinds.at(i) ==
"met")
91 if (altPath2InputFiles.size())
92 path2logFiles = altPath2InputFiles;
94 path2logFiles = path2sessions +
"/" + QString(
"").sprintf(
"%04d", nYear) +
"/" + sessCode +
"/";
97 "::importDataFromLogFiles(): checking [" + path2logFiles +
"] directory for station log files");
104 for (
int i=0; i<stns.size(); i++)
113 "::importDataFromLogFiles(): cannot find station " + stnKey +
" in the session");
119 stations.append(it.value());
124 "::importDataFromLogFiles(): collected " + QString(
"").setNum(stations.size()) +
125 " stations to process");
127 QDir dir(path2logFiles);
128 QStringList patterns;
129 QStringList fileList;
130 for (
int i=0; i<stations.size(); i++)
140 const QString& sCode=rec.
getCode();
141 stn->
setSid(sCode.at(0).toLatin1(), sCode.at(1).toLatin1());
145 str = path2logFiles + sessCode + sCode.toLower() +
".log";
146 if (QFile::exists(str))
147 logFileByKey[stn->
getKey()] = str;
155 str = path2logFiles + sessCode + sCode.toLower() +
".cdms.dat";
156 if (QFile::exists(str))
157 cdmsFileByKey[stn->
getKey()] = str;
164 str = sessCode + sCode.toLower() +
".pcmt.*.*.dat";
167 fileList = dir.entryList(patterns,
168 QDir::Files | QDir::NoDotAndDotDot | QDir::Readable, QDir::Time);
171 str = fileList.at(0);
172 pcmtFileByKey[stn->
getKey()] = path2logFiles + str;
174 if (fileList.size() > 1)
176 "::importDataFromLogFiles(): more than one PCMT file found for the station " +
177 stn->
name() +
", the last modified will be used: " + path2logFiles + str);
185 str = path2logFiles + sessCode + sCode.toLower() +
".met.dat";
186 if (QFile::exists(str))
187 metFileByKey[stn->
getKey()] = str;
192 "::importDataFromLogFiles(): the ns-codes.txt record for the station " + stn->
name() +
197 "::importDataFromLogFiles(): cannot find station " + stn->
name() +
198 " in the ns-codes.txt file");
205 str = path2logFiles + sessCode +
"cal.vlba";
207 "::importDataFromLogFiles(): checking " + str +
" log file for VLBA stations");
208 if (QFile::exists(str))
211 "::importDataFromLogFiles(): found the log file for VLBA stations");
212 haveVlbaLog = vlbaLogCollector.
readLogFile(str, nYear);
216 "::importDataFromLogFiles(): the log file for VLBA stations was not found");
225 if (logFileByKey.size())
227 "::importDataFromLogFiles(): collected " + QString(
"").setNum(logFileByKey.size()) +
228 " log file" + QString(logFileByKey.size()>1?
"s":
""));
229 if (cdmsFileByKey.size())
231 "::importDataFromLogFiles(): collected " + QString(
"").setNum(cdmsFileByKey.size()) +
232 " CDMS file" + QString(cdmsFileByKey.size()>1?
"s":
""));
233 if (pcmtFileByKey.size())
235 "::importDataFromLogFiles(): collected " + QString(
"").setNum(pcmtFileByKey.size()) +
236 " PCMT file" + QString(pcmtFileByKey.size()>1?
"s":
""));
237 if (metFileByKey.size())
239 "::importDataFromLogFiles(): collected " + QString(
"").setNum(metFileByKey.size()) +
240 " file" + QString(metFileByKey.size()>1?
"s":
"") +
" with external meteorological data");
247 for (QMap<QString, QString>::iterator it=cdmsFileByKey.begin(); it!=cdmsFileByKey.end(); ++it)
253 "::importDataFromLogFiles(): processing " + it.value() +
254 ", a CDMS file for " + stn->
name() +
" station");
258 if (logCollector.
propagateData(stn,
false, have2overwriteAntabFile,
false))
261 "::importDataFromLogFiles(): data propagation successfully completed for " + stn->
name());
262 haveFoundSomething =
true;
271 "::importDataFromLogFiles(): data propagation has failed for " + stn->
name());
275 "::importDataFromLogFiles(): reading of " + it.value() +
" failed");
279 "::importDataFromLogFiles(): the station " + stn->
name() +
280 " already has cable calibration data, the file " + it.value() +
" is skipped");
284 for (QMap<QString, QString>::iterator it=pcmtFileByKey.begin(); it!=pcmtFileByKey.end(); ++it)
290 "::importDataFromLogFiles(): processing " + it.value() +
291 ", a PCMT file for " + stn->
name() +
" station");
295 if (logCollector.
propagateData(stn,
false, have2overwriteAntabFile,
false))
298 "::importDataFromLogFiles(): data propagation successfully completed for " + stn->
name());
299 haveFoundSomething =
true;
308 "::importDataFromLogFiles(): data propagation has failed for " + stn->
name());
312 "::importDataFromLogFiles(): reading of " + it.value() +
" failed");
316 "::importDataFromLogFiles(): the station " + stn->
name() +
317 " already has cable calibration data, the file " + it.value() +
" is skipped");
321 for (QMap<QString, QString>::iterator it=metFileByKey.begin(); it!=metFileByKey.end(); ++it)
327 "::importDataFromLogFiles(): processing " + it.value() +
328 " file with external meteo data for " + stn->
name() +
" station");
332 if (logCollector.
propagateData(stn,
false, have2overwriteAntabFile,
false))
335 "::importDataFromLogFiles(): data propagation successfully completed for " + stn->
name());
336 haveFoundSomething =
true;
345 "::importDataFromLogFiles(): data propagation has failed for " + stn->
name());
349 "::importDataFromLogFiles(): reading of " + it.value() +
" failed");
353 "::importDataFromLogFiles(): the station " + stn->
name() +
354 " already has meteo data, the file " + it.value() +
" is skipped");
363 for (QMap<QString, QString>::iterator it=logFileByKey.begin(); it!=logFileByKey.end(); ++it)
371 "::importDataFromLogFiles(): processing " + it.value() +
372 ", a log file for " + stn->
name() +
" station");
392 have2overwriteAntabFile,
393 have2overwriteAntabFile, reportAllTsysData))
396 "::importDataFromLogFiles(): data propagation successfully completed for " + stn->
name());
397 haveFoundSomething =
true;
414 "::importDataFromLogFiles(): data propagation has failed for " + stn->
name());
418 "::importDataFromLogFiles(): reading of " + it.value() +
" failed");
422 "::importDataFromLogFiles(): the station " + stn->
name() +
423 " already has all data, the file " + it.value() +
" is skipped");
440 "::importDataFromLogFiles(): data propagation successfully completed for " + stn->
name());
441 haveFoundSomething =
true;
457 "::importDataFromLogFiles(): data propagation has failed for " + stn->
name());
461 if (haveFoundSomething)
466 "::importDataFromLogFiles(): import of data from station log files has been finished, " +
467 (haveFoundSomething?
"got some new information":
"nothing useful found"));
468 return haveFoundSomething;
488 if (!(doCable || doMeteo || doTsys))
494 bool ns_codes_read(
false);
499 for (
int i=0; i<stns.size(); i++)
501 if (stns.at(i).size()==2 && !ns_codes_read)
504 ns_codes_read =
true;
513 "::resetDataFromLogFiles(): cannot find station " + stnKey +
" in the session");
519 stations.append(it.value());
522 if (!stations.size())
525 "::resetDataFromLogFiles(): no station found to process");
530 "::resetDataFromLogFiles(): collected " + QString(
"").setNum(stations.size()) +
531 " stations to process");
535 for (
int i=0; i<stations.size(); i++)
542 "::resetDataFromLogFiles(): the cable calibration corrections were set to zeros for station " +
549 "::resetDataFromLogFiles(): the meteorological data were set to zeros for station " +
556 "::resetDataFromLogFiles(): the meteorological data were set to zeros for station " +
569 QString str(stnNameInpt);
573 if (ns_codes.
recsById().contains(str))
575 key = ns_codes.
recsById().value(str).getName();
577 "::stnInpt2Key(): found a station name " + key +
" for the code \"" + str +
"\"");
579 else if (str.at(0).isLower())
581 str[0] = str.at(0).toUpper();
582 if (ns_codes.
recsById().contains(str))
584 key = ns_codes.
recsById().value(str).getName();
586 "::stnInpt2Key(): found a station name " + key +
" for the code \"" + str +
"\"");
588 else if (str.at(1).isUpper())
590 str[1] = str.at(1).toLower();
591 if (ns_codes.
recsById().contains(str))
593 key = ns_codes.
recsById().value(str).getName();
595 "::stnInpt2Key(): found a station name " + key +
" for the code \"" + str +
"\"");
599 "::stnInpt2Key(): cannot find a station name for the code \"" + str +
"\"");
603 "::stnInpt2Key(): cannot find a station name for the code \"" + str +
"\"");
607 "::stnInpt2Key(): cannot find a station name for the code \"" + str +
"\"");
609 else if (str.size() > 2)
610 key = stnNameInpt.leftJustified(8,
' ',
true);
QMap< QString, SgVlbiStationInfo * >::iterator StationsByName_it
bool isAttr(uint a) const
bool parseSkdFile(const QString &fileName)
virtual void write(LogLevel, quint32, const QString &, bool=false)
const QMultiMap< QString, SgNetworkStnRecord > & recsById() const
const QMultiMap< QString, SgNetworkStnRecord > & recsByName() const
const QString & getCode() const
const QString & getKey() const
void setDefaultCableSignByStn(const QMap< QString, int > *map)
void setAntcalOutputData(int outputData)
void setRinexPressureOffsetByStn(const QMap< QString, double > *map)
bool propagateData(SgVlbiStationInfo *stn, bool createAntabFile, bool overwriteAntabFile, bool reportAllTsysData)
void setRinexFileNameByStn(const QMap< QString, QString > *map)
void setChannelSkeded(SgChannelSkeded *cs)
bool readLogFile(const QString &fileName, const QString &stnName, const SgMJD &tFirst, const SgMJD &tLast, const QString &orderOfMeteo)
const QString & getLogFileName() const
bool readLogFile(const QString &fileName, int year)
bool propagateData(SgVlbiStationInfo *stn)
bool isVlba(const QString &key) const
@ Attr_FF_AUX_OBS_MODIFIED
station log related data were modified; //vgosDbProcLogs
SgMJD tFinis_
last epoch of the observations;
QString sessionCode_
official session code (from Masterfile);
SgMJD tStart_
first epoch of the observations;
StationsByName stationsByName_
void search4missedLogFiles(QMap< QString, QString > &logFileByKey, const SgNetworkStations &ns_codes)
bool resetDataFromLogFiles(bool doCable, bool doMeteo, bool doTsys, const QList< QString > &stations)
bool importDataFromLogFiles(const QString &path2sessions, const QList< QString > &stations, const QList< QString > &kinds, const QMap< QString, int > *defaultCableSignByStn, const QMap< QString, QString > *rinexFileNameByStn, const QMap< QString, double > *rinexPressureOffsetByStn, bool have2overwriteAntabFile, bool reportAllTsysData, const QString &altPath2InputFiles, const QString &orderOfMeteo)
static QString className()
void stnInpt2Key(const QString &stnNameInpt, SgNetworkStations &ns_codes, QString &key)
void setMeteoDataOriginTxt(const QString &origin)
@ Attr_HAS_CABLE_CAL
a station has cable calibration readings;
@ Attr_HAS_METEO
a station has meteo parameters;
@ Attr_CABLE_CAL_IS_CDMS
FS log file contains /CDMS/ readings instead of /cable/;.
void setMeteoDataOrigin(MeteoDataOrigin origin)
void setCableCalsOriginTxt(const QString &origin)
void setCableCalsOrigin(CableCalsOrigin origin)
void setSid(char c1, char c2)