/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.jlab.groot.tree;
import java.util.ArrayList;
import java.util.List;
import org.jlab.groot.data.DataVector;
import org.jlab.hipo.data.HipoEvent;
import org.jlab.hipo.data.HipoNode;
import org.jlab.hipo.data.HipoNodeType;
import org.jlab.hipo.io.HipoRecord;
import org.jlab.hipo.io.HipoWriter;
/**
*
* @author gavalian
*/
public class TreeFile extends Tree {
List dataVectors = new ArrayList();
HipoWriter writer = null;
private int autoSaveCount = 300;
HipoRecord headerRecord = new HipoRecord();
public TreeFile(String name) {
super(name);
}
public TreeFile(String name, String format) {
super(name);
}
public void openFile(String filename){
this.writer.open(filename);
List tokens = this.getListOfBranches();
StringBuilder str = new StringBuilder();
str.append(getName());
for(String item : tokens){
str.append(":");
str.append(item);
}
HipoNode node = new HipoNode(200,1,str.toString());
HipoEvent event = new HipoEvent();
event.addNode(node);
headerRecord.addEvent(event.getDataBuffer());
writer = new HipoWriter();
writer.addHeader(str.toString());
}
public void close(){
this.writer.close();
}
private void parseFormat(String format){
String[] tokens = format.split(":");
getBranches().clear();
for(int i = 0; i < tokens.length; i++){
addBranch(tokens[i],"","");
}
}
public void addRow(double[] row){
DataVector vec = new DataVector();
for(int i = 0; i < row.length; i++) vec.add(row[i]);
}
private void checkToAutoSave(){
if(dataVectors.size()>=this.autoSaveCount){
this.flushData();
}
}
private void flushData(){
if(dataVectors.size()>0){
int nbranches = getBranches().size();
int nvecs = dataVectors.size();
int bufferLength = nbranches*nvecs;
HipoNode node = new HipoNode(400,1,HipoNodeType.FLOAT,bufferLength);
int offset = 0;
for(int row = 0; row < nvecs; row++){
for(int col = 0; col < nbranches; col++){
node.setFloat(offset, (float) dataVectors.get(row).getValue(col));
offset++;
}
}
HipoEvent event = new HipoEvent();
event.addNode(node);
writer.writeEvent(event.getDataBuffer());
dataVectors.clear();
}
}
}
Ads help maintain this website.