import hep.analysis.*;
import hep.physics.*;
import hep.lcd.event.*;
import hep.lcd.mc.fast.*;
import hep.lcd.util.driver.*;
import hep.lcd.geometry.*;
import java.util.*;

final public class CheckFast extends Driver
{
   public CheckFast() throws java.io.IOException
   {
	   String detector = "sdmar01";
	   Detector.setCurrentDetector(new Detector(detector));
       add(new MCFast());
       add(new ResCheck(detector)); // user analysis routine
   }
}
class ResCheck extends AbstractProcessor
{
   private String folder;
   ResCheck(String folder)
   {
	  // create some special histograms
	  this.folder = folder;
	  HistogramFolder.setDefaultFolder(folder);

      new ProfilePlot("pdiff vs ptot");
      new ProfilePlot("pdiff vs costheta");
   }
   public void process(LCDEvent event)
   {
	  HistogramFolder.setDefaultFolder(folder);
      // Loop over tracks
      Enumeration e = event.getTrackList().getTracks();
      while (e.hasMoreElements())
      {
         Track t = (Track) e.nextElement();
         double ptot = Math.sqrt(t.getMomentumX()*t.getMomentumX() +
                                 t.getMomentumY()*t.getMomentumY() +
                                 t.getMomentumZ()*t.getMomentumZ());
         // Get associated MC particle
         MCParticle mc = t.getMCParticle();
         double mcptot = Math.sqrt(mc.getPX()*mc.getPX() +
                                   mc.getPY()*mc.getPY() +
                                   mc.getPZ()*mc.getPZ());
         double cosTheta = mc.getPZ()/mcptot;
         double pdiff = mcptot - ptot;
			
         // Make some plots
         histogram("pdiff").fill(pdiff);
         histogram("ptot").fill(ptot);
         histogram("mcptot").fill(mcptot);
         histogram("pdiff vs ptot").fillW(ptot,pdiff);
         histogram("pdiff vs costheta").fillW(cosTheta,pdiff);
      }
   }
}