lcsim/src/org/lcsim/recon/postrecon/leptonID/electron
diff -u -r1.1 -r1.2
--- HighPElectronFinder.java 4 Dec 2008 20:11:58 -0000 1.1
+++ HighPElectronFinder.java 5 Dec 2008 16:41:18 -0000 1.2
@@ -48,6 +48,8 @@
final double[] shapeCut = {300.,2000.,2000.};
final double epDiffCut = 0.3;
final double mElectron;
+ final double mPion;
+ final double mK0l;
boolean modifyRP = true;
int ncnt=0;
int ncnt_in=0;
@@ -61,6 +63,8 @@
public HighPElectronFinder() {
dPPP = ParticlePropertyManager.getParticlePropertyProvider();
mElectron = dPPP.get(11).getMass();
+ mPion = dPPP.get(211).getMass();
+ mK0l = dPPP.get(130).getMass();
System.out.println(" HighPElectronFinder constructor mElectron= "+mElectron);
}
protected void process(EventHeader event) {
@@ -145,12 +149,17 @@
Hep3Vector trackMom = new BasicHep3Vector(track.getMomentum());
Cluster cluster = electronTrackClusterMap.get(track);
List<ReconstructedParticle> removeRP = new ArrayList<ReconstructedParticle>();
+ Cluster extracl = null;
+ Track extratr = null;
for(ReconstructedParticle recoParticle : recoParticles) {
if(recoParticle.getTracks().indexOf(track) >= 0) {
removeRP.add(recoParticle);
+ if(recoParticle.getClusters().indexOf(cluster) >= 0) break;
+ if(recoParticle.getClusters().size() > 0)extracl = recoParticle.getClusters().get(0);
}
- if(recoParticle.getClusters().indexOf(cluster) >= 0) {
+ else if(recoParticle.getClusters().indexOf(cluster) >= 0) {
removeRP.add(recoParticle);
+ if(recoParticle.getCharge() != 0.)extratr = recoParticle.getTracks().get(0);
}
}
for(ReconstructedParticle recoParticle : removeRP) recoParticles.remove(recoParticle);
@@ -162,6 +171,45 @@
electronRP.addTrack(track);
electronRP.addCluster(cluster);
recoParticles.add(electronRP);
+ if(extratr != null) {
+ trackMom = new BasicHep3Vector(extratr.getMomentum());
+ BaseReconstructedParticle pionRP = new BaseReconstructedParticle(mPion);
+ pionRP.set4Vector(new BasicHepLorentzVector(sqrt(pow(mPion,2)+trackMom.magnitudeSquared()),trackMom));
+ pionRP.setCharge(extratr.getCharge());
+ pionRP.setParticleIdUsed(new BaseParticleID(dPPP.get(211*extratr.getCharge())));
+ pionRP.setReferencePoint(new BasicHep3Vector(extratr.getReferencePoint()));
+ pionRP.addTrack(extratr);
+ if(extracl != null) {
+ pionRP.addCluster(extracl);
+ }
+ recoParticles.add(pionRP);
+ }
+ else if(extracl != null) {
+ Hep3Vector pos = new BasicHep3Vector(extracl.getPosition());
+ Hep3Vector dir = VecOp.mult(1./pos.magnitude(),pos);
+ double[] subE = extracl.getSubdetectorEnergies();
+ if( (subE[2]+subE[6])/extracl.getEnergy() > 0.98) {
+ BaseReconstructedParticle photonRP = new BaseReconstructedParticle(0.);
+ photonRP.set4Vector(new BasicHepLorentzVector(extracl.getEnergy(),VecOp.mult(extracl.getEnergy(),dir)));
+ photonRP.setCharge(0.);
+ photonRP.setParticleIdUsed(new BaseParticleID(dPPP.get(22)));
+ photonRP.setReferencePoint(new BasicHep3Vector(0.,0.,0.));
+ photonRP.addCluster(extracl);
+ recoParticles.add(photonRP);
+ }
+ else {
+ BaseReconstructedParticle nhRP = new BaseReconstructedParticle(mK0l);
+ double nhE = extracl.getEnergy();
+ if(nhE < 0.5)nhE = 0.5;
+ double nhpmag = Math.sqrt(nhE*nhE - mK0l*mK0l);
+ nhRP.set4Vector(new BasicHepLorentzVector(nhE,VecOp.mult(nhpmag,dir)));
+ nhRP.setCharge(0.);
+ nhRP.setParticleIdUsed(new BaseParticleID(dPPP.get(130)));
+ nhRP.setReferencePoint(new BasicHep3Vector(0.,0.,0.));
+ nhRP.addCluster(extracl);
+ recoParticles.add(nhRP);
+ }
+ }
}
}