Newer
Older
// Copyright 2017 Istituto Nazionale di Fisica Nucleare
//
// Licensed under the EUPL
import * as Help from "./helper";
import G = require("./globals");
export function generateTree(xmlDoc: Document) {
let oldFolderParent: string = "";
let oldFolder: string = "";
//inizio leggendo tutti gli elementi da inserire nell'albero (caratterizzati
//dall'avere un url di riferimento)
//per ogni elemento controllo se si tratta di una cartella o di un documento
for (let i: number = 0; i < entry.length; i++) {
let path: string[] = entry[i].childNodes[0].nodeValue.split("");
//cartella, creo l'oggetto corrsipondente
if (path[path.length - 1] == "/") {
let folderName: string[] = entry[i].childNodes[0].nodeValue.split("/");
let Folder = {
text: folderName[folderName.length - 2],
//posiziono la radice del file system, ne memorizzo il path e il padre
if (first) {
tree.push(Folder);
oldFolder = entry[i].childNodes[0].nodeValue;
oldFolderParent = oldFolder.slice(
0,
oldFolder.lastIndexOf(folderName[folderName.length - 2])
);
//per ogni cartella determino la relazione con la cartella precedente
let newFolder: string = entry[i].childNodes[0].nodeValue;
let newFolderParent: string = newFolder.slice(
0,
newFolder.lastIndexOf(folderName[folderName.length - 2])
);
//cartella sorella con quella memorizzata
if (newFolderParent == oldFolderParent) {
oldFolder = newFolder;
insertOBJinFS(Folder, tree, folderName, 0);
} else if (newFolderParent == oldFolder) {
oldFolder = newFolder;
oldFolderParent = newFolderParent;
insertOBJinFS(Folder, tree, folderName, 0);
//nessuno dei casi precedenti
} else {
//arretro nell'albero fino a trovare lo stesso padre. Per fare questo
//tolgo al padre memorizzato in precedenza prima "/" poi il nome dell'
//ultima cartella
while (newFolderParent != oldFolderParent) {
oldFolderParent = oldFolderParent.slice(
0,
oldFolderParent.length - 1
);
oldFolderParent = oldFolderParent.slice(
0,
oldFolderParent.lastIndexOf("/") + 1
);
}
oldFolder = newFolder;
insertOBJinFS(Folder, tree, folderName, 0);
}
}
//documento, creo l'oggetto corrispondente e lo inserisco nell'albero
let fileName: string[] = entry[i].childNodes[0].nodeValue.split("/");
let filePath: string = entry[i].childNodes[0].nodeValue;
let File = {
text: fileName[fileName.length - 1],
icon: "glyphicon glyphicon-file",
selectedIcon: "glyphicon glyphicon-file",
url: filePath
insertOBJinFS(File, tree, fileName, 1);
}
}
}
//funzione che posiziona l'oggetto passato in input nell'albero
function insertOBJinFS(objfs, tree, objfsName, type) {
//determino la profondità dell'oggetto (se è un file devo aggiungere 1 a causa di "/")
let depth: number = objfsName.length;
if (type) depth++;
//in base alla profondità determino a quale oggetto agganciare quello in input
let treePosition: any;
let l: number = tree.length - 1;
switch (depth) {
case 6:
treePosition = tree;
break;
case 7:
treePosition = tree[l].nodes;
case 8:
treePosition = tree[l].nodes[tree[l].nodes.length - 1].nodes;
break;
case 9:
treePosition =
tree[l].nodes[tree[l].nodes.length - 1].nodes[
tree[l].nodes[tree[l].nodes.length - 1].nodes.length - 1
].nodes;
break;
case 10:
treePosition =
tree[l].nodes[tree[l].nodes.length - 1].nodes[
tree[l].nodes[tree[l].nodes.length - 1].nodes.length - 1
].nodes[
tree[l].nodes[tree[l].nodes.length - 1].nodes[
tree[l].nodes[tree[l].nodes.length - 1].nodes.length - 1
].nodes.length - 1
].nodes;
break;
default:
treePosition[treePosition.length - 1].nodes.push(objfs);
}
//funzione che dato l'url di un file, lo apre e lo legge passandone il contenuto
//alla funzione readData(). Questa funzione è invocata quando viene selezionato
//un file dall'albero
export function openFileFromServer(url) {
let fileName: string[] = url.split("/");
console.log("Try to open " + fileName[fileName.length - 1] + " ...");
let txtFile: any = new XMLHttpRequest();
txtFile.open("GET", url, true);
txtFile.onreadystatechange = function() {
if (txtFile.readyState === 4) {
if (txtFile.status === 200) {
readImage(txtFile.responseText);
txtFile.send(null);
}
/*function get_metadata_str(lines: number[]): void {
let metadata = G.Metadata.getInstance();
metadata.xMin = 0;
metadata.yMin = 0;
metadata.xMax = 0;
metadata.yMax = 0;
metadata.step = 0; //dimensione di un pixel in micorn
metadata.direction = G.ReadDirection.u;
//scorro l'array soffermandomi solo sulle righe "intestazione delle x". Devo
//determinare ascisse e cordinate minime e massime, il passo e la direzione di
//scansione
for (let i = 0; i < lines.length; i++) {
if (lines[i] > 17000 && Help.getFirstDigitNumber(lines[i]) == 5) {
if (metadata.xMin == 0) {
//se sono alla prima intestazione salvo la x e la y
metadata.xMin = lines[i];
metadata.yMin = lines[i + 1];
} else {
//definisco passo e direzione di scansione dalla seconda intestazione
if (lines[i] == metadata.xMin) {
metadata.direction = G.ReadDirection.c;
metadata.step = Math.abs(metadata.yMin - +lines[i + 1]); // the unary + converts to number
//se sto leggendo per colonne determino metadata.xMax leggendo dalla fine
for (let j: number = lines.length; j > i; j--) {
//se la riga è "intestazione x" memorizzo metadata.xMax e lo confronto con metadata.xMin
if (lines[j] > 17000 && Help.getFirstDigitNumber(lines[j]) == 5) {
metadata.xMax = lines[j];
if (metadata.xMax < metadata.xMin) {
let t: number = metadata.xMax;
metadata.xMax = metadata.xMin;
metadata.xMin = t;
}
metadata.direction = G.ReadDirection.r;
metadata.step = Math.abs(metadata.xMin - +lines[i]); // the unary + converts to number
//se sto leggendo per righe determino metadata.yMax leggendo dalla fine
for (let j: number = lines.length; j > i; j--) {
//se la riga è "intestazione y" memorizzo metadata.yMax e lo confronto con metadata.yMin
if (lines[j] > 17000 && Help.getFirstDigitNumber(lines[j]) == 6) {
metadata.yMax = lines[j];
if (metadata.yMax < metadata.yMin) {
let t: number = metadata.yMax;
metadata.yMax = metadata.yMin;
metadata.yMin = t;
}
break;
}
}
}
break;
}
}
//A seconda della direzione di lettura determino o metadata.yMin e metadata.yMax, o metadata.xMin e metadata.xMax
if (metadata.direction == G.ReadDirection.c) {
//se leggo per colonne devo deterinare metadata.yMin e metadata.yMax
if (lines[i] > 17000 && Help.getFirstDigitNumber(lines[i]) == 6) {
if (metadata.yMin > lines[i]) {
metadata.yMin = lines[i];
if (metadata.yMax < lines[i]) {
metadata.yMax = lines[i];
}
}
//alla terza colonna posso uscire perché ho già tutte le informazioni
if (lines[i] == metadata.xMin + metadata.step * 2) {
break;
}
} else {
//se leggo per righe devo deterinare metadata.xMin e metadata.xMax
if (lines[i] > 17000 && Help.getFirstDigitNumber(lines[i]) == 5) {
if (metadata.xMin > lines[i]) {
metadata.xMin = lines[i];
if (metadata.xMax < lines[i]) {
metadata.xMax = lines[i];
}
}
//alla terza colonna posso uscire perché ho già tutte le informazioni
if (lines[i] == metadata.yMin + 2000) {
break;
}
// version working on an array of numbers, obtained from the array of string lines
function get_metadata_num(lines: number[]): void {
let metadata = G.Metadata.getInstance();
let image = G.Image.getInstance();
metadata.xMin = 0;
metadata.yMin = 0;
metadata.xMax = 0;
metadata.yMax = 0;
metadata.step = 0; //dimensione di un pixel in micorn
metadata.direction = G.ReadDirection.u; //direzione di lettura
//scorro l'array soffermandomi solo sulle righe "intestazione delle x". Devo
//determinare ascisse e cordinate minime e massime, il passo e la direzione di
//scansione
for (let i = 0; i < lines.length; i++) {
if(Help.isAnXHeader(lines[i], image)){
if (metadata.xMin == 0) {
//se sono alla prima intestazione salvo la x e la y
metadata.xMin = lines[i];
metadata.yMin = lines[i + 1];
} else {
//definisco passo e direzione di scansione dalla seconda intestazione
if (lines[i] == metadata.xMin) {
metadata.direction = G.ReadDirection.c;
metadata.step = Math.abs(metadata.yMin - lines[i + 1]); // the unary + converts to number
//se sto leggendo per colonne determino metadata.xMax leggendo dalla fine
for (let j: number = lines.length; j > i; j--) {
//se la riga è "intestazione x" memorizzo metadata.xMax e lo confronto con metadata.xMin
if(Help.isAnXHeader(lines[j], image)) {
metadata.xMax = lines[j];
if (metadata.xMax < metadata.xMin) {
let t: number = metadata.xMax;
metadata.xMax = metadata.xMin;
metadata.xMin = t;
}
metadata.direction = G.ReadDirection.r;
metadata.step = Math.abs(metadata.xMin - lines[i]); // the unary + converts to number
//se sto leggendo per righe determino metadata.yMax leggendo dalla fine
for (let j: number = lines.length; j > i; j--) {
//se la riga è "intestazione y" memorizzo metadata.yMax e lo confronto con metadata.yMin
if(Help.isAnYHeader(lines[j],image)) {
metadata.yMax = lines[j];
if (metadata.yMax < metadata.yMin) {
let t: number = metadata.yMax;
metadata.yMax = metadata.yMin;
metadata.yMin = t;
}
break;
}
}
}
break;
}
}
//A seconda della direzione di lettura determino o metadata.yMin e metadata.yMax, o metadata.xMin e metadata.xMax
if (metadata.direction == G.ReadDirection.c) {
//se leggo per colonne devo deterinare metadata.yMin e metadata.yMax
if (Help.isAnYHeader(lines[i], image)) {
if (metadata.yMin > lines[i]) {
metadata.yMin = lines[i];
if (metadata.yMax < lines[i]) {
metadata.yMax = lines[i];
}
}
//alla terza colonna posso uscire perché ho già tutte le informazioni
if (lines[i] == metadata.xMin + metadata.step * 2) {
break;
}
} else {
//se leggo per righe devo deterinare metadata.xMin e metadata.xMax
if(Help.isAnXHeader(lines[i], image)) {
if (metadata.xMin > lines[i]) {
metadata.xMin = lines[i];
if (metadata.xMax < lines[i]) {
metadata.xMax = lines[i];
}
}
//alla terza colonna posso uscire perché ho già tutte le informazioni
if (lines[i] == metadata.yMin + 2000) {
break;
}
export function get_metadata(lines: number[]): void {
try {
get_metadata_num(lines);
}
catch(e) {
throw new Error(e);
}
}
// La funzione readImage() prende in ingresso il file di input memorizzato nella
// stringa "fileString". La funzione riempie la matrice "DataMatrix" con i dati
// in modo che essi siano memorizzati in un formato più leggibile. Sono ricavate
// anche altre variabili necessarie per il resto del codice.
export function readImage (content: string): G.Image {
let metadata = G.Metadata.getInstance();
get_metadata(lines);
let image = G.Image.getInstance();
// Risolvo gli shift
for (let i = 0; i < lines.length; i++) {
if(Help.isAnXHeader(lines[i], image)) {
// this is an x-coordinate
if (metadata.direction == G.ReadDirection.c && (lines[i] / 1000) % 2 != 0) {
lines[i + 1] += metadata.step;
} else if (
metadata.direction == G.ReadDirection.r &&
(lines[i + 1] / 1000) % 2 != 0
) {
}
}
}
//Definisco le dimensioni della matrice DataMatrix e la inizializzo
let xDim: number;
let yDim: number;
if (metadata.direction == G.ReadDirection.c) {
xDim = (metadata.xMax - metadata.xMin) / metadata.step + 1;
yDim = (metadata.yMax - metadata.yMin) / metadata.step - 2;
xDim = (metadata.xMax - metadata.xMin) / metadata.step - 2;
yDim = (metadata.yMax - metadata.yMin) / metadata.step + 1;
image.width = xDim;
image.height = yDim;
image.DataMatrix = new Array(xDim);
for (let i: number = 0; i < xDim; i++) {
image.DataMatrix[i] = new Array(yDim);
for (let j: number = 0; j < yDim; j++) {
image.DataMatrix[i][j] = new Array(G.Image.getInstance().depth);
for (let k: number = 0; k < G.Image.getInstance().depth; k++) {
image.DataMatrix[i][j][k] = 0;
}
}
}
//riempio la matrice DataMatrix eliminando i bordi
let x: number, y: number;
let write: boolean;
for (let i = 0; i < lines.length; i++) {
//riga "intestazione x": memorizzo le x e le y del punto e avanzo al conteggio
if(Help.isAnXHeader(lines[i], image)) {
x = lines[i] - metadata.xMin;
y = lines[i + 1] - metadata.yMin;
if (x != 0) {
x /= metadata.step;
}
if (y != 0) {
y /= metadata.step;
}
i++;
//non è un pixel del bordo e sto leggendo per colonne: i successivi valori
//sono da considerare
if (metadata.direction == G.ReadDirection.c && y != 0 && y != 1 && y != (metadata.yMax - metadata.yMin) / metadata.step &&
y != (metadata.yMax - metadata.yMin) / metadata.step + 1) {
write = true;
y -= 2; //aggiorno la y con i bordi tagliati
} else if (
metadata.direction == G.ReadDirection.r && x != 0 && x != 1 && x != (metadata.xMax - metadata.xMin) / metadata.step &&
x != (metadata.xMax - metadata.xMin) / metadata.step + 1) {
//non è un pixel del bordo e sto leggendo per righe: i successivi valori
//sono da considerare
write = true;
x -= 2; //aggiorno la x con i bordi tagliati
} else {
//pixel del bordo: i valori successivi sono da ignorare
write = false;
}
//conteggio da considerare (non del bordo)
} else if (lines[i] < image.headerSetValue && write == true) {
image.DataMatrix[xDim - x - 1][yDim - y - 1][lines[i]] += 1;
}
}
image.nOfCounts[i] = new Array(yDim);
image.nOfCounts[i][j] = Help.sumVect(image.DataMatrix[i][j], 0, image.DataMatrix[i][j].length);
image.maxAbsolute = Help.findMax(image.nOfCounts, { x: 0, y: 0 },{ x: xDim - 1, y: yDim - 1 });
Help.setDataForCompleteChart(image, G.Chart.getInstance());
/*function readImage_str(content: string): G.Image {
let lines = content.split("\n").map(Number);
let metadata = G.Metadata.getInstance();
get_metadata(lines);
//Risolvo gli shift
for (let i = 0; i < lines.length; i++) {
//se leggo per colonne allora aggiungo 1 alle y di tutte le colonne dispari
if (
metadata.direction == G.ReadDirection.c &&
lines[i] > 17000 &&
Help.getFirstDigitNumber(lines[i]) == 5 &&
(lines[i] / 1000) % 2 != 0
) {
lines[i + 1] = lines[i + 1] + metadata.step;
}
//se leggo per righe allora aggiungo 1 alle x di tutte le righe dispari
else if (
metadata.direction == G.ReadDirection.r &&
lines[i] > 17000 &&
Help.getFirstDigitNumber(lines[i]) == 5 &&
(lines[i + 1] / 1000) % 2 != 0
) {
lines[i] = lines[i] + metadata.step;
}
}
//Definisco le dimensioni della matrice DataMatrix e la inizializzo
let xDim: number;
let yDim: number;
if (metadata.direction == G.ReadDirection.c) {
xDim = (metadata.xMax - metadata.xMin) / metadata.step + 1;
yDim = (metadata.yMax - metadata.yMin) / metadata.step - 2;
xDim = (metadata.xMax - metadata.xMin) / metadata.step - 2;
yDim = (metadata.yMax - metadata.yMin) / metadata.step + 1;
image.width = xDim;
image.height = yDim;
image.DataMatrix = new Array(xDim);
for (let i: number = 0; i < xDim; i++) {
image.DataMatrix[i] = new Array(yDim);
for (let j: number = 0; j < yDim; j++) {
image.DataMatrix[i][j] = new Array(G.Image.getInstance().depth);
for (let k: number = 0; k < G.Image.getInstance().depth; k++) {
image.DataMatrix[i][j][k] = 0;
}
}
}
//riempio la matrice DataMatrix eliminando i bordi
let x: number, y: number;
let write: boolean;
for (let i = 0; i < lines.length; i++) {
//riga "intestazione x": memorizzo le x e le y del punto e avanzo al conteggio
if (lines[i] > 17000 && Help.getFirstDigitNumber(lines[i]) == 5) {
x = lines[i] - metadata.xMin;
y = lines[i + 1] - metadata.yMin;
if (x != 0) {
x /= metadata.step;
}
if (y != 0) {
y /= metadata.step;
}
i++;
//non è un pixel del bordo e sto leggendo per colonne: i successivi valori
//sono da considerare
if (
metadata.direction == G.ReadDirection.c &&
y != 0 &&
y != 1 &&
y != (metadata.yMax - metadata.yMin) / metadata.step &&
y != (metadata.yMax - metadata.yMin) / metadata.step + 1
) {
write = true;
y -= 2; //aggiorno la y con i bordi tagliati
} else if (
metadata.direction == G.ReadDirection.r &&
x != 0 &&
x != 1 &&
x != (metadata.xMax - metadata.xMin) / metadata.step &&
x != (metadata.xMax - metadata.xMin) / metadata.step + 1
) {
//non è un pixel del bordo e sto leggendo per righe: i successivi valori
//sono da considerare
write = true;
x -= 2; //aggiorno la x con i bordi tagliati
} else {
//pixel del bordo: i valori successivi sono da ignorare
write = false;
}
//conteggio da considerare (non del bordo)
} else if (lines[i] < 17000 && write == true) {
image.DataMatrix[xDim - x - 1][yDim - y - 1][lines[i]] += 1;
image.nOfCounts[i] = new Array(yDim);
image.nOfCounts[i][j] = Help.sumVect(
image.DataMatrix[i][j],
0,
image.DataMatrix[i][j].length
);
image.maxAbsolute = Help.findMax(
image.nOfCounts,
{ x: 0, y: 0 },
{ x: xDim - 1, y: yDim - 1 }
);
Help.setDataForCompleteChart(image, G.Chart.getInstance());
console.log("File open with succes");
return image;
}*/
/*function readImage_lc(content: string): G.Image {
let newOrigin = { xp: 0, yp: 0 }; //origine nel caso di zoom
//let passo: number = 0; //dimensione di un pixel in micorn
//coordinate minime e massime in entrambe le dimensioni
let metadata = G.Metadata.getInstance();
metadata.xMin = 0;
metadata.yMin = 0;
metadata.xMax = 0;
metadata.yMax = 0;
metadata.step = 0; //dimensione di un pixel in micorn
metadata.direction = G.ReadDirection.u;
//array con il contenuto del file di input suddiviso per righe
//scorro l'array soffermandomi solo sulle righe "intestazione delle x". Devo
//determinare ascisse e cordinate minime e massime, il passo e la direzione di
//scansione
for (let i: number = 0; i < fileStringArray.length; i++) {
if (
fileStringArray[i] > 17000 &&
Help.getFirstDigitNumber(fileStringArray[i]) == 5
) {
if (metadata.xMin == 0) {
//se sono alla prima intestazione salvo la x e la y
metadata.xMin = fileStringArray[i];
metadata.yMin = fileStringArray[i + 1];
} else {
//definisco passo e direzione di scansione dalla seconda intestazione
if (fileStringArray[i] == metadata.xMin) {
metadata.direction = G.ReadDirection.c;
metadata.step = Math.abs(metadata.yMin - fileStringArray[i + 1]);
//se sto leggendo per colonne determino metadata.xMax leggendo dalla fine
for (let j: number = fileStringArray.length; j > i; j--) {
//se la riga è "intestazione x" memorizzo metadata.xMax e lo confronto con metadata.xMin
if (
fileStringArray[j] > 17000 &&
Help.getFirstDigitNumber(fileStringArray[j]) == 5
) {
metadata.xMax = fileStringArray[j];
if (metadata.xMax < metadata.xMin) {
let t: number = metadata.xMax;
metadata.xMax = metadata.xMin;
metadata.xMin = t;
}
break;
}
}
} else {
metadata.direction = G.ReadDirection.r;
metadata.step = Math.abs(metadata.xMin - fileStringArray[i]);
//se sto leggendo per righe determino metadata.yMax leggendo dalla fine
for (let j: number = fileStringArray.length; j > i; j--) {
//se la riga è "intestazione y" memorizzo metadata.yMax e lo confronto con metadata.yMin
if (
fileStringArray[j] > 17000 &&
Help.getFirstDigitNumber(fileStringArray[j]) == 6
) {
metadata.yMax = fileStringArray[j];
if (metadata.yMax < metadata.yMin) {
let t: number = metadata.yMax;
metadata.yMax = metadata.yMin;
metadata.yMin = t;
}
break;
}
}
}
break;
}
}
} //alert(metadata.xMin + " " + metadata.xMax + " " + metadata.yMin + " " + metadata.yMax + " " + metadata.step);
assert.notEqual(metadata.direction, G.ReadDirection.u);
//A seconda della direzione di lettura determino o metadata.yMin e metadata.yMax, o metadata.xMin e metadata.xMax
for (let i: number = 2; i < fileStringArray.length; i++) {
if (metadata.direction == G.ReadDirection.c) {
//se leggo per colonne devo deterinare metadata.yMin e metadata.yMax
//mi soffermo sulle righe "intestazione y"
if (
fileStringArray[i] > 17000 &&
Help.getFirstDigitNumber(fileStringArray[i]) == 6
) {
if (metadata.yMin > fileStringArray[i]) {
metadata.yMin = fileStringArray[i];
if (metadata.yMax < fileStringArray[i]) {
metadata.yMax = fileStringArray[i];
}
}
//alla terza colonna posso uscire perché ho già tutte le informazioni
if (fileStringArray[i] == metadata.xMin + metadata.step * 2) {
break;
}
} else {
//se leggo per righe devo deterinare metadata.xMin e metadata.xMax
//mi soffermo sulle righe "intestazione x"
if (
fileStringArray[i] > 17000 &&
Help.getFirstDigitNumber(fileStringArray[i]) == 5
) {
if (metadata.xMin > fileStringArray[i]) {
metadata.xMin = fileStringArray[i];
if (metadata.xMax < fileStringArray[i]) {
metadata.xMax = fileStringArray[i];
}
}
//alla terza colonna posso uscire perché ho già tutte le informazioni
if (fileStringArray[i] == metadata.yMin + 2000) {
break;
}
} //alert(metadata.xMin + " " + metadata.xMax + " " + metadata.yMin + " " + metadata.yMax + " " + metadata.step);
//Risolvo gli shift
for (let i: number = 0; i < fileStringArray.length; i++) {
//se leggo per colonne allora aggiungo 1 alle y di tutte le colonne dispari
if (
metadata.direction == G.ReadDirection.c &&
fileStringArray[i] > 17000 &&
Help.getFirstDigitNumber(fileStringArray[i]) == 5 &&
(fileStringArray[i] / 1000) % 2 != 0
) {
fileStringArray[i + 1] = fileStringArray[i + 1] + metadata.step;
}
//se leggo per righe allora aggiungo 1 alle x di tutte le righe dispari
else if (
metadata.direction == G.ReadDirection.r &&
fileStringArray[i] > 17000 &&
Help.getFirstDigitNumber(fileStringArray[i]) == 5 &&
(fileStringArray[i + 1] / 1000) % 2 != 0
) {
fileStringArray[i] = fileStringArray[i] + metadata.step;
//Definisco le dimensioni della matrice DataMatrix e la inizializzo
if (metadata.direction == G.ReadDirection.c) {
xDim = (metadata.xMax - metadata.xMin) / metadata.step + 1;
yDim = (metadata.yMax - metadata.yMin) / metadata.step - 2;
xDim = (metadata.xMax - metadata.xMin) / metadata.step - 2;
yDim = (metadata.yMax - metadata.yMin) / metadata.step + 1;
image.width = xDim;
image.height = yDim;
image.DataMatrix = new Array(xDim);
for (let i: number = 0; i < xDim; i++) {
image.DataMatrix[i] = new Array(yDim);
for (let j: number = 0; j < yDim; j++) {
image.DataMatrix[i][j] = new Array(image.depth);
for (let k: number = 0; k < image.depth; k++) {
//riempio la matrice DataMatrix eliminando i bordi
for (let i: number = 0; i < fileStringArray.length; i++) {
//riga "intestazione x": memorizzo le x e le y del punto e avanzo al conteggio
if (
fileStringArray[i] > 17000 &&
Help.getFirstDigitNumber(fileStringArray[i]) == 5
) {
x = fileStringArray[i] - metadata.xMin;
y = fileStringArray[i + 1] - metadata.yMin;
if (x != 0) {
x /= metadata.step;
}
if (y != 0) {
y /= metadata.step;
}
i++;
//non è un pixel del bordo e sto leggendo per colonne: i successivi valori
//sono da considerare
if (
metadata.direction == G.ReadDirection.c &&
y != 0 &&
y != 1 &&
y != (metadata.yMax - metadata.yMin) / metadata.step &&
y != (metadata.yMax - metadata.yMin) / metadata.step + 1
) {
write = true;
y -= 2; //aggiorno la y con i bordi tagliati
}
//non è un pixel del bordo e sto leggendo per righe: i successivi valori
//sono da considerare
else if (
metadata.direction == G.ReadDirection.r &&
x != 0 &&
x != 1 &&
x != (metadata.xMax - metadata.xMin) / metadata.step &&
x != (metadata.xMax - metadata.xMin) / metadata.step + 1
) {
write = true;
x -= 2; //aggiorno la x con i bordi tagliati
}
//pixel del bordo: i valori successivi sono da ignorare
} else if (fileStringArray[i] < 17000 && write == true) {
image.DataMatrix[xDim - x - 1][yDim - y - 1][fileStringArray[i]] += 1;
image.nOfCounts[i] = new Array(yDim);
image.nOfCounts[i][j] = Help.sumVect(
image.DataMatrix[i][j],
0,
image.DataMatrix[i][j].length
);
image.maxAbsolute = Help.findMax(
image.nOfCounts,
{ x: 0, y: 0 },
{ x: xDim - 1, y: yDim - 1 }
);
Help.setDataForCompleteChart(image, G.Chart.getInstance());