lcsim-contrib/src/main/java/org/lcsim/contrib/SteveMagill
diff -N ScinClusCorrDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ScinClusCorrDriver.java 12 Aug 2009 18:32:50 -0000 1.1
@@ -0,0 +1,57 @@
+package org.lcsim.contrib.SteveMagill;
+
+import java.util.*;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.recon.cluster.util.BasicCluster;
+
+/**
+ * Diagnostic routine to calculate purities and efficiencies per particle and event
+ * for charged particles
+ */
+
+public class ScinClusCorrDriver extends Driver
+{
+ public ScinClusCorrDriver() {
+ }
+
+ private String _sclinkmap;
+ private AIDA aida = AIDA.defaultInstance();
+
+ public void process(EventHeader event)
+ {
+ // get map linking cherenkov clusters to scintillator clusters
+ Map<BasicCluster, BasicCluster> ScChmap = (Map<BasicCluster, BasicCluster>) event.get(_sclinkmap);
+
+ // get scintillator clusters and correct
+ double sclusE = 0.;
+ double chclusE = 0.;
+ for (BasicCluster sclus : ScChmap.keySet())
+ {
+ int nhits = sclus.getSize();
+ sclusE += 1.013*sclus.getEnergy();
+ if (nhits>10)
+ {
+ aida.cloud1D("Scintillator Cluster E").fill(sclusE);
+ BasicCluster chclus = ScChmap.get(sclus);
+ chclusE += 8326.*chclus.getEnergy();
+ aida.cloud1D("Cherenkov Cluster E").fill(chclusE);
+ aida.cloud2D("Scint vs Cher Cluster E").fill(chclusE,sclusE);
+ double csrat = chclusE/sclusE;
+// aida.cloud2D("Scin over E vs Cheren over Scin for Cluster").fill(csrat,sclusE/20.);
+// double csclusE = sclusE/(.83-.24*csrat+.29*csrat*csrat);
+ double csclusE = sclusE/(.765-.719*csrat+.794*csrat*csrat);
+ aida.cloud1D("Cher Corrected Scintillator cluster E").fill(csclusE);
+ aida.cloud1D("Size of Cher Corr").fill(sclusE/csclusE);
+ sclus.setEnergy(csclusE); // set energy of cluster to corrected result
+ }
+ }
+ }
+
+ public void setScChMapName(String sclinkmap)
+ {
+ _sclinkmap = sclinkmap;
+ }
+
+}