Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN | |||
HPSStripMaker.java | +38 | -48 | 1.1 -> 1.2 |
...change to HPSFittedRawTrackerHits....
diff -u -r1.1 -r1.2 --- HPSStripMaker.java 24 Apr 2012 14:07:08 -0000 1.1 +++ HPSStripMaker.java 24 Apr 2012 17:45:44 -0000 1.2 @@ -17,7 +17,6 @@
import org.lcsim.detector.identifier.IIdentifier; import org.lcsim.detector.tracker.silicon.*; import org.lcsim.event.RawTrackerHit;
-import org.lcsim.event.base.BaseTrackerHit;
import org.lcsim.recon.tracking.digitization.sisim.*; /**
@@ -33,20 +32,20 @@
int _max_noaverage_nstrips = 4; // Absolute maximum cluster size int _max_cluster_nstrips = 10;
- // Readout chip needed to decode hit information - ReadoutChip _readout_chip; - // Sensor simulation needed to correct for Lorentz drift - SiSensorSim _simulation;
// Identifier helper (reset once per sensor) SiTrackerIdentifierHelper _sid_helper; // Temporary map connecting hits to strip numbers for sake of speed (reset once per sensor)
- Map<HPSTrackerHit, Integer> _strip_map = new HashMap<HPSTrackerHit, Integer>();
+ Map<HPSFittedRawTrackerHit, Integer> _strip_map = new HashMap<HPSFittedRawTrackerHit, Integer>();
double _oneClusterErr = 1 / Math.sqrt(12); double _twoClusterErr = 1 / 5; double _threeClusterErr = 1 / 3; double _fourClusterErr = 1 / 2; double _fiveClusterErr = 1;
+ public HPSStripMaker(HPSClusteringAlgorithm algo){ + _clustering=algo; + } +
public String getName() { return _NAME; }
@@ -82,50 +81,50 @@
// Get hits for this sensor IReadout ro = sensor.getReadout();
- List<HPSTrackerHit> hps_hits = ro.getHits(HPSTrackerHit.class);
+ List<HPSFittedRawTrackerHit> hps_hits = ro.getHits(HPSFittedRawTrackerHit.class);
- Map<SiSensorElectrodes, List<HPSTrackerHit>> electrode_hits = new HashMap<SiSensorElectrodes, List<HPSTrackerHit>>();
+ Map<SiSensorElectrodes, List<HPSFittedRawTrackerHit>> electrode_hits = new HashMap<SiSensorElectrodes, List<HPSFittedRawTrackerHit>>();
- for (HPSTrackerHit hps_hit : hps_hits) {
+ for (HPSFittedRawTrackerHit hps_hit : hps_hits) {
// get id and create strip map, get electrodes.
- IIdentifier id = hps_hit.getIdentifier();
+ IIdentifier id = hps_hit.getRawTrackerHit().getIdentifier();
_strip_map.put(hps_hit, _sid_helper.getElectrodeValue(id)); // Get electrodes and check that they are strips //System.out.println("proc raw hit from: " + DetectorElementStore.getInstance().find(raw_hit.getIdentifier()).get(0).getName()); ChargeCarrier carrier = ChargeCarrier.getCarrier(_sid_helper.getSideValue(id));
- SiSensorElectrodes electrodes = ((SiSensor) hps_hit.getDetectorElement()).getReadoutElectrodes(carrier);
+ SiSensorElectrodes electrodes = ((SiSensor) hps_hit.getRawTrackerHit().getDetectorElement()).getReadoutElectrodes(carrier);
if (!(electrodes instanceof SiStrips)) { continue; } if (electrode_hits.get(electrodes) == null) {
- electrode_hits.put(electrodes, new ArrayList<HPSTrackerHit>());
+ electrode_hits.put(electrodes, new ArrayList<HPSFittedRawTrackerHit>());
} electrode_hits.get(electrodes).add(hps_hit); } for (Map.Entry entry : electrode_hits.entrySet()) {
- hits.addAll(makeHits(sensor, (SiStrips) entry.getKey(), (List<HPSTrackerHit>) entry.getValue()));
+ hits.addAll(makeHits(sensor, (SiStrips) entry.getKey(), (List<HPSFittedRawTrackerHit>) entry.getValue()));
} return hits; }
- public List<SiTrackerHit> makeHits(SiSensor sensor, SiSensorElectrodes electrodes,List<HPSTrackerHit> hps_hits) {
+ public List<SiTrackerHit> makeHits(SiSensor sensor, SiSensorElectrodes electrodes,List<HPSFittedRawTrackerHit> hps_hits) {
// Call the clustering algorithm to make clusters
- List<List<HPSTrackerHit>> cluster_list = _clustering.findClusters(hps_hits);
+ List<List<HPSFittedRawTrackerHit>> cluster_list = _clustering.findClusters(hps_hits);
// Create an empty list for the pixel hits to be formed from clusters List<SiTrackerHit> hits = new ArrayList<SiTrackerHit>(); // Make a pixel hit from this cluster
- for (List<HPSTrackerHit> cluster : cluster_list) {
+ for (List<HPSFittedRawTrackerHit> cluster : cluster_list) {
// Make a TrackerHit from the cluster if it meets max cluster size requirement if (cluster.size() <= _max_cluster_nstrips) {
@@ -159,25 +158,34 @@
_fiveClusterErr = err; }
- private SiTrackerHitStrip1D makeTrackerHit(List<HPSTrackerHit> cluster, SiSensorElectrodes electrodes) {
+ + public void setCentralStripAveragingThreshold(int max_noaverage_nstrips) { + _max_noaverage_nstrips = max_noaverage_nstrips; + } + + public void setMaxClusterSize(int max_cluster_nstrips) { + _max_cluster_nstrips = max_cluster_nstrips; + } + + private SiTrackerHitStrip1D makeTrackerHit(List<HPSFittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) {
Hep3Vector position = getPosition(cluster, electrodes); SymmetricMatrix covariance = getCovariance(cluster, electrodes); double time = getTime(cluster); double energy = getEnergy(cluster); TrackerHitType type = new TrackerHitType(TrackerHitType.CoordinateSystem.GLOBAL, TrackerHitType.MeasurementType.STRIP_1D); List<RawTrackerHit> rth_cluster = new ArrayList<RawTrackerHit>();
- for (HPSTrackerHit bth : cluster) {
+ for (HPSFittedRawTrackerHit bth : cluster) {
rth_cluster.add((RawTrackerHit) bth); } SiTrackerHitStrip1D hit = new SiTrackerHitStrip1D(position, covariance, energy, time, rth_cluster, type); return hit; }
- private Hep3Vector getPosition(List<HPSTrackerHit> cluster, SiSensorElectrodes electrodes) {
+ private Hep3Vector getPosition(List<HPSFittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) {
List<Double> signals = new ArrayList<Double>(); List<Hep3Vector> positions = new ArrayList<Hep3Vector>();
- for (HPSTrackerHit hit : cluster) {
+ for (HPSFittedRawTrackerHit hit : cluster) {
signals.add(hit.getAmp()); positions.add(((SiStrips) electrodes).getStripCenter(_strip_map.get(hit))); }
@@ -209,29 +217,10 @@
position = VecOp.add(position, VecOp.mult(signal, positions.get(istrip))); } position = VecOp.mult(1 / total_charge, position);
- -// double total_charge = 0; -// Hep3Vector position = new BasicHep3Vector(0,0,0); -// -// for (RawTrackerHit hit : cluster) -// { -// int strip_number = _strip_map.get(hit); -// double signal = _readout_chip.decodeCharge(hit); -// -// total_charge += signal; -// position = VecOp.add(position,VecOp.mult(signal,((SiStrips)electrodes).getStripCenter(strip_number))); -// } -// position = VecOp.mult(1/total_charge,position); - - // Put position in sensor coordinates
electrodes.getParentToLocal().inverse().transform(position); // System.out.println("Position \n"+position);
- // Swim position back through lorentz drift direction to midpoint between bias surfaces - _simulation.setSensor((SiSensor) electrodes.getDetectorElement()); - _simulation.lorentzCorrect(position, electrodes.getChargeCarrier()); -
// System.out.println("Lorentz corrected position \n"+position); // return position in global coordinates
@@ -239,14 +228,14 @@
// return electrodes.getLocalToGlobal().transformed(position); }
- private double getTime(List<HPSTrackerHit> cluster) {
+ private double getTime(List<HPSFittedRawTrackerHit> cluster) {
int time_sum = 0; int signal_sum = 0;
- for (HPSTrackerHit hit : cluster) {
+ for (HPSFittedRawTrackerHit hit : cluster) {
double signal = hit.getAmp();
- double time = hit.getTime();
+ double time = hit.getT0();
time_sum += time * signal; signal_sum += signal;
@@ -255,7 +244,7 @@
return (double) time_sum / (double) signal_sum; }
- private SymmetricMatrix getCovariance(List<HPSTrackerHit> cluster, SiSensorElectrodes electrodes) {
+ private SymmetricMatrix getCovariance(List<HPSFittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) {
SymmetricMatrix covariance = new SymmetricMatrix(3); covariance.setElement(0, 0, Math.pow(getMeasuredResolution(cluster, electrodes), 2)); covariance.setElement(1, 1, Math.pow(getUnmeasuredResolution(cluster, electrodes), 2));
@@ -282,7 +271,7 @@
// return new SymmetricMatrix((Matrix)covariance_global); }
- private double getMeasuredResolution(List<HPSTrackerHit> cluster, SiSensorElectrodes electrodes) // should replace this by a ResolutionModel class that gives expected resolution. This could be a big job.
+ private double getMeasuredResolution(List<HPSFittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) // should replace this by a ResolutionModel class that gives expected resolution. This could be a big job.
{ double measured_resolution;
@@ -308,21 +297,22 @@
return measured_resolution; }
- private double getUnmeasuredResolution(List<HPSTrackerHit> cluster, SiSensorElectrodes electrodes) {
+ private double getUnmeasuredResolution(List<HPSFittedRawTrackerHit> cluster, SiSensorElectrodes electrodes) {
// Get length of longest strip in hit double hit_length = 0;
- for (HPSTrackerHit hit : cluster) {
+ for (HPSFittedRawTrackerHit hit : cluster) {
hit_length = Math.max(hit_length, ((SiStrips) electrodes).getStripLength(_strip_map.get(hit))); } return hit_length / Math.sqrt(12); }
- private double getEnergy(List<HPSTrackerHit> cluster) {
+ private double getEnergy(List<HPSFittedRawTrackerHit> cluster) {
double total_charge = 0.0;
- for (HPSTrackerHit hit : cluster) {
+ for (HPSFittedRawTrackerHit hit : cluster) {
double signal = hit.getAmp(); total_charge += signal; } return total_charge * DopedSilicon.ENERGY_EHPAIR; }
+
}
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