Beispiel #1
0
void UVImager::GetUVPosition(num_t &u, num_t &v, size_t timeIndex, size_t frequencyIndex, TimeFrequencyMetaDataCPtr metaData)
{
	num_t frequency = metaData->Band().channels[frequencyIndex].frequencyHz;
	u = metaData->UVW()[timeIndex].u * frequency / SpeedOfLight();
	v = metaData->UVW()[timeIndex].v * frequency / SpeedOfLight();
	return;
	const Baseline &baseline = metaData->Baseline();
	num_t delayDirectionRA = metaData->Field().delayDirectionRA;
	num_t delayDirectionDec = metaData->Field().delayDirectionDec;
	double time = metaData->ObservationTimes()[timeIndex];

	num_t pointingLattitude = delayDirectionRA;
	num_t earthLattitudeAngle = Date::JDToHourOfDay(Date::AipsMJDToJD(time))*M_PIn/12.0L;

	// Rotate baseline plane towards source, first rotate around x axis, then around z axis
	num_t raRotation = earthLattitudeAngle - pointingLattitude + M_PIn*0.5L;
	num_t raCos = cosn(-raRotation);
	num_t raSin = sinn(-raRotation);

	num_t dx = baseline.antenna1.x - baseline.antenna2.x;
	num_t dy = baseline.antenna1.y - baseline.antenna2.y;
	num_t dz = baseline.antenna1.z - baseline.antenna2.z;

	num_t decCos = cosn(delayDirectionDec);
	num_t decSin = sinn(delayDirectionDec);

	num_t
		du = -dx * raCos * decSin - dy * raSin - dz * raCos * decCos,
		dv = -dx * raSin * decSin + dy * raCos - dz * raSin * decCos;

  /*
	num_t dxProjected = tmpCos*dx - tmpSin*dy;
	num_t tmpdy = tmpSin*dx + tmpCos*dy;

	num_t dyProjected = tmpCos*tmpdy - tmpSin*dz;*/

	// du = dx*cosn(ra) - dy*sinn(ra)
	// dv = ( dx*sinn(ra) + dy*cosn(ra) ) * cosn(-dec) - dz * sinn(-dec)
	// Now, the newly projected positive z axis of the baseline points to the field
	num_t baselineLength = sqrtn(du*du + dv*dv);

	num_t baselineAngle;
	if(baselineLength == 0.0)
		baselineAngle = 0.0;
	else {
		baselineLength *= frequency / SpeedOfLight();
		if(du > 0.0L)
			baselineAngle = atann(du/dv);
		else
			baselineAngle = M_PIn - atann(du/-dv);
	}
	u = cosn(baselineAngle)*baselineLength;
	v = -sinn(baselineAngle)*baselineLength;

	std::cout << "Calced: " << u << "," << v
		<< ", ori: " << metaData->UVW()[timeIndex].u << "," << metaData->UVW()[timeIndex].v << "(," << metaData->UVW()[timeIndex].w << ")\n";
}
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());
}