/*- * #%L * Fiji distribution of ImageJ for the life sciences. * %% * Copyright (C) 2007 - 2017 Fiji developers. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-2.0.html>. * #L% */ package spim.fiji.spimdata.imgloaders; import java.io.File; import mpicbg.spim.data.generic.sequence.AbstractSequenceDescription; import mpicbg.spim.data.generic.sequence.BasicViewSetup; import mpicbg.spim.data.sequence.Angle; import mpicbg.spim.data.sequence.Channel; import mpicbg.spim.data.sequence.Illumination; import mpicbg.spim.data.sequence.IntegerPattern; import mpicbg.spim.data.sequence.TimePoint; import mpicbg.spim.data.sequence.ViewId; import mpicbg.spim.io.IOFunctions; import net.imglib2.img.Img; import net.imglib2.img.ImgFactory; import net.imglib2.img.cell.CellImgFactory; import net.imglib2.type.NativeType; import spim.fiji.datasetmanager.StackList; public abstract class LegacyStackImgLoader extends AbstractImgFactoryImgLoader { protected File path = null; protected String fileNamePattern = null; protected String replaceTimepoints, replaceChannels, replaceIlluminations, replaceAngles; protected int numDigitsTimepoints, numDigitsChannels, numDigitsIlluminations, numDigitsAngles; protected int layoutTP, layoutChannels, layoutIllum, layoutAngles; // 0 == one, 1 == one per file, 2 == all in one file protected AbstractSequenceDescription< ?, ?, ? > sequenceDescription; public File getPath() { return path; } public String getFileNamePattern() { return fileNamePattern; } public int getLayoutTimePoints() { return layoutTP; } public int getLayoutChannels() { return layoutChannels; } public int getLayoutIlluminations() { return layoutIllum; } public int getLayoutAngles() { return layoutAngles; } protected < T extends NativeType< T > > Img< T > instantiateImg( final long[] dim, final T type ) { Img< T > img; try { img = getImgFactory().imgFactory( type ).create( dim, type ); } catch ( Exception e1 ) { try { img = new CellImgFactory< T >( 256 ).create( dim, type ); } catch ( Exception e2 ) { img = null; } } return img; } protected File getFile( final ViewId view ) { final TimePoint tp = sequenceDescription.getTimePoints().getTimePoints().get( view.getTimePointId() ); final BasicViewSetup vs = sequenceDescription.getViewSetups().get( view.getViewSetupId() ); final String timepoint = tp.getName(); final String angle = vs.getAttribute( Angle.class ).getName(); final String channel = vs.getAttribute( Channel.class ).getName(); final String illum = vs.getAttribute( Illumination.class ).getName(); final String[] fileName = StackList.getFileNamesFor( fileNamePattern, replaceTimepoints, replaceChannels, replaceIlluminations, replaceAngles, timepoint, channel, illum, angle, numDigitsTimepoints, numDigitsChannels, numDigitsIlluminations, numDigitsAngles ); // check which of them exists and return it for ( final String fn : fileName ) { final File f = new File( path, fn ); if ( f.exists() ) return f; else IOFunctions.printlnSafe( "File '" + f.getAbsolutePath() + "' does not exist." ); } IOFunctions.printlnSafe( "Could not find file for tp=" + timepoint + ", angle=" + angle + ", channel=" + channel + ", ill=" + illum ); return null; } /** * For a local initialization without the XML * * @param path * @param fileNamePattern * @param imgFactory * @param layoutTP - 0 == one, 1 == one per file, 2 == all in one file * @param layoutChannels - 0 == one, 1 == one per file, 2 == all in one file * @param layoutIllum - 0 == one, 1 == one per file, 2 == all in one file * @param layoutAngles - 0 == one, 1 == one per file, 2 == all in one file */ public LegacyStackImgLoader( final File path, final String fileNamePattern, final ImgFactory< ? extends NativeType< ? > > imgFactory, final int layoutTP, final int layoutChannels, final int layoutIllum, final int layoutAngles, final AbstractSequenceDescription< ?, ?, ? > sequenceDescription ) { super(); this.path = path; this.fileNamePattern = fileNamePattern; this.layoutTP = layoutTP; this.layoutChannels = layoutChannels; this.layoutIllum = layoutIllum; this.layoutAngles = layoutAngles; this.sequenceDescription = sequenceDescription; this.init( imgFactory ); } protected void init( final ImgFactory< ? extends NativeType< ? > > imgFactory ) { setImgFactory( imgFactory ); replaceTimepoints = replaceChannels = replaceIlluminations = replaceAngles = null; numDigitsTimepoints = numDigitsChannels = numDigitsIlluminations = numDigitsAngles = -1; replaceTimepoints = IntegerPattern.getReplaceString( fileNamePattern, StackList.TIMEPOINT_PATTERN ); replaceChannels = IntegerPattern.getReplaceString( fileNamePattern, StackList.CHANNEL_PATTERN ); replaceIlluminations = IntegerPattern.getReplaceString( fileNamePattern, StackList.ILLUMINATION_PATTERN ); replaceAngles = IntegerPattern.getReplaceString( fileNamePattern, StackList.ANGLE_PATTERN ); if ( replaceTimepoints != null ) numDigitsTimepoints = replaceTimepoints.length() - 2; if ( replaceChannels != null ) numDigitsChannels = replaceChannels.length() - 2; if ( replaceIlluminations != null ) numDigitsIlluminations = replaceIlluminations.length() - 2; if ( replaceAngles != null ) numDigitsAngles = replaceAngles.length() - 2; /* IOFunctions.printlnSafe( replaceTimepoints ); IOFunctions.printlnSafe( replaceChannels ); IOFunctions.printlnSafe( replaceIlluminations ); IOFunctions.printlnSafe( replaceAngles ); IOFunctions.printlnSafe( layoutTP ); IOFunctions.printlnSafe( layoutChannels ); IOFunctions.printlnSafe( layoutIllum ); IOFunctions.printlnSafe( layoutAngles ); IOFunctions.printlnSafe( path ); IOFunctions.printlnSafe( fileNamePattern ); */ } }