Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/users/phansson on MAIN
TwoTrackAnlysis.java+184-831.6 -> 1.7
Fixed bugs and updated variables for txtfile

hps-java/src/main/java/org/lcsim/hps/users/phansson
TwoTrackAnlysis.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- TwoTrackAnlysis.java	19 Jan 2013 00:55:04 -0000	1.6
+++ TwoTrackAnlysis.java	13 Feb 2013 18:52:10 -0000	1.7
@@ -33,6 +33,8 @@
 import org.lcsim.hps.recon.vertexing.SimpleVertexer;
 import org.lcsim.hps.recon.vertexing.TwoParticleVertexer;
 import org.lcsim.hps.recon.vertexing.TwoTrackVertexer;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D;
 import org.lcsim.recon.tracking.seedtracker.SeedTrack;
 import org.lcsim.util.Driver;
 import org.lcsim.util.aida.AIDA;
@@ -46,6 +48,7 @@
     private FileWriter fileWriter;
     private PrintWriter printWriter;
     private String outputNameTextTuple = "twotrackAnlysisTuple.txt";
+    private String trackCollectionName = "MatchedTracks";
     private boolean doPrintBranchInfoLine = true; //firs tline in text file
     private AIDA aida = AIDA.defaultInstance();
     private int totalEvents=0;
@@ -57,6 +60,8 @@
     private String ecalClusterCollectionName = "EcalClusters";
     private String stereoHitCollectionName = "RotatedHelicalTrackHits";
     private String triggerDecisionCollectionName = "TriggerBank";
+    private String MCParticleCollectionName = "MCParticle";
+    private String _stripClusterCollectionName = "HelicalTrackStrips";
     private boolean _debug;
     private TwoTrackVertexer vertexer = new TwoTrackVertexer();
     private TwoParticleVertexer particleVertexer = new TwoParticleVertexer();
@@ -110,6 +115,10 @@
         hideFrame = hide;
     }
     
