void PlotAction::plotSpectrumPerBaseline(ArtifactSet &artifacts) { if(artifacts.FrequencyPowerPlot() == 0) throw BadUsageException("No frequency power plot in the artifact set"); TimeFrequencyData &data = artifacts.ContaminatedData(); TimeFrequencyMetaDataCPtr meta = artifacts.MetaData(); artifacts.FrequencyPowerPlot()->SetLogYAxis(_logYAxis); artifacts.FrequencyPowerPlot()->StartNewLine(meta->Antenna1().name + " x " + meta->Antenna2().name); artifacts.FrequencyPowerPlot()->Add(data, meta); }
void ComplexPlanePlotWindow::setDetailsLabel() { size_t x = (size_t) _xPositionScale.get_value(); size_t y = (size_t) _yPositionScale.get_value(); size_t length = (size_t) _lengthScale.get_value(); size_t avgSize = (size_t) _ySumLengthScale.get_value(); size_t middleY = (2*y + avgSize) / 2; TimeFrequencyMetaDataCPtr metaData = _msWindow.TimeFrequencyMetaData(); double timeStart = _observationTimes[x]; double deltaTime; if(_observationTimes.size()>1) deltaTime = _observationTimes[1] - _observationTimes[0]; else deltaTime = 1.0; long double frequency = metaData->Band().channels[middleY].frequencyHz; Baseline baseline(metaData->Antenna1(), metaData->Antenna2()); long double delayRA = metaData->Field().delayDirectionRA; long double delayDec = metaData->Field().delayDirectionDec; long double intFringeFreq = UVImager::GetFringeCount(x, x+length, y, metaData); long double midFringeFreq = UVImager::GetFringeStopFrequency((x*2 + length)/2, baseline, delayRA, delayDec, frequency, metaData); std::stringstream s; s << "Start time: " << Date::AipsMJDToString(timeStart) << std::endl << "Frequency: " << frequency/1000000.0L << "Mhz" << std::endl << "Baseline: " << baseline.Distance() << "m" << std::endl << "Delay direction: " << delayRA << "RA, " << delayDec << "dec." << std::endl << "(=" << RightAscension::ToString(delayRA) << " RA, " << Declination::ToString(delayDec) << " dec.)" << std::endl << "Mid fringe stopping freq: " << midFringeFreq << "(Hz)" << std::endl << "Fringe count: " << intFringeFreq << std::endl << "Fringe length: " << 1.0L/intFringeFreq << "(s)" << std::endl << "Time step: " << deltaTime << "(s)" << std::endl << "Samples/fringe: " << (1.0L / (deltaTime * intFringeFreq)) << std::endl << "Fringes in domain: " << intFringeFreq << std::endl; _detailsLabel.set_text(s.str()); }
void PlotAction::plotBaselineRMS(ArtifactSet &artifacts) { if(artifacts.PolarizationStatistics() == 0) throw BadUsageException("No polarization statistics in the artifact set"); TimeFrequencyData &data = artifacts.ContaminatedData(); TimeFrequencyMetaDataCPtr metaData = artifacts.MetaData(); double rms = 0.0; for(unsigned i=0;i<data.PolarisationCount();++i) { TimeFrequencyData *polarisation = data.CreateTFDataFromPolarisationIndex(i); Mask2DCPtr mask = polarisation->GetSingleMask(); for(unsigned j=0;j<polarisation->ImageCount();++j) { Image2DCPtr image = polarisation->GetImage(j); rms += ThresholdTools::RMS(image, mask); } delete polarisation; } rms /= data.PolarisationCount(); ; AOLogger::Info << "RMS of " << metaData->Antenna1().name << " x " << metaData->Antenna2().name << ": " << rms << '\n'; }