This is a brief tutorial example walk through of running the SNAP/SeaDAS gpt command line tool. This tutorial will demonstrate the use of the BandMaths operator in gpt. Examples of many operators can be found in the GPT Cookbook. |
1 Running gpt within the GUI GraphBuilder 2 Accessing gpt from the command line 3 Running gpt on the command line 4 Passing the input and output files as command line arguments |
1 Running gpt within the GUI GraphBuilder
The gpt processing can be run from within the GUI by using the GraphBuilder Tool. Let's use the
BandMaths gpt operator to generate an output file which contains a single custom mathematically derived band.
Open the GraphBuilder tool and you will notice that nodes for the "Read" and "Write" operators are automatically
loaded within the window by default.
Add in the BandMaths operator node by right-clicking inside the window and selecting "Add > Raster > BandMaths".
A square representing the BandMaths node should appear inside the window.
To establish a graph workflow you need to connect the nodes. To do this you can right-click in the GraphBuilder
window and select "Connect Graph". This will automatically connect all the nodes. Optionally you can draw each
node connection one at a time by hovering the mouse over the left edge of the receiving node and then dragging the
mouse to the desired source node. For more complicated graphs and graphs with parallel threads you will likely
need to draw the connections this way manually one at a time.
To configure the Read operator click on the "Read" tab and then choose an input file (aka
Source Product Name). For this example we will use the NASA ocean color file "A2010283180500.L2_LAC_OC.nc".
Then select the "Data Format" = "SeaDAS-L2".
To configure the Write operator click on the "Write" tab and then specify an output file (aka
Target Product Name and its Directory). For this example we will name it "A2010283180500.L2_LAC_OC.GptTutorialSection01.dim".
Then select the data format of the output file "Save as" = "BEAM-DIMAP".
To configure the BandMaths operator node click on the "BandMaths" tab and then specify the following (see image):
Before running gpt let's save the graph file for use later in section 3. To save the graph file click the
"Save" button and then select a file name for the graph "GptTutorialGraphSection03.xml"
Now run gpt by clicking the "Run" button. The file A2010283180500.L2_LAC_OC.GptTutorialSection01.dim will then be written in
the directory which you specified as well as be loaded into the "Product Explorer (File Manager)"
window.
2 Accessing gpt from the command line
TBD: discuss configuring path/alias to be "gpt" (platform dependent)
3 Running gpt on the command line
Now let's run gpt from the command line. In section 1 we ran gpt from the GUI GraphBuilder tool as well as saved the graph file "GptTutorialGraphSection03.xml". Here is that graph file.
File = GptTutorialGraphSection03.xml
<graph id="Graph"> <version>1.0</version> <node id="Read"> <operator>Read</operator> <sources/> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <file>/Users/seadas/GPT_Cookbook/GPT_Tutorial/A2010283180500.L2_LAC_OC.nc</file> <formatName>SeaDAS-L2</formatName> </parameters> </node> <node id="BandMaths"> <operator>BandMaths</operator> <sources> <sourceProduct refid="Read"/> </sources> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <targetBands> <targetBand> <name>aod</name> <type>float64</type> <expression>if (Kd_490 > 0) then 1.3/Kd_490 else NaN</expression> <description/> <unit>meters</unit> <noDataValue>NaN</noDataValue> </targetBand> </targetBands> <variables/> </parameters> </node> <node id="Write"> <operator>Write</operator> <sources> <sourceProduct refid="BandMaths"/> </sources> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <file>/Users/seadas/GPT_Cookbook/GPT_Tutorial/A2010283180500.L2_LAC_OC.GptTutorialSection03.dim</file> <formatName>BEAM-DIMAP</formatName> </parameters> </node> <applicationData id="Presentation"> <Description/> <node id="Read"> <displayPosition x="37.0" y="134.0"/> </node> <node id="BandMaths"> <displayPosition x="230.0" y="226.0"/> </node> <node id="Write"> <displayPosition x="455.0" y="135.0"/> </node> </applicationData> </graph> |
You will notice that the input and output files are explicitly defined in the graph file:
Input file: /Users/seadas/GPT_Cookbook/GPT_Tutorial/A2010283180500.L2_LAC_OC.nc
Output file: /Users/seadas/GPT_Cookbook/GPT_Tutorial/A2010283180500.L2_LAC_OC.GptTutorialSection03.dim
This is fine for now, we will address this in the next section.
Note: these absolute file paths will likely differ
from the graph file which you created in the previous example, so either use your graph
file or edit this one to reflect your absolute input/output file paths.
Also note: the placement locations of the nodes in "applicationData" will also likely differ in your file.)
To run this graph file from the command line execute the following command:
gpt GptTutorialGraphSection03.xml |
4 Passing the input and output files as command line arguments
We will continue the rest of this tutorial by running exclusively from the command line. The
previous example was a bit limited in that it cannot be reused for other input files. So
let's pull the explicitly defined input file and output file
out of the graph file and have it passed in as a command line argument. To do this we change 2 lines:
The line in the Read node:
<file>/Users/seadas/GPT_Cookbook/GPT_Tutorial/A2010283180500.L2_LAC_OC.nc</file>
will become:
<file>${ifile}</file>
The line in the Write node:
<file>/Users/seadas/GPT_Cookbook/GPT_Tutorial/A2010283180500.L2_LAC_OC.GptTutorialSection03.dim</file>
will become:
<file>${ofile}</file>
By doing this ${ifile} and ${ofile} will become parameters to be passed in at the command line. Note that the
GraphBuilder tool does not support these command line parameters so the GUI specific section "applicationData"
of the graph file is no longer needed and can be removed.
The resulting file should look like this:
File = GptTutorialGraphSection04.xml
<graph id="GptTutorialGraphSection04"> <version>1.0</version> <node id="Read"> <operator>Read</operator> <sources/> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <file>${ifile}</file> <formatName>SeaDAS-L2</formatName> </parameters> </node> <node id="BandMaths"> <operator>BandMaths</operator> <sources> <sourceProduct refid="Read"/> </sources> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <targetBands> <targetBand> <name>aod</name> <type>float64</type> <expression>if (Kd_490 > 0) then 1.3/Kd_490 else NaN</expression> <description/> <unit>meters</unit> <noDataValue>NaN</noDataValue> </targetBand> </targetBands> <variables/> </parameters> </node> <node id="Write"> <operator>Write</operator> <sources> <sourceProduct refid="BandMaths"/> </sources> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <file>${ofile}</file> <formatName>BEAM-DIMAP</formatName> </parameters> </node> </graph> |
This time when you run gpt from the command line you will pass in the input and output files as
parameters. To do this you use the convention -P{parameter_name}={parameter_value}. So you
will have the following 2 command line arguments:
-Pifile=A2010283180500.L2_LAC_OC.nc
-Pofile=A2010283180500.L2_LAC_OC.GptTutorialSection04.dim
Your gpt command line will look like this:
Command Line Entry
gpt GptTutorialGraphSection04.xml -Pifile=A2010283180500.L2_LAC_OC.nc -Pofile=A2010283180500.L2_LAC_OC.GptTutorialSection04.dim |
5 Adding in some parameters not available in the GUI
This isn't always the case, but there may be parameters available at the command line which are
not available (at least not yet) via the GUI. This section goes over how to find these parameters
and add them to your graph file.
If you have a familiarity with all the parameters normally in a SNAP/SeaDAS band you might notice
that some are missing in the graph file and in the BandMaths GUI. Take a look at the source file:
A2010283180500.L2_LAC_OC.nc. Right click on the band Kd_490 and select "Properties" and you will
notice that some useful parameters were not available in the GUI (these parameters should ideally be
added in a future release). It would be useful to have the "Valid-Pixel Expression" and perhaps
the "Description"
be available to you. The complete listing of parameters available for the BandMaths gpt operator
can be found by typing on the command line "gpt -h BandMaths".
Let's modify the graph file to add in the following parameter lines:
<description>apparent optical depth</description>
<validExpression>aod > (1.3/6.0) and aod < (1.3/0.01)</validExpression>
<spectralWavelength>490.0</spectralWavelength>
So your graph file will now look like this:
File = GptTutorialGraphSection05.xml
<graph id="GptTutorialGraphSection05"> <version>1.0</version> <node id="Read"> <operator>Read</operator> <sources/> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <file>${ifile}</file> <formatName>SeaDAS-L2</formatName> </parameters> </node> <node id="BandMaths"> <operator>BandMaths</operator> <sources> <sourceProduct refid="Read"/> </sources> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <targetBands> <targetBand> <name>aod</name> <type>float64</type> <expression>if (Kd_490 > 0) then 1.3/Kd_490 else NaN</expression> <description>apparent optical depth</description> <unit>meters</unit> <validExpression>aod > (1.3/6.0) and aod < (1.3/0.01)</validExpression> <noDataValue>NaN</noDataValue> <spectralWavelength>490.0</spectralWavelength> </targetBand> </targetBands> <variables/> </parameters> </node> <node id="Write"> <operator>Write</operator> <sources> <sourceProduct refid="BandMaths"/> </sources> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <file>${ofile}</file> <formatName>BEAM-DIMAP</formatName> </parameters> </node> </graph> |
Then run this on the command line as:
Command Line Entry
gpt GptTutorialGraphSection05.xml -Pifile=A2010283180500.L2_LAC_OC.nc -Pofile=A2010283180500.L2_LAC_OC.GptTutorialSection05.dim |
6 Using a parameter file
Another way to make your graph file more robust and reusable is to define parameters within
a separate parameter file which contains a name=value pair list.
To do this modify the following lines of GptTutorialGraphSection05.xml:
<name>aod</name> <type>float64</type> <expression>if (Kd_490 > 0) then 1.3/Kd_490 else NaN</expression> <description>apparent optical depth</description> <unit>meters</unit> <validExpression>aod > (1.3/6.0) and aod < (1.3/0.01)</validExpression> <noDataValue>NaN</noDataValue> <spectralWavelength>490.0</spectralWavelength>
<name>${band1Name}</name> <type>${band1Type}</type> <expression>${band1Expression}</expression> <description>${band1Description}</description> <unit>${band1Unit}</unit> <validExpression>${band1ValidExpression}</validExpression> <noDataValue>${band1NoDataValue}</noDataValue> <spectralWavelength>${band1SpectralWavelength}</spectralWavelength>
So your graph file will now look like this:
File = GptTutorialGraphSection06.xml
<graph id="GptTutorialGraphSection06"> <version>1.0</version> <node id="Read"> <operator>Read</operator> <sources/> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <file>${ifile}</file> <formatName>SeaDAS-L2</formatName> </parameters> </node> <node id="BandMaths"> <operator>BandMaths</operator> <sources> <sourceProduct refid="Read"/> </sources> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <targetBands> <targetBand> <name>${band1Name}</name> <type>${band1Type}</type> <expression>${band1Expression}</expression> <description>${band1Description}</description> <unit>${band1Unit}</unit> <validExpression>${band1ValidExpression}</validExpression> <noDataValue>${band1NoDataValue}</noDataValue> <spectralWavelength>${band1SpectralWavelength}</spectralWavelength> </targetBand> </targetBands> <variables/> </parameters> </node> <node id="Write"> <operator>Write</operator> <sources> <sourceProduct refid="BandMaths"/> </sources> <parameters class="com.bc.ceres.binding.dom.XppDomElement"> <file>${ofile}</file> <formatName>BEAM-DIMAP</formatName> </parameters> </node> </graph> |
File = GptTutorialSection06.par
band1Name=aod band1Type=float64 band1Expression=if (Kd_490 > 0) then 1.3/Kd_490 else NaN band1Description=apparent optical depth band1Unit=meters band1ValidExpression=aod > (1.3/6.0) and aod < (1.3/0.01) band1NoDataValue=NaN band1SpectralWavelength=490.0 |
Then run this on the command line as:
Command Line Entry
gpt GptTutorialGraphSection06.xml -p GptTutorialSection06.par -Pifile=A2010283180500.L2_LAC_OC.nc -Pofile=A2010283180500.L2_LAC_OC.GptTutorialSection06.dim |
Note: any of the parameters can be sent in via either the command line or the parameter file.