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
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
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: