Git Product home page Git Product logo

quimp's Introduction

Maven Central

About

QuimP software, a set of plugins for ImageJ, has been developed by Till Bretschneider, Richard Tyson and Piotr Baniukiewicz (current developer) to quantify spatio-temporal patterns of fluorescently labeled proteins in the cortex of moving cells.

QuimP was first described in Dormann et al., 2002. For information on the classic version, now called QuimP1, please follow this link.

QuimP2 which was developed in collaboration with Leonard Bosgraaf (Bosgraaf et al., 2009) introduced a new method to correlate local cortical fluorescence with membrane movement. An obsolete QuimP2 installation package can be downloaded here (Unzip the archive and move the contents of the two folders according to their directory name. The help icon that appears when launching the QuimP toolbar provides an in depth explanation of how to use the associated plugins and the individual parameters). An addon for pseudopod analysis resulted in QuimP3 which however is not officially supported by the main QuimP development team (contact Leonard Bosgraaf for help instead).

QuimP3 is currently under development. It supports user plugins, other segmentation algorithms, image pre-processing and offers many other features.

User documentation is available at http://pilip.lnx.warwick.ac.uk/docs/master/QuimP_Guide.html, developers can check http://pilip.lnx.warwick.ac.uk/site/apidocs/index.html

Citation

Please, make the following citation in any publication related to our software:

"QuimP [1] used in this study was developed at the University of Warwick with support from BBSRC (BBR grant BB/M01150X/1).โ€

[1] Piotr Baniukiewicz, Sharon Collier, Till Bretschneider, QuimP: analyzing transmembrane signalling in highly deformable cells. Bioinformatics, Volume 34, Issue 15, 1 August 2018, Pages 2695-2697, doi: 10.1093/bioinformatics/bty169.

Registration

Warwick University has introduced new security measures which meant the current registration process is broken.

Please use these credentials until further notice:

Till

Bretschneider

[email protected]

University of Warwick

6acabdc13ec3121d13defddcc8394a11

Build

Clone the repository and update submodules which are required to run tests:

git clone https://github.com/CellDynamics/QuimP.git
git submodule init
git submodule update

Then, use standard Maven approach, e.g.:

mvn package

This will produce QuimP_xxx.jar with program as well as separate jars with source and tests. Note that tests depend on git submodule repository which checks out to nonstandard resource folder.

Javadoc

JavaDoc jar is not built by default. To get it use:

mvn clean com.github.jeluard:plantuml-maven-plugin:generate javadoc:jar 

One can also use the profile build-javadoc provided by pom-scijava-base. This profile builds full Java doc with all direct dependencies attached:

mvn clean package -P build-javadoc -Dproject.build.sourceEncoding=cp1252
# QuimP uses UTF-8 encoding by default but some dependencies use other and build fails. Setting cp1252 partially solves the problem.  

Maven profiles

There are the following profiles defined in QuimP pom and closely related parent poms:

  1. installation - default profile, sets location of manual to master branch
  2. testing - block registration window
  3. development - sets location of manual to develop branch. It uses also mocked BOA filters and blocks registration window.
  4. dev-collectdeps - copies all project dependencies to target/dependencies

quimp's People

Contributors

baniuk avatar celldynamics avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

ysd421

quimp's Issues

Add history of actions

Reported by baniuk on 15 Mar 2016 20:00 UTC
There should be internal history - any action should be logged to history that will be related to frame of the stack. History can have only informational purpose. It may not be used for restoring configuration. Logged should be all parameters of plugins for ''frame'', all BOA parameters. Updated on any action on UI, overwriting old data for ''frame''

User should have option to switch this feature off

see SkypeMarko

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/87

Interrupt segmenetation

Reported by User on 29 Mar 2016 09:09 UTC

For now, I think it would be nice to be able to interrupt the segmentation. Sometimes I have a series with a lot of frames and it could take a fair amount of time for complete segmentation. So, if I decide, in the middle of the segmentation process, that I want to change one of the parameters, for that I have to wait the end of the process.

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/91

