Commit in lcsim-contrib/src/main/java/org/lcsim/contrib/Cassell/recon on MAIN
RemoveHcalModuleNonProjBorderHits.java+61added 1.1
RemoveHcalModuleProjBorderHits.java+51added 1.1
+112
2 added files
Artificial hit removal along module borders

lcsim-contrib/src/main/java/org/lcsim/contrib/Cassell/recon
RemoveHcalModuleNonProjBorderHits.java added at 1.1
diff -N RemoveHcalModuleNonProjBorderHits.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ RemoveHcalModuleNonProjBorderHits.java	16 Jun 2010 16:58:37 -0000	1.1
@@ -0,0 +1,61 @@
+package org.lcsim.contrib.Cassell.recon;
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.recon.util.*;
+import org.lcsim.digisim.DigiPackageDriver;
+import org.lcsim.geometry.Calorimeter.CalorimeterType;
+
+public class RemoveHcalModuleNonProjBorderHits extends Driver
+{
+    IDDecoder idd;
+    double support_thickness;
+    double prox;
+    double yref;
+    CalorimeterInformation ci;
+    int ievt;
+    public RemoveHcalModuleNonProjBorderHits(double thickness)
+    {
+       support_thickness = thickness;
+       prox = thickness/2.;
+        add(new CalInfoDriver());
+        add(new DigiPackageDriver());
+       System.out.println("Border removal: initialized to remove hits within "+prox+"mm of HCAL module border");
+       ievt = 0;
+    }
+    protected void process(EventHeader event)
+    {
+       super.process(event);
+       if(ci == null)
+       {
+           ci = CalorimeterInformation.instance();
+           double rmin = ci.getRMin(CalorimeterType.HAD_BARREL);
+           yref = rmin*Math.tan(Math.PI/12.);
+       }
+       List<CalorimeterHit> bl = event.get(CalorimeterHit.class,ci.getDigiCollectionName("HAD_BARREL"));
+       List<CalorimeterHit> rm = new ArrayList<CalorimeterHit>();
+       for(CalorimeterHit h:bl)
+       {
+          double[] pos = h.getPosition();
+          double phi = Math.atan2(pos[1],pos[0]);
+          double R = Math.sqrt(pos[0]*pos[0] + pos[1]*pos[1]);
+          double fphi = phi;
+          while(fphi < -Math.PI/6.)fphi += Math.PI/3.;
+          while(fphi > Math.PI/6.)fphi -= Math.PI/3.;
+          double y = R*Math.sin(fphi);
+          double d1 = y - yref;
+          double d2 = y + yref;
+          if(Math.abs(d1) < prox)rm.add(h);
+          else if(Math.abs(d2) < prox)rm.add(h);
+       }
+       for(CalorimeterHit h:rm)
+       {
+          bl.remove(h);
+       }
+//       event.put("RemovedHcalBarrelHits", rm);
+//       System.out.println("Border removal: "+rm.size()+" hits out of "+nh+" removed from HCAL Barrel in evt "+ievt);
+       ievt++;
+   }
+}

lcsim-contrib/src/main/java/org/lcsim/contrib/Cassell/recon
RemoveHcalModuleProjBorderHits.java added at 1.1
diff -N RemoveHcalModuleProjBorderHits.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ RemoveHcalModuleProjBorderHits.java	16 Jun 2010 16:58:37 -0000	1.1
@@ -0,0 +1,51 @@
+package org.lcsim.contrib.Cassell.recon;
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.geometry.IDDecoder;
+import org.lcsim.recon.util.*;
+import org.lcsim.digisim.DigiPackageDriver;
+
+public class RemoveHcalModuleProjBorderHits extends Driver
+{
+    IDDecoder idd;
+    double support_thickness;
+    double prox;
+    CalorimeterInformation ci;
+    int ievt;
+    public RemoveHcalModuleProjBorderHits(double thickness)
+    {
+       support_thickness = thickness;
+       prox = thickness/2.;
+        add(new CalInfoDriver());
+        add(new DigiPackageDriver());
+       System.out.println("Border removal: initialized to remove hits within "+prox+"mm of HCAL module border");
+       ievt = 0;
+    }
+    protected void process(EventHeader event)
+    {
+       super.process(event);
+       if(ci == null)ci = CalorimeterInformation.instance();
+       List<CalorimeterHit> bl = event.get(CalorimeterHit.class,ci.getDigiCollectionName("HAD_BARREL"));
+       List<CalorimeterHit> rm = new ArrayList<CalorimeterHit>();
+       for(CalorimeterHit h:bl)
+       {
+          double[] pos = h.getPosition();
+          double phi = Math.atan2(pos[1],pos[0]);
+          double R = Math.sqrt(pos[0]*pos[0] + pos[1]*pos[1]);
+          double fphi = phi;
+          if(phi < 0)fphi = phi+Math.PI*2.;
+          fphi = fphi%(Math.PI/6.);
+          double dphi = fphi - Math.PI/12.;
+          double d = R*Math.sin(dphi);
+          if(Math.abs(d) < prox)rm.add(h);
+       }
+       for(CalorimeterHit h:rm)
+       {
+          bl.remove(h);
+       }
+//       System.out.println("Border removal: "+rm.size()+" hits out of "+nh+" removed from HCAL Barrel in evt "+ievt);
+       ievt++;
+   }
+}
CVSspam 0.2.8