requires("1.41o"); // PROMPT FOR PARAMETERS TO MEASURE // AND // MISC GLOBAL SETTINGS arrayParamChoices = newArray(19); Dialog.create("Check the required parameters"); Dialog.addString("Thin Section Name?", ""); Dialog.addNumber("SET SCALE: 1 pixel is X microns:", 0); Dialog.addCheckbox("AREA?", true); Dialog.addCheckbox("MAJOR AXIS?", false); Dialog.addCheckbox("MINOR AXIS?", false); Dialog.addCheckbox("ASPECT_RATIO?", false); Dialog.addCheckbox("CIRCULARITY?", false); Dialog.addCheckbox("ANGLE?", false); Dialog.addMessage(""); Dialog.addCheckbox("CRACK AREA?", false); Dialog.addMessage("(If checked, parameter choices above are ignored)"); Dialog.addMessage(""); Dialog.addCheckbox("BatchMode (recommended)?", true); Dialog.addCheckbox("Garbage Collect (recommended)?", true); Dialog.addCheckbox("Save raw results?", true); Dialog.show(); arrayParamChoices[0] = Dialog.getString(); //ts_name arrayParamChoices[17] = Dialog.getNumber(); //set_scale arrayParamChoices[3] = Dialog.getCheckbox(); //area_dialog arrayParamChoices[4] = Dialog.getCheckbox(); //major_dialog arrayParamChoices[5] = Dialog.getCheckbox(); //minor_dialog arrayParamChoices[6] = Dialog.getCheckbox(); //aspectratio_dialog arrayParamChoices[7] = Dialog.getCheckbox(); //circ_dialog arrayParamChoices[8] = Dialog.getCheckbox(); //angle_dialog arrayParamChoices[1] = Dialog.getCheckbox(); //crack_area arrayParamChoices[9] = Dialog.getCheckbox(); //batch arrayParamChoices[10] = Dialog.getCheckbox(); //garbage_collect arrayParamChoices[12] = Dialog.getCheckbox(); //save_raw // WHICH PARAMETERS WERE CHOSEN? // SEND THESE TO THE STATISTICS CHOICES FUNCTION if(parseInt(arrayParamChoices[10])==true) garbageCollect(); if (arrayParamChoices[3]==0 && arrayParamChoices[4]==0 && arrayParamChoices[5] == 0 && arrayParamChoices[6] == 0 && arrayParamChoices[7] == 0 && arrayParamChoices[8] == 0 && arrayParamChoices[1] == 0) {showMessage("You need to choose a parameter or do crack area measurements"); exit();} if (arrayParamChoices[0]=="") {showMessage("You need to label the thin section. Run the macro again."); exit();} if (arrayParamChoices[1] == true) { arrayParamChoices[3] = false; arrayParamChoices[4] = false; arrayParamChoices[5] = false; arrayParamChoices[6] = false; arrayParamChoices[7] = false; arrayParamChoices[8] = false; } if (arrayParamChoices[3] == true) {arraySettingsArea = statsdialog("AREA");} if (arrayParamChoices[4] == true) {arraySettingsMajor = statsdialog("MAJOR");} if (arrayParamChoices[5] == true) {arraySettingsMinor = statsdialog("MINOR");} if (arrayParamChoices[6] == true) {arraySettingsAspect = statsdialog("ASPECT_RATIO");} if (arrayParamChoices[7] == true) {arraySettingsCirc = statsdialog("CIRCULARITY");} if (arrayParamChoices[8] == true) {arraySettingsAngle = statsdialog("ANGLE");} arrayParamChoices[14] = getDirectory("Where to Save Statistics File Output? "); //output_directory // PUT RAW DATA FILES IN THEIR OWN DIRECTORY if (arrayParamChoices[12]==true && arrayParamChoices[1]==false) { datadir = getDirectory("Where to Put Raw Data Output? "); // datadir = arrayParamChoices[14]+"\\"+arrayParamChoices[0]+"_RAWDATA\\"; File.makeDirectory(datadir); // Creates a directory } else datadir=arrayParamChoices[14]; // OPEN THE BINARY PARTICLE FILE setBatchMode(parseInt(arrayParamChoices[9])); if (arrayParamChoices[1] == true) showMessage("Choose the Binary Crack Image "); else showMessage("Choose the Binary Particle Image "); open(""); run("Set Scale...", "distance=1 known=1 pixel=1 unit=micron"); if(parseInt(arrayParamChoices[10])==true) garbageCollect(); // THE NERVOUS SYSTEM // MOVING MEASUREMENT WINDOW // FIRST COORDINATES ARE READ INTO AN ARRAY, AND CHECKED TO BE SURE NONE ARE DEEPER THAN THE IMAGE HEIGHT showMessage("Choose the Coordinates File \nData should be space delimited, and in pixels (not microns)\nMake sure there are no empty lines at the top or end of the file (no lines with just carriage returns)"); open(""); arraySplit = split(getInfo(),'\n'); numLines = 0; iHeight = getHeight(); for (m=0; m= box_top && partCenterY < box_bottom && partCenterX >= box_left && partXEnd < box_right) { setResult("inside", j, 1); x = x+1; } } arrayResults = newArray(x); g=0; if (tostring == "ASPECT_RATIO") { // CALCULATE ASPECT RATIO for (j=0; j 0) { median_var = (arrayResults[(arrayResults.length/2)]); return median_var; } else { median_var = ((arrayResults[(arrayResults.length/2)-1] + arrayResults[(arrayResults.length/2)])/2); return median_var; } } function calcmode(arrayResults, arraySettings) { temp2 = 0; temp3 = 0; temp4 = 0; param = arraySettings[20]; for (z=0; z temp4) { temp4=temp3; temp5=round(arrayResults[z]); } temp3 = 0; } } return temp5; } function stdev(arrayResults, mean) { cum_minusmean_squ = 0; for (z=0; z max) {overmax = overmax+1; leave = true;} if (arrayResults[x] < min) {undermin = undermin+1; leave = true;} for (z=0; z lowerlimit || (z==0 && arrayResults[x] == lowerlimit)) && arrayResults[x] <= upperlimit) { Cumcountarray[z] = (Cumcountarray[z] + 1); leave = true; } } } comma = ", "; str = "" + undermin + comma; for (i=0; i0; z--) { if (leave == true) z=0; temp=(z/arrayResults.length)*100; temp2=((z+1)/arrayResults.length)*100; if (temp<=perc[x] && leave != true) { result[x]= arrayResults[z]; perc[x] = temp2; leave = true; } } } str = ""; comma = ", "; for (x=0; xarray[z]) z++; while (x>from && center