Commit in hps-java/src/main on MAIN
resources/org/lcsim/hps/steering/users/phansson/TwoTrackAnalysis.lcsim+4-21.1 -> 1.2
java/org/lcsim/hps/users/phansson/TwoTrackAnlysis.java+153-521.13 -> 1.14
+157-54
2 modified files
Analysis variables added

hps-java/src/main/resources/org/lcsim/hps/steering/users/phansson
TwoTrackAnalysis.lcsim 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- TwoTrackAnalysis.lcsim	14 Mar 2013 03:09:45 -0000	1.1
+++ TwoTrackAnalysis.lcsim	27 Mar 2013 01:15:24 -0000	1.2
@@ -1,6 +1,8 @@
 <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" 
        xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd">
     <inputFiles>
+        <!--<fileRegExp baseDir="./../data/mc/v3/snapshot-1.6/">egs.*_0.016x0.*recon_[0-9].*slcio</fileRegExp>-->
+        <!--<fileRegExp baseDir="./../data/1.6-snapshot/" >hps.*1351.*evio\.0.*twotrkfilt.*slcio</fileRegExp>-->
         <!--<fileRegExp baseDir="./../data/1.6-snapshot/" >hps.*1354.*evio\.1.*twotrkfilt.*slcio</fileRegExp>-->
         <!--<fileRegExp baseDir="./../data/1.6-snapshot/" >hps.*1353.*evio\.0.*twotrkfilt.*slcio</fileRegExp>-->
         <!--<fileRegExp baseDir="./../data/mc/v3/pair_filter-snapshot-1.6/">pairs_0.0018x0_filt_.*twotrkfilt.*slcio</fileRegExp>-->
@@ -42,7 +44,7 @@
         <driver name="TwoTrackAnalysis" 
                 type="org.lcsim.hps.users.phansson.TwoTrackAnlysis">
                 <debug>false</debug>
-                <hideFrame>false</hideFrame>
+                <hideFrame>true</hideFrame>
                 <outputPlotFileName></outputPlotFileName>
                 <outputNameTextTuple>${outputFile}</outputNameTextTuple>
                 <trackCollectionName>MatchedTracks</trackCollectionName>
@@ -74,7 +76,7 @@
         </driver>
         <driver name="EventMarkerDriver"
                 type="org.lcsim.job.EventMarkerDriver">
-            <eventInterval>1000</eventInterval>
+            <eventInterval>100</eventInterval>
         </driver>        
         <driver name="RawTrackerHitSensorSetup" type="org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup"/>
         <driver name="RawTrackerHitFitterDriver" type="org.lcsim.hps.recon.tracking.HPSRawTrackerHitFitterDriver">

hps-java/src/main/java/org/lcsim/hps/users/phansson
TwoTrackAnlysis.java 1.13 -> 1.14
diff -u -r1.13 -r1.14
--- TwoTrackAnlysis.java	18 Mar 2013 22:33:44 -0000	1.13
+++ TwoTrackAnlysis.java	27 Mar 2013 01:15:25 -0000	1.14
@@ -9,10 +9,7 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.lcsim.detector.IDetectorElement;
@@ -24,7 +21,6 @@
 import org.lcsim.event.util.ParticleTypeClassifier;
 import org.lcsim.fit.helicaltrack.*;
 import org.lcsim.geometry.Detector;
-import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
 import org.lcsim.hps.analysis.ecal.HPSMCParticlePlotsDriver;
 import org.lcsim.hps.evio.TriggerData;
 import org.lcsim.hps.recon.ecal.HPSEcalCluster;
@@ -32,10 +28,8 @@
 import org.lcsim.hps.recon.tracking.SvtTrackExtrapolator;
 import org.lcsim.hps.recon.tracking.SvtUtils;
 import org.lcsim.hps.recon.tracking.TrackUtils;
-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;
@@ -70,14 +64,25 @@
     private TwoParticleVertexer particleVertexer = new TwoParticleVertexer();
     private IPlotter _plotterParticleVertex;
     private IPlotter _plotterTrackVertex;
