Commit in hps-java/src/main on MAIN | |||
java/org/lcsim/hps/examples/StarterAnalysisDriver.java | +61 | -30 | 1.2 -> 1.3 |
java/org/lcsim/hps/users/meeg/LCIOTrackAnalysis.java | +68 | -55 | 1.1 -> 1.2 |
resources/org/lcsim/hps/steering/StarterAnalysis.lcsim | +10 | -7 | 1.1 -> 1.2 |
+139 | -92 |
add some histograms and clean up
diff -u -r1.2 -r1.3 --- StarterAnalysisDriver.java 8 Feb 2013 02:59:40 -0000 1.2 +++ StarterAnalysisDriver.java 8 Feb 2013 22:00:14 -0000 1.3 @@ -1,5 +1,8 @@
package org.lcsim.hps.examples;
+import hep.aida.IHistogram1D; +import hep.aida.IHistogram2D; +import java.util.ArrayList;
import java.util.List; import org.lcsim.event.EventHeader; import org.lcsim.event.LCRelation;
@@ -9,13 +12,15 @@
import org.lcsim.event.TrackerHit; import org.lcsim.event.base.BaseRelationalTable; import org.lcsim.event.base.BaseTrackState;
+import org.lcsim.geometry.Detector;
import org.lcsim.hps.users.meeg.LCIOTrackAnalysis; import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
/* * Example analysis driver. * @author Sho Uemura <[log in to unmask]>
- * @version $Id: StarterAnalysisDriver.java,v 1.2 2013/02/08 02:59:40 meeg Exp $
+ * @version $Id: StarterAnalysisDriver.java,v 1.3 2013/02/08 22:00:14 meeg Exp $
*/ public class StarterAnalysisDriver extends Driver {
@@ -23,15 +28,63 @@
int naccepted = 0; private boolean debug = false; private double bfield = 0.5;
+ private AIDA aida = AIDA.defaultInstance(); + IHistogram1D trkPz; + IHistogram2D trkMC; + + @Override + protected void detectorChanged(Detector detector) { + trkPz = aida.histogram1D("Track momentum (Pz)", 50, 0, 10.0); + trkMC = aida.histogram2D("Track momentum vs. MCParticle momentum (Pz)", 50, 0, 10.0, 50, 0, 10.0); + }
@Override public void process(EventHeader event) { nevents++;
- List<Track> tracklist = event.get(Track.class, "MatchedTracks"); - if (tracklist.size() < 2) { - return;
+ + List<LCIOTrackAnalysis> tkanalList = processTracks(event); + + //only look at events with 2 or more tracks +// if (tkanalList.size() < 2) { +// return; +// } + +// System.out.println("Event with " + tkanalList.size() + " tracks"); + + int ok = 0; + for (LCIOTrackAnalysis tkanal : tkanalList) { //remember, these tracks are in the lcsim tracking frame! + Track track = tkanal.getTrack(); + BaseTrackState ts = (BaseTrackState) track.getTrackStates().get(0); +// ts.computeMomentum(bfield); + trkPz.fill(ts.getMomentum()[0]); +// BaseTrackState.computeMomentum(track.getTrackStates().get(0), 0.5); + MCParticle mcp = tkanal.getMCParticle(); + if (mcp != null) { + System.out.println("chisq: " + track.getChi2() + ", track pz: " + ts.getMomentum()[0] + ", MC momentum: " + mcp.getMomentum()); + trkMC.fill(ts.getMomentum()[0], mcp.getPZ()); + if (Math.abs(tkanal.getMCParticle().getPDGID()) == 611) { + ok++; + } + //do some stuff to makes sure tracks are great + //is there an e+e- from the muonium + } + } + + if (ok == 2) { + naccepted++;
}
- System.out.println("Event with "+tracklist.size()+" tracks");
+ } + + @Override + public void endOfData() { + + System.out.println("# of muonium events= " + naccepted + "; # of total = " + nevents); + } + + private List<LCIOTrackAnalysis> processTracks(EventHeader event) { + List<LCIOTrackAnalysis> tkanalList = new ArrayList<LCIOTrackAnalysis>(); + + List<Track> tracklist = event.get(Track.class, "MatchedTracks");
if (debug) { List<List<TrackerHit>> hitlists = event.get(TrackerHit.class);
@@ -88,29 +141,12 @@
} }
- - - int ok = 0;
for (Track track : tracklist) { //remember, these tracks are in the lcsim tracking frame! BaseTrackState ts = (BaseTrackState) track.getTrackStates().get(0);
- ts.computeMomentum(0.5); -// BaseTrackState.computeMomentum(track.getTrackStates().get(0), 0.5); - LCIOTrackAnalysis tkanal = new LCIOTrackAnalysis(track, hittomc, hittostrip, hittorotated); - MCParticle mcp = tkanal.getMCParticle(); - if (mcp != null) { - System.out.println("chisq: " + track.getChi2() + ", pz: " + ts.getMomentum()[0] + ", momentum: " + mcp.getMomentum()); - if (Math.abs(tkanal.getMCParticle().getPDGID()) == 611) { - ok++; - } - //do some stuff to makes sure tracks are great - //is there an e+e- from the muonium - } - } - - if (ok == 2) { - naccepted++;
+ ts.computeMomentum(bfield); + tkanalList.add(new LCIOTrackAnalysis(track, hittomc, hittostrip, hittorotated));
}
-
+ return tkanalList;
} public void setDebug(boolean debug) {
@@ -120,9 +156,4 @@
public void setBfield(double bfield) { this.bfield = bfield; }
- - public void endOfData() { - - System.out.println("# of muonium events= " + naccepted + "; # of total = " + nevents); - }
}
diff -u -r1.1 -r1.2 --- LCIOTrackAnalysis.java 8 Feb 2013 02:59:40 -0000 1.1 +++ LCIOTrackAnalysis.java 8 Feb 2013 22:00:14 -0000 1.2 @@ -3,10 +3,13 @@
import hep.physics.vec.BasicHep3Vector; import hep.physics.vec.Hep3Vector; import java.util.HashMap;
+import java.util.List;
import java.util.Map; import java.util.Set;
+import org.lcsim.detector.identifier.IIdentifier;
import org.lcsim.detector.identifier.Identifier; import org.lcsim.event.MCParticle;
+import org.lcsim.event.RawTrackerHit;
import org.lcsim.event.RelationalTable; import org.lcsim.event.Track; import org.lcsim.event.TrackerHit;
@@ -15,93 +18,91 @@
/** * * @author Sho Uemura <[log in to unmask]>
- * @version $Id: LCIOTrackAnalysis.java,v 1.1 2013/02/08 02:59:40 meeg Exp $
+ * @version $Id: LCIOTrackAnalysis.java,v 1.2 2013/02/08 22:00:14 meeg Exp $
*/ public class LCIOTrackAnalysis {
+ protected Track track;
protected MCParticle _mcp = null; protected double _purity; protected int _nhits; protected int _nbadhits;
+ private int _nAxialhits; + private int _nZhits;
protected boolean _hasLayerOne;
+ private int[] _nStripHitsPerLayer = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
protected Map<Integer, Hep3Vector> _hitLocationPerLayer = new HashMap<Integer, Hep3Vector>(); protected int _nhitsNew;
+ public Track getTrack() { + return track; + } +
public LCIOTrackAnalysis(Track trk, RelationalTable hittomc, RelationalTable hittostrip, RelationalTable hittorotated) {
+ track = trk; +
// Get the number of hits on the track _nhits = trk.getTrackerHits().size(); // Create a map containing the number of hits for each MCParticle associated with the track Map<MCParticle, Integer> mcmap = new HashMap<MCParticle, Integer>(); _hasLayerOne = false;
- // Loop over the hits on the track and make sure we have HelicalTrackHits (which contain the MC particle)
+ // Loop over the hits on the track (HelicalTrackHits)
for (TrackerHit rotatedHit : trk.getTrackerHits()) { TrackerHit hit = (TrackerHit) hittorotated.from(rotatedHit);
-// System.out.println(hit);
// get the set of MCParticles associated with this hit and update the hit count for each MCParticle
- MCParticle mcp = (MCParticle) hittomc.to(hit); -// Set<MCParticle> mclist = hittomc.allTo(hit); -// System.out.println(mclist.size()); -// for (MCParticle mcp : mclist) { - if (mcp != null) {
+ Set<MCParticle> mclist = hittomc.allFrom(hit); +// System.out.println("MCParticle count: " + mclist.size()); + for (MCParticle mcp : mclist) { + if (mcp != null) {
// System.out.println(mcp.getOrigin());
- Integer mchits = 0; - if (mcmap.containsKey(mcp)) { - mchits = mcmap.get(mcp);
+ Integer mchits = 0; + if (mcmap.containsKey(mcp)) { + mchits = mcmap.get(mcp); + } + mchits++; + mcmap.put(mcp, mchits);
}
- mchits++; - mcmap.put(mcp, mchits);
}
-// } - -// BasicHep3Vector axial = new BasicHep3Vector(); -// axial.setV(0, 1, 0);
- - Set<TrackerHit> hitlist = hittostrip.allTo(hit);
+ Set<TrackerHit> hitlist = hittostrip.allFrom(hit);
for (TrackerHit cl : hitlist) {
- int layer = SvtUtils.getInstance().getHelper().getValue(new Identifier(cl.getCellID()), "layer"); - System.out.println(layer);
+ int layer = -1; + int module = -1; + List<RawTrackerHit> rawHits = cl.getRawHits(); +// System.out.println("RawHits: " + rawHits.size()); + for (RawTrackerHit rawHit : rawHits) { +// System.out.println(rawHit.getCellID()); + IIdentifier id = new Identifier(rawHit.getCellID()); + int newLayer = SvtUtils.getInstance().getHelper().getValue(id, "layer"); + if (layer != -1 && layer != newLayer) { + System.out.format("TrackerHit has hits from multiple layers: %d and %d\n", layer, newLayer); + } + layer = newLayer; + int newModule = SvtUtils.getInstance().getHelper().getValue(id, "module"); + if (module != -1 && module != newModule) { + System.out.format("TrackerHit has hits from multiple modules: %d and %d\n", module, newModule); + } + module = newModule; +// System.out.println(SvtUtils.getInstance().getHelper().getValue(id, "strip")); + } +// System.out.format("layer %d, module %d\n", layer, module);
if (layer == 1) { _hasLayerOne = true; }
-// _nStripHitsPerLayer[layer - 1] = cl.rawhits().size();
+ + _nStripHitsPerLayer[layer - 1] = rawHits.size();
_hitLocationPerLayer.put(layer, new BasicHep3Vector(cl.getPosition())); _nhitsNew++;
-// double axdotu = VecOp.dot(cl.u(), axial); -// boolean isAxial = false; -// if (axdotu > 0.5) { -// isAxial = true; -// _nAxialhits++; -// } else { -// _nZhits++; -// } -// List<MCParticle> mcPartList = cl.MCParticles(); -// _nMCHitsPerLayer[layer - 1] = mcPartList.size(); -// for (MCParticle mcp : mcPartList) { -// Integer mchits = 0; -// if (mcmapAll.containsKey(mcp)) { -// mchits = mcmapAll.get(mcp); -// } -// mchits++; -// mcmapAll.put(mcp, mchits); -// if (isAxial) { -// Integer mchitsAxial = 0; -// if (mcmapAxial.containsKey(mcp)) { -// mchitsAxial = mcmapAxial.get(mcp); -// } -// mchitsAxial++; -// mcmapAxial.put(mcp, mchitsAxial); -// } else { -// Integer mchitsZ = 0; -// if (mcmapZ.containsKey(mcp)) { -// mchitsZ = mcmapZ.get(mcp); -// } -// mchitsZ++; -// mcmapZ.put(mcp, mchitsZ); -// } -// }
+ + boolean isAxial = SvtUtils.getInstance().isAxial(SvtUtils.getInstance().getSensor(module, layer)); + if (isAxial) { + _nAxialhits++; + } else { + _nZhits++; + + }
} }
@@ -144,6 +145,14 @@
return _nhitsNew; }
+ public int getNAxialHits() { + return _nAxialhits; + } + + public int getNZHits() { + return _nZhits; + } +
public boolean hasLayerOne() { return _hasLayerOne; }
@@ -151,4 +160,8 @@
public Hep3Vector getClusterPosition(Integer layer) { return _hitLocationPerLayer.get(layer); }
+ + public int getNumberOfStripHits(int layer) { + return _nStripHitsPerLayer[layer - 1]; + }
}
diff -u -r1.1 -r1.2 --- StarterAnalysis.lcsim 8 Feb 2013 02:59:40 -0000 1.1 +++ StarterAnalysis.lcsim 8 Feb 2013 22:00:14 -0000 1.2 @@ -1,29 +1,32 @@
<!-- Example steering file for analysis. @author Sho Uemura <[log in to unmask]>
- @version $Id: StarterAnalysis.lcsim,v 1.1 2013/02/08 02:59:40 meeg Exp $
+ @version $Id: StarterAnalysis.lcsim,v 1.2 2013/02/08 22:00:14 meeg Exp $
--> <lcsim xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="http://www.lcsim.org/schemas/lcsim/1.0/lcsim.xsd"> <execute> <driver name="EventMarkerDriver"/>
-
+ <driver name="HPSCalibrationDriver"/> +
<driver name="StarterAnalysisDriver"/>
-<!-- <driver name="AidaSaveDriver"/>-->
+ <driver name="AidaSaveDriver"/>
</execute> <drivers> <driver name="EventMarkerDriver" type="org.lcsim.job.EventMarkerDriver"> <eventInterval>1000</eventInterval> </driver>
+ + <driver name="HPSCalibrationDriver" type="org.lcsim.hps.monitoring.HPSCalibrationDriver"/> +
<driver name="StarterAnalysisDriver" type="org.lcsim.hps.examples.StarterAnalysisDriver"> </driver>
- <driver name="AidaSaveDriver" - type="org.lcsim.job.AidaSaveDriver"> - <outputFileName>${outputFile}</outputFileName> - </driver>
+ <driver name="AidaSaveDriver" type="org.lcsim.job.AidaSaveDriver"> + <outputFileName>${outputFile}</outputFileName> + </driver>
</drivers> </lcsim>
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