+    public void setTrackCollectionName(String name) {
+        trackCollectionName = name;
+    }
+    
 
     
     public TwoTrackAnlysis() {
@@ -137,8 +146,9 @@
     @Override
     public void process(EventHeader event) {
 
-        if(this._debug) System.out.println(this.getClass().getSimpleName() + ": processing event "+totalEvents);
-        
+        //if(this._debug) 
+            System.out.println(this.getClass().getSimpleName() + ": processing event " + totalEvents + " which has event nr " + event.getEventNumber());
+            
         
         
         
@@ -156,40 +166,75 @@
         
         
         List<Track> tracklist = null;
-        if(event.hasCollection(Track.class,"MatchedTracks")) {        
-            tracklist = event.get(Track.class, "MatchedTracks");
+        if(event.hasCollection(Track.class,trackCollectionName)) {        
+            tracklist = event.get(Track.class, trackCollectionName);
              if(_debug) {
                 System.out.println(this.getClass().getSimpleName() + ": Number of Tracks = " + tracklist.size());
              }
+        } else {
+             if(_debug) {
+                System.out.println(this.getClass().getSimpleName() + ": No track collection in event " + event.getEventNumber());
+             }
+             return;
+        }
+        
+        
+        for(int i=0;i<tracklist.size();++i) {
+            Track trk = tracklist.get(i);
+
+                    System.out.printf("%s: trk momentum (%.3f,%.3f,%.3f) chi2=%.3f\n",this.getClass().getSimpleName(),trk.getTrackStates().get(0).getMomentum()[0],trk.getTrackStates().get(0).getMomentum()[1],trk.getTrackStates().get(0).getMomentum()[2],trk.getChi2());
+                
         }
         
+        if(tracklist.size()!=2) {
+            return;
+        }
+
+        
+        for(int i=0;i<tracklist.size();++i) {
+            Track trk = tracklist.get(i);
+            if(trk.getTrackStates().get(0).getMomentum()[0]<0.1) {
+                if(_debug) {
+                    System.out.println(this.getClass().getSimpleName() + ": trk failed momentum cut " + event.getEventNumber() + "\n" + trk.toString());
+                }
+                return;
+            }
+        }
         
         
         //DEBUG
-        {
-            for(Track trk : tracklist) {
-                SeedTrack st1 = (SeedTrack) trk;
-                HelicalTrackFit helix = st1.getSeedCandidate().getHelix();
-                for(TrackerHit hit: trk.getTrackerHits()) {
-                    HelicalTrackHit hth = (HelicalTrackHit) hit;
-                    Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hth, helix, true);
-                    //DEBUG histos
-                    if(hth.Layer()==1) {
+        //if(_debug) {
+            {
+        
+                if(_debug) {
+                    System.out.println(this.getClass().getSimpleName() + ": fill some debug hists for event " + event.getEventNumber());
+                }
+                for(int i=0;i<tracklist.size();++i) {
+                    Track trk = tracklist.get(i);
+                    SeedTrack st1 = (SeedTrack) trk;
+                    HelicalTrackFit helix = st1.getSeedCandidate().getHelix();
+                    HashMap<Integer,HelicalTrackHit> hits = this.getHitMap(trk.getTrackerHits(),helix);
+                    if(i==0) {
+                        Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hits.get(1), helix, true);  
                         _trk1_res1_z_all.fill(res.get("resz"));
                         _trk1_res1_y_all.fill(res.get("resy"));
-                    }
-                    if(hth.Layer()==3) {
+                        res = TrackUtils.calculateTrackHitResidual(hits.get(3), helix, true);  
                         _trk1_res2_z_all.fill(res.get("resz"));
                         _trk1_res2_y_all.fill(res.get("resy"));
                     }
+                    if(i==1) {
+                        Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hits.get(1), helix, true);  
+                        _trk2_res1_z_all.fill(res.get("resz"));
+                        _trk2_res1_y_all.fill(res.get("resy"));
+                        res = TrackUtils.calculateTrackHitResidual(hits.get(3), helix, true);  
+                        _trk2_res2_z_all.fill(res.get("resz"));
+                        _trk2_res2_y_all.fill(res.get("resy"));
+                    }
                 }
             }
-        }
+        //}
         
         
-        if(tracklist.size()!=2) {
-            return;
-        }
 
         
         Track trk1 = tracklist.get(0);
@@ -205,20 +250,31 @@
             return;
         }
         
+        if(vtxPos.x()>50.) {
+            System.out.printf("%s: vtxPos_x = %.3f for event %d\n",this.getClass().getSimpleName(),vtxPos.x(),event.getEventNumber());
+        }
         
-        
+
+        if(!event.hasCollection(HPSEcalCluster.class, ecalClusterCollectionName)) {
+            if(_debug) {
+                System.out.println(this.getClass().getSimpleName() + ": event doesn't have a ecal cluster collection ");
+            }
+        }
         
         
         List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName); 
 
+        if(_debug) {
+            System.out.println(this.getClass().getSimpleName() + ": found " + clusters.size() + " ecal clusters " + event.getEventNumber());
+        }
         
         
         Hep3Vector vtxPosMC = null;
         MCParticle electron=null;
         MCParticle positron=null;
-        if(event.hasCollection(MCParticle.class)) {
+        if(event.hasCollection(MCParticle.class,this.MCParticleCollectionName)) {
             totalMCEvents++;
-            List<MCParticle> mcparticles = event.get(MCParticle.class).get(0);
+            List<MCParticle> mcparticles = event.get(MCParticle.class,this.MCParticleCollectionName);
             List<MCParticle> fsParticles = HPSMCParticlePlotsDriver.makeGenFSParticleList(mcparticles);
                  
             for(MCParticle part : fsParticles) {
@@ -240,17 +296,17 @@
                         }
                     }
                 }
-                if(electron!=null && positron!=null) {
-                    this.particleVertexer.setParticle(electron, positron);
-                    vtxPosMC = this.particleVertexer.getVertex();
-                    if(this._debug) System.out.printf("%s: vtxPosMC=%s\n", this.getClass().getSimpleName(),vtxPosMC.toString());
-                    this._partvtxpos_xy.fill(vtxPosMC.x(), vtxPosMC.y());
-                    this._partvtxpos_x.fill(vtxPosMC.x());
-                    this._partvtxpos_y.fill(vtxPosMC.y());
-                    this._partvtxpos_z.fill(vtxPosMC.z());
-                    totalTwoTrackMCEvents++;
-                }
+            }
 
