Brief description of class still missing. More...
#include <Acquisition.h>
Public Member Functions | |
| Acquisition () | |
| Acquisition (double timeScale=1.0) | |
| Histogram | apparentResistivityHistogram () const |
| Histogram | currentHistogram () const |
| const QString & | fileName () const |
| bool | read (QString fileName=QString::null) |
| void | setDelay (double d) |
| bool | setSignals (SubSignalPool subPool) |
| void | startStations (QString stationList) |
| void | status () |
| void | stop () |
| void | stopStations (QString stationList) |
| Histogram | variabilityHistogram () const |
| Curve< Point2D > | varVoltageCurve () const |
| Histogram | voltageHistogram () const |
| void | write (QTextStream &s, double voltageThreshold, double variabilityThreshold) const |
| ~Acquisition () | |
| ~Acquisition () | |
Static Public Member Functions | |
| static const QDir & | destination () |
| static bool | setDestination (QString destDir) |
Protected Member Functions | |
| virtual void | run () |
Brief description of class still missing.
Full description of class still missing
| Acquisition::Acquisition | ( | double | timeScale = 1.0 | ) |
References QGpCoreTools::Histogram::addValue(), QGpCoreTools::LogScale, QGpCoreTools::Histogram::setSampling(), and TRACE.
Referenced by Results::Results().
{
TRACE;
Histogram h;
h.setSampling(200, 0.5, 2000.0, LogScale);
for(QList<Measurement *>::const_iterator it=_measurements.begin(); it!=_measurements.end(); it++) {
h.addValue((*it)->apparentResistivity());
}
return h;
}
| Histogram Acquisition::currentHistogram | ( | ) | const |
References QGpCoreTools::Histogram::addValue(), QGpCoreTools::LogScale, QGpCoreTools::Histogram::setSampling(), and TRACE.
Referenced by Results::Results().
{
TRACE;
Histogram h;
h.setSampling(200, 0.05, 1000.0, LogScale);
for(QList<Measurement *>::const_iterator it=_measurements.begin(); it!=_measurements.end(); it++) {
h.addValue((*it)->current());
}
return h;
}
| static const QDir& Acquisition::destination | ( | ) | [inline, static] |
{return _destDir;}
| const QString& Acquisition::fileName | ( | ) | const [inline] |
Referenced by read(), and Results::Results().
{return _fileName;}
| bool Acquisition::read | ( | QString | fileName = QString::null | ) |
References HeaderMap::count(), QGpCoreTools::LineParser::count(), fileName(), HeaderMap::isOk(), HeaderMap::map(), HeaderMap::maximumCount(), HeaderMap::missingFields(), MSG_ID, Measurement::set(), QGpCoreTools::LineParser::setDelimiters(), QGpCoreTools::LineParser::setSkipEmpty(), QGpCoreTools::LineParser::setString(), QGpCoreTools::tr(), and TRACE.
Referenced by main().
{
TRACE;
if(fileName.isEmpty()) {
fileName=Message::getOpenFileName(tr("Open ABEM output file"),
tr("ABEM output file (*.txt)"));
if(fileName.isEmpty()) {
return false;
}
}
_fileName=fileName;
QFile f(fileName);
if(!f.open(QIODevice::ReadOnly)) {
Message::warning(MSG_ID, tr("Open ABEM output file"),
tr("Cannot open file %1").arg(fileName), Message::cancel());
return false;
}
QTextStream s(&f);
LineParser parser;
parser.setDelimiters("\t");
parser.setSkipEmpty(false);
int lineNumber=1;
HeaderMap header;
while(!s.atEnd()) {
QString line=s.readLine();
parser.setString(line);
if(parser.count()>=HeaderMap::maximumCount() &&
header.map(parser) &&
header.count()>=12) { // Matched at least A(x), B(x),...
break;
} else if(!line.isEmpty()) {
switch(line.at(0).unicode()) {
case 'A':
if(line.startsWith("ArrayCode:")) {
_arrayCode=line.section(":", 1,1).trimmed().toInt();
}
case 'P':
if(line.startsWith("Project name:")) {
_projectName=line.section(":", 1,1).trimmed();
}
case 'T':
if(line.startsWith("Task Name:")) {
_taskName=line.section(":", 1,1).trimmed();
}
case 'S':
if(line.startsWith("Smallest electrode spacing:")) {
_minimumElectrodeSpacing=line.section(":", 1,1).trimmed().toDouble();
}
}
}
lineNumber++;
}
if(!header.isOk()) {
Message::warning(MSG_ID, tr("Open ABEM output file"),
tr("Cannot find header line or this(these) fields is(are) missing:\n"
"[header line identified at line %1]\n"
"%2")
.arg(lineNumber).arg(header.missingFields()), Message::cancel());
return false;
}
int columnCount=parser.count();
lineNumber++;
while(!s.atEnd()) {
QString line=s.readLine();
parser.setString(line);
if(parser.count()!=columnCount) {
break;
}
Measurement * m=new Measurement;
if(m->set(parser, header, lineNumber)) {
_measurements.append(m);
} else {
delete m;
return false;
}
lineNumber++;
}
Message::information(MSG_ID, tr("Open ABEM output file"),
tr("Read %1 measurements").arg(_measurements.count()), Message::ok());
return true;
}
| void Acquisition::run | ( | ) | [protected, virtual] |
References GeopsyCore::TimeRange::lengthSeconds(), and TRACE.
{
TRACE;
mainLoop();
_globalTimer=new QTimer;
_globalTimer->setSingleShot(false);
connect(_globalTimer, SIGNAL(timeout()), this, SLOT(mainLoop()), Qt::DirectConnection);
_globalTimer->start((int)ceil(( _globalTimeWindow.lengthSeconds() + 2*_delay) * 1000.0/_timeScale) );
QThread::exec();
}
| void Acquisition::setDelay | ( | double | d | ) | [inline] |
Referenced by main().
{_delay=fabs(d);}
| bool Acquisition::setDestination | ( | QString | destDir | ) | [static] |
References TRACE.
Referenced by main().
{
TRACE;
_destDir.setPath(destDir);
if(_destDir.exists()) {
QStringList filters;
filters.append("*.mseed");
QStringList files=_destDir.entryList(filters);
for(QStringList::iterator it=files.begin();it!=files.end();it++) {
_destDir.remove( *it);
}
return true;
} else {
return false;
}
}
| bool Acquisition::setSignals | ( | SubSignalPool | subPool | ) |
References GeopsyCore::StationList::addSignals(), QGpCoreTools::endl(), GeopsyCore::StationList::hasAllComponents(), ArrayCore::ArrayStations::hasCompatibleStations(), QGpCoreTools::log(), GeopsyCore::TimeRange::setEnd(), GeopsyCore::TimeRange::setStart(), AcquisitionSignals::setT0(), GeopsyCore::TimeRange::start(), QGpCoreTools::tr(), and TRACE.
Referenced by main().
{
TRACE;
QString log;
if( !_array.addSignals(&subPool , &log) ||
!_array.hasAllComponents(&log) ||
!_array.hasCompatibleStations(&log) ) {
App::stream() << log << endl;
return false;
}
if(_array.count()<2) {
App::stream() << tr("Creating array: found less than 2 stations." ) << endl;
return false;
}
log += tr( "Found %1 different stations\n" ).arg(_array.count());
App::stream() << log << endl;
int n=_array.count();
for(int i=0;i<n;i++) {
AcquisitionSignals * stat=new AcquisitionSignals(_array.at(i), _timeScale);
_stations.append(stat);
}
// Set available signals for each station
double globalMinTime=1e99;
double globalMaxTime=-1e99;
/*WindowingParameters param;
param.setNComponents(_array.nComponents());
param.setNStations(_array.count());
param.rawSignal.doIt=false;
param.filtSignal.doIt=false;
param.percClip=100;*/
for(int i=0;i<n;i++) {
double t1, t2;
t1=_array.at(i)->minTime();
if(t1<globalMinTime) globalMinTime=t1;
t2=_array.at(i)->maxTime();
if(t2>globalMaxTime) globalMaxTime=t2;
AcquisitionSignals * stat=_stations.at(i);
/*TimeRange tw(t1, t2);
AcquisitionSignals * stat=_stations.at(i);
//SparseTimeRange stat->originalSignals()->timeRange(tw) const;
//stat->setRange(tw);
//stat->setKeep(param,i);
stat->setProcessed(tw, 0);*/
stat->setT0(t1);
}
_globalTimeWindow.setStart(globalMinTime);
_globalTimeWindow.setEnd(globalMaxTime);
for(int i=0;i<n;i++) {
_stations.at(i)->setGlobalT0(_globalTimeWindow.start());
}
return true;
}
| void Acquisition::startStations | ( | QString | stationList | ) |
References GeopsyCore::StationSignals::name(), GeopsyCore::StationProcessSignals::originalSignals(), AcquisitionSignals::setOn(), and TRACE.
Referenced by main().
{
TRACE;
QStringList stations=stationList.split(",", QString::SkipEmptyParts);
bool all=stationList=="all";
int n=_array.count();
for(QStringList::iterator it=stations.begin();it!=stations.end();it++) {
for(int i=0;i<n;i++) {
AcquisitionSignals * s=_stations.at(i);
if(all || s->originalSignals()->name()==*it) {
s->setOn(true);
}
}
}
}
| void Acquisition::status | ( | ) |
| void Acquisition::stop | ( | ) |
References QGpCoreTools::Thread::sleep(), and TRACE.
Referenced by main().
{
TRACE;
_globalTimer->stop();
int n=_array.count();
for(int i=0;i<n;i++) {
_stations.at(i)->stop();
}
exit();
while(isRunning()) {
CoreApplication::sleep(500);
QCoreApplication::processEvents();
}
}
| void Acquisition::stopStations | ( | QString | stationList | ) |
References GeopsyCore::StationSignals::name(), GeopsyCore::StationProcessSignals::originalSignals(), AcquisitionSignals::setOn(), and TRACE.
Referenced by main().
{
TRACE;
QStringList stations=stationList.split(",", QString::SkipEmptyParts);
bool all=stationList=="all";
int n=_array.count();
for(QStringList::iterator it=stations.begin();it!=stations.end();it++) {
for(int i=0;i<n;i++) {
AcquisitionSignals * s=_stations.at(i);
if(all || s->originalSignals()->name()==*it) {
s->setOn(false);
}
}
}
}
| Histogram Acquisition::variabilityHistogram | ( | ) | const |
References QGpCoreTools::Histogram::addValue(), QGpCoreTools::LogScale, QGpCoreTools::Histogram::setSampling(), and TRACE.
Referenced by Results::Results().
{
TRACE;
Histogram h;
h.setSampling(200, 0.05, 2000.0, LogScale);
for(QList<Measurement *>::const_iterator it=_measurements.begin(); it!=_measurements.end(); it++) {
h.addValue((*it)->variability());
}
return h;
}
| Curve< Point2D > Acquisition::varVoltageCurve | ( | ) | const |
References QGpCoreTools::Curve< pointType >::append(), TRACE, Measurement::variability(), and Measurement::voltage().
Referenced by Results::Results().
{
TRACE;
Curve<Point2D> c;
for(QList<Measurement *>::const_iterator it=_measurements.begin(); it!=_measurements.end(); it++) {
const Measurement& m=**it;
c.append(Point2D(1e3*m.voltage(), m.variability()));
}
return c;
}
| Histogram Acquisition::voltageHistogram | ( | ) | const |
References QGpCoreTools::Histogram::addValue(), QGpCoreTools::LogScale, QGpCoreTools::Histogram::setSampling(), and TRACE.
Referenced by Results::Results().
{
TRACE;
Histogram h;
h.setSampling(200, 0.005, 20000.0, LogScale);
for(QList<Measurement *>::const_iterator it=_measurements.begin(); it!=_measurements.end(); it++) {
h.addValue(1e3*(*it)->voltage());
}
return h;
}
| void Acquisition::write | ( | QTextStream & | s, |
| double | voltageThreshold, | ||
| double | variabilityThreshold | ||
| ) | const |
References Measurement::a(), Measurement::b(), Measurement::m(), Measurement::n(), Measurement::resistance(), TRACE, Measurement::variability(), Measurement::voltage(), QGpCoreTools::Point2D::x(), and QGpCoreTools::Point::z().
Referenced by Results::exportDAT().
{
TRACE;
// Count good measurements
int n=0;
for(QList<Measurement *>::const_iterator it=_measurements.begin(); it!=_measurements.end(); it++) {
const Measurement& m=**it;
if(m.voltage()>=voltageThreshold &&
m.variability()<=variabilityThreshold) {
n++;
}
}
s << _projectName << "_" << _taskName << "\n"
<< _minimumElectrodeSpacing << "\n"
"11\n"
<< _arrayCode << "\n"
"Type of measurement (0=app.resistivity,1=resistance)\n"
"1\n"
<< n << "\n"
<< "2\n"
"0\n";
for(QList<Measurement *>::const_iterator it=_measurements.begin(); it!=_measurements.end(); it++) {
const Measurement& m=**it;
if(m.voltage()>=voltageThreshold &&
m.variability()<=variabilityThreshold) {
s << "4 " << m.a().x() << " " << m.a().z() << " "
<< m.b().x() << " " << m.b().z() << " "
<< m.m().x() << " " << m.m().z() << " "
<< m.n().x() << " " << m.n().z() << " "
<< m.resistance() << "\n";
}
}
s << "0\n0\n0\n0\n";
}