// // Image J Macro to extract DICOM header tags required for NHSBSP Patient Dose software // into a csv file (MS Excel compatible). // This version is specific for images produced by Philips/Sectra X-ray equipment. // Version 1.2P beta version only // Requires ImageJ v 1.43k as minimum // Author - Lindsay Mungutroy // Jarvis Breast Centre, Guildford. // // Date 20 May 2014 // // // locate folder where images are dir = getDirectory("Browse to select folder where images are"); // set up file for data output - not in the same folder as images (as explained in manual) f = File.open(""); // set up header information for output file. The headers are the same as used in the Patient Dose software print(f, "Survey Number" + "," + "Patient Number" + "," + "View code" + ","+ "kV" + "," + "Anode" + "," + "Filter"+ "," + "Thickness (mm)" + "," + "mAs" + "," + "large cassette used" + "," + "auto/man" + "," + "Automatic mode" + "," + "AEC density set" + "," + "Age" + "," + "Comment" + "," + "Error" + "," + "AEC Density Mode" + "," + "Force" + "," + "Focal Spot(mm)" + "," + "Image Time" + "," + "Image Type" + "," + "Model" + "," + "Device Serial No" + "," + "Study Date" + "," + "View"); // use batch mode to reduce on-screen processing (does not dsplay images) setBatchMode(true); // extract dose info from individual image in folder list = getFileList(dir); for (i=0; i 2400) else LPadYesNo = "Yes"; //else //LPadYesNo = Rows; Target = getTag("0018,1191"); // Convert the target to required format if (Target == " TUNGSTEN") Target = "W"; else if (Target == " MOLYBDENUM") Target = "Mo"; else if (Target == " RHODIUM") Target = "Rh"; else if (Target == " RHODIUM ") Target = "Rh"; else Target = Target; //AECDensitySetting = getTag("0019,1029"); // Convert the AEC Density Setting to required format //AECDsetNum = indexOf(AECDensitySetting,"g"); //AECDsetNum = AECDsetNum + 1; //AECDset = substring(AECDensitySetting,AECDsetNum); AECDset = " "; AECDensityMode = getTag("0019,1025"); AECDensityMode = " "; Filter = getTag("0018,7050"); // Convert the filter to required format if (Filter == " ALUMINUM") Filter = "Al"; else if (Filter == " ALUMINIUM") Filter = "Al"; else if (Filter == " SILVER") Filter = "Ag"; else if (Filter == " RHODIUM") Filter = "Rh"; else if (Filter == " RHODIUM ") Filter = "Rh"; else if (Filter == " MOLYBDENUM") Filter = "Mo"; else if (Filter == " COPPER") Filter = "Cu"; else Filter = Filter; // print output to file for each image if (ImageType == "RE") { //close(); print(f, SurveyNo + "," + PatientID + "," + ViewProtocol + ","+ kVp + "," + Target + "," + Filter + "," + Thickness + "," + mAsExposure + "," + LPadYesNo + "," + autoorman + "," + AECMode + "," + AECDset + "," + PatientAge + "," + comment + "," + error + "," + AECDensityMode + "," + CompressionForce + "," + FocalSpot + "," + ImageTime + "," + ImageType + "," + Model + "," + DeviceSerialNo + "," + StudyDate + "," + ViewCode); } close(); } } } // This function returns the numeric value of the // specified tag (e.g., "0018,0050"). Returns NaN // (not-a-number) if the tag is not found or it // does not have a numeric value. function getNumericTag(tag) { value = getTag(tag); if (value=="") return NaN; index3 = indexOf(value, "\\"); if (index3>0) value = substring(value, 0, index3); value = 0 + value; // convert to number return value; } // This function returns the value of the specified // tag (e.g., "0010,0010") as a string. Returns "" // if the tag is not found. function getTag(tag) { info = getImageInfo(); index1 = indexOf(info, tag); if (index1==-1) return ""; index1 = indexOf(info, ":", index1); if (index1==-1) return ""; index2 = indexOf(info, "\n", index1); value = substring(info, index1+1, index2); return value; }