Skip to content

Commit

Permalink
Initialize scijava-ops-flim
Browse files Browse the repository at this point in the history
This new repository contains a port of the flimj-ops library: https://github.com/flimlib/flimj-ops/
  • Loading branch information
gselzer committed Apr 2, 2024
1 parent b36fde6 commit b053728
Show file tree
Hide file tree
Showing 43 changed files with 4,994 additions and 5 deletions.
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
<module>scijava-meta</module>
<module>scijava-ops-api</module>
<module>scijava-ops-engine</module>
<module>scijava-ops-flim</module>
<module>scijava-ops-image</module>
<module>scijava-ops-legacy</module>
<module>scijava-ops-indexer</module>
Expand Down
1 change: 1 addition & 0 deletions scijava-ops-engine/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,7 @@
org.scijava.ops.engine.adapt.functional.InplacesToFunctions.Inplace16_14ToFunction16,
org.scijava.ops.engine.adapt.functional.InplacesToFunctions.Inplace16_15ToFunction16,
org.scijava.ops.engine.adapt.functional.InplacesToFunctions.Inplace16_16ToFunction16,
org.scijava.ops.engine.conversionLoss.impl.IdentityLossReporter,
org.scijava.ops.engine.eval.DefaultEval,
org.scijava.ops.engine.stats.Mean.MeanFunction;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -461,8 +461,9 @@ private double calculatePriority(OpEnvironment env) {
List<Type> originalInputs = info.inputTypes();
List<Type> inputs = inputTypes();
for (int i = 0; i < inputs.size(); i++) {
penalty += determineLoss(env, Nil.of(inputs.get(i)), Nil.of(originalInputs
.get(i)));
var from = inputs.get(i);
var to = Types.mapVarToTypes(originalInputs.get(i), typeVarAssigns);
penalty += determineLoss(env, Nil.of(from), Nil.of(to));
}

Type opOutput = info.outputType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,5 +234,6 @@ org.scijava.ops.engine.adapt.functional.InplacesToFunctions$Inplace16_13ToFuncti
org.scijava.ops.engine.adapt.functional.InplacesToFunctions$Inplace16_14ToFunction16
org.scijava.ops.engine.adapt.functional.InplacesToFunctions$Inplace16_15ToFunction16
org.scijava.ops.engine.adapt.functional.InplacesToFunctions$Inplace16_16ToFunction16
org.scijava.ops.engine.conversionLoss.impl.IdentityLossReporter
org.scijava.ops.engine.eval.DefaultEval
org.scijava.ops.engine.stats.Mean$MeanFunction
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,14 @@ public class ServiceLoaderDiscoveryIntegrationTest {
public void opDiscoveryRegressionIT() {
final Discoverer d = Discoverer.using(ServiceLoader::load);
final List<Op> discoveries = d.discover(Op.class);
Assertions.assertEquals(236, discoveries.size());
Assertions.assertEquals(237, discoveries.size());

@SuppressWarnings("unused")
final OpInfoGenerator g = new OpClassOpInfoGenerator();
final List<OpInfo> infos = discoveries.stream() //
.flatMap(c -> g.generateInfosFrom(c).stream()) //
.collect(Collectors.toList());
Assertions.assertEquals(236, infos.size());
Assertions.assertEquals(237, infos.size());
}

@Test
Expand Down
1 change: 1 addition & 0 deletions scijava-ops-engine/templates/main/java/module-info.vm
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ module org.scijava.ops.engine {
org.scijava.ops.engine.adapt.functional.InplacesToFunctions.Inplace${arity}_${a}ToFunction${arity},
#end
#end
org.scijava.ops.engine.conversionLoss.impl.IdentityLossReporter,
org.scijava.ops.engine.eval.DefaultEval,
org.scijava.ops.engine.stats.Mean.MeanFunction;

Expand Down
24 changes: 24 additions & 0 deletions scijava-ops-flim/LICENSE.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Copyright (c) 2024, SciJava developers.
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
70 changes: 70 additions & 0 deletions scijava-ops-flim/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# SciJava Ops FLIM: A fluorescence lifetime analysis library for SciJava Ops.

SciJava Ops FLIM is a collection of FLIM analysis ops based on [FLIMLib](https://github.com/flimlib/flimlib). It extends the single-transient fitting functions in FLIMLib to dataset-level fitting ops. Currently supported fitting ops include: RLD, MLA, Global, Phasor, and single-component Bayesian.

Besides curve fitting, SciJava Ops FLIM also provides a variety of pre-processing options such as pixel binning, intensity thresholding, ROI masking as well as post-processing utility ops for e.g. calculating τ<sub>m</sub> (mean lifetime), A<sub>i</sub>% (fractional contribution) and pseudocoloring the result with LUT.

# Example usage
Open [test2.sdt](test_files/test2.sdt) in [Fiji](https://fiji.github.io/). Execute in [Script Editor](http://imagej.github.io/Using_the_Script_Editor) as Groovy:

```groovy
#@ UIService ui
#@ OpEnvironment op
#@ ImgPlus img
// set up parameters
import org.scijava.ops.flim.FitParams
param = new FitParams()
param.transMap = img; // input 3-dimensional (x, y, t) dataset
param.xInc= 0.040 // time difference between bins (ns)
param.ltAxis = 2 // time bins lay along axis #2
// op call
fittedImg = op.unary("flim.fitLMA").input(param).apply().paramMap
// display each parameter
zImg = op.ternary("transform.hyperSliceView").input(fittedImg, param.ltAxis, 0L).apply()
AImg = op.ternary("transform.hyperSliceView").input(fittedImg, param.ltAxis, 1L).apply()
tauImg = op.ternary("transform.hyperSliceView").input(fittedImg, param.ltAxis, 2L).apply()
ui.show("z", zImg)
ui.show("A", AImg)
ui.show("tau", tauImg)
```

After running this script, the output shown below can be seen by first running the script, and then brightness and contrast (Ctrl + Shift + C, select "Set" and bound the contrast to each image's corresponding range below).

(z in [-1, 1], A in [0, 4], tau in[0, 3]):

![example output](images/example%20z.png)![example output](images/example%20A.png)![example output](images/example%20tau.png)

See more examples in [Demo.ipynb](notebooks/Demo.ipynb) and [groovy.md](groovy.md).

# Using from a Java project

To depend on SciJava Ops FLIM, copy the following to your `pom.xml`:

```xml
<properties>
<scijava-ops-flim.version>0-SNAPSHOT</scijava-ops-flim.version>
</properties>

<dependencies>
<dependency>
<groupId>org.scijava</groupId>
<artifactId>scijava-ops-flim</artifactId>
<version>${scijava-ops-flim.version}</version>
</dependency>
</dependencies>
```

# See also

- [FLIMLib](https://github.com/flimlib/flimlib): Curve fitting library for FLIM
- [Debug tutorial](https://github.com/flimlib/flimlib/wiki/Debugging)
- [FLIMJ Ops](https://github.com/flimlib/flimj-ops): ImageJ Ops for accessing FLIM

# Citation

Comming soon...
8 changes: 8 additions & 0 deletions scijava-ops-flim/environment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
name: scijava
channels:
- conda-forge
dependencies:
- beakerx
- jupyter_contrib_nbextensions
- numpy
- openjdk=11
Binary file added scijava-ops-flim/images/example A.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added scijava-ops-flim/images/example tau.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added scijava-ops-flim/images/example z.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit b053728

Please sign in to comment.