Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/users/phansson on MAIN
TwoTrackAnlysis.java+143-191.1 -> 1.2
Added simple vtx plots and new variables to ntuple.

hps-java/src/main/java/org/lcsim/hps/users/phansson
TwoTrackAnlysis.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- TwoTrackAnlysis.java	22 Dec 2012 20:53:33 -0000	1.1
+++ TwoTrackAnlysis.java	8 Jan 2013 00:37:47 -0000	1.2
@@ -9,15 +9,20 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
 import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
 import org.lcsim.event.util.ParticleTypeClassifier;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.geometry.Detector;
 import org.lcsim.hps.analysis.ecal.HPSMCParticlePlotsDriver;
+import org.lcsim.hps.recon.ecal.HPSEcalCluster;
 import org.lcsim.hps.recon.tracking.SvtTrackExtrapolator;
 import org.lcsim.hps.recon.vertexing.SimpleVertexer;
 import org.lcsim.hps.recon.vertexing.TwoParticleVertexer;
@@ -42,11 +47,13 @@
     private int totalTwoTrackMCEvents=0;
     private boolean hideFrame = false;
     private String outputPlotFileName;
+    private String ecalClusterCollectionName = "EcalClusters";
     private boolean _debug;
     private TwoTrackVertexer vertexer = new TwoTrackVertexer();
     private TwoParticleVertexer particleVertexer = new TwoParticleVertexer();
     private IPlotter _plotterParticleVertex;
     private IPlotter _plotterTrackVertex;
+    private IPlotter _plotterNhits;
     private IHistogram2D _vtxpos_xy;
     private IHistogram1D _vtxpos_x;
     private IHistogram1D _vtxpos_y;
@@ -55,6 +62,13 @@
     private IHistogram1D _partvtxpos_x;
     private IHistogram1D _partvtxpos_y;
     private IHistogram1D _partvtxpos_z;
+    private IHistogram1D _nhits;
+    private IHistogram1D _nhits_vtxpospos;
+    private IHistogram1D _nhits_vtxposneg;
+    private IHistogram1D _layershit;
+    private IHistogram1D _layershit_vtxpospos;
+    private IHistogram1D _layershit_vtxposneg;
+
     
     
     public void setDebug(boolean v) {
@@ -106,6 +120,33 @@
              }
         }
         
+        
+        if(tracklist.size()!=2) {
+            return;
+        }
+
+        
+        Track trk1 = tracklist.get(0);
+        Track trk2 = tracklist.get(1);
+        List<TrackerHit> hitsOnTrack1 = trk1.getTrackerHits();
+        List<TrackerHit> hitsOnTrack2 = trk2.getTrackerHits();
+        
+        this.vertexer.setTracks(trk1, trk2);
+        Hep3Vector vtxPos = this.vertexer.getVertex();
+        if(this._debug) System.out.printf("%s: vtxPos=%s\n", this.getClass().getSimpleName(),vtxPos.toString());
+        if(vtxPos.x() != vtxPos.x()) {
+            System.out.printf("%s: vtxPos is NaN -> Skip\n",this.getClass().getSimpleName());
+            return;
+        }
+        
+        
+        
+        
+        
+        List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName); 
+
+        
+        
         Hep3Vector vtxPosMC = null;
         MCParticle electron=null;
         MCParticle positron=null;
@@ -148,23 +189,42 @@
         }
         
         
-        if(tracklist.size()!=2) {
-            return;
-        }
         
-        Track trk1 = tracklist.get(0);
-        Track trk2 = tracklist.get(1);
-        
-        this.vertexer.setTracks(trk1, trk2);
-        Hep3Vector vtxPos = this.vertexer.getVertex();
-        if(this._debug) System.out.printf("%s: vtxPos=%s\n", this.getClass().getSimpleName(),vtxPos.toString());
+
         this._vtxpos_xy.fill(vtxPos.x(), vtxPos.y());
         this._vtxpos_x.fill(vtxPos.x());
         this._vtxpos_y.fill(vtxPos.y());
         this._vtxpos_z.fill(vtxPos.z());
