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; }