def openMainDialogBox():
    #od = OpenDialog("Selectionner un fichier")
    #folder = od.getDirectory()
    #IJ.log(folder);
    #filename = od.getFileName() #intérêt de récupérer le nom du fichier -> récupérer l'extension
    #extension = od.getFileName().split('.').pop() #Array.pop(). Pratique pour faire une fonction getExtension()
    #IJ.log(folder+filename)

    # Create an instance of GenericDialogPlus
    mainDialogBox = GenericDialogPlus("Restack Tiff deconvolved images from Huygens")
    mainDialogBox.addMessage("Ne fonctionnera correctement que si les noms des fichiers images de sortie de Huygens ont ete laisses intacts. Ne pas les modifier.")
    #mainDialogBox.addButton("Ouvrir image", imageSelectionListener())
    mainDialogBox.addMessage("------------------------------------------")
    mainDialogBox.addDirectoryField("Choisir un repertoire-cible", "None")
    mainDialogBox.addMessage("------------------------------------------")
    mainDialogBox.addDirectoryField("Choisir un repertoire pour deposer les piles d'images", "None")
    mainDialogBox.addMessage("------------------------------------------")

    #Select File Type
    choixType = ["1 fichier par canal (NOM_FICHIER_chXX.tif)", "1 fichier par canal + temps (NOM_FICHIER_tXX_chXX.tif)", "1 fichier par canal et par profondeur (NOM_FICHIER_zXX_chXX.tif)", "1 fichier par canal et par profondeur + temps (NOM_FICHIER_tXX_zXX_chXX.tif)"]
    selectionType = choixType[0]
    mainDialogBox.addChoice("Selectionner type de fichiers",choixType,selectionType)
    mainDialogBox.addMessage("------------------------------------------")

    choixDisplayMode = ["Color", "Greyscale", "Composite"]
    selectionDisplayModeDefaut = choixDisplayMode[0]
    mainDialogBox.addChoice("Color Display Mode",choixDisplayMode,selectionDisplayModeDefaut)
    mainDialogBox.addMessage("------------------------------------------")
    #Affichage de la boîte de dialogue
    mainDialogBox.showDialog();

    #Récupération choix
    folder = mainDialogBox.getNextString()
    save_folder = mainDialogBox.getNextString()
    vecteurChoix=mainDialogBox.getChoices()
    selectionTypeFichier = vecteurChoix[0]
    valeurSelectionTypeFichier = str(selectionTypeFichier.getSelectedItem())
    selectionDisplayMode = vecteurChoix[1]
    valeurSelectionDisplayMode = str(selectionDisplayMode.getSelectedItem())

    if mainDialogBox.wasCanceled() == True:
        print("Canceled, Values set to None")
        folder = None
        save_folder = None
        valeurSelectionTypeFichier = None
        valeurSelectionDisplayMode = None

    return folder, save_folder, valeurSelectionTypeFichier, valeurSelectionDisplayMode
