Page MenuHomec4science

ColocalisationTest.java
No OneTemporary

File Metadata

Created
Sun, May 5, 11:04

ColocalisationTest.java

/*-
* #%L
* Fiji's plugin for colocalization analysis.
* %%
* Copyright (C) 2009 - 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 3 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-3.0.html>.
* #L%
*/
package sc.fiji.coloc.tests;
import net.imglib2.RandomAccessibleInterval;
import net.imglib2.algorithm.math.ImageStatistics;
import net.imglib2.img.Img;
import net.imglib2.type.logic.BitType;
import net.imglib2.type.numeric.RealType;
import net.imglib2.type.numeric.integer.UnsignedByteType;
import org.junit.After;
import org.junit.Before;
import sc.fiji.coloc.gadgets.MaskFactory;
public abstract class ColocalisationTest {
// images and meta data for zero correlation
RandomAccessibleInterval<UnsignedByteType> zeroCorrelationImageCh1;
RandomAccessibleInterval<UnsignedByteType> zeroCorrelationImageCh2;
RandomAccessibleInterval<BitType> zeroCorrelationAlwaysTrueMask;
double zeroCorrelationImageCh1Mean;
double zeroCorrelationImageCh2Mean;
// images and meta data for positive correlation test
// and real noisy image Manders' coeff with mask test
RandomAccessibleInterval<UnsignedByteType> positiveCorrelationImageCh1;
RandomAccessibleInterval<UnsignedByteType> positiveCorrelationImageCh2;
// open mask image as a bit type cursor
Img<UnsignedByteType> positiveCorrelationMaskImage;
RandomAccessibleInterval<BitType> positiveCorrelationAlwaysTrueMask;
double positiveCorrelationImageCh1Mean;
double positiveCorrelationImageCh2Mean;
// images and meta data for a synthetic negative correlation dataset
RandomAccessibleInterval<UnsignedByteType> syntheticNegativeCorrelationImageCh1;
RandomAccessibleInterval<UnsignedByteType> syntheticNegativeCorrelationImageCh2;
RandomAccessibleInterval<BitType> syntheticNegativeCorrelationAlwaysTrueMask;
double syntheticNegativeCorrelationImageCh1Mean;
double syntheticNegativeCorrelationImageCh2Mean;
// images like in the Manders paper
RandomAccessibleInterval<UnsignedByteType> mandersA, mandersB, mandersC, mandersD,
mandersE, mandersF, mandersG, mandersH, mandersI;
RandomAccessibleInterval<BitType> mandersAlwaysTrueMask;
/**
* This method is run before every single test is run and is meant to set up
* the images and meta data needed for testing image colocalisation.
*/
@Before
public void setup() {
zeroCorrelationImageCh1 = TestImageAccessor.loadTiffFromJar("/greenZstack.tif");
zeroCorrelationImageCh1Mean = ImageStatistics.getImageMean(zeroCorrelationImageCh1);
zeroCorrelationImageCh2 = TestImageAccessor.loadTiffFromJar("/redZstack.tif");
zeroCorrelationImageCh2Mean = ImageStatistics.getImageMean(zeroCorrelationImageCh2);
final long[] dimZeroCorrCh1 = new long[ zeroCorrelationImageCh1.numDimensions() ];
zeroCorrelationImageCh1.dimensions(dimZeroCorrCh1);
zeroCorrelationAlwaysTrueMask = MaskFactory.createMask(dimZeroCorrCh1, true);
positiveCorrelationImageCh1 = TestImageAccessor.loadTiffFromJar("/colocsample1b-green.tif");
positiveCorrelationImageCh1Mean = ImageStatistics.getImageMean(positiveCorrelationImageCh1);
positiveCorrelationImageCh2 = TestImageAccessor.loadTiffFromJar("/colocsample1b-red.tif");
positiveCorrelationImageCh2Mean = ImageStatistics.getImageMean(positiveCorrelationImageCh2);
positiveCorrelationMaskImage = TestImageAccessor.loadTiffFromJarAsImg("/colocsample1b-mask.tif");
final long[] dimPosCorrCh1 = new long[ positiveCorrelationImageCh1.numDimensions() ];
positiveCorrelationImageCh1.dimensions(dimPosCorrCh1);
positiveCorrelationAlwaysTrueMask = MaskFactory.createMask(dimPosCorrCh1, true);
syntheticNegativeCorrelationImageCh1 = TestImageAccessor.loadTiffFromJar("/syntheticNegCh1.tif");
syntheticNegativeCorrelationImageCh1Mean = ImageStatistics.getImageMean(syntheticNegativeCorrelationImageCh1);
syntheticNegativeCorrelationImageCh2 = TestImageAccessor.loadTiffFromJar("/syntheticNegCh2.tif");
syntheticNegativeCorrelationImageCh2Mean = ImageStatistics.getImageMean(syntheticNegativeCorrelationImageCh2);
final long[] dimSynthNegCorrCh1 = new long[ syntheticNegativeCorrelationImageCh1.numDimensions() ];
syntheticNegativeCorrelationImageCh1.dimensions(dimSynthNegCorrCh1);
syntheticNegativeCorrelationAlwaysTrueMask = MaskFactory.createMask(dimSynthNegCorrCh1, true);
mandersA = TestImageAccessor.loadTiffFromJar("/mandersA.tiff");
mandersB = TestImageAccessor.loadTiffFromJar("/mandersB.tiff");
mandersC = TestImageAccessor.loadTiffFromJar("/mandersC.tiff");
mandersD = TestImageAccessor.loadTiffFromJar("/mandersD.tiff");
mandersE = TestImageAccessor.loadTiffFromJar("/mandersE.tiff");
mandersF = TestImageAccessor.loadTiffFromJar("/mandersF.tiff");
mandersG = TestImageAccessor.loadTiffFromJar("/mandersG.tiff");
mandersH = TestImageAccessor.loadTiffFromJar("/mandersH.tiff");
mandersI = TestImageAccessor.loadTiffFromJar("/mandersI.tiff");
final long[] dimMandersA = new long[ mandersA.numDimensions() ];
mandersA.dimensions(dimMandersA);
mandersAlwaysTrueMask = MaskFactory.createMask(dimMandersA, true);
}
/**
* This method is run after every single test and is meant to clean up.
*/
@After
public void cleanup() {
// nothing to do
}
/**
* Creates a ROI offset array with a distance of 1/4 to the origin
* in each dimension.
*/
protected <T extends RealType<T>> long[] createRoiOffset(RandomAccessibleInterval<T> img) {
final long[] offset = new long[ img.numDimensions() ];
img.dimensions(offset);
for (int i=0; i<offset.length; i++) {
offset[i] = Math.max(1, img.dimension(i) / 4);
}
return offset;
}
/**
* Creates a ROI size array with a size of 1/2 of each
* dimension.
*/
protected <T extends RealType<T>> long[] createRoiSize(RandomAccessibleInterval<T> img) {
final long[] size = new long[ img.numDimensions() ];
img.dimensions(size);
for (int i=0; i<size.length; i++) {
size[i] = Math.max(1, img.dimension(i) / 2);
}
return size;
}
}

Event Timeline