lcsim-contrib/src/main/java/org/lcsim/contrib/jeremym
diff -N HitTimeAnalDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HitTimeAnalDriver.java 8 Aug 2011 22:32:26 -0000 1.1
@@ -0,0 +1,97 @@
+package org.lcsim.contrib.jeremym;
+
+import hep.aida.ICloud1D;
+import hep.aida.IHistogram1D;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimCalorimeterHit;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+public class HitTimeAnalDriver extends Driver
+{
+ String calColl = "HcalBarrelHits";
+ AIDA aida = AIDA.defaultInstance();
+
+ boolean singleHitPlots = true;
+
+ ICloud1D timePlot;
+ ICloud1D contribCountPlot;
+ ICloud1D contribTimePlot;
+ IHistogram1D promptContribTimePlot;
+
+ public void setCalCollectionName(String calColl)
+ {
+ this.calColl = calColl;
+ }
+
+ public void setSingleHitPlots(boolean singleHitPlots)
+ {
+ this.singleHitPlots = singleHitPlots;
+ }
+
+ public void startOfData()
+ {
+ timePlot = aida.cloud1D(calColl + " : Time");
+ contribCountPlot = aida.cloud1D(calColl + " : Contrib Count");
+ contribTimePlot = aida.cloud1D(calColl + " : Time Contribs");
+ promptContribTimePlot = aida.histogram1D(calColl + " : Time Contribs < 200 ns", 600, 0., 200.);
+ }
+
+ static class TimeComparator implements Comparator<CalorimeterHit>
+ {
+ public int compare(CalorimeterHit hit1, CalorimeterHit hit2)
+ {
+ double t1 = hit1.getTime();
+ double t2 = hit2.getTime();
+ if (t1 < t2)
+ {
+ return -1;
+ }
+ else if (t1 == t2)
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+ }
+
+ TimeComparator tcompare = new TimeComparator();
+
+ public void process(EventHeader event)
+ {
+ List<CalorimeterHit> hits = event.get(CalorimeterHit.class, calColl);
+ Collections.sort(hits, tcompare);
+ for (CalorimeterHit hit : hits)
+ {
+ timePlot.fill(hit.getTime());
+ }
+
+ for (int i=0, n=hits.size(); i<n; i++)
+ {
+ SimCalorimeterHit hit = (SimCalorimeterHit)hits.get(i);
+ int contribCount = hit.getMCParticleCount();
+ contribCountPlot.fill(contribCount);
+ for (int j=0; j<contribCount; j++)
+ {
+ promptContribTimePlot.fill(hit.getContributedTime(j)); // Hit contribs < 200 ns.
+ contribTimePlot.fill(hit.getContributedTime(j));
+
+ // Single hit plots.
+ if (singleHitPlots)
+ {
+ aida.cloud1D(calColl + " : Hit " + i + " Contrib Times ").fill(hit.getContributedTime(j));
+ aida.cloud1D(calColl + " : Hit " + i + " Contrib Times with PDG " + hit.getPDG(j)).fill(hit.getContributedTime(j));
+ }
+ }
+ }
+ }
+}