+        this._nhits.fill(hitsOnTrack1.size());
+        this._nhits.fill(hitsOnTrack2.size());
+        if(vtxPos.x()<-350.0) {
+            this._nhits_vtxposneg.fill(hitsOnTrack1.size());
+            this._nhits_vtxposneg.fill(hitsOnTrack2.size());
+        } else {
+            this._nhits_vtxpospos.fill(hitsOnTrack1.size());
+            this._nhits_vtxpospos.fill(hitsOnTrack2.size());            
+        }
+        for(TrackerHit hit : hitsOnTrack1) {
+            HelicalTrackHit hth = (HelicalTrackHit) hit;
+            int l = (hth.Layer()+1)/2;
+            this._layershit.fill(l);
+            if(vtxPos.x()<-350.0) this._layershit_vtxposneg.fill(l);
+            else this._layershit_vtxpospos.fill(l);
+        }
+        
+        
+        
+//        for(HPSEcalCluster cl : clusters) {    
+//            int[] clusterPosIdx = new int[2];
+//            clusterPosIdx[0] = cl.getSeedHit().getIdentifierFieldValue("ix");
+//            clusterPosIdx[1] = cl.getSeedHit().getIdentifierFieldValue("iy");
+//        }
+        
+        
+        
         totalTwoTrackEvents++;
         
-        this.fillTextTuple(electron, positron, trk1, trk2, vtxPosMC, vtxPos, event);
+        this.fillTextTuple(electron, positron, trk1, trk2, vtxPosMC, vtxPos, clusters, event);
         
         
         
@@ -210,6 +270,14 @@
         _partvtxpos_y = aida.histogram1D("Particle Vertex position Y", 100, -200, 200);
         _partvtxpos_z = aida.histogram1D("Particle Vertex position Z", 100, -200, 200);
         _partvtxpos_xy = aida.histogram2D("Particle Vertex position Y vs X", 50, -200, 200, 50, -200, 200);
+        _nhits = aida.histogram1D("# hits", 3, 4, 7);
+        _nhits_vtxpospos = aida.histogram1D("# hits for pos vtx", 3, 4, 7);
+        _nhits_vtxposneg = aida.histogram1D("# hits for neg vtx", 3, 4, 7);
+        _layershit = aida.histogram1D("Layers hit", 5, 1, 6);
+        _layershit_vtxpospos = aida.histogram1D("Layers hit pos vtx", 5, 1, 6);
+        _layershit_vtxposneg = aida.histogram1D("Layers hit neg vtx", 5, 1, 6);
+        
+        
         _plotterTrackVertex = aida.analysisFactory().createPlotterFactory().create();
         _plotterTrackVertex.createRegions(2,2);
         _plotterTrackVertex.region(0).plot(_vtxpos_x);
@@ -226,10 +294,20 @@
         _plotterParticleVertex.region(3).plot(_partvtxpos_xy);
         _plotterParticleVertex.region(3).style().setParameter("hist2DStyle", "colorMap");
         _plotterParticleVertex.region(3).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        _plotterNhits = aida.analysisFactory().createPlotterFactory().create();
+        _plotterNhits.createRegions(1,2);
+        _plotterNhits.region(0).plot(_nhits);
+        _plotterNhits.region(0).plot(this._nhits_vtxposneg,"mode=overlay");
+        _plotterNhits.region(0).plot(this._nhits_vtxpospos,"mode=overlay");
+        _plotterNhits.region(0).style().dataStyle().fillStyle().setVisible(false);
+        _plotterNhits.region(1).plot(this._layershit);
+        _plotterNhits.region(1).plot(this._layershit_vtxposneg,"mode=overlay");
+        _plotterNhits.region(1).plot(this._layershit_vtxpospos,"mode=overlay");
+        _plotterNhits.region(1).style().dataStyle().fillStyle().setVisible(false);
         
         _plotterParticleVertex.setTitle("MC particle Vertex");
         _plotterTrackVertex.setTitle("Two Track Vertex");
-       
+        _plotterNhits.setTitle("Hits on track");
         
         for(int i=0;i<3;++i) {
             ((PlotterRegion) _plotterParticleVertex.region(i)).getPlot().setAllowUserInteraction(true);
@@ -242,6 +320,7 @@
         if(!this.hideFrame) {
             this._plotterParticleVertex.show();
             this._plotterTrackVertex.show();
+            this._plotterNhits.show();
         } 
     }
     
