Author: [log in to unmask] Date: Wed Dec 10 17:51:27 2014 New Revision: 3446 Log: commiting temp changes Added: projects/lcsim/sandbox/HpsTracker2.java Added: projects/lcsim/sandbox/HpsTracker2.java ============================================================================= --- projects/lcsim/sandbox/HpsTracker2.java (added) +++ projects/lcsim/sandbox/HpsTracker2.java Wed Dec 10 17:51:27 2014 @@ -0,0 +1,129 @@ +package org.lcsim.detector.converter.compact.subdetector; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.lcsim.detector.IDetectorElement; +import org.lcsim.detector.converter.compact.SubdetectorDetectorElement; +import org.lcsim.detector.tracker.silicon.HpsSiSensor; +/** + * Class describing an {@link HPSTracker2} subdetector. + * + * @author Omar Moreno <[log in to unmask]> + * @author Jeremy McCormick <[log in to unmask]> + * + */ +public class HpsTracker2 extends SubdetectorDetectorElement { + + private boolean debug = false; + + // List of stereo layers composing the SVT + List<SvtStereoLayer> stereoPairs = new ArrayList<SvtStereoLayer>(); + + public HpsTracker2(String name, IDetectorElement parent) { + super(name, parent); + } + + /** + * Get a collection of stereo pairs ({@link SvtStereoLayer}) composing the SVT. + * + * @return List of stereo pairs + */ + public List<SvtStereoLayer> getStereoPairs(){ + return Collections.unmodifiableList(stereoPairs); + } + + /** + * Get the collection of {@link HpsSiSensor} composing the SVT. + * + * @return List of sensors + */ + public List<HpsSiSensor> getSensors(){ + List<HpsSiSensor> list = this.findDescendants(HpsSiSensor.class); + if(debug) { + System.out.printf("%s: found %d HpsSiSensors\n",getClass().getSimpleName(), list.size()); + System.out.printf("%s: %45s %5s %5s\n",getClass().getSimpleName(), "<name>", "<layerID>", "<moduleID>"); + for(HpsSiSensor sensor : list) { + System.out.printf("%s: %45s %5d %5d\n",getClass().getSimpleName(), sensor.getName(), sensor.getLayerNumber(), sensor.getModuleNumber()); + } + } + return list; + } + + /** + * Get a {@link HpsSiSensor} by layer and module number. + * + * @param layer The SVT layer number + * @param module The SVT module number + * @return Corresponding sensor + */ + public HpsSiSensor getSensor(int layer, int module){ + for(HpsSiSensor sensor : this.getSensors()){ + if(sensor.getLayerNumber() == layer && sensor.getModuleNumber() == module) + return sensor; + } + return null; + } + + /** + * Get the maximum layer number present in the collection of {@link HpsSiSensor}. + * + * @return maximum layer number + */ + private int getMaxLayerNumber(){ + int maxLayerNumber = 0; + for(HpsSiSensor sensor : this.getSensors()){ + if(sensor.getLayerNumber() > maxLayerNumber) maxLayerNumber = sensor.getLayerNumber(); + } + return maxLayerNumber; + } + + /** + * Get the maximum module number present in the collection of {@link HpsSiSensor}. + * + * @return maximum module number + */ + private int getMaxModuleNumber(){ + int maxModuleID = 0; + for(HpsSiSensor sensor : this.getSensors()){ + if(sensor.getModuleNumber() > maxModuleID) maxModuleID = sensor.getModuleNumber(); + } + return maxModuleID; + } + + /** + * Method that loops through the collection of {@link HpsSiSensor} and creates + * stereo layers. A stereo layer is composed of two adjacent sensors (stereo and axial) + * with the same module number. + */ + public void createStereoLayers(){ + + System.out.printf("%s: create stereo layers\n",getClass().getSimpleName()); + + HpsSiSensor firstSensor = null; + HpsSiSensor secondSensor = null; + + System.out.printf("%s: %10s %10s %42s %42s\n",getClass().getSimpleName(), "layerID/moduleID", "layerID/moduleID", "sensor1", "sensor2"); + + + for(int layerID = 1; layerID <= this.getMaxLayerNumber(); layerID+=2 ){ + for(int moduleID = 0; moduleID <= this.getMaxModuleNumber(); moduleID++){ + + firstSensor = this.getSensor(layerID, moduleID); + secondSensor = this.getSensor(layerID+1, moduleID); + + System.out.printf("%s: %10d/%d %10d/%d %42s %42s\n",getClass().getSimpleName(), + layerID,moduleID, layerID+1, moduleID, + firstSensor==null?"-":firstSensor.getName(), + secondSensor==null?"-":secondSensor.getName()); + + if(firstSensor == null || secondSensor == null) { + continue; + } + + stereoPairs.add(new SvtStereoLayer((layerID+1)/2, firstSensor, secondSensor)); + } + } + } +} ######################################################################## Use REPLY-ALL to reply to list To unsubscribe from the LCDET-SVN list, click the following link: https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1