+            if(electron!=null && positron!=null) {
+                this.particleVertexer.setParticle(electron, positron);
+                vtxPosMC = this.particleVertexer.getVertex();
+                if(this._debug) System.out.printf("%s: vtxPosMC=%s\n", this.getClass().getSimpleName(),vtxPosMC.toString());
+                this._partvtxpos_xy.fill(vtxPosMC.x(), vtxPosMC.y());
+                this._partvtxpos_x.fill(vtxPosMC.x());
+                this._partvtxpos_y.fill(vtxPosMC.y());
+                this._partvtxpos_z.fill(vtxPosMC.z());
+                totalTwoTrackMCEvents++;
             }
         }
         
@@ -340,22 +396,24 @@
                 br_line+="trk1_res"+iLayer+"_x/F:"+"trk1_res"+iLayer+"_y/F:"+"trk1_res"+iLayer+"_z/F:";
                 br_line+="trk1_eres"+iLayer+"_x/F:"+"trk1_eres"+iLayer+"_y/F:"+"trk1_eres"+iLayer+"_z/F:";
                 br_line+="trk1_drdphi"+iLayer+"/F:"+"trk1_msdrphi"+iLayer+"/F:";
-                br_line+="trk1_dr"+iLayer+"/F:"+"trk1_slope"+iLayer+"/F:";
-                
+                br_line+="trk1_dz"+iLayer+"/F:"+"trk1_msdz"+iLayer+"/F:";
+                //br_line+="trk1_ures"+iLayer+"/F:"+"trk1_ureserr"+iLayer+"/F:";
             }
             for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk1_strip"+iLayer+"_u/F:";
-            for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk1_strip"+iLayer+"_n/F:";
+            for(int iLayer=1;iLayer<=10;++iLayer) br_line+="top_strip"+iLayer+"_n/F:";
+            for(int iLayer=1;iLayer<=10;++iLayer) br_line+="bot_strip"+iLayer+"_n/F:";
             br_line+="trk2_q/I:trk2_chi2/F:trk2_px/F:trk2_py/F:trk2_pz/F:trk2_nhits/I:";
             for(int iLayer=1;iLayer<=5;++iLayer) br_line+="trk2_hit"+iLayer+"_x/F:"+"trk2_hit"+iLayer+"_y/F:"+"trk2_hit"+iLayer+"_z/F:";
             for(int iLayer=1;iLayer<=5;++iLayer) {
                 br_line+="trk2_res"+iLayer+"_x/F:"+"trk2_res"+iLayer+"_y/F:"+"trk2_res"+iLayer+"_z/F:";
                 br_line+="trk2_eres"+iLayer+"_x/F:"+"trk2_eres"+iLayer+"_y/F:"+"trk2_eres"+iLayer+"_z/F:";
                 br_line+="trk2_drdphi"+iLayer+"/F:"+"trk2_msdrphi"+iLayer+"/F:";
-                br_line+="trk2_dr"+iLayer+"/F:"+"trk2_slope"+iLayer+"/F:";
-                
+                br_line+="trk2_dz"+iLayer+"/F:"+"trk2_msdz"+iLayer+"/F:";
+                //br_line+="trk2_ures"+iLayer+"/F:"+"trk2_ureserr"+iLayer+"/F:";
             }
             for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk2_strip"+iLayer+"_u/F:";
