Print

Print


Author: [log in to unmask]
Date: Thu Jun 11 15:46:51 2015
New Revision: 3141

Log:
Plots, Plots, Plots, Plots Beer

Modified:
    java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java

Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtTrackAnalysis.java	Thu Jun 11 15:46:51 2015
@@ -1,8 +1,10 @@
 package org.hps.users.omoreno;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import hep.aida.IAnalysisFactory;
 import hep.aida.IHistogramFactory;
@@ -10,12 +12,20 @@
 import hep.aida.IPlotter;
 import hep.aida.IHistogram1D;
 import hep.aida.ITree;
-
+import hep.aida.ref.rootwriter.RootFileStore;
+
+import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.LCRelation;
+import org.lcsim.event.RawTrackerHit;
+import org.lcsim.event.RelationalTable;
 import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseRelationalTable;
 import org.lcsim.geometry.Detector;
 import org.lcsim.util.Driver;
 
+import org.hps.recon.tracking.FittedRawTrackerHit;
 import org.hps.recon.tracking.TrackUtils;
 
 /**
@@ -35,11 +45,25 @@
     IHistogramFactory histogramFactory; 
     IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
     protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
-
-    private Map<String, IHistogram1D> trackParameterPlots = new HashMap<String, IHistogram1D>();
-
+    private Map<String, IHistogram1D> trackPlots = new HashMap<String, IHistogram1D>();
+	private Map<String, IHistogram1D> clusterChargePlots = new HashMap<String, IHistogram1D>();
+	private Map<String, IHistogram1D> clusterSizePlots = new HashMap<String, IHistogram1D>();
+
+    private List<HpsSiSensor> sensors;
+    private Map<RawTrackerHit, LCRelation> fittedRawTrackerHitMap 
+        = new HashMap<RawTrackerHit, LCRelation>();
+    
+    // Detector name
+    private static final String SUBDETECTOR_NAME = "Tracker";
+    
+    // Collections
     private String trackCollectionName = "MatchedTracks";
-	
+    private String stereoHitRelationsColName = "HelicalTrackHitRelations";
+    private String fittedHitsCollectionName = "SVTFittedRawTrackerHits";
+    private String rotatedHthRelationsColName = "RotatedHelicalTrackHitRelations";
+
+    private int runNumber = -1; 
+    
 	int npositive = 0;
 	int nnegative = 0;
 	double ntracks = 0;
@@ -47,40 +71,129 @@
 	double ntracksBottom = 0;
 	double nTwoTracks = 0;
 	double nevents = 0;
-	
-
+
+	double d0Cut = -9999;
+	
+	// Flags 
+	boolean electronCut = false;
+	boolean positronCut = false;
+	
     /**
      *  Default Constructor
      */    
 	public SvtTrackAnalysis(){
 	}