def previewDialog(imp):
    gd = GenericDialogPlus("Nuclear segmentation and quantification v1.01")

    #create a list of the channels in the provided imagePlus
    types = []
    for i in xrange(1, imp.getNChannels() + 1):
        types.append(str(i))

    #user can pick which channel to base the segmentation on
    gd.addChoice("Channel number to use for segmentation", types, types[0])
    gd.addChoice("Channel to quantify", types, types[0])
    methods = [
        "Otsu", "Default", "Huang", "Intermodes", "IsoData", "IJ_IsoData",
        "Li", "MaxEntropy", "Mean", "MinError", "Minimum", "Moments",
        "Percentile", "RenyiEntropy", "Shanbhag", "Triangle", "Yen"
    ]
    gd.addChoice("Autosegmentation method", methods, methods[0])
    intensities = ["254", "4094", "65534"]
    gd.addChoice("Max Intensity", intensities, intensities[-1])
    gd.addSlider("Small DoG sigma", 0.5, 10, 1, 0.1)
    gd.addSlider("Large DoG sigma", 0.5, 20, 5, 0.1)
    gd.addCheckbox("TopHat background subtraction? (Slower, but better) ",
                   True)
    gd.addSlider("TopHat sigma", 5, 20, 8, 0.1)
    gd.setModal(False)
    gd.addCheckbox("Manually set threshold? ", False)
    gd.addSlider("Manual threshold", 10, 65534, 2000, 1)

    gd.hideCancelButton()
    gd.showDialog()

    cal = imp.getCalibration()
    pixelAspect = (cal.pixelDepth / cal.pixelWidth)

    originalTitle = imp1.getTitle()

    choices = gd.getChoices()
    print choices
    sliders = gd.getSliders()
    checkboxes = gd.getCheckboxes()
    segmentChannel = int(choices.get(0).getSelectedItem())
    quantChannel = int(choices.get(1).getSelectedItem())
    thresholdMethod = choices.get(2).getSelectedItem()
    maxIntensity = int(choices.get(3).getSelectedItem())
    gaussianSigma = sliders.get(0).getValue() / 10.0
    largeDoGSigma = gd.sliders.get(1).getValue() / 10.0
    topHat = gd.checkboxes.get(0).getState()
    topHatSigma = gd.sliders.get(2).getValue() / 10.0

    manualSegment = gd.checkboxes.get(1).getState()
    manualThreshold = gd.sliders.get(3).getValue()

    segmentChannelOld = segmentChannel
    thresholdMethodOld = thresholdMethod
    maxIntensityOld = maxIntensity
    gaussianSigmaOld = gaussianSigma
    largeDoGSigmaOld = largeDoGSigma
    topHatOld = topHat
    topHatSigmaOld = topHatSigma
    manualSegmentOld = manualSegment
    manualThresholdOld = manualThreshold

    clij2.clear()

    segmentImp = extractChannel(imp1, segmentChannel, 0)

    try:
        gfx1 = clij2.push(segmentImp)
        gfx2 = clij2.create(gfx1)
        gfx3 = clij2.create(gfx1)
        gfx4 = clij2.create(gfx1)
        gfx5 = clij2.create(gfx1)
        gfx7 = clij2.create([imp.getWidth(), imp.getHeight()])
    except:
        try:

            Thread.sleep(500)
            IJ.log(
                "Succeeded to sending to graphics card on the second time...")
            gfx1 = clij2.push(segmentImp)
            gfx2 = clij2.create(gfx1)
            gfx3 = clij2.create(gfx1)
            gfx4 = clij2.create(gfx1)
            gfx5 = clij2.create(gfx1)
            gfx7 = clij2.create([imp.getWidth(), imp.getHeight()])
        except:
            errorDialog(
                """Could not send image to graphics card, it may be too large!
		
			Easy solutions: Try	processing as 8-bit, cropping or scaling the image, or
			select a different CLIJ2 GPU.

			This issue is often intermittent, so trying again may also work! 

			See the "Big Images on x graphics cards' notes at:
			https://clij2.github.io/clij2-docs/troubleshooting for more solutions
			
			""" + str(clij2.reportMemory()))

    gfx1, gfx2, gfx3, gfx4, gfx5 = segment(gfx1, gfx2, gfx3, gfx4, gfx5,
                                           gaussianSigma, thresholdMethod,
                                           maxIntensity, largeDoGSigma,
                                           pixelAspect, originalTitle, topHat,
                                           topHatSigma, manualSegment,
                                           manualThreshold)
    clij2.maximumZProjection(gfx5, gfx7)

    labelPrevImp = clij2.pull(gfx7)
    IJ.setMinAndMax(labelPrevImp, 0, clij2.getMaximumOfAllPixels(gfx7))
    labelPrevImp.setTitle("Preview segmentation")
    labelPrevImp.show()

    IJ.run("glasbey_inverted")

    while ((not gd.wasCanceled()) and not (gd.wasOKed())):

        segmentChannel = int(choices.get(0).getSelectedItem())
        quantChannel = int(choices.get(1).getSelectedItem())
        thresholdMethod = choices.get(2).getSelectedItem()
        maxIntensity = int(choices.get(3).getSelectedItem())
        gaussianSigma = sliders.get(0).getValue() / 10.0
        largeDoGSigma = gd.sliders.get(1).getValue() / 10.0
        topHat = gd.checkboxes.get(0).getState()
        topHatSigma = gd.sliders.get(2).getValue() / 10.0

        manualSegment = gd.checkboxes.get(1).getState()
        manualThreshold = gd.sliders.get(3).getValue()

        if (segmentChannelOld != segmentChannel
                or thresholdMethodOld != thresholdMethod
                or maxIntensityOld != maxIntensity
                or gaussianSigmaOld != gaussianSigma
                or largeDoGSigmaOld != largeDoGSigma or topHatOld != topHat
                or topHatSigmaOld != topHatSigma
                or manualSegmentOld != manualSegment
                or manualThresholdOld != manualThreshold):

            if segmentChannelOld != segmentChannel:
                clij2.clear()
                segmentImp = extractChannel(imp1, segmentChannel, 0)
                gfx1 = clij2.push(segmentImp)
                gfx2 = clij2.create(gfx1)
                gfx3 = clij2.create(gfx1)
                gfx4 = clij2.create(gfx1)
                gfx5 = clij2.create(gfx1)
                gfx7 = clij2.create([imp.getWidth(), imp.getHeight()])
            gfx1, gfx2, gfx3, gfx4, gfx5 = segment(
                gfx1, gfx2, gfx3, gfx4, gfx5, gaussianSigma, thresholdMethod,
                maxIntensity, largeDoGSigma, pixelAspect, originalTitle,
                topHat, topHatSigma, manualSegment, manualThreshold)
            clij2.maximumZProjection(gfx5, gfx7)
            labelPrevImp.close()
            labelPrevImp = clij2.pull(gfx7)
            IJ.setMinAndMax(labelPrevImp, 0, clij2.getMaximumOfAllPixels(gfx7))
            labelPrevImp.setTitle("Preview segmentation")
            labelPrevImp.show()

            IJ.run("glasbey_inverted")

        segmentChannelOld = segmentChannel
        thresholdMethodOld = thresholdMethod
        maxIntensityOld = maxIntensity
        gaussianSigmaOld = gaussianSigma
        largeDoGSigmaOld = largeDoGSigma
        topHatOld = topHat
        topHatSigmaOld = topHatSigma

        manualSegmentOld = manualSegment
        manualThresholdOld = manualThreshold

        Thread.sleep(200)
    labelPrevImp.close()

    return segmentChannel, quantChannel, thresholdMethod, maxIntensity, gaussianSigma, largeDoGSigma, topHat, topHatSigma, manualSegment, manualThreshold