@@ -251,17 +330,20 @@
         return f.length() == 0; //return zero also in case file doesn't exist
     }
     
-    private void fillTextTuple(MCParticle e, MCParticle p, Track trk1, Track trk2, Hep3Vector vtxPosParticle, Hep3Vector vtxPos, EventHeader event) {
+    private void fillTextTuple(MCParticle e, MCParticle p, Track trk1, Track trk2, Hep3Vector vtxPosParticle, Hep3Vector vtxPos,List<HPSEcalCluster> clusters, EventHeader event) {
         if(doPrintBranchInfoLine) {
             String br_line = "";                 
             br_line+="evtnr/I:";
             br_line+="e_px/F:e_py/F:e_pz/F:p_px/F:p_py/F:p_pz/F:";
-            br_line+="trk1_q/I:trk1_chi2/F:trk1_px/F:trk1_py/F:trk1_pz/F:";
-            br_line+="trk2_q/I:trk2_chi2/F:trk2_px/F:trk2_py/F:trk2_pz/F:";
+            br_line+="trk1_q/I:trk1_chi2/F:trk1_px/F:trk1_py/F:trk1_pz/F:trk1_nhits/I:";
+            for(int iLayer=1;iLayer<=5;++iLayer) br_line+="trk1_hit"+iLayer+"_x/F:"+"trk1_hit"+iLayer+"_y/F:"+"trk1_hit"+iLayer+"_z/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:";
             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:";
-            br_line+="trk2_conv_x/F:trk2_conv_y/F:trk2_conv_z/F";
+            br_line+="trk2_conv_x/F:trk2_conv_y/F:trk2_conv_z/F:";
+            br_line+="ncl_top/I:ncl_bot/I";
             printWriter.println(br_line);
             doPrintBranchInfoLine = false;
         }
@@ -271,10 +353,29 @@
         //Truth
         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. );
-                System.out.printf("%s: fill txt tuple 0.1\n",this.getClass().getName());
         //Track properties
-        printWriter.format("%5d %5.5f %5.5f %5.5f %5.5f ",trk1.getCharge(),trk1.getChi2(), trk1.getTrackStates().get(0).getMomentum()[0],trk1.getTrackStates().get(0).getMomentum()[1],trk1.getTrackStates().get(0).getMomentum()[2]);
-        printWriter.format("%5d %5.5f %5.5f %5.5f %5.5f ",trk2.getCharge(),trk2.getChi2(), trk2.getTrackStates().get(0).getMomentum()[0],trk2.getTrackStates().get(0).getMomentum()[1],trk2.getTrackStates().get(0).getMomentum()[2]);
+        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());
+        }
+        // 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);
+            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);
+        }
+        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,HelicalTrackHit> hits2 = this.getHitMap(hitsOnTrack2);
+        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);
+        }
         //Particle vtx
         if(vtxPosParticle!=null) printWriter.format("%5.5f %5.5f %5.5f ", vtxPosParticle.x(),vtxPosParticle.y(),vtxPosParticle.z() );
         else printWriter.format("%5.5f %5.5f %5.5f ", -9999999., -9999999., -9999999. );
@@ -287,13 +388,36 @@
         this.vertexer.extrapolator().setTrack(trk2);
         posAtConverter = this.vertexer.extrapolator().extrapolateTrack(SvtTrackExtrapolator.HARP_POSITION);        
         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(HPSEcalCluster cl : clusters) {
+            if(cl.getSeedHit().getIdentifierFieldValue("iy") > 0) ncl_t++;
+            else ncl_b++;
+        }
+        printWriter.format("%5d %5d",ncl_t,ncl_b);
         printWriter.println();
         
     }
     
 
+    private HashMap<Integer,HelicalTrackHit> getHitMap(List<TrackerHit> hits) {
+        HashMap<Integer,HelicalTrackHit> map = new HashMap<Integer,HelicalTrackHit>();
+        for(TrackerHit hit : hits) {
+            HelicalTrackHit hth = (HelicalTrackHit) hit;
+            map.put(hth.Layer(), hth);
+        }
+        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;
+            } 
+        }
+        return hitOnLayer;
+    }
     
     
     
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