import java.util.*;
import java.io.*;
 
import hep.lcd.util.driver.AbstractProcessor;
import hep.lcd.util.driver.Driver; 
import hep.lcd.io.jas.sio.SIOEventSource;
import hep.lcd.event.LCDEvent;
import hep.lcd.mc.smear.SmearDriver;
import hep.lcd.recon.tracking.TrackReco;

import hep.analysis.Job;

/** 
*
* Sample job from which to start analyses aimed at "Energy Flow"
* event reconstruction. 
*
* Can be run within JAS or as a standalone job producing a histogram file
* (EnergyFlowRecoDriver.javahist, by default) to be analyzed within JAS.  
*
*@author Norman A. Graf (Norman.Graf@slac.stanford.edu)
*@version 1.0
*2002-05-21
*
*/
final public class EnergyFlowRecoDriver extends Driver
{
	public EnergyFlowRecoDriver()
	{
		// Smear Tracker hits with resolution
		add(new SmearDriver());
		// Find tracks
		add(new TrackReco()); 
		// analyze events
		add(new TrackCellAssociationAnalyzer());
	}

	public static void usage()
	{
		StringBuffer sb = new StringBuffer("\nThis is EnergyFlowRecoDriver: \nA Java program to perform energy flow analyses");
		sb.append("\n\n usage: \n \n > java EnergyFlowRecoDriver filename nevents jobname\n");
		sb.append("\n filename: a valid filename in sio format");
		sb.append("\n nevents:  number of events to analyze [9999]");
		sb.append("\n jobname:  name of output javahist file [EnergyFlowRecoDriver]");
		System.out.println(sb.toString());
	}

	public static void main(String[] args)
	{
		String filename = "C:/lcdsim/data/SD/single/partRes-muminus-010301_SD_20.sio";
		int nevents = 9999;
		String jobname = "EnergyFlowRecoDriver";
		if (args.length>0)
		{
			if(args[0].equals("-h") )
			{
				usage();
				System.exit(0);
			}
			filename = args[0];
			if(args.length>1) nevents = Integer.parseInt(args[1]);
			if(args.length>2) jobname = args[2];
		}
		try
		{
			Job job = new Job(jobname);
			// Check that the file to read actually exists
			File file = new File(filename);
			if (file.exists())
			{
				job.setEventSource(new SIOEventSource(filename));
				System.out.println("Analyzing: \n "+nevents +" events \n from "+filename+"\n");
				Driver d = new EnergyFlowRecoDriver();
				job.addEventAnalyzer(d);
				job.go(nevents);
				d.afterLastEvent();
				job.save();
			}
			else
			{
				System.out.println("Requested file ( "+filename+" ) does not exist!");
				usage();
			}
		}
		catch (Exception x) // Yes, this should be handled better.
		{ 
			x.printStackTrace(); 
		}
	}	
}