Esempio n. 1
0
int partition(const vector<string>& args)
{
    if (args.size() != 2) throw runtime_error(usage_);
    const string& filename = args[0];
    int partitionCount = atoi(args[1].c_str());
    if (partitionCount < 2) 
        throw runtime_error("Nothing to do.");

    TransientData td(filename); 
    if (td.data().size() % partitionCount != 0) 
        throw runtime_error("Must choose an even partition.");

    int partitionSize = td.data().size()/partitionCount;
    double partitionDuration = td.observationDuration()/partitionCount;

    for (int i=0; i<partitionCount; i++)
    {
        TransientData partition;
        partition.startTime(td.startTime() + partitionDuration*i);
        partition.observationDuration(partitionDuration); 
        partition.A(td.A());
        partition.B(td.B());
        partition.data().resize(partitionSize);
        copy(td.data().begin()+(partitionSize*i), 
             td.data().begin()+(partitionSize*(i+1)), 
             partition.data().begin());
        partition.write(partitionFilename(filename, i, digitCount(partitionCount-1)));
    }

    return 0;
}