+    private IPlotter _plotterTrackMult;
     private IHistogram1D _vtxpos_x;
     private IHistogram1D _vtxpos_y;
     private IHistogram1D _vtxpos_z;
     private IHistogram1D _partvtxpos_x;
     private IHistogram1D _partvtxpos_y;
     private IHistogram1D _partvtxpos_z;
+    private IHistogram2D _ntrks_px;
         
-
+    public class CmpTrack implements Comparable<CmpTrack> {
+        private Track _track;
+        public CmpTrack(Track track) {
+            _track = track;
+        }
+        @Override
+        public int compareTo(CmpTrack t) {
+                return _track.getTrackStates().get(0).getMomentum()[0]>t._track.getTrackStates().get(0).getMomentum()[0]?0:1;
+        }
+    }
     
     
     public void setDebug(boolean v) {
@@ -138,7 +143,7 @@
         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());
+                System.out.println(this.getClass().getSimpleName() + ": Number of Tracks = " + tracklist.size() + " in event " + event.getEventNumber());
              }
         } else {
              if(_debug) {
@@ -147,43 +152,51 @@
              return;
         }
         
-        if(_debug) {
-            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()==0) {
-            if(_debug) {
-                System.out.printf("%s: event %d has only %d tracks \n",this.getClass().getSimpleName(),event.getEventNumber(),tracklist.size());
-            }
-            return;
-        }
-
+        //if(tracklist.size()<2) {
+            //if(_debug) 
+        //        System.out.printf("%s: event %d has only %d tracks \n",this.getClass().getSimpleName(),event.getEventNumber(),tracklist.size());  
+        //    System.exit(1);
+        //    return;
+        //}
         
+        TrackUtils trkutil = new TrackUtils();
+        ArrayList<CmpTrack> tracks = new ArrayList<CmpTrack>();
         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;
+            if(_debug) 
+                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(trk.getTrackStates().get(0).getMomentum()[0]>0.) {
+                tracks.add(new CmpTrack(trk));
+            } else {
+               if(_debug) System.out.println(this.getClass().getSimpleName() + ": trk failed momentum cut " + event.getEventNumber() + "\n" + trk.toString());
             }
         }
         
-        List<Track> tracks = new ArrayList<Track>();
+        Collections.sort(tracks);
+
+        if(_debug) {
+            CmpTrack trk_prev = null;
+            for(CmpTrack trk:tracks) {
+                if(trk_prev!=null) {
+                    if(trk_prev._track.getTrackStates().get(0).getMomentum()[0]<trk._track.getTrackStates().get(0).getMomentum()[0]) {
+                        throw new RuntimeException(String.format("%s: ERROR prev px=%f trk=%f",this.getClass().getSimpleName(),trk_prev._track.getTrackStates().get(0).getMomentum()[0],trk._track.getTrackStates().get(0).getMomentum()[0]));
+                    }
+                }
+                trk_prev = trk;
+
+            }
+        }        
+        
         Hep3Vector vtxPos = null;
         Hep3Vector vtxPosFringe = null;
         
         
