## This template is made up of usable macros for Insight PDS4 Velocity Templates.
## This file must be placed in the same directory as the Velocity Templates
## to be used, otherwise the VelocityEngine will not be able to find it.
##
## To include this file in your template and use the macros, add the following
## at the top of your Velocity template:
##
## #parse ( "insight_velocity_macros.txt" )
##
##################################
## getProcessingLevel from the product type
##
#set ($PROCESSING_LEVEL = {
"EDR" : "Raw",
"EJP" : "Raw",
"ERP" : "Raw",
"LIN" : "Derived",
"BAY" : "Partially Processed",
"ILC" : "Partially Processed",
"ILM" : "Partially Processed",
"ILP" : "Partially Processed",
"ILT" : "Partially Processed",
"MSK" : "Derived",
"IOF" : "Calibrated",
"IOI" : "Calibrated",
"RAD" : "Calibrated",
"RAF" : "Calibrated",
"RAS" : "Calibrated",
"RDM" : "Calibrated",
"RIE" : "Calibrated",
"RIF" : "Calibrated",
"RSM" : "Calibrated",
"DDD" : "Derived",
"DDL" : "Derived",
"DDS" : "Derived",
"DSE" : "Derived",
"DSG" : "Derived",
"DSL" : "Derived",
"DSP" : "Derived",
"DSR" : "Derived",
"DSS" : "Derived",
"MDS" : "Derived",
"RUF" : "Derived",
"DFF" : "Derived",
"DFL" : "Derived",
"DFS" : "Derived",
"MXY" : "Calibrated",
"XYE" : "Calibrated",
"XYR" : "Calibrated",
"XYZ" : "Calibrated",
"XRM" : "Calibrated",
"XYM" : "Calibrated",
"XYF" : "Derived",
"XYO" : "Derived",
"DEM" : "Calibrated",
"XXX" : "Calibrated",
"YYY" : "Calibrated",
"ZZZ" : "Calibrated",
"XXF" : "Derived",
"YYF" : "Derived",
"ZZF" : "Derived",
"UVF" : "Derived",
"UVO" : "Derived",
"UVP" : "Derived",
"UVS" : "Calibrated",
"UVT" : "Derived",
"UVW" : "Calibrated",
"UUU" : "Calibrated",
"VVV" : "Calibrated",
"WWW" : "Calibrated",
"UUF" : "Derived",
"VVF" : "Derived",
"WWF" : "Derived",
"RNE" : "Calibrated",
"RNF" : "Derived",
"RNG" : "Calibrated",
"RNM" : "Calibrated",
"RNO" : "Derived",
"RNR" : "Calibrated",
"ARK" : "Derived",
"ARM" : "Derived",
"ARO" : "Derived",
"MAR" : "Derived",
"SEN" : "Derived",
"SHD" : "Derived",
"SHO" : "Derived",
"SLO" : "Derived",
"SLP" : "Derived",
"SMG" : "Derived",
"SMO" : "Derived",
"SNO" : "Derived",
"SNT" : "Derived",
"SRD" : "Derived",
"IEF" : "Derived",
"IEP" : "Derived",
"GUH" : "Derived",
"GUS" : "Derived",
"RUH" : "Derived",
"RUS" : "Derived",
"RUW" : "Derived",
"RUK" : "Derived",
"TDS" : "Derived",
"TFH" : "Derived",
"TFS" : "Derived",
"TFW" : "Derived",
"WSH" : "Derived",
"WSS" : "Derived",
"UIH" : "Derived",
"UIS" : "Derived",
"UIW" : "Derived",
"UPH" : "Derived",
"UPS" : "Derived",
"UPW" : "Derived",
"ZIH" : "Derived",
"ZIS" : "Derived",
"ZIW" : "Derived",
"XIH" : "Derived",
"XIS" : "Derived",
"XIW" : "Derived",
"TAU" : "Derived",
"TEN" : "Derived",
"TER" : "Derived",
"CNR" : "Derived",
"CNS" : "Derived",
"CNF" : "Derived",
"CNB" : "Derived",
"CNG" : "Derived",
"CSR" : "Derived",
"CSS" : "Derived",
"CSF" : "Derived",
"CSB" : "Derived",
"CSG" : "Derived",
"CPR" : "Derived",
"CPS" : "Derived",
"CPF" : "Derived",
"CPB" : "Derived",
"CPG" : "Derived",
"CWR" : "Derived",
"CWS" : "Derived",
"CWF" : "Derived",
"CWB" : "Derived",
"CWG" : "Derived",
"MNR" : "Derived",
"MNS" : "Derived",
"MNF" : "Derived",
"MNB" : "Derived",
"MNG" : "Derived",
"MSR" : "Derived",
"MSS" : "Derived",
"MSF" : "Derived",
"MSB" : "Derived",
"MSG" : "Derived",
"MPR" : "Derived",
"MPS" : "Derived",
"MPF" : "Derived",
"MPB" : "Derived",
"MPG" : "Derived",
"MWR" : "Derived",
"MWS" : "Derived",
"MWF" : "Derived",
"MWB" : "Derived",
"MWG" : "Derived"
})
#macro(getProcessingLevel $ptype $mosaic)
#if ($mosaic)
Derived##
#elseif ( $PROCESSING_LEVEL.containsKey($ptype) )
$PROCESSING_LEVEL.get($ptype)##
#else
Derived##
#end
#end
##################################
##################################
## Removes the version number from product ID
## and re-appends the extension.
## For use with non-image products where we want
## to remove the version ID but keep extension.
##
##
#macro(generatePID $pid)
#set ( $substrings = $pid.split("\.") )
#set ( $pidVid = $substrings[0] )
#set ( $ext = $substrings[1] )
#set ( $pidEnd = $pidVid.length() - 1 )
#set ( $finalPid = $pidVid.substring(0,$pidEnd) + '.' + $ext)
$finalPid.toLowerCase()##
#end
##################################
##################################
## generateLID from the product ID
##
## Most of LID is the same but will differ based on:
## * product type
## * instrument
##
## TODO add other product types
##
##
#macro(generateLID $prodtype $pid)
#if ( $prodtype.toUpperCase().equals("BROWSE") )
#set ($suffix = "browse")
#elseif ( $prodtype.toUpperCase().equals("CALIBRATION") )
#set ($suffix = "calibration")
#else
#set ($suffix = $prodtype)
#end
$PRODUCT_LID_PREFIX:$suffix:$pid##
#end
##################################
##################################
## generateLIDVID from the full product ID, including version_id
##
## Most of LID is the same but will differ based on:
## * product type
## * instrument
##
## TODO add other product types
##
##
#macro(generateLIDVID $prodtype $pidFull)
#if ( $prodtype.toUpperCase().equals("BROWSE") )
#set ($suffix = "browse")
#elseif ( $prodtype.toUpperCase().equals("CALIBRATION") )
#set ($suffix = "calibration")
#else
#set ($suffix = "data")
#end
##
#set ($_pidLength = $pidFull.length())
#if ($_pidLength == $PID_LENGTH)
#set ($_end = $PID_LENGTH - 1)
#set ($_version_id = $pidFull.substring($_end, $_pidLength) )
#set ($_pid = $pidFull.substring(0,$_end))
#else
#set ($_end = $MOSAIC_PID_LENGTH - 1)
#set ($_version_id = $pidFull.substring($_end, $_pidLength) )
#set ($_pid = $pidFull.substring(0,$_end))
#end
##
$PRODUCT_LID_PREFIX:$suffix:$_pid::${_version_id}.0##
#end
##################################
##################################
## Set Color Filter Array parameters
##
##
#macro( getCFAstate )
#set ( $_bayerAlg = $label.INSTRUMENT_STATE_PARMS.BAYER_METHOD.toString() )
##
#if ( $_bayerAlg.equals("RAW_BAYER") )
Encoded##
#elseif ( $_bayerAlg.equals("NONE") )
No CFA##
#else
Decoded##
#end
#end
##################################
##################################
## Get companding parameters
##
##
#macro(getCompandingParameters $sampleBitMethod $sampleBitModeId)
#set ($sampleBitMethod = $sampleBitMethod.toString())
#if ( ! $sampleBitModeId )
#set ($sampleBitModeId = "None")
#end
#if ( $sampleBitMethod.equals("SOFTWARE") )
#set ($compandingState = "Companded")
#set ($compandingVenue = "Software")
#elseif ( $sampleBitMethod.equals("SOFTWARE_INVERTED") )
#set ($compandingState = "Expanded")
#set ($compandingVenue = "Software")
#elseif ( $sampleBitMethod.equals("HARDWARE") )
#set ($compandingState = "Companded")
#set ($compandingVenue = "Hardware")
#elseif ( $sampleBitMethod.equals("HARDWARE_INVERTED") )
#set ($compandingState = "Expanded")
#set ($compandingVenue = "Hardware")
#end
#if ( $sampleBitMethod && ! $sampleBitMethod.equals("NONE") )
#debug("INSTRUMENT_STATE_PARMS.SAMPLE_BIT_METHOD")
$compandingState
#debug("Derived from INSTRUMENT_STATE_PARMS.SAMPLE_BIT_METHOD")
$compandingVenue
#debug("INSTRUMENT_STATE_PARMS.SAMPLE_BIT_MODE_ID")
$sampleBitModeId
#end
#end
##################################
## checkCoordSpaceOverloading
##
##
## InSight overloads the DERIVED_IMAGE_PARMS.REFERENCE_COORD_SYSTEM_NAME
## and DERIVED_IMAGE_PARMS.REFERENCE_COORD_SYSTEM_INDEX keywords. These
## keywords are always used to populate the
## in , but sometimes must also
## be copied to the in .
## This macro checks the value of DERIVED_IMAGE_PARMS.DERIVED_IMAGE_TYPE
## to determine which instances of to populate.
##
##
#set ($DERIVED_IMAGE_TYPES = [
"XYZ_MAP",
"UVW_MAP",
"XYZ_ERROR_MAP",
"RANGE_ERROR_MAP",
"RANGE_MAP",
"SLOPE_MAP",
"ROUGHNESS_MAP",
"X_MAP",
"Y_MAP",
"Z_MAP",
"ELEVATION_MAP",
"U_MAP",
"V_MAP",
"W_MAP",
"DOWNRANGE_ERROR_MAP",
"CROSSRANGE1_ERROR_MAP",
"CROSSRANGE2_ERROR_MAP",
"X_ERROR_MAP",
"Y_ERROR_MAP",
"Z_ERROR_MAP",
"INST_ROUGHNESS_MAP",
"INST_DELTA_TILT_MAP",
"INST_TILT_MAP",
"INST_UVS_MAP",
"INST_Z_MAP"
])
#macro (checkCoordSpaceOverloading $derivedImageType)
#if ( $DERIVED_IMAGE_TYPES.contains($derivedImageType) )
True
#else
False
#end
#end
##################################
##################################
## splitSolarTimeSol
##
## Takes input solar_time value of the format
## 00005M14:46:54.510 and splits it into the sol (5)
## and time (14:46:54.510) components.
##
#macro(splitSolarTimeSol $inputTime $timeOrSol)
#if( $inputTime )
#set ( $substrings = $inputTime.split("M") )
#if ( $timeOrSol.equals("sol") )
$substrings[0].replaceFirst("^0+(?!$)", "")##
#else
$substrings[1]##
#end
#end
#end
##################################
## getArrayDefinition
##
## Insight produces Array_2D and Array_3D
## This function will figure out which on it is
## and return the correct XML block.
##
##
#macro(getArrayDefinition $pid $label $derivedImageType)
#set($axes = $label.PDS4_IMAGE.axes[0])
#if ( $axes == 2 )
$pid
$generate.label_length
$label.PDS4_IMAGE.axes
Last Index Fastest
$label.PDS4_IMAGE.pds4_data_type
#if ($label.DERIVED_IMAGE_PARMS.RADIOMETRIC_CORRECTION_TYPE && $derivedImageType.equals("IMAGE"))
#debug("DERIVED_IMAGE_PARMS.RADIANCE_OFFSET__UNIT")
#if( $label.DERIVED_IMAGE_PARMS.RADIANCE_OFFSET__UNIT )
#transformUnits($label.DERIVED_IMAGE_PARMS.RADIANCE_OFFSET__UNIT.toString())
#end
#debug("DERIVED_IMAGE_PARMS.RADIANCE_SCALING_FACTOR")
$!label.DERIVED_IMAGE_PARMS.RADIANCE_SCALING_FACTOR
#debug("DERIVED_IMAGE_PARMS.RADIANCE_OFFSET")
$!label.DERIVED_IMAGE_PARMS.RADIANCE_OFFSET
#else
DN
#end
Line
$label.PDS4_IMAGE.nl
1
Sample
$label.PDS4_IMAGE.ns
2
#checkNA($label.IMAGE_DATA.MISSING_CONSTANT[0])
#checkNA($label.IMAGE_DATA.INVALID_CONSTANT[0])
#elseif ( $axes == 3 )
$pid
$generate.label_length
$label.PDS4_IMAGE.axes
Last Index Fastest
$label.PDS4_IMAGE.pds4_data_type
#if ($label.DERIVED_IMAGE_PARMS.RADIOMETRIC_CORRECTION_TYPE && $derivedImageType.equals("IMAGE"))
#debug("DERIVED_IMAGE_PARMS.RADIANCE_OFFSET__UNIT")
#if( $label.DERIVED_IMAGE_PARMS.RADIANCE_OFFSET__UNIT )
#transformUnits($label.DERIVED_IMAGE_PARMS.RADIANCE_OFFSET__UNIT.toString())
#end
#debug("DERIVED_IMAGE_PARMS.RADIANCE_SCALING_FACTOR")
$!label.DERIVED_IMAGE_PARMS.RADIANCE_SCALING_FACTOR
#debug("DERIVED_IMAGE_PARMS.RADIANCE_OFFSET")
$!label.DERIVED_IMAGE_PARMS.RADIANCE_OFFSET
#else
DN
#end
Band
$label.PDS4_IMAGE.nb
1
Line
$label.PDS4_IMAGE.nl
2
Sample
$label.PDS4_IMAGE.ns
3
#checkNA($label.IMAGE_DATA.MISSING_CONSTANT[0])
#checkNA($label.IMAGE_DATA.INVALID_CONSTANT[0])
#end
#end
##################################