List of usage examples for java.text NumberFormat setMinimumFractionDigits
public void setMinimumFractionDigits(int newValue)
From source file:au.org.theark.lims.web.component.subjectlims.lims.biospecimen.form.BiospecimenModalDetailForm.java
public void initialiseDetailForm() { idTxtFld = new TextField<String>("biospecimen.id"); biospecimenUidTxtFld = new TextField<String>("biospecimen.biospecimenUid"); biospecimenUidTxtFld.add(new AjaxFormComponentUpdatingBehavior("onchange") { private static final long serialVersionUID = 1L; @Override/*from w ww . jav a2 s. c o m*/ protected void onUpdate(AjaxRequestTarget target) { // Check BiospecimenUID is unique String biospecimenUid = (getComponent().getDefaultModelObject().toString() != null ? getComponent().getDefaultModelObject().toString() : new String()); Biospecimen biospecimen = iLimsService.getBiospecimenByUid(biospecimenUid, cpModel.getObject().getBiospecimen().getStudy()); if (biospecimen != null && biospecimen.getId() != null) { error("Biospecimen UID must be unique. Please try again."); target.focusComponent(getComponent()); } target.add(feedbackPanel); } }); parentUidTxtFld = new TextField<String>("biospecimen.parentUid"); commentsTxtAreaFld = new TextArea<String>("biospecimen.comments"); sampleDateTxtFld = new DateTextField("biospecimen.sampleDate", au.org.theark.core.Constants.DD_MM_YYYY); useCollectionDate = new AjaxLink<Date>("useCollectionDate") { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { BioCollection selectedBioCollection = cpModel.getObject().getBioCollection(); cpModel.getObject().getBiospecimen().setSampleDate(selectedBioCollection.getCollectionDate()); target.add(sampleDateTxtFld); } }; sampleTimeTxtFld = new TimeField("biospecimen.sampleTime") { private static final long serialVersionUID = 1L; @Override protected void onBeforeRender() { this.getDateTextField().setVisibilityAllowed(false); super.onBeforeRender(); } @Override protected void convertInput() { // Slight change to not default to today's date Date modelObject = (Date) getDefaultModelObject(); getDateTextField().setConvertedInput(modelObject != null ? modelObject : null); super.convertInput(); } }; processedDateTxtFld = new DateTextField("biospecimen.processedDate", au.org.theark.core.Constants.DD_MM_YYYY); processedTimeTxtFld = new TimeField("biospecimen.processedTime") { private static final long serialVersionUID = 1L; @Override protected void onBeforeRender() { this.getDateTextField().setVisibilityAllowed(false); super.onBeforeRender(); } @Override protected void convertInput() { // Slight change to not default to today's date Date modelObject = (Date) getDefaultModelObject(); getDateTextField().setConvertedInput(modelObject != null ? modelObject : null); super.convertInput(); } }; ArkDatePicker sampleDatePicker = new ArkDatePicker(); sampleDatePicker.bind(sampleDateTxtFld); sampleDateTxtFld.add(sampleDatePicker); ArkDatePicker processedDatePicker = new ArkDatePicker(); processedDatePicker.bind(processedDateTxtFld); processedDateTxtFld.add(processedDatePicker); quantityTxtFld = new TextField<Double>("biospecimen.quantity") { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override public <C> IConverter<C> getConverter(Class<C> type) { DoubleConverter doubleConverter = new DoubleConverter(); NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setMinimumFractionDigits(1); numberFormat.setMaximumFractionDigits(10); doubleConverter.setNumberFormat(getLocale(), numberFormat); return (IConverter<C>) doubleConverter; } }; parentQuantityTxtFld = new TextField<Double>("parentBiospecimen.quantity") { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override public <C> IConverter<C> getConverter(Class<C> type) { DoubleConverter doubleConverter = new DoubleConverter(); NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setMinimumFractionDigits(1); numberFormat.setMaximumFractionDigits(10); doubleConverter.setNumberFormat(getLocale(), numberFormat); return (IConverter<C>) doubleConverter; } }; parentQuantityTxtFld.setVisible(cpModel.getObject().getBiospecimenProcessing() .equalsIgnoreCase(au.org.theark.lims.web.Constants.BIOSPECIMEN_PROCESSING_PROCESSING)); parentQuantityTxtFld.setOutputMarkupId(true); quantityTxtFld.setEnabled(false); bioTransactionQuantityTxtFld = new TextField<Double>("bioTransaction.quantity") { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override public <C> IConverter<C> getConverter(Class<C> type) { DoubleConverter doubleConverter = new DoubleConverter(); NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setMinimumFractionDigits(1); numberFormat.setMaximumFractionDigits(10); doubleConverter.setNumberFormat(getLocale(), numberFormat); return (IConverter<C>) doubleConverter; } }; bioTransactionQuantityTxtFld.add(new AjaxFormComponentUpdatingBehavior("onchange") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { target.add(amountLbl); } }); concentrationTxtFld = new TextField<Number>("biospecimen.concentration"); concentrationTxtFld.add(new AjaxFormComponentUpdatingBehavior("onchange") { private static final long serialVersionUID = 1L; @Override protected void onUpdate(AjaxRequestTarget target) { target.add(amountLbl); } }); amountLbl = new Label("biospecimen.amount", new Model<Number>() { private static final long serialVersionUID = 1L; @Override public Number getObject() { Number concentration = ((concentrationTxtFld.getModelObject() == null) ? 0 : concentrationTxtFld.getModelObject()); Number quantity = null; if (bioTransactionQuantityTxtFld.isVisible()) { quantity = ((bioTransactionQuantityTxtFld.getModelObject() == null) ? 0 : bioTransactionQuantityTxtFld.getModelObject()); } else { quantity = ((quantityTxtFld.getModelObject() == null) ? 0 : quantityTxtFld.getModelObject()); } Number amount = (concentration.doubleValue() * quantity.doubleValue()); return amount; } }); amountLbl.setOutputMarkupPlaceholderTag(true); setQuantityLabel(); initSampleTypeDdc(); initBioCollectionDdc(); initUnitDdc(); initTreatmentTypeDdc(); initGradeDdc(); initStoredInDdc(); initAnticoagDdc(); initStatusDdc(); initQualityDdc(); initBiospecimenProtocol(); purity = new TextField<Number>("biospecimen.purity"); barcodedChkBox = new CheckBox("biospecimen.barcoded"); barcodedChkBox.setVisible(true); barcodedChkBox.setEnabled(false); initialiseBarcodeImage(); initialiseBiospecimenCFDataEntry(); initialiseBioTransactionListPanel(); initialiseBiospecimenLocationPanel(); initialiseBiospecimenButtonsPanel(); initDeleteModelWindow(); attachValidators(); addComponents(); // Focus on Sample Type sampleTypeDdc.add(new ArkDefaultFormFocusBehavior()); }
From source file:io.hummer.util.test.GenericTestResult.java
public String getPlottableAverages3D(List<Integer> levels, String[] keyTemplates, ResultType type, String... additionalCommands) { StringBuilder b = new StringBuilder(); NumberFormat f = NumberFormat.getInstance(Locale.US); f.setMinimumFractionDigits(3); f.setMaximumFractionDigits(3);/*from w ww. j av a 2 s .c o m*/ f.setGroupingUsed(false); for (int l : levels) { for (String t : keyTemplates) { String key = t.replaceAll("<level>", "" + l); Double val = 0.0; if (type == ResultType.THROUGHPUT) val = getThroughput(key); else if (type == ResultType.MEAN) val = getMean(key); if (val.isNaN()) val = 0.0; b.append(f.format(val)); b.append("\n"); } b.append("\n"); } return b.toString(); }
From source file:io.hummer.util.test.GenericTestResult.java
public String getPlottableAverages(List<?> levels, String[] xValueNames, String indexColumn, ResultType type, String... additionalCommands) { StringBuilder b = new StringBuilder(); NumberFormat f = NumberFormat.getInstance(Locale.US); f.setMinimumFractionDigits(3); f.setMaximumFractionDigits(3);//from w ww . ja va2 s .c o m f.setGroupingUsed(false); List<String> commandsList = Arrays.asList(additionalCommands); for (int i = 0; i < levels.size(); i++) { String index = "" + levels.get(i); if (indexColumn != null) { index = "" + getMean(indexColumn.replaceAll("<level>", "" + levels.get(i))); } int modulo = commandsList.contains(CMD_ONLY_EVERY_2ND_XTICS) ? 2 : commandsList.contains(CMD_ONLY_EVERY_3RD_XTICS) ? 3 : 1; if (i % modulo == 0) { b.append(index); } else { b.append("_"); } for (int j = 0; j < xValueNames.length; j++) { b.append("\t"); String nameString = xValueNames[j]; nameString = nameString.replaceAll("<level>", "" + levels.get(i)); if (nameString.equals(xValueNames[j])) nameString = nameString + levels.get(i); String[] actualNames = nameString.split(":"); for (String name : actualNames) { Double theValue = 0.0; if (name.endsWith(".min")) { theValue = getMinimum(name.substring(0, name.length() - ".min".length())); } else if (name.endsWith(".max")) { theValue = getMaximum(name.substring(0, name.length() - ".max".length())); } else { List<Double> values = getValues(name); if (type == ResultType.MEAN) { Number mean = getMean(values); theValue = mean.doubleValue(); } else if (type == ResultType.THROUGHPUT) { theValue = getThroughput(name); } if (values.size() <= 0) { theValue = Double.NaN; } } if (theValue > 1000000) { b.append(theValue.longValue()); } else { String val = f.format(theValue); if ((theValue).isNaN()) { //val = "0"; val = "NaN"; } while (val.length() < 10) val = " " + val; b.append(val); } } } b.append("\n"); } return b.toString(); }
From source file:org.yccheok.jstock.gui.NewSellTransactionJDialog.java
private JFormattedTextField getPercentageJFormattedTextField() { NumberFormat format = NumberFormat.getNumberInstance(); format.setMaximumFractionDigits(2);//from w w w . jav a2s .c o m format.setMinimumFractionDigits(2); NumberFormatter formatter = new NumberFormatter(format); formatter.setValueClass(Double.class); JFormattedTextField formattedTextField = new JFormattedTextField(formatter); return formattedTextField; }
From source file:edu.ku.brc.specify.tasks.subpane.wb.DataImportDialog.java
/** * Parses the given import xls file according to the users selection and creates/updates the * Preview table, showing the user how the import options effect the way the data will be * imported into the spreadsheet./*from w w w.j a v a2 s. c o m*/ * * @param table - the table to display the data * @return JTable - the table to display the data */ private JTable setXLSTableData(final JTable table) { int numRows = 0; int numCols = 0; String[] headers = {}; Vector<Vector<String>> tableDataVector = new Vector<Vector<String>>(); Vector<String> rowData = new Vector<String>(); Vector<String> headerVector = new Vector<String>(); DateWrapper scrDateFormat = AppPrefsCache.getDateWrapper("ui", "formatting", "scrdateformat"); try { log.debug("setXLSTableData - file - " + configXLS.getFile().toString()); InputStream input = new FileInputStream(configXLS.getFile()); POIFSFileSystem fs = new POIFSFileSystem(input); HSSFWorkbook workBook = new HSSFWorkbook(fs); HSSFSheet sheet = workBook.getSheetAt(0); Vector<Integer> badHeads = new Vector<Integer>(); Vector<Integer> emptyCols = new Vector<Integer>(); ((ConfigureXLS) config).checkHeadsAndCols(sheet, badHeads, emptyCols); if (badHeads.size() > 0 && doesFirstRowHaveHeaders) { if (table != null) { ((ConfigureXLS) config).showBadHeadingsMsg(badHeads, emptyCols, getTitle()); } this.doesFirstRowHaveHeaders = false; try { ignoreActions = true; this.containsHeaders.setSelected(false); } finally { ignoreActions = false; } if (table != null) { return table; } } boolean firstRow = true; //quick fix to prevent ".0" at end of catalog numbers etc NumberFormat nf = NumberFormat.getInstance(); nf.setMinimumFractionDigits(0); nf.setMaximumFractionDigits(20); nf.setGroupingUsed(false); //gets rid of commas int maxCols = 0; // Iterate over each row in the sheet Iterator<?> rows = sheet.rowIterator(); while (rows.hasNext()) { numCols = 0; rowData = new Vector<String>(); HSSFRow row = (HSSFRow) rows.next(); //log.debug(row.getLastCellNum()+" "+row.getPhysicalNumberOfCells()); int maxSize = Math.max(row.getPhysicalNumberOfCells(), row.getLastCellNum()); if (maxSize > maxCols) { maxCols = maxSize; } while (numCols < maxSize) { if (emptyCols.indexOf(new Integer(numCols)) == -1) { HSSFCell cell = row.getCell(numCols); String value = null; // if cell is blank, set value to "" if (cell == null) { value = ""; } else { int type = cell.getCellType(); switch (type) { case HSSFCell.CELL_TYPE_NUMERIC: // The best I can do at this point in the app is to guess if a // cell is a date. // Handle dates carefully while using HSSF. Excel stores all // dates as numbers, internally. // The only way to distinguish a date is by the formatting of // the cell. (If you // have ever formatted a cell containing a date in Excel, you // will know what I mean.) // Therefore, for a cell containing a date, cell.getCellType() // will return // HSSFCell.CELL_TYPE_NUMERIC. However, you can use a utility // function, // HSSFDateUtil.isCellDateFormatted(cell), to check if the cell // can be a date. // This function checks the format against a few internal // formats to decide the issue, // but by its very nature it is prone to false negatives. if (HSSFDateUtil.isCellDateFormatted(cell)) { value = scrDateFormat.getSimpleDateFormat().format(cell.getDateCellValue()); //value = scrDateFormat.getSimpleDateFormat().format(cell.getDateCellValue()); } else { double numeric = cell.getNumericCellValue(); value = nf.format(numeric); } break; case HSSFCell.CELL_TYPE_STRING: value = cell.getRichStringCellValue().getString(); break; case HSSFCell.CELL_TYPE_BLANK: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = Boolean.toString(cell.getBooleanCellValue()); break; case HSSFCell.CELL_TYPE_FORMULA: value = UIRegistry.getResourceString("WB_FORMULA_IMPORT_NO_PREVIEW"); break; default: value = ""; log.error("unsuported cell type"); break; } } if (firstRow && doesFirstRowHaveHeaders) { checkUserColInfo(value, numCols); } if (isUserCol(numCols)) { rowData.add(value.toString()); } } numCols++; } if (doesFirstRowHaveHeaders && firstRow) { headerVector = rowData; headers = new String[rowData.size()]; } else if (!doesFirstRowHaveHeaders && firstRow) { //headers = createDummyHeaders(rowData.size()); tableDataVector.add(rowData); } else { tableDataVector.add(rowData); } firstRow = false; numRows++; } maxCols -= emptyCols.size(); if (!doesFirstRowHaveHeaders) { headerVector = createDummyHeadersAsVector(maxCols); headers = new String[maxCols]; } for (int i = 0; i < headerVector.size(); i++) { headers[i] = headerVector.elementAt(i); } printArray(headers); String[][] tableData = new String[tableDataVector.size()][maxCols]; for (int i = 0; i < tableDataVector.size(); i++) { Vector<String> v = tableDataVector.get(i); for (int j = 0; j < v.size(); j++) { tableData[i][j] = v.get(j).toString(); } } if (checkForErrors(headers, tableData)) { errorPanel.showDataImportStatusPanel(true); } else { errorPanel.showDataImportStatusPanel(false); } if ((doesFirstRowHaveHeaders ? numRows - 1 : numRows) > WorkbenchTask.MAX_ROWS) { hasTooManyRows = true; showTooManyRowsErrorDialog(); } else { hasTooManyRows = false; } log.debug(headers); log.debug(tableData); model = new PreviewTableModel(headers, tableData); JTable result = null; if (table == null) { result = new JTable(); result.setColumnSelectionAllowed(false); result.setRowSelectionAllowed(false); result.setCellSelectionEnabled(false); result.getTableHeader().setReorderingAllowed(false); result.setPreferredScrollableViewportSize(new Dimension(500, 100)); result.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); } else { result = table; } result.setModel(model); result.setDefaultRenderer(String.class, new BiColorTableCellRenderer(false)); model.fireTableDataChanged(); model.fireTableStructureChanged(); return result; } catch (Exception ex) { UIRegistry.displayErrorDlgLocalized(UIRegistry.getResourceString("WB_ERROR_READING_IMPORT_FILE")); if (table != null) { String[] columnNames = {}; String[][] blankData = { {} }; model = new PreviewTableModel(columnNames, blankData); table.setModel(model); table.setColumnSelectionAllowed(false); table.setRowSelectionAllowed(false); table.setCellSelectionEnabled(false); table.getTableHeader().setReorderingAllowed(false); table.setPreferredScrollableViewportSize(new Dimension(500, 100)); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); table.setDefaultRenderer(String.class, new BiColorTableCellRenderer(false)); model.fireTableDataChanged(); model.fireTableStructureChanged(); return table; } //log.error("Error attempting to parse input xls file:" + ex); //ex.printStackTrace(); } return null; }
From source file:org.sakaiproject.util.impl.FormattedTextImpl.java
public NumberFormat getNumberFormat(Integer maxFractionDigits, Integer minFractionDigits, Boolean groupingUsed) {//from w w w. j a v a 2 s .c om NumberFormat nbFormat = NumberFormat.getInstance(); try { nbFormat = NumberFormat.getNumberInstance(new ResourceLoader().getLocale()); } catch (Exception e) { M_log.error("Error while retrieving local number format, using default ", e); } if (maxFractionDigits != null) nbFormat.setMaximumFractionDigits(maxFractionDigits); if (minFractionDigits != null) nbFormat.setMinimumFractionDigits(minFractionDigits); if (groupingUsed != null) nbFormat.setGroupingUsed(groupingUsed); return nbFormat; }
From source file:canreg.client.analysis.AgeSpecificCasesTableBuilder.java
@Override public LinkedList<String> buildTable(String registryLabel, String reportFileName, int startYear, int endYear, Object[][] incidenceData, PopulationDataset[] populations, PopulationDataset[] standardPopulations, LinkedList<ConfigFields> configList, String[] engineParameters, FileTypes fileType) throws NotCompatibleDataException { LinkedList<String> generatedFiles = new LinkedList<String>(); String footerString = java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesTableBuilder") .getString("TABLE BUILT ") + new Date() + java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesTableBuilder") .getString(" BY CANREG5."); String notesString = ""; if (populations[0].getFilter().length() > 0) { notesString = java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesTableBuilder") .getString("FILTER USED:") + " " + populations[0].getFilter(); }/*from ww w. java2 s.c om*/ double tableFontSize = 7.5; String font = "Times"; int[] years = { startYear, endYear }; // double RegPop[][]; double totalCases[][]; String sexLabel[] = null; String tableLabel[] = null; String icdLabel[] = null; LinkedList cancerGroupsLocal[] = null; boolean showSeeNotesNote = true; char Childc[][] = new char[2][3]; double casesPerHundredThousand[][][]; double cumRate64[][]; double cumRate74[][]; tableLabel = ConfigFieldsReader.findConfig("table_label", configList); // sexLabel = ConfigFieldsReader.findConfig("sex_label", configList); sexLabel = new String[] { java.util.ResourceBundle.getBundle("canreg/client/analysis/resources/AbstractEditorialTableBuilder") .getString("MALE"), java.util.ResourceBundle.getBundle("canreg/client/analysis/resources/AbstractEditorialTableBuilder") .getString("FEMALE") }; icdLabel = ConfigFieldsReader.findConfig("ICD_groups_labels", configList); icd10GroupDescriptions = ConfigFieldsReader.findConfig("ICD10_groups", configList); cancerGroupsLocal = EditorialTableTools.generateICD10Groups(icd10GroupDescriptions); allCancerGroupsIndex = EditorialTableTools.getICD10index("ALL", icd10GroupDescriptions); leukemiaNOSCancerGroupIndex = EditorialTableTools.getICD10index(950, cancerGroupsLocal); skinCancerGroupIndex = EditorialTableTools.getICD10index("C44", icd10GroupDescriptions); bladderCancerGroupIndex = EditorialTableTools.getICD10index("C67", icd10GroupDescriptions); mesotheliomaCancerGroupIndex = EditorialTableTools.getICD10index("C45", icd10GroupDescriptions); kaposiSarkomaCancerGroupIndex = EditorialTableTools.getICD10index("C46", icd10GroupDescriptions); myeloproliferativeDisordersCancerGroupIndex = EditorialTableTools.getICD10index("MPD", icd10GroupDescriptions); myelodysplasticSyndromesCancerGroupIndex = EditorialTableTools.getICD10index("MDS", icd10GroupDescriptions); allCancerGroupsButSkinIndex = EditorialTableTools.getICD10index("ALLbC44", icd10GroupDescriptions); leukemiaNOSCancerGroupIndex = EditorialTableTools.getICD10index(950, cancerGroupsLocal); brainAndCentralNervousSystemCancerGroupIndex = EditorialTableTools.getICD10index("C70-72", icd10GroupDescriptions); ovaryCancerGroupIndex = EditorialTableTools.getICD10index(569, cancerGroupsLocal); otherCancerGroupsIndex = EditorialTableTools.getICD10index("O&U", icd10GroupDescriptions); numberOfCancerGroups = cancerGroupsLocal.length; lineBreaks = parseLineBreaks(ConfigFieldsReader.findConfig("line_breaks", configList)); numberOfYears = years[1] - years[0] + 1; minimumCasesLimit = minimumCasesPerYearLimit * numberOfYears; noOldData = true; casesPerHundredThousand = new double[numberOfSexes][numberOfAgeGroups][numberOfCancerGroups]; casesArray = new double[numberOfCancerGroups][numberOfSexes][numberOfAgeGroups]; // cumRate64 = new double[numberOfSexes][numberOfCancerGroups]; // cumRate74 = new double[numberOfSexes][numberOfCancerGroups]; populationArray = new double[numberOfSexes][numberOfAgeGroups]; foundAgeGroups = new boolean[numberOfAgeGroups]; if (areThesePopulationDatasetsCompatible(populations)) { for (PopulationDataset population : populations) { population.addPopulationDataToArrayForTableBuilder(populationArray, foundAgeGroups, new AgeGroupStructure(5, 85, 1)); } } else { throw new NotCompatibleDataException(); } populationString = populations[0].getPopulationDatasetName(); int lastCommaPlace = populationString.lastIndexOf(","); if (lastCommaPlace != -1) { populationString = populationString.substring(0, lastCommaPlace); } if (populations[0].getFilter().length() > 0) { notesString = java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesTableBuilder") .getString("FILTER USED:") + populations[0].getFilter(); } standardPopulationArray = new double[numberOfSexes][numberOfAgeGroups]; for (PopulationDataset stdPopulation : standardPopulations) { stdPopulation.addPopulationDataToArrayForTableBuilder(standardPopulationArray, null, new AgeGroupStructure(5, 85, 1)); } // standardize population array for (int sexNumber = 0; sexNumber < numberOfSexes; sexNumber++) { for (int ageGroupNumber = 0; ageGroupNumber < numberOfAgeGroups; ageGroupNumber++) { standardPopulationArray[sexNumber][ageGroupNumber] = (standardPopulationArray[sexNumber][ageGroupNumber] / standardPopulationArray[sexNumber][numberOfAgeGroups - 1]) * 100000; } } highestPopulationAgeGroup = findHighestAgeGroup(foundAgeGroups); lowestPopulationAgeGroup = findLowestAgeGroup(foundAgeGroups); int records = 0; // generate statistics String sexString; String icdString; String yearString; String ageString; String basisString; int sex, icdNumber, year, icdIndex, yearIndex, ageGroup, ageInt, basis, cases; if (incidenceData != null) { for (Object[] line : incidenceData) { try { // Set default icdIndex = -1; cases = 0; // Unknown sex group = 3 sex = 3; // Extract data sexString = (String) line[SEX_COLUMN]; sex = Integer.parseInt(sexString.trim()); // sex = 3 is unknown sex if (sex > 2) { sex = 3; } // morphologyString = (String) line[MORPHOLOGY_COLUMN]; /* if (morphologyString.length() > 0) { int morphology = Integer.parseInt(morphologyString); if (morphology == 9140) { String behaviourString = getContentOfField( incidenceFieldDescriptionList, "behaviour", line).trim(); if (behaviourString.equals("3")) { icdIndex = kaposiSarkomaCancerGroupIndex; } } else if ((int)(morphology/10) == 905) { String behaviourString = getContentOfField(incidenceFieldDescriptionList, "behaviour", line).trim(); if (behaviourString.equals("3")) { icdIndex = mesotheliomaCancerGroupIndex; } } } */ if (icdIndex < 0) { icdString = (String) line[ICD10_COLUMN]; if (icdString.length() > 0 && icdString.trim().substring(0, 1).equals("C")) { icdString = icdString.trim().substring(1); icdNumber = Integer.parseInt(icdString); if (icdString.length() < 3) { icdNumber = icdNumber * 10; } icdIndex = EditorialTableTools.getICD10index(icdNumber, cancerGroupsLocal); if (icdIndex == -1) { icdIndex = -1; } } else if (icdString.length() > 0 && icdString.trim().substring(0, 1).equals("D")) { icdIndex = DONT_COUNT; // set don't count as default icdString = icdString.trim().substring(1); icdNumber = Integer.parseInt(icdString); if (icdString.length() < 3) { icdNumber = icdNumber * 10; } if (icdNumber == 90 || icdNumber == 414) { icdIndex = bladderCancerGroupIndex; } else if (((int) (icdNumber / 10)) == 45 || ((int) (icdNumber / 10)) == 47) { icdIndex = myeloproliferativeDisordersCancerGroupIndex; } else if (((int) (icdNumber / 10)) == 46) { icdIndex = myelodysplasticSyndromesCancerGroupIndex; } } } yearString = line[YEAR_COLUMN].toString(); year = Integer.parseInt(yearString); yearIndex = year - years[0]; ageString = line[AGE_COLUMN].toString(); ageInt = Integer.parseInt(ageString); if (ageInt == unknownAgeInt) { ageGroup = unknownAgeGroupIndex; } else { ageGroup = populations[yearIndex].getAgeGroupIndex(ageInt); // Adjust age group if (populations[yearIndex].getAgeGroupStructure().getSizeOfFirstGroup() != 1) { ageGroup += 1; } } // Extract cases cases = (Integer) line[CASES_COLUMN]; if (icdIndex != DONT_COUNT && year <= years[1] && year >= years[0]) { // Basis of diagnosis basisString = line[BASIS_DIAGNOSIS_COLUMN].toString(); if (basisString != null) { basis = Integer.parseInt(basisString.trim()); } else { basis = -1; } if (sex <= numberOfSexes && icdIndex >= 0 && icdIndex <= cancerGroupsLocal.length) { casesArray[icdIndex][sex - 1][ageGroup] += cases; } else if (otherCancerGroupsIndex >= 0) { casesArray[otherCancerGroupsIndex][sex - 1][ageGroup] += cases; } if (allCancerGroupsIndex >= 0) { casesArray[allCancerGroupsIndex][sex - 1][ageGroup] += cases; } if (allCancerGroupsButSkinIndex >= 0 && skinCancerGroupIndex >= 0 && icdIndex != skinCancerGroupIndex) { casesArray[allCancerGroupsButSkinIndex][sex - 1][ageGroup] += cases; } records += cases; if (records % recordsPerFeedback == 0) { System.out.println(java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesTableBuilder") .getString("PROCESSING RECORD NUMBER: ") + records); } } } catch (NumberFormatException nfe) { Logger.getLogger(AgeSpecificCasesTableBuilder.class.getName()).log(Level.WARNING, null, nfe); } // Read next line } } System.out.println(java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesTableBuilder").getString("PROCESSED ") + records + java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesTableBuilder") .getString(" RECORDS.")); // Total casesPerHundredThousand totalCases = new double[numberOfSexes][numberOfCancerGroups]; // Crude rate // crudeRate = new double[numberOfSexes][numberOfCancerGroups]; for (int sexNumber = 0; sexNumber < 2; sexNumber++) { // The age groups ageLabel[lowestPopulationAgeGroup] = "0-"; for (int icdGroup = 0; icdGroup < numberOfCancerGroups; icdGroup++) { if (icdLabel[icdGroup].substring(0 + sexNumber, 1 + sexNumber).equalsIgnoreCase("1")) { // The age groups double previousAgeGroupCases = 0; double previousAgeGroupPopulation = 0; double previousAgeGroupWstdPopulation = 0; double lastAgeGroupCases = 0; double lastAgeGroupPopulation = 0; double lastAgeGroupWstdPopulation = 0; for (int ageGroupNumber = 1; ageGroupNumber < unknownAgeGroupIndex; ageGroupNumber++) { if (ageGroupNumber == 1) { for (int ag = lowestIncidenceAgeGroup; ag < ageGroupNumber; ag++) { previousAgeGroupCases += casesArray[icdGroup][sexNumber][ag]; previousAgeGroupPopulation += populationArray[sexNumber][ag]; previousAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ag]; } } if (foundAgeGroups[ageGroupNumber] && ageGroupNumber < highestPopulationAgeGroup) { casesPerHundredThousand[sexNumber][ageGroupNumber][icdGroup] = 100000 * (casesArray[icdGroup][sexNumber][ageGroupNumber] + previousAgeGroupCases) / (populationArray[sexNumber][ageGroupNumber] + previousAgeGroupPopulation); previousAgeGroupCases = 0; previousAgeGroupPopulation = 0; previousAgeGroupWstdPopulation = 0; } else { previousAgeGroupCases += casesArray[icdGroup][sexNumber][ageGroupNumber]; previousAgeGroupPopulation += populationArray[sexNumber][ageGroupNumber]; previousAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ageGroupNumber]; } } // We calculate the "leftovers" from the last age group if (previousAgeGroupPopulation > 0) { casesPerHundredThousand[sexNumber][highestPopulationAgeGroup][icdGroup] = 100000 * (previousAgeGroupCases) / (previousAgeGroupPopulation); } previousAgeGroupCases = 0; previousAgeGroupPopulation = 0; previousAgeGroupWstdPopulation = 0; } } } // ASR, vASR, MV, MI, DCO for (int sexNumber = 0; sexNumber < numberOfSexes; sexNumber++) { for (int icdGroup = 0; icdGroup < numberOfCancerGroups; icdGroup++) { double previousAgeGroupCases = 0; double previousAgeGroupPopulation = 0; double previousAgeGroupWstdPopulation = 0; double lastAgeGroupCases = 0; double lastAgeGroupPopulation = 0; double lastAgeGroupWstdPopulation = 0; totalCases[sexNumber][icdGroup] += casesArray[icdGroup][sexNumber][0]; for (int ageGroupNumber = 1; ageGroupNumber < unknownAgeGroupIndex; ageGroupNumber++) { if (ageGroupNumber == 1) { for (int ag = lowestIncidenceAgeGroup; ag < ageGroupNumber; ag++) { previousAgeGroupCases += casesArray[icdGroup][sexNumber][ag]; previousAgeGroupPopulation += populationArray[sexNumber][ag]; previousAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ag]; } } if (foundAgeGroups[ageGroupNumber] && ageGroupNumber < highestPopulationAgeGroup && (previousAgeGroupPopulation + populationArray[sexNumber][ageGroupNumber] > 0)) { double asr = calculateASR( (previousAgeGroupCases + casesArray[icdGroup][sexNumber][ageGroupNumber]), (previousAgeGroupPopulation + populationArray[sexNumber][ageGroupNumber]), (previousAgeGroupWstdPopulation + standardPopulationArray[sexNumber][ageGroupNumber])); previousAgeGroupCases = 0; previousAgeGroupPopulation = 0; previousAgeGroupWstdPopulation = 0; } else if (ageGroupNumber < highestPopulationAgeGroup) { previousAgeGroupCases += casesArray[icdGroup][sexNumber][ageGroupNumber]; previousAgeGroupPopulation += populationArray[sexNumber][ageGroupNumber]; previousAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ageGroupNumber]; } else { lastAgeGroupCases += casesArray[icdGroup][sexNumber][ageGroupNumber]; lastAgeGroupPopulation += populationArray[sexNumber][ageGroupNumber]; lastAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ageGroupNumber]; } totalCases[sexNumber][icdGroup] += casesArray[icdGroup][sexNumber][ageGroupNumber]; } // We calculate the "leftovers" from the last age group if (lastAgeGroupPopulation > 0) { double asr = calculateASR(lastAgeGroupCases, lastAgeGroupPopulation, lastAgeGroupWstdPopulation); } // and take the unknown age group into account totalCases[sexNumber][icdGroup] += casesArray[icdGroup][sexNumber][unknownAgeGroupIndex]; if (totalCases[sexNumber][icdGroup] > 0) { /* We don't use confidence intervals so this was removed 16.07.07 double[] asrlul = calculateASRluL(ASR[sex][icdGroup], variL[sex][icdGroup], wstdPop[allAgeGroupsIndex]); ASRluL[sex][icdGroup][0] = asrlul[0]; ASRluL[sex][icdGroup][1] = asrlul[1]; */ // Cum. Rates if (highestPopulationAgeGroup > 13) { for (int k = 1; k <= 13; k++) { // cumRate64[sexNumber][icdGroup] += casesPerHundredThousand[sexNumber][k][icdGroup] * cumPop18[k] / 1000.0; } } if (highestPopulationAgeGroup > 15) { for (int k = 1; k <= 15; k++) { // cumRate74[sexNumber][icdGroup] += casesPerHundredThousand[sexNumber][k][icdGroup] * cumPop18[k] / 1000.0; } } /* if (!isSpecialized) { cumRate64[sex][allCancerGroupsIndex] += cumRate64[sex][icdGroup]; cumRate74[sex][allCancerGroupsIndex] += cumRate74[sex][icdGroup]; if (icdGroup!=skinCancerGroupIndex) { cumRate64[sex][allCancerGroupsIndex] += cumRate64[sex][icdGroup]; cumRate74[sex][allCancerGroupsIndex] += cumRate74[sex][icdGroup]; } } */ } } } // Adjust the age labels ageLabel[1] = "0-"; ageLabel[highestPopulationAgeGroup] = ageLabel[highestPopulationAgeGroup].substring(0, ageLabel[highestPopulationAgeGroup].length() - 1) + "+"; // Write it out NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(1); nf.setMinimumFractionDigits(1); Writer reportFileWriter; if (fileType.equals(FileTypes.csv)) { // write tab separated stuff here CSVPrinter csvOut; for (int sexNumber = 0; sexNumber < numberOfSexes - 1; sexNumber++) { try { String tabReportFileName = ""; try { tabReportFileName = reportFileName + sexLabel[sexNumber] + ".csv"; System.out.println(java.util.ResourceBundle.getBundle( "canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("WRITING TO ") + tabReportFileName); reportFileWriter = new OutputStreamWriter(new FileOutputStream(tabReportFileName), "UTF-8"); } catch (IOException ioe) { System.out.println(java.util.ResourceBundle.getBundle( "canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("ERROR IN REPORTFILE: ") + tabReportFileName); reportFileWriter = new OutputStreamWriter(System.out); } // reportStream = new PrintStream(tabReportFileName); // write the header line // reportStream = new PrintStream(tabReportFileName); // write the header line LinkedList<String> headers = new LinkedList<String>(); headers.add("SITE"); headers.add("ALL AGES"); headers.add("AGE UNK"); // add age groups for (int age = 1; age <= highestPopulationAgeGroup; age++) { headers.add(ageLabel[age]); } // headers.add("CRUDE RATE"); headers.add("(%)"); // headers.add("CUM 0-64"); // headers.add("CUM 0-74"); // headers.add("ASR"); headers.add("ICD (10th)"); CSVFormat format = CSVFormat.DEFAULT.withDelimiter(',') .withHeader(headers.toArray(new String[0])); csvOut = new CSVPrinter(reportFileWriter, format); LinkedList<String> line = new LinkedList<String>(); // write the data for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { line.add(icdLabel[j].substring(3)); line.add(formatNumber(totalCases[sexNumber][j], 0)); line.add(formatNumber(casesArray[j][sexNumber][unknownAgeGroupIndex], 0)); for (int age = 1; age <= highestPopulationAgeGroup; age++) { if (casesArray[j][sexNumber][age] > 0) { line.add(formatNumber(casesArray[j][sexNumber][age], 0)); } else { line.add("0"); } } // line.add(formatNumber(crudeRate[sexNumber][j], 2)); line.add(formatNumber(100 * totalCases[sexNumber][j] / totalCases[sexNumber][allCancerGroupsButSkinIndex])); // line.add(formatNumber(cumRate64[sexNumber][j], 2)); // line.add(formatNumber(cumRate74[sexNumber][j], 2)); // line.add(formatNumber(ASR[sexNumber][j])); line.add(icd10GroupDescriptions[j]); csvOut.printRecord(line); line.clear(); } } try { csvOut.flush(); csvOut.close(); } catch (IOException ex) { Logger.getLogger(AgeSpecificCasesPerHundredThousandTableBuilder.class.getName()) .log(Level.SEVERE, null, ex); } generatedFiles.add(tabReportFileName); } catch (IOException ex) { Logger.getLogger(AgeSpecificCasesTableBuilder.class.getName()).log(Level.SEVERE, null, ex); } } } else { // Make PS-file for (int sexNumber = 0; sexNumber < numberOfSexes - 1; sexNumber++) { String psFileName = reportFileName + "-" + sexLabel[sexNumber] + ".ps"; generatedFiles.add(psFileName); try { Writer fw = new OutputStreamWriter(new FileOutputStream(psFileName), "UTF-8"); nf.setMaximumFractionDigits(1); nf.setMinimumFractionDigits(1); fw.write("/RLT {rlineto} def\n"); fw.write("/LT {lineto} def\n"); fw.write("/MT {moveto} def\n"); fw.write("/SCF {scalefont} def\n"); fw.write("/SF {setfont} def\n"); fw.write("/SG {setgray} def\n"); fw.write("/FF {findfont} def\n"); fw.write("/SLW {setlinewidth} def\n"); fw.write("/CP {closepath} def\n"); fw.write("/Mainfont\n"); fw.write("/Helvetica-Bold FF " + (int) (tableFontSize * 2 - 3) + " SCF def\n"); fw.write("/Titlefont\n"); fw.write("/Helvetica FF " + tableFontSize + " SCF def\n"); fw.write("/Tablefont\n"); fw.write("/" + font + " FF " + tableFontSize + " SCF def\n"); fw.write("/ASRfont\n"); fw.write("/" + font + "-Bold FF " + tableFontSize + " SCF def\n"); fw.write("/ICDfont\n"); fw.write("/" + font + "-Italic FF " + tableFontSize + " SCF def\n"); fw.write("/ASRitalicsfont\n"); fw.write("/" + font + "-Italic-Bold FF " + tableFontSize + " SCF def\n"); fw.write("/col 735 def\n"); fw.write("/RS {dup stringwidth pop col exch sub 0 rmoveto show} def\n"); fw.write("/CS {dup stringwidth pop 810 exch sub 2 div 0 rmoveto show} def\n"); fw.write("/nstr 1 string def\n"); fw.write("/prtchar {nstr 0 3 -1 roll put nstr show} def\n"); fw.write("newpath\n"); fw.write("90 rotate -20 -570 translate\n"); // Landscape fw.write("Mainfont SF\n"); fw.write("0 535 MT (" + registryLabel + ") CS\n"); fw.write("Titlefont SF\n"); fw.write("0 525 MT (" + populationString + ") CS\n"); fw.write("0 513 MT (" + tableLabel[0] + " - " + sexLabel[sexNumber] + ") CS\n"); // draw the grey frame fw.write("0.85 SG 27 510 translate\n"); fw.write("0 -5 MT 785 -5 LT 785 -27 LT 0 -27 LT CP fill\n"); fw.write("0 -510 translate 0.95 SG\n"); double k = 475; for (int icd = 0; icd < numberOfCancerGroups; icd++) { if ((icd + 1) < numberOfCancerGroups && icdLabel[icd + 1].charAt(sexNumber) == '1') { int lines = (isLineBreak(icd)); if (lines > 0) { k -= 2; fw.write("0 " + (k - 2) + " MT 785 " + (k - 2) + " LT 785 " + (k - 2 - (lines * (tableFontSize))) + " LT 0 " + (k - 2 - (lines * (tableFontSize))) + " LT CP fill\n"); } else if (lines < 0) { k -= 2; } k -= tableFontSize; } } /* for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sex) == '1') { int lines = (isLineBreak(j)); if (lines > 0) { k -= 2; fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - lines * tableFontSize) + " LT 0 " + (k - lines * tableFontSize) + " LT CP fill\n"); } else if (lines > 0) k -= 2; k -= lines * tableFontSize; if (IsLineBreak(j)) { k -= 2; } // draw the grey frames if (j == 8) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 35) + " LT 0 " + (k - 35) + " LT CP fill\n"); } else if (j == 34) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 26) + " LT 0 " + (k - 26) + " LT CP fill\n"); } else if (j == 16 || j == 22 || j == 40) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 18) + " LT 0 " + (k - 18) + " LT CP fill\n"); } else if (j == 27) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 42) + " LT 0 " + (k - 42) + " LT CP fill\n"); } else if (j == 47) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 34) + " LT 0 " + (k - 34) + " LT CP fill\n"); } else if (j == 53) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 12) + " LT 0 " + (k - 12) + " LT CP fill\n"); } k -= (tableFontSize); } } */ fw.write("0 SG\n"); fw.write("ICDfont SF\n"); fw.write(" 740 496 MT (ICD) show\n"); fw.write(" 740 487 MT ((10th)) show\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("ICDfont SF\n"); } fw.write("745 " + k + " MT (" + icd10GroupDescriptions[j] + ") show\n"); k -= (tableFontSize); } } fw.write("/col col 20 sub def\n"); fw.write("0 491 MT ((%)) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } if (j != allCancerGroupsIndex && allCancerGroupsButSkinIndex >= 0) { fw.write( "0 " + k + " MT (" + formatNumber(100 * totalCases[sexNumber][j] / totalCases[sexNumber][allCancerGroupsButSkinIndex]) + ") RS\n"); } k -= (tableFontSize); } } fw.write("/col 119 def\n"); fw.write("0 496 MT (ALL) RS\n"); fw.write("0 487 MT (AGES) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("0 " + k + " MT (" + formatNumber(totalCases[sexNumber][j], 0) + ") RS\n"); k -= (tableFontSize); } } fw.write("/col col 20 add def\n"); fw.write("0 496 MT (AGE) RS\n"); fw.write("0 487 MT (UNK) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("0 " + k + " MT (" + formatNumber(casesArray[j][sexNumber][unknownAgeGroupIndex], 0) + ") RS\n"); k -= (tableFontSize); } } if (highestPopulationAgeGroup == numberOfAgeGroups - 4) { fw.write("/col 145 def\n"); } else if (highestPopulationAgeGroup == numberOfAgeGroups - 5) { fw.write("/col 176 def\n"); } else if (highestPopulationAgeGroup == numberOfAgeGroups - 6) { fw.write("/col 208 def\n"); } else { fw.write("/col 145 def\n"); } for (int age = 1; age <= highestPopulationAgeGroup; age++) { fw.write("/col col 26 add def\n"); fw.write("0 491 MT (" + ageLabel[age] + ") RS\n"); // fw.write("/col col 5 sub def\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } if (casesArray[j][sexNumber][age] > 0) { fw.write("0 " + k + " MT (" + formatNumber(casesArray[j][sexNumber][age], 0) + ") RS\n"); } else { fw.write("0 " + k + " MT ( - ) RS\n"); } k -= (tableFontSize); } } } fw.write("3 492 MT ( S I T E) show\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("3 " + k + " MT (" + icdLabel[j].substring(3) + ") show\n"); k -= (tableFontSize); } } if (showSeeNotesNote) { fw.write("3 0 MT (" + notesString + ") show\n"); } // Write the footer fw.write("0 0 MT (" + footerString + ") CS\n"); fw.write("showpage\n"); System.out.println("Wrote " + psFileName + "."); fw.close(); } catch (IOException ioe) { System.out.println(ioe); } } } if (fileType == FileTypes.pdf) { LinkedList<String> newlyGeneratedFiles = new LinkedList<String>(); for (String fileN : generatedFiles) { PsToPdfConverter pstopdf = new PsToPdfConverter(gspath); newlyGeneratedFiles.add(pstopdf.convert(fileN)); // delete the ps file File file = new File(fileN); file.delete(); } generatedFiles = newlyGeneratedFiles; } System.out.println("Fini!"); return generatedFiles; }
From source file:fr.hoteia.qalingo.core.web.util.impl.RequestUtilImpl.java
/** * */// ww w. j a v a 2 s . c o m public NumberFormat getNumberFormat(final RequestData requestData, final String currencyCode, final RoundingMode roundingMode, final int maximumFractionDigits, final int minimumFractionDigits, final int maximumIntegerDigits, final int minimumIntegerDigits) throws Exception { final Localization localization = requestData.getLocalization(); final Locale locale = localization.getLocale(); NumberFormat formatter = NumberFormat.getCurrencyInstance(locale); formatter.setGroupingUsed(true); formatter.setParseIntegerOnly(false); formatter.setRoundingMode(roundingMode); Currency currency = Currency.getInstance(currencyCode); formatter.setCurrency(currency); formatter.setMaximumFractionDigits(maximumFractionDigits); formatter.setMinimumFractionDigits(minimumFractionDigits); formatter.setMaximumIntegerDigits(maximumIntegerDigits); formatter.setMinimumIntegerDigits(minimumIntegerDigits); return formatter; }
From source file:edu.jhuapl.openessence.controller.ReportController.java
private Map<String, Object> createTimeseries(String userPrincipalName, DataSeriesSource dss, List<Filter> filters, GroupingImpl group, String timeResolution, Integer prepull, String graphTimeSeriesUrl, final Collection<Record> records, final List<Dimension> accumulations, final List<Dimension> timeseriesDenominators, String detectorClass, boolean includeDetails, boolean displayIntervalEndDate, GraphDataInterface graphData, TimeZone clientTimezone) { Map<String, Object> result = new HashMap<String, Object>(); Map<String, ResolutionHandler> resolutionHandlers = null; result.put("success", false); try {/* w w w .j ava2 s .c o m*/ GroupingDimension grpdim = dss.getGroupingDimension(group.getId()); resolutionHandlers = grpdim.getResolutionsMap(); String dateFieldName = group.getId(); Date startDate = null; Date endDate = null; if (grpdim != null && (grpdim.getSqlType() == FieldType.DATE || grpdim.getSqlType() == FieldType.DATE_TIME)) { for (Filter f : filters) { if (f instanceof OneArgOpFilter) { OneArgOpFilter of = (OneArgOpFilter) f; if (of.getFilterId().equalsIgnoreCase(grpdim.getId()) && (of.getSqlSnippet("").contains(">="))) { startDate = (Date) of.getArguments().get(0); } else if (of.getFilterId().equalsIgnoreCase(grpdim.getId()) && (of.getSqlSnippet("").contains("<="))) { endDate = (Date) of.getArguments().get(0); } } } } //union accumulations to get all results List<Dimension> dimensions = new ArrayList<Dimension>( ControllerUtils.unionDimensions(accumulations, timeseriesDenominators)); int timeOffsetMillies = 0; String timezoneEnabledString = messageSource.getMessage(TIMEZONE_ENABLED, "false"); if (timezoneEnabledString.equalsIgnoreCase("true")) { timeOffsetMillies = (clientTimezone.getRawOffset() - clientTimezone.getDSTSavings()) - (TimeZone.getDefault().getRawOffset() - TimeZone.getDefault().getDSTSavings()); } Calendar startDayCal = Calendar.getInstance(clientTimezone); startDayCal.setTime(startDate); startDayCal.add(Calendar.MILLISECOND, timeOffsetMillies); //get data grouped by group dimension List<AccumPoint> points = extractAccumulationPoints(userPrincipalName, dss, records, startDayCal.getTime(), endDate, dimensions, group, resolutionHandlers); if (points.size() > 0) { DateFormat dateFormat = getDateFormat(timeResolution); //dateFormat.setTimeZone(timezone); DateFormat tmpDateFormat = (DateFormat) dateFormat.clone(); tmpDateFormat.setTimeZone(clientTimezone); // number format for level NumberFormat numFormat3 = NumberFormat.getNumberInstance(); numFormat3.setMinimumFractionDigits(0); numFormat3.setMaximumFractionDigits(3); // number format for expected count NumberFormat numFormat1 = NumberFormat.getNumberInstance(); numFormat1.setMinimumFractionDigits(0); numFormat1.setMaximumFractionDigits(1); Calendar cal = new GregorianCalendar(); cal.setTime(startDayCal.getTime()); //offset start date to match prepull offset if (timeResolution.equals("weekly")) { cal.add(Calendar.DATE, (7 * prepull)); } else if (timeResolution.equals("daily")) { cal.add(Calendar.DATE, prepull); } Date queryStartDate = cal.getTime(); //-- Handles Denominator Types -- // double[] divisors = new double[points.size()]; double multiplier = 1.0; boolean percentBased = false; String yAxisLabel = messageSource.getDataSourceMessage("graph.count", dss); boolean isDetectionDetector = !NoDetectorDetector.class.getName().equalsIgnoreCase(detectorClass); //if there is a denominator we need to further manipulate the data if (timeseriesDenominators != null && !timeseriesDenominators.isEmpty()) { // divisor is the sum of timeseriesDenominators divisors = totalSeriesValues(points, timeseriesDenominators); multiplier = 100.0; percentBased = true; yAxisLabel = messageSource.getDataSourceMessage("graph.percent", dss); } else { //the query is for total counts Arrays.fill(divisors, 1.0); } double[][] allCounts = new double[accumulations.size()][]; int[][] allColors = new int[accumulations.size()][]; String[][] allAltTexts = new String[accumulations.size()][]; String[] dates = new String[] { "" }; double[][] allExpecteds = new double[accumulations.size()][]; double[][] allLevels = new double[accumulations.size()][]; String[][] allLineSetURLs = new String[accumulations.size()][]; String[][] allSwitchInfo = new String[accumulations.size()][]; String[] lineSetLabels = new String[accumulations.size()]; boolean[] displayAlerts = new boolean[accumulations.size()]; //get all results Collection<Dimension> dims = new ArrayList<Dimension>(dss.getResultDimensions()); Collection<String> dimIds = ControllerUtils.getDimensionIdsFromCollection(dims); Collection<String> accIds = ControllerUtils.getDimensionIdsFromCollection(dss.getAccumulations()); //remove extra accumulations in the result set using string ids dimIds.removeAll(accIds); //for each accumulation we run detection and gather results int aIndex = 0; for (Dimension accumulation : accumulations) { String accumId = accumulation.getId(); // use display name if it has one, otherwise translate its ID String accumIdTranslated = accumulation.getDisplayName(); if (accumIdTranslated == null) { accumIdTranslated = messageSource.getDataSourceMessage(accumulation.getId(), dss); } TemporalDetectorInterface TDI = (TemporalDetectorInterface) DetectorHelper .createObject(detectorClass); TemporalDetectorSimpleDataObject TDDO = new TemporalDetectorSimpleDataObject(); int[] colors; double[] counts; String[] altTexts; double[] expecteds; double[] levels; String[] switchInfo; String[] urls; //pull the counts from the accum array points double[] seriesDoubleArray = generateSeriesValues(points, accumId); //run divisor before detection for (int i = 0; i < seriesDoubleArray.length; i++) { double div = divisors[i]; if (div == 0) { seriesDoubleArray[i] = 0.0; } else { seriesDoubleArray[i] = (seriesDoubleArray[i] / div) * multiplier; } } //run detection TDDO.setCounts(seriesDoubleArray); TDDO.setStartDate(startDate); TDDO.setTimeResolution(timeResolution); try { TDI.runDetector(TDDO); } catch (Exception e) { String errorMessage = "Failure to create Timeseries"; if (e.getMessage() != null) { errorMessage = errorMessage + ":<BR>" + e.getMessage(); } result.put("message", errorMessage); result.put("success", false); return result; } TDDO.cropStartup(prepull); counts = TDDO.getCounts(); int tddoLength = counts.length; if (!DAILY.equalsIgnoreCase(timeResolution)) { //toggle between start date and end date //TDDO.setDates(getOurDates(startDate, endDate, tddoLength, timeResolution)); TDDO.setDates(getOurDates(queryStartDate, endDate, tddoLength, timeResolution, displayIntervalEndDate)); } double[] tcolors = TDDO.getColors(); Date[] tdates = TDDO.getDates(); altTexts = TDDO.getAltTexts(); expecteds = TDDO.getExpecteds(); levels = TDDO.getLevels(); switchInfo = TDDO.getSwitchInfo(); colors = new int[tddoLength]; dates = new String[tddoLength]; urls = new String[tddoLength]; //add the accumId for the current series dimIds.add(accumId); StringBuilder jsCall = new StringBuilder(); jsCall.append("javascript:OE.report.datasource.showDetails({"); jsCall.append("dsId:'").append(dss.getClass().getName()).append("'"); //specify results jsCall.append(",results:[") .append(StringUtils.collectionToDelimitedString(dimIds, ",", "'", "'")).append(']'); //specify accumId jsCall.append(",accumId:'").append(accumId).append("'"); addJavaScriptFilters(jsCall, filters, dateFieldName); //this builds urls and hover texts int startDay = getWeekStartDay(resolutionHandlers); Calendar c = Calendar.getInstance(clientTimezone); // Calendar curr = Calendar.getInstance(); for (int i = 0; i < tddoLength; i++) { colors[i] = (int) tcolors[i]; // For a time series data point, set time to be current server time // This will allow us to convert this data point date object to be request timezone date c.setTime(tdates[i]); c.add(Calendar.MILLISECOND, timeOffsetMillies); if (timeResolution.equals(WEEKLY)) { dates[i] = dateFormatWeekPart.format(tdates[i]) + "-W" + PgSqlDateHelper.getWeekOfYear(startDay, c) + "-" + PgSqlDateHelper.getYear(startDay, c); } else { dates[i] = tmpDateFormat.format(c.getTime()); } altTexts[i] = "(" + accumIdTranslated + ") " + // Accum "Date: " + dates[i] + // Date ", Level: " + numFormat3.format(levels[i]) + // Level ", Count: " + ((int) counts[i]) + // Count ", Expected: " + numFormat1.format(expecteds[i]); // Expected if (switchInfo != null) { altTexts[i] += ", Switch: " + switchInfo[i] + ", "; } // build the click through url StringBuilder tmp = new StringBuilder(jsCall.toString()); // add the date field with start and end dates from the data point if (!DAILY.equalsIgnoreCase(timeResolution)) { Calendar timeSet = Calendar.getInstance(clientTimezone); timeSet.setTime(tdates[i]); if (WEEKLY.equalsIgnoreCase(timeResolution)) { timeSet.set(Calendar.DAY_OF_WEEK, startDay + 1); tmp.append(",").append(dateFieldName).append("_start:'") .append(timeSet.getTimeInMillis()).append("'"); timeSet.add(Calendar.DAY_OF_YEAR, 6); tmp.append(",").append(dateFieldName).append("_end:'") .append(timeSet.getTimeInMillis()).append("'"); } else if (MONTHLY.equalsIgnoreCase(timeResolution)) { // Compute last day of month timeSet.set(Calendar.DAY_OF_MONTH, 1); timeSet.add(Calendar.MONTH, 1); timeSet.add(Calendar.DAY_OF_YEAR, -1); tmp.append(",").append(dateFieldName).append("_end:'") .append(timeSet.getTimeInMillis()).append("'"); // set first day of month timeSet.set(Calendar.DAY_OF_MONTH, 1); tmp.append(",").append(dateFieldName).append("_start:'") .append(timeSet.getTimeInMillis()).append("'"); } else if (YEARLY.equalsIgnoreCase(timeResolution)) { // Compute last day of month timeSet.set(Calendar.DATE, 31); timeSet.add(Calendar.MONTH, Calendar.DECEMBER); tmp.append(",").append(dateFieldName).append("_end:'") .append(timeSet.getTimeInMillis()).append("'"); timeSet.set(Calendar.DATE, 1); timeSet.add(Calendar.MONTH, Calendar.JANUARY); tmp.append(",").append(dateFieldName).append("_start:'") .append(timeSet.getTimeInMillis()).append("'"); } } else { // compute end date for individual data points based on the selected resolution // detailsPointEndDate = computeEndDate(tdates[i],timeResolution); // add the date field with start and end dates from the data point tmp.append(",").append(dateFieldName).append("_start:'").append(tdates[i].getTime()) .append("'"); tmp.append(",").append(dateFieldName).append("_end:'").append(tdates[i].getTime()) .append("'"); } tmp.append("});"); urls[i] = tmp.toString(); } allCounts[aIndex] = counts; allColors[aIndex] = colors; allAltTexts[aIndex] = altTexts; allExpecteds[aIndex] = expecteds; allLevels[aIndex] = levels; allLineSetURLs[aIndex] = urls; allSwitchInfo[aIndex] = switchInfo; lineSetLabels[aIndex] = accumIdTranslated; displayAlerts[aIndex] = isDetectionDetector; aIndex++; //remove the accumId for the next series dimIds.remove(accumId); } GraphDataSerializeToDiskHandler hndl = new GraphDataSerializeToDiskHandler(graphDir); GraphController gc = getGraphController(null, hndl, userPrincipalName); //TODO figure out why I (hodancj1) added this to be accumulation size ~Feb 2012 // gc.setMaxLegendItems(accumulations.size()); graphData.setShowSingleAlertLegends(isDetectionDetector); graphData.setCounts(allCounts); graphData.setColors(allColors); graphData.setAltTexts(allAltTexts); graphData.setXLabels(dates); graphData.setExpecteds(allExpecteds); graphData.setLevels(allLevels); graphData.setLineSetURLs(allLineSetURLs); graphData.setLineSetLabels(lineSetLabels); graphData.setDisplayAlerts(displayAlerts); // graphData.setDisplaySeverityAlerts(displayAlerts); graphData.setPercentBased(percentBased); graphData.setXAxisLabel(messageSource.getDataSourceMessage(group.getResolution(), dss)); graphData.setYAxisLabel(yAxisLabel); int maxLabels = graphData.getGraphWidth() / 30; graphData.setMaxLabeledCategoryTicks(Math.min(maxLabels, allCounts[0].length)); StringBuffer sb = new StringBuffer(); GraphObject graph = gc.writeTimeSeriesGraph(sb, graphData, true, true, false, graphTimeSeriesUrl); result.put("html", sb.toString()); //added to build method calls from javascript Map<String, Object> graphConfig = new HashMap<String, Object>(); graphConfig.put("address", graphTimeSeriesUrl); graphConfig.put("graphDataId", graph.getGraphDataId()); graphConfig.put("imageMapName", graph.getImageMapName()); graphConfig.put("graphTitle", graphData.getGraphTitle()); graphConfig.put("xAxisLabel", graphData.getXAxisLabel()); graphConfig.put("yAxisLabel", graphData.getYAxisLabel()); graphConfig.put("xLabels", graphData.getXLabels()); graphConfig.put("graphWidth", graphData.getGraphWidth()); graphConfig.put("graphHeight", graphData.getGraphHeight()); graphConfig.put("yAxisMin", graph.getYAxisMin()); graphConfig.put("yAxisMax", graph.getYAxisMax()); // fix invalid JSON coming from GraphController String dataSeriesJson = graph.getDataSeriesJSON().replaceFirst("\\{", "") // remove trailing "}" .substring(0, graph.getDataSeriesJSON().length() - 2); // read malformed JSON ObjectMapper mapper = new ObjectMapper(); JsonFactory jsonFactory = mapper.getJsonFactory() .configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true) .configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); JsonParser jsonParser = jsonFactory.createJsonParser(dataSeriesJson); // array of String -> Object maps TypeReference<Map<String, Object>[]> dataSeriesType = new TypeReference<Map<String, Object>[]>() { }; // write JSON as Map so that it can be serialized properly back to JSON Map<String, Object>[] seriesMap = mapper.readValue(jsonParser, dataSeriesType); graphConfig.put("dataSeriesJSON", seriesMap); if (includeDetails) { int totalPoints = 0; List<HashMap<String, Object>> details = new ArrayList<HashMap<String, Object>>(); HashMap<String, Object> detail; for (int i = 0; i < allCounts.length; i++) { for (int j = 0; j < allCounts[i].length; j++) { totalPoints++; detail = new HashMap<String, Object>(); detail.put("Date", dates[j]); detail.put("Series", lineSetLabels[i]); detail.put("Level", allLevels[i][j]); detail.put("Count", allCounts[i][j]); if (!ArrayUtils.isEmpty(allExpecteds[i])) { detail.put("Expected", allExpecteds[i][j]); } if (!ArrayUtils.isEmpty(allSwitchInfo[i])) { detail.put("Switch", allSwitchInfo[i][j]); } detail.put("Color", allColors[i][j]); details.add(detail); } } result.put("detailsTotalRows", totalPoints); result.put("details", details); } result.put("graphConfiguration", graphConfig); result.put("success", true); } else { StringBuilder sb = new StringBuilder(); sb.append("<h2>" + messageSource.getDataSourceMessage("graph.nodataline1", dss) + "</h2>"); sb.append("<p>" + messageSource.getDataSourceMessage("graph.nodataline2", dss) + "</p>"); result.put("html", sb.toString()); result.put("success", true); } } catch (Exception e) { log.error("Failure to create Timeseries", e); } return result; }
From source file:canreg.client.analysis.AgeSpecificCasesPerHundredThousandTableBuilder.java
@Override public LinkedList<String> buildTable(String tableHeader, String reportFileName, int startYear, int endYear, Object[][] incidenceData, PopulationDataset[] populations, PopulationDataset[] standardPopulations, LinkedList<ConfigFields> configList, String[] engineParameters, FileTypes fileType) throws NotCompatibleDataException { LinkedList<String> generatedFiles = new LinkedList<String>(); String footerString = java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("TABLE BUILT ") + new Date() + java.util.ResourceBundle .getBundle(/*from ww w . ja v a 2 s . co m*/ "canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString(" BY CANREG5."); String notesString = ""; double tableFontSize = 7.5; String font = "Times"; int[] years = { startYear, endYear }; double casesArray[][][] = null; // a 3D array of sex, icd and agegroup - with one extra layer in all dimensions containing a sum of all double populationArray[][] = null; // contains population count in the following format: [sex][agegroup] // double RegPop[][]; double totalCasesPerHundredThousand[][]; double crudeRate[][]; double MV[][]; double ASR[][]; double ASRbyAgeGroup[][][]; double ratei[][]; // double vASR[][]; double ASRluL[][][]; double variL[][]; double variLbyAgeGroup[][][]; double DCO[][]; char ASRf[][]; double ASRratio[][]; char MVf[][]; String sexLabel[] = null; String tableLabel[] = null; String icdLabel[] = null; LinkedList cancerGroupsLocal[] = null; LinkedList<FieldDescription> incidenceFieldDescriptionList = null; boolean showSeeNotesNote = true; char Childc[][] = new char[2][3]; double casesPerHundredThousand[][][]; double cumRate64[][]; double cumRate74[][]; tableLabel = ConfigFieldsReader.findConfig("table_label", configList); // sexLabel = ConfigFieldsReader.findConfig("sex_label", configList); sexLabel = new String[] { java.util.ResourceBundle.getBundle("canreg/client/analysis/resources/AbstractEditorialTableBuilder") .getString("MALE"), java.util.ResourceBundle.getBundle("canreg/client/analysis/resources/AbstractEditorialTableBuilder") .getString("FEMALE") }; icdLabel = ConfigFieldsReader.findConfig("ICD_groups_labels", configList); icd10GroupDescriptions = ConfigFieldsReader.findConfig("ICD10_groups", configList); cancerGroupsLocal = EditorialTableTools.generateICD10Groups(icd10GroupDescriptions); allCancerGroupsIndex = EditorialTableTools.getICD10index("ALL", icd10GroupDescriptions); leukemiaNOSCancerGroupIndex = EditorialTableTools.getICD10index(950, cancerGroupsLocal); skinCancerGroupIndex = EditorialTableTools.getICD10index("C44", icd10GroupDescriptions); bladderCancerGroupIndex = EditorialTableTools.getICD10index("C67", icd10GroupDescriptions); mesotheliomaCancerGroupIndex = EditorialTableTools.getICD10index("C45", icd10GroupDescriptions); kaposiSarkomaCancerGroupIndex = EditorialTableTools.getICD10index("C46", icd10GroupDescriptions); myeloproliferativeDisordersCancerGroupIndex = EditorialTableTools.getICD10index("MPD", icd10GroupDescriptions); myelodysplasticSyndromesCancerGroupIndex = EditorialTableTools.getICD10index("MDS", icd10GroupDescriptions); allCancerGroupsButSkinIndex = EditorialTableTools.getICD10index("ALLbC44", icd10GroupDescriptions); leukemiaNOSCancerGroupIndex = EditorialTableTools.getICD10index(950, cancerGroupsLocal); brainAndCentralNervousSystemCancerGroupIndex = EditorialTableTools.getICD10index("C70-72", icd10GroupDescriptions); ovaryCancerGroupIndex = EditorialTableTools.getICD10index(569, cancerGroupsLocal); otherCancerGroupsIndex = EditorialTableTools.getICD10index("O&U", icd10GroupDescriptions); numberOfCancerGroups = cancerGroupsLocal.length; lineBreaks = parseLineBreaks(ConfigFieldsReader.findConfig("line_breaks", configList)); numberOfYears = years[1] - years[0] + 1; minimumCasesLimit = minimumCasesPerYearLimit * numberOfYears; noOldData = true; casesPerHundredThousand = new double[numberOfSexes][numberOfAgeGroups][numberOfCancerGroups]; casesArray = new double[numberOfCancerGroups][numberOfSexes][numberOfAgeGroups]; cumRate64 = new double[numberOfSexes][numberOfCancerGroups]; cumRate74 = new double[numberOfSexes][numberOfCancerGroups]; populationArray = new double[numberOfSexes][numberOfAgeGroups]; foundAgeGroups = new boolean[numberOfAgeGroups]; if (areThesePopulationDatasetsCompatible(populations)) { for (PopulationDataset population : populations) { population.addPopulationDataToArrayForTableBuilder(populationArray, foundAgeGroups, new AgeGroupStructure(5, 85, 1)); } } else { throw new NotCompatibleDataException(); } populationString = populations[0].getPopulationDatasetName(); int lastCommaPlace = populationString.lastIndexOf(","); if (lastCommaPlace != -1) { populationString = populationString.substring(0, lastCommaPlace); } if (populations[0].getFilter().length() > 0) { notesString = java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("FILTER USED:") + " " + populations[0].getFilter(); } if (populations.length > 0) { notesString += ", " + java.util.ResourceBundle.getBundle( "canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("REFERENCE POPULATION:") + " " + populations[0].getReferencePopulation().getPopulationDatasetName(); } standardPopulationArray = new double[numberOfSexes][numberOfAgeGroups]; for (PopulationDataset stdPopulation : standardPopulations) { stdPopulation.addPopulationDataToArrayForTableBuilder(standardPopulationArray, null, new AgeGroupStructure(5, 85, 1)); } // standardize population array for (int sexNumber = 0; sexNumber < numberOfSexes; sexNumber++) { for (int ageGroupNumber = 0; ageGroupNumber < numberOfAgeGroups; ageGroupNumber++) { standardPopulationArray[sexNumber][ageGroupNumber] = (standardPopulationArray[sexNumber][ageGroupNumber] / standardPopulationArray[sexNumber][numberOfAgeGroups - 1]) * 100000; } } highestPopulationAgeGroup = findHighestAgeGroup(foundAgeGroups); lowestPopulationAgeGroup = findLowestAgeGroup(foundAgeGroups); int records = 0; // generate statistics // Generate based on death certificate only DCO = new double[numberOfSexes][numberOfCancerGroups]; // and microscopical verification MV = new double[numberOfSexes][numberOfCancerGroups]; String sexString; String icdString; String morphologyString; String yearString; String ageString; String basisString; String casesString; int sex, icdNumber, year, icdIndex, yearIndex, ageGroup, ageInt, basis, cases; if (incidenceData != null) { for (Object[] line : incidenceData) { try { // Set default icdIndex = -1; cases = 0; // Unknown sex group = 3 sex = 3; // Extract data sexString = (String) line[SEX_COLUMN]; sex = Integer.parseInt(sexString.trim()); // sex = 3 is unknown sex if (sex > 2) { sex = 3; } morphologyString = (String) line[MORPHOLOGY_COLUMN]; /* if (morphologyString.length() > 0) { int morphology = Integer.parseInt(morphologyString); if (morphology == 9140) { String behaviourString = getContentOfField( incidenceFieldDescriptionList, "behaviour", line).trim(); if (behaviourString.equals("3")) { icdIndex = kaposiSarkomaCancerGroupIndex; } } else if ((int)(morphology/10) == 905) { String behaviourString = getContentOfField(incidenceFieldDescriptionList, "behaviour", line).trim(); if (behaviourString.equals("3")) { icdIndex = mesotheliomaCancerGroupIndex; } } } */ if (icdIndex < 0) { icdString = (String) line[ICD10_COLUMN]; if (icdString.length() > 0 && icdString.trim().substring(0, 1).equals("C")) { icdString = icdString.trim().substring(1); icdNumber = Integer.parseInt(icdString); if (icdString.length() < 3) { icdNumber = icdNumber * 10; } icdIndex = EditorialTableTools.getICD10index(icdNumber, cancerGroupsLocal); if (icdIndex == -1) { icdIndex = -1; } } else if (icdString.length() > 0 && icdString.trim().substring(0, 1).equals("D")) { icdString = icdString.trim().substring(1); icdNumber = Integer.parseInt(icdString); if (icdString.length() < 3) { icdNumber = icdNumber * 10; } if (icdNumber == 90 || icdNumber == 414) { icdIndex = bladderCancerGroupIndex; } else if ((int) (icdNumber / 10) == 45 || (int) (icdNumber / 10) == 47) { icdIndex = myeloproliferativeDisordersCancerGroupIndex; } else if ((int) (icdNumber / 10) == 46) { icdIndex = myelodysplasticSyndromesCancerGroupIndex; } else { icdIndex = DONT_COUNT; } } } yearString = line[YEAR_COLUMN].toString(); year = Integer.parseInt(yearString); yearIndex = year - years[0]; ageString = line[AGE_COLUMN].toString(); ageInt = Integer.parseInt(ageString); if (ageInt == unknownAgeInt) { ageGroup = unknownAgeGroupIndex; } else { ageGroup = populations[yearIndex].getAgeGroupIndex(ageInt); // Adjust age group if (populations[yearIndex].getAgeGroupStructure().getSizeOfFirstGroup() != 1) { ageGroup += 1; } } // Extract cases cases = (Integer) line[CASES_COLUMN]; if (icdIndex != DONT_COUNT && year <= years[1] && year >= years[0]) { // Basis of diagnosis basisString = line[BASIS_DIAGNOSIS_COLUMN].toString(); if (basisString != null) { basis = Integer.parseInt(basisString.trim()); } else { basis = -1; } if (sex <= numberOfSexes && icdIndex >= 0 && icdIndex <= cancerGroupsLocal.length) { casesArray[icdIndex][sex - 1][ageGroup] += cases; // if (basis == 00) { DCO[sex - 1][icdIndex] += cases; } else if (basis >= 10 && basis <= 19) { MV[sex - 1][icdIndex] += cases; } } else if (otherCancerGroupsIndex >= 0) { casesArray[otherCancerGroupsIndex][sex - 1][ageGroup] += cases; } if (allCancerGroupsIndex >= 0) { casesArray[allCancerGroupsIndex][sex - 1][ageGroup] += cases; if (basis == 0) { DCO[sex - 1][allCancerGroupsIndex] += cases; } else if (basis >= 10 && basis <= 19) { MV[sex - 1][allCancerGroupsIndex] += cases; } } if (allCancerGroupsButSkinIndex >= 0 && skinCancerGroupIndex >= 0 && icdIndex != skinCancerGroupIndex) { casesArray[allCancerGroupsButSkinIndex][sex - 1][ageGroup] += cases; if (basis == 0) { DCO[sex - 1][allCancerGroupsButSkinIndex] += cases; } else if (basis >= 10 && basis <= 19) { MV[sex - 1][allCancerGroupsButSkinIndex] += cases; } } records += cases; if (records % recordsPerFeedback == 0) { System.out.println(java.util.ResourceBundle.getBundle( "canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("PROCESSING RECORD NUMBER: ") + records); } } } catch (NumberFormatException nfe) { Logger.getLogger(AgeSpecificCasesPerHundredThousandTableBuilder.class.getName()) .log(Level.WARNING, null, nfe); } // Read next line } } System.out.println(java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("PROCESSED ") + records + java.util.ResourceBundle .getBundle( "canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString(" RECORDS.")); // Get our matrixes ready // Age standarized rate ASR = new double[numberOfSexes][numberOfCancerGroups]; ASRbyAgeGroup = new double[numberOfSexes][numberOfCancerGroups][numberOfAgeGroups]; ASRluL = new double[numberOfSexes][numberOfCancerGroups][2]; variL = new double[numberOfSexes][numberOfCancerGroups]; variLbyAgeGroup = new double[numberOfSexes][numberOfCancerGroups][numberOfAgeGroups]; // Total casesPerHundredThousand totalCasesPerHundredThousand = new double[numberOfSexes][numberOfCancerGroups]; // Crude rate crudeRate = new double[numberOfSexes][numberOfCancerGroups]; for (int sexNumber = 0; sexNumber < 2; sexNumber++) { // The age groups ageLabel[lowestPopulationAgeGroup] = "0-"; for (int icdGroup = 0; icdGroup < numberOfCancerGroups; icdGroup++) { if (icdLabel[icdGroup].substring(0 + sexNumber, 1 + sexNumber).equalsIgnoreCase("1")) { // The age groups double previousAgeGroupCases = 0; double previousAgeGroupPopulation = 0; double previousAgeGroupWstdPopulation = 0; double lastAgeGroupCases = 0; double lastAgeGroupPopulation = 0; double lastAgeGroupWstdPopulation = 0; for (int ageGroupNumber = 1; ageGroupNumber < unknownAgeGroupIndex; ageGroupNumber++) { if (ageGroupNumber == 1) { for (int ag = lowestIncidenceAgeGroup; ag < ageGroupNumber; ag++) { previousAgeGroupCases += casesArray[icdGroup][sexNumber][ag]; previousAgeGroupPopulation += populationArray[sexNumber][ag]; previousAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ag]; } } if (foundAgeGroups[ageGroupNumber] && ageGroupNumber < highestPopulationAgeGroup) { casesPerHundredThousand[sexNumber][ageGroupNumber][icdGroup] = 100000 * (casesArray[icdGroup][sexNumber][ageGroupNumber] + previousAgeGroupCases) / (populationArray[sexNumber][ageGroupNumber] + previousAgeGroupPopulation); previousAgeGroupCases = 0; previousAgeGroupPopulation = 0; previousAgeGroupWstdPopulation = 0; } else { previousAgeGroupCases += casesArray[icdGroup][sexNumber][ageGroupNumber]; previousAgeGroupPopulation += populationArray[sexNumber][ageGroupNumber]; previousAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ageGroupNumber]; } } // We calculate the "leftovers" from the last age group if (previousAgeGroupPopulation > 0) { casesPerHundredThousand[sexNumber][highestPopulationAgeGroup][icdGroup] = 100000 * (previousAgeGroupCases) / (previousAgeGroupPopulation); } previousAgeGroupCases = 0; previousAgeGroupPopulation = 0; previousAgeGroupWstdPopulation = 0; } } } // ASR, vASR, MV, MI, DCO for (int sexNumber = 0; sexNumber < numberOfSexes; sexNumber++) { for (int icdGroup = 0; icdGroup < numberOfCancerGroups; icdGroup++) { double previousAgeGroupCases = 0; double previousAgeGroupPopulation = 0; double previousAgeGroupWstdPopulation = 0; double lastAgeGroupCases = 0; double lastAgeGroupPopulation = 0; double lastAgeGroupWstdPopulation = 0; totalCasesPerHundredThousand[sexNumber][icdGroup] += casesArray[icdGroup][sexNumber][0]; for (int ageGroupNumber = 1; ageGroupNumber < unknownAgeGroupIndex; ageGroupNumber++) { if (ageGroupNumber == 1) { for (int ag = lowestIncidenceAgeGroup; ag < ageGroupNumber; ag++) { previousAgeGroupCases += casesArray[icdGroup][sexNumber][ag]; previousAgeGroupPopulation += populationArray[sexNumber][ag]; previousAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ag]; } } if (foundAgeGroups[ageGroupNumber] && ageGroupNumber < highestPopulationAgeGroup && (previousAgeGroupPopulation + populationArray[sexNumber][ageGroupNumber] > 0)) { double asr = calculateASR( (previousAgeGroupCases + casesArray[icdGroup][sexNumber][ageGroupNumber]), (previousAgeGroupPopulation + populationArray[sexNumber][ageGroupNumber]), (previousAgeGroupWstdPopulation + standardPopulationArray[sexNumber][ageGroupNumber])); ASR[sexNumber][icdGroup] += asr; ASRbyAgeGroup[sexNumber][icdGroup][ageGroupNumber] = asr; /* We don't use confidence intervals so this was removed 16.07.07 double varil = calculateVariL((previousAgeGroupCases + casesArray[icdGroup][sex][ ageGroup]), (previousAgeGroupWstdPopulation + wstdPop[ageGroup]), (previousAgeGroupPopulation + populationArray[sex][ageGroup]) ); variL[sex][icdGroup] += varil; variLbyAgeGroup[sex][icdGroup][ageGroup] = varil; */ previousAgeGroupCases = 0; previousAgeGroupPopulation = 0; previousAgeGroupWstdPopulation = 0; } else if (ageGroupNumber < highestPopulationAgeGroup) { previousAgeGroupCases += casesArray[icdGroup][sexNumber][ageGroupNumber]; previousAgeGroupPopulation += populationArray[sexNumber][ageGroupNumber]; previousAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ageGroupNumber]; } else { lastAgeGroupCases += casesArray[icdGroup][sexNumber][ageGroupNumber]; lastAgeGroupPopulation += populationArray[sexNumber][ageGroupNumber]; lastAgeGroupWstdPopulation += standardPopulationArray[sexNumber][ageGroupNumber]; } totalCasesPerHundredThousand[sexNumber][icdGroup] += casesArray[icdGroup][sexNumber][ageGroupNumber]; } // We calculate the "leftovers" from the last age group if (lastAgeGroupPopulation > 0) { double asr = calculateASR(lastAgeGroupCases, lastAgeGroupPopulation, lastAgeGroupWstdPopulation); ASR[sexNumber][icdGroup] += asr; ASRbyAgeGroup[sexNumber][icdGroup][highestPopulationAgeGroup] = asr; /* We don't use confidence intervals so this was removed 16.07.07 double varil = calculateVariL(lastAgeGroupCases, lastAgeGroupWstdPopulation, lastAgeGroupPopulation); variL[sex][icdGroup] += varil; variLbyAgeGroup[sex][icdGroup][highestPopulationAgeGroup] = varil; */ } // and take the unknown age group into account totalCasesPerHundredThousand[sexNumber][icdGroup] += casesArray[icdGroup][sexNumber][unknownAgeGroupIndex]; if (totalCasesPerHundredThousand[sexNumber][icdGroup] > 0) { DCO[sexNumber][icdGroup] = 100 * (int) DCO[sexNumber][icdGroup] / totalCasesPerHundredThousand[sexNumber][icdGroup]; MV[sexNumber][icdGroup] = 100 * (int) MV[sexNumber][icdGroup] / totalCasesPerHundredThousand[sexNumber][icdGroup]; crudeRate[sexNumber][icdGroup] = totalCasesPerHundredThousand[sexNumber][icdGroup] * standardPopulationArray[sexNumber][allAgeGroupsIndex] / (populationArray[sexNumber][allAgeGroupsIndex]); /* We don't use confidence intervals so this was removed 16.07.07 double[] asrlul = calculateASRluL(ASR[sex][icdGroup], variL[sex][icdGroup], wstdPop[allAgeGroupsIndex]); ASRluL[sex][icdGroup][0] = asrlul[0]; ASRluL[sex][icdGroup][1] = asrlul[1]; */ // Cum. Rates if (highestPopulationAgeGroup > 13) { for (int k = 1; k <= 13; k++) { cumRate64[sexNumber][icdGroup] += casesPerHundredThousand[sexNumber][k][icdGroup] * cumPop18[k] / 1000.0; } } if (highestPopulationAgeGroup > 15) { for (int k = 1; k <= 15; k++) { cumRate74[sexNumber][icdGroup] += casesPerHundredThousand[sexNumber][k][icdGroup] * cumPop18[k] / 1000.0; } } // adjust the ASR and cum rates for unknown ages if (ASR[sexNumber][icdGroup] > 0) { double ratio = totalCasesPerHundredThousand[sexNumber][icdGroup] / (totalCasesPerHundredThousand[sexNumber][icdGroup] - casesArray[icdGroup][sexNumber][unknownAgeGroupIndex]); ASR[sexNumber][icdGroup] *= ratio; cumRate64[sexNumber][icdGroup] *= ratio; cumRate74[sexNumber][icdGroup] *= ratio; } /* if (!isSpecialized) { cumRate64[sex][allCancerGroupsIndex] += cumRate64[sex][icdGroup]; cumRate74[sex][allCancerGroupsIndex] += cumRate74[sex][icdGroup]; if (icdGroup!=skinCancerGroupIndex) { cumRate64[sex][allCancerGroupsIndex] += cumRate64[sex][icdGroup]; cumRate74[sex][allCancerGroupsIndex] += cumRate74[sex][icdGroup]; } } */ } } } // Get our matrixes ready ASRf = new char[numberOfSexes][numberOfCancerGroups]; // Adjust the age labels ageLabel[1] = "0-"; ageLabel[highestPopulationAgeGroup] = ageLabel[highestPopulationAgeGroup].substring(0, ageLabel[highestPopulationAgeGroup].length() - 1) + "+"; // Write it out NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(1); nf.setMinimumFractionDigits(1); // Writing System.out.println(java.util.ResourceBundle .getBundle("canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("WRITING DATA...\\N")); Writer reportFileWriter; if (fileType.equals(FileTypes.csv)) { // write tab separated stuff here // CSVWriter csvOut; CSVPrinter csvOut; for (int sexNumber = 0; sexNumber < numberOfSexes - 1; sexNumber++) { try { String tabReportFileName = ""; try { tabReportFileName = reportFileName + sexLabel[sexNumber] + ".csv"; System.out.println(java.util.ResourceBundle.getBundle( "canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("WRITING TO ") + tabReportFileName); reportFileWriter = new OutputStreamWriter(new FileOutputStream(tabReportFileName), "UTF-8"); } catch (IOException ioe) { System.out.println(java.util.ResourceBundle.getBundle( "canreg/client/analysis/resources/AgeSpecificCasesPerHundredThousandTableBuilder") .getString("ERROR IN REPORTFILE: ") + tabReportFileName); reportFileWriter = new OutputStreamWriter(System.out); } // reportStream = new PrintStream(tabReportFileName); // write the header line LinkedList<String> headers = new LinkedList<String>(); headers.add("SITE"); headers.add("ALL AGES"); headers.add("AGE UNK"); // add age groups for (int age = 1; age <= highestPopulationAgeGroup; age++) { headers.add(ageLabel[age]); } headers.add("CRUDE RATE"); headers.add("(%)"); headers.add("CUM 0-64"); headers.add("CUM 0-74"); headers.add("ASR"); headers.add("ICD (10th)"); // csvOut.writeNext(line.toArray(new String[0])); CSVFormat format = CSVFormat.DEFAULT.withDelimiter(',') .withHeader(headers.toArray(new String[0])); csvOut = new CSVPrinter(reportFileWriter, format); // csvOut.printRecord(headers); LinkedList<String> line = new LinkedList<String>(); // write the data for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { line.add(icdLabel[j].substring(3)); line.add(formatNumber(totalCasesPerHundredThousand[sexNumber][j], 0)); line.add(formatNumber(casesArray[j][sexNumber][unknownAgeGroupIndex], 0)); for (int age = 1; age <= highestPopulationAgeGroup; age++) { if (casesPerHundredThousand[sexNumber][age][j] > 0) { line.add(formatNumber(casesPerHundredThousand[sexNumber][age][j])); } else { line.add("0.0"); } } line.add(formatNumber(crudeRate[sexNumber][j], 2)); line.add(formatNumber(100 * totalCasesPerHundredThousand[sexNumber][j] / totalCasesPerHundredThousand[sexNumber][allCancerGroupsButSkinIndex])); line.add(formatNumber(cumRate64[sexNumber][j], 2)); line.add(formatNumber(cumRate74[sexNumber][j], 2)); line.add(formatNumber(ASR[sexNumber][j])); line.add(icd10GroupDescriptions[j]); csvOut.printRecord(line); line.clear(); } } csvOut.flush(); csvOut.close(); generatedFiles.add(tabReportFileName); } catch (IOException ex) { Logger.getLogger(AgeSpecificCasesPerHundredThousandTableBuilder.class.getName()) .log(Level.SEVERE, null, ex); } } } // Make PS-file else { for (int sexNumber = 0; sexNumber < numberOfSexes - 1; sexNumber++) { String psFileName = reportFileName + "-" + sexLabel[sexNumber] + ".ps"; generatedFiles.add(psFileName); try { Writer fw = new OutputStreamWriter(new FileOutputStream(psFileName), "UTF-8"); nf.setMaximumFractionDigits(1); nf.setMinimumFractionDigits(1); fw.write("/RLT {rlineto} def\n"); fw.write("/LT {lineto} def\n"); fw.write("/MT {moveto} def\n"); fw.write("/SCF {scalefont} def\n"); fw.write("/SF {setfont} def\n"); fw.write("/SG {setgray} def\n"); fw.write("/FF {findfont} def\n"); fw.write("/SLW {setlinewidth} def\n"); fw.write("/CP {closepath} def\n"); fw.write("/Mainfont\n"); fw.write("/Helvetica-Bold FF " + (int) (tableFontSize * 2 - 3) + " SCF def\n"); fw.write("/Titlefont\n"); fw.write("/Helvetica FF " + tableFontSize + " SCF def\n"); fw.write("/Tablefont\n"); fw.write("/" + font + " FF " + tableFontSize + " SCF def\n"); fw.write("/ASRfont\n"); fw.write("/" + font + "-Bold FF " + tableFontSize + " SCF def\n"); fw.write("/ICDfont\n"); fw.write("/" + font + "-Italic FF " + tableFontSize + " SCF def\n"); fw.write("/ASRitalicsfont\n"); fw.write("/" + font + "-Italic-Bold FF " + tableFontSize + " SCF def\n"); fw.write("/col 735 def\n"); fw.write("/RS {dup stringwidth pop col exch sub 0 rmoveto show} def\n"); fw.write("/CS {dup stringwidth pop 810 exch sub 2 div 0 rmoveto show} def\n"); fw.write("/nstr 1 string def\n"); fw.write("/prtchar {nstr 0 3 -1 roll put nstr show} def\n"); fw.write("newpath\n"); fw.write("90 rotate -20 -570 translate\n"); // Landscape fw.write("Mainfont SF\n"); fw.write("0 535 MT (" + tableHeader + ") CS\n"); fw.write("Titlefont SF\n"); fw.write("0 525 MT (" + populationString + ") CS\n"); fw.write("0 513 MT (" + tableLabel[0] + " - " + sexLabel[sexNumber] + ") CS\n"); // draw the grey frame fw.write("0.85 SG 27 510 translate\n"); fw.write("0 -5 MT 785 -5 LT 785 -27 LT 0 -27 LT CP fill\n"); fw.write("0 -510 translate 0.95 SG\n"); double k = 475; for (int icd = 0; icd < numberOfCancerGroups; icd++) { if ((icd + 1) < numberOfCancerGroups && icdLabel[icd + 1].charAt(sexNumber) == '1') { int lines = (isLineBreak(icd)); if (lines > 0) { k -= 2; fw.write("0 " + (k - 2) + " MT 785 " + (k - 2) + " LT 785 " + (k - 2 - (lines * (tableFontSize))) + " LT 0 " + (k - 2 - (lines * (tableFontSize))) + " LT CP fill\n"); } else if (lines < 0) { k -= 2; } k -= tableFontSize; } } /* for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sex) == '1') { int lines = (isLineBreak(j)); if (lines > 0) { k -= 2; fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - lines * tableFontSize) + " LT 0 " + (k - lines * tableFontSize) + " LT CP fill\n"); } else if (lines > 0) k -= 2; k -= lines * tableFontSize; if (IsLineBreak(j)) { k -= 2; } // draw the grey frames if (j == 8) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 35) + " LT 0 " + (k - 35) + " LT CP fill\n"); } else if (j == 34) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 26) + " LT 0 " + (k - 26) + " LT CP fill\n"); } else if (j == 16 || j == 22 || j == 40) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 18) + " LT 0 " + (k - 18) + " LT CP fill\n"); } else if (j == 27) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 42) + " LT 0 " + (k - 42) + " LT CP fill\n"); } else if (j == 47) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 34) + " LT 0 " + (k - 34) + " LT CP fill\n"); } else if (j == 53) { fw.write( "0 " + (k + tableFontSize) + " MT 774 " + (k + tableFontSize) + " LT 774 " + (k - 12) + " LT 0 " + (k - 12) + " LT CP fill\n"); } k -= (tableFontSize); } } */ fw.write("0 SG\n"); fw.write("ICDfont SF\n"); fw.write(" 740 496 MT (ICD) show\n"); fw.write(" 740 487 MT ((10th)) show\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("ICDfont SF\n"); } fw.write("745 " + k + " MT (" + icd10GroupDescriptions[j] + ") show\n"); k -= (tableFontSize); } } fw.write("/col col 0 sub def\n"); fw.write("ASRfont SF\n"); fw.write("0 496 MT (ASR) RS\n"); fw.write("0 487 MT ( ) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ASRitalicsfont SF\n"); } else { fw.write("ASRfont SF\n"); } fw.write("0 " + k + " MT (" + formatNumber(ASR[sexNumber][j]) + ") RS\n"); k -= (tableFontSize); } } fw.write("/col col 20 sub def\n"); fw.write("Tablefont SF\n"); fw.write("0 496 MT (CUM) RS\n"); fw.write("0 487 MT (0-74) RS\n"); k = 475; if (cumRate74[sexNumber][allCancerGroupsIndex] > 0) { for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("0 " + k + " MT (" + formatNumber(cumRate74[sexNumber][j], 2) + ") RS\n"); k -= (tableFontSize); } } } fw.write("/col col 20 sub def\n"); fw.write("Tablefont SF\n"); fw.write("0 496 MT (CUM) RS\n"); fw.write("0 487 MT (0-64) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("0 " + k + " MT (" + formatNumber(cumRate64[sexNumber][j], 2) + ") RS\n"); k -= (tableFontSize); } } /* No MVs shown fw.write("Tablefont SF\n"); fw.write("/col col 20 sub def\n"); fw.write("0 496 MT (MV) RS\n"); fw.write("0 487 MT ((%)) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sex) == '1') { if (isLineBreak(j - 1)!=0) { k -= 2; } if (j==skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else fw.write("Tablefont SF\n"); if (CA[sex][j] >= 0) { fw.write("0 " + k + " MT (" + formatNumber(MV[sex][j]) + ") RS\n"); } else { fw.write("0 " + k + " MT ( -) RS\n"); } k -= (tableFontSize); } } */ fw.write("/col col 20 sub def\n"); fw.write("0 491 MT ((%)) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } if (j != allCancerGroupsIndex && allCancerGroupsButSkinIndex >= 0) { fw.write("0 " + k + " MT (" + formatNumber(100 * totalCasesPerHundredThousand[sexNumber][j] / totalCasesPerHundredThousand[sexNumber][allCancerGroupsButSkinIndex]) + ") RS\n"); } k -= (tableFontSize); } } fw.write("/col col 20 sub def\n"); fw.write("0 496 MT (CRUDE) RS\n"); fw.write("0 487 MT (RATE) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("0 " + k + " MT (" + formatNumber(crudeRate[sexNumber][j]) + ") RS\n"); k -= (tableFontSize); } } fw.write("/col 119 def\n"); fw.write("0 496 MT (ALL) RS\n"); fw.write("0 487 MT (AGES) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("0 " + k + " MT (" + formatNumber(totalCasesPerHundredThousand[sexNumber][j], 0) + ") RS\n"); k -= (tableFontSize); } } fw.write("/col col 20 add def\n"); fw.write("0 496 MT (AGE) RS\n"); fw.write("0 487 MT (UNK) RS\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("0 " + k + " MT (" + formatNumber(casesArray[j][sexNumber][unknownAgeGroupIndex], 0) + ") RS\n"); k -= (tableFontSize); } } if (highestPopulationAgeGroup == numberOfAgeGroups - 4) { fw.write("/col 145 def\n"); } else if (highestPopulationAgeGroup == numberOfAgeGroups - 5) { fw.write("/col 176 def\n"); } else if (highestPopulationAgeGroup == numberOfAgeGroups - 6) { fw.write("/col 208 def\n"); } else { fw.write("/col 145 def\n"); } for (int age = 1; age <= highestPopulationAgeGroup; age++) { fw.write("/col col 26 add def\n"); fw.write("0 491 MT (" + ageLabel[age] + ") RS\n"); // fw.write("/col col 5 sub def\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } if (casesPerHundredThousand[sexNumber][age][j] > 0) { fw.write("0 " + k + " MT (" + formatNumber(casesPerHundredThousand[sexNumber][age][j]) + ") RS\n"); } else { fw.write("0 " + k + " MT ( - ) RS\n"); } k -= (tableFontSize); } } } fw.write("3 492 MT ( S I T E) show\n"); k = 475; for (int j = 0; j < numberOfCancerGroups; j++) { if (icdLabel[j].charAt(sexNumber) == '1') { if (isLineBreak(j - 1) != 0) { k -= 2; } if (j == skinCancerGroupIndex || j == ovaryCancerGroupIndex || j == bladderCancerGroupIndex || j == myelodysplasticSyndromesCancerGroupIndex || j == myeloproliferativeDisordersCancerGroupIndex || j == brainAndCentralNervousSystemCancerGroupIndex) { fw.write("ICDfont SF\n"); } else { fw.write("Tablefont SF\n"); } fw.write("3 " + k + " MT (" + icdLabel[j].substring(3) + ") show\n"); k -= (tableFontSize); } } if (showSeeNotesNote) { fw.write("3 0 MT (" + notesString + ") show\n"); } // Write the footer fw.write("0 0 MT (" + footerString + ") CS\n"); fw.write("showpage\n"); System.out.println("Wrote " + psFileName + "."); fw.close(); } catch (IOException ioe) { System.out.println(ioe); } } } if (fileType == FileTypes.pdf) { LinkedList<String> newlyGeneratedFiles = new LinkedList<String>(); for (String fileN : generatedFiles) { PsToPdfConverter pstopdf = new PsToPdfConverter(gspath); newlyGeneratedFiles.add(pstopdf.convert(fileN)); // delete the ps file File file = new File(fileN); file.delete(); } generatedFiles = newlyGeneratedFiles; } System.out.println("Fini!"); return generatedFiles; }