-            for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk2_strip"+iLayer+"_n/F:";
+            for(int iLayer=1;iLayer<=10;++iLayer) br_line+="top_stereo"+iLayer+"_n/F:";
+            for(int iLayer=1;iLayer<=10;++iLayer) br_line+="bot_stereo"+iLayer+"_n/F:";
             br_line+="vtx_truth_x/F:vtx_truth_y/F:vtx_truth_z/F:";
             br_line+="vtx_x/F:vtx_y/F:vtx_z/F:";
             br_line+="trk1_conv_x/F:trk1_conv_y/F:trk1_conv_z/F:";
@@ -375,14 +433,14 @@
         if(e!=null && p!=null) printWriter.format("%5.5f %5.5f %5.5f %5.5f %5.5f %5.5f ", e.getPX(),e.getPY(),e.getPZ(), p.getPX(),p.getPY(),p.getPZ() );
         else printWriter.format("%5.5f %5.5f %5.5f %5.5f %5.5f %5.5f ", -9999999., -9999999., -9999999., -9999999., -9999999., -9999999. );
         //Track properties
+        SeedTrack st1 = (SeedTrack) trk1;
+        HelicalTrackFit helix1 = st1.getSeedCandidate().getHelix();        
         List<TrackerHit> hitsOnTrack1 = trk1.getTrackerHits();
         printWriter.format("%5d %5.5f %5.5f %5.5f %5.5f %5d ",trk1.getCharge(),trk1.getChi2(), trk1.getTrackStates().get(0).getMomentum()[0],trk1.getTrackStates().get(0).getMomentum()[1],trk1.getTrackStates().get(0).getMomentum()[2],hitsOnTrack1.size());
-        HashMap<Integer,HelicalTrackHit> hits1 = this.getHitMap(hitsOnTrack1);
-        for(TrackerHit hit : hitsOnTrack1) {
-            HelicalTrackHit hth = (HelicalTrackHit) hit;
-            hits1.put(hth.Layer(), hth);
-            //System.out.println("hit on layer " + hth.Layer());
-        }
+        HashMap<Integer,HelicalTrackHit> hits1 = this.getHitMap(hitsOnTrack1,helix1);
+        
+        //printWriter.format("\n%s\n","X1");
+        
         // stupid but I want to keep one line per event so default in case there is not hits in all layers
         for(int iLayer=0;iLayer<5;++iLayer) {
             HelicalTrackHit hitOnLayer = hits1.get(iLayer*2+1);// = this.getHitOnLayer(iLayer, hitsOnTrack);
@@ -390,16 +448,15 @@
             else printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
         }
         //Get the helix for residual calculation
-        SeedTrack st1 = (SeedTrack) trk1;
-        HelicalTrackFit helix1 = st1.getSeedCandidate().getHelix();
         for(int iLayer=0;iLayer<5;++iLayer) {
             HelicalTrackHit hitOnLayer = hits1.get(iLayer*2+1);// = this.getHitOnLayer(iLayer, hitsOnTrack);
             if (hitOnLayer != null) {
+                //printWriter.format("\n%s\n","X11");
                 Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hitOnLayer, helix1, true);
                 printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("resy"),res.get("resz"));
                 printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("erry"),res.get("errz"));
                 printWriter.format("%5.5f %5.5f ", res.get("drphi"),res.get("msdrphi"));
-                printWriter.format("%5.5f %5.5f ", res.get("dr"),res.get("slope"));
+                printWriter.format("%5.5f %5.5f ", res.get("dz_res"),res.get("msdz"));
                 
                 //DEBUG histos
                 if(iLayer==0) {
@@ -418,9 +475,16 @@
                 printWriter.format("%5.5f %5.5f ", -9999999.9, -9999999.9);
             }
         }
