hps-java/src/main/java/org/lcsim/hps/users/phansson
diff -u -r1.6 -r1.7
--- TwoTrackAnlysis.java 19 Jan 2013 00:55:04 -0000 1.6
+++ TwoTrackAnlysis.java 13 Feb 2013 18:52:10 -0000 1.7
@@ -33,6 +33,8 @@
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;
import org.lcsim.util.aida.AIDA;
@@ -46,6 +48,7 @@
private FileWriter fileWriter;
private PrintWriter printWriter;
private String outputNameTextTuple = "twotrackAnlysisTuple.txt";
+ private String trackCollectionName = "MatchedTracks";
private boolean doPrintBranchInfoLine = true; //firs tline in text file
private AIDA aida = AIDA.defaultInstance();
private int totalEvents=0;
@@ -57,6 +60,8 @@
private String ecalClusterCollectionName = "EcalClusters";
private String stereoHitCollectionName = "RotatedHelicalTrackHits";
private String triggerDecisionCollectionName = "TriggerBank";
+ private String MCParticleCollectionName = "MCParticle";
+ private String _stripClusterCollectionName = "HelicalTrackStrips";
private boolean _debug;
private TwoTrackVertexer vertexer = new TwoTrackVertexer();
private TwoParticleVertexer particleVertexer = new TwoParticleVertexer();
@@ -110,6 +115,10 @@
hideFrame = hide;
}
+ public void setTrackCollectionName(String name) {
+ trackCollectionName = name;
+ }
+
public TwoTrackAnlysis() {
@@ -137,8 +146,9 @@
@Override
public void process(EventHeader event) {
- if(this._debug) System.out.println(this.getClass().getSimpleName() + ": processing event "+totalEvents);
-
+ //if(this._debug)
+ System.out.println(this.getClass().getSimpleName() + ": processing event " + totalEvents + " which has event nr " + event.getEventNumber());
+
@@ -156,40 +166,75 @@
List<Track> tracklist = null;
- if(event.hasCollection(Track.class,"MatchedTracks")) {
- tracklist = event.get(Track.class, "MatchedTracks");
+ 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());
}
+ } else {
+ if(_debug) {
+ System.out.println(this.getClass().getSimpleName() + ": No track collection in event " + event.getEventNumber());
+ }
+ return;
+ }
+
+
+ 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()!=2) {
+ return;
+ }
+
+
+ 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;
+ }
+ }
//DEBUG
- {
- for(Track trk : tracklist) {
- SeedTrack st1 = (SeedTrack) trk;
- HelicalTrackFit helix = st1.getSeedCandidate().getHelix();
- for(TrackerHit hit: trk.getTrackerHits()) {
- HelicalTrackHit hth = (HelicalTrackHit) hit;
- Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hth, helix, true);
- //DEBUG histos
- if(hth.Layer()==1) {
+ //if(_debug) {
+ {
+
+ if(_debug) {
+ System.out.println(this.getClass().getSimpleName() + ": fill some debug hists for event " + event.getEventNumber());
+ }
+ for(int i=0;i<tracklist.size();++i) {
+ Track trk = tracklist.get(i);
+ SeedTrack st1 = (SeedTrack) trk;
+ HelicalTrackFit helix = st1.getSeedCandidate().getHelix();
+ HashMap<Integer,HelicalTrackHit> hits = this.getHitMap(trk.getTrackerHits(),helix);
+ if(i==0) {
+ Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hits.get(1), helix, true);
_trk1_res1_z_all.fill(res.get("resz"));
_trk1_res1_y_all.fill(res.get("resy"));
- }
- if(hth.Layer()==3) {
+ res = TrackUtils.calculateTrackHitResidual(hits.get(3), helix, true);
_trk1_res2_z_all.fill(res.get("resz"));
_trk1_res2_y_all.fill(res.get("resy"));
}
+ if(i==1) {
+ Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hits.get(1), helix, true);
+ _trk2_res1_z_all.fill(res.get("resz"));
+ _trk2_res1_y_all.fill(res.get("resy"));
+ res = TrackUtils.calculateTrackHitResidual(hits.get(3), helix, true);
+ _trk2_res2_z_all.fill(res.get("resz"));
+ _trk2_res2_y_all.fill(res.get("resy"));
+ }
}
}
- }
+ //}
- if(tracklist.size()!=2) {
- return;
- }
Track trk1 = tracklist.get(0);
@@ -205,20 +250,31 @@
return;
}
+ if(vtxPos.x()>50.) {
+ System.out.printf("%s: vtxPos_x = %.3f for event %d\n",this.getClass().getSimpleName(),vtxPos.x(),event.getEventNumber());
+ }
-
+
+ if(!event.hasCollection(HPSEcalCluster.class, ecalClusterCollectionName)) {
+ if(_debug) {
+ System.out.println(this.getClass().getSimpleName() + ": event doesn't have a ecal cluster collection ");
+ }
+ }
List<HPSEcalCluster> clusters = event.get(HPSEcalCluster.class, ecalClusterCollectionName);
+ if(_debug) {
+ System.out.println(this.getClass().getSimpleName() + ": found " + clusters.size() + " ecal clusters " + event.getEventNumber());
+ }
Hep3Vector vtxPosMC = null;
MCParticle electron=null;
MCParticle positron=null;
- if(event.hasCollection(MCParticle.class)) {
+ if(event.hasCollection(MCParticle.class,this.MCParticleCollectionName)) {
totalMCEvents++;
- List<MCParticle> mcparticles = event.get(MCParticle.class).get(0);
+ List<MCParticle> mcparticles = event.get(MCParticle.class,this.MCParticleCollectionName);
List<MCParticle> fsParticles = HPSMCParticlePlotsDriver.makeGenFSParticleList(mcparticles);
for(MCParticle part : fsParticles) {
@@ -240,17 +296,17 @@
}
}
}
- if(electron!=null && positron!=null) {
- this.particleVertexer.setParticle(electron, positron);
- vtxPosMC = this.particleVertexer.getVertex();
- if(this._debug) System.out.printf("%s: vtxPosMC=%s\n", this.getClass().getSimpleName(),vtxPosMC.toString());
- this._partvtxpos_xy.fill(vtxPosMC.x(), vtxPosMC.y());
- this._partvtxpos_x.fill(vtxPosMC.x());
- this._partvtxpos_y.fill(vtxPosMC.y());
- this._partvtxpos_z.fill(vtxPosMC.z());
- totalTwoTrackMCEvents++;
- }
+ }
+ if(electron!=null && positron!=null) {
+ this.particleVertexer.setParticle(electron, positron);
+ vtxPosMC = this.particleVertexer.getVertex();
+ if(this._debug) System.out.printf("%s: vtxPosMC=%s\n", this.getClass().getSimpleName(),vtxPosMC.toString());
+ this._partvtxpos_xy.fill(vtxPosMC.x(), vtxPosMC.y());
+ this._partvtxpos_x.fill(vtxPosMC.x());
+ this._partvtxpos_y.fill(vtxPosMC.y());
+ this._partvtxpos_z.fill(vtxPosMC.z());
+ totalTwoTrackMCEvents++;
}
}
@@ -340,22 +396,24 @@
br_line+="trk1_res"+iLayer+"_x/F:"+"trk1_res"+iLayer+"_y/F:"+"trk1_res"+iLayer+"_z/F:";
br_line+="trk1_eres"+iLayer+"_x/F:"+"trk1_eres"+iLayer+"_y/F:"+"trk1_eres"+iLayer+"_z/F:";
br_line+="trk1_drdphi"+iLayer+"/F:"+"trk1_msdrphi"+iLayer+"/F:";
- br_line+="trk1_dr"+iLayer+"/F:"+"trk1_slope"+iLayer+"/F:";
-
+ br_line+="trk1_dz"+iLayer+"/F:"+"trk1_msdz"+iLayer+"/F:";
+ //br_line+="trk1_ures"+iLayer+"/F:"+"trk1_ureserr"+iLayer+"/F:";
}
for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk1_strip"+iLayer+"_u/F:";
- for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk1_strip"+iLayer+"_n/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:";
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:";
for(int iLayer=1;iLayer<=5;++iLayer) {
br_line+="trk2_res"+iLayer+"_x/F:"+"trk2_res"+iLayer+"_y/F:"+"trk2_res"+iLayer+"_z/F:";
br_line+="trk2_eres"+iLayer+"_x/F:"+"trk2_eres"+iLayer+"_y/F:"+"trk2_eres"+iLayer+"_z/F:";
br_line+="trk2_drdphi"+iLayer+"/F:"+"trk2_msdrphi"+iLayer+"/F:";
- br_line+="trk2_dr"+iLayer+"/F:"+"trk2_slope"+iLayer+"/F:";
-
+ br_line+="trk2_dz"+iLayer+"/F:"+"trk2_msdz"+iLayer+"/F:";
+ //br_line+="trk2_ures"+iLayer+"/F:"+"trk2_ureserr"+iLayer+"/F:";
}
for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk2_strip"+iLayer+"_u/F:";
- for(int iLayer=1;iLayer<=10;++iLayer) br_line+="trk2_strip"+iLayer+"_n/F:";
+ for(int iLayer=1;iLayer<=10;++iLayer) br_line+="top_stereo"+iLayer+"_n/F:";
+ for(int iLayer=1;iLayer<=10;++iLayer) br_line+="bot_stereo"+iLayer+"_n/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:";
@@ -375,14 +433,14 @@
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. );
//Track properties
+ SeedTrack st1 = (SeedTrack) trk1;
+ HelicalTrackFit helix1 = st1.getSeedCandidate().getHelix();
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());
- }
+ HashMap<Integer,HelicalTrackHit> hits1 = this.getHitMap(hitsOnTrack1,helix1);
+
+ //printWriter.format("\n%s\n","X1");
+
// 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);
@@ -390,16 +448,15 @@
else printWriter.format("%5.5f %5.5f %5.5f ", -9999999.9, -9999999.9, -9999999.9);
}
//Get the helix for residual calculation
- SeedTrack st1 = (SeedTrack) trk1;
- HelicalTrackFit helix1 = st1.getSeedCandidate().getHelix();
for(int iLayer=0;iLayer<5;++iLayer) {
HelicalTrackHit hitOnLayer = hits1.get(iLayer*2+1);// = this.getHitOnLayer(iLayer, hitsOnTrack);
if (hitOnLayer != null) {
+ //printWriter.format("\n%s\n","X11");
Map<String,Double> res = TrackUtils.calculateTrackHitResidual(hitOnLayer, helix1, true);
printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("resy"),res.get("resz"));
printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("erry"),res.get("errz"));
printWriter.format("%5.5f %5.5f ", res.get("drphi"),res.get("msdrphi"));
- printWriter.format("%5.5f %5.5f ", res.get("dr"),res.get("slope"));
+ printWriter.format("%5.5f %5.5f ", res.get("dz_res"),res.get("msdz"));
//DEBUG histos
if(iLayer==0) {
@@ -418,9 +475,16 @@
printWriter.format("%5.5f %5.5f ", -9999999.9, -9999999.9);
}
}
+
+ //printWriter.format("\n%s\n","X2");
+
+
List<HelicalTrackHit> stereoHits = new ArrayList<HelicalTrackHit>();
if(event.hasCollection(HelicalTrackHit.class, stereoHitCollectionName)) {
stereoHits = event.get(HelicalTrackHit.class, stereoHitCollectionName);
+ } else {
+ System.out.printf("%s: no collection with stereo hits? \"%s\"\n",this.getClass().getSimpleName(),this.stereoHitCollectionName);
+
}
HashMap<Integer,List<HelicalTrackStrip>> striphits1 = this.getStripHitsMap(hitsOnTrack1);
for(int iLayer=1;iLayer<=10;++iLayer) {
@@ -429,24 +493,31 @@
if(strip!=null) printWriter.format("%5.5f ", strip.umeas());
else printWriter.format("%5.5f ", -99999999.9);
}
- HashMap<Integer,List<HelicalTrackStrip>> allstriphits1 = this.getAllStripHitsMap(stereoHits);
+
+ HashMap<Integer,List<HelicalTrackStrip>> allstriphits = this.getAllStripHitsMap(event,true);
for(int iLayer=1;iLayer<=10;++iLayer) {
- if(striphits1.containsKey(iLayer)) printWriter.format("%5d ", allstriphits1.get(iLayer).size());
+ if(allstriphits.containsKey(iLayer)) printWriter.format("%5d ", allstriphits.get(iLayer).size());
else printWriter.format("%5d ", -99999999);
}
-
+ allstriphits = this.getAllStripHitsMap(event,false);
+ for(int iLayer=1;iLayer<=10;++iLayer) {
+ if(allstriphits.containsKey(iLayer)) printWriter.format("%5d ", allstriphits.get(iLayer).size());
+ else printWriter.format("%5d ", -99999999);
+ }
+ SeedTrack st2 = (SeedTrack) trk2;
+ HelicalTrackFit helix2 = st2.getSeedCandidate().getHelix();
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,List<HelicalTrackStrip>> striphits2 = this.getStripHitsMap(hitsOnTrack2);
- HashMap<Integer,HelicalTrackHit> hits2 = this.getHitMap(hitsOnTrack2);
+ HashMap<Integer,HelicalTrackHit> hits2 = this.getHitMap(hitsOnTrack2,helix2);
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);
}
- //Get the helix for residual calculation
- SeedTrack st2 = (SeedTrack) trk2;
- HelicalTrackFit helix2 = st2.getSeedCandidate().getHelix();
+
+ //printWriter.format("\n%s\n","X3");
+
for(int iLayer=0;iLayer<5;++iLayer) {
HelicalTrackHit hitOnLayer = hits2.get(iLayer*2+1);// = this.getHitOnLayer(iLayer, hitsOnTrack);
if (hitOnLayer != null) {
@@ -454,16 +525,21 @@
printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("resy"),res.get("resz"));
printWriter.format("%5.5f %5.5f %5.5f ", 0.0,res.get("erry"),res.get("errz"));
printWriter.format("%5.5f %5.5f ", res.get("drphi"),res.get("msdrphi"));
- printWriter.format("%5.5f %5.5f ", res.get("dr"),res.get("slope"));
-
+ printWriter.format("%5.5f %5.5f ", res.get("dz_res"),res.get("msdz"));
+
+
+ if(res.get("erry")>19.7) {
+ System.out.printf("%s: y residual error is too large = %f for run %d and event %d \n",this.getClass().getSimpleName(),res.get("erry"),event.getRunNumber(),event.getEventNumber());
+ //System.exit(1);
+ }
//DEBUG histos
if(iLayer==0) {
- _trk1_res1_z.fill(res.get("resz"));
- _trk1_res1_y.fill(res.get("resy"));
+ _trk2_res1_z.fill(res.get("resz"));
+ _trk2_res1_y.fill(res.get("resy"));
}
if(iLayer==1) {
- _trk1_res2_z.fill(res.get("resz"));
- _trk1_res2_y.fill(res.get("resy"));
+ _trk2_res2_z.fill(res.get("resz"));
+ _trk2_res2_y.fill(res.get("resy"));
}
}
@@ -480,11 +556,17 @@
if(strip!=null) printWriter.format("%5.5f ", strip.umeas());
else printWriter.format("%5.5f ", -99999999.9);
}
- HashMap<Integer,List<HelicalTrackStrip>> allstriphits2 = this.getAllStripHitsMap(stereoHits);
+ HashMap<Integer,List<HelicalTrackHit>> allstereohits = getAllStereoHitsMap(stereoHits,true);
+ for(int iLayer=1;iLayer<=10;++iLayer) {
+ if(allstereohits.containsKey(iLayer)) printWriter.format("%5d ", allstereohits.get(iLayer).size());
+ else printWriter.format("%5d ", -99999999);
+ }
+ allstereohits = getAllStereoHitsMap(stereoHits,false);
for(int iLayer=1;iLayer<=10;++iLayer) {
- if(striphits2.containsKey(iLayer)) printWriter.format("%5d ", striphits2.get(iLayer).size());
+ if(allstereohits.containsKey(iLayer)) printWriter.format("%5d ", allstereohits.get(iLayer).size());
else printWriter.format("%5d ", -99999999);
}
+ //printWriter.format("\n%s\n","X4");
//Particle vtx
if(vtxPosParticle!=null) printWriter.format("%5.5f %5.5f %5.5f ", vtxPosParticle.x(),vtxPosParticle.y(),vtxPosParticle.z() );
@@ -500,7 +582,10 @@
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(int i=0;i<3;++i) {
- if(clusters.size()<=i) {
+ if(clusters==null) {
+ printWriter.format("%5.5f %5d %5d ",-999999.9,-999999,-999999);
+ }
+ else if(clusters.size()<=i) {
printWriter.format("%5.5f %5d %5d ",-999999.9,-999999,-999999);
} else {
//for(HPSEcalCluster cl : clusters) {
@@ -541,10 +626,12 @@
}
- private HashMap<Integer,HelicalTrackHit> getHitMap(List<TrackerHit> hits) {
+ private HashMap<Integer,HelicalTrackHit> getHitMap(List<TrackerHit> hits,HelicalTrackFit helix) {
HashMap<Integer,HelicalTrackHit> map = new HashMap<Integer,HelicalTrackHit>();
for(TrackerHit hit : hits) {
HelicalTrackHit hth = (HelicalTrackHit) hit;
+ HelicalTrackCross htc = (HelicalTrackCross) hth;
+ htc.setTrackDirection(helix);
map.put(hth.Layer(), hth);
}
return map;
@@ -578,31 +665,45 @@
return map;
}
- private HashMap<Integer,List<HelicalTrackStrip>> getAllStripHitsMap(List<HelicalTrackHit> stereoHits) {
+ private HashMap<Integer,List<HelicalTrackStrip>> getAllStripHitsMap(EventHeader event, boolean top) {
HashMap<Integer,List<HelicalTrackStrip>> map = new HashMap<Integer,List<HelicalTrackStrip>>();
- for(HelicalTrackHit hth : stereoHits) {
- HelicalTrackCross htc = (HelicalTrackCross) hth;
- HelicalTrackStrip s1 = htc.getStrips().get(0);
- HelicalTrackStrip s2 = htc.getStrips().get(1);
- if(!map.containsKey(s1.layer())) map.put(s1.layer(), new ArrayList<HelicalTrackStrip>());
- if(!map.containsKey(s2.layer())) map.put(s2.layer(), new ArrayList<HelicalTrackStrip>());
- map.get(s1.layer()).add(s1);
- map.get(s2.layer()).add(s2);
-
+ if(!event.hasCollection(HelicalTrackStrip.class, this._stripClusterCollectionName)) {
+ return map;
+ }
+ List<HelicalTrackStrip> strips = event.get(HelicalTrackStrip.class, this._stripClusterCollectionName);
+ if(this._debug) System.out.printf("%s: asking strips in the %s\n", this.getClass().getSimpleName(),(top?"top":"bottom"));
+ for(HelicalTrackStrip strip : strips) {
+ if(top && strip.origin().y()<0 ) continue;
+ else if(!top && strip.origin().y()>0) continue;
+ if(this._debug) System.out.printf("%s: strip at origin %s is selected\n", this.getClass().getSimpleName(),strip.origin().toString());
+ if(!map.containsKey(strip.layer())) {
+ map.put(strip.layer(), new ArrayList<HelicalTrackStrip>());
+ }
+ map.get(strip.layer()).add(strip);
}
+
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;
- }
+
+ private HashMap<Integer,List<HelicalTrackHit>> getAllStereoHitsMap(List<HelicalTrackHit> stereoHits, boolean top) {
+ HashMap<Integer,List<HelicalTrackHit>> map = new HashMap<Integer,List<HelicalTrackHit>>();
+ if(stereoHits==null) {
+ return map;
+ }
+ if(this._debug) System.out.printf("%s: asking for stereo hits in the %s\n", this.getClass().getSimpleName(),(top?"top":"bottom"));
+ for(HelicalTrackHit hit : stereoHits) {
+ if(top && hit.z()<0) continue;
+ if(!top && hit.z()>0) continue;
+ if(this._debug) System.out.printf("%s: hit at xyz=%.3f,%.3f,%.3f is selected\n", this.getClass().getSimpleName(),hit.x(),hit.y(),hit.z());
+ if(!map.containsKey(hit.Layer())) {
+ map.put(hit.Layer(), new ArrayList<HelicalTrackHit>());
+ }
+ map.get(hit.Layer()).add(hit);
}
- return hitOnLayer;
+ return map;
}
+
+
private void makePlots() {
_vtxpos_x = aida.histogram1D("Vertex position X", 100, -1000, 1000);