## 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 ##################################