# String(label="Please enter your name",description="Name field") name # OUTPUT String greeting # A Jython script with parameters. # It is the duty of the scripting framework to harvest # the 'name' parameter from the user, and then display # the 'greeting' output parameter, based on its type. from ij import IJ # greeting = "Hello, " + name + "!" # image prefix : # AF # blé : coupes de blé # CA : coupe d'amande # FE : feuille d'épinard # GGH : globule gras humain # CRF chloroplastes de feuille d'épinard # OL : oléosome # DARK : dark # white : # # - cin1 : cinétique 1 # phiG_40x_1 : cinétique avant et après injection enzyme gastrique # phiG_40x_Zstack20um_1 : stack # 0mn : on commence à enregistrer et on attend 10mn (pour le bleaching) -> phiG_40x_1 # 10mn : debut injection phase gastrique (poussée) # 13mn : la phase gastrique (le petit tuyau contient 20ul) arrive dans la cellule d'un coup (1 nanol) # 15mn : on arrête l'injection # 50mn : on fait un stack -> phiG_40x_Zstack20um_1 # 51mn : début d'injection phase intestinale (poussée) -> phiG_I_40x_1 # x mn : on arrête l'injection # 90mn : on fait un stack -> phiG_I_40x_Zstack20um_1 # - cin2 : autre échantillon similaire à cin1 # - cond[5678] : condition non réalistes import json class Sequence(object): def __init__(self, catalog, sequence_id, micro_manager_metadata_file_path): self.catalog = catalog self.sequence_id = sequence_id self.micro_manager_metadata_file_path = micro_manager_metadata_file_path print(micro_manager_metadata_file_path) with open(micro_manager_metadata_file_path, "r") as mmm_file: self.mmm = json.load(mmm_file, encoding='latin-1') # note : the micromanager metadata files are encoded in latin-1, not utf8 (see accents in comments) @property def num_frames(self): summary = self.mmm['Summary'] return int(summary['Frames']) @property def width(self): summary = self.mmm['Summary'] return int(summary['Width']) @property def height(self): summary = self.mmm['Summary'] return int(summary['Height']) @property def num_channels(self): summary = self.mmm['Summary'] return int(summary['Channels']) @property def num_slices(self): summary = self.mmm['Summary'] return int(summary['Slices']) @property def num_bits_per_pixels(self): summary = self.mmm['Summary'] return int(summary['BitDepth']) def get_root_path(self): return '/'.join(self.micro_manager_metadata_file_path.split('/')[:-1]) def get_image_file_path(self, channel_index, frame_index, z_index=0): assert frame_index < self.num_frames assert channel_index < self.num_channels summary = self.mmm['Summary'] frame_info = self.mmm['FrameKey-%d-%d-%d' % (frame_index, channel_index, z_index) ] rel_file_path = frame_info['FileName'] return self.get_root_path() + '/' + rel_file_path def get_channel_index(self, channel_id): summary = self.mmm['Summary'] channel_index = summary['ChNames'].index(channel_id) return def open_in_imagej(self): #ip = IJ.createHyperStack(title=self.sequence_id, width=self.width, height= self.height, channels=1, slices=1, frames=self.get_num_frames(), bitdepth=16) hyperstack = IJ.createHyperStack(self.sequence_id, self.width, self.height, self.num_channels, self.num_slices, self.num_frames, self.num_bits_per_pixels) for channel_index in range(self.num_channels): for frame_index in range(self.num_frames): slice_index = 0 src_image_file_path = self.get_image_file_path(channel_index=channel_index, frame_index=frame_index) # print(src_image_file_path) src_image = IJ.openImage(src_image_file_path) # print(src_image.getProperties()) hyperstack.setPositionWithoutUpdate(channel_index+1, slice_index+1, frame_index+1) hyperstack.setProcessor(src_image.getProcessor()) hyperstack.show() for channel_index in range(self.num_channels): hyperstack.setPositionWithoutUpdate(channel_index+1, 1, 1) IJ.run("Enhance Contrast", "saturated=0.35") class ImageCatalog(object): def __init__(self, raw_images_root): self.raw_images_root = raw_images_root self.sequences = { } for sequence_id in ['GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0', 'GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos2']: micro_manager_metadata_file_path = raw_images_root + '/' + sequence_id + '/metadata.txt' #micro_manager_metadata_file_path = '/tmp/toto.json' self.sequences[ sequence_id ] = Sequence(self, sequence_id, micro_manager_metadata_file_path) def __str__(self): for sequence_id, sequence in self.sequences.iteritems(): return str(sequence_id) + ':' + str(sequence) # self.add_micromanager_metadata(raw_images_root + '/GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0/metadata.txt') #def add_micromanager_metadata(self, micro_manager_metadata_file_path): # self.sequences[ micro_manager_metadata_file_path ] = Sequence(self, micro_manager_metadata_file_path) def run_script(): raw_images_root = '/Users/graffy/ownCloud/ipr/lipase/soleil-2018.test' catalog = ImageCatalog(raw_images_root) print(catalog) catalog.sequences['GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0'].open_in_imagej() catalog.sequences['GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos2'].open_in_imagej() if False: sequence = catalog.sequences['GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0'] src_image_file_path = sequence.get_image_file_path(channel_index=sequence.get_channel_index('DM300_327-353_fluo'), frame_index=3) src_image = IJ.openImage(src_image_file_path) #dark_image = IJ.openImage(raw_images_root + '/GGH_2018_cin2_phiG_I_327_vis_-40_1/Pos0/img_000000000_DM300_327-353_fluo_000.tif') #src_image.show() #assert src_image # If a Jython script is run, the variable __name__ contains the string '__main__'. # If a script is loaded as module, __name__ has a different value. if __name__ in ['__builtin__','__main__']: run_script()