Download

package OMExpAnalyse;
use strict;
use English;
use Carp;
use vars
  qw(@ISA $VERSION $name $author $date $version @instList $numberOfStreams);
@ISA = qw(Module);
use ModuleResources;

# Declare identity, version, author, date, etc.
$name    = __PACKAGE__;
$VERSION = '1.06';
$version = $VERSION;
$author="Duncan John Fyfe";
$date="29-Jan-2007";

#
# ChangeLog
# =========
#
# Version 1.06 - 2007-01-29 (DJF)
# ------------
#
# + Telemetry drops can make the 'Priority window data' file unavailable.  Change to ignore such exposures
# rather than fail.
#
# Version 1.05 - 2002-02-22 (DJF)
# ------------
#
# + omprep, change from default modeset=0 to modeset=3
#
# Version 1.04 - 2002-02-22 (DJF)
# ------------
#
# + Moved omprep to generate dummy prepThFile irrespective of status of 
#   the odfThFile as this dummy is needed in the OMImageAnalyse module.
#
# Version 1.03 - 2002-02-20 (DJF)
# ------------
#
# + Added tests to Tracking history and Tracking star time series creation.
#   The tests are needed to prevent entries being created for products when
#   either the THX file does not exist OR it contains all zeros.
#
# Version 1.02 - 2001-11-26 (DJF)
# ------------
#
# + Removed exposure mode identifiction.	This has been
#	Move to OMFastAnalyse and OMImageAnalyse.	The selection
#	criterea are complicated and a simple flag is not sufficient
#	to accomodate them.
#
# Version 1.01 - 2001-10-31 (DJF)
# ------------
#
# + Added some info statements to give more useful logs
#
# Version 1.00 - 2001-10-09 (DJF)
# ------------
#
# + Initial version.
#

# Declare list of instruments this module is interested in
@instList=qw(om);

# Number of streams
sub numberOfStreams {
	return numberOfExposures();
}

sub evaluateRules {

	# If upstream module has been ignored, so if this one
	return ignore() if ignored(module => 'ExpChooser',
				instrument => thisInstrument,
				stream => thisStream);
	
	return ignore() if ignored(module => 'OMgetFlat',
				instrument => thisInstrument,
				stream => 1);
	

	# Start conditions
	start()
	if complete(module => 'ExpChooser'
		,instrument => thisInstrument
		,stream => thisStream
	)
	and	complete(module => 'GlobalHK'
		,instrument => 'all'
		,stream => 1
	)
	and	complete(module => 'OMgetFlat'
		,instrument => thisInstrument
		,stream => 1
	);
}

sub performAction {
	info("Module version number: $version");
	# Misc. variables
	my (@extraopts);

	# Find exposure ID
	my $exp_id=exposureID(instrument => thisInstrument,
			      stream => thisStream);

	# Find window data file
	my $windowFile=findFile(class => 'odf'
		,instrument => thisInstrument
		,exp_id =>	$exp_id
		,content => 'Priority window data'
	);

	unless ( fileExists( file =>  $windowFile) )
	{
		info("ODF Priority window data missing.  Unable to continue.");
		return ignore();
	}

	# Find periodic housekeeping file
	my $phkFile=findFile(class => 'odf',
			instrument => thisInstrument,
			content => 'Periodic housekeeping',
			required => 'true');

	# Find non-periodic housekeeping file
	my $nphkFile=findFile(class => 'odf',
				instrument => thisInstrument,
				content => 'Non-periodic housekeeping',
				required => 'true');

	# Flat created by omflatgen
	my $flatGenFile=findFile(class => 'intermediate',
				instrument => thisInstrument,
				content => 'OM Flatfield');
			
	# Initial call to omprep

	my $odfThFile=findFile(class => 'odf',
			instrument => thisInstrument,
			exp_id => $exp_id,
			content => 'Tracking history');

	my $omprepSet  = $odfThFile?$odfThFile:"DUMMYTHX.FIT";

	# Need this outside the following 'if' because OMImageAnalyse needs the
	# prepThFile even if it is empy even if it is empty
	my $prepThFile=newFile(class => 'intermediate'
		,instrument => thisInstrument
		,exp_id => $exp_id
		,content => 'omprep tracking history'
	);
				
	doCommand('omprep'
		,nphset => $nphkFile
		,pehset => $phkFile
		,wdxset => $windowFile
		,outset => $prepThFile
		,set => $omprepSet
		,modeset => 3
	) or return exception();
	
	if ($odfThFile) {
	# Call omthconv to make a tracking history time series
	
		my $TmpthTimeSeries=newFile(class => 'intermediate'
			,instrument => thisInstrument
			,exp_id => $exp_id
			,content => 'OM TRACKING STAR TIMESERIES'
		);
	
		doCommand('omthconv'
			,thxset => $prepThFile
			,nphset => $nphkFile
			,outset => $TmpthTimeSeries
		) or return exception();

		if (fileExists(file => $TmpthTimeSeries))  {
		# Copy intermediate to prodcut
		
			my $thTimeSeries=newFile(class => 'product'
				,instrument => thisInstrument
				,exp_id => $exp_id
				,content => 'OM TRACKING STAR TIMESERIES'
			);

			copyFile(source => $TmpthTimeSeries
				,destination => $thTimeSeries
			);
		}
	# Make the tracking history plot
	
		my $psTHplot=newFile(class => 'intermediate'
			,instrument => thisInstrument
			,exp_id => $exp_id
			,content => 'OM TRACKING HISTORY PLOT'
			,'format' => 'PS'
		);

		doCommand('omdrifthist'
			,set => $prepThFile
			,plotfile => $psTHplot
		) or return exception();
			
		if( fileExists(file => $psTHplot) ){

			my $pdfTHplot=newFile(class => 'product'
				,instrument => thisInstrument
				,exp_id => $exp_id
				,content => 'OM TRACKING HISTORY PLOT'
				,'format' => 'PDF'
			);

			PStoPDF(source => $psTHplot
				,destination => $pdfTHplot
			) or return exception();
		}
	}
	return success();
}

1;