Subsetting data series is normally done through a sequence mask. The following methods show the construction of a sequence mask.
SequenceMask msk(int n_in_seq, bool accept); #include "Qdos.h" QdRScalar_var xdo = QdRScalar::narrow((* object_list)[0]); int ndata = xdo->sequence_size(); SequenceMask msk(ndata, true);
SequenceMask msk(const SequenceMask &mask);
The method get_mask
operates on sequence types to construct a mask based on some criterion
applicable to the particular sequence type. This generally takes the form
SequenceMask msk(QdSequence_var seq->get_mask(condition));
The constructor for a sequence mask here creates a mask msk using
the get_mask() method for a QdSequence object. The possible values of
argument condition depend on the sequence type used. Some example
conditions are given below.
QdRScalarSeq::InRange(double x1, double x2) #include "Qdos.h" double xmin = 0.0; double xmax = 100.0; QdRScalarSeq_var xdo = QdRScalarSeq::narrow(input1); SequenceMask msk( xdo->get_mask(InRange(xmin, xmax)) );
QdTimeSeq::InRange
#include "qplug_if.h"
#include "Qdos.h"
#include "QsasUtils.h"
using namespace QSAS;
QdObject_var input1 = (* object_list)[1];
QdObject_var input2 = (* object_list)[2];
QdTimeInterval_var interval = get_timeinterval(input1);
QdTimeSeq_var tt = get_timetags(input2);
// create mask based on timetags from input 2
// that lie in interval set by input 1
SequenceMask msk(tt->get_mask(QdTimeSeq::InRange(interval->start(),
interval->end())));
EQ, NEQ, LE, GE, LT, GT
#include "qplug_if.h"
#include "Qdos.h"
#include "QsasUtils.h"
using namespace QSAS;
QdTime_var tc = new QdTime("02-Jan-2000 12:00:00.000");
QdTimeSeq_var tt_in = get_timetags((* object_list)[2]);
// create mask for timetags less than specified value
SequenceMask msk(tt_in->get_mask( QdTimeSeq::LT( tc )));
(SequenceMask) msk[n] = (bool) accept;
#include "Qdos.h"
QdRScalar_var xdo = QdRScalar::narrow((* object_list)[0]);
int ndata = xdo->sequence_size();
SequenceMask msk(ndata, true);
for(int i=0; i<ndata; i++)
{
// create mask that keeps only positive values
if( xdo[i] < 0 ) msk[i] = false;
}