gd.addDirectoryOrFileField("Input Image or Image Directory",None,dirFieldWidth)
imgdirf = gd.getStringFields().get(2)

gd.setInsets(10,gdMargin,10)
gd.addMessage("Output folders:")
outputf=gd.getMessage()

# what to do: affine/warp/reformat
gd.setInsets(10,200,10)
gd.addCheckboxGroup(3,2,["affine","01","warp","02","reformat","03"],[True,True,True,True,True,True],["Registration Actions","Reformat Channels"])
#gd.addCheckboxGroup(1,3,["01","02","03"],[True,True,True],["Reformat Channels"])

# Registration options 
# Jefferis,Potter 2007, Cachero,Ostrovsky 2010, Manual
gd.addChoice("Registration Params",["Jefferis, Potter 2007","Cachero, Ostrovsky 2010"],"Jefferis, Potter 2007")
choicef=gd.getChoices().get(0)
print choicef.getSelectedItem()

# final Action (Test, Run, Write Script)
gd.addChoice("Action",["Test","Write Script","Run"],"Write Script")
font=Font("SansSerif",Font.BOLD,12)

# Advanced options
gd.setInsets(25,100,10)
gd.addMessage("Advanced Options:",font)
advancedoptionsf=gd.getMessage()

ncores=Runtime.getRuntime().availableProcessors()
defaultCores=1
if ncores >=8:
    defaultCores=4
