seticontainer.h
Go to the documentation of this file.00001
00020 #ifndef SETICONTAINER_H
00021 #define SETICONTAINER_H
00022
00023 #include <qobject.h>
00024
00025 #include <sys/types.h>
00026 #include <sys/stat.h>
00027 #include <signal.h>
00028 #include <unistd.h>
00029
00030 #include "setidefs.h"
00031
00122 class SetiContainer : public QObject
00123 {
00124 Q_OBJECT
00125
00126 public:
00134 SetiContainer(const QString& dir, int refresh=30);
00136 ~SetiContainer();
00141 void setRefreshInterval(int refresh);
00143 QString directory() const {return setiDirectory;}
00145 void setDirectory(const QString& d);
00147 int refreshInterval() {return(refreshIval/1000);}
00151 int fftNumber() {return(stfData.ncfft);}
00155 int fftLength() {return(stfData.fl);}
00157 double chirpRate() {return(stfData.cr);}
00159 double cpuTime() {return(stfData.cpu);}
00164 int outfileSize() {return(stfData.outfilepos);}
00166 int potFrequency() {return(stfData.potfreq);}
00168 int potActivity() {return(stfData.potactivity);}
00170 double progress() {return(100.0*(stfData.prog < 0.0 ? 0.0 : stfData.prog));}
00174 double progressRate();
00178 double remainingTime();
00182 QString remainingTimeAsString();
00187 WUScore wuScore() {return(stfData.max);}
00192 SpikeScore spikeScore() {return(stfData.max.spike);}
00197 GaussianScore gaussianScore() {return(stfData.max.gaussian);}
00202 PulseScore pulseScore() {return(stfData.max.pulse);}
00207 TripletScore tripletScore() {return(stfData.max.triplet);}
00209 int userID() {return(uifData.id);}
00211 int key() {return(uifData.key);}
00213 QString userEmailAddress() {return(uifData.email_addr);}
00215 QString userName() {return(uifData.name);}
00217 QString userHomepage() {return(uifData.url);}
00219 QString userCountry() {return(uifData.country);}
00221 int userPostalCode() {return(uifData.postal_code);}
00225 bool showName() {return(uifData.show_name);}
00229 bool showEmail() {return(uifData.show_email);}
00231 int venue() {return(uifData.venue);}
00235 QString registerTime() {return(uifData.register_time);}
00240 QString registerTimeString();
00245 QString lastWUTime() {return(uifData.last_wu_time);}
00250 QString lastResultTime() {return(uifData.last_result_time);}
00255 QString lastResultTimeString();
00259 int numberOfWUs() {return(uifData.nwus);}
00263 int numberOfResults() {return(uifData.nresults);}
00266 double totalCPUTime() {return(uifData.total_cpu);}
00270 double averageCPUTime();
00272 double paramsIndex() {return(uifData.params_index);}
00276 QString task() {return(wufData.task);}
00280 int wuVersion() {return(wufData.version);}
00282 QString wuName() {return(wufData.name);}
00284 QString wuDataType() {return(wufData.data_type);}
00286 int wuDataClass() {return(wufData.data_class);}
00288 QString splitterVersion() {return(wufData.splitter_version);}
00292 double startRA() {return(wufData.start_ra);}
00296 double startDec() {return(wufData.start_dec);}
00300 double endRA() {return(wufData.end_ra);}
00304 double endDec() {return(wufData.end_dec);}
00308 double angleRange() {return(wufData.angle_range);}
00320 double teraFlops(double ar, int version=0);
00322 double megaFlopsPerSecond();
00326 QString timeRecorded() {return(wufData.time_recorded);}
00331 QString timeRecordedString();
00333 double centerFrequency() {return(wufData.subband_center/1.0e9);}
00335 double baseFrequency() {return(wufData.subband_base/1.0e9);}
00337 double sampleRate() {return(wufData.subband_sample_rate);}
00339 int wuFFTLength() {return(wufData.fft_len);};
00341 int wuIFFTLength() {return(wufData.ifft_len);}
00343 int subbandNumber() {return(wufData.subband_number);}
00347 QString receiver() {return(wufData.receiver);}
00349 int numberOfSamples() {return(wufData.nsamples);}
00351 QString tapeVersion() {return(wufData.tape_version);}
00355 int numberOfCoords() {return(wufData.num_positions);}
00360 QStringList coords() {return(wufData.coordinates);}
00366 int clientVersion() {return(sahVersion);}
00373 bool exists(int sah);
00385 bool isClientRunning(pid_t pid = 0, bool checkCmdLine = false);
00387 int clientState() const {return cltState;}
00390 void setClientState(int st) {cltState = st;}
00400 QString readEntry(int sah, const QString& e);
00405 static void initWUScore(WUScore* score);
00413 static QString convertTime(double time, bool hms);
00421 static QString convertRAToString(double ra);
00429 static QString convertDecToString(double dec);
00433 enum SetiStatus {Stopped, Running, Finished, Loading};
00437 enum sahID {SC_StateFile, SC_UserInfoFile,
00438 SC_WorkUnitFile, SC_ResultFile,
00439 SC_ResultHeaderFile, SC_WtempFile};
00440
00441 public slots:
00449 int updateSahData(bool sig=true);
00450
00451 protected:
00452 int refreshIval;
00453 int sahVersion;
00454 bool versionRead;
00455 QString setiDirectory;
00456 QString stfFileName;
00457 QString wufFileName;
00458 QString uifFileName;
00459 QString rsfFileName;
00460 QString rhdFileName;
00461 QString wtpFileName;
00462 QStringList stateFile;
00463 QStringList workunitFile;
00464 QStringList userinfoFile;
00465 QString stfTimeStamp;
00466 QString wufTimeStamp;
00467 QString uifTimeStamp;
00468 StateFileData stfData;
00469 UserInfoData uifData;
00470 WorkUnitData wufData;
00471 int cltState;
00472 int cltPid;
00473
00474 protected:
00482 int readStateFile(bool sig=true);
00490 int readWorkUnitFile(bool sig=true);
00498 int readUserInfoFile(bool sig=true);
00509 int readSahFile(const QString& file, QStringList& list,
00510 const QString& endId=0);
00520 QString readEntry(const QString& fn, const QString& e);
00529 static QString readEntry(QStringList& list, const QString& e);
00531 void initStateFileData();
00533 void initWorkUnitData();
00535 void initUserInfoData();
00542 void scanStateFile(bool sig=true);
00548 void scanSpikeData(bool sig=true);
00554 void scanGaussianData(bool sig=true);
00560 void scanPulseData(bool sig=true);
00566 void scanTripletData(bool sig=true);
00568 void scanGaussianGraphData();
00570 bool scanPulseGraphData();
00572 bool scanTripletGraphData();
00579 void scanUserInfoData(bool sig=true);
00586 void scanWorkUnitData(bool sig=true);
00592 int readClientVersion();
00599 void initAllData(bool sig=false);
00604 virtual void timerEvent(QTimerEvent* e);
00610 int checkClientState();
00615 int getClientPid();
00624 int checkClientStatePassive();
00633 static int readDataString(unsigned short int data[], QString& str, int cnt);
00635 void checkFileExistence();
00636
00637 private:
00638 int refTimer;
00639 int sttTimer1;
00640 int sttTimer2;
00641 double oldProgress;
00642 bool stfEx;
00643 bool uifEx;
00644 bool wufEx;
00645 bool rsfEx;
00646 bool wtpEx;
00647 bool rhdEx;
00648 time_t pidTimeStamp;
00649 pid_t pidbuf;
00650
00651 signals:
00655 void progressIncreased();
00662 void progressDecreased();
00668 void newSpike(SpikeScore sps);
00674 void newGaussian(GaussianScore gas);
00680 void newPulse(PulseScore pus);
00686 void newTriplet(TripletScore trs);
00690 void newWorkUnit(WorkUnitData wud);
00695 void updatedWorkUnitData();
00700 void updatedUserInfoData();
00708 void stateChanged(int state, int loadsize=0);
00709 };
00710
00711 #endif
This file is part of the documentation for SetiContainer API Version 0.5.