+        
+        //printWriter.format("\n%s\n","X2");
+
+        
         List<HelicalTrackHit> stereoHits = new ArrayList<HelicalTrackHit>();
         if(event.hasCollection(HelicalTrackHit.class, stereoHitCollectionName)) {
             stereoHits = event.get(HelicalTrackHit.class, stereoHitCollectionName);
+        } else {
+            System.out.printf("%s: no collection with stereo hits? \"%s\"\n",this.getClass().getSimpleName(),this.stereoHitCollectionName);
+        
         }
         HashMap<Integer,List<HelicalTrackStrip>> striphits1 = this.getStripHitsMap(hitsOnTrack1);        
         for(int iLayer=1;iLayer<=10;++iLayer) {
@@ -429,24 +493,31 @@
             if(strip!=null) printWriter.format("%5.5f ", strip.umeas());
             else printWriter.format("%5.5f ", -99999999.9);
         }
-        HashMap<Integer,List<HelicalTrackStrip>> allstriphits1 = this.getAllStripHitsMap(stereoHits);
+        
+        HashMap<Integer,List<HelicalTrackStrip>> allstriphits = this.getAllStripHitsMap(event,true);
         for(int iLayer=1;iLayer<=10;++iLayer) {
-            if(striphits1.containsKey(iLayer)) printWriter.format("%5d ", allstriphits1.get(iLayer).size());
+            if(allstriphits.containsKey(iLayer)) printWriter.format("%5d ", allstriphits.get(iLayer).size());
             else printWriter.format("%5d ", -99999999);
         }
-        
+        allstriphits = this.getAllStripHitsMap(event,false);
+        for(int iLayer=1;iLayer<=10;++iLayer) {
+            if(allstriphits.containsKey(iLayer)) printWriter.format("%5d ", allstriphits.get(iLayer).size());
+            else printWriter.format("%5d ", -99999999);
+        }
+        SeedTrack st2 = (SeedTrack) trk2;
+        HelicalTrackFit helix2 = st2.getSeedCandidate().getHelix();
         List<TrackerHit> hitsOnTrack2 = trk2.getTrackerHits();
         printWriter.format("%5d %5.5f %5.5f %5.5f %5.5f %5d ",trk2.getCharge(),trk2.getChi2(), trk2.getTrackStates().get(0).getMomentum()[0],trk2.getTrackStates().get(0).getMomentum()[1],trk2.getTrackStates().get(0).getMomentum()[2],hitsOnTrack2.size());
         HashMap<Integer,List<HelicalTrackStrip>> striphits2 = this.getStripHitsMap(hitsOnTrack2);        
-        HashMap<Integer,HelicalTrackHit> hits2 = this.getHitMap(hitsOnTrack2);
+        HashMap<Integer,HelicalTrackHit> hits2 = this.getHitMap(hitsOnTrack2,helix2);
         for(int iLayer=0;iLayer<5;++iLayer) {
             HelicalTrackHit hitOnLayer = hits2.get(iLayer*2+1);// = this.getHitOnLayer(iLayer, hitsOnTrack);
             if (hitOnLayer != null) printWriter.format("%5.5f %5.5f %5.5f ", hitOnLayer.getPosition()[0],hitOnLayer.getPosition()[1],hitOnLayer.getPosition()[2]);
             else printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
         }
-        //Get the helix for residual calculation
-        SeedTrack st2 = (SeedTrack) trk2;
-        HelicalTrackFit helix2 = st2.getSeedCandidate().getHelix();
+        
+        //printWriter.format("\n%s\n","X3");
+
         for(int iLayer=0;iLayer<5;++iLayer) {
             HelicalTrackHit hitOnLayer = hits2.get(iLayer*2+1);// = this.getHitOnLayer(iLayer, hitsOnTrack);
             if (hitOnLayer != null) {
@@ -454,16 +525,21 @@
                 printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("resy"),res.get("resz"));
                 printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("erry"),res.get("errz"));
                 printWriter.format("%5.5f %5.5f ", res.get("drphi"),res.get("msdrphi"));
