2323 *
2424 * The offset is linearly interpolated across layers:
2525 * layer z is moved by (z - zmin) / (zmax - zmin) * offset
26- *
27- * @author Michael Innerberger
2826 */
2927public class StackStraighteningClient {
3028
@@ -39,35 +37,11 @@ public static class Parameters extends CommandLineParameters {
3937 required = true )
4038 public String stack ;
4139
42- @ Parameter (
43- names = "--targetOwner" ,
44- description = "Name of target stack owner (default is same as source stack owner)" )
45- public String targetOwner ;
46-
47- @ Parameter (
48- names = "--targetProject" ,
49- description = "Name of target stack project (default is same as source stack project)" )
50- public String targetProject ;
51-
5240 @ Parameter (
5341 names = "--targetStack" ,
5442 description = "Name of target stack" ,
5543 required = true )
5644 public String targetStack ;
57-
58- @ Parameter (
59- names = "--completeTargetStack" ,
60- description = "Complete the target stack after processing all layers" ,
61- arity = 0 )
62- public boolean completeTargetStack = false ;
63-
64- public String getTargetOwner () {
65- return targetOwner == null ? renderWeb .owner : targetOwner ;
66- }
67-
68- public String getTargetProject () {
69- return targetProject == null ? renderWeb .project : targetProject ;
70- }
7145 }
7246
7347 public static void main (final String [] args ) {
@@ -81,51 +55,33 @@ public void runClient(final String[] args) throws Exception {
8155 LOG .info ("runClient: entry, parameters={}" , parameters );
8256
8357 final StackStraighteningClient client = new StackStraighteningClient (parameters );
84-
85- client .setupDerivedStack ();
8658 client .straightenStack ();
87-
88- if (parameters .completeTargetStack ) {
89- client .completeTargetStack ();
90- }
9159 }
9260 };
9361 clientRunner .run ();
9462 }
9563
9664 private final Parameters parameters ;
97- private final RenderDataClient sourceDataClient ;
98- private final RenderDataClient targetDataClient ;
65+ private final RenderDataClient renderDataClient ;
9966 private final List <Double > zValues ;
10067
10168 private StackStraighteningClient (final Parameters parameters )
10269 throws IOException {
10370
10471 this .parameters = parameters ;
105-
106- this .sourceDataClient = parameters .renderWeb .getDataClient ();
107- this .targetDataClient = new RenderDataClient (parameters .renderWeb .baseDataUrl ,
108- parameters .getTargetOwner (),
109- parameters .getTargetProject ());
110-
111- this .zValues = sourceDataClient .getStackZValues (parameters .stack );
72+ this .renderDataClient = parameters .renderWeb .getDataClient ();
73+ this .zValues = renderDataClient .getStackZValues (parameters .stack );
11274
11375 if (zValues .size () < 2 ) {
11476 throw new IllegalArgumentException ("Stack must have at least 2 layers for straightening" );
11577 }
11678 }
11779
118- private void setupDerivedStack () throws IOException {
119- final StackMetaData sourceStackMetaData = sourceDataClient .getStackMetaData (parameters .stack );
120- targetDataClient .setupDerivedStack (sourceStackMetaData , parameters .targetStack );
121- }
122-
123- private void completeTargetStack () throws Exception {
124- targetDataClient .setStackState (parameters .targetStack , StackMetaData .StackState .COMPLETE );
125- }
126-
12780 private void straightenStack () throws Exception {
12881
82+ final StackMetaData sourceStackMetaData = renderDataClient .getStackMetaData (parameters .stack );
83+ renderDataClient .setupDerivedStack (sourceStackMetaData , parameters .targetStack );
84+
12985 final double zMin = zValues .get (0 );
13086 final double zMax = zValues .get (zValues .size () - 1 );
13187
@@ -151,11 +107,13 @@ private void straightenStack() throws Exception {
151107 straightenLayer (z , zMin , zRange , totalOffsetX , totalOffsetY );
152108 }
153109
110+ renderDataClient .setStackState (parameters .targetStack , StackMetaData .StackState .COMPLETE );
111+
154112 LOG .info ("straightenStack: exit, processed {} layers" , zValues .size ());
155113 }
156114
157115 private double [] getLayerBoundingBoxMidpoint (final double z ) throws Exception {
158- final ResolvedTileSpecCollection tiles = sourceDataClient .getResolvedTiles (parameters .stack , z );
116+ final ResolvedTileSpecCollection tiles = renderDataClient .getResolvedTiles (parameters .stack , z );
159117 final Bounds layerBounds = tiles .toBounds ();
160118
161119 if (layerBounds == null || layerBounds .getMinX () == null ) {
@@ -180,7 +138,7 @@ private void straightenLayer(final Double z,
180138
181139 LOG .info ("straightenLayer: entry, z={}" , z );
182140
183- final ResolvedTileSpecCollection tiles = sourceDataClient .getResolvedTiles (parameters .stack , z );
141+ final ResolvedTileSpecCollection tiles = renderDataClient .getResolvedTiles (parameters .stack , z );
184142
185143 if (tiles .getTileCount () == 0 ) {
186144 LOG .info ("straightenLayer: no tiles for z={}, skipping" , z );
@@ -193,27 +151,22 @@ private void straightenLayer(final Double z,
193151 final double factor = (z - zMin ) / zRange ;
194152
195153 // The translation needed to straighten this layer
196- // We negate the offset because we want to move layers back toward the first layer's position
197154 final double translateX = -factor * totalOffsetX ;
198155 final double translateY = -factor * totalOffsetY ;
199156
200- if (Math .abs (translateX ) > 0.001 || Math .abs (translateY ) > 0.001 ) {
201- final AffineModel2D translationModel = new AffineModel2D ();
202- translationModel .set (1 , 0 , 0 , 1 , translateX , translateY );
157+ final AffineModel2D translationModel = new AffineModel2D ();
158+ translationModel .set (1 , 0 , 0 , 1 , translateX , translateY );
203159
204- final LeafTransformSpec translationTransform = new LeafTransformSpec (
205- translationModel .getClass ().getName (),
206- translationModel .toDataString ());
160+ final LeafTransformSpec translationTransform = new LeafTransformSpec (
161+ translationModel .getClass ().getName (),
162+ translationModel .toDataString ());
207163
208- tiles .preConcatenateTransformToAllTiles (translationTransform );
164+ tiles .preConcatenateTransformToAllTiles (translationTransform );
209165
210- LOG .info ("straightenLayer: applied translation ({}, {}) to {} tiles for z={}" ,
211- translateX , translateY , tiles .getTileCount (), z );
212- } else {
213- LOG .info ("straightenLayer: no significant translation needed for z={}" , z );
214- }
166+ LOG .info ("straightenLayer: applied translation ({}, {}) to {} tiles for z={}" ,
167+ translateX , translateY , tiles .getTileCount (), z );
215168
216- targetDataClient .saveResolvedTiles (tiles , parameters .targetStack , z );
169+ renderDataClient .saveResolvedTiles (tiles , parameters .targetStack , z );
217170
218171 LOG .info ("straightenLayer: exit, saved {} tiles for z={}" , tiles .getTileCount (), z );
219172 }
0 commit comments