5 #ifndef DP3_STEPS_MSWRITER_H_
6 #define DP3_STEPS_MSWRITER_H_
13 #include <aocommon/lane.h>
15 #include <casacore/tables/Tables/ColumnDesc.h>
16 #include <casacore/tables/Tables/ScalarColumn.h>
17 #include <casacore/tables/Tables/ArrayColumn.h>
35 const std::string& type_name,
const std::string& instance_name,
36 const casacore::Record& record = casacore::Record());
59 const std::string& prefix);
69 bool process(std::unique_ptr<base::DPBuffer> buffer)
override;
75 void show(std::ostream&)
const override;
81 void showTimings(std::ostream&,
double duration)
const override;
88 const std::string& out_col_name,
93 const casacore::MDirection& new_phase_dir);
111 void CreateMs(
const std::string& out_name,
unsigned int tile_size,
112 unsigned int tile_n_chan);
115 void CopySubTables(casacore::Table& original_table);
134 void CopyMeta(
const casacore::Table& in, casacore::Table& out,
135 bool copy_time_info);
138 template <
typename T>
139 void FillSca(
const T& value, casacore::Table& out,
140 const casacore::String& column_name) {
141 casacore::ScalarColumn<T> out_col(out, column_name);
142 out_col.fillColumn(value);
146 template <
typename T>
147 void FillArr(
const casacore::Array<T>& value, casacore::Table& out,
148 const casacore::String& column_name) {
149 casacore::ArrayColumn<T> out_col(out, column_name);
150 out_col.fillColumn(value);
154 template <
typename T>
155 void CopySca(
const casacore::Table& in, casacore::Table& out,
156 const casacore::String& column_name) {
157 casacore::ROScalarColumn<T> in_col(in, column_name);
158 casacore::ScalarColumn<T> out_col(out, column_name);
159 out_col.putColumn(in_col.getColumn());
163 template <
typename T>
164 void CopyArr(
const casacore::Table& in, casacore::Table& out,
165 const casacore::String& column_name) {
166 casacore::ROArrayColumn<T> in_col(in, column_name);
167 casacore::ArrayColumn<T> out_col(out, column_name);
168 out_col.putColumn(in_col.getColumn());
174 std::string out_name_;
176 std::string chunk_name_;
178 common::ParameterSet parset_;
179 casacore::String data_col_name_;
180 casacore::String flag_col_name_;
181 casacore::String weight_col_name_;
183 bool copy_corr_data_;
184 bool copy_model_data_;
185 unsigned int tile_size_;
186 unsigned int tile_n_chan_;
187 unsigned int nr_times_flush_;
188 unsigned int nr_done_;
191 double chunk_duration_ = 0.0;
193 double chunk_start_time_ = 0.0;
194 size_t current_chunk_index_ = 0;
196 std::string vds_dir_;
197 std::string cluster_desc_;
198 base::StManParsetKeys st_man_keys_;
202 bool scalar_flags_ = METADATA_COMPRESSION_DEFAULT;
203 bool uvw_compression_ = METADATA_COMPRESSION_DEFAULT;
204 bool antenna_compression_ = METADATA_COMPRESSION_DEFAULT;
234 aocommon::Lane<std::unique_ptr<base::DPBuffer>> write_queue_{3};
237 void CreateTask(std::unique_ptr<base::DPBuffer> buffer);
243 std::thread write_queue_thread_;
246 void WriteQueueProcess();
251 bool use_write_thread_{
false};
260 bool is_write_thread_active_{
false};
263 void StopWriteThread();
Buffer holding the data of a timeslot/band.
Definition: DPBuffer.h:92
General info about DP3 data processing attributes like averaging.
Definition: DPInfo.h:35
Implements a map of Key-Value pairs.
Definition: ParameterSet.h:31
DP3 step writing to an MS.
Definition: MSWriter.h:56
static void UpdateSpw(const std::string &out_name, const base::DPInfo &info)
Update the SPECTRAL_WINDOW table for averaged channels.
void finish() override
Finish the processing of this step and subsequent steps.
MSWriter(const std::string &out_name, const common::ParameterSet &, const std::string &prefix)
static void UpdateBeam(casacore::Table &main_table, const std::string &out_col_name, const base::DPInfo &info)
static void UpdateObs(const std::string &out_name, const base::DPInfo &info)
Update the OBSERVATION table with the correct start and end time.
void updateInfo(const base::DPInfo &) override
Update the general info.
static std::string InsertNumberInFilename(const std::string &name, size_t number)
void show(std::ostream &) const override
Show the step parameters.
static void WriteHistory(casacore::Table &ms, const common::ParameterSet &parset)
Write the parset info into the HISTORY table of the MS.
void showTimings(std::ostream &, double duration) const override
Show the timings.
common::Fields getRequiredFields() const override
Get the fields required by the current step.
Definition: MSWriter.h:63
static void UpdatePhaseCentre(const std::string &out_name, const casacore::MDirection &new_phase_dir)
Update the FIELD table with the new phase center.
bool process(std::unique_ptr< base::DPBuffer > buffer) override
Base class for output steps.
Definition: OutputStep.h:15
static constexpr dp3::common::Fields kWeightsField
Definition: Step.h:64
static constexpr dp3::common::Fields kUvwField
Definition: Step.h:66
static constexpr dp3::common::Fields kDataField
Definition: Step.h:60
static constexpr dp3::common::Fields kFlagsField
Definition: Step.h:62
Definition: InputStep.h:21
BaseTimer< std::chrono::steady_clock > NSTimer
Definition: Timer.h:129
std::unique_ptr< casacore::DataManager > MakeStMan(const std::string &type_name, const std::string &instance_name, const casacore::Record &record=casacore::Record())
This file has generic helper routines for testing steps.
Definition: AntennaConfig.h:53