-                printWriter.format("%5.5f %5.5f ", res.get("dr"),res.get("slope"));
-
+                printWriter.format("%5.5f %5.5f ", res.get("dz_res"),res.get("msdz"));
+              
+                
+                if(res.get("erry")>19.7) {
+                    System.out.printf("%s: y residual error is too large = %f for run %d and event %d \n",this.getClass().getSimpleName(),res.get("erry"),event.getRunNumber(),event.getEventNumber());
+                    //System.exit(1);
+                }
                 //DEBUG histos
                 if(iLayer==0) {
-                    _trk1_res1_z.fill(res.get("resz"));
-                    _trk1_res1_y.fill(res.get("resy"));
+                    _trk2_res1_z.fill(res.get("resz"));
+                    _trk2_res1_y.fill(res.get("resy"));
                 }
                 if(iLayer==1) {
-                    _trk1_res2_z.fill(res.get("resz"));
-                    _trk1_res2_y.fill(res.get("resy"));
+                    _trk2_res2_z.fill(res.get("resz"));
+                    _trk2_res2_y.fill(res.get("resy"));
                 }
 
             }
@@ -480,11 +556,17 @@
             if(strip!=null) printWriter.format("%5.5f ", strip.umeas());
             else printWriter.format("%5.5f ", -99999999.9);
         }
-        HashMap<Integer,List<HelicalTrackStrip>> allstriphits2 = this.getAllStripHitsMap(stereoHits);
+        HashMap<Integer,List<HelicalTrackHit>> allstereohits = getAllStereoHitsMap(stereoHits,true);
+        for(int iLayer=1;iLayer<=10;++iLayer) {
+            if(allstereohits.containsKey(iLayer)) printWriter.format("%5d ", allstereohits.get(iLayer).size());
+            else printWriter.format("%5d ", -99999999);
+        }
+        allstereohits = getAllStereoHitsMap(stereoHits,false);
         for(int iLayer=1;iLayer<=10;++iLayer) {
-            if(striphits2.containsKey(iLayer)) printWriter.format("%5d ", striphits2.get(iLayer).size());
+            if(allstereohits.containsKey(iLayer)) printWriter.format("%5d ", allstereohits.get(iLayer).size());
             else printWriter.format("%5d ", -99999999);
         }
+        //printWriter.format("\n%s\n","X4");
         
         //Particle vtx
         if(vtxPosParticle!=null) printWriter.format("%5.5f %5.5f %5.5f ", vtxPosParticle.x(),vtxPosParticle.y(),vtxPosParticle.z() );
