Exemple #1
0
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void Picker::process(const Record *record, const DoubleArray &) {
	// Sampling frequency has not been set yet
	if ( _stream.fsamp == 0.0 ) {
		terminate();
		return;
	}

	// Error occured while feeding a record or already finished?
	if ( isFinished() ) return;

	// Process unless the available time window does not include the
	// requested time window
	if ( !dataTimeWindow().contains(timeWindow())) return;

	// data window relative to continuous()->startTime()
	double relTriggerTime = _trigger - dataTimeWindow().startTime();

	double dt1 = relTriggerTime + _config.signalBegin;
	double dt2 = relTriggerTime + _config.signalEnd;
	double snr = -1;

	// Calculate data array indicies of requested time window
	int i1 = int(dt1*_stream.fsamp);
	int i2 = int(dt2*_stream.fsamp);

	// Calculate the initial trigger time
	int triggerIdx = relTriggerTime*_stream.fsamp;
	int lowerUncertainty = -1;
	int upperUncertainty = -1;
	OPT(Polarity) polarity;

	if ( !calculatePick(continuousData().size(), continuousData().typedData(),
	                    i1, i2, triggerIdx, lowerUncertainty, upperUncertainty,
	                    snr, polarity) ) {
		setStatus(Error, 0.0);
		return;
	}

	Core::Time pickTime = dataTimeWindow().startTime() + Core::TimeSpan(triggerIdx/_stream.fsamp);

	// Debug: print the time difference between the pick and the initial trigger
	SEISCOMP_DEBUG("Picker::process repick result: dt=%.3f  snr=%.2f",
	               (double)(pickTime - _trigger), snr);

	if ( snr >= _config.snrMin ) {
		setStatus(Finished, 100.);
		Result res;
		res.record = record;
		res.snr = snr;
		res.time = pickTime;
		res.timeLowerUncertainty = (double)lowerUncertainty / _stream.fsamp;
		res.timeUpperUncertainty = (double)upperUncertainty / _stream.fsamp;
		res.timeWindowBegin = (double)(timeWindow().startTime() - pickTime);
		res.timeWindowEnd = (double)(timeWindow().endTime() - pickTime);
		res.polarity = polarity;
		emitPick(res);
	}
	else
		setStatus(LowSNR, snr);
}
Exemple #2
0
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
void Picker::writeData() {
	if ( !_stream.lastRecord ) return;

	std::ofstream of((_stream.lastRecord->streamID() + "-postpick.data").c_str());

	of << "#sampleRate: " << _stream.lastRecord->samplingFrequency() << std::endl;

	for ( int i = 0; i < continuousData().size(); ++i )
		of << i << "\t" << continuousData()[i] << std::endl;
	of.close();
}
// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
const DoubleArray *AmplitudeProcessor::processedData(Component comp) const {
	if ( comp < VerticalComponent || comp > SecondHorizontalComponent )
		return NULL;

	if ( comp != (Component)_usedComponent ) return NULL;

	return &continuousData();
}