package hep.io.hbook.test;

import hep.io.hbook.ColumnwiseTuple;
import hep.io.hbook.ColumnwiseTupleColumn;
import hep.io.hbook.CompositeHbookObject;
import hep.io.hbook.HbookFile;
import hep.io.hbook.OneDHistogram;
import hep.io.hbook.RowwiseTuple;
import hep.io.hbook.RowwiseTupleColumn;
import java.io.File;
import java.io.IOException;
import junit.framework.TestCase;

/**
 *
 * @author Tony Johnson
 */
public class HbookTest3 extends TestCase
{
   private HbookFile hbook;
   public HbookTest3(String name)
   {
      super(name);
   }
   public void testRowWiseTuple() throws IOException
   {
      CompositeHbookObject top = hbook.getTopLevelDirectory();
      
      assertEquals(top.nChildren(),5);
      
      RowwiseTuple tuple = (RowwiseTuple) top.getChild(1);
      int n = tuple.nChildren();
      assertEquals(n,10);

      RowwiseTuple tuple2 = (RowwiseTuple) top.getChild(2);
      assertEquals(tuple2.nChildren(),8);
      assertEquals(tuple.getRows(),5888);
      
      assertEquals(mean(tuple,0),8915629,1);
      assertEquals(mean(tuple,1),10.38145,0.00001);
      assertEquals(mean(tuple,2),0,.00001);
      assertEquals(mean(tuple,3),.0021680,0.0000001);

      RowwiseTuple tuple3 = (RowwiseTuple) top.getChild(3);
      assertEquals(tuple3.nChildren(),3);
      assertEquals(tuple3.getRows(),1000);
      assertEquals(mean(tuple3,0),-1.5054,0.0001);
      assertEquals(mean(tuple3,1),-2.4667,0.0001);
      assertEquals(mean(tuple3,2),71.975,.001);

//      String testDataDir = "C:\\Documents and Settings\\Tony Johnson\\My Documents\\My Data\\test";
//      File f = new File(testDataDir,"pawdemo.hbook");
//      HbookFile hbook2 = new HbookFile(f);
//      OneDHistogram h100 =  (OneDHistogram) hbook2.getTopLevelDirectory().getChild("MULTIPLICITY - WEIGHTED");
//      assertEquals(h100.getXMean(),10.079,0.001);
//
//      assertEquals(mean(tuple,1),10.38145,0.00001);
//      assertEquals(mean(tuple,2),0,.00001);
//      assertEquals(mean(tuple,3),.0021680,0.0000001);
//      
//      hbook2.close();
   }
   
   private double mean(RowwiseTuple tuple, int col)
   {
      double mean = 0;
      int r = tuple.getRows();
      for (int i=0; i<r; i++)
      {
         tuple.setCurrentRow(i+1);
         mean += ((RowwiseTupleColumn) tuple.getChild(col)).getDouble();
      }     
      return mean/r;
   }
   
   protected void tearDown() throws Exception
   {
      hbook.close();
   }
   
   protected void setUp() throws Exception
   {
      String testDataDir = System.getProperty("org.freehep.testData");
      File f = new File(testDataDir,"rowwise.hbook");
      hbook = new HbookFile(f);
   }   
}