@@ -500,7 +582,10 @@
         printWriter.format("%5.5f %5.5f %5.5f ", posAtConverter.z(),posAtConverter.x(),posAtConverter.y()); //note rotation from JLab->tracking
         int ncl_t=0; int ncl_b=0;
         for(int i=0;i<3;++i) {
-            if(clusters.size()<=i) {
+            if(clusters==null) {
+                printWriter.format("%5.5f %5d %5d ",-999999.9,-999999,-999999);
+            }
+            else if(clusters.size()<=i) {
                 printWriter.format("%5.5f %5d %5d ",-999999.9,-999999,-999999);
             } else {
                 //for(HPSEcalCluster cl : clusters) {
@@ -541,10 +626,12 @@
     }
                 
 
-    private HashMap<Integer,HelicalTrackHit> getHitMap(List<TrackerHit> hits) {
+    private HashMap<Integer,HelicalTrackHit> getHitMap(List<TrackerHit> hits,HelicalTrackFit helix) {
         HashMap<Integer,HelicalTrackHit> map = new HashMap<Integer,HelicalTrackHit>();
         for(TrackerHit hit : hits) {
             HelicalTrackHit hth = (HelicalTrackHit) hit;
+            HelicalTrackCross htc = (HelicalTrackCross) hth;
+            htc.setTrackDirection(helix);
             map.put(hth.Layer(), hth);
         }
         return map;
@@ -578,31 +665,45 @@
         return map;
     }
     
-    private HashMap<Integer,List<HelicalTrackStrip>> getAllStripHitsMap(List<HelicalTrackHit> stereoHits) {
+    private HashMap<Integer,List<HelicalTrackStrip>> getAllStripHitsMap(EventHeader event, boolean top) {
         HashMap<Integer,List<HelicalTrackStrip>> map = new HashMap<Integer,List<HelicalTrackStrip>>();
-        for(HelicalTrackHit hth : stereoHits) {
-            HelicalTrackCross htc = (HelicalTrackCross) hth;
-            HelicalTrackStrip s1 = htc.getStrips().get(0);
-            HelicalTrackStrip s2 = htc.getStrips().get(1);
-            if(!map.containsKey(s1.layer())) map.put(s1.layer(), new ArrayList<HelicalTrackStrip>());
-            if(!map.containsKey(s2.layer())) map.put(s2.layer(), new ArrayList<HelicalTrackStrip>());
-            map.get(s1.layer()).add(s1);
-            map.get(s2.layer()).add(s2);
-            
+        if(!event.hasCollection(HelicalTrackStrip.class, this._stripClusterCollectionName)) {
+            return map;
+        }
+        List<HelicalTrackStrip> strips = event.get(HelicalTrackStrip.class, this._stripClusterCollectionName);
+        if(this._debug) System.out.printf("%s: asking strips in the %s\n", this.getClass().getSimpleName(),(top?"top":"bottom"));
+        for(HelicalTrackStrip strip : strips) {
+            if(top && strip.origin().y()<0 )  continue;
+            else if(!top && strip.origin().y()>0) continue;
+            if(this._debug) System.out.printf("%s: strip at origin %s is selected\n", this.getClass().getSimpleName(),strip.origin().toString());
+            if(!map.containsKey(strip.layer())) {
+                map.put(strip.layer(), new ArrayList<HelicalTrackStrip>());
+            }
+            map.get(strip.layer()).add(strip);
         }
+        
         return map;
     }
-
-    private HelicalTrackHit getHitOnLayer(int layer, List<TrackerHit> hits) {
-        HelicalTrackHit hitOnLayer = null;
-        for(TrackerHit hit : hits) {
-            HelicalTrackHit htc = (HelicalTrackHit) hit;
-            if( htc.Layer() == layer) {
-                hitOnLayer = htc;
-            } 
+    
+    private HashMap<Integer,List<HelicalTrackHit>> getAllStereoHitsMap(List<HelicalTrackHit> stereoHits, boolean top) {
+        HashMap<Integer,List<HelicalTrackHit>> map = new HashMap<Integer,List<HelicalTrackHit>>();
+        if(stereoHits==null) {
+            return map;
+        }
+        if(this._debug) System.out.printf("%s: asking for stereo hits in the %s\n", this.getClass().getSimpleName(),(top?"top":"bottom"));
+        for(HelicalTrackHit hit : stereoHits) {
+            if(top && hit.z()<0) continue;
+            if(!top && hit.z()>0) continue;
+            if(this._debug) System.out.printf("%s: hit at xyz=%.3f,%.3f,%.3f is selected\n", this.getClass().getSimpleName(),hit.x(),hit.y(),hit.z());
+            if(!map.containsKey(hit.Layer())) {
+                map.put(hit.Layer(), new ArrayList<HelicalTrackHit>());
+            }
+            map.get(hit.Layer()).add(hit);
         }
-        return hitOnLayer;
+        return map;
     }
+
+    
     
       private void makePlots() {
         _vtxpos_x = aida.histogram1D("Vertex position X", 100, -1000, 1000);
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1