Index: fact/tools/pyscripts/sandbox/kraehenb/CalFitsTest.py
===================================================================
--- fact/tools/pyscripts/sandbox/kraehenb/CalFitsTest.py	(revision 13397)
+++ fact/tools/pyscripts/sandbox/kraehenb/CalFitsTest.py	(revision 13400)
@@ -1,40 +1,50 @@
+#!/usr/bin/python -tt
+# ********************************
+# Test script for the CalFits class
+# 
+# written by Thomas Kraehenbuehl, ETH Zurich
+# tpk@phys.ethz.ch, +41 44 633 3973
+# April 2012
+# ********************************
+
 datafilename = '/fact/raw/2012/04/17/20120417_004.fits.gz'
 calibfilename = '/fact/raw/2012/04/17/20120417_003.drs.fits.gz'
-#data_filename =  '/fact/raw/2012/01/31/20120131_018.fits.gz'
-#calib_filename = '/fact/raw/2012/01/31/20120131_014.drs.fits.gz'
 
-DoCalFits=True
+from ROOT import gSystem
+gSystem.Load("calfits_h.so")
+from ROOT import *
+print "Testing object creation: "
+caltest = CalFits(datafilename,calibfilename)
 
-if DoCalFits:
-	from ROOT import gSystem
-	gSystem.Load("CalFits_h.so")
-	from ROOT import *
-	print "Testing object creation: "
-	caltest = CalFits(datafilename,calibfilename)
-	print "Testing the python access to the function: "
-	print caltest.data_npix
+print "Common variables:"
+print "ROI: ", caltest.nroi
+print "#Pix: ", caltest.npix
+print "Number of events: ", caltest.nevents
+print
 
-	print "Calibfile ROI: ", caltest.calib_nroi
-	print "BaselineMean: ", caltest.calibfile.GetN("BaselineMean")
-	print "GainMean: ", caltest.calibfile.GetN("GainMean")
-	print "TriggerOffsetMean: ", caltest.calibfile.GetN("TriggerOffsetMean")
-	print "Datafile ROI: ", caltest.data_nroi
-	print "Data: ", caltest.datafile.GetN("Data")
-	print "StartCellData: ", caltest.datafile.GetN("StartCellData")
-	print "Direct datafile access: ", caltest.datafile.GetN("StartCellData")
+print "Information per Event:"
+caltest.GetCalEvent()
+print "Event ID: ", caltest.event_id
+print "Trigger type: ", caltest.event_triggertype
+print "Uncalibrated data: ", caltest.event_data
+print "Calibrated data: ", caltest.event_caldata
+print "Board times: ", caltest.event_boardtimes
+print "Trigger offsets: ", caltest.event_offset
+print
 
-#	print caltest.GetCalEvent()
-	for i in range(1000):
-		caltest.GetCalEvent()
-		print caltest.data_eventid
-	print 
+print "Examples of other information"
+print "Calibfile ROI: ", caltest.calib_nroi
+print "Column size BaselineMean: ", caltest.calibfile.GetN("BaselineMean")
+print "Datafile ROI: ", caltest.data_nroi
+print "Data: ", caltest.datafile.GetN("Data")
+print "StartCellData: ", caltest.datafile.GetN("StartCellData")
+print "Direct datafile access: ", caltest.datafile.GetN("StartCellData")
+print
+print "Columns of the datafile: "
+caltest.datafile.PrintColumns()
 
-	del caltest
+while caltest.GetCalEvent():
+    print caltest.event_id, caltest.event_triggertype, caltest.event_caldata[0]
+print
 
-else:
-	from pyfact import RawData
-	pyfacttest = RawData(datafilename, calibfilename, return_dict = True)
-	for i,event in enumerate(pyfacttest):
-		if i>0:
-			break
-		print event['acal_data'][0][0:5]
+del caltest
Index: fact/tools/pyscripts/sandbox/kraehenb/calfits.h
===================================================================
--- fact/tools/pyscripts/sandbox/kraehenb/calfits.h	(revision 13397)
+++ fact/tools/pyscripts/sandbox/kraehenb/calfits.h	(revision 13400)
@@ -11,18 +11,41 @@
 //********************************
 //