Optimize DIC filter

Reported by baniuk on 11 Mar 2016 14:58 UTC
Apply multithreading

  1. programming for ImageJ
  2. https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html
  3. http://zeroturnaround.com/rebellabs/java-parallel-streams-are-bad-for-your-health/
  4. http://www.vogella.com/tutorials/JavaConcurrency/article.html

Current version of LidReconstructor is not suitable to be parallelized because it uses constructor to hold some data and then attaches slice to process

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/84

Possible wrong rotation

Reported by baniuk on 9 Dec 2015 10:00 UTC
When created by constructor:

	/**
	 * Creates bounding box object from \a x \a y vectors.
	 * @warning Vectors are referenced only, not copied. They can
	 * be modified during rotation
	 * @warning Bounding box defined in this way must be centered at (0,) to avoid wrong rotation
	 * @param x \a x coordinates of bounding box in clockwise order
	 * @param y \a y coordinates of bounding box in clockwise order
	 */
	public RectangleBox(Vector<Double> x, Vector<Double> y) {
		this.x = x;
		this.y = y;
		logger.warn("Calling this constructor ona must be sure that rectangle is centered at (0,0)");
	}

rotation may be wrong when input object is not centered at (0,0)

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/51

Rework Snake nad Node classes

Reported by baniuk on 13 Apr 2016 12:52 UTC
These classes are almost similar to Outline and Vert used outside BOA. Think about the structure:

digraph G {
edge [               arrowhead = "empty"
        ](
)
node [               fontsize = 10
                shape = "record"
        ](
)
  "Node" -> "Vertex"
  "Vert" -> "Vertex"
  "Outline"->"Shape"
  "Snake"->"Shape"
"Snake"->"Node" [[dir=back,arrowtail="odiamond"](dir=back,arrowtail="odiamond"];
"Outline"->"Vert");
}

Vertex and Shape are base class that are extended to Snake, Node, etc. Snake and Outline use vertexes.

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/99

Optimize DIC for normal cpu

Reported by baniuk on 8 Dec 2015 10:49 UTC
Use basic optimization to speed up algorithm

Optimization of pixels to be processed can be done using fact that we can set background added during rotation and we can set filling of extended image

	protected ImageProcessor rotateImage(ImageProcessor ip, double angle) {
		ImageProcessor extendedImage = extendImage(ip, angle);
		extendedImage.setInterpolationMethod(ImageProcessor.BICUBIC);
		extendedImage.setBackgroundValue(0);
		// rotate rotates in clockwise direction thus shear angle should not be negated if it has been counted in proper mathematical way
		extendedImage.rotate(angle);
		return extendedImage;
	}
protected ImageProcessor extendImage(ImageProcessor srcImage, double angle) {
		int width = srcImage.getWidth();
		int height = srcImage.getHeight();
		// calculate future image size after rotation
		BoundingBox box = getBoundingBox(width, height, angle);
		// create image extended
		ImagePlus extendedImage = IJ.createImage("extendedImage", 
				box.getWidthInt(), 
				box.getHeightInt(), 
				1, 						// WARN possible problem with stack
				srcImage.getBitDepth());
		ImageProcessor extendedImageProc = extendedImage.getProcessor();
		logger.debug("duplicated: "+String.valueOf(extendedImage.getWidth()) + " " + String.valueOf(extendedImage.getHeight()));
		extendedImageProc.insert(srcImage,
				Math.round( (box.getWidth()-width)/2 )-1,
				Math.round( (box.getHeight()-height)/2 )-1
				);
		return extendedImage.getProcessor();
	}

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/48

extendImageBeforeRotation do not preserve original properties

Reported by baniuk on 10 Dec 2015 10:44 UTC
This method

	/**
	 * Add borders around image to prevent cropping during scaling.
	 * @warning Replaces original image and may not preserve all its attributes 
	 * @param angle Angle to be image rotated
	 */
	protected void extendImageBeforeRotation(double angle) {
		ImageProcessor ret;
		int width = ip.getWidth(); 
		int height = ip.getHeight(); 
		// get bounding box after rotation
		RectangleBox rb = new RectangleBox(width,height);
		rb.rotateBoundingBox(angle);
		int newWidth = (int)Math.round(rb.getWidth());
		int newHeight = (int)Math.round(rb.getHeight());
		// create new array resized
		ret = ip.createProcessor(newWidth, newHeight);
		// get current background - borders will have the same value
		ret.setValue(ip.getBackgroundValue()); // set current fill value for extended image
		ret.setBackgroundValue(ip.getBackgroundValue()); // set the same background as in original image
		ret.fill(); // change color of extended image
		ret.insert(ip,
				(int)Math.round( (newWidth - ip.getWidth())/2 ),
				(int)Math.round( (newHeight - ip.getHeight())/2 )
				); // insert original image into extended
		this.ip = ret; // assign extended into current
	}

creates new instance of underlying ImageProcessor object and delete the old one. But it does not copy any of properties to the new one (colors, rois etc)

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/53

Generalize rotation

Reported by baniuk on 8 Dec 2015 13:20 UTC

protected ImagePlus extendImage(ImagePlus srcImage, double angle, int newWidth, int newHeight) 

and other rotation related methods should be in separate class because rotation may be used in other DIC methods as well

There should be option for rotation with and without clipping

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/50

Add plugin configration saving

Reported by baniuk on 15 Mar 2016 19:55 UTC
Plugins should have their own configuration file that would keep list of active plugins and their configuration. This file should not be directly related to any certain datafile but it should be linked to it if necessary (e.g. on saving the project). Separate file will allow user to load configurations separately.

see SkypeMarko

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/86

Verify if saved snakes consider sethead plugin

Reported by baniuk on 19 Apr 2016 09:46 UTC
The test procedure is as follow:

  1. Enable TRACE log level to activate Snake saving in updateOverlay method
  2. Set ''Node density'' to 14
  3. Select object and look at nodes dumped in console
  4. Select SetHeadSnakeFilter and write down Nodes again
  5. Save project and look into ''*.snPQ'' file for saved Nodes positions

According to Manual:

The .snQP file contains data relating to the nodes of cell outlines (snake is a reference to active contours being described as snakes). Comment lines begin with a #. Data for frame f begins with the comment line #frame f, followed by a single integer value indicating the number of nodes that make up the outline (N). The following N rows hold the data for the nodes. The columns are as follows:
Node Position - The normalised position of the node in relation to node zero, n0 (see section 5.1).
X coord - The horizontal pixel coordinate of a node on the image used for segmentation.
Y coord - The vertical pixel coordinate of a node on the image used for segmentation.

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/100

Automated Protrusion Tracking

Reported by Peter J on 8 Jan 2016 10:36 UTC
Dear ,

happy new year!
Thank you for your kind reply to my previous e-mail.
I was able to work with the guide and manual and am continuing to work with QuimP to track fluorescently labeled cells.
The segmentation works very well and I am nicely able to analyze the speed and migration of cells.
** I would like to utilize the 'Automated Protrusion Tracking' that is mentioned the PNAS paper from 2014 (Fig 2) but couldn't figure out much by myself, in the methods part of the paper an automatic protrusion detection algorithm is mentioned. Ultimately I would like to analyze the dynamics of the protrusions and compare these in Ctrl vs KO cells. I have attached an example that I hope might give provide an impression of what kind of images and cells I'm working with.**
Some pointers would be much appreciated.

Many thanks,

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/61

Fix reference point over time

Reported by Carsten on 10 Dec 2015 14:25 UTC
Hi

thanks for helping us. I am happy to describe our question in English. We are currently using the ImageJ QuimP plugin to analyze membrane curvature in migrating cells. We would like to have a fix reference point over time, preferentially the uropod/trailing part of the cell. The other nodes along the curvature should then be assigned by ECMM (as usual). As I understand, the centroid of the cell body is already analyzed by the plugin, so we could use this as a reference. The zero node of the curvature could e.g. be difined by the displacement vector between t and t-1 (like in the scheme).
Till, you mentioned an earlier version of the plugin where we could set the zero node to the min or max value of x or y. This would also be helpful for us. Can you still provide the old version?

