/*
 * 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.graphics;

import org.jlab.groot.graphics.IDataSetPlotter;

import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.geom.GeneralPath;


import org.jlab.groot.base.TStyle;
import org.jlab.groot.data.IDataSet;
import org.jlab.groot.math.Dimension3D;
import org.jlab.groot.graphics.GraphicsAxisFrame;

/**
 *
 * @author gavalian
 */
public class HistogramPlotter  implements IDataSetPlotter {
    
    String       plottingOptions = "";
    IDataSet     dataset = null;
    Dimension3D  dataRegion  = new Dimension3D();
    String       datasetName = "";
    public GeneralPath path = null;
    public HistogramPlotter(IDataSet ds){
        dataset = ds;
        datasetName = ds.getName();
    }
    
    public HistogramPlotter(IDataSet ds,String options){
        dataset = ds;
        datasetName = ds.getName();
        this.plottingOptions = options;
    }
    
    @Override
    public String getOptions() {
        return this.plottingOptions;
    }

    @Override
    public void setOptions(String opt) {
        this.plottingOptions = opt;
    }

    @Override
    public String getName() {
        return datasetName;
    }

    @Override
    public IDataSet getDataSet() {
        return dataset;
    }

    @Override
    public void draw(Graphics2D g2d, GraphicsAxisFrame frame) {

        int npoints = dataset.getDataSize(0);

        double dataX  = dataset.getDataX(0);
        double dataY  = dataset.getDataY(0);
        double errorX = dataset.getDataEX(0);
            
        double xps = frame.getAxisPointX(dataX - errorX*0.5);
        double xpe = frame.getAxisPointX(dataX + errorX*0.5);
        //double yp  = frame.getAxis(1).getDimension().getMax() - 
        //        frame.getAxis(1).getAxisPosition(0.0)                 
        //        + frame.getAxis(1).getDimension().getMin();
        double yp = frame.getAxisPointY(0.0);
        
        path = new GeneralPath();
        //Path2D path = new Path2D.Double();
        
        path.moveTo((int) xps, (int) yp);
        
        for(int p = 0; p < npoints; p++){
            dataX  = dataset.getDataX(p);
            dataY  = dataset.getDataY(p);
            errorX = dataset.getDataEX(p);
            
            xps = frame.getAxisPointX(dataX - errorX*0.5);
            xpe = frame.getAxisPointX(dataX + errorX*0.5);
            //System.out.println(" x =  " + dataX + " y = " + dataY + " xps = "
            //        + xps + " yp = " + yp);
            //yp  = frame.getAxis(1).getDimension().getMax() - 
            //        frame.getAxis(1).getAxisPosition(dataY)                    
            //        + frame.getAxis(1).getDimension().getMin(); 
            
            //if(dataY<0.1) dataY = 0.0;
            yp = frame.getAxisPointY(dataY);
            
            //System.out.println("histogram = " + p + " " + dataY + " " + yp);
            path.lineTo((int) xps, (int) yp);
            path.lineTo((int) xpe, (int) yp);
            
        }
        
        //yp  = frame.getAxis(1).getDimension().getMax() - 
        //        frame.getAxis(1).getAxisPosition(0.0)                 
        //        + frame.getAxis(1).getDimension().getMin();
        yp = frame.getAxisPointY(0.0);
        path.lineTo((int) xpe, (int) yp);
        int fillColor = this.dataset.getAttributes().getFillColor();
        if(fillColor>=0){
            g2d.setColor(TStyle.getColor(fillColor));
            g2d.fill(path);
        }
        //g2d.fill(path);
        g2d.setStroke(new BasicStroke(this.dataset.getAttributes().getLineWidth()));
        int lineColor = this.dataset.getAttributes().getLineColor();
        g2d.setColor(TStyle.getColor(lineColor));
        g2d.draw(path);
        
        if(this.dataset.getAttributes().getDrawOptions().contains("E")){
        	for(int p = 0; p < npoints; p++){
                double xp = frame.getAxisPointX(this.dataset.getDataX(p));
                //double yp = frame.getAxis(1).getAxisPosition(graphDataSet.getDataY(p));
                //double yp1 = frame.getAxisPointY(this.dataset.getDataY(p));
                //int    yc = (int) (frame.getAxis(1).getDimension().getMax() - yp 
                //        + frame.getAxis(1).getDimension().getMin());
                
               // double xpL = frame.getAxisPointX(this.dataset.getDataX(p) - this.dataset.getDataEX(p));
                //double xpH = frame.getAxisPointX(this.dataset.getDataX(p) + this.dataset.getDataEX(p));
                
                double ypL = frame.getAxisPointY(this.dataset.getDataY(p) - this.dataset.getDataEY(p));
                double ypH = frame.getAxisPointY(this.dataset.getDataY(p) + this.dataset.getDataEY(p));
                
                g2d.setColor(TStyle.getColor(lineColor));
                g2d.setStroke(new BasicStroke(this.dataset.getAttributes().getLineWidth()));
                //g2d.drawLine((int) xpL, (int) yp, (int) xpH, (int) yp);
                g2d.drawLine((int) xp, (int) ypL, (int) xp, (int) ypH);
            }
        }
    }
    
    @Override
    public Dimension3D getDataRegion() {
        
        this.dataRegion.set(
                dataset.getDataX(0), dataset.getDataX(0), 
                0.0, 0.0,0.0,1.0
                );
        int dataSize = dataset.getDataSize(0);
        for(int p = 0; p < dataSize; p++){
            double x1 = dataset.getDataX(p)-dataset.getDataEX(p)*0.5;
            double x2 = dataset.getDataX(p)+dataset.getDataEX(p)*0.5;
            this.dataRegion.grow(dataset.getDataX(p), dataset.getDataY(p),0.5);
            this.dataRegion.getDimension(0).grow(x1);
            this.dataRegion.getDimension(0).grow(x2);
        }

        this.dataRegion.getDimension(1).addPadding(0.0, 0.2);
        
        return dataRegion;
    }
}

 

Ads help maintain this website.