Example #4
0
def previewDialog(imp):
	gd = GenericDialogPlus("FRETENATOR")

	#create a list of the channels in the provided imagePlus
	types = []
	for i in xrange(1, imp.getNChannels()+1):
		types.append(str(i))
	gd.addMessage("""Rowe, J. H, Rizza, A., Jones A. M. (2022) Quantifying phytohormones
	in vivo with FRET biosensors and the FRETENATOR analysis toolset
	Methods in Molecular Biology
	Rowe, JH., Grangé-Guermente, M., Exposito-Rodriguez, M.,Wimalasekera, R., Lenz, M.,
	Shetty, K., Cutler, S., Jones, AM., Next-generation ABACUS biosensors reveal cellular
	ABA dynamics driving root growth at low aerial humidity
	""")
	#user can pick which channel to base the segmentation on
	if len(types)>2:
		gd.addChoice("Channel number to use for segmentation", types, types[2])
		gd.addChoice("Channel number to use for donor", types, types[0])
		gd.addChoice("Channel number to use for acceptor (FRET)", types, types[1])
		gd.addChoice("Channel number to use for acceptor", types, types[2])
		#print('YAY')
	else:
		gd.addChoice("Channel number to use for segmentation", types, types[-1])
		gd.addChoice("Channel number to use for donor", types, types[0])
		gd.addChoice("Channel number to use for acceptor (FRET)", types, types[-2])
		gd.addChoice("Channel number to use for acceptor", types, types[-1])
	
	methods=["Otsu","Default", "Huang", "Intermodes", "IsoData", "IJ_IsoData", "Li", "MaxEntropy", "Mean", "MinError", "Minimum", "Moments", "Percentile", "RenyiEntropy", "Shanbhag", "Triangle", "Yen"]
	gd.addChoice("Autosegmentation method", methods, methods[0])
	intensities=["254", "4094", "65534"]
	gd.addChoice("Max Intensity", intensities, intensities[-1])
	gd.addSlider("Small DoG sigma", 0.5, 10, 0.8, 0.1)
	gd.addSlider("Large DoG sigma", 0.5, 20, 4 ,0.1)
	gd.addCheckbox("TopHat background subtraction? (Slower, but better) ", False)
	gd.addSlider("TopHat sigma", 5, 20, 8 ,0.1)
	gd.setModal(False)
	gd.addCheckbox("Manually set threshold? ", False)
	gd.addSlider("Manual threshold", 10, 65534, 2000, 1)
	dilationOptions=["0", "1", "2","3", "4", "5", "6"]
	gd.addChoice("Dilation?", dilationOptions, "0")
	gd.addCheckbox("Size exclusion of ROI? ", False)
	gd.addSlider("Minimum ROI size", 0, 9999, 20, 1)
	gd.addSlider("Maximum ROI size", 1, 10000, 10000, 1)
	gd.addCheckbox("Create nearest point projection with outlines (SLOW)? ", True)
	gd.addCheckbox("Watershed object splitting? ", True)
	gd.showDialog()

		
	cal = imp.getCalibration()
	pixelAspect=(cal.pixelDepth/cal.pixelWidth)
	
	originalTitle=imp1.getTitle()
	
	choices=gd.getChoices()
	sliders=gd.getSliders()
	checkboxes=gd.getCheckboxes()		
	segmentChannel=int(choices.get(0).getSelectedItem())
	donorChannel=int(choices.get(1).getSelectedItem())
	acceptorChannel=int(choices.get(2).getSelectedItem())
	acceptorChannel2=int(choices.get(3).getSelectedItem())
	thresholdMethod=choices.get(4).getSelectedItem()
	maxIntensity=int(choices.get(5).getSelectedItem())
	gaussianSigma=sliders.get(0).getValue()/10.0
	largeDoGSigma = gd.sliders.get(1).getValue()/10.0
	topHat=gd.checkboxes.get(0).getState()
	topHatSigma=gd.sliders.get(2).getValue()/10.0
	
	manualSegment = gd.checkboxes.get(1).getState()
	manualThreshold=gd.sliders.get(3).getValue()
	dilation=int(choices.get(6).getSelectedItem())
	sizeExclude=gd.checkboxes.get(2).getState()
	minSize = gd.sliders.get(4).getValue()
	maxSize = gd.sliders.get(5).getValue()
	watershed = gd.checkboxes.get(4).getState()
	#print dir(gd.sliders.get(5))
	#print maxSize
	
	segmentChannelOld=segmentChannel
	thresholdMethodOld=thresholdMethod
	maxIntensityOld=maxIntensity
	gaussianSigmaOld=gaussianSigma
	largeDoGSigmaOld= largeDoGSigma
	topHatOld=topHat
	topHatSigmaOld=topHatSigma
	manualSegmentOld= manualSegment
	manualThresholdOld=manualThreshold
	dilationOld=dilation
	sizeExcludeOld=sizeExclude
	minSizeOld=minSize
	maxSizeOld=maxSize
	watershedOld=watershed
	clij2.clear()
	
	segmentImp=extractChannel(imp1, segmentChannel, 0)

	try:
		gfx1=clij2.push(segmentImp)
		gfx2=clij2.create(gfx1)
		gfx3=clij2.create(gfx1)
		gfx4=clij2.create(gfx1)
		gfx5=clij2.create(gfx1)
		gfx7=clij2.create([imp.getWidth(), imp.getHeight()])
	except:	
		try:
		
			Thread.sleep(500)
			print("Succeeded to sending to graphics card on the second time...")
			gfx1=clij2.push(segmentImp)
			gfx2=clij2.create(gfx1)
			gfx3=clij2.create(gfx1)
			gfx4=clij2.create(gfx1)
			gfx5=clij2.create(gfx1)
			gfx7=clij2.create([imp.getWidth(), imp.getHeight()])
		except:
			errorDialog("""Could not send image to graphics card, it may be too large!
		
			Easy solutions: Try	processing as 8-bit, cropping or scaling the image, or
			select a different CLIJ2 GPU.

			This issue is often intermittent, so trying again may also work! 

			See the "Big Images on x graphics cards' notes at:
			https://clij2.github.io/clij2-docs/troubleshooting for more solutions
			
			"""	+ str(clij2.reportMemory()) )


	gfx1,gfx2,gfx3,gfx4,gfx5 = segment(gfx1,gfx2,gfx3,gfx4,gfx5, gaussianSigma, thresholdMethod,maxIntensity, largeDoGSigma, pixelAspect, originalTitle, topHat, topHatSigma , manualSegment, manualThreshold, dilation,sizeExclude, minSize, maxSize, watershed)
	clij2.maximumZProjection(gfx5, gfx7)

	labelPrevImp= clij2.pull(gfx7)
	IJ.setMinAndMax(labelPrevImp, 0,clij2.getMaximumOfAllPixels(gfx7))
	labelPrevImp.setTitle("Preview segmentation")
	labelPrevImp.show()
	
	IJ.run("glasbey_inverted")
	
	while ((not gd.wasCanceled()) and not (gd.wasOKed())):
		

		segmentChannel=int(choices.get(0).getSelectedItem())
		donorChannel=int(choices.get(1).getSelectedItem())
		acceptorChannel=int(choices.get(2).getSelectedItem())
		acceptorChannel2=int(choices.get(3).getSelectedItem())
		thresholdMethod=choices.get(4).getSelectedItem()
		maxIntensity=int(choices.get(5).getSelectedItem())
		gaussianSigma=sliders.get(0).getValue()/10.0
		largeDoGSigma = gd.sliders.get(1).getValue()/10.0
		topHat=gd.checkboxes.get(0).getState()
		topHatSigma=gd.sliders.get(2).getValue()/10.0

		manualSegment = gd.checkboxes.get(1).getState()
		manualThreshold = gd.sliders.get(3).getValue()
		
		dilation=int(choices.get(6).getSelectedItem())
		
		sizeExclude=gd.checkboxes.get(2).getState()
		minSize = gd.sliders.get(4).getValue()
		maxSize = gd.sliders.get(5).getValue()
		watershed = gd.checkboxes.get(4).getState()
			
	
		if (segmentChannelOld !=segmentChannel or
		thresholdMethodOld !=thresholdMethod or
		maxIntensityOld !=maxIntensity or
		gaussianSigmaOld !=gaussianSigma or
		largeDoGSigmaOld != largeDoGSigma or
		topHatOld !=topHat or
		topHatSigmaOld !=topHatSigma or
		manualSegmentOld != manualSegment or
		manualThresholdOld !=manualThreshold or
		dilation != dilationOld or
		sizeExcludeOld!=sizeExclude or
		minSizeOld!=minSize or
		maxSizeOld!=maxSize or
		watershedOld!=watershed
		):
			if minSizeOld!=minSize:
				if minSize>=maxSize:
					maxSize=minSize+1
					gd.sliders.get(5).setValue(maxSize)
			if maxSizeOld!=maxSize:
				if minSize>=maxSize:
					minSize=maxSize-1
					gd.sliders.get(4).setValue(minSize)
			if segmentChannelOld!=segmentChannel:
					clij2.clear()
					segmentImp=extractChannel(imp1, segmentChannel, 0)
					gfx1=clij2.push(segmentImp)
					gfx2=clij2.create(gfx1)
					gfx3=clij2.create(gfx1)
					gfx4=clij2.create(gfx1)
					gfx5=clij2.create(gfx1)
					gfx7=clij2.create([imp.getWidth(), imp.getHeight()])
			gfx1,gfx2,gfx3,gfx4,gfx5 = segment(gfx1,gfx2,gfx3,gfx4,gfx5, gaussianSigma, thresholdMethod,maxIntensity, largeDoGSigma, pixelAspect, originalTitle, topHat,topHatSigma, manualSegment, manualThreshold, dilation,sizeExclude, minSize, maxSize, watershed)
			clij2.maximumZProjection(gfx5, gfx7)
			labelPrevImp.close()
			labelPrevImp= clij2.pull(gfx7)
			IJ.setMinAndMax(labelPrevImp, 0,clij2.getMaximumOfAllPixels(gfx7))
			labelPrevImp.setTitle("Preview segmentation")
			labelPrevImp.show()
			
			IJ.run("glasbey_inverted")
		
		segmentChannelOld=segmentChannel
		thresholdMethodOld=thresholdMethod
		maxIntensityOld=maxIntensity
		gaussianSigmaOld=gaussianSigma
		largeDoGSigmaOld = largeDoGSigma
		topHatOld=topHat
		topHatSigmaOld=topHatSigma
		manualSegmentOld= manualSegment
		manualThresholdOld=manualThreshold
		dilationOld=dilation
		sizeExcludeOld=sizeExclude
		minSizeOld=minSize
		maxSizeOld=maxSize
		watershedOld=watershed
		Thread.sleep(200)
	labelPrevImp.close()
	makeNearProj = gd.checkboxes.get(3).getState()
	return segmentChannel, donorChannel, acceptorChannel, acceptorChannel2, thresholdMethod, maxIntensity, gaussianSigma, largeDoGSigma, topHat, topHatSigma, manualSegment, manualThreshold, makeNearProj, dilation, sizeExclude, minSize, maxSize, watershed