I am happy to answer questions.

Greetings,

[[Image(gfghieag.png)]]

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/54

Implement bidirectional communication between BOA and plugin

Reported by baniuk on 4 Mar 2016 10:01 UTC
There should be bidirectional communication between plugin and QuimP. Plugin should be able to redraw QuimP window. Any change of plugin parameter should be reflected in real time on all segmented cells. There are three possible integration levels:

  1. Every cell has its own plugins and settings
  2. Every frame has its own plugins and settings
  3. Plugins are applied to the whole stack

It seems that '''third''' option is the most reasonable now.

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/76

Ana plugin fails when image is created in IJ

Reported by baniuk on 18 Nov 2015 11:33 UTC
If image is created in IJ ANA fails on:

//System.out.println("flouIm dir: " + imp.getOriginalFileInfo().directory);
      if (imp.getOriginalFileInfo().directory.matches("")) {
         IJ.log("Error: Fluorescence file needs to be saved to disk");
         IJ.error("Please save your fluorescence image to file.");
         return DOES_8G + DOES_16 + NO_CHANGES;
      }

To reproduce open 2 channel file (e.g. Kay) and duplicate stack removing one channel and then run ANA on duplicated stack

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/38

Handling Exceptions from Plugins

Reported by baniuk on 11 Mar 2016 11:20 UTC
Rework method of handling exceptions from Plugins. Plugins can throw QuimpPluginException which is not considered as serious. For this exception, there should be an option to continue execution.

Currently, on this exception snake processed by the whole plugin stack is skipped and replaced by current liveSnake (see Technical notes)

Ideally it could be to have configuration option (see BOAp) that controls QuimP behaviour on such situation. For example it could skip the whole stack (as it does now) or skip only defective plugin, storing snake processed by all '''previous''' plugins. This requires revising iterateOverSnakePlugins method and catching exceptions inside for loop and eventually re-throwing them to caller.

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/81

BOA crashes when two-channel image opened

Reported by baniuk on 1 Oct 2015 11:33 UTC
To reproduce:

  1. Start Fiji
  2. Open ''*.lsm'' file from Kay folder
  3. Start BOA
    Got:
(Fiji Is Just) ImageJ 2.0.0-rc-39/1.50b; Java 1.8.0_51 [64-bit]; Linux 3.16.0-4-amd64; 472MB of 7334MB (6%)
 
java.lang.NullPointerException
	at java.awt.Container.remove(Container.java:1259)
	at uk.warwick.quimp_11b.BOA_$CustomStackWindow.buildWindow(BOA_.java:219)
	at uk.warwick.quimp_11b.BOA_$CustomStackWindow.access$000(BOA_.java:202)
	at uk.warwick.quimp_11b.BOA_.setup(BOA_.java:118)
	at uk.warwick.quimp_11b.BOA_.run(BOA_.java:83)
	at ij.IJ.runUserPlugIn(IJ.java:212)
	at ij.IJ.runPlugIn(IJ.java:176)
	at ij.Executer.runCommand(Executer.java:132)
	at ij.Executer.run(Executer.java:65)
	at ij.IJ.run(IJ.java:292)
	at ij.IJ.run(IJ.java:267)
	at ij.macro.Functions.doRun(Functions.java:603)
	at ij.macro.Functions.doFunction(Functions.java:96)
	at ij.macro.Interpreter.doStatement(Interpreter.java:227)
	at ij.macro.Interpreter.doStatements(Interpreter.java:215)
	at ij.macro.Interpreter.run(Interpreter.java:112)
	at ij.macro.Interpreter.run(Interpreter.java:82)
	at ij.macro.MacroRunner.run(MacroRunner.java:139)
	at java.lang.Thread.run(Thread.java:745)

Migrated-From: http://www.trac-wsbc.linkpc.net:8080/trac/QuimP/ticket/28

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.