ERS Offset Tracking

I am having the same problem as was reported here: Offset Tracking (ERS)

I am running SNAP 7.0.3 and s1tbx 7.0.2 on Ubuntu 18.04, if that helps.

I have successfully applied the orbit files and (after a day of troubleshooting SNAP + DEM-related issues) run DEM-assisted co-registration on the following two scenes:

SAR_IMS_1PNESA19911114_071149_00000016A035_00035_01723_0000.E1
SAR_IMS_1PNESA19911102_071154_00000016A031_00035_01551_0000.E1

When I attempt to run offset tracking on the co-registered stack, I get the error message “Cannot find master or slave amplitude or slave bands”. I can’t manage to find the post now, but somewhere in a previous version of SNAP it was suggested to add ‘VV’ to the band name (i.e., i_mst_date becomes i_VV_mst_date), which at least gets rid of that error message (progress!), but replaces it with the very helpful “A problem occurred during the target product initialisation.”

The log for this particular error message reads:

SEVERE [org.esa.snap.rcp.SnapApp]: A problem occurred during the target product initialisation.
Type: OperatorException
Message: java.lang.NullPointerException

java.lang.NullPointerException
at org.esa.s1tbx.insar.gpf.OffsetTrackingOp.getSourceBand(OffsetTrackingOp.java:298)
at org.esa.s1tbx.insar.gpf.OffsetTrackingOp.getMasterSlaveBands(OffsetTrackingOp.java:279)
at org.esa.s1tbx.insar.gpf.OffsetTrackingOp.initialize(OffsetTrackingOp.java:228)
Caused: org.esa.snap.core.gpf.OperatorException
at org.esa.snap.engine_utilities.gpf.OperatorUtils.catchOperatorException(OperatorUtils.java:415)
at org.esa.s1tbx.insar.gpf.OffsetTrackingOp.initialize(OffsetTrackingOp.java:239)
at org.esa.snap.core.gpf.internal.OperatorContext.initializeOperator(OperatorContext.java:486)
at org.esa.snap.core.gpf.internal.OperatorContext.getTargetProduct(OperatorContext.java:273)
at org.esa.snap.core.gpf.Operator.getTargetProduct(Operator.java:387)
at org.esa.snap.core.gpf.GPF.createProductNS(GPF.java:330)
at org.esa.snap.core.gpf.GPF.createProduct(GPF.java:305)
at org.esa.snap.core.gpf.GPF.createProduct(GPF.java:284)
at org.esa.snap.graphbuilder.rcp.dialogs.SingleOperatorDialog.createTargetProduct(SingleOperatorDialog.java:175)
[catch] at org.esa.snap.graphbuilder.rcp.dialogs.SingleOperatorDialog.onApply(SingleOperatorDialog.java:287)
at org.esa.snap.ui.AbstractDialog.lambda$initUI$6(AbstractDialog.java:519)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

After 2+ days of trying, I have to ask - Is it possible to run offset tracking on ERS scenes using SNAP? Has anyone managed to succeed with this task?

what are the names of your bands in the ERS product after coregistration?

Did you check if both have valid data? For example, create an RGB image of the stack to test.

i_mst_02Nov1991
q_mst_02Nov1991
Intensity_mst_02Nov1991
i_slv1_14Nov1991
q_slv1_14Nov1991
Intensity_slv1_14Nov1991

All images have valid data - I managed to solve that problem by downloading and mosaicking the ASTER GDEM for the study area, since I can’t figure out how to get the GDEM to work by selecting it from the dialogue.

I did managed to “solve” this issue by first applying a calibration to the images, and I have some results now - after calibrating and co-registering, the band names are:

Sigma0_VV_mst_02Nov1991
Sigma0_VV_slv1_14Nov1991

Which apparently fulfills the same purpose as before, but somehow avoids the java error quoted above.

so the calibration solved the initial problem?

Yes, but I have no idea why those band names should work, while any of the other ones do not.

It makes sense to me because any multi-temporal comparison of images benefits from calibrated input products to make them comparable. I am however wondering why calibrating an already co-registered stack works in this case.
Anyhow, the initial tutorials by ESA and ASF use GRD products for the offset tracking and don’t apply calibration, so maybe this just related to the different data structure of the SLC products.

It didn’t. I first applied the calibration to each image, then re-did the co-registration.

Sure, but it seems to me that what happened here was not so much that, but that there’s a hidden requirement for the bands and band names that somehow isn’t fulfilled by the normal workflow.

If applying the calibration improved the results, that’d be one thing, but here I was getting seemingly unrelated error messages until after I applied the calibration. I think that points to the second thing you mention, that there’s perhaps a difference in the data structure that isn’t accounted for in the workflow.

I am running SNAP 8.0 and s1tbx 8.0.6 on windows10, if that helps.

I have successfully applied the orbit files and DEM-assisted co-registration.
Results the layer:Subset_S1A_IW_GRDH_1SDV_20220120T113327_20220120T113352_041544_04F0CF_0970_Orb_Stack
Band message:
Amplitude_VV_mst_20Jan2022
Amplitude_VV_slv1_01Feb2022

When run Offset-Tracking:
A problem occurred during the target product initialisation.
Type: OperatorException
Message: java.lang.NullPointerException

Click OK, An incorrect “Unexpected Exception"
A org.esa.snap.core.gpf.OperatorException exception has occurred.
Click Show Details or see the messages.log file located in your C:\Users\12819\AppData\Roaming\SNAP\var\log folder.

java.lang.NullPointerException
at org.esa.s1tbx.insar.gpf.OffsetTrackingOp.getSourceBand(OffsetTrackingOp.java:299)
at org.esa.s1tbx.insar.gpf.OffsetTrackingOp.getMasterSlaveBands(OffsetTrackingOp.java:280)
at org.esa.s1tbx.insar.gpf.OffsetTrackingOp.initialize(OffsetTrackingOp.java:229)
Caused: org.esa.snap.core.gpf.OperatorException
at org.esa.snap.engine_utilities.gpf.OperatorUtils.catchOperatorException(OperatorUtils.java:432)
at org.esa.s1tbx.insar.gpf.OffsetTrackingOp.initialize(OffsetTrackingOp.java:240)
at org.esa.snap.core.gpf.internal.OperatorContext.initializeOperator(OperatorContext.java:528)
at org.esa.snap.core.gpf.internal.OperatorContext.getTargetProduct(OperatorContext.java:298)
at org.esa.snap.core.gpf.Operator.getTargetProduct(Operator.java:385)
at org.esa.snap.core.gpf.GPF.createProductNS(GPF.java:333)
at org.esa.snap.core.gpf.GPF.createProduct(GPF.java:308)
at org.esa.snap.core.gpf.GPF.createProduct(GPF.java:287)
at org.esa.snap.graphbuilder.rcp.dialogs.SingleOperatorDialog.createTargetProduct(SingleOperatorDialog.java:175)
[catch] at org.esa.snap.graphbuilder.rcp.dialogs.SingleOperatorDialog.onApply(SingleOperatorDialog.java:287)
at org.esa.snap.ui.AbstractDialog.lambda$initUI$6(AbstractDialog.java:519)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

I think the problem is similar to yours. May I ask how to solve it in detail.