Hello,
We want to know if something localizes to the axoneme of a cilium, but the signal is too noisy to do a simple Pearson's correlation. I wrote a short macro to create a large number of randomly translated 'clones' of a linear ROI made by the user over the body of a cilium; if the labeled protein is significantly in the axoneme then the profile should show greater localization (area under the curve, greater minima etc) than clones randomly positioned on the image. The macro works well, except for one annoying problem. Whenever I run this macro the first ROI, the one that the user draws, has been saved in the ROI manager in a slightly different position. Oddly it seems as if the Translate... function was applied to it with the defaults (10, 10) left in. The code is below. Any help would be greatly appreciated. Thanks, Tim Timothy Feinstein, Ph.D. Research Scientist University of Pittsburgh Department of Developmental Biology ________________________________ macro "Cilia Transect Analyzer [k]" { // the user draws a segmented line over the cilium roiManager("Add"); // add 20 randomly positioned ROIs: for (i=0; i<20; i++) { lateral = (((random*2)-1)*getWidth)/2; vertical = (((random*2)-1)*getHeight)/2; roiManager("Select", 0); roiManager("translate", lateral, vertical); run("Rotate...", "angle=" + (random*365-180)); roiManager("Add"); } // delete ROIs touching the edge n = roiManager("count"); for (i=n-1; i>=0; i--) { roiManager("select", i); getSelectionBounds(x, y, w, h); if (x<=0||y<=0||x+w>=getWidth||y+h>=getHeight) roiManager("delete"); } // select all ROIs and plot the transects roiManager("Deselect"); roiManager("Multi Plot"); } -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi Tim,
looking at your code, it seems clear that the roi entered by the user is not kept in its original position in the Roi Manager. The command roiManager("translate", lateral, vertical); moves the roi position stored in the Roi Manager. If you just want to move the roi, but keep its position in the Roi Manager unchanged, you can use getSelectionBounds(x, y, width, height); setSelectionLocation(x+lateral, y+vertical); There is one more potential problem: If the original roi is not near the center and would be placed outside, it seems that some feature of ImageJ puts the roi back to the center. On the long term, this creates too many rois in the center of the image, which may affect statistical tests. To prevent this, I would suggest to use setSelectionLocation on the rotated roi, with a position as follows: run("Rotate...", "angle=" + (random*365-180)); getSelectionBounds(x, y, width, height); lateral = random*(getWidth-width); vertical = random*(getHeight-height); setSelectionLocation(lateral, vertical); wait(50); Strange enough it seems that this does not work correctly without the 'wait(50);' before adding to the Roi Manager; there must be a race condition somewhere. Michael ______________________________________________________________________ On Fri, June 5, 2015 16:07, Feinstein, Timothy N wrote: > Hello, > > We want to know if something localizes to the axoneme of a cilium, but the > signal is too noisy to do a simple Pearson's correlation. I wrote a short > macro to create a large number of randomly translated 'clones' of a > linear ROI made by the user over the body of a cilium; if the labeled > protein is significantly in the axoneme then the profile should show > greater localization (area under the curve, greater minima etc) than > clones randomly positioned on the image. > > The macro works well, except for one annoying problem. Whenever I run > this macro the first ROI, the one that the user draws, has been saved in > the ROI manager in a slightly different position. Oddly it seems as if > the Translate... function was applied to it with the defaults (10, 10) > left in. The code is below. Any help would be greatly appreciated. > > Thanks, > > > Tim > > Timothy Feinstein, Ph.D. > Research Scientist > University of Pittsburgh Department of Developmental Biology > > ________________________________ > > macro "Cilia Transect Analyzer [k]" { > > // the user draws a segmented line over the cilium > > roiManager("Add"); > > // add 20 randomly positioned ROIs: > > for (i=0; i<20; i++) { > lateral = (((random*2)-1)*getWidth)/2; > vertical = (((random*2)-1)*getHeight)/2; > roiManager("Select", 0); > roiManager("translate", lateral, vertical); > run("Rotate...", "angle=" + (random*365-180)); > roiManager("Add"); > } > > // delete ROIs touching the edge > > n = roiManager("count"); > for (i=n-1; i>=0; i--) { > roiManager("select", i); > getSelectionBounds(x, y, w, h); > if (x<=0||y<=0||x+w>=getWidth||y+h>=getHeight) > roiManager("delete"); > } > > // select all ROIs and plot the transects > > roiManager("Deselect"); > roiManager("Multi Plot"); > > } > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html > -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
> On Jun 7, 2015, at 11:29 AM, Michael Schmid <[hidden email]> wrote:
> > Hi Tim, > > looking at your code, it seems clear that the roi entered by the user is > not kept in its original position in the Roi Manager. The command > roiManager("translate", lateral, vertical); > moves the roi position stored in the Roi Manager. > > If you just want to move the roi, but keep its position in the Roi Manager > unchanged, you can use > getSelectionBounds(x, y, width, height); > setSelectionLocation(x+lateral, y+vertical); > > There is one more potential problem: If the original roi is not near the > center and would be placed outside, it seems that some feature of ImageJ > puts the roi back to the center. > On the long term, this creates too many rois in the center of the image, > which may affect statistical tests. > To prevent this, I would suggest to use setSelectionLocation on the > rotated roi, with a position as follows: > run("Rotate...", "angle=" + (random*365-180)); > getSelectionBounds(x, y, width, height); > lateral = random*(getWidth-width); > vertical = random*(getHeight-height); > setSelectionLocation(lateral, vertical); > wait(50); > > Strange enough it seems that this does not work correctly without the > 'wait(50);' before adding to the Roi Manager; there must be a race > condition somewhere. This bug in the setSelectionLocation(x,y) macro function is fixed in the latest ImageJ daily build (1.49u18). -wayne > On Fri, June 5, 2015 16:07, Feinstein, Timothy N wrote: >> Hello, >> >> We want to know if something localizes to the axoneme of a cilium, but the >> signal is too noisy to do a simple Pearson's correlation. I wrote a short >> macro to create a large number of randomly translated 'clones' of a >> linear ROI made by the user over the body of a cilium; if the labeled >> protein is significantly in the axoneme then the profile should show >> greater localization (area under the curve, greater minima etc) than >> clones randomly positioned on the image. >> >> The macro works well, except for one annoying problem. Whenever I run >> this macro the first ROI, the one that the user draws, has been saved in >> the ROI manager in a slightly different position. Oddly it seems as if >> the Translate... function was applied to it with the defaults (10, 10) >> left in. The code is below. Any help would be greatly appreciated. >> >> Thanks, >> >> >> Tim >> >> Timothy Feinstein, Ph.D. >> Research Scientist >> University of Pittsburgh Department of Developmental Biology >> >> ________________________________ >> >> macro "Cilia Transect Analyzer [k]" { >> >> // the user draws a segmented line over the cilium >> >> roiManager("Add"); >> >> // add 20 randomly positioned ROIs: >> >> for (i=0; i<20; i++) { >> lateral = (((random*2)-1)*getWidth)/2; >> vertical = (((random*2)-1)*getHeight)/2; >> roiManager("Select", 0); >> roiManager("translate", lateral, vertical); >> run("Rotate...", "angle=" + (random*365-180)); >> roiManager("Add"); >> } >> >> // delete ROIs touching the edge >> >> n = roiManager("count"); >> for (i=n-1; i>=0; i--) { >> roiManager("select", i); >> getSelectionBounds(x, y, w, h); >> if (x<=0||y<=0||x+w>=getWidth||y+h>=getHeight) >> roiManager("delete"); >> } >> >> // select all ROIs and plot the transects >> >> roiManager("Deselect"); >> roiManager("Multi Plot"); >> >> } >> >> -- >> ImageJ mailing list: http://imagej.nih.gov/ij/list.html >> > > -- > ImageJ mailing list: http://imagej.nih.gov/ij/list.html -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Hi Michael and Wayne,
Many thanks for your help. It works as intended now. All the best, Tim Timothy Feinstein, Ph.D. Research Scientist University of Pittsburgh Department of Developmental Biology On 6/7/15, 1:53 PM, "Rasband, Wayne (NIH/NIMH) [E]" <[hidden email]> wrote: >> On Jun 7, 2015, at 11:29 AM, Michael Schmid <[hidden email]> >>wrote: >> >> Hi Tim, >> >> looking at your code, it seems clear that the roi entered by the user is >> not kept in its original position in the Roi Manager. The command >> roiManager("translate", lateral, vertical); >> moves the roi position stored in the Roi Manager. >> >> If you just want to move the roi, but keep its position in the Roi >>Manager >> unchanged, you can use >> getSelectionBounds(x, y, width, height); >> setSelectionLocation(x+lateral, y+vertical); >> >> There is one more potential problem: If the original roi is not near the >> center and would be placed outside, it seems that some feature of ImageJ >> puts the roi back to the center. >> On the long term, this creates too many rois in the center of the image, >> which may affect statistical tests. >> To prevent this, I would suggest to use setSelectionLocation on the >> rotated roi, with a position as follows: >> run("Rotate...", "angle=" + (random*365-180)); >> getSelectionBounds(x, y, width, height); >> lateral = random*(getWidth-width); >> vertical = random*(getHeight-height); >> setSelectionLocation(lateral, vertical); >> wait(50); >> >> Strange enough it seems that this does not work correctly without the >> 'wait(50);' before adding to the Roi Manager; there must be a race >> condition somewhere. > >This bug in the setSelectionLocation(x,y) macro function is fixed in the >latest ImageJ daily build (1.49u18). > >-wayne > >> On Fri, June 5, 2015 16:07, Feinstein, Timothy N wrote: >>> Hello, >>> >>> We want to know if something localizes to the axoneme of a cilium, but >>>the >>> signal is too noisy to do a simple Pearson's correlation. I wrote a >>>short >>> macro to create a large number of randomly translated 'clones' of a >>> linear ROI made by the user over the body of a cilium; if the labeled >>> protein is significantly in the axoneme then the profile should show >>> greater localization (area under the curve, greater minima etc) than >>> clones randomly positioned on the image. >>> >>> The macro works well, except for one annoying problem. Whenever I run >>> this macro the first ROI, the one that the user draws, has been saved >>>in >>> the ROI manager in a slightly different position. Oddly it seems as if >>> the Translate... function was applied to it with the defaults (10, 10) >>> left in. The code is below. Any help would be greatly appreciated. >>> >>> Thanks, >>> >>> >>> Tim >>> >>> Timothy Feinstein, Ph.D. >>> Research Scientist >>> University of Pittsburgh Department of Developmental Biology >>> >>> ________________________________ >>> >>> macro "Cilia Transect Analyzer [k]" { >>> >>> // the user draws a segmented line over the cilium >>> >>> roiManager("Add"); >>> >>> // add 20 randomly positioned ROIs: >>> >>> for (i=0; i<20; i++) { >>> lateral = (((random*2)-1)*getWidth)/2; >>> vertical = (((random*2)-1)*getHeight)/2; >>> roiManager("Select", 0); >>> roiManager("translate", lateral, vertical); >>> run("Rotate...", "angle=" + (random*365-180)); >>> roiManager("Add"); >>> } >>> >>> // delete ROIs touching the edge >>> >>> n = roiManager("count"); >>> for (i=n-1; i>=0; i--) { >>> roiManager("select", i); >>> getSelectionBounds(x, y, w, h); >>> if (x<=0||y<=0||x+w>=getWidth||y+h>=getHeight) >>> roiManager("delete"); >>> } >>> >>> // select all ROIs and plot the transects >>> >>> roiManager("Deselect"); >>> roiManager("Multi Plot"); >>> >>> } >>> >>> -- >>> ImageJ mailing list: http://imagej.nih.gov/ij/list.html >>> >> >> -- >> ImageJ mailing list: http://imagej.nih.gov/ij/list.html > >-- >ImageJ mailing list: http://imagej.nih.gov/ij/list.html -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Free forum by Nabble | Edit this page |