lcsim-contrib/src/main/java/org/lcsim/contrib/Cassell/recon
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
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++;
+ }
+}