lcsim-contrib/src/main/java/org/lcsim/contrib/SteveMagill
diff -N MCContribHitDriver.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ MCContribHitDriver.java 12 Aug 2009 18:22:29 -0000 1.1
@@ -0,0 +1,110 @@
+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.event.CalorimeterHit;
+import org.lcsim.event.SimCalorimeterHit;
+// import org.lcsim.geometry.util.CalorimeterIDDecoder;
+import org.lcsim.util.hitmap.HitMap;
+
+/**
+ * Diagnostic routine to calculate purities and efficiencies per particle and event
+ * for charged particles
+ */
+
+public class MCContribHitDriver extends Driver
+{
+ public MCContribHitDriver() {
+ }
+
+ private String[] _scnames;
+ private String[] _chnames;
+ private String _sscout;
+ private String _mscout;
+ private String _schout;
+ private String _mchout;
+ private AIDA aida = AIDA.defaultInstance();
+
+ public void process(EventHeader event)
+ {
+ HitMap singhitmap = new HitMap();
+ HitMap multihitmap = new HitMap();
+ // check scintillator colections here
+ for (int i=0; i<_scnames.length; i++)
+ {
+ List<CalorimeterHit> schits = event.get(CalorimeterHit.class,_scnames[i]);
+// CalorimeterIDDecoder caldecoder = (CalorimeterIDDecoder) event.getMetaData(schits).getIDDecoder();
+ for (CalorimeterHit schit : schits)
+ {
+ Long hitid = schit.getCellID();
+ SimCalorimeterHit simhit = (SimCalorimeterHit) schit;
+ int nmcp = simhit.getMCParticleCount();
+ if(nmcp==1) singhitmap.put(hitid,schit);
+ if(nmcp>1) multihitmap.put(hitid,schit);
+ }
+ }
+ List<CalorimeterHit> singhits = new Vector<CalorimeterHit>();
+ singhits.addAll(singhitmap.values());
+ event.put(_sscout,singhits);
+ List<CalorimeterHit> multihits = new Vector<CalorimeterHit>();
+ multihits.addAll(multihitmap.values());
+ event.put(_mscout,multihits);
+
+ // same for cherenkov
+ HitMap singchhitmap = new HitMap();
+ HitMap multichhitmap = new HitMap();
+ for (int i=0; i<_chnames.length; i++)
+ {
+ List<CalorimeterHit> chhits = event.get(CalorimeterHit.class,_chnames[i]);
+// CalorimeterIDDecoder caldecoder = (CalorimeterIDDecoder) event.getMetaData(chhits).getIDDecoder();
+
+ for (CalorimeterHit chhit : chhits)
+ {
+ Long hitid = chhit.getCellID();
+ SimCalorimeterHit simhit = (SimCalorimeterHit) chhit;
+ int nmcp = simhit.getMCParticleCount();
+ if(nmcp==1) singchhitmap.put(hitid,chhit);
+ if(nmcp>1) multichhitmap.put(hitid,chhit);
+ }
+ }
+ List<CalorimeterHit> singchhits = new Vector<CalorimeterHit>();
+ singchhits.addAll(singchhitmap.values());
+ event.put(_schout,singchhits);
+ List<CalorimeterHit> multichhits = new Vector<CalorimeterHit>();
+ multichhits.addAll(multihitmap.values());
+ event.put(_mchout,multichhits);
+ }
+
+ public void setScHitNames(String[] scnames)
+ {
+ _scnames = scnames;
+ }
+
+ public void setChHitNames(String[] chnames)
+ {
+ _chnames = chnames;
+ }
+
+ public void setOutSingScHitName(String sscout)
+ {
+ _sscout = sscout;
+ }
+
+ public void setOutMultiScHitName(String mscout)
+ {
+ _mscout = mscout;
+ }
+
+ public void setOutSingChHitName(String schout)
+ {
+ _schout = schout;
+ }
+
+ public void setOutMultiChHitName(String mchout)
+ {
+ _mchout = mchout;
+ }
+
+}