-// Compilation:
-// ...
+// Compilation (root in pyfact directory)
+// root [0] gSystem->Load("/usr/lib64/libz.so");
+// root [1] .L pyfits.h++
+// root [2] .L ../sandbox/kraehenb/calfits.h++
 //
 // Usage in Python:
-// ...handles etc...
+// See CalFitsTest.py
 //
 //********************************
 
-//ToDo: Code aufräumen, ToDo's abarbeiten, alle Event-Parameter zugänglich, shared library creation debuggen
+//ToDo: alle Event-Parameter zugänglich, shared library creation debuggen
+
+#ifndef CALFITS_H
+#define CALFITS_H
 
 #include <cstdio>
+#include <string>
+
+#ifndef __MARS__
 #include <vector>
-#include <string>
-#include "pyfits.h"
+#include <iomanip>
+#include <iostream>
+#define gLog cerr
+#define ___err___ ""
+#define ___all___ ""
+#else
+#include "MLog.h"
+#include "MLogManip.h"
+#define ___err___ err
+#define ___all___ all
+#endif
+
+#ifdef __EXCEPTIONS
+#include <stdexcept>
+#endif
+
+#include "../../pyfact/pyfits.h"
 
 class CalFits
@@ -34,12 +57,7 @@
 	fits datafile, calibfile; //Class name should be PyFits or better FactPyFits...
 	
-	//Calibration variables
+	//Basic file parameters
 	UInt_t calib_nroi, calib_npix;
-	vector<float> calib_basemean;
-	vector<float> calib_gainmean;
-	vector<float> calib_triggeroffsetmean;
-	//ToDo: use arrays of size 1440x1024 (x2 for wrap-arounds) and read all variables into those
-	
-	//Data variables
+	UInt_t calib_blm_size, calib_gm_size, calib_tom_size;
 	UInt_t data_nroi, data_npix, data_ndata;
 	
@@ -47,31 +65,57 @@
 	UInt_t nroi, npix, nevents;
 	
+	//Calibration variables
+	vector<float> calib_baselinemean;
+	vector<float> calib_gainmean;
+	vector<float> calib_triggeroffsetmean;
+	//ToDo: use arrays of size 1440x1024 (x2 for wrap-arounds) and read all variables into those
+	
 	//Event variables
-	UInt_t data_eventid;
-	vector<int16_t> data_data;
-	vector<int16_t> data_offset;
+	UInt_t event_id;
+	UShort_t event_triggertype;
+	vector<int16_t> event_data;
+	vector<int16_t> event_offset;
+	vector<int32_t> event_boardtimes;
+	vector<float> event_caldata; //Vector for calibrated event
 	
