Line data Source code
1 : //# MSTransformManager.h: This file contains the interface definition of the MSTransformManager class.
2 : //#
3 : //# CASA - Common Astronomy Software Applications (http://casa.nrao.edu/)
4 : //# Copyright (C) Associated Universities, Inc. Washington DC, USA 2011, All rights reserved.
5 : //# Copyright (C) European Southern Observatory, 2011, All rights reserved.
6 : //#
7 : //# This library is free software; you can redistribute it and/or
8 : //# modify it under the terms of the GNU Lesser General Public
9 : //# License as published by the Free software Foundation; either
10 : //# version 2.1 of the License, or (at your option) any later version.
11 : //#
12 : //# This library is distributed in the hope that it will be useful,
13 : //# but WITHOUT ANY WARRANTY, without even the implied warranty of
14 : //# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 : //# Lesser General Public License for more details.
16 : //#
17 : //# You should have received a copy of the GNU Lesser General Public
18 : //# License along with this library; if not, write to the Free Software
19 : //# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20 : //# MA 02111-1307 USA
21 : //# $Id: $
22 :
23 : #ifndef MSTransformManager_H_
24 : #define MSTransformManager_H_
25 :
26 : // To handle configuration records
27 : #include <casacore/casa/Containers/Record.h>
28 :
29 : // To handle variant parameters
30 : #include <stdcasa/StdCasa/CasacSupport.h>
31 :
32 : // Measurement Set Selection
33 : #include <casacore/ms/MSSel/MSSelection.h>
34 :
35 : // casacore::Data handling
36 : #include <mstransform/MSTransform/MSTransformDataHandler.h>
37 :
38 : // Regridding
39 : #include <mstransform/MSTransform/MSTransformRegridder.h>
40 :
41 : // VisibityIterator / VisibilityBuffer framework
42 : #include <msvis/MSVis/VisibilityIterator2.h>
43 : #include <msvis/MSVis/VisBuffer2.h>
44 : #include <msvis/MSVis/ViFrequencySelection.h>
45 :
46 : // TVI framework
47 : #include <msvis/MSVis/ViiLayerFactory.h>
48 : #include <msvis/MSVis/IteratingParameters.h>
49 : #include <msvis/MSVis/AveragingVi2Factory.h>
50 : #include <msvis/MSVis/LayeredVi2Factory.h>
51 : #include <mstransform/TVI/UVContSubTVI.h>
52 : #include <mstransform/TVI/PhaseShiftingTVI.h>
53 :
54 : // THis is needed just because of vi::AveragingTvi2::weightToSigma
55 : #include <msvis/MSVis/AveragingTvi2.h>
56 :
57 : // To apply hanning smooth
58 : #include <casacore/scimath/Mathematics/Smooth.h>
59 :
60 : // To apply fft shift
61 : #include <casacore/scimath/Mathematics/FFTServer.h>
62 :
63 : // To apply 1D interpolations
64 : #include <casacore/scimath/Mathematics/InterpolateArray1D.h>
65 :
66 : // single dish specific
67 : #include <casacore/scimath/Mathematics/Convolver.h>
68 :
69 : #include <map>
70 :
71 : namespace casa { //# NAMESPACE CASA - BEGIN
72 :
73 : // Forward declarations
74 : class MSTransformBufferImpl;
75 : class MSTransformIterator;
76 : class MSTransformIteratorFactory;
77 :
78 : // casacore::MS Transform Framework utilities
79 : namespace MSTransformations
80 : {
81 : // Returns 1/sqrt(wt) or -1, depending on whether wt is positive..
82 : casacore::Double wtToSigma(casacore::Double wt);
83 : casacore::Double sigmaToWeight(casacore::Double wt);
84 :
85 : enum InterpolationMethod {
86 : // nearest neighbour
87 : nearestNeighbour,
88 : // linear
89 : linear,
90 : // cubic
91 : cubic,
92 : // cubic spline
93 : spline,
94 : // fft shift
95 : fftshift
96 : };
97 :
98 : enum WeightingSetup {
99 : spectrum,
100 : flags,
101 : cumSum,
102 : flat,
103 : flagSpectrum,
104 : flagCumSum,
105 : flagsNonZero,
106 : flagSpectrumNonZero,
107 : flagCumSumNonZero
108 : };
109 :
110 : enum SmoothingSetup {
111 : plainSmooth,
112 : plainSmoothSpectrum
113 : };
114 :
115 : enum dataCol {
116 : visCube,
117 : visCubeCorrected,
118 : visCubeModel,
119 : visCubeFloat,
120 : weightSpectrum,
121 : sigmaSpectrum
122 : };
123 :
124 : enum weightTransformation {
125 :
126 : transformWeight,
127 : transformWeightIntoSigma,
128 : weightIntoSigma
129 : };
130 : }
131 :
132 : // Forward declarations
133 : struct spwInfo;
134 : struct channelContribution;
135 :
136 : // casacore::Map definition
137 : typedef map<casacore::MS::PredefinedColumns,casacore::MS::PredefinedColumns> dataColMap;
138 : typedef map< pair< pair<casacore::uInt,casacore::uInt> , casacore::uInt >,std::vector<casacore::uInt> > baselineMap;
139 : typedef map<casacore::uInt,map<casacore::uInt, casacore::uInt > > inputSpwChanMap;
140 : typedef map<casacore::uInt,vector < channelContribution > > inputOutputChanFactorMap;
141 : typedef map<casacore::uInt,pair < spwInfo, spwInfo > > inputOutputSpwMap;
142 :
143 : // Struct definition
144 : struct channelInfo {
145 :
146 : casacore::Int SPW_id;
147 : casacore::uInt inpChannel;
148 : casacore::uInt outChannel;
149 : casacore::Double CHAN_FREQ;
150 : casacore::Double CHAN_WIDTH;
151 : casacore::Double EFFECTIVE_BW;
152 : casacore::Double RESOLUTION;
153 : std::vector<casacore::Double> contribFrac;
154 : std::vector<casacore::Int> contribChannel;
155 : std::vector<casacore::Int> contribSPW_id;
156 :
157 0 : channelInfo()
158 0 : {
159 0 : SPW_id = -1;
160 0 : inpChannel = 0;
161 0 : outChannel = 0;
162 :
163 0 : CHAN_FREQ = -1;
164 0 : CHAN_WIDTH = -1;
165 0 : EFFECTIVE_BW = -1;
166 0 : RESOLUTION = -1;
167 0 : }
168 :
169 0 : bool operator<(const channelInfo& right_operand) const
170 : {
171 0 : if (CHAN_FREQ<right_operand.CHAN_FREQ)
172 : {
173 0 : return true;
174 : }
175 : else
176 : {
177 0 : return false;
178 : }
179 : }
180 :
181 : casacore::Double upperBound() const
182 : {
183 : return CHAN_FREQ + 0.5 * std::abs(CHAN_WIDTH);
184 : }
185 :
186 : casacore::Double lowerBound() const
187 : {
188 : return CHAN_FREQ - 0.5 * std::abs(CHAN_WIDTH);
189 : }
190 :
191 : casacore::Double overlap(const channelInfo& other) const
192 : {
193 :
194 : // The other channel completely covers this channel
195 : if ((lowerBound() <= other.lowerBound()) and (upperBound() >= other.upperBound()))
196 : {
197 : return 1.0;
198 : }
199 : // The other channel is completely covered by this channel
200 : else if ((lowerBound() >= other.lowerBound()) and (upperBound() <= other.upperBound()))
201 : {
202 : return CHAN_WIDTH/other.CHAN_WIDTH;
203 : }
204 : // Lower end of this channel is overlapping with the other channel
205 : else if (lowerBound() < other.lowerBound() && other.lowerBound() < upperBound() && upperBound() < other.upperBound())
206 : {
207 : return (upperBound()-other.lowerBound())/other.CHAN_WIDTH;
208 : }
209 : // Upper end of this channel is overlapping with the other channel
210 : else if (other.lowerBound() < lowerBound() && lowerBound() < other.upperBound() && other.upperBound() < upperBound())
211 : {
212 : return (other.upperBound()-lowerBound())/other.CHAN_WIDTH;
213 : }
214 : else
215 : {
216 : return 0.0;
217 : }
218 :
219 : }
220 : };
221 :
222 : struct channelContribution {
223 :
224 : casacore::Int inpSpw;
225 : casacore::uInt inpChannel;
226 : casacore::uInt outChannel;
227 : casacore::Double weight;
228 : bool flag;
229 :
230 : channelContribution()
231 : {
232 : inpSpw = 0;
233 : inpChannel = 0;
234 : outChannel = 0;
235 : weight = 0;
236 : flag = false;
237 : }
238 :
239 0 : channelContribution(casacore::Int inputSpw, casacore::uInt inputChannel, casacore::uInt outputChannel,casacore::Double fraction)
240 0 : {
241 0 : inpSpw = inputSpw;
242 0 : inpChannel = inputChannel;
243 0 : outChannel = outputChannel;
244 0 : weight = fraction;
245 0 : flag = true;
246 0 : }
247 : };
248 :
249 : struct spwInfo {
250 :
251 0 : spwInfo()
252 0 : {
253 0 : initialize(0);
254 0 : }
255 :
256 : spwInfo(casacore::uInt nChannels)
257 : {
258 : initialize(nChannels);
259 : }
260 :
261 0 : spwInfo(casacore::Vector<casacore::Double> &chanFreq,casacore::Vector<casacore::Double> &chanWidth)
262 0 : {
263 0 : reset(chanFreq,chanWidth);
264 0 : }
265 :
266 0 : void reset(casacore::Vector<casacore::Double> &chanFreq,casacore::Vector<casacore::Double> &chanWidth)
267 : {
268 0 : initialize(chanFreq.size());
269 0 : CHAN_FREQ = chanFreq;
270 0 : CHAN_WIDTH = chanWidth;
271 0 : update();
272 0 : }
273 :
274 0 : void initialize(casacore::uInt nChannels)
275 : {
276 0 : NUM_CHAN = nChannels;
277 0 : CHAN_FREQ.resize(nChannels,false);
278 0 : CHAN_WIDTH.resize(nChannels,false);
279 0 : EFFECTIVE_BW.resize(nChannels,false);
280 0 : RESOLUTION.resize(nChannels,false);
281 0 : CHAN_FREQ_aux.resize(nChannels,false);
282 0 : TOTAL_BANDWIDTH = 0;
283 0 : REF_FREQUENCY = 0;
284 0 : upperBound = 0;
285 0 : lowerBound = 0;
286 0 : }
287 :
288 0 : void update()
289 : {
290 0 : if (CHAN_FREQ(NUM_CHAN - 1) > CHAN_FREQ(0)) {
291 0 : upperBound = CHAN_FREQ(NUM_CHAN-1) + 0.5 * std::abs(CHAN_WIDTH(NUM_CHAN-1));
292 0 : lowerBound = CHAN_FREQ(0) - 0.5 * std::abs(CHAN_WIDTH(0));
293 : // ensure width is positive
294 0 : for (auto it = CHAN_WIDTH.begin(); it != CHAN_WIDTH.end(); ++it) {
295 0 : *it = std::abs(*it);
296 : }
297 : }
298 : else {
299 0 : upperBound = CHAN_FREQ(0) + 0.5 * std::abs(CHAN_WIDTH(0));
300 0 : lowerBound = CHAN_FREQ(NUM_CHAN-1) - 0.5 * std::abs(CHAN_WIDTH(NUM_CHAN-1));
301 : // ensure width is negative, may not be the case regridding (without combine)
302 : // preserves the sign but the width computation is always positive due to use
303 : // of original combine+regrid cvel code that converts all channels to ascending
304 0 : for (auto it = CHAN_WIDTH.begin(); it != CHAN_WIDTH.end(); ++it) {
305 0 : if (*it > 0) {
306 0 : *it = -*it;
307 : }
308 : }
309 : }
310 :
311 0 : TOTAL_BANDWIDTH = upperBound - lowerBound;
312 0 : REF_FREQUENCY = CHAN_FREQ(0);
313 :
314 0 : CHAN_FREQ_aux = CHAN_FREQ;
315 0 : EFFECTIVE_BW = CHAN_WIDTH;
316 0 : RESOLUTION = CHAN_WIDTH;
317 0 : }
318 :
319 0 : void resize(casacore::uInt nChannels)
320 : {
321 0 : NUM_CHAN = nChannels;
322 0 : CHAN_FREQ.resize(nChannels,true);
323 0 : CHAN_WIDTH.resize(nChannels,true);
324 0 : EFFECTIVE_BW.resize(nChannels,true);
325 0 : RESOLUTION.resize(nChannels,true);
326 0 : CHAN_FREQ_aux.resize(nChannels,true);
327 0 : update();
328 0 : }
329 :
330 : casacore::uInt NUM_CHAN;
331 : casacore::Vector<casacore::Double> CHAN_FREQ;
332 : casacore::Vector<casacore::Double> CHAN_WIDTH;
333 : casacore::Vector<casacore::Double> EFFECTIVE_BW;
334 : casacore::Vector<casacore::Double> RESOLUTION;
335 : casacore::Vector<casacore::Double> CHAN_FREQ_aux;
336 : casacore::Double TOTAL_BANDWIDTH;
337 : casacore::Double REF_FREQUENCY;
338 : casacore::Double upperBound;
339 : casacore::Double lowerBound;
340 : };
341 :
342 : // MSTransformManager definition
343 : class MSTransformManager
344 : {
345 :
346 : friend class MSTransformBufferImpl;
347 : friend class MSTransformIterator;
348 : friend class MSTransformIteratorFactory;
349 :
350 : public:
351 :
352 : MSTransformManager();
353 : MSTransformManager(casacore::Record configuration);
354 :
355 : virtual ~MSTransformManager();
356 :
357 : void initialize();
358 : void configure(casacore::Record &configuration);
359 :
360 : void open();
361 : void setup();
362 : void close();
363 :
364 : void setupBufferTransformations(vi::VisBuffer2 *vb);
365 : void fillOutputMs(vi::VisBuffer2 *vb);
366 :
367 : // For buffer handling classes (MSTransformIterator)
368 :
369 : // Needed by MSTransformIteratorFactory
370 0 : vi::VisibilityIterator2 * getVisIter() {return visibilityIterator_p;}
371 :
372 : // Needed by MSTransformIterator
373 0 : casacore::MeasurementSet * getOutputMs () {return outputMs_p;};
374 0 : casacore::String getOutputMsName () {return outMsName_p;};
375 :
376 : // Needed by MSTransformBuffer
377 0 : vi::VisBuffer2 * getVisBuffer() {return visibilityIterator_p->getVisBuffer();}
378 : casacore::IPosition getShape();
379 : casacore::IPosition getTransformedShape(vi::VisBuffer2 *inputVisBuffer);
380 :
381 : // Need by tMSTransformIterator
382 : dataColMap getDataColMap() { return dataColMap_p;}
383 :
384 :
385 :
386 : protected:
387 :
388 : void parseMsSpecParams(casacore::Record &configuration);
389 : void parseDataSelParams(casacore::Record &configuration);
390 : void parseFreqTransParams(casacore::Record &configuration);
391 : void parseChanAvgParams(casacore::Record &configuration);
392 : void parseRefFrameTransParams(casacore::Record &configuration);
393 : void parseFreqSpecParams(casacore::Record &configuration);
394 : void parsePhaseShiftParams(casacore::Record &configuration);
395 : void parseTimeAvgParams(casacore::Record &configuration);
396 : void parseCalParams(casacore::Record &configuration);
397 : void parseUVContSubParams(casacore::Record &configuration);
398 : void setSpwAvg(casacore::Record &configuration);
399 : void parsePolAvgParams(casacore::Record &configuration);
400 : void parsePointingsInterpolationParams(casacore::Record &configuration);
401 : void parseAtmCorrectionParams(casacore::Record &configuration);
402 :
403 : // From input MS
404 : void initDataSelectionParams();
405 : void getInputNumberOfChannels();
406 :
407 : // To re-grid SPW subtable
408 : void initRefFrameTransParams();
409 : casacore::MFrequency::Types determineInputRefFrame();
410 : casacore::MDirection determinePhaseCenter();
411 : void regridSpwSubTable();
412 : void regridAndCombineSpwSubtable();
413 : /// Regrids one SPW
414 : void regridSpwAux(casacore::Int spwId, casacore::MFrequency::Types spwInputRefFrame,
415 : casacore::Vector<casacore::Double> &inputCHAN_FREQ,
416 : casacore::Vector<casacore::Double> &inputCHAN_WIDTH,
417 : casacore::Vector<casacore::Double> &originalCHAN_FREQ,
418 : casacore::Vector<casacore::Double> &originalCHAN_WIDTH,
419 : casacore::Vector<casacore::Double> ®riddedCHAN_FREQ,
420 : casacore::Vector<casacore::Double> ®riddedCHAN_WIDTH,
421 : string msg);
422 :
423 : void reindexColumn(casacore::ScalarColumn<casacore::Int> &inputCol, casacore::Int value);
424 : void reindexSourceSubTable();
425 : void reindexDDISubTable();
426 : void reindexFeedSubTable();
427 : void reindexSysCalSubTable();
428 : void reindexFreqOffsetSubTable();
429 : void reindexGenericTimeDependentSubTable(const casacore::String& subtabname);
430 :
431 : void separateSpwSubtable();
432 : void separateFeedSubtable();
433 : void separateSourceSubtable();
434 : void separateSyscalSubtable();
435 : void separateFreqOffsetSubtable();
436 : void separateCalDeviceSubtable();
437 : void separateSysPowerSubtable();
438 :
439 : // To average polarization components
440 : casacore::Int getAveragedPolarizationId();
441 : void reindexPolarizationIdInDataDesc(casacore::Int newPolarizationId);
442 :
443 : // Setters for Weight-based transformation
444 : void propagateWeights(bool on);
445 : void setBufferMode(bool on);
446 : void setChannelAverageKernel(casacore::uInt mode);
447 : void setSmoothingKernel(casacore::uInt mode);
448 : void setSmoothingFourierKernel(casacore::uInt mode);
449 :
450 : // Drop channels with non-uniform width when doing channel average
451 : void dropNonUniformWidthChannels();
452 :
453 : // From output MS
454 : void getOutputNumberOfChannels();
455 :
456 : void checkAndPreaverageChannelsIfNeeded(Int spwId,
457 : Vector<Double> &inputCHAN_FREQ,
458 : Vector<Double> &inputCHAN_WIDTH,
459 : const Vector<Double> &originalCHAN_FREQ,
460 : const Vector<Double> &originalCHAN_WIDTH,
461 : const Vector<Double> ®riddedCHAN_FREQ,
462 : const Vector<Double> ®riddedCHAN_WIDTH);
463 : void doPreAveragingBeforeRegridding(uInt widthFactor, Int spwId,
464 : const Vector<Double> &originalCHAN_FREQ,
465 : const Vector<Double> &originalCHAN_WIDTH,
466 : Vector<Double> &inputCHAN_FREQ,
467 : Vector<Double> &inputCHAN_WIDTH);
468 :
469 : // For channel averaging and selection
470 : void calculateIntermediateFrequencies(casacore::Int spwId,
471 : const casacore::Vector<casacore::Double> &inputChanFreq,
472 : const casacore::Vector<casacore::Double> &inputChanWidth,
473 : casacore::Vector<casacore::Double> &intermediateChanFreq,
474 : casacore::Vector<casacore::Double> &intermediateChanWidth);
475 :
476 : void initGridForRegridTClean(const Vector<Double> &originalCHAN_FREQ,
477 : const Vector<Double> ®riddedCHAN_FREQ,
478 : const Vector<Double> ®riddedCHAN_WIDTH,
479 : Double widthFactor);
480 :
481 :
482 : void calculateWeightAndSigmaFactors();
483 : void calculateNewWeightAndSigmaFactors();
484 :
485 : // Column check
486 : void checkFillFlagCategory();
487 : void checkFillWeightSpectrum();
488 : void checkDataColumnsAvailable();
489 : void checkDataColumnsToFill();
490 : void colCheckInfo(const casacore::String& inputColName, const casacore::String& outputColName);
491 : void checkSPWChannelsKnownLimitation();
492 : void checkCorrelatorPreaveraging();
493 :
494 : // Iterator set-up
495 : virtual void setIterationApproach();
496 : void generateIterator();
497 :
498 : void initFrequencyTransGrid(vi::VisBuffer2 *vb);
499 : void fillIdCols(vi::VisBuffer2 *vb,casacore::RefRows &rowRef);
500 : void fillDataCols(vi::VisBuffer2 *vb,casacore::RefRows &rowRef);
501 :
502 : void fillWeightCols(vi::VisBuffer2 *vb,casacore::RefRows &rowRef);
503 : void transformAndWriteSpectrum( vi::VisBuffer2 *vb,
504 : casacore::RefRows &rowRef,
505 : const casacore::Cube<casacore::Float> &inputSpectrum,
506 : casacore::ArrayColumn<casacore::Float> &outputCubeCol,
507 : casacore::ArrayColumn<casacore::Float> &outputMatrixCol,
508 : MSTransformations::weightTransformation weightTransformation,
509 : bool flushSpectrumCube);
510 :
511 : template <class T> void setTileShape(casacore::RefRows &rowRef,casacore::ArrayColumn<T> &outputDataCol);
512 :
513 : const casacore::Cube<casacore::Float>& getApplicableSpectrum(vi::VisBuffer2 *vb, casacore::MS::PredefinedColumns datacol);
514 : casacore::ArrayColumn<casacore::Float>& getOutputWeightColumn(vi::VisBuffer2 *vb, casacore::MS::PredefinedColumns datacol);
515 : const casacore::Cube<casacore::Float>& getWeightSpectrumFromSigmaSpectrum(vi::VisBuffer2 *vb);
516 : const casacore::Cube<casacore::Float>& getWeightSpectrumFlat(vi::VisBuffer2 *vb);
517 :
518 : // Methods to transform and write vectors
519 :
520 : template <class T> void transformAndWriteNotReindexableVector( const casacore::Vector<T> &inputVector,
521 : casacore::Vector<T> &outputVector,
522 : bool constant,
523 : casacore::ScalarColumn<T> &outputCol,
524 : casacore::RefRows &rowReference);
525 :
526 : template <class T> void transformAndWriteReindexableVector( const casacore::Vector<T> &inputVector,
527 : casacore::Vector<T> &outputVector,
528 : bool constant,
529 : map<casacore::uInt,casacore::uInt> &inputOutputIndexMap,
530 : casacore::ScalarColumn<T> &outputCol,
531 : casacore::RefRows &rowReference);
532 :
533 : bool transformDDIVector(const casacore::Vector<casacore::Int> &inputVector,casacore::Vector<casacore::Int> &outputVector);
534 :
535 : void mapAndAverageVector( const casacore::Vector<casacore::Double> &inputVector,
536 : casacore::Vector<casacore::Double> &outputVector);
537 :
538 : void mapAndAverageVector( const casacore::Vector<bool> &inputVector,
539 : casacore::Vector<bool> &outputVector);
540 :
541 : // Templates methods to transform vectors that must be available for MSTransformBuffer
542 :
543 0 : template <class T> bool transformNotReindexableVector( const casacore::Vector<T> &inputVector,
544 : casacore::Vector<T> &outputVector,
545 : bool constant)
546 : {
547 0 : bool transformed = true;
548 :
549 0 : if ((combinespws_p) or (nspws_p >1))
550 : {
551 0 : if (constant)
552 : {
553 0 : outputVector = inputVector(0);
554 : }
555 : else
556 : {
557 0 : mapVector(inputVector,outputVector);
558 : }
559 : }
560 : else
561 : {
562 0 : transformed = false;
563 : }
564 :
565 0 : return transformed;
566 : };
567 :
568 0 : template <class T> bool transformReindexableVector( const casacore::Vector<T> &inputVector,
569 : casacore::Vector<T> &outputVector,
570 : bool constant,
571 : map<casacore::uInt,casacore::uInt> &inputOutputIndexMap)
572 : {
573 0 : bool transformed = true;
574 :
575 0 : if (inputOutputIndexMap.size() == 0)
576 : {
577 0 : transformed = transformNotReindexableVector(inputVector,outputVector,constant);
578 : }
579 : else
580 : {
581 0 : if (constant)
582 : {
583 0 : outputVector = inputOutputIndexMap[inputVector(0)];
584 : }
585 0 : else if (combinespws_p)
586 : {
587 0 : mapAndReindexVector(inputVector,outputVector,inputOutputIndexMap);
588 : }
589 : else
590 : {
591 0 : reindexVector(inputVector,outputVector,inputOutputIndexMap);
592 : }
593 : }
594 :
595 0 : return transformed;
596 : };
597 :
598 0 : template <class T> void mapAndReindexVector( const casacore::Vector<T> &inputVector,
599 : casacore::Vector<T> &outputVector,
600 : map<casacore::uInt,casacore::uInt> &inputOutputIndexMap)
601 : {
602 0 : if (nspws_p <2)
603 : {
604 0 : for (casacore::uInt index=0; index<rowIndex_p.size();index++)
605 : {
606 0 : outputVector(index) = inputOutputIndexMap[inputVector(rowIndex_p[index])];
607 : }
608 : }
609 : else
610 : {
611 0 : casacore::uInt absoluteIndex = 0;
612 0 : for (casacore::uInt index=0; index<rowIndex_p.size();index++)
613 : {
614 0 : for (casacore::uInt spwIndex=0;spwIndex < nspws_p; spwIndex++)
615 : {
616 0 : outputVector(absoluteIndex) = inputOutputIndexMap[inputVector(rowIndex_p[index])];
617 0 : absoluteIndex += 1;
618 : }
619 : }
620 : }
621 :
622 0 : return;
623 : }
624 :
625 :
626 0 : template <class T> void reindexVector( const casacore::Vector<T> &inputVector,
627 : casacore::Vector<T> &outputVector,
628 : map<casacore::uInt,casacore::uInt> &inputOutputIndexMap)
629 : {
630 0 : if (nspws_p <2)
631 : {
632 0 : for (casacore::uInt index=0; index<inputVector.shape()[0];index++)
633 : {
634 0 : outputVector(index) = inputOutputIndexMap[inputVector(index)];
635 : }
636 : }
637 : else
638 : {
639 0 : casacore::uInt absoluteIndex = 0;
640 0 : for (casacore::uInt index=0; index<inputVector.shape()[0];index++)
641 : {
642 0 : for (casacore::uInt spwIndex=0;spwIndex < nspws_p; spwIndex++)
643 : {
644 0 : outputVector(absoluteIndex) = inputOutputIndexMap[inputVector(index)];
645 0 : absoluteIndex += 1;
646 : }
647 : }
648 : }
649 :
650 0 : return;
651 : };
652 :
653 0 : template <class T> void mapVector( const casacore::Vector<T> &inputVector,
654 : casacore::Vector<T> &outputVector)
655 : {
656 0 : if (nspws_p < 2)
657 : {
658 0 : for (casacore::uInt index=0; index<rowIndex_p.size();index++)
659 : {
660 0 : outputVector(index) = inputVector(rowIndex_p[index]);
661 : }
662 : }
663 : else
664 : {
665 0 : casacore::uInt absoluteIndex = 0;
666 0 : for (casacore::uInt index=0; index<rowIndex_p.size();index++)
667 : {
668 0 : for (casacore::uInt spwIndex=0;spwIndex < nspws_p; spwIndex++)
669 : {
670 0 : outputVector(absoluteIndex) = inputVector(rowIndex_p[index]);
671 0 : absoluteIndex += 1;
672 : }
673 : }
674 : }
675 :
676 :
677 0 : return;
678 : }
679 :
680 : // ------------------------------------------------------------------------------------
681 : // Fill the data from an input matrix with shape [nCol,nBaselinesxnSPWsxnScans/nStates]
682 : // into an output matrix with shape [nCol,nBaselinesxnScans/nStates]
683 : // ------------------------------------------------------------------------------------
684 0 : template <class T> void mapMatrix( const casacore::Matrix<T> &inputMatrix,casacore::Matrix<T> &outputMatrix)
685 : {
686 : // Get number of columns
687 0 : casacore::uInt nCols = outputMatrix.shape()(0);
688 :
689 0 : for (casacore::uInt index=0; index<rowIndex_p.size();index++)
690 : {
691 0 : for (casacore::uInt col = 0; col < nCols; col++)
692 : {
693 0 : outputMatrix(col,index) = inputMatrix(col,rowIndex_p[index]);
694 : }
695 : }
696 :
697 0 : return;
698 : }
699 :
700 :
701 : template <class T> void mapAndAverageMatrix( const casacore::Matrix<T> &inputMatrix,
702 : casacore::Matrix<T> &outputMatrix,
703 : bool convolveFlags=false,
704 : vi::VisBuffer2 *vb=NULL);
705 : template <class T> void mapAndScaleMatrix( const casacore::Matrix<T> &inputMatrix,
706 : casacore::Matrix<T> &outputMatrix,
707 : map<casacore::uInt,T> scaleMap,
708 : casacore::Vector<casacore::Int> spws);
709 : template <class T> void writeMatrix( const casacore::Matrix<T> &inputMatrix,
710 : casacore::ArrayColumn<T> &outputCol,
711 : casacore::RefRows &rowRef,
712 : casacore::uInt nBlocks);
713 :
714 : // Methods to transform and write cubes
715 :
716 : template <class T> void writeCube( const casacore::Cube<T> &inputCube,
717 : casacore::ArrayColumn<T> &outputCol,
718 : casacore::RefRows &rowRef);
719 :
720 : void transformCubeOfData( vi::VisBuffer2 *vb,
721 : casacore::RefRows &rowRef,
722 : const casacore::Cube<casacore::Complex> &inputDataCube,
723 : casacore::ArrayColumn<casacore::Complex> &outputDataCol,
724 : casacore::ArrayColumn<bool> *outputFlagCol,
725 : const casacore::Cube<casacore::Float> &inputWeightCube);
726 : void transformCubeOfData( vi::VisBuffer2 *vb,
727 : casacore::RefRows &rowRef,
728 : const casacore::Cube<casacore::Float> &inputDataCube,
729 : casacore::ArrayColumn<casacore::Float> &outputDataCol,
730 : casacore::ArrayColumn<bool> *outputFlagCol,
731 : const casacore::Cube<casacore::Float> &inputWeightCube);
732 : void (casa::MSTransformManager::*transformCubeOfDataComplex_p)( vi::VisBuffer2 *vb,
733 : casacore::RefRows &rowRef,
734 : const casacore::Cube<casacore::Complex> &inputDataCube,
735 : casacore::ArrayColumn<casacore::Complex> &outputDataCol,
736 : casacore::ArrayColumn<bool> *outputFlagCol,
737 : const casacore::Cube<casacore::Float> &inputWeightCube);
738 : void (casa::MSTransformManager::*transformCubeOfDataFloat_p)( vi::VisBuffer2 *vb,
739 : casacore::RefRows &rowRef,
740 : const casacore::Cube<casacore::Float> &inputDataCube,
741 : casacore::ArrayColumn<casacore::Float> &outputDataCol,
742 : casacore::ArrayColumn<bool> *outputFlagCol,
743 : const casacore::Cube<casacore::Float> &inputWeightCube);
744 :
745 : template <class T> void copyCubeOfData( vi::VisBuffer2 *vb,
746 : casacore::RefRows &rowRef,
747 : const casacore::Cube<T> &inputDataCube,
748 : casacore::ArrayColumn<T> &outputDataCol,
749 : casacore::ArrayColumn<bool> *outputFlagCol,
750 : const casacore::Cube<casacore::Float> &inputWeightCube);
751 :
752 : template <class T> void combineCubeOfData( vi::VisBuffer2 *vb,
753 : casacore::RefRows &rowRef,
754 : const casacore::Cube<T> &inputDataCube,
755 : casacore::ArrayColumn<T> &outputDataCol,
756 : casacore::ArrayColumn<bool> *outputFlagCol,
757 : const casacore::Cube<casacore::Float> &inputWeightCube);
758 :
759 : // Methods to transform data in cubes
760 :
761 : void addWeightSpectrumContribution( casacore::Double &weight,
762 : casacore::uInt &pol,
763 : casacore::uInt &inputChannel,
764 : casacore::uInt &row,
765 : const casacore::Cube<casacore::Float> &inputWeightsCube);
766 : void dontAddWeightSpectrumContribution( casacore::Double &weight,
767 : casacore::uInt &pol,
768 : casacore::uInt &inputChannel,
769 : casacore::uInt &row,
770 : const casacore::Cube<casacore::Float> &inputWeightsCube);
771 : void (casa::MSTransformManager::*addWeightSpectrumContribution_p)( casacore::Double &weight,
772 : casacore::uInt &pol,
773 : casacore::uInt &inputChannel,
774 : casacore::uInt &row,
775 : const casacore::Cube<casacore::Float> &inputWeightsCube);
776 :
777 :
778 : void fillWeightsPlane( casacore::uInt pol,
779 : casacore::uInt inputChannel,
780 : casacore::uInt outputChannel,
781 : casacore::uInt inputRow,
782 : const casacore::Cube<casacore::Float> &inputWeightsCube,
783 : casacore::Matrix<casacore::Float> &inputWeightsPlane,
784 : casacore::Double weight);
785 0 : void dontfillWeightsPlane( casacore::uInt ,
786 : casacore::uInt ,
787 : casacore::uInt ,
788 : casacore::uInt ,
789 : const casacore::Cube<casacore::Float> &,
790 : casacore::Matrix<casacore::Float> &,
791 0 : casacore::Double ) {return;}
792 : void (casa::MSTransformManager::*fillWeightsPlane_p)( casacore::uInt pol,
793 : casacore::uInt inputChannel,
794 : casacore::uInt outputChannel,
795 : casacore::uInt inputRow,
796 : const casacore::Cube<casacore::Float> &inputWeightsCube,
797 : casacore::Matrix<casacore::Float> &inputWeightsPlane,
798 : casacore::Double weight);
799 :
800 : void normalizeWeightsPlane( casacore::uInt pol,
801 : casacore::uInt outputChannel,
802 : casacore::Matrix<casacore::Float> &inputPlaneWeights,
803 : casacore::Matrix<casacore::Double> &normalizingFactorPlane);
804 0 : void dontNormalizeWeightsPlane( casacore::uInt ,
805 : casacore::uInt ,
806 : casacore::Matrix<casacore::Float> &,
807 0 : casacore::Matrix<casacore::Double> &) {return;}
808 : void (casa::MSTransformManager::*normalizeWeightsPlane_p)( casacore::uInt pol,
809 : casacore::uInt outputChannel,
810 : casacore::Matrix<casacore::Float> &inputPlaneWeights,
811 : casacore::Matrix<casacore::Double> &normalizingFactorPlane);
812 :
813 : template <class T> void averageCubeOfData( vi::VisBuffer2 *vb,
814 : casacore::RefRows &rowRef,
815 : const casacore::Cube<T> &inputDataCube,
816 : casacore::ArrayColumn<T> &outputDataCol,
817 : casacore::ArrayColumn<bool> *outputFlagCol,
818 : const casacore::Cube<casacore::Float> &inputWeightCube);
819 : template <class T> void smoothCubeOfData( vi::VisBuffer2 *vb,
820 : casacore::RefRows &rowRef,
821 : const casacore::Cube<T> &inputDataCube,
822 : casacore::ArrayColumn<T> &outputDataCol,
823 : casacore::ArrayColumn<bool> *outputFlagCol,
824 : const casacore::Cube<casacore::Float> &inputWeightCube);
825 : template <class T> void regridCubeOfData( vi::VisBuffer2 *vb,
826 : casacore::RefRows &rowRef,
827 : const casacore::Cube<T> &inputDataCube,
828 : casacore::ArrayColumn<T> &outputDataCol,
829 : casacore::ArrayColumn<bool> *outputFlagCol,
830 : const casacore::Cube<casacore::Float> &inputWeightCube);
831 : template <class T> void separateCubeOfData( vi::VisBuffer2 *vb,
832 : casacore::RefRows &rowRef,
833 : const casacore::Cube<T> &inputDataCube,
834 : casacore::ArrayColumn<T> &outputDataCol,
835 : casacore::ArrayColumn<bool> *outputFlagCol,
836 : const casacore::Cube<casacore::Float> &inputWeightCube);
837 :
838 : template <class T> void transformAndWriteCubeOfData( casacore::Int inputSpw,
839 : casacore::RefRows &rowRef,
840 : const casacore::Cube<T> &inputDataCube,
841 : const casacore::Cube<bool> &inputFlagsCube,
842 : const casacore::Cube<casacore::Float> &inputWeightsCube,
843 : casacore::IPosition &outputPlaneShape,
844 : casacore::ArrayColumn<T> &outputDataCol,
845 : casacore::ArrayColumn<bool> *outputFlagCol);
846 :
847 :
848 : void setWeightsPlaneByReference( casacore::uInt inputRow,
849 : const casacore::Cube<casacore::Float> &inputWeightsCube,
850 : casacore::Matrix<casacore::Float> &inputWeightsPlane);
851 0 : void dontsetWeightsPlaneByReference( casacore::uInt ,
852 : const casacore::Cube<casacore::Float> &,
853 0 : casacore::Matrix<casacore::Float> &) {return;}
854 : void (casa::MSTransformManager::*setWeightsPlaneByReference_p)( casacore::uInt inputRow,
855 : const casacore::Cube<casacore::Float> &inputWeightsCube,
856 : casacore::Matrix<casacore::Float> &inputWeightsPlane);
857 :
858 : template <class T> void transformAndWritePlaneOfData( casacore::Int inputSpw,
859 : casacore::uInt row,
860 : casacore::Matrix<T> &inputDataPlane,
861 : casacore::Matrix<bool> &inputFlagsPlane,
862 : casacore::Matrix<casacore::Float> &inputWeightsPlane,
863 : casacore::Matrix<T> &outputDataPlane,
864 : casacore::Matrix<bool> &outputFlagsPlane,
865 : casacore::ArrayColumn<T> &outputDataCol,
866 : casacore::ArrayColumn<bool> *outputFlagCol);
867 : void setWeightStripeByReference( casacore::uInt corrIndex,
868 : casacore::Matrix<casacore::Float> &inputWeightsPlane,
869 : casacore::Vector<casacore::Float> &inputWeightsStripe);
870 0 : void dontSetWeightStripeByReference( casacore::uInt ,
871 : casacore::Matrix<casacore::Float> &,
872 0 : casacore::Vector<casacore::Float> &) {return;}
873 : void (casa::MSTransformManager::*setWeightStripeByReference_p)( casacore::uInt corrIndex,
874 : casacore::Matrix<casacore::Float> &inputWeightsPlane,
875 : casacore::Vector<casacore::Float> &inputWeightsStripe);
876 :
877 : void setOutputbuffer(casacore::Cube<casacore::Complex> *& dataBufferPointer,casacore::Cube<bool> *& flagBufferPointer);
878 : void setOutputbuffer(casacore::Cube<casacore::Float> *& dataBufferPointer,casacore::Cube<bool> *& flagBufferPointer);
879 :
880 : template <class T> void bufferOutputPlanes( casacore::uInt row,
881 : casacore::Matrix<T> &outputDataPlane,
882 : casacore::Matrix<bool> &outputFlagsPlane,
883 : casacore::ArrayColumn<T> &outputDataCol,
884 : casacore::ArrayColumn<bool> &outputFlagCol);
885 : template <class T> void bufferOutputPlanesInSlices( casacore::uInt row,
886 : casacore::Matrix<T> &outputDataPlane,
887 : casacore::Matrix<bool> &outputFlagsPlane,
888 : casacore::ArrayColumn<T> &outputDataCol,
889 : casacore::ArrayColumn<bool> &outputFlagCol);
890 :
891 : void writeOutputPlanes( casacore::uInt row,
892 : casacore::Matrix<casacore::Complex> &outputDataPlane,
893 : casacore::Matrix<bool> &outputFlagsPlane,
894 : casacore::ArrayColumn<casacore::Complex> &outputDataCol,
895 : casacore::ArrayColumn<bool> &outputFlagCol);
896 : void writeOutputPlanes( casacore::uInt row,
897 : casacore::Matrix<casacore::Float> &outputDataPlane,
898 : casacore::Matrix<bool> &outputFlagsPlane,
899 : casacore::ArrayColumn<casacore::Float> &outputDataCol,
900 : casacore::ArrayColumn<bool> &outputFlagCol);
901 : void (casa::MSTransformManager::*writeOutputPlanesComplex_p)( casacore::uInt row,
902 : casacore::Matrix<casacore::Complex> &outputDataPlane,
903 : casacore::Matrix<bool> &outputFlagsPlane,
904 : casacore::ArrayColumn<casacore::Complex> &outputDataCol,
905 : casacore::ArrayColumn<bool> &outputFlagCol);
906 : void (casa::MSTransformManager::*writeOutputPlanesFloat_p)( casacore::uInt row,
907 : casacore::Matrix<casacore::Float> &outputDataPlane,
908 : casacore::Matrix<bool> &outputFlagsPlane,
909 : casacore::ArrayColumn<casacore::Float> &outputDataCol,
910 : casacore::ArrayColumn<bool> &outputFlagCol);
911 :
912 : template <class T> void writeOutputPlanesInBlock( casacore::uInt row,
913 : casacore::Matrix<T> &outputDataPlane,
914 : casacore::Matrix<bool> &outputFlagsPlane,
915 : casacore::ArrayColumn<T> &outputDataCol,
916 : casacore::ArrayColumn<bool> &outputFlagCol);
917 : void (casa::MSTransformManager::*writeOutputFlagsPlane_p)( casacore::Matrix<bool> &outputPlane,
918 : casacore::ArrayColumn<bool> &outputCol,
919 : casacore::IPosition &outputPlaneShape,
920 : casacore::uInt &outputRow);
921 : void writeOutputFlagsPlane( casacore::Matrix<bool> &outputPlane,
922 : casacore::ArrayColumn<bool> &outputCol,
923 : casacore::IPosition &outputPlaneShape,
924 : casacore::uInt &outputRow);
925 0 : void dontWriteOutputFlagsPlane( casacore::Matrix<bool> &,
926 : casacore::ArrayColumn<bool> &,
927 : casacore::IPosition &,
928 0 : casacore::uInt &) {return;}
929 :
930 : template <class T> void writeOutputPlanesInSlices( casacore::uInt row,
931 : casacore::Matrix<T> &outputDataPlane,
932 : casacore::Matrix<bool> &outputFlagsPlane,
933 : casacore::ArrayColumn<T> &outputDataCol,
934 : casacore::ArrayColumn<bool> &outputFlagCol);
935 : template <class T> void writeOutputPlaneSlices( casacore::Matrix<T> &outputPlane,
936 : casacore::ArrayColumn<T> &outputDataCol,
937 : casacore::Slice &sliceX,
938 : casacore::Slice &sliceY,
939 : casacore::IPosition &outputPlaneShape,
940 : casacore::uInt &outputRow);
941 : template <class T> void writeOutputPlaneReshapedSlices( casacore::Matrix<T> &outputPlane,
942 : casacore::ArrayColumn<T> &outputDataCol,
943 : casacore::Slice &sliceX,
944 : casacore::Slice &sliceY,
945 : casacore::IPosition &outputPlaneShape,
946 : casacore::uInt &outputRow);
947 : void (casa::MSTransformManager::*writeOutputFlagsPlaneSlices_p)( casacore::Matrix<bool> &outputPlane,
948 : casacore::ArrayColumn<bool> &outputCol,
949 : casacore::Slice &sliceX,
950 : casacore::Slice &sliceY,
951 : casacore::IPosition &outputPlaneShape,
952 : casacore::uInt &outputRow);
953 : void writeOutputFlagsPlaneSlices( casacore::Matrix<bool> &outputPlane,
954 : casacore::ArrayColumn<bool> &outputCol,
955 : casacore::Slice &sliceX,
956 : casacore::Slice &sliceY,
957 : casacore::IPosition &outputPlaneShape,
958 : casacore::uInt &outputRow);
959 0 : void dontWriteOutputFlagsPlaneSlices( casacore::Matrix<bool> &,
960 : casacore::ArrayColumn<bool> &,
961 : casacore::Slice &,
962 : casacore::Slice &,
963 : casacore::IPosition &,
964 0 : casacore::uInt &) {return;}
965 : void (casa::MSTransformManager::*writeOutputFlagsPlaneReshapedSlices_p)( casacore::Matrix<bool> &outputPlane,
966 : casacore::ArrayColumn<bool> &outputCol,
967 : casacore::Slice &sliceX,
968 : casacore::Slice &sliceY,
969 : casacore::IPosition &outputPlaneShape,
970 : casacore::uInt &outputRow);
971 : void writeOutputFlagsPlaneReshapedSlices( casacore::Matrix<bool> &outputPlane,
972 : casacore::ArrayColumn<bool> &outputCol,
973 : casacore::Slice &sliceX,
974 : casacore::Slice &sliceY,
975 : casacore::IPosition &outputPlaneShape,
976 : casacore::uInt &outputRow);
977 0 : void dontWriteOutputPlaneReshapedSlices( casacore::Matrix<bool> &,
978 : casacore::ArrayColumn<bool> &,
979 : casacore::Slice &,
980 : casacore::Slice &,
981 : casacore::IPosition &,
982 0 : casacore::uInt &) {return;}
983 :
984 : void transformStripeOfData(casacore::Int inputSpw,
985 : const casacore::Vector<casacore::Complex> &inputDataStripe,
986 : const casacore::Vector<bool> &inputFlagsStripe,
987 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
988 : casacore::Vector<casacore::Complex> &outputDataStripe,
989 : casacore::Vector<bool> &outputFlagsStripe);
990 :
991 : void transformStripeOfData(casacore::Int inputSpw,
992 : const casacore::Vector<casacore::Float> &inputDataStripe,
993 : const casacore::Vector<bool> &inputFlagsStripe,
994 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
995 : casacore::Vector<casacore::Float> &outputDataStripe,
996 : casacore::Vector<bool> &outputFlagsStripe);
997 :
998 : void (casa::MSTransformManager::*transformStripeOfDataComplex_p)(casacore::Int inputSpw,
999 : const casacore::Vector<casacore::Complex> &inputDataStripe,
1000 : const casacore::Vector<bool> &inputFlagsStripe,
1001 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1002 : casacore::Vector<casacore::Complex> &outputDataStripe,
1003 : casacore::Vector<bool> &outputFlagsStripe);
1004 :
1005 : void (casa::MSTransformManager::*transformStripeOfDataFloat_p)(casacore::Int inputSpw,
1006 : const casacore::Vector<casacore::Float> &inputDataStripe,
1007 : const casacore::Vector<bool> &inputFlagsStripe,
1008 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1009 : casacore::Vector<casacore::Float> &outputDataStripe,
1010 : casacore::Vector<bool> &outputFlagsStripe);
1011 :
1012 : template <class T> void average(casacore::Int inputSpw,
1013 : const casacore::Vector<T> &inputDataStripe,
1014 : const casacore::Vector<bool> &inputFlagsStripe,
1015 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1016 : casacore::Vector<T> &outputDataStripe,
1017 : casacore::Vector<bool> &outputFlagsStripe);
1018 :
1019 : template <class T> void simpleAverage(casacore::uInt width,
1020 : const casacore::Vector<T> &inputData,
1021 : casacore::Vector<T> &outputData);
1022 :
1023 : void averageKernel(const casacore::Vector<casacore::Complex> &inputData,
1024 : const casacore::Vector<bool> &inputFlags,
1025 : const casacore::Vector<casacore::Float> &inputWeights,
1026 : casacore::Vector<casacore::Complex> &outputData,
1027 : casacore::Vector<bool> &outputFlags,
1028 : casacore::uInt startInputPos,
1029 : casacore::uInt outputPos,
1030 : casacore::uInt width);
1031 :
1032 : void averageKernel(const casacore::Vector<casacore::Float> &inputData,
1033 : const casacore::Vector<bool> &inputFlags,
1034 : const casacore::Vector<casacore::Float> &inputWeights,
1035 : casacore::Vector<casacore::Float> &outputData,
1036 : casacore::Vector<bool> &outputFlags,
1037 : casacore::uInt startInputPos,
1038 : casacore::uInt outputPos,
1039 : casacore::uInt width);
1040 :
1041 : void (casa::MSTransformManager::*averageKernelComplex_p)(const casacore::Vector<casacore::Complex> &inputData,
1042 : const casacore::Vector<bool> &inputFlags,
1043 : const casacore::Vector<casacore::Float> &inputWeights,
1044 : casacore::Vector<casacore::Complex> &outputData,
1045 : casacore::Vector<bool> &outputFlags,
1046 : casacore::uInt startInputPos,
1047 : casacore::uInt outputPos,
1048 : casacore::uInt width);
1049 : void (casa::MSTransformManager::*averageKernelFloat_p)(const casacore::Vector<casacore::Float> &inputData,
1050 : const casacore::Vector<bool> &inputFlags,
1051 : const casacore::Vector<casacore::Float> &inputWeights,
1052 : casacore::Vector<casacore::Float> &outputData,
1053 : casacore::Vector<bool> &outputFlags,
1054 : casacore::uInt startInputPos,
1055 : casacore::uInt outputPos,
1056 : casacore::uInt width);
1057 : template <class T> void simpleAverageKernel(const casacore::Vector<T> &inputData,
1058 : const casacore::Vector<bool> &,
1059 : const casacore::Vector<casacore::Float> &,
1060 : casacore::Vector<T> &outputData,
1061 : casacore::Vector<bool> &,
1062 : casacore::uInt startInputPos,
1063 : casacore::uInt outputPos,
1064 : casacore::uInt width);
1065 :
1066 : template <class T> void flagAverageKernel(const casacore::Vector<T> &inputData,
1067 : const casacore::Vector<bool> &inputFlags,
1068 : const casacore::Vector<casacore::Float> &,
1069 : casacore::Vector<T> &outputData,
1070 : casacore::Vector<bool> &outputFlags,
1071 : casacore::uInt startInputPos,
1072 : casacore::uInt outputPos,
1073 : casacore::uInt width);
1074 :
1075 : template <class T> void weightAverageKernel(const casacore::Vector<T> &inputData,
1076 : const casacore::Vector<bool> &,
1077 : const casacore::Vector<casacore::Float> &inputWeights,
1078 : casacore::Vector<T> &outputData,
1079 : casacore::Vector<bool> &outputFlags,
1080 : casacore::uInt startInputPos,
1081 : casacore::uInt outputPos,
1082 : casacore::uInt width);
1083 :
1084 : template <class T> void cumSumKernel(const casacore::Vector<T> &inputData,
1085 : const casacore::Vector<bool> &,
1086 : const casacore::Vector<casacore::Float> &,
1087 : casacore::Vector<T> &outputData,
1088 : casacore::Vector<bool> &,
1089 : casacore::uInt startInputPos,
1090 : casacore::uInt outputPos,
1091 : casacore::uInt width);
1092 :
1093 : template <class T> void flagWeightAverageKernel(const casacore::Vector<T> &inputData,
1094 : const casacore::Vector<bool> &inputFlags,
1095 : const casacore::Vector<casacore::Float> &inputWeights,
1096 : casacore::Vector<T> &outputData,
1097 : casacore::Vector<bool> &outputFlags,
1098 : casacore::uInt startInputPos,
1099 : casacore::uInt outputPos,
1100 : casacore::uInt width);
1101 :
1102 : template <class T> void flagCumSumKernel(const casacore::Vector<T> &inputData,
1103 : const casacore::Vector<bool> &inputFlags,
1104 : const casacore::Vector<casacore::Float> &,
1105 : casacore::Vector<T> &outputData,
1106 : casacore::Vector<bool> &,
1107 : casacore::uInt startInputPos,
1108 : casacore::uInt outputPos,
1109 : casacore::uInt width);
1110 :
1111 : template <class T> void flagNonZeroAverageKernel(const casacore::Vector<T> &inputData,
1112 : const casacore::Vector<bool> &inputFlags,
1113 : const casacore::Vector<casacore::Float> &,
1114 : casacore::Vector<T> &outputData,
1115 : casacore::Vector<bool> &,
1116 : casacore::uInt startInputPos,
1117 : casacore::uInt outputPos,
1118 : casacore::uInt width);
1119 :
1120 : template <class T> void flagWeightNonZeroAverageKernel(const casacore::Vector<T> &inputData,
1121 : const casacore::Vector<bool> &inputFlags,
1122 : const casacore::Vector<casacore::Float> &,
1123 : casacore::Vector<T> &outputData,
1124 : casacore::Vector<bool> &,
1125 : casacore::uInt startInputPos,
1126 : casacore::uInt outputPos,
1127 : casacore::uInt width);
1128 :
1129 : template <class T> void flagCumSumNonZeroKernel(const casacore::Vector<T> &inputData,
1130 : const casacore::Vector<bool> &inputFlags,
1131 : const casacore::Vector<casacore::Float> &,
1132 : casacore::Vector<T> &outputData,
1133 : casacore::Vector<bool> &,
1134 : casacore::uInt startInputPos,
1135 : casacore::uInt outputPos,
1136 : casacore::uInt width);
1137 :
1138 :
1139 : template <class T> void smooth(casacore::Int inputSpw,
1140 : const casacore::Vector<T> &inputDataStripe,
1141 : const casacore::Vector<bool> &inputFlagsStripe,
1142 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1143 : casacore::Vector<T> &outputDataStripe,
1144 : casacore::Vector<bool> &outputFlagsStripe);
1145 :
1146 : void smoothKernel(const casacore::Vector<casacore::Complex> &inputData,
1147 : const casacore::Vector<bool> &inputFlags,
1148 : const casacore::Vector<casacore::Float> &inputWeights,
1149 : casacore::Vector<casacore::Complex> &outputData,
1150 : casacore::Vector<bool> &outputFlags,
1151 : casacore::uInt outputPos);
1152 :
1153 : void smoothKernel(const casacore::Vector<casacore::Float> &inputData,
1154 : const casacore::Vector<bool> &inputFlags,
1155 : const casacore::Vector<casacore::Float> &inputWeights,
1156 : casacore::Vector<casacore::Float> &outputData,
1157 : casacore::Vector<bool> &outputFlags,
1158 : casacore::uInt outputPos);
1159 :
1160 : void (casa::MSTransformManager::*smoothKernelComplex_p)(const casacore::Vector<casacore::Complex> &inputData,
1161 : const casacore::Vector<bool> &inputFlags,
1162 : const casacore::Vector<casacore::Float> &inputWeights,
1163 : casacore::Vector<casacore::Complex> &outputData,
1164 : casacore::Vector<bool> &outputFlags,
1165 : casacore::uInt outputPos);
1166 :
1167 : void (casa::MSTransformManager::*smoothKernelFloat_p)(const casacore::Vector<casacore::Float> &inputData,
1168 : const casacore::Vector<bool> &inputFlags,
1169 : const casacore::Vector<casacore::Float> &inputWeights,
1170 : casacore::Vector<casacore::Float> &outputData,
1171 : casacore::Vector<bool> &outputFlags,
1172 : casacore::uInt outputPos);
1173 :
1174 : template <class T> void plainSmooth(const casacore::Vector<T> &inputData,
1175 : const casacore::Vector<bool> &inputFlags,
1176 : const casacore::Vector<casacore::Float> &inputWeights,
1177 : casacore::Vector<T> &outputData,
1178 : casacore::Vector<bool> &outputFlags,
1179 : casacore::uInt outputPos);
1180 :
1181 : template <class T> void plainSmoothSpectrum(const casacore::Vector<T> &inputData,
1182 : const casacore::Vector<bool> &inputFlags,
1183 : const casacore::Vector<casacore::Float> &inputWeights,
1184 : casacore::Vector<T> &outputData,
1185 : casacore::Vector<bool> &outputFlags,
1186 : casacore::uInt outputPos);
1187 :
1188 :
1189 : template <class T> void regrid(casacore::Int ,
1190 : const casacore::Vector<T> &inputDataStripe,
1191 : const casacore::Vector<bool> &inputFlagsStripe,
1192 : const casacore::Vector<casacore::Float> &,
1193 : casacore::Vector<T> &outputDataStripe,
1194 : casacore::Vector<bool> &outputFlagsStripe);
1195 :
1196 : void regridCore(casacore::Int inputSpw,
1197 : const casacore::Vector<casacore::Complex> &inputDataStripe,
1198 : const casacore::Vector<bool> &inputFlagsStripe,
1199 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1200 : casacore::Vector<casacore::Complex> &outputDataStripe,
1201 : casacore::Vector<bool> &outputFlagsStripe);
1202 : void regridCore(casacore::Int inputSpw,
1203 : const casacore::Vector<casacore::Float> &inputDataStripe,
1204 : const casacore::Vector<bool> &inputFlagsStripe,
1205 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1206 : casacore::Vector<casacore::Float> &outputDataStripe,
1207 : casacore::Vector<bool> &outputFlagsStripe);
1208 :
1209 : void (casa::MSTransformManager::*regridCoreComplex_p)(casacore::Int inputSpw,
1210 : const casacore::Vector<casacore::Complex> &inputDataStripe,
1211 : const casacore::Vector<bool> &inputFlagsStripe,
1212 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1213 : casacore::Vector<casacore::Complex> &outputDataStripe,
1214 : casacore::Vector<bool> &outputFlagsStripe);
1215 :
1216 : void (casa::MSTransformManager::*regridCoreFloat_p)(casacore::Int inputSpw,
1217 : const casacore::Vector<casacore::Float> &inputDataStripe,
1218 : const casacore::Vector<bool> &inputFlagsStripe,
1219 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1220 : casacore::Vector<casacore::Float> &outputDataStripe,
1221 : casacore::Vector<bool> &outputFlagsStripe);
1222 :
1223 : void fftshift(casacore::Int inputSpw,
1224 : const casacore::Vector<casacore::Complex> &inputDataStripe,
1225 : const casacore::Vector<bool> &inputFlagsStripe,
1226 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1227 : casacore::Vector<casacore::Complex> &outputDataStripe,
1228 : casacore::Vector<bool> &outputFlagsStripe);
1229 : void fftshift(casacore::Int inputSpw,
1230 : const casacore::Vector<casacore::Float> &inputDataStripe,
1231 : const casacore::Vector<bool> &inputFlagsStripe,
1232 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1233 : casacore::Vector<casacore::Float> &outputDataStripe,
1234 : casacore::Vector<bool> &outputFlagsStripe);
1235 :
1236 : template <class T> void interpol1D(casacore::Int inputSpw,
1237 : const casacore::Vector<T> &inputDataStripe,
1238 : const casacore::Vector<bool> &inputFlagsStripe,
1239 : const casacore::Vector<casacore::Float> &,
1240 : casacore::Vector<T> &outputDataStripe,
1241 : casacore::Vector<bool> &outputFlagsStripe);
1242 :
1243 : template <class T> void interpol1Dfftshift(casacore::Int inputSpw,
1244 : const casacore::Vector<T> &inputDataStripe,
1245 : const casacore::Vector<bool> &inputFlagsStripe,
1246 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1247 : casacore::Vector<T> &outputDataStripe,
1248 : casacore::Vector<bool> &outputFlagsStripe);
1249 :
1250 : template <class T> void interpolateByChannelMap(Int spw,
1251 : const Vector<T> &inputDataStripe,
1252 : const Vector<Bool> &inputFlagsStripe,
1253 : Vector<T> &outputDataStripe,
1254 : Vector<Bool> &outputFlagsStripe);
1255 :
1256 : template <class T> void averageRegrid(casacore::Int inputSpw,
1257 : const casacore::Vector<T> &inputDataStripe,
1258 : const casacore::Vector<bool> &inputFlagsStripe,
1259 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1260 : casacore::Vector<T> &outputDataStripe,
1261 : casacore::Vector<bool> &outputFlagsStripe);
1262 :
1263 : template <class T> void smoothRegrid(casacore::Int inputSpw,
1264 : const casacore::Vector<T> &inputDataStripe,
1265 : const casacore::Vector<bool> &inputFlagsStripe,
1266 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1267 : casacore::Vector<T> &outputDataStripe,
1268 : casacore::Vector<bool> &outputFlagsStripe);
1269 :
1270 : template <class T> void averageSmooth(casacore::Int inputSpw,
1271 : const casacore::Vector<T> &inputDataStripe,
1272 : const casacore::Vector<bool> &inputFlagsStripe,
1273 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1274 : casacore::Vector<T> &outputDataStripe,
1275 : casacore::Vector<bool> &outputFlagsStripe);
1276 :
1277 : template <class T> void averageSmoothRegrid(casacore::Int inputSpw,
1278 : const casacore::Vector<T> &inputDataStripe,
1279 : const casacore::Vector<bool> &inputFlagsStripe,
1280 : const casacore::Vector<casacore::Float> &inputWeightsStripe,
1281 : casacore::Vector<T> &outputDataStripe,
1282 : casacore::Vector<bool> &outputFlagsStripe);
1283 :
1284 : // The following methods are single dish specific so far
1285 : void smoothFourierFloat(casacore::Int , const casacore::Vector<casacore::Float> &inputDataStripe,
1286 : const casacore::Vector<bool> &inputFlagsStripe,
1287 : const casacore::Vector<casacore::Float> &inputWeightStripe,
1288 : casacore::Vector<casacore::Float> &outputDataStripe,
1289 : casacore::Vector<bool> &outputFlagsStripe);
1290 :
1291 : void smoothFourierComplex(casacore::Int , const casacore::Vector<casacore::Complex> &inputDataStripe,
1292 : const casacore::Vector<bool> &inputFlagsStripe,
1293 : const casacore::Vector<casacore::Float> &inputWeightStripe,
1294 : casacore::Vector<casacore::Complex> &outputDataStripe,
1295 : casacore::Vector<bool> &outputFlagsStripe);
1296 :
1297 : casacore::Convolver<casacore::Float> *getConvolver(casacore::Int const numChan);
1298 :
1299 : // casacore::MS specification parameters
1300 : casacore::String inpMsName_p;
1301 : casacore::String outMsName_p;
1302 : casacore::String datacolumn_p;
1303 : bool makeVirtualModelColReal_p;
1304 : bool makeVirtualCorrectedColReal_p;
1305 : casacore::Vector<casacore::Int> tileShape_p;
1306 :
1307 : // casacore::Data selection parameters
1308 : casacore::String arraySelection_p;
1309 : casacore::String fieldSelection_p;
1310 : casacore::String scanSelection_p;
1311 : casacore::String timeSelection_p;
1312 : casacore::String spwSelection_p;
1313 : casacore::String baselineSelection_p;
1314 : casacore::String uvwSelection_p;
1315 : casacore::String polarizationSelection_p;
1316 : casacore::String scanIntentSelection_p;
1317 : casacore::String observationSelection_p;
1318 : casacore::String taqlSelection_p;
1319 : casacore::String feedSelection_p;
1320 :
1321 : // casacore::Input-Output index maps
1322 : map<casacore::uInt,casacore::uInt> inputOutputObservationIndexMap_p;
1323 : map<casacore::uInt,casacore::uInt> inputOutputArrayIndexMap_p;
1324 : map<casacore::uInt,casacore::uInt> inputOutputScanIndexMap_p;
1325 : map<casacore::uInt,casacore::uInt> inputOutputScanIntentIndexMap_p;
1326 : map<casacore::uInt,casacore::uInt> inputOutputFieldIndexMap_p;
1327 : map<casacore::uInt,casacore::uInt> inputOutputSPWIndexMap_p;
1328 : map<casacore::uInt,casacore::uInt> inputOutputDDIndexMap_p;
1329 : map<casacore::uInt,casacore::uInt> inputOutputAntennaIndexMap_p;
1330 : map<casacore::uInt,casacore::uInt> outputInputSPWIndexMap_p;
1331 : map<casacore::Int,std::vector<casacore::Int> > inputOutputChanIndexMap_p;
1332 :
1333 : // Frequency transformation parameters
1334 : casacore::uInt nspws_p = 1;
1335 : casacore::Int ddiStart_p = 0;
1336 : bool combinespws_p = false;
1337 : bool enableChanPreAverage_p = false;
1338 : bool channelAverage_p = false;
1339 : bool hanningSmooth_p = false;
1340 : bool refFrameTransformation_p = false;
1341 : casacore::Vector<casacore::Int> freqbin_p = casacore::Vector<Int>(1,-1);
1342 : // For when the interpolation needs to be done the tclean way
1343 : // (output width > 2 input width). CAS-9853, CAS-9852
1344 : bool regridTClean_p = false;
1345 : Vector<Double> regridTCleanCHAN_FREQ_p;
1346 : Vector<Int> regridTCleanChanMap_p;
1347 : casacore::String useweights_p = "flags";
1348 : casacore::uInt weightmode_p = MSTransformations::flags;
1349 : // Options are: nearest, linear, cubic, spline, fftshift
1350 : casacore::String interpolationMethodPar_p = casacore::String("linear");
1351 : casac::variant *phaseCenterPar_p = new casac::variant("");
1352 : casacore::String restFrequency_p = casacore::String("");
1353 : // Options are: LSRK, LSRD, BARY, GALACTO, LGROUP, CMB, GEO, or TOPO
1354 : casacore::String outputReferenceFramePar_p = String("");
1355 : bool radialVelocityCorrection_p = false;
1356 : bool regridding_p = false ;
1357 : casacore::uInt smoothBin_p = 3;
1358 : casacore::uInt smoothmode_p = MSTransformations::plainSmooth;
1359 : casacore::Vector<casacore::Float> smoothCoeff_p;
1360 :
1361 : // Frequency specification parameters
1362 : casacore::String mode_p;
1363 : casacore::String start_p;
1364 : casacore::String width_p;
1365 : int nChan_p;
1366 : casacore::String velocityType_p;
1367 :
1368 : // Phase shifting parameters
1369 : // CAS-12706 To run phase shift via a TVI which has
1370 : // support for shifting across large offset/angles
1371 : casacore::Double dx_p, dy_p;
1372 : bool tviphaseshift_p;
1373 : casacore::Record tviphaseshiftConfig_p;
1374 :
1375 : // For scalar averaging, use "timebin" for iter interval but don't average
1376 : bool scalarAverage_p;
1377 :
1378 : // casacore::Time transformation parameters
1379 : bool timeAverage_p;
1380 : casacore::Double timeBin_p;
1381 : casacore::String timespan_p;
1382 : vi::AveragingOptions timeAvgOptions_p;
1383 : casacore::Double maxuvwdistance_p;
1384 : // casacore::uInt minbaselines_p;
1385 :
1386 : // Calibration parameters
1387 : bool calibrate_p;
1388 : casacore::String callib_p;
1389 : casacore::Record callibRec_p;
1390 :
1391 : // UVContSub parameters
1392 : bool uvcontsub_p;
1393 : casacore::Record uvcontsubRec_p;
1394 : // To produce a MODEL column in output MS, not coming from the input MS MODEL
1395 : // This is used by uvcontsub which from input DATA (or CORRECTED) can produde both
1396 : // DATA and MODEL
1397 : bool produceModel_p = false;
1398 :
1399 : // Spw averaging parameters
1400 : bool spwAverage_p;
1401 :
1402 : // Polarization transformation parameters
1403 : bool polAverage_p;
1404 : casacore::Record polAverageConfig_p;
1405 :
1406 : // Pointings interpolation transformation parameters
1407 : bool pointingsInterpolation_p;
1408 : casacore::Record pointingsInterpolationConfig_p;
1409 :
1410 : // Weight Spectrum parameters
1411 : bool usewtspectrum_p;
1412 :
1413 : // Buffer handling parameters
1414 : bool bufferMode_p;
1415 : bool userBufferMode_p;
1416 : bool reindex_p;
1417 : bool factory_p;
1418 : bool interactive_p;
1419 :
1420 : // casacore::MS-related members
1421 : MSTransformDataHandler *dataHandler_p;
1422 : casacore::MeasurementSet *inputMs_p;
1423 : casacore::MeasurementSet *selectedInputMs_p;
1424 : casacore::MeasurementSet *outputMs_p;
1425 : casacore::MSColumns *selectedInputMsCols_p;
1426 : casacore::MSColumns *outputMsCols_p;
1427 : std::shared_ptr<casacore::MSFieldColumns> inputMSFieldCols_p;
1428 :
1429 : // VI/VB related members
1430 : casacore::Block<casacore::Int> sortColumns_p;
1431 : vi::VisibilityIterator2 *visibilityIterator_p;
1432 : vi::FrequencySelectionUsingChannels *channelSelector_p;
1433 :
1434 : // Output casacore::MS structure related members
1435 : bool inputFlagCategoryAvailable_p;
1436 : bool correctedToData_p;
1437 : bool bothDataColumnsAreOutput_p;
1438 : bool doingData_p;
1439 : bool doingCorrected_p;
1440 : bool doingModel_p;
1441 : dataColMap dataColMap_p;
1442 : casacore::MSMainEnums::PredefinedColumns mainColumn_p;
1443 : casacore::uInt nRowsToAdd_p;
1444 :
1445 : // Frequency transformation members
1446 : casacore::uInt chansPerOutputSpw_p;
1447 : casacore::uInt tailOfChansforLastSpw_p;
1448 : casacore::uInt interpolationMethod_p;
1449 : baselineMap baselineMap_p;
1450 : std::vector<casacore::uInt> rowIndex_p;
1451 : inputSpwChanMap spwChannelMap_p;
1452 : inputOutputSpwMap inputOutputSpwMap_p;
1453 : inputOutputChanFactorMap inputOutputChanFactorMap_p;
1454 : map<casacore::uInt,casacore::uInt> freqbinMap_p;
1455 : map<casacore::uInt,casacore::uInt> numOfInpChanMap_p;
1456 : map<casacore::uInt,casacore::uInt> numOfSelChanMap_p;
1457 : map<casacore::uInt,casacore::uInt> numOfOutChanMap_p;
1458 : map<casacore::uInt,casacore::uInt> numOfCombInputChanMap_p;
1459 : map<casacore::uInt,casacore::uInt> numOfCombInterChanMap_p;
1460 : map<casacore::uInt,casacore::Float> weightFactorMap_p;
1461 : map<casacore::uInt,casacore::Float> sigmaFactorMap_p;
1462 : map<casacore::uInt,casacore::Float> newWeightFactorMap_p;
1463 : map<casacore::uInt,casacore::Float> newSigmaFactorMap_p;
1464 :
1465 : // Reference Frame Transformation members
1466 : casacore::MFrequency::Types inputReferenceFrame_p;
1467 : casacore::MFrequency::Types outputReferenceFrame_p;
1468 : casacore::MPosition observatoryPosition_p;
1469 : casacore::MEpoch referenceTime_p;
1470 : casacore::MDirection phaseCenter_p;
1471 : casacore::MRadialVelocity radialVelocity_p;
1472 : casacore::MFrequency::Convert freqTransEngine_p;
1473 : casacore::MFrequency::Convert refTimeFreqTransEngine_p;
1474 : casacore::FFTServer<casacore::Float, casacore::Complex> fFFTServer_p;
1475 : bool fftShiftEnabled_p;
1476 : casacore::Double fftShift_p;
1477 : casacore::ROScalarMeasColumn<casacore::MEpoch> timeMeas_p;
1478 :
1479 : // Weight Spectrum members
1480 : bool spectrumTransformation_p;
1481 : bool propagateWeights_p;
1482 : bool inputWeightSpectrumAvailable_p;
1483 : bool createWeightSpectrumCols_p;
1484 : // whether to create and fill the WEIGHT/SIMA_SPECTRUM columns in the output MS
1485 : bool flushWeightSpectrum_p;
1486 : bool weightSpectrumFlatFilled_p;
1487 : bool weightSpectrumFromSigmaFilled_p;
1488 : bool combinationOfSPWsWithDifferentExposure_p;
1489 : casacore::Cube<casacore::Float> weightSpectrumCube_p;
1490 : casacore::Cube<casacore::Float> weightSpectrumCubeFlat_p;
1491 : casacore::Cube<casacore::Float> weightSpectrumCubeDummy_p;
1492 :
1493 : // Buffer handling members
1494 : casacore::uInt dataBuffer_p;
1495 : casacore::uInt relativeRow_p;
1496 : bool spectrumReshape_p;
1497 : bool cubeTransformation_p;
1498 : bool dataColumnAvailable_p;
1499 : bool correctedDataColumnAvailable_p;
1500 : bool modelDataColumnAvailable_p;
1501 : bool floatDataColumnAvailable_p;
1502 : bool lagDataColumnAvailable_p;
1503 : casacore::Cube<bool> *flagCube_p;
1504 : casacore::Cube<casacore::Complex> *visCube_p;
1505 : casacore::Cube<casacore::Complex> *visCubeCorrected_p;
1506 : casacore::Cube<casacore::Complex> *visCubeModel_p;
1507 : casacore::Cube<casacore::Float> *visCubeFloat_p;
1508 : casacore::Cube<casacore::Float> *weightSpectrum_p;
1509 : casacore::Cube<casacore::Float> *sigmaSpectrum_p;
1510 : casacore::Matrix<casacore::Float> *weight_p;
1511 : casacore::Matrix<casacore::Float> *sigma_p;
1512 : casacore::ArrayColumn<casacore::Float> dummyWeightCol_p;
1513 :
1514 : // single dish specific
1515 : bool smoothFourier_p;
1516 : map<casacore::Int, casacore::Convolver<casacore::Float> > convolverPool_;
1517 : bool doAtmCor_p;
1518 : casacore::Record atmCorConfig_p;
1519 :
1520 : // Logging
1521 : casacore::LogIO logger_p;
1522 :
1523 : private:
1524 : bool shouldCreateOutputWtSpectrum(bool usewtspectrum);
1525 : void createOutputMSStructure();
1526 :
1527 : };
1528 :
1529 : } //# NAMESPACE CASA - END
1530 :
1531 : #endif /* MSTransformManager_H_ */
|