Print

Print


Commit in lcsim-cal-calib/src/org/lcsim/cal/calib on MAIN
MipSamplingFractionAnalysisDriver.java+88added 1.1
Simple Driver to plot MIP signals from single muons.
Resulting plots need to be fit by hand to determine most-probable-value (MPV) and sigma.

lcsim-cal-calib/src/org/lcsim/cal/calib
MipSamplingFractionAnalysisDriver.java added at 1.1
diff -N MipSamplingFractionAnalysisDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MipSamplingFractionAnalysisDriver.java	10 Jun 2010 18:14:43 -0000	1.1
@@ -0,0 +1,88 @@
+package org.lcsim.cal.calib;
+
+import java.util.List;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.SimCalorimeterHit;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author Norman A. Graf
+ *
+ * @version $Id: MipSamplingFractionAnalysisDriver.java,v 1.1 2010/06/10 18:14:43 ngraf Exp $
+ */
+public class MipSamplingFractionAnalysisDriver extends Driver
+{
+
+    private boolean _debug = false;
+    private AIDA aida = AIDA.defaultInstance();
+
+    @Override
+    protected void process(EventHeader event)
+    {
+        List<MCParticle> mcparts = event.getMCParticles();
+        // for some reason, the MC hierarchy is inverted...
+        MCParticle mcpart = mcparts.get(mcparts.size() - 1);
+        String particleType = mcpart.getType().getName();
+        log(particleType);
+        if (particleType.equals("mu+") && mcpart.getSimulatorStatus().hasLeftDetector())
+        {
+            List<SimCalorimeterHit> ecalhits = event.get(SimCalorimeterHit.class, "EcalBarrelHits");
+            log("There are " + ecalhits.size() + " EcalBarrelHits");
+            for (SimCalorimeterHit hit : ecalhits)
+            {
+                long cellId = hit.getCellID();
+                IDDecoder d = hit.getIDDecoder();
+                d.setID(cellId);
+                int layer = d.getLayer();
+                int slice = d.getValue("slice");
+                log(layer + " " + slice);
+                //aida.cloud1D("ECal layer" + layer + "_slice" + slice + " energy").fill(hit.getRawEnergy());
+                if (layer > 0 && layer < 21)
+                {
+                    if (slice == 0)
+                        aida.histogram1D("ECal thin layer absorber energy",100,0.,0.05).fill(hit.getRawEnergy());
+                    if (slice == 2)
+                        aida.histogram1D("ECal thin layer silicon energy",100,0.,0.001).fill(hit.getRawEnergy());
+                }
+                if (layer > 20)
+                {
+                    if (slice == 0)
+                        aida.histogram1D("ECal thick layer absorber energy",100,0.,0.05).fill(hit.getRawEnergy());
+                    if (slice == 2)
+                        aida.histogram1D("ECal thick layer silicon energy",100,0.,0.001).fill(hit.getRawEnergy());
+                }
+
+            }
+            List<SimCalorimeterHit> hcalhits = event.get(SimCalorimeterHit.class, "HcalBarrelHits");
+            log("There are " + hcalhits.size() + " HcalBarrelHits");
+            for (SimCalorimeterHit hit : hcalhits)
+            {
+                long cellId = hit.getCellID();
+                IDDecoder d = hit.getIDDecoder();
+                d.setID(cellId);
+                int layer = d.getLayer();
+                int slice = d.getValue("slice");
+                log(layer + " " + slice);
+                //aida.cloud1D("HCal layer" + layer + "_slice" + slice + " energy").fill(hit.getRawEnergy());
+                if(slice == 0) aida.histogram1D("HCal absorber energy",100,0.,0.05).fill(hit.getRawEnergy());
+                if(slice == 1) aida.histogram1D("HCal scintillator energy",100,0.,0.004).fill(hit.getRawEnergy());
+            }
+        }
+    }
+
+    @Override
+    protected void endOfData()
+    {
+        //TODO automate fits...
+    }
+
+    private void log(String s)
+    {
+        if (_debug)
+            System.out.println(s);
+    }
+}
CVSspam 0.2.8