Print

Print


Commit in lcsim/src/org/lcsim/recon/postrecon/leptonID/electron on MAIN
HighPElectronFinder.java+49-11.1 -> 1.2
Recover lost jetE resolution

lcsim/src/org/lcsim/recon/postrecon/leptonID/electron
HighPElectronFinder.java 1.1 -> 1.2
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);
+                    }
+                }
             }
         }
         
CVSspam 0.2.8