-
+	
+	public void setEnableElectronCut(boolean electronCut) {
+	    this.electronCut = electronCut;
+	}
+
+	public void setEnablePositronCut(boolean positronCut) {
+	    this.positronCut = positronCut;
+	}
+
+	public void setD0Cut(double d0Cut) {
+	   this.d0Cut = d0Cut; 
+	}
+	
+	private int computePlotterRegion(HpsSiSensor sensor) {
+
+		if (sensor.getLayerNumber() < 7) {
+			if (sensor.isTopLayer()) {
+				return 6*(sensor.getLayerNumber() - 1); 
+			} else { 
+				return 6*(sensor.getLayerNumber() - 1) + 1;
+			} 
+		} else { 
+		
+			if (sensor.isTopLayer()) {
+				if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+					return 6*(sensor.getLayerNumber() - 7) + 2;
+				} else { 
+					return 6*(sensor.getLayerNumber() - 7) + 3;
+				}
+			} else if (sensor.isBottomLayer()) {
+				if (sensor.getSide() == HpsSiSensor.POSITRON_SIDE) {
+					return 6*(sensor.getLayerNumber() - 7) + 4;
+				} else {
+					return 6*(sensor.getLayerNumber() - 7) + 5;
+				}
+			}
+		}
+		return -1; 
+    }
+	
 	protected void detectorChanged(Detector detector){
 	
         tree = IAnalysisFactory.create().createTreeFactory().create();
         histogramFactory = IAnalysisFactory.create().createHistogramFactory(tree);
+        
+        // Get the HpsSiSensor objects from the tracker detector element
+        sensors = detector.getSubdetector(SUBDETECTOR_NAME)
+                          .getDetectorElement().findDescendants(HpsSiSensor.class);
+   
+        // If the detector element had no sensors associated with it, throw
+        // an exception
+        if (sensors.size() == 0) {
+            throw new RuntimeException("No sensors were found in this detector.");
+        }
+
+        plotters.put("Event Information", plotterFactory.create("Event information"));
+        plotters.get("Event Information").createRegions(2, 3);
+
+        trackPlots.put("Number of tracks", histogramFactory.createHistogram1D("Number of tracks", 10, 0, 10));
+        plotters.get("Event Information").region(0).plot(trackPlots.get("Number of tracks"));
+
+        trackPlots.put("Track charge", histogramFactory.createHistogram1D("Track charge", 3, -1, 2));
+        plotters.get("Event Information").region(1).plot(trackPlots.get("Track charge"));
+
+        trackPlots.put("chi2", histogramFactory.createHistogram1D("chi2", 40, 0, 40));    
+        plotters.get("Event Information").region(2).plot(trackPlots.get("chi2"));
 
         plotters.put("Track Parameters", plotterFactory.create("Track Parameters"));
-        plotters.get("Track Parameters").createRegions(2, 3);
-
-        trackParameterPlots.put("DOCA", histogramFactory.createHistogram1D("DOCA", 80, -80, 80));         
-        plotters.get("Track Parameters").region(0).plot(trackParameterPlots.get("DOCA")); 
+        plotters.get("Track Parameters").createRegions(3, 3);
+
+        trackPlots.put("doca", histogramFactory.createHistogram1D("doca", 80, -10, 10));         
+        plotters.get("Track Parameters").region(0).plot(trackPlots.get("doca")); 
       
-        trackParameterPlots.put("Z0", histogramFactory.createHistogram1D("Z0", 30, -30, 30));    
-        plotters.get("Track Parameters").region(1).plot(trackParameterPlots.get("Z0"));
-
-        trackParameterPlots.put("phi0", histogramFactory.createHistogram1D("phi0", 50, -0.5, 0.5));    
-        plotters.get("Track Parameters").region(2).plot(trackParameterPlots.get("phi0"));
+        trackPlots.put("z0", histogramFactory.createHistogram1D("z0", 80, -2, 2));    
+        plotters.get("Track Parameters").region(1).plot(trackPlots.get("z0"));
+
+        trackPlots.put("sin(phi0)", histogramFactory.createHistogram1D("sin(phi0)", 40, -0.2, 0.2));    
+        plotters.get("Track Parameters").region(2).plot(trackPlots.get("sin(phi0)"));
     
-        trackParameterPlots.put("Curvature", histogramFactory.createHistogram1D("Curvature", 200, -1, 1));    
-        plotters.get("Track Parameters").region(3).plot(trackParameterPlots.get("Curvature"));
-
-        trackParameterPlots.put("Tan(Lambda)", histogramFactory.createHistogram1D("Tan(Lambda)", 100, -1, 1));    
-        plotters.get("Track Parameters").region(4).plot(trackParameterPlots.get("Tan(Lambda)"));
-	
-        trackParameterPlots.put("Chi2", histogramFactory.createHistogram1D("Chi2", 100, 0, 100));    
-        plotters.get("Track Parameters").region(5).plot(trackParameterPlots.get("Chi2"));
-
+        trackPlots.put("curvature", histogramFactory.createHistogram1D("curvature", 50, -0.001, 0.001));    
+        plotters.get("Track Parameters").region(3).plot(trackPlots.get("curvature"));
+
+        trackPlots.put("tan_lambda", histogramFactory.createHistogram1D("tan_lambda", 100, -0.1, 0.1));    
+        plotters.get("Track Parameters").region(4).plot(trackPlots.get("tan_lambda"));
+
+        trackPlots.put("cos(theta)", histogramFactory.createHistogram1D("cos(theta)", 40, -0.1, 0.1));
+        plotters.get("Track Parameters").region(5).plot(trackPlots.get("cos(theta)"));
+        
+        trackPlots.put("cluster time dt", histogramFactory.createHistogram1D("cluster time dt", 100, -20, 20));
+        plotters.get("Track Parameters").region(6).plot(trackPlots.get("cluster time dt"));
+       
+        plotters.put("Cluster Amplitude", plotterFactory.create("Cluster Amplitude"));
+        plotters.get("Cluster Amplitude").createRegions(6, 6);
+        
+        plotters.put("Cluster Size", plotterFactory.create("Cluster Size"));
+        plotters.get("Cluster Size").createRegions(6, 6);
+        
+        
+        for (HpsSiSensor sensor : sensors) { 
+       
+            clusterChargePlots.put(sensor.getName(), 
+                    histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Charge", 100, 0, 5000));
+            plotters.get("Cluster Amplitude").region(this.computePlotterRegion(sensor))
+                                             .plot(clusterChargePlots.get(sensor.getName()));
+            
+            clusterSizePlots.put(sensor.getName(),
+                    histogramFactory.createHistogram1D(sensor.getName() + " - Cluster Size", 10, 0, 10));
+            plotters.get("Cluster Size").region(this.computePlotterRegion(sensor))
+                                                .plot(clusterSizePlots.get(sensor.getName()));
+            
+        }
 
 		//--- Track Extrapolation ---//
 		//---------------------------//	
@@ -99,29 +212,29 @@
         plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
 		nPlotters++;
 
-        plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal: Curvature < 0"));
-        plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal: Curvature < 0",200, -350, 350, 200, -100, 100));
-		plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
-    	plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
-		nPlotters++;
-		
-        plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Harp: Curvature < 0"));
-        plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Harp: Curvature < 0", 200, -200, 200, 100, -50, 50));
-		plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
-    	plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
-		nPlotters++;
-		
-        plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal: Curvature > 0"));
-        plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal: Curvature > 0", 200, -350, 350, 200, -100, 100));
-		plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
-    	plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
-		nPlotters++;
-		
-        plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Harp: Curvature > 0"));
-        plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Harp: Curvature > 0", 200, -200, 200, 100, -50, 50));
+        plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal: curvature < 0"));
+        plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal: curvature < 0",200, -350, 350, 200, -100, 100));
+		plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+    	plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+		nPlotters++;
+		
+        plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Harp: curvature < 0"));
+        plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Harp: curvature < 0", 200, -200, 200, 100, -50, 50));
+		plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+    	plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+		nPlotters++;
+		
+        plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Ecal: curvature > 0"));
+        plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Ecal: curvature > 0", 200, -350, 350, 200, -100, 100));
+		plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
+    	plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+        plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
+		nPlotters++;
+		
+        plotters.add(aida.analysisFactory().createPlotterFactory().create("Track Position at Harp: curvature > 0"));
+        plotters.get(nPlotters).region(0).plot(aida.histogram2D("Track Position at Harp: curvature > 0", 200, -200, 200, 100, -50, 50));
 		plotters.get(nPlotters).region(0).style().setParameter("hist2DStyle", "colorMap");
     	plotters.get(nPlotters).region(0).style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
         plotters.get(nPlotters).style().statisticsBoxStyle().setVisible(false);
@@ -232,48 +345,147 @@
 		}
 	}
 	