-	//Vector for calibrated event
-	vector<float> calevent;
-	
-	CalFits(const string &datafilename, const string &calibfilename) //Construct with two filenames
+	CalFits(const string &datafilename, const string &calibfilename) //Constructor with two filenames
 		: datafile(datafilename),
 			calibfile(calibfilename)
 	{
 		//Read basic parameters of the two files
-		std::cout << "...Reading basic file parameters..." << std::endl;
+//		std::cout << "...Reading basic file parameters..." << std::endl;
 		calib_nroi = calibfile.GetUInt("NROI");
 		calib_npix = calibfile.GetUInt("NPIX");
 		data_nroi = datafile.GetUInt("NROI");
 		data_npix = datafile.GetUInt("NPIX");
-		nevents = datafile.GetNumRows();
 		data_ndata = datafile.GetN("Data");
 		
-		//ToDo: check nroi*npix = ndata, calib_nroi=data_nroi, calib_npix=data_npix
+		calib_blm_size = calibfile.GetN("BaselineMean")/calib_npix;
+		calib_gm_size = calibfile.GetN("GainMean")/calib_npix;
+		calib_tom_size = calibfile.GetN("TriggerOffsetMean")/calib_npix;
+		
+//		std::cout << "Column sizes: " << calib_blm_size << " " << calib_gm_size << " " << calib_tom_size << std::endl;
+		
+		//Define the common variables
+		if((calib_nroi==data_nroi)&&(calib_npix==data_npix)&&(data_nroi*data_npix==data_ndata)&&(calib_blm_size==calib_gm_size)&&(calib_tom_size==calib_nroi)) {
+			nroi = data_nroi;
+			npix = data_npix;
+		}
+		else {
+			ostringstream str;
+			str << "Data/calib file error: NROI mismatch, NPIX mismatch, data column size wrong or calib columns mismatch.";
+#ifdef __EXCEPTIONS
+			throw runtime_error(str.str());
+#else
+			gLog << ___err___ << "ERROR - " << str.str() << endl;
+			return;
+#endif
+		}
+		nevents = datafile.GetNumRows();
 		
 		//Read the calibration data
-		std::cout << "...Reading calibration data..." << std::endl;
-		calib_basemean.resize(calibfile.GetN("BaselineMean"),0);
-		calibfile.SetVecAddress("BaselineMean", calib_basemean);
+//		std::cout << "...Reading calibration data..." << std::endl;
+		calib_baselinemean.resize(calibfile.GetN("BaselineMean"),0);
+		calibfile.SetVecAddress("BaselineMean", calib_baselinemean);
 		calib_gainmean.resize(calibfile.GetN("GainMean"),0);
 		calibfile.SetVecAddress("GainMean", calib_gainmean);
@@ -80,20 +124,28 @@
 		calibfile.GetRow(0);
 		
-		//Set the data vectors
-		std::cout << "...Setting datafile pointers..." << std::endl;
-		datafile.SetRefAddress("EventNum", data_eventid);
-		data_data.resize(data_ndata,0);
-		datafile.SetVecAddress("Data", data_data);
-		calevent.resize(data_ndata,0);
-		data_offset.resize(datafile.GetN("StartCellData"),0);
-		datafile.SetVecAddress("StartCellData", data_offset);
+		//Get the column sizes per pixel
+		//...
+		
+		//Set the event pointers
+//		std::cout << "...Setting event pointers..." << std::endl;
+		datafile.SetRefAddress("EventNum", event_id);
+		datafile.SetRefAddress("TriggerType", event_triggertype);
+		
+		event_data.resize(data_ndata,0);
+		event_caldata.resize(data_ndata,0);
+		datafile.SetVecAddress("Data", event_data);
+		
+		event_offset.resize(datafile.GetN("StartCellData"),0);
+		datafile.SetVecAddress("StartCellData", event_offset);
+		
+		event_boardtimes.resize(datafile.GetN("BoardTime"),0);
+		datafile.SetVecAddress("BoardTime", event_boardtimes);
 	}
 	
-	//double* GetCalEvent() { }
-	int GetCalEvent()
+	bool GetCalEvent()
 	{
 		if(datafile.GetNextRow() == false) {
-			std::cout << "Last event reached..." << std::endl;
-			//ToDo: raise exception or stop or whatever GetNextRow does
+//			std::cout << "Last event reached..." << std::endl;
+			return false;
 		}
 		else {
@@ -101,12 +153,12 @@
 			for(UInt_t pixel=0;pixel<data_npix;pixel++) {
 				for(UInt_t slice=0;slice<data_nroi;slice++) {
-					//ToDo: replace 1024 by column size/npix
-					drs_calib_offset = (slice+data_offset[pixel])%1024;
-					calevent[pixel*data_nroi+slice] = float((data_data[pixel*data_nroi+slice]*2000./4096.-calib_basemean[pixel*1024+drs_calib_offset]-calib_triggeroffsetmean[pixel*calib_nroi+slice])/calib_gainmean[pixel*1024+drs_calib_offset]*1907.35);
-					//Note: data_nroi=calib_nroi
+					drs_calib_offset = (slice+event_offset[pixel])%calib_blm_size;
+					event_caldata[pixel*data_nroi+slice] = float((event_data[pixel*data_nroi+slice]*2000./4096.-calib_baselinemean[pixel*calib_blm_size+drs_calib_offset]-calib_triggeroffsetmean[pixel*data_nroi+slice])/calib_gainmean[pixel*calib_blm_size+drs_calib_offset]*1907.35);
+					//Note: data_nroi=calib_nroi, calib_blm_size=calib_gm_size
 				}
 			}
 		}
-		return 0;
+		return true;
 	}
 };
+#endif
