concS.updateChannelsBounds(true);
SequenceUtil.concatZ()
concS.updateChannelsBounds(true);
Splitter (ArrayList<Sequence> acquiredSeqs, File transfoFile) throws InterruptedException{
System.out.println("started S1");
rois = new ArrayList<ROI>();
cropImages = new ArrayList<IcyBufferedImage>();
seqBundleList = new ArrayList<>();
concSeqList = new ArrayList<Sequence>();
fuck = false;
SU1 = null;
doneSU = false;
init = true;
ArrayList<Sequence> seqBundle = null;
System.out.println("splitter checkpoint 1");
for (int r = 0; r < rois.size(); r++) {
rois.get(r).setName(rois.get(r).getName() + " Channel#" + Integer.toString(r));
rois.get(r).setShowName(true);
}
for (Sequence acquiredSeq : acquiredSeqs) {
// get current position
String pos = ExtractPos(acquiredSeq);
// get image type
dataType = acquiredSeq.getDataType_();
// get contours for splitting
rois = acquiredSeqs.get(0).getROIs();
possibilities = new String[rois.size()];
//Create image per ROI
seqBundle = new ArrayList<Sequence>();
for(int r = 0; r < rois.size(); r++)
{
ROI roi = rois.get(r);
Rectangle5D bnd = roi.getBounds5D();
IcyBufferedImage img = new IcyBufferedImage((int)Math.round(bnd.getSizeX()), (int) Math.round(bnd.getSizeY()), 1, dataType);
//TODO: Before each crop, apply transform. After each crop, reset base image
//change bnd to after-transform corners
IcyBufferedImage copyImg = acquiredSeq.getLastImage();
// store image
cropImages.add(r, img);
// create sequence
Sequence s = new Sequence(img);
// change sequence name
s.setName(roi.getName());
// show it
// Icy.getMainInterface().addSequence(s);
// ready ROI options
possibilities[r] = s.getName();
// create bundle of split images from single sequence(position)
seqBundle.add(s);
}
// pair bundles with their pos name
seqBundleList.add(new BPpair(seqBundle, pos));
//Concatenate split images
if (!MultiFretIcy.PS.offlineBool) {
Sequence[] seqBundle2 = new Sequence[seqBundle.size()];
seqBundle2 = seqBundle.toArray(seqBundle2);
// create sequence
Sequence concS = new Sequence();
concS.beginUpdate();
concS = SequenceUtil.concatZ(seqBundle2, false, false, true);
concS.endUpdate();
// set sequence name
concS.setName(pos);
// set channel names
for(int r = 0; r < rois.size(); r++) {
concS.setChannelName(r, rois.get(r).getName());
}
// show it
concS.updateChannelsBounds(true);
Icy.getMainInterface().addSequence(concS);
// List
concSeqList.add(concS);
System.out.println("made thing");
System.out.println("Triggered split");
// Initial split so SU has something to work with
Split(new AcquiredObject(acquiredSeq.getLastImage(),System.nanoTime(),pos),transfoFile,false);
}
}
public void Split(AcquiredObject acqObj, File transfoFile,boolean x) {
// Update images
IcyBufferedImage newImage = null;
try {
newImage = acqObj.acqImg;
} catch (Exception e) {
MessageDialog.showDialog("ERROR ACQUIRING IMAGE");
e.printStackTrace();
}
for(int q = 0; q < seqBundleList.size(); q++) {
if(seqBundleList.get(q).Pos.equals(acqObj.position)) {
ArrayList<Sequence> seqBundle = seqBundleList.get(q).Bundle;
for(int r = 0; r < rois.size(); r++) {
seqBundle.get(r).beginUpdate();
ROI roi = rois.get(r);
Rectangle bnd = roi.getBounds5D().toRectangle2D().getBounds();
IcyBufferedImage img = cropImages.get(r);
img.copyData(newImage, bnd, null);
seqBundle.get(r).removeAllImages();
seqBundle.get(r).addImage(img);
Sequence concS = null;
for (Sequence s : concSeqList) {
if (s.getName().equals(acqObj.position)) {
concS = s;
}
}
if (concS == null) {System.out.println("No Matching concS");}
concS.beginUpdate();
concS.setImage(0, r, IcyBufferedImageUtil.scale(img, concS.getWidth(), concS.getHeight())); init = false;
concS.endUpdate();
concS.updateChannelsBounds(true);
// x is true after the initial split
if (x==true) {
String roiN = rois.get(r).getName();
System.out.println("Split made: " + roiN);
if (roiN != base && MultiFretIcy.PS.transformEnabled == true) {
Transform(seqBundle.get(r), transfoFile, roiN);
}
}
seqBundle.get(r).endUpdate();
}
}
}
Apologies if it's a bit messy, please ask for any clarification needed.