diff --git a/RTCP/Cobalt/OutputProc/src/MSWriterCorrelated.cc b/RTCP/Cobalt/OutputProc/src/MSWriterCorrelated.cc index 52004bb85dcfcc0d5fd7afc190f4a8adf781fea5..d57c038002ea7c376cf599f9447a43b758c3d287 100644 --- a/RTCP/Cobalt/OutputProc/src/MSWriterCorrelated.cc +++ b/RTCP/Cobalt/OutputProc/src/MSWriterCorrelated.cc @@ -24,6 +24,7 @@ #include <sys/types.h> #include <fcntl.h> +#include <cstdio> #include <boost/format.hpp> #include <boost/lexical_cast.hpp> @@ -47,7 +48,8 @@ namespace LOFAR MSWriterCorrelated::MSWriterCorrelated (const std::string &logPrefix, const std::string &msName, const Parset &parset, unsigned subbandIndex) : - MSWriterFile(str(format("%s/table.f0data") % msName)), + // Write the data to a temporary file, until we have a MeasurementSet we can move it into. + MSWriterFile(str(format("%s-table.f0data") % msName)), itsLogPrefix(logPrefix), itsMSname(msName), itsParset(parset), @@ -60,7 +62,7 @@ namespace LOFAR // Create Sequence file if (LofarStManVersion > 1) { - string seqfilename = str(format("%s/table.f0seqnr") % msName); + string seqfilename = str(format("%s-table.f0seqnr") % msName); try { itsSequenceNumbersFile = new FileStream(seqfilename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); @@ -73,7 +75,7 @@ namespace LOFAR void MSWriterCorrelated::init() { - // Creaate MeasurementSet + // Create MeasurementSet #if defined HAVE_AIPSPP MeasurementSetFormat myFormat(itsParset, 512); @@ -81,6 +83,16 @@ namespace LOFAR LOG_DEBUG_STR(itsLogPrefix << "MeasurementSet created"); #endif // defined HAVE_AIPSPP + + // Move data file into the measurement set + if (rename(str(format("%s-table.f0data") % itsMSname).c_str(), + str(format("%s/table.f0data") % itsMSname).c_str()) < 0) + THROW_SYSCALL(str(format("rename(%s-table.f0data, %s/table.f0data)") % itsMSname % itsMSname)); + + // Move sequence file into the measurement set + if (rename(str(format("%s-table.f0seqnr") % itsMSname).c_str(), + str(format("%s/table.f0seqnr") % itsMSname).c_str()) < 0) + THROW_SYSCALL(str(format("rename(%s-table.f0seqnr, %s/table.f0seqnr)") % itsMSname % itsMSname)); } diff --git a/RTCP/Cobalt/OutputProc/src/MeasurementSetFormat.cc b/RTCP/Cobalt/OutputProc/src/MeasurementSetFormat.cc index fdaae7cf6f00bbba545c436900048637bc2d6396..dac5383e4f9bc786cb312488b4408b48a60e3079 100644 --- a/RTCP/Cobalt/OutputProc/src/MeasurementSetFormat.cc +++ b/RTCP/Cobalt/OutputProc/src/MeasurementSetFormat.cc @@ -126,7 +126,7 @@ namespace LOFAR { ScopedLock scopedLock(sharedMutex); - /// First create a valid MeasurementSet with all required + /// Create the MeasurementSet with all required /// tables. Note that the MS object is destroyed immediately. createMSTables(MSname, subband); /// Next make a metafile which describes the raw datafile we're @@ -152,9 +152,12 @@ namespace LOFAR } SetupNewTable newtab(MSname, td, Table::New); + LofarStMan lofarstman; newtab.bindAll(lofarstman); + // MSLofar() constructor needs a NEW table, to avoid checks + // for subtables that aren't yet there. itsMS = new MSLofar(newtab); itsMS->createDefaultSubtables(Table::New); diff --git a/RTCP/Cobalt/OutputProc/test/tSubbandWriter.cc b/RTCP/Cobalt/OutputProc/test/tSubbandWriter.cc index 527aa4449d43b970bddd193b074b8ff4c9c0eeaf..24eee255d26f1177dfccb76dfae7db337de33384 100644 --- a/RTCP/Cobalt/OutputProc/test/tSubbandWriter.cc +++ b/RTCP/Cobalt/OutputProc/test/tSubbandWriter.cc @@ -70,14 +70,14 @@ SUITE(SubbandWriter) ps.add("Observation.nrBeams", "1"); ps.add("Observation.Beam[0].subbandList", "[0]"); ps.add("Observation.DataProducts.Output_Correlated.enabled", "true"); - ps.add("Observation.DataProducts.Output_Correlated.filenames", "[tWriter.out_raw]"); + ps.add("Observation.DataProducts.Output_Correlated.filenames", "[tSubbandWriter.out_raw]"); ps.add("Observation.DataProducts.Output_Correlated.locations", "[localhost:.]"); ps.add("Cobalt.OutputProc.StaticMetaDataDirectory", "tSubbandWriter.in_1"); ps.updateSettings(); } ~OneBeam() { - int dummy = system("rm -rf tWriter.out_raw"); + int dummy = system("rm -rf tSubbandWriter.out_raw"); (void)dummy; // satisfy compiler } @@ -97,7 +97,6 @@ SUITE(SubbandWriter) { # pragma omp section { - w.init(); w.process(); } @@ -119,7 +118,7 @@ SUITE(SubbandWriter) // verify output { - FileStream f("tWriter.out_raw/table.f0data"); + FileStream f("tSubbandWriter.out_raw/table.f0data"); CorrelatedData data(ps.nrMergedStations(), ps.settings.correlator.nrChannels, ps.settings.correlator.nrSamplesPerIntegration(), heapAllocator, 512); @@ -140,7 +139,6 @@ SUITE(SubbandWriter) { # pragma omp section { - w.init(); w.process(); } @@ -165,7 +163,7 @@ SUITE(SubbandWriter) // list failures BEFORE obs { - Table tab("tWriter.out_raw/LOFAR_ANTENNA_FIELD"); + Table tab("tSubbandWriter.out_raw/LOFAR_ANTENNA_FIELD"); ROArrayColumn<Bool> flagCol(tab, "ELEMENT_FLAG"); if (flagCol.nrow() == 0) { @@ -193,7 +191,7 @@ SUITE(SubbandWriter) // list failures DURING obs { - Table tab("tWriter.out_raw/LOFAR_ELEMENT_FAILURE"); + Table tab("tSubbandWriter.out_raw/LOFAR_ELEMENT_FAILURE"); ROTableRow row(tab); @@ -216,7 +214,7 @@ SUITE(SubbandWriter) int main() { - INIT_LOGGER("tWriter"); + INIT_LOGGER("tSubbandWriter"); omp_set_nested(true);