hps-java/src/main/java/org/lcsim/hps/users/phansson
diff -u -r1.6 -r1.7
--- FastTrackResidualDriver.java 11 May 2012 15:49:20 -0000 1.6
+++ FastTrackResidualDriver.java 27 Jun 2012 19:35:17 -0000 1.7
@@ -13,6 +13,8 @@
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierHelper;
import org.lcsim.detector.tracker.silicon.*;
import org.lcsim.event.*;
import org.lcsim.geometry.Detector;
@@ -83,12 +85,12 @@
crystalCols = 46;
crystalRows = 5;
- ecalBeamgapCorr = 20.0;
+ ecalBeamgapCorr = 0.0;
// Position of the conversion
conversionZ = -1500.0;
- ecalClusterSel = 1;
+ ecalClusterSel = 0;
IHistogramFactory hf = aida.histogramFactory();
String side;
@@ -268,8 +270,7 @@
if(debug) System.out.println("icl " + icl);
int clid = ecal_cls.get(icl);
if(debug) System.out.println("clid " + clid + " all clusters size " + ecal_all_clusters.size());
- double p_cl[] = ecal_all_clusters.get(clid).getPosition();
- int clpos[] = getCrystalPair(p_cl);
+ int clpos[] = getCrystalPair(ecal_all_clusters.get(clid));
if(debug) System.out.println("clpos " + clpos[0] + "," + clpos[1]);
ncl_ecal_map.get(iSide).fill(clpos[0], clpos[1]);
if(debug) System.out.println("clpos " + clpos[0] + "," + clpos[1]);
@@ -288,7 +289,7 @@
- selclids = getCrystalPair(ecal_all_clusters.get(sel_ecal_idx).getPosition());
+ selclids = getCrystalPair(ecal_all_clusters.get(sel_ecal_idx));
nselcl_ecal_map.get(iSide).fill(selclids[0], selclids[1]);
selcl_ecal_e.get(iSide).fill(ecal_all_clusters.get(sel_ecal_idx).getEnergy());
@@ -338,6 +339,7 @@
}
//stripList = new ArrayList<SiTrackerHitStrip1D>();
for ( SiTrackerHitStrip1D stripCluster : trackerHits ) {
+ System.out.println("cluster at " + stripCluster.getPositionAsVector().toString() + " " + stripCluster.getSensor().toString());
isaxial = isAxialHit(stripCluster);
@@ -352,7 +354,7 @@
}
- layer = getLayerFromSensorName(name);
+ layer = getLayerFromSiCluster(stripCluster);
si_side = getSideFromSiCluster(stripCluster);
@@ -445,52 +447,29 @@
// }
-
- private int[] getCrystalPair(Hep3Vector cluster) {
- double pos[] = {cluster.x(),cluster.y(),0.};
- return getCrystalPair(pos);
- }
-
- private int[] getCrystalPair(double[] cluster) {
- double x = cluster[0];
- double y = cluster[1];
- int position[] = new int[2];
- position[0] = (int)Math.floor(x/crystalX);
-
- position[1] = (int) Math.floor( (y - beamGap * Math.signum(y) ) / crystalY);
- return position;
+ public int[] getCrystalPair(HPSEcalCluster cluster) {
+ int[] pos = new int[2];
+ pos[0] = cluster.getSeedHit().getIdentifierFieldValue("ix");
+ pos[1] = cluster.getSeedHit().getIdentifierFieldValue("iy");
- }
-
- private double[] getClusterPosition(HPSEcalCluster cluster) {
- CalorimeterHit hit = cluster.getSeedHit();
- //return cluster.getPosition();
-
- //IDDecoder dec = dec.getSubdetector("Ecal").getIDDecoder();
-// dec.setID(hit.getCellID());
-// int ix = dec.getValue("ix");
-// int iy = dec.getValue("iy");
-// double position[] = new double[2];
-// position[0] = crystalX * ix;
-// position[1] = crystalY * iy + beamGap * Math.signum(iy);
- if (debug) System.out.println("Getting cluster position");
- double pos[] = cluster.getPosition();
- if (debug) System.out.println("Found " + pos[0] + "," + pos[1] + "," + pos[2]);
- return pos;
+ //System.out.println("cluster ix,iy " + pos[0] + "," + pos[1] + " from pos " + cluster.getSeedHit().getPositionVec().toString());
+ return pos;
+ //getCrystalPair(cluster.getPosition());
}
+
private List<Integer> getEcalClustersForFastTracking(List<HPSEcalCluster> clusters, String side) {
if(side!="up" && side!="down") {
throw new RuntimeException("This ecal side" + side + " do not exist!!");
}
List<Integer> cls = new ArrayList<Integer>();
boolean save;
- double [] pos;
+ int [] pos;
for (int i=0;i<clusters.size();++i) {
save=false;
- pos = getClusterPosition(clusters.get(i));
+ pos = getCrystalPair(clusters.get(i));
if(pos[1]>=0 && side=="up") {
save=true;
@@ -567,20 +546,25 @@
private boolean isAxialHit(SiTrackerHitStrip1D strip) {
- boolean axial = false;
- Hep3Vector m = strip.getMeasuredCoordinate();
- //System.out.println("y " + m.y() + " -> abs(y) " + Math.abs(m.y()) );
- if ( Math.abs((Math.abs(m.y())-1.0))<0.0000000001 ) {
- axial = true;
- //System.out.println( " ===> " + axial );
- }
- return axial;
+ String side = this.getSideFromSiCluster(strip);
+ int layer = this.getLayerFromSiCluster(strip);
+ return layer%2==0 ? false : true;
+
+ //int ref_l = ref_helper.getValue(ref_id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
+ //int ref_s = ref_helper.getValue(ref_id, "module"); // 0-1; module number is top or bottom
+// boolean axial = false;
+// Hep3Vector m = strip.getMeasuredCoordinate();
+// //System.out.println("y " + m.y() + " -> abs(y) " + Math.abs(m.y()) );
+// if ( Math.abs((Math.abs(m.y())-1.0))<0.0000000001 ) {
+// axial = true;
+// //System.out.println( " ===> " + axial );
+// }
+// return axial;
}
private int getNAxialHits(List<SiTrackerHitStrip1D> trackerHits, String side) {
int nhits=0;
for ( SiTrackerHitStrip1D stripCluster : trackerHits ) {
-
if(isAxialHit(stripCluster)) {
String si_side = getSideFromSiCluster(stripCluster);
@@ -602,7 +586,7 @@
for ( SiTrackerHitStrip1D stripCluster : trackerHits ) {
if(isAxialHit(stripCluster)==false) continue;
-
+
si_side = getSideFromSiCluster(stripCluster);
if( side == si_side) {
@@ -614,7 +598,7 @@
throw new RuntimeException("SiSensor name " + name + " is invalid?");
}
- l = getLayerFromSensorName(name);
+ l = this.getLayerFromSiCluster(stripCluster);
if ( l == layer) ++nhits;
}
@@ -645,18 +629,20 @@
System.err.println("This name is too short!!");
throw new RuntimeException("SiSensor name " + name + " is invalid?");
}
-
- l = getLayerFromSensorName(name);
+ l = this.getLayerFromSiCluster(stripCluster);
+
//Turn this into the layer scheme I use
- if(side=="down") {
- //even numbers are used
- i = (l/2) - 1;
- n[i] = n[i] + 1;
- } else {
i = ((l+1)/2) - 1;
n[i] = n[i] + 1;
- }
+// if(side=="down") {
+// i = ((l+1)/2) - 1;
+// n[i] = n[i] + 1;
+// } else {
+// //even numbers are used
+// i = (l/2) - 1;
+// n[i] = n[i] + 1;
+// }
}
@@ -666,14 +652,32 @@
}
private String getSideFromSiCluster(SiTrackerHitStrip1D stripCluster) {
- Hep3Vector posVec = stripCluster.getPositionAsVector();
- double yHit = posVec.y();
- String side;
- if (yHit>=0.0) side = "up";
- else side = "down";
- return side;
+ IIdentifierHelper ref_helper = stripCluster.getIdentifierHelper();
+ IIdentifier ref_id = stripCluster.getSensor().getIdentifier();
+ int ref_l = ref_helper.getValue(ref_id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
+ int ref_s = ref_helper.getValue(ref_id, "module"); // 0-1; module number is top or bottom
+ return ref_s==0 ? "up" : "down";
+//// Hep3Vector posVec = stripCluster.getPositionAsVector();
+//// double yHit = posVec.y();
+//// String side;
+//// if (yHit>=0.0) side = "up";
+//// else side = "down";
+//// return side;
+ }
+
+ private int getLayerFromSiCluster(SiTrackerHitStrip1D stripCluster) {
+ IIdentifierHelper ref_helper = stripCluster.getIdentifierHelper();
+ IIdentifier ref_id = stripCluster.getSensor().getIdentifier();
+ int ref_l = ref_helper.getValue(ref_id, "layer"); // 1-10; axial layers are odd layers; stereo layers are even
+ int ref_s = ref_helper.getValue(ref_id, "module"); // 0-1; module number is top or bottom
+ return ref_l;
+//// Hep3Vector posVec = stripCluster.getPositionAsVector();
+//// double yHit = posVec.y();
+//// String side;
+//// if (yHit>=0.0) side = "up";
+//// else side = "down";
+//// return side;
}
-
private int getLayerFromSensorName(String name) {
int ilayer = -1;// = Integer.parseInt(layer.substring(layer.length()-1));
@@ -691,7 +695,7 @@
} else {
throw new RuntimeException("This sensor name do not have a layer!");
}
-
+ System.out.println("Name " + name + " -> layer " + ilayer);
return ilayer;
}