-	public void process(EventHeader event){
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+    public void process(EventHeader event){
 		nevents++;
-	
-        /*    
-		if(event.hasCollection(SiTrackerHitStrip1D.class, stripHitCollectionName)){
-			
-			System.out.println("Found Strip Hits!");
-			List<SiTrackerHitStrip1D> stripHits = event.get(SiTrackerHitStrip1D.class, stripHitCollectionName);
-			short[] samples = new short[6];
-			for(SiTrackerHitStrip1D stripHit : stripHits){
-				for(RawTrackerHit rawHit : stripHit.getRawHits()){
-					for(int index = 0; index < samples.length; index++){
-						samples[index] += rawHit.getADCValues()[index];
-					}
-				}
-			}
-		}*/
+
+		// Get the run number from the event
+        if (runNumber == -1) runNumber = event.getRunNumber();
 		
         // If the event doesn't have any tracks, skip it    
 		if(!event.hasCollection(Track.class, trackCollectionName)) return;
     	
         // Get the collection of tracks from the event
         List<Track> tracks = event.get(Track.class, trackCollectionName);
+        
+        // Get the collection of LCRelations between a stereo hit and the strips making it up
+        List<LCRelation> stereoHitRelations = event.get(LCRelation.class, stereoHitRelationsColName);
+        BaseRelationalTable stereoHitToClusters = new BaseRelationalTable(RelationalTable.Mode.MANY_TO_MANY, RelationalTable.Weighting.UNWEIGHTED);
+        for (LCRelation relation : stereoHitRelations) { 
+            if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+                stereoHitToClusters.add(relation.getFrom(), relation.getTo());
+            }
+        }
+        
+        // Get the collection of LCRelations relating RotatedHelicalTrackHits to
+        // HelicalTrackHits
+        List<LCRelation> rotatedHthToHthRelations = event.get(LCRelation.class, rotatedHthRelationsColName);
+        BaseRelationalTable hthToRotatedHth = new BaseRelationalTable(RelationalTable.Mode.ONE_TO_ONE, RelationalTable.Weighting.UNWEIGHTED);
+        for (LCRelation relation : rotatedHthToHthRelations) {
+            if (relation != null && relation.getFrom() != null && relation.getTo() != null) {
+                hthToRotatedHth.add(relation.getFrom(), relation.getTo());
+            }
+        }
+        
+        // Get the list of fitted hits from the event
+        List<LCRelation> fittedHits = event.get(LCRelation.class, fittedHitsCollectionName);
+        
+        // Map the fitted hits to their corresponding raw hits
+        this.mapFittedRawHits(fittedHits);
+       
+        trackPlots.get("Number of tracks").fill(tracks.size());
+        
+        // Loop over all of the tracks in the event
+    	for(Track track : tracks){
+    	    
+    	    if (TrackUtils.getR(track) < 0 && electronCut) continue;
+    	    
+    	    if (TrackUtils.getR(track) > 0 && positronCut) continue;
+    	    
+    	    if (d0Cut != -9999 && Math.abs(TrackUtils.getDoca(track)) < d0Cut) continue;
+    	    
+    	    trackPlots.get("Track charge").fill(TrackUtils.getR(track), 1);
     
-        /*    
-    	Map<Hep3Vector,Track> trackToEcalPosition = new HashMap<Hep3Vector, Track>();
-     	Map<Track, Cluster> trackToCluster = new HashMap<Track, Cluster>();
-    	List<Hep3Vector> ecalPos = new ArrayList<Hep3Vector>();
-    	*/
-
-    	for(Track track : tracks){
-    
-            trackParameterPlots.get("DOCA").fill(TrackUtils.getDoca(track));
-            trackParameterPlots.get("Z0").fill(TrackUtils.getZ0(track));
-            trackParameterPlots.get("phi0").fill(TrackUtils.getPhi0(track));
-            trackParameterPlots.get("Curvature").fill(TrackUtils.getR(track));
-            trackParameterPlots.get("Tan(Lambda)").fill(TrackUtils.getTanLambda(track));
-            trackParameterPlots.get("Chi2").fill(track.getChi2());
-
-        }
+    	    // Fill the track parameter plots
+            trackPlots.get("doca").fill(TrackUtils.getDoca(track));
+            trackPlots.get("z0").fill(TrackUtils.getZ0(track));
+            trackPlots.get("sin(phi0)").fill(TrackUtils.getPhi0(track));
+            trackPlots.get("curvature").fill(TrackUtils.getR(track));
+            trackPlots.get("tan_lambda").fill(TrackUtils.getTanLambda(track));
+            trackPlots.get("cos(theta)").fill(TrackUtils.getCosTheta(track));
+            trackPlots.get("chi2").fill(track.getChi2());
+
+            for (TrackerHit rotatedStereoHit : track.getTrackerHits()) { 
+             
+                // Get the HelicalTrackHit corresponding to the RotatedHelicalTrackHit
+                // associated with a track
+                Set<TrackerHit> clusters = stereoHitToClusters.allFrom(hthToRotatedHth.from(rotatedStereoHit));
+                
+                int clusterIndex = 0;
+                double clusterTimeDt = 0;
+                for (TrackerHit cluster : clusters) { 
+                    
+                    if (clusterIndex == 0) { 
+                        clusterTimeDt += cluster.getTime();
+                        clusterIndex++;
+                    } else { 
+                        clusterTimeDt -= cluster.getTime();
+                    }
+                    
+                    double amplitude = 0;
+                    HpsSiSensor sensor = null;
+                    for (Object rawHitObject : cluster.getRawHits()) {
+                        RawTrackerHit rawHit = (RawTrackerHit) rawHitObject; 
+                        
+                        sensor = (HpsSiSensor) rawHit.getDetectorElement();
+                        
+                        // Get the channel of the raw hit
+                        //int channel = rawHit.getIdentifierFieldValue("strip");
+                
+                        // Add the amplitude of that channel to the total amplitude
+                        amplitude += FittedRawTrackerHit.getAmp(this.getFittedHit(rawHit));
+                    }
+                    
+                    clusterChargePlots.get(sensor.getName()).fill(amplitude);
+                    clusterSizePlots.get(sensor.getName()).fill(cluster.getRawHits().size());
+                }
+                
+                trackPlots.get("cluster time dt").fill(clusterTimeDt);
+            }
+        }
+    }
+	
+	public void endOfData() { 
+        
+        String rootFile = "run" + runNumber + "_track_analysis.root";
+        RootFileStore store = new RootFileStore(rootFile);
+        try {
+            store.open();
+            store.add(tree);
+            store.close(); 
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     *  Method that creates a map between a fitted raw hit and it's corresponding raw fit
+     *  
+     * @param fittedHits : List of fitted hits to map
+     */
+    private void mapFittedRawHits(List<LCRelation> fittedHits) { 
+        
+        // Clear the fitted raw hit map of old values
+        fittedRawTrackerHitMap.clear();
+       
+        // Loop through all fitted hits and map them to their corresponding raw hits
+        for (LCRelation fittedHit : fittedHits) { 
+            fittedRawTrackerHitMap.put(FittedRawTrackerHit.getRawTrackerHit(fittedHit), fittedHit);
+        }
+    }
+	
+    /**
+     * 
+     * @param rawHit
+     * @return
+     */
+    private LCRelation getFittedHit(RawTrackerHit rawHit) { 
+        return fittedRawTrackerHitMap.get(rawHit);
     }
 }
+
+
+
 
             /*
             ntracks++;
@@ -296,15 +508,15 @@
     		aida.histogram1D("ChiSquared").fill(track.getChi2());
     		
     		if(Math.signum(TrackUtils.getR(track)) < 0){
-    			aida.histogram2D("Track Position at Ecal: Curvature < 0").fill(positionEcal.y(), positionEcal.z());
-    			aida.histogram2D("Track Position at Harp: Curvature < 0").fill(positionConverter.y(), positionConverter.z());
+    			aida.histogram2D("Track Position at Ecal: curvature < 0").fill(positionEcal.y(), positionEcal.z());
+    			aida.histogram2D("Track Position at Harp: curvature < 0").fill(positionConverter.y(), positionConverter.z());
         		aida.histogram1D("Px: C < 0").fill(track.getTrackStates().get(0).getMomentum()[0]);
         		aida.histogram1D("Py: C < 0").fill(track.getTrackStates().get(0).getMomentum()[1]);
         		aida.histogram1D("Pz: C < 0").fill(track.getTrackStates().get(0).getMomentum()[2]);
         		nnegative++;
     		} else if(Math.signum(TrackUtils.getR(track)) > 0){
-    			aida.histogram2D("Track Position at Ecal: Curvature > 0").fill(positionEcal.y(), positionEcal.z());
-    			aida.histogram2D("Track Position at Harp: Curvature > 0").fill(positionConverter.y(), positionConverter.z());
+    			aida.histogram2D("Track Position at Ecal: curvature > 0").fill(positionEcal.y(), positionEcal.z());
+    			aida.histogram2D("Track Position at Harp: curvature > 0").fill(positionConverter.y(), positionConverter.z());
         		aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[0]);
         		aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[1]);
         		aida.histogram1D("Px: C > 0").fill(track.getTrackStates().get(0).getMomentum()[2]);
@@ -373,3 +585,5 @@
     	System.out.println("Number of bottom tracks per event: " + tracksBottomRatio);
     	System.out.println("Number of two track events: " + twoTrackRatio);
 	}*/
+
+