-        if(tracklist.size()>1) {
-            Track trk1 = tracklist.get(0);
-            Track trk2 = tracklist.get(1);
+        if(tracks.size()>1) {
+            Track trk1 = tracks.get(0)._track;
+            Track trk2 = tracks.get(1)._track;
         
-            this.vertexer.setTracks(tracklist.get(0), trk2);
+            this.vertexer.setTracks(trk1, trk2);
             vtxPos = this.vertexer.getVertex();
             if(this._debug) 
                 System.out.printf("%s: vtxPos=%s\n", this.getClass().getSimpleName(),vtxPos.toString());
@@ -266,7 +279,7 @@
         
         totalTwoTrackEvents++;
         
-        this.fillTextTuple(electron, positron, tracklist, vtxPosMC, vtxPos, vtxPosFringe, clusters, event);
+        this.fillTextTuple(electron, positron, tracks, vtxPosMC, vtxPos, vtxPosFringe, clusters, event);
         
         if(this._debug) System.out.println(this.getClass().getSimpleName() + ": # two track events so far = "+totalTwoTrackEvents);
         
@@ -311,10 +324,11 @@
         return f.length() == 0; //return zero also in case file doesn't exist
     }
     
-    private void fillTextTuple(MCParticle e, MCParticle p, List<Track> tracks, Hep3Vector vtxPosParticle, Hep3Vector vtxPos, Hep3Vector vtxPosFr, List<HPSEcalCluster> clusters, EventHeader event) {
+    private void fillTextTuple(MCParticle e, MCParticle p, List<CmpTrack> tracks, Hep3Vector vtxPosParticle, Hep3Vector vtxPos, Hep3Vector vtxPosFr, List<HPSEcalCluster> clusters, EventHeader event) {
         if(doPrintBranchInfoLine) {
             String br_line = "";                 
             br_line+="evtnr/I:";
+            br_line+="ntrks_top/I:ntrks_bot/I:ntrks100_top/I:ntrks100_bot/I:ntrks200_top/I:ntrks200_bot/I:ntrks300_top/I:ntrks300_bot/I:ntrks400_top/I:ntrks400_bot/I:ntrks500_top/I:ntrks500_bot/I:";
             br_line+="e_px/F:e_py/F:e_pz/F:p_px/F:p_py/F:p_pz/F:";
             br_line+="trk1_d0/F:trk1_phi0/F:trk1_R/F:trk1_z0/F:trk1_slope/F:";
             br_line+="trk1_q/I:trk1_chi2/F:trk1_px/F:trk1_py/F:trk1_pz/F:trk1_nhits/I:";
@@ -329,7 +343,7 @@
             for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk1_strip"+iLayer+"_u/F:";
             br_line+="trk1_conv_x/F:trk1_conv_y/F:trk1_conv_z/F:";
             br_line+="trk1_fr_conv_x/F:trk1_fr_conv_y/F:trk1_fr_conv_z/F:";
-            
+            //
             br_line+="trk2_d0/F:trk2_phi0/F:trk2_R/F:trk2_z0/F:trk2_slope/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:";
@@ -343,7 +357,35 @@
             for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk2_strip"+iLayer+"_u/F:";
             br_line+="trk2_conv_x/F:trk2_conv_y/F:trk2_conv_z/F:";
             br_line+="trk2_fr_conv_x/F:trk2_fr_conv_y/F:trk2_fr_conv_z/F:";
-            
+            //
+            br_line+="trk3_d0/F:trk3_phi0/F:trk3_R/F:trk3_z0/F:trk3_slope/F:";
+            br_line+="trk3_q/I:trk3_chi2/F:trk3_px/F:trk3_py/F:trk3_pz/F:trk3_nhits/I:";
+            for(int iLayer=1;iLayer<=5;++iLayer) br_line+="trk3_hit"+iLayer+"_x/F:"+"trk3_hit"+iLayer+"_y/F:"+"trk3_hit"+iLayer+"_z/F:";
+            for(int iLayer=1;iLayer<=5;++iLayer) {
+                br_line+="trk3_res"+iLayer+"_x/F:"+"trk3_res"+iLayer+"_y/F:"+"trk3_res"+iLayer+"_z/F:";
+                br_line+="trk3_eres"+iLayer+"_x/F:"+"trk3_eres"+iLayer+"_y/F:"+"trk3_eres"+iLayer+"_z/F:";
+                br_line+="trk3_drdphi"+iLayer+"/F:"+"trk3_msdrphi"+iLayer+"/F:";
+                br_line+="trk3_dz"+iLayer+"/F:"+"trk3_msdz"+iLayer+"/F:";
+                //br_line+="trk3_ures"+iLayer+"/F:"+"trk3_ureserr"+iLayer+"/F:";
+            }
+            for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk3_strip"+iLayer+"_u/F:";
+            br_line+="trk3_conv_x/F:trk3_conv_y/F:trk3_conv_z/F:";
+            br_line+="trk3_fr_conv_x/F:trk3_fr_conv_y/F:trk3_fr_conv_z/F:";
+            //
+            br_line+="trk4_d0/F:trk4_phi0/F:trk4_R/F:trk4_z0/F:trk4_slope/F:";
+            br_line+="trk4_q/I:trk4_chi2/F:trk4_px/F:trk4_py/F:trk4_pz/F:trk4_nhits/I:";
+            for(int iLayer=1;iLayer<=5;++iLayer) br_line+="trk4_hit"+iLayer+"_x/F:"+"trk4_hit"+iLayer+"_y/F:"+"trk4_hit"+iLayer+"_z/F:";
+            for(int iLayer=1;iLayer<=5;++iLayer) {
+                br_line+="trk4_res"+iLayer+"_x/F:"+"trk4_res"+iLayer+"_y/F:"+"trk4_res"+iLayer+"_z/F:";
+                br_line+="trk4_eres"+iLayer+"_x/F:"+"trk4_eres"+iLayer+"_y/F:"+"trk4_eres"+iLayer+"_z/F:";
+                br_line+="trk4_drdphi"+iLayer+"/F:"+"trk4_msdrphi"+iLayer+"/F:";
+                br_line+="trk4_dz"+iLayer+"/F:"+"trk4_msdz"+iLayer+"/F:";
+                //br_line+="trk4_ures"+iLayer+"/F:"+"trk4_ureserr"+iLayer+"/F:";
+            }
+            for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk4_strip"+iLayer+"_u/F:";
+            br_line+="trk4_conv_x/F:trk4_conv_y/F:trk4_conv_z/F:";
+            br_line+="trk4_fr_conv_x/F:trk4_fr_conv_y/F:trk4_fr_conv_z/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:";
             for(int iLayer=1;iLayer<=10;iLayer+=2) br_line+="top_stereo"+iLayer+"_n/F:";
@@ -351,9 +393,9 @@
             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+="vtx_fr_x/F:vtx_fr_y/F:vtx_fr_z/F:";
-            br_line+="cl1_E/F:cl1_ix/I:cl1_iy/I:";
-            br_line+="cl2_E/F:cl2_ix/I:cl2_iy/I:";
-            br_line+="cl3_E/F:cl3_ix/I:cl3_iy/I:";
+            br_line+="cl1_E/F:cl1_ix/I:cl1_iy/I:cl1_x/F:cl1_y/F:";
+            br_line+="cl2_E/F:cl2_ix/I:cl2_iy/I:cl2_x/F:cl2_y/F:";
+            br_line+="cl3_E/F:cl3_ix/I:cl3_iy/I:cl3_x/F:cl3_y/F:";
             br_line+="ncl_top/I:ncl_bot/I:";
             br_line+="trig_top/I:trig_bot/I";
             printWriter.println(br_line);
@@ -362,14 +404,24 @@
         
         //Event info
         printWriter.format("%5d ",event.getEventNumber());
+        if(tracks.size()>0) {
+        for(int icut=0;icut<=5;++icut) {
+            int ntrks[] = getNtracks(tracks,icut*0.1);
+            printWriter.format("%5d %5d ",ntrks[0],ntrks[1]);
+            this._ntrks_px.fill(0.1*icut, ntrks[0]+ntrks[1]);
+        }
+        } else {
+            printWriter.format("%5d %5d %5d %5d %5d %5d %5d %5d %5d %5d %5d %5d ", -9999999, -9999999, -9999999, -9999999, -9999999, -9999999, -9999999, -9999999, -9999999, -9999999, -9999999, -9999999 );
+        }
+        
         //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. );
         
         
-        for (int itrk=0;itrk<2;itrk++) {
+        for (int itrk=0;itrk<4;itrk++) {
             Track trk1 = null;
-            if(tracks.size()>itrk) trk1 = tracks.get(itrk);
+            if(tracks.size()>itrk) trk1 = tracks.get(itrk)._track;
         
             if(trk1!=null) {
                 SeedTrack st1 = (SeedTrack) trk1;
@@ -414,12 +466,13 @@
                 }
                 //Track at converter
                 this.vertexer.extrapolator().setTrack(trk1);
-                Hep3Vector 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
+                Hep3Vector posAtConverter = this.vertexer.extrapolator().extrapolateTrack(SvtTrackExtrapolator.HARP_POSITION);
+                if(posAtConverter!=null) printWriter.format("%5.5f %5.5f %5.5f ", posAtConverter.z(),posAtConverter.x(),posAtConverter.y()); //note rotation from JLab->tracking
+                else printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9,-9999999.9,-9999999.9);
                 HPSTrack hpstrk1 = new HPSTrack(helix1);
                 Hep3Vector posAtConverterFringe1 = hpstrk1.getPositionAtZMap(100., SvtTrackExtrapolator.HARP_POSITION, 5.0)[0];
-                printWriter.format("%5.5f %5.5f %5.5f ", posAtConverterFringe1.z(),posAtConverterFringe1.x(),posAtConverterFringe1.y()); //note rotation from JLab->tracking
-
+                if (posAtConverterFringe1!=null) printWriter.format("%5.5f %5.5f %5.5f ", posAtConverterFringe1.z(),posAtConverterFringe1.x(),posAtConverterFringe1.y()); //note rotation from JLab->tracking
+                else printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9,-9999999.9,-9999999.9);
 
             }
             else {
@@ -455,8 +508,14 @@
         HashMap<Integer,List<SiTrackerHitStrip1D>> allstriphits = this.getAllStripHitsMap(event,true);
         //System.out.printf("%s: %d strip hits in event\n",this.getClass().getSimpleName(),allstriphits.size());
         for(int iLayer=1;iLayer<=10;++iLayer) {
-            if(allstriphits.containsKey(iLayer)) printWriter.format("%5d ", allstriphits.get(iLayer).size());
-            else printWriter.format("%5d ", -99999999);
+            if(allstriphits.containsKey(iLayer)) {
+                printWriter.format("%5d ", allstriphits.get(iLayer).size());
+                //System.out.printf("%s: layer %d has %d strip hits\n",this.getClass().getSimpleName(),iLayer,allstriphits.get(iLayer).size());
+            }
+            else {
+                printWriter.format("%5d ", -99999999);
+                //System.out.printf("%s: layer %d has 0 strip hits\n",this.getClass().getSimpleName(),iLayer);
+            }
         }
         allstriphits = this.getAllStripHitsMap(event,false);
         for(int iLayer=1;iLayer<=10;++iLayer) {
@@ -496,16 +555,17 @@
         int ncl_t=0; int ncl_b=0;
         for(int i=0;i<3;++i) {
             if(clusters==null) {
-                printWriter.format("%5.5f %5d %5d ",-999999.9,-999999,-999999);
+                printWriter.format("%5.5f %5d %5d %5.5f %5.5f ",-999999.9,-999999,-999999,-999999.,-999999.);
             }
             else if(clusters.size()<=i) {
-                printWriter.format("%5.5f %5d %5d ",-999999.9,-999999,-999999);
+                printWriter.format("%5.5f %5d %5d %5.5f %5.5f ",-999999.9,-999999,-999999,-999999.,-999999.);
             } else {
                 //for(HPSEcalCluster cl : clusters) {
                 int iy = clusters.get(i).getSeedHit().getIdentifierFieldValue("iy");
                 int ix = clusters.get(i).getSeedHit().getIdentifierFieldValue("ix");
+                double pos[] = clusters.get(i).getPosition();
                 double E = clusters.get(i).getEnergy();
-                printWriter.format("%5.5f %5d %5d ",E,ix,iy);
+                printWriter.format("%5.5f %5d %5d %5.5f %5.5f ",E,ix,iy,pos[0],pos[1]);
                 if( iy > 0) ncl_t++;
                 else ncl_b++;
             }
@@ -618,6 +678,37 @@
         }
         return map;
     }
+    
+    private int[] getNtracks(List<CmpTrack> tracks) {
+        return this.getNtracks(tracks, 0.);
+    }
+    private int[] getNtracks(List<CmpTrack> tracks, double min_px) {
+        //System.out.printf("%s: getNtracks for %d tracks with min_px=%.3f \n",this.getClass().getSimpleName(),tracks.size(),min_px);
+        int n[] = {0,0};
+        for(CmpTrack track : tracks) {
+            if(track._track.getTrackStates().get(0).getMomentum()[0]<min_px) {
+                continue;
+            }
+            //System.out.printf("%s: track had enough px=%f\n",this.getClass().getSimpleName(),track._track.getTrackStates().get(0).getMomentum()[0]);
+            
+            List<TrackerHit> hitsOnTrack = track._track.getTrackerHits();
+            for(TrackerHit hit : hitsOnTrack) {
+                double y = hit.getPosition()[1];
+                if(y>0) {
+                    //System.out.printf("%s: this track (chi2=%f) is a top track\n",this.getClass().getSimpleName(),track._track.getChi2());
+                    n[0]++;
+                    break;
+                } else if(y<0) {
+                    //System.out.printf("%s: this track (chi2=%f) is a bot track\n",this.getClass().getSimpleName(),track._track.getChi2());
+                    n[1]++;
+                    break;
+                }
+            }
+        }
+        //System.out.printf("%s: found %d top and %d bot tracks\n",this.getClass().getSimpleName(),n[0],n[1]);
+
+        return n;
+    }
 
     
     
@@ -628,6 +719,7 @@
         _partvtxpos_x = aida.histogram1D("Particle Vertex position X", 100, -1000, 1000);
         _partvtxpos_y = aida.histogram1D("Particle Vertex position Y", 100, -200, 200);
         _partvtxpos_z = aida.histogram1D("Particle Vertex position Z", 100, -200, 200);
+        _ntrks_px = aida.histogram2D("Track multiplicity vs px cut", 6, 0, 0.6,8,0,8);
         
         _plotterTrackVertex = aida.analysisFactory().createPlotterFactory().create();
         _plotterTrackVertex.createRegions(2,2);
@@ -639,20 +731,29 @@
         _plotterParticleVertex.region(0).plot(_partvtxpos_x);
         _plotterParticleVertex.region(1).plot(_partvtxpos_y);
         _plotterParticleVertex.region(2).plot(_partvtxpos_z);
+        _plotterTrackMult = aida.analysisFactory().createPlotterFactory().create();
+        _plotterTrackMult.createRegions(1,1);
+        _plotterTrackMult.region(0).plot(_ntrks_px);
         
         _plotterParticleVertex.setTitle("MC particle Vertex");
         _plotterTrackVertex.setTitle("Two Track Vertex");
+        _plotterTrackMult.setTitle("Track multiplicity");
         
         for(int i=0;i<3;++i) {
             ((PlotterRegion) _plotterParticleVertex.region(i)).getPlot().setAllowUserInteraction(true);
             ((PlotterRegion) _plotterParticleVertex.region(i)).getPlot().setAllowPopupMenus(true);
             ((PlotterRegion) _plotterTrackVertex.region(i)).getPlot().setAllowUserInteraction(true);
             ((PlotterRegion) _plotterTrackVertex.region(i)).getPlot().setAllowPopupMenus(true);
+            if(i==0) {
+                ((PlotterRegion) _plotterTrackMult.region(i)).getPlot().setAllowUserInteraction(true);
+                ((PlotterRegion) _plotterTrackMult.region(i)).getPlot().setAllowPopupMenus(true);
+            }
         }
         
         if(!this.hideFrame) {
             this._plotterParticleVertex.show();
             this._plotterTrackVertex.show();
+            this._plotterTrackMult.show();
         } 
     }
     
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