Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tgocassis ingest fixes for cas_cal_sc images #5435

Merged
merged 2 commits into from
Apr 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ release.
- Fixed ProgramLauncher failing while reporting errors from launched programs [#5331](https://github.com/DOI-USGS/ISIS3/pull/5331)
- Fixed high/low filter functionality in trimfilter [#5311](https://github.com/DOI-USGS/ISIS3/issues/5311)
- Fixed downloadIsisData script excluding needed files in the calibration folder [#5272](https://github.com/DOI-USGS/ISIS3/issues/5272)
- Fixed tgocassis2isis cas_cal_sc ingest errors and added error for cas_raw_sc images [#5413](https://github.com/DOI-USGS/ISIS3/issues/5413)

## [8.0.1] - 2023-08-23

Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,5 @@
# Translates CaSSIS xml labels into the Instrument PvlGroup values
# Translates CaSSIS PSA Calibrated xml labels into the Instrument PvlGroup values
# for the ingested ISIS cube labels.
#
# The Dependencies keyword specifies a tag or attribute at the same level as
# the InputKey that uniquely identifies the InputKey.
#
# Consider the following translation group and xml
#
# Group = Samples
# Auto
# InputPosition = (Array_2D_Image, Axis_Array)
# Dependencies = "tag@axis_name|Sample"
# InputKey = elements
# OutputName = Samples
# OutputPosition = (Group, Dimensions)
# Translation = (*, *)
# End_Group
#
# <Array_2D_Image>
# <Axis_Array>
# <axis_name>Line</axis_name>
# <sequence_number>1</sequence_number>
# <elements>2048</elements>
# </Axis_Array>
# <Axis_Array>
# <axis_name>Sample</axis_name>
# <sequence_number>2</sequence_number>
# <elements>279</elements>
# </Axis_Array>
# </Array_2D_Image>
#
# There are two Axis_Array tags below Array_2D_Image and both of them have an
# elements tag. So, the Dependencies keyword specifies to take the value of
# the elements tag under the second Axis_Array array tag because it also has a
# axis_name tag with a value of Sample.
#
#
# This translation table is for translating CaSSIS xml labels into pvl cube
# labels.
#
# See $ISISROOT/appdata/translations/XmlExample.trn for an example xml translation table
# and documentation for the different options.
#
# history 2018-05-17 Kaitlyn Lee - Added ObservationId with a placeholder value for now.

Group = SpacecraftName
Auto
Expand All @@ -50,11 +8,9 @@ Group = SpacecraftName
InputKey = name
OutputName = SpacecraftName
OutputPosition = (Object,IsisCube,Group,Instrument)
Translation = (*, *)
Translation = ("TRACE GAS ORBITER", "TGO")
End_Group



Group = InstrumentId
Auto
InputPosition = (Observation_Area, Observing_System, Observing_System_Component)
Expand All @@ -76,15 +32,6 @@ Group = Expanded
Translation = (1, *)
End_Group

Group = ObservationId
Auto
InputPosition = (Identification_Area, Alias_List, Alias)
InputKey = alternate_id
OutputName = ObservationId
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = TargetName
Auto
InputPosition = (Observation_Area, Target_Identification)
Expand Down Expand Up @@ -114,46 +61,44 @@ End_Group

Group = Filter
Auto
InputPosition = (Observation_Area, Discipline_Area, img:Imaging, img:Optical_Filter)
InputKey = img:filter_name
InputPosition = (Observation_Area, Mission_Area, em16_tgo_cas:Cassis_Data, em16_tgo_cas:HK_Derived_Data)
InputKey = em16_tgo_cas:filter
OutputName = Filter
OutputPosition = (Object,IsisCube,Group,Instrument)
Translation = (*, *)
End_Group

Group = FilterName
Auto
InputPosition = (Observation_Area, Discipline_Area, img:Imaging, img:Optical_Filter)
InputKey = img:filter_name
InputPosition = (Observation_Area, Mission_Area, em16_tgo_cas:Cassis_Data, em16_tgo_cas:HK_Derived_Data)
InputKey = em16_tgo_cas:filter
OutputName = Filter
OutputPosition = (Object,IsisCube,Group,BandBin)
Translation = (*, *)
End_Group

Group = Center
Auto
InputPosition = (Observation_Area, Discipline_Area, img:Imaging, img:Optical_Filter)
InputKey = img:filter_name
InputPosition = (Observation_Area, Mission_Area, em16_tgo_cas:Cassis_Data, em16_tgo_cas:HK_Derived_Data)
InputKey = em16_tgo_cas:filter
OutputName = Center
OutputPosition = (Object, IsisCube, Group, BandBin)
Translation = (678.2, PAN)
Translation = (494.8, BLU)
Translation = (836.0, RED)
Translation = (939.3, NIR)

End_Group

Group = Width
Auto
InputPosition = (Observation_Area, Discipline_Area, img:Imaging, img:Optical_Filter)
InputKey = img:filter_name
InputPosition = (Observation_Area, Mission_Area, em16_tgo_cas:Cassis_Data, em16_tgo_cas:HK_Derived_Data)
InputKey = em16_tgo_cas:filter
OutputName = Width
OutputPosition = (Object, IsisCube, Group, BandBin)
Translation = (231.9, PAN)
Translation = (121.8, BLU)
Translation = (98.5, RED)
Translation = (133.6, NIR)

End_Group

Group = Expanded
Expand All @@ -166,4 +111,14 @@ Group = Expanded
Translation = (*, *)
End_Group

Group = UniqueIdentifier
Auto
Optional
InputPosition = (Observation_Area, Mission_Area, em16_tgo_cas:Cassis_Data, em16_tgo_cas:Image_Command)
InputKey = em16_tgo_cas:unique_identifier
OutputName = UniqueIdentifier
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

End
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
# Translates CaSSIS xml labels into the Instrument PvlGroup values
# for the ingested ISIS cube labels.
#
# The Dependencies keyword specifies a tag or attribute at the same level as
# the InputKey that uniquely identifies the InputKey.
#
# Consider the following translation group and xml
#
# Group = Samples
# Auto
# InputPosition = (Array_2D_Image, Axis_Array)
# Dependencies = "tag@axis_name|Sample"
# InputKey = elements
# OutputName = Samples
# OutputPosition = (Group, Dimensions)
# Translation = (*, *)
# End_Group
#
# <Array_2D_Image>
# <Axis_Array>
# <axis_name>Line</axis_name>
# <sequence_number>1</sequence_number>
# <elements>2048</elements>
# </Axis_Array>
# <Axis_Array>
# <axis_name>Sample</axis_name>
# <sequence_number>2</sequence_number>
# <elements>279</elements>
# </Axis_Array>
# </Array_2D_Image>
#
# There are two Axis_Array tags below Array_2D_Image and both of them have an
# elements tag. So, the Dependencies keyword specifies to take the value of
# the elements tag under the second Axis_Array array tag because it also has a
# axis_name tag with a value of Sample.
#
#
# This translation table is for translating CaSSIS xml labels into pvl cube
# labels.
#
# See $ISISROOT/appdata/translations/XmlExample.trn for an example xml translation table
# and documentation for the different options.
#
# history 2018-05-17 Kaitlyn Lee - Added ObservationId with a placeholder value for now.

Group = SpacecraftName
Auto
InputPosition = (Observation_Area, Observing_System, Observing_System_Component)
InputKeyDependencies = "tag@type|Host"
InputKey = name
OutputName = SpacecraftName
OutputPosition = (Object,IsisCube,Group,Instrument)
Translation = (*, *)
End_Group



Group = InstrumentId
Auto
InputPosition = (Observation_Area, Observing_System, Observing_System_Component)
InputKeyDependencies = "tag@type|Instrument"
InputKey = name
OutputName = InstrumentId
OutputPosition = (Object,IsisCube,Group,Instrument)
Translation = (*, *)
End_Group

Group = Expanded
Auto
InputDefault = 1
InputPosition = (Observation_Area, Observing_System, Observing_System_Component)
InputKeyDependencies = "tag@type|Host"
InputKey = name
OutputName = Expanded
OutputPosition = (Object,IsisCube,Group,Instrument)
Translation = (1, *)
End_Group

Group = ObservationId
Auto
InputPosition = (Identification_Area, Alias_List, Alias)
InputKey = alternate_id
OutputName = ObservationId
OutputPosition = (Object, IsisCube, Group, Archive)
Translation = (*, *)
End_Group

Group = TargetName
Auto
InputPosition = (Observation_Area, Target_Identification)
InputKey = name
OutputName = TargetName
OutputPosition = (Object,IsisCube,Group,Instrument)
Translation = (*, *)
End_Group

Group = StartTime
Auto
InputPosition = (Observation_Area, Time_Coordinates)
InputKey = start_date_time
OutputName = StartTime
OutputPosition = (Object,IsisCube,Group,Instrument)
Translation = (*, *)
End_Group

Group = ExposureDuration
Auto
InputPosition = (Observation_Area, Mission_Area, em16_tgo_cas:Cassis_Data, em16_tgo_cas:PEHK_Derived_Data)
InputKey = em16_tgo_cas:exposure_time
OutputName = ExposureDuration
OutputPosition = (Object, IsisCube, Group, Instrument)
Translation = (*, *)
End_Group

Group = Filter
Auto
InputPosition = (Observation_Area, Discipline_Area, img:Imaging, img:Optical_Filter)
InputKey = img:filter_name
OutputName = Filter
OutputPosition = (Object,IsisCube,Group,Instrument)
Translation = (*, *)
End_Group

Group = FilterName
Auto
InputPosition = (Observation_Area, Discipline_Area, img:Imaging, img:Optical_Filter)
InputKey = img:filter_name
OutputName = Filter
OutputPosition = (Object,IsisCube,Group,BandBin)
Translation = (*, *)
End_Group

Group = Center
Auto
InputPosition = (Observation_Area, Discipline_Area, img:Imaging, img:Optical_Filter)
InputKey = img:filter_name
OutputName = Center
OutputPosition = (Object, IsisCube, Group, BandBin)
Translation = (678.2, PAN)
Translation = (494.8, BLU)
Translation = (836.0, RED)
Translation = (939.3, NIR)

End_Group

Group = Width
Auto
InputPosition = (Observation_Area, Discipline_Area, img:Imaging, img:Optical_Filter)
InputKey = img:filter_name
OutputName = Width
OutputPosition = (Object, IsisCube, Group, BandBin)
Translation = (231.9, PAN)
Translation = (121.8, BLU)
Translation = (98.5, RED)
Translation = (133.6, NIR)
End_Group

Group = Expanded
Auto
Optional
InputPosition = (CaSSIS_Header, DERIVED_HEADER_DATA)
InputKey = Expanded
OutputName = Expanded
OutputPosition = (Object, IsisCube, Group, Instrument)
Translation = (*, *)
End_Group

End
2 changes: 2 additions & 0 deletions isis/src/tgo/apps/tgocassis2isis/TgoCassisRdr.trn
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ Group = CoreType
OutputName = CoreType
OutputPosition = (Group, Pixels)
Translation = (Real, IEEE754LSBSingle)
Translation = (UnsignedWord, UnsignedLSB2)
End_Group

Group = CoreByteOrder
Expand All @@ -92,6 +93,7 @@ Group = CoreByteOrder
OutputPosition = (Group, Pixels)
Translation = (Lsb, IEEE754LSBSingle)
Translation = (Lsb, SignedLSB2)
Translation = (Lsb, UnsignedLSB2)
End_Group

Group = CoreBase
Expand Down
14 changes: 13 additions & 1 deletion isis/src/tgo/apps/tgocassis2isis/tgocassis2isis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@ namespace Isis {
void tgocassis2isis(UserInterface &ui) {
FileName xmlFileName = ui.GetFileName("FROM");

if (!xmlFileName.removeExtension().addExtension("dat").fileExists() && !xmlFileName.removeExtension().addExtension("img").fileExists()) {
QString msg = "Cannot find image file for [" + xmlFileName.name() + "]. Confirm that the "
".dat or .img file for this XML exists and is located in the same directory.";
throw IException(IException::User, msg, _FILEINFO_);
}
if(xmlFileName.name().contains("cas_raw_sc")){
QString msg = "tgocassis2isis is unable to process cas_raw_sc data. Please use cas_cal_sc data instead.";
throw IException(IException::User, msg, _FILEINFO_);
}

try {
ProcessImport importer;
translateCoreInfo(xmlFileName, importer);
Expand All @@ -59,9 +69,11 @@ namespace Isis {
QFile xmlFile(xmlFileName.expanded());
QDomDocument xmlDoc;
xmlDoc.setContent(&xmlFile, true);
// If any instances of "Optical_Filter" exist, use PSA .trn file
// If any instances of "Optical_Filter" or "Mission_Area" exist, use PSA .trn file
QString transExportFile;
if (xmlDoc.elementsByTagName("Optical_Filter").size()){
transExportFile = "TgoCassisExportedInstrument_PSA_Optical_Filter.trn";
} else if (xmlDoc.elementsByTagName("Mission_Area").size()) {
transExportFile = "TgoCassisExportedInstrument_PSA.trn";
} else {
transExportFile = "TgoCassisExportedInstrument.trn";
Expand Down