lcsim/src/org/lcsim/recon/postrecon/leptonID/electron
diff -u -r1.2 -r1.3
--- IsolatedHighPElectronIdentifier.java 28 May 2009 13:58:42 -0000 1.2
+++ IsolatedHighPElectronIdentifier.java 17 Oct 2012 06:36:23 -0000 1.3
@@ -7,15 +7,21 @@
import org.lcsim.event.EventHeader;
import org.lcsim.event.MCParticle;
import org.lcsim.event.Track;
+import org.lcsim.event.TrackState;
import org.lcsim.event.Cluster;
+import org.lcsim.event.CalorimeterHit;
import org.lcsim.event.ReconstructedParticle;
import org.lcsim.event.base.BaseReconstructedParticle;
+import org.lcsim.util.lcio.LCIOConstants;
+import org.lcsim.geometry.*;
import hep.physics.vec.*;
import java.util.*;
import java.io.IOException;
public class IsolatedHighPElectronIdentifier extends Driver
{
String rpl = "ReconstructedParticles";
+ protected String inputPfoCollection = "PandoraPFOCollection";
+
double conect;
double maxE;
double minE;
@@ -38,14 +44,22 @@
public void setConeCosTheta(double x){conect = x;}
public void setMaxE(double x){maxE = x;}
public void setMinE(double x){minE = x;}
+
+
+ // List<ReconstructedParticle> rp = new ArrayList<ReconstructedParticle>();
+
protected void process(EventHeader event)
{
//
// Match Tracks with Recon Particles
//
+
List<Track> allTracks = event.get(Track.class,"Tracks");
List<Track> unusedTracks = new ArrayList<Track>(allTracks);
- List<ReconstructedParticle> rp = event.get(ReconstructedParticle.class,rpl);
+ // List<ReconstructedParticle> rp = event.get(ReconstructedParticle.class,rpl);
+ List<ReconstructedParticle> rp = new ArrayList<ReconstructedParticle>();
+ rp = event.get(ReconstructedParticle.class, inputPfoCollection);
+
Map<Track,ReconstructedParticle> ttorp = new HashMap<Track,ReconstructedParticle>();
Map<Cluster,ReconstructedParticle> ctorp = new HashMap<Cluster,ReconstructedParticle>();
for(ReconstructedParticle p:rp)
@@ -65,17 +79,19 @@
// Map non-muon tracks > minE GeV to clusters within a 25 degree cone
//
List<Track> xtrae = new ArrayList<Track>();
- List<Cluster> cl = event.get(Cluster.class,"Clusters");
+ // List<Cluster> cl = event.get(Cluster.class,"Clusters");
+ List<Cluster> cl = event.get(Cluster.class,"ReconClusters");
Map<Track,List<Cluster>> ttocll = new HashMap<Track,List<Cluster>>();
- for(Track t:allTracks)
+ for(Track trck:allTracks)
{
+ TrackState t = trck.getTrackStates().get(0);
boolean eid = false;
Hep3Vector tp = new BasicHep3Vector(t.getMomentum());
if(tp.magnitude() < minE)continue;
if(tp.magnitude() > maxE)continue;
- if(ttorp.containsKey(t))
+ if(ttorp.containsKey(trck))
{
- double mass = ttorp.get(t).getMass();
+ double mass = ttorp.get(trck).getMass();
if( Math.abs(mass - .105) < .005)continue;
if( Math.abs(mass - .0005) < .0001)eid = true;
}
@@ -85,7 +101,20 @@
{
Hep3Vector cp = new BasicHep3Vector(c.getPosition());
double ct = (tp.x()*cp.x()+tp.y()*cp.y()+tp.z()*cp.z())/tp.magnitude()/cp.magnitude();
- double hec = c.getSubdetectorEnergies()[3] + c.getSubdetectorEnergies()[7];
+
+ double hec = 0.0;
+
+ List<CalorimeterHit> calhitsList = c.getCalorimeterHits();
+ for (CalorimeterHit pfochit : calhitsList) {
+ IDDecoder _decoder = pfochit.getIDDecoder();
+ String dname = _decoder.getSubdetector().getName();
+ // System.out.println(" name of subdetector for this hit " + dname);
+ if (dname.equals("HcalBarrel") || dname.equals("HcalEndcap")) {
+ hec += pfochit.getCorrectedEnergy();
+ // System.out.println(" HCAL energy contribution = "+pfochit.getCorrectedEnergy());
+ }
+ }
+
if(ct > conect)
{
tcl.add(c);
@@ -95,9 +124,9 @@
double f = HcalE/tp.magnitude();
if(!eid)
{
- if(f < .04)xtrae.add(t);
+ if(f < 0.04)xtrae.add(trck); // .04
}
- ttocll.put(t,tcl);
+ ttocll.put(trck,tcl);
}
if(xtrae.size() < 1)return;
//
@@ -173,12 +202,16 @@
}
}
}
+ System.out.println("Removing and Adding Reconstructed Particles");
+
for(ReconstructedParticle p:removelist)
{
+ System.out.println("removing particle; mass = " + p.getMass());
rp.remove(p);
}
for(ReconstructedParticle p:addlist)
{
+ System.out.println("adding particle; mass = " + p.getMass());
rp.add(p);
}
}
@@ -202,17 +235,20 @@
}
return p;
}
- public BaseReconstructedParticle makeElectronBRP(Track t)
+ public BaseReconstructedParticle makeElectronBRP(Track trck)
{
+ TrackState t = trck.getTrackStates().get(0);
Hep3Vector m = new BasicHep3Vector(t.getMomentum());
double E = Math.sqrt(emass*emass + m.magnitudeSquared());
BaseReconstructedParticle p = new BaseReconstructedParticle(E,m);
p.setMass(emass);
- p.setCharge((double) (t.getCharge()));
+ double tcharge = t.getOmega()/Math.abs(t.getOmega());
+ // p.setCharge((double) (t.getOmega()/Math.abs(t.getOmega)));
+ p.setCharge(tcharge);
p.setReferencePoint(origin);
- if(t.getCharge() > 0.)p.setParticleIdUsed(eppid);
+ if(tcharge > 0.)p.setParticleIdUsed(eppid);
else p.setParticleIdUsed(empid);
- p.addTrack(t);
+ p.addTrack(trck);
return p;
}
}