Example #5
0
    gd.addMessage("Output folders:")
    outputf = gd.getMessage()

    # what to do: affine/warp/reformat
    gd.setInsets(10, 200, 10)
    gd.addCheckboxGroup(3, 2, ["affine", "01", "warp", "02", "reformat", "03"],
                        [True, True, True, True, True, True],
                        ["Registration Actions", "Reformat Channels"])
    #gd.addCheckboxGroup(1,3,["01","02","03"],[True,True,True],["Reformat Channels"])

    # Registration options
    # Jefferis,Potter 2007, Cachero,Ostrovsky 2010, Manual
    gd.addChoice("Registration Params",
                 ["Jefferis, Potter 2007", "Cachero, Ostrovsky 2010"],
                 "Jefferis, Potter 2007")
    choicef = gd.getChoices().get(0)
    print choicef.getSelectedItem()

    # final Action (Test, Run, Write Script)
    gd.addChoice("Action", ["Test", "Write Script", "Run (Experimental)"],
                 "Write Script")
    font = Font("SansSerif", Font.BOLD, 12)

    # Advanced options
    gd.setInsets(25, 100, 10)
    gd.addMessage("Advanced Options:", font)
    advancedoptionsf = gd.getMessage()

    ncores = Runtime.getRuntime().availableProcessors()
    defaultCores = 1
    if ncores >= 8: