Commit 286e401f authored by Andrea Orlat's avatar Andrea Orlat
Browse files

resolved issue#187. Also added the schedule (lis file) provides a way to...

resolved issue#187. Also added the schedule (lis file) provides a way to insert the radial velocity (see issue#47)
parent db206938
Loading
Loading
Loading
Loading
+19 −11
Original line number Diff line number Diff line
@@ -352,6 +352,12 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan(
			velFrame=Antenna::ANT_UNDEF_FRAME;
			velDef=Antenna::ANT_UNDEF_DEF;
		}
		//if a radial velocity has been provided the it will override the one coming from the generator.....
		if ((primary.VradFrame!=Antenna::ANT_UNDEF_FRAME) && (primary.VradDefinition!=Antenna::ANT_UNDEF_DEF)) {
			vrad=primary.RadialVelocity;
			velFrame=primary.VradFrame;
			velDef=primary.VradDefinition;
		}
		timeToStop=0; // no need to compute a stop duration
	}
	else if (primary.type==Antenna::ANT_MOON) {
@@ -370,9 +376,9 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan(
			dec=att->J2000Declination;
			lon=att->gLongitude;
			lat=att->gLatitude;
			vrad=0.0;
			velFrame=Antenna::ANT_UNDEF_FRAME;
			velDef=Antenna::ANT_UNDEF_DEF;
			//vrad=0.0;
			//velFrame=Antenna::ANT_UNDEF_FRAME;
			//velDef=Antenna::ANT_UNDEF_DEF;
			axis=att->axis;
			sourceName=IRA::CString(att->sourceID);
			currentGeneratorFlux=currentGenerator; // the flux computer is the moon generator itself...make a deep copy
@@ -380,11 +386,14 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan(
		catch (CORBA::SystemException& ex) {
			sourceName=IRA::CString("????");
			ra=dec=0.0; // in that case I do not want to rise an error
			vrad=0.0;
			velFrame=Antenna::ANT_UNDEF_FRAME;
			velDef=Antenna::ANT_UNDEF_DEF;
			//vrad=0.0;
			//velFrame=Antenna::ANT_UNDEF_FRAME;
			//velDef=Antenna::ANT_UNDEF_DEF;
			axis=Management::MNG_NO_AXIS;
		}
		vrad=primary.RadialVelocity;
		velFrame=primary.VradFrame;
		velDef=primary.VradDefinition;
		timeToStop=0;
	}
	else if (primary.type==Antenna::ANT_OTF) {
@@ -442,14 +451,13 @@ Antenna::EphemGenerator_ptr CBossCore::prepareScan(
				velDef=secVelDef;
				sourceName=secSourceName;
			}
			else { //normal OTF...impossible to know vrad
				vrad=0.0;
				velFrame=Antenna::ANT_UNDEF_FRAME;
				velDef=Antenna::ANT_UNDEF_DEF;
			else {
				vrad=primary.RadialVelocity;
				velFrame=primary.VradFrame;
				velDef=primary.VradDefinition;
				sourceName=IRA::CString(att->sourceID);
				currentGeneratorFlux=currentGenerator; // if no secondary scan is used, the generator in charge to compute the flux is the OTF itself...make a deep copy
			}

		}
		catch (CORBA::SystemException& ex) {
			sourceName=IRA::CString("????");
+3 −0
Original line number Diff line number Diff line
@@ -42,6 +42,9 @@ void CBossCore::goOff(const Antenna::TCoordinateFrame& frame,const double& beams
	prim.latitudeOffset=latOff;
    prim.offsetFrame=frame;
    prim.enableCorrection=true;
	prim.RadialVelocity=0.0;
	prim.VradFrame=Antenna::ANT_UNDEF_FRAME;
	prim.VradDefinition=Antenna::ANT_UNDEF_DEF;
    startScan(startUt,prim,second);
}

+13 −1
Original line number Diff line number Diff line
@@ -535,6 +535,18 @@ private:
	 */
	bool parseMoon(const IRA::CString& val,Antenna::TTrackingParameters *scan,DWORD& id,IRA::CString& errMsg);

	/**
	 * Parse the vRAD switch in order to configure a radial velocity
	 * @param val line to parse
	 * @param start point inside the line where to start parsing
	 * @param vrad output radial velocity
	 * @param frame output radial velocity frame
	 * @param ref radial velocity definition
	 * @errMsg error message in case of errors
	 * @return the result of the parsing
	 */
	bool parseVRADSwitch(const IRA::CString& val,int& start,double& vrad,Antenna::TReferenceFrame& frame,Antenna::TVradDefinition& ref,IRA::CString& errMsg);

	/**
	 * This method is called by the parser in order to read the scan list of a main schedule
	 * @param line input line to be parsed
+5 −1
Original line number Diff line number Diff line
@@ -79,8 +79,12 @@ bool CParser::parse(CBaseSchedule* unit,DWORD& line,IRA::CString& errorMsg)
		else {
			line++;
		}
		// This code is a workaround in order to cope with the carriage return in files edited in windows machine
		IRA::CString inputLine(inLine);
		inputLine.Replace('\r',' ',0);
		inputLine.RTrim();
		if ((inLine[0]!=COMMENT_CHAR) && (inLine[0]!=0) && (strlen(inLine)!=0)) {
			if (!unit->parseLine(IRA::CString(inLine),line,errorMsg)) {
			if (!unit->parseLine(inputLine,line,errorMsg)) {
				return false;
			}
		}
+70 −1
Original line number Diff line number Diff line
#include "Schedule.h"
#include <slamac.h>
#include <ManagementModule.h>
#include <AntennaModule.h>

#define OFFFRAMEEQ "-EQOFFS"
#define OFFFRAMEHOR "-HOROFFS"
#define OFFFRAMEGAL "-GALOFFS"
#define RVEL "-RVEL"

#define SIDEREAL "SIDEREAL"
#define SUN "SUN"
@@ -294,6 +296,9 @@ bool CScanList::parseMoon(const IRA::CString& val,Antenna::TTrackingParameters *
	scan->type=Antenna::ANT_MOON;
	scan->paramNumber=0;
	scan->secondary=false;
	scan->VradFrame=Antenna::ANT_UNDEF_FRAME;
	scan->VradDefinition=Antenna::ANT_UNDEF_DEF;
	scan->RadialVelocity=0.0;
	scan->section=Antenna::ACU_NEUTRAL; // no support for section selection in schedule right now
	scan->enableCorrection=true;
	if (out==5) {
@@ -378,6 +383,9 @@ bool CScanList::parseSidereal(const IRA::CString& val,Antenna::TTrackingParamete
	scan->enableCorrection=true;
	scan->secondary=false;
	scan->section=Antenna::ACU_NEUTRAL; // no support for section selection in schedule right now
	scan->VradFrame=Antenna::ANT_UNDEF_FRAME;
	scan->VradDefinition=Antenna::ANT_UNDEF_DEF;
	scan->RadialVelocity=0.0;
	frame=Antenna::ANT_EQUATORIAL;
	while (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) {  //get the next token...it represents the frame in which the coordinates are expressed
		bool ok=IRA::CIRATools::strToCoordinateFrame(token,frame);
@@ -400,7 +408,7 @@ bool CScanList::parseSidereal(const IRA::CString& val,Antenna::TTrackingParamete
		else if ((frame==Antenna::ANT_HORIZONTAL) && (ok)) {
			if (frameOpen || offFrameOpen) {
				errMsg="wrong horizontal format";
				return false;  // if the frame has allready been expressed, raise an error;
				return false;  // if the frame has already been expressed, raise an error;
			}
			scan->frame=Antenna::ANT_HORIZONTAL;
			frameOpen=true;
@@ -459,6 +467,25 @@ bool CScanList::parseSidereal(const IRA::CString& val,Antenna::TTrackingParamete
			scan->applyOffsets=true;
			offFrameOpen=true;
		}
		else if (token==RVEL) {
			if (frameOpen && (scan->frame==Antenna::ANT_EQUATORIAL)) {
				if (counter<3) {
					errMsg="wrong horizontal offsets format";
					return false;
				}
				frameOpen=false;
				scan->paramNumber=paramCounter;
				counter=0;
			}
			if (offFrameOpen || frameOpen) {
				errMsg="wrong scan definition";
				return false; // if the offsets frame has already been expressed, raise an error;
			}
			if (!parseVRADSwitch(val,start,scan->RadialVelocity,scan->VradFrame,scan->VradDefinition,errMsg)) {
				return false;
			}
			counter=0;
		}
		else {
			if (frameOpen) {
				if (counter==0) { //first two parameters are lon and lat
@@ -608,6 +635,39 @@ bool CScanList::parseSidereal(const IRA::CString& val,Antenna::TTrackingParamete
	return true;
}

bool CScanList::parseVRADSwitch(const IRA::CString& val,int& start,double& vrad,Antenna::TReferenceFrame& frame,Antenna::TVradDefinition& ref,IRA::CString& errMsg)
{
	IRA::CString token;
	if (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) {
		vrad=token.ToDouble();
	}
	else {
		errMsg="not enough parameters for the radial velocity switch";
		return false;
	}
	if (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) {
		if (!Antenna::Definitions::map(token,frame)) {
			errMsg="the reference frame of the radial velocity is incorrect";
			return false;
		}
	}
	else {
		errMsg="not enough parameters for the radial velocity switch";
		return false;
	}
	if (IRA::CIRATools::getNextToken(val,start,SEPARATOR,token)) {
		if (!Antenna::Definitions::map(token,ref)) {
			errMsg="the the radial velocity definition is incorrect";
			return false;
		}
	}
	else {
		errMsg="not enough parameters for the radial velocity switch";
		return false;
	}
	return true;
}

bool CScanList::parseSKYDIP(const IRA::CString& val,Antenna::TTrackingParameters *scan,Antenna::TTrackingParameters *secScan,DWORD& id,IRA::CString& errMsg)
{
	TRecord rec;
@@ -620,6 +680,9 @@ bool CScanList::parseSKYDIP(const IRA::CString& val,Antenna::TTrackingParameters
	scan->latitudeOffset=scan->longitudeOffset=0.0;
	scan->applyOffsets=false;
	scan->type=Antenna::ANT_OTF;
	scan->VradFrame=Antenna::ANT_UNDEF_FRAME;
	scan->VradDefinition=Antenna::ANT_UNDEF_DEF;
	scan->RadialVelocity=0.0;
	scan->section=Antenna::ACU_NEUTRAL; // no support for section selection in schedule right now
	scan->secondary=true;
	scan->enableCorrection=false; // disable the pointing corrections
@@ -772,6 +835,9 @@ bool CScanList::parseOTFC(const IRA::CString& val,Antenna::TTrackingParameters *
	scan->section=Antenna::ACU_NEUTRAL; // no support for section selection in schedule right now
	scan->secondary=true;
	scan->enableCorrection=true;
	scan->VradFrame=Antenna::ANT_UNDEF_FRAME;
	scan->VradDefinition=Antenna::ANT_UNDEF_DEF;
	scan->RadialVelocity=0.0;
	out=sscanf((const char *)val,"%u\t%s\t%u\t%s\t%s\t%s\t%s\t%s\t%lf\t%s\t%s\t%s\t",&id,type,&scanCenter,span,coordFrame,subScanFrame,geometry,direction,&duration,offFrame,lonOff,latOff);
	if ((out!=9) && (out!=12)) {   //parameters are 9 for the OTF plus 3 (not mandatory) for the offsets...
		errMsg="invalid on the fly scan definition";
@@ -914,6 +980,9 @@ bool CScanList::parseOTF(const IRA::CString& val,Antenna::TTrackingParameters *s
	scan->latitudeOffset=scan->longitudeOffset=0.0;
	scan->applyOffsets=false;
	scan->type=Antenna::ANT_OTF;
	scan->VradFrame=Antenna::ANT_UNDEF_FRAME;
	scan->VradDefinition=Antenna::ANT_UNDEF_DEF;
	scan->RadialVelocity=0.0;
	scan->section=Antenna::ACU_NEUTRAL; // no support for section selection in schedule right now
	out=sscanf((const char *)val,"%u\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%lf\t%s\t%s\t%s",&id,type,targetName,lon1,lat1,lon2,
			lat2,coordFrame,subScanFrame,geometry,description,direction,&duration,offFrame,lonOff,latOff);
Loading