def saveMimicryEmbedding(model, outputFile, nChannels): tm = model.getTrackModel() trackIDs = tm.trackIDs(True) embSize = 14 sliceNum = 0 cutoff = 10 embedding = ImageStack(embSize, embSize) for trackID in trackIDs: tracks = tm.trackSpots(trackID) # Let's sort them by frame. trackList = ArrayList(tracks) trackLength = len(trackList) if (trackLength <= cutoff): trackPic = FloatProcessor(nChannels, trackLength) trackPix = trackPic.getPixels() #print(len(trackPix)) idxSpot = 0 for spot in trackList: idxChan = 0 for iChan in range(nChannels): trackPix[idxSpot * (nChannels) + idxChan] = spot.getFeature('MEAN_INTENSITY%02d' % (iChan + 1)) idxChan += 1 idxSpot += 1 trackPic = ImagePlus("slice", trackPic) # padding IJ.run( trackPic, "Canvas Size...", "width=" + str(embSize) + " height=" + str(embSize) + " position=Center zero") trackPic = trackPic.getProcessor() embedding.addSlice(str(sliceNum), trackPic) sliceNum += 1 # linear interpolation embedding = ImagePlus("embedding", embedding) IJ.run( embedding, "Size...", "width=" + str(embSize * 2) + " height=" + str(embSize * 2) + " depth=" + str(sliceNum + 1) + " constrain average interpolation=Bilinear") outputFile.replace('.csv', '_mimicry_embd.tif') IJ.saveAs(embedding, "Tiff", outputFile) embedding.close() return None