Author: [log in to unmask]
Date: Tue Jun 16 18:01:21 2015
New Revision: 3149
Log:
Starting to update so it works with engineering run detector. Currently, it's a mess ....
Modified:
java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitEfficiency.java
Modified: java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitEfficiency.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitEfficiency.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/omoreno/SvtHitEfficiency.java Tue Jun 16 18:01:21 2015
@@ -11,7 +11,6 @@
import hep.aida.IPlotter;
import hep.aida.IHistogram1D;
import hep.aida.ITree;
-
import hep.physics.vec.BasicHep3Vector;
import hep.physics.vec.Hep3Vector;
import hep.physics.vec.VecOp;
@@ -27,12 +26,12 @@
import org.lcsim.detector.tracker.silicon.SiSensor;
import org.lcsim.detector.tracker.silicon.SiStrips;
import org.lcsim.event.EventHeader;
+import org.lcsim.event.ReconstructedParticle;
import org.lcsim.event.Track;
import org.lcsim.event.TrackerHit;
import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.geometry.Detector;
import org.lcsim.util.Driver;
-
import org.hps.recon.tracking.TrackUtils;
import org.hps.recon.tracking.TrackerHitUtils;
@@ -56,11 +55,12 @@
IHistogramFactory histogramFactory;
IPlotterFactory plotterFactory = IAnalysisFactory.create().createPlotterFactory();
protected Map<String, IPlotter> plotters = new HashMap<String, IPlotter>();
-
private Map<String, IHistogram1D> trackMomentumPlots = new HashMap<String, IHistogram1D>();
+ private Map<String, IHistogram1D> trackPlots = new HashMap<String, IHistogram1D>();
//private Map<SiSensor, Map<Integer, Hep3Vector>> stripPositions = new HashMap<SiSensor, Map<Integer, Hep3Vector>>();
private List<HpsSiSensor> sensors = null;
+ private Map<Track, ReconstructedParticle> reconParticleMap = new HashMap<Track, ReconstructedParticle>();
private Map<Integer, SvtStereoLayer> topStereoLayers = new HashMap<Integer, SvtStereoLayer>();
private Map<Integer, SvtStereoLayer> bottomStereoLayers = new HashMap<Integer, SvtStereoLayer>();
@@ -90,6 +90,7 @@
// Collections
private String trackCollectionName = "MatchedTracks";
+ private String fsParticlesCollectionName = "FinalStateParticles";
private String stereoHitCollectionName = "HelicalTrackHits";
private String ecalClustersCollectionName = "EcalClusters";
@@ -164,19 +165,25 @@
ICloud2D cloud2D = null;
*/
- if (enableMomentumPlots) {
-
- plotters.put("Track Momentum", plotterFactory.create("Track Momentum"));
- plotters.get("Track Momentum").createRegions(1, 2);
-
- trackMomentumPlots.put("Track Momentum", histogramFactory.createHistogram1D("Track Momentum", 50, 0, 5));
- plotters.get("Track Momentum").region(0).plot(trackMomentumPlots.get("Track Momentum"));
+ 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("Unused Layer", histogramFactory.createHistogram1D("Unused Layer", 6, 1, 7));
+ plotters.get("Event Information").region(1).plot(trackPlots.get("Unused Layer"));
+
+ plotters.put("Track Momentum", plotterFactory.create("Track Momentum"));
+ plotters.get("Track Momentum").createRegions(1, 2);
+
+ trackMomentumPlots.put("Track Momentum", histogramFactory.createHistogram1D("Track Momentum", 50, 0, 1.5));
+ plotters.get("Track Momentum").region(0).plot(trackMomentumPlots.get("Track Momentum"));
- trackMomentumPlots.put("Track Momentum - Tracks Within Acceptance",
- histogramFactory.createHistogram1D("Track Momentum - Tracks Within Acceptance", 50, 0, 5));
- plotters.get("Track Momentum").region(0)
- .plot(trackMomentumPlots.get("Track Momentum - Tracks Within Acceptance"));
- }
+ trackMomentumPlots.put("Track Momentum - Tracks Within Acceptance",
+ histogramFactory.createHistogram1D("Track Momentum - Tracks Within Acceptance", 50, 0, 1.5));
+ plotters.get("Track Momentum").region(0)
+ .plot(trackMomentumPlots.get("Track Momentum - Tracks Within Acceptance"));
// Create a Map from sensor to bad channels and from bad channels to
// strip position
@@ -274,17 +281,6 @@
return stripPositions.get(sensor).get(physicalChannel);
}*/
- /**
- * Print a debug message if they are enabled.
- *
- * @param debugMessage : message to be printed
- */
- private void printDebug(String debugMessage){
- if(debug){
- System.out.println(this.getClass().getSimpleName() + ": " + debugMessage);
- }
- }
-
public void process(EventHeader event){
// If the event does not have tracks, skip it
@@ -293,7 +289,16 @@
// Get the list of tracks from the event
List<Track> tracks = event.get(Track.class, trackCollectionName);
- if(tracks.size() >= 2 ) return;
+ // For now, only look at events with a single track
+ if(tracks.size() != 1 ) return;
+
+ // Get the list of final state particles from the event. These will
+ // be used to obtain the track momentum.
+ List<ReconstructedParticle> fsParticles = event.get(ReconstructedParticle.class, fsParticlesCollectionName);
+
+ this.mapReconstructedParticlesToTracks(tracks, fsParticles);
+
+ trackPlots.get("Number of tracks").fill(tracks.size());
// Get the list of Ecal clusters from the event
//List<Cluster> ecalClusters = event.get(Cluster.class, ecalClustersCollectionName);
@@ -308,23 +313,21 @@
}
// Calculate the momentum of the track
- double momentum = (new BasicHep3Vector(track.getTrackStates().get(0).getMomentum())).magnitude();
-
- if (enableMomentumPlots) {
- trackMomentumPlots.get("Track Momentum").fill(momentum);
- }
-
+ double p = this.getReconstructedParticle(track).getMomentum().magnitude();
+
+ trackMomentumPlots.get("Track Momentum").fill(p);
+
// Find which of the layers isn't being used in the track fit
int unusedLayer = this.getUnusedSvtLayer(track.getTrackerHits());
+
+ trackPlots.get("Unused Layer").fill(unusedLayer);
// Extrapolate the track to the unused layer and check that it lies
// within the acceptance of that layer. If it doesn't, move on
// to the next event
- if(!isWithinAcceptance(track, unusedLayer)) continue;
-
- if (enableMomentumPlots) {
- trackMomentumPlots.get("Track Momentum - Tracks Within Acceptance").fill(momentum);
- }
+ //if(!isWithinAcceptance(track, unusedLayer)) continue;
+
+ trackMomentumPlots.get("Track Momentum - Tracks Within Acceptance").fill(p);
//ecalClusterTrackMatch = false;
// Check if there is an Ecal cluster in the same detector volume as the track
@@ -417,13 +420,35 @@
int[] svtLayer = new int[6];
for (TrackerHit hit : hits) {
- HelicalTrackHit stereoHit = (HelicalTrackHit) hit;
- int layer = (stereoHit.Layer() - 1)/2;
- svtLayer[layer]++;
+
+ int layer = -1;
+ switch ((int) Math.floor(hit.getPosition()[0])/100) {
+ case 1:
+ layer = 1;
+ break;
+ case 2:
+ layer = 2;
+ break;
+ case 3:
+ layer = 3;
+ break;
+ case 5:
+ layer = 4;
+ break;
+ case 7:
+ layer = 5;
+ break;
+ case 9:
+ layer = 6;
+ break;
+ default:
+ throw new RuntimeException("Layer not found");
+ }
+ svtLayer[layer - 1]++;
}
for(int layer = 0; layer < svtLayer.length; layer++){
- if(svtLayer[layer] == 0) return (2*layer + 1);
+ if(svtLayer[layer] == 0) return layer;
}
return -1;
@@ -477,13 +502,13 @@
//--------------------------------------------------------------------------//
//Rotate the track position to the JLab coordinate system
- this.printDebug("Track position in tracking frame: " + trackPosition.toString());
+ //this.printDebug("Track position in tracking frame: " + trackPosition.toString());
Hep3Vector trackPositionDet = VecOp.mult(VecOp.inverse(this.trackerHitUtils.detToTrackRotationMatrix()), trackPosition);
- this.printDebug("Track position in JLab frame " + trackPositionDet.toString());
+ //this.printDebug("Track position in JLab frame " + trackPositionDet.toString());
// Rotate the track to the sensor coordinates
ITransform3D globalToLocal = sensor.getReadoutElectrodes(ChargeCarrier.HOLE).getGlobalToLocal();
globalToLocal.transform(trackPositionDet);
- this.printDebug("Track position in sensor electrodes frame " + trackPositionDet.toString());
+ //this.printDebug("Track position in sensor electrodes frame " + trackPositionDet.toString());
// Find the closest channel to the track position
double deltaY = Double.MAX_VALUE;
@@ -516,7 +541,7 @@
if(sensor.isBadChannel(intersectingChannel)
|| sensor.isBadChannel(intersectingChannel+1)
|| sensor.isBadChannel(intersectingChannel-1)){
- this.printDebug("Track intersects a bad channel!");
+ //this.printDebug("Track intersects a bad channel!");
return false;
}
}
@@ -619,4 +644,21 @@
}*/
System.out.println("% \n%===================================================================%");
}
+
+ private void mapReconstructedParticlesToTracks(List<Track> tracks, List<ReconstructedParticle> particles) {
+
+ reconParticleMap.clear();
+ for (ReconstructedParticle particle : particles) {
+ for (Track track : tracks) {
+ if (!particle.getTracks().isEmpty() && particle.getTracks().get(0) == track) {
+ reconParticleMap.put(track, particle);
+ }
+ }
+ }
+ }
+
+ private ReconstructedParticle getReconstructedParticle(Track track) {
+ return reconParticleMap.get(track);
+ }
+
}
|