#@ File (label="Ordner Bilder:", style="directory", description="Wähle den Ordner, der die zu analysierenden Bilder enthält.", value="C:/users/labor") dirFiles
#@ File (label="Ordner Ergebnisse:", style="directory", description="Wähle einen Ordner im dem die Ergebnisse gespeichert werden sollen.", value="C:/users/labor") dirResults
#@ String (label="Name Ergebnisse", description="Name der Ergebnissdatei") result_name
#@ String (choices={"AB count", "Intensity", "Orientation"}, style="listBox", description="
- AB count: Zählt im ausgewählten Kanal die Antiköper.
- Intensity: Misst die Intensity über den Zellkernen.
- Orientation: Filtert und misst Orientation.
") messmodus
#@ String (label="Kanal Nuclei", choices={"blue", "green", "red"}, style="listBox", value="blue") channel_nuclei
#@ String (label="Kanal Marker", choices={"blue", "green", "red"}, style="listBox", value="green") channel_marker
//#@ String (visibility=MESSAGE, value="
Optionen AB-count
") docmsg
#@ Integer (label="Nuclei min. Size (µm²):", value="20", description="Partikel, die kleiner als die angegebene Fläche sind, werden herausgefiltert.") nuclei_min_size
#@ String (label="Beobachtungsmodus:", choices={"AN", "AUS"}, style="radioButtonHorizontal", value="AUS", description="Wenn der Beobachtungsmodus aktiviert wird, werden die einzelnen Bearbeitungsschritte zur Kontrolle angezeigt, die Bearbeitung ist langsamer.") batchmode_toggle
//#@ Integer (label="AB min. Size:") ab_min_size
//#@ Integer (label="AB max. Size:") ab_max_size
//#@ Integer (label="Maxima Prominence >", style="slider", min=0, max=30, stepSize=1) prominence
dirResults = replace(dirResults, "\\", "/");
dirFiles = replace(dirFiles, "\\", "/");
list = getFileList(dirFiles);
run("Set Measurements...", "area mean standard modal min centroid center perimeter bounding fit shape feret's integrated median skewness kurtosis area_fraction stack limit display invert add nan redirect=None decimal=3");
if (messmodus == "AB count") {
abcount(channel_nuclei, channel_marker, prominence, nuclei_min_size, ab_min_size, ab_max_size, dirFiles, result_name);
} else if (messmodus == "Intensity") {
intensity_over_nucleus(channel_nuclei, channel_marker, nuclei_min_size, dirFiles, result_name)
;
} else if ( messmodus == "Orientation") {
print("Orientation");
}
function intensity_over_nucleus(channel_nuclei, channel_marker, nuclei_min_size, dirFiles, result_name) {
data_nuclei = newArray();
data_intensities = newArray();
data_areas = newArray();
data_filenames = newArray();
setBatchMode(false);
channel_to_close = select_unused_channel(channel_nuclei, channel_marker);
for (i=0; i Bild " + (i+1) + " von " + list.length + " wurde ausgewertet.");
print("Ergebnisse: " + current_file + ", " + nucleus_number + ", " + getValue("Mean"));
close("*");
// wait(5000);
}
close("*");
run("Clear Results");
Array.show("Results (indexes)", data_filenames, data_nuclei, data_intensities, data_areas);
updateResults();
}
function abcount(channelKerne, channelAB, promValue, nuclei_size, minsize, maxsize, file_directory, file_name) {
data_nuclei = newArray();
data_antibodies = newArray();
data_filenames = newArray();
setBatchMode(false);
channel_to_close = select_unused_channel(channel_nuclei, channel_marker);
for (i=0; i Bild " + (i+1) + " von " + list.length + " wurde ausgewertet.");
}
close("*");
run("Clear Results");
Array.show("Results (row numbers)", data_filenames, data_nuclei, data_antibodies);
updateResults();
// saveAs("results", dirResults + "/" + result_name + ".csv");
Table.save(dirResults + "/" + result_name + ".csv");
}
function intensity () {
}
function minsizefilter(minimum_size) {
roinumber = roiManager("count");
to_be_deleted = newArray();
for (j = 0; j < roinumber; j++) {
roiManager("Select", j);
getStatistics(area, mean, min, max, std, histogram);
if (area <= minimum_size){
to_be_deleted = Array.concat(to_be_deleted, j);
}
}
if (to_be_deleted.length > 0){
roiManager("Select", to_be_deleted);
roiManager("Delete");
}
}
function select_unused_channel(ch1, ch2) {
if ((ch1 == "blue" && ch2 == "blue") || (ch1 == "green" && ch2 == "green") || (ch1 == "red" && ch2 == "red") == 1) {
exit("Der Kanal für Nuclei und Marker können nicht auf die gleiche Farbe eingestellt sein.");
} else if ((ch1 == "blue" && ch2 == "green") || (ch1 == "green" && ch2 == "blue") == 1) {
return "red";
} else if ((ch1 == "blue" && ch2 == "red") || (ch1 == "red" && ch2 == "blue") == 1) {
return "green";
} else if ((ch1 == "red" && ch2 == "green") || (ch1 == "green" && ch2 == "red") == 1) {
return "blue";
}
}
function Ilastik_Processing(IlastikDir, IlastikProject, IlastikInput, IlastikOutput) {
print("Performing Ilastik antibody count...");
//Prepare text inputs for batch
q ="\"";
//inputI = replace(input, "\\", "/");
IlastikDir1 = replace(IlastikDir+"/ilastik.exe", "\\", "/");
// IlastikDir1 = q + IlastikDir1 + q;
print(IlastikDir1);
IlastikProject1 = replace(IlastikProject, "\\", "/");
// IlastikProject1 = q + IlastikProject1 + q;
IlastikOutDir = IlastikOutput;
IlastikOutDir = replace(IlastikOutDir, "\\", "/");
// IlastikOutDir = q + IlastikOutDir + "ilastik_temp_savefile.csv" + q;
IlastikInput = IlastikInput;
// IlastikInput = q + IlastikInput + q;
ilcommand = IlastikDir1 +" --headless --project="+IlastikProject1+" --csv-export-file=" + IlastikOutDir + " " + IlastikInput;
print(ilcommand);
// Create Batch and run
run("Text Window...", "name=Batch");
//print("[Batch]", "@echo off" + "\n");
print("[Batch]", ilcommand);
run("Text...", "save=[C:/Users/labor/Documents/Ilastikrun.bat]");
selectWindow("Ilastikrun.bat");
run("Close");
runilastik = "C:/Users/labor/Documents/Ilastikrun.bat";
runilastik = replace(runilastik, "\\", "/");
// runilastik = q + runilastik + q;
print(runilastik);
waitForUser;
exec(runilastik);
//Cleanup
File.delete("C:/Users/labor/Documents/Ilastikrun.bat");
print("");
file_contents = File.openAsString(IlastikOutDir);
substr = split(file_contents, ",");
ab_number = parseFloat(substr[1]);
//
// open(IlastikOutDir);
// getResult("C2", 0);
// ab_number = getResult("C2", 0);
print("Die gemessene AB-Zahl ist: " + ab_number);
return ab_number;
}