Commit in lcsim/src/org/lcsim/contrib/SiStripSim on MAIN
StripClusterMaker.java+40-161.2 -> 1.3
Silicon clustering code.

lcsim/src/org/lcsim/contrib/SiStripSim
StripClusterMaker.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- StripClusterMaker.java	16 Nov 2007 23:00:06 -0000	1.2
+++ StripClusterMaker.java	17 Nov 2007 21:07:01 -0000	1.3
@@ -27,6 +27,8 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
+import org.lcsim.detector.Rotation3D;
+import org.lcsim.detector.RotationPassiveXYZ;
 import org.lcsim.detector.tracker.silicon.ChargeCarrier;
 import org.lcsim.detector.tracker.silicon.DopedSilicon;
 import org.lcsim.detector.tracker.silicon.SiSensor;
@@ -46,9 +48,9 @@
     
     // Temporary maps connecting electrodes to hit list, hits to strip number, electrode ID to electrodes
     // (the last should be cached... not a model of efficiency at the moment)
-    Map<IExpandedIdentifier,List<RawTrackerHit>> _hit_map = new HashMap<IExpandedIdentifier,List<RawTrackerHit>>();
+    Map<String,List<RawTrackerHit>> _hit_map = new HashMap<String,List<RawTrackerHit>>();
     Map<RawTrackerHit,Integer> _strip_map = new HashMap<RawTrackerHit,Integer>();
-    Map<IExpandedIdentifier,SiSensorElectrodes> _electrode_map = new HashMap<IExpandedIdentifier,SiSensorElectrodes>();
+    Map<String,SiSensorElectrodes> _electrode_map = new HashMap<String,SiSensorElectrodes>();
     
     // Readout chip needed to decode hit information
     ReadoutChip _readout_chip;
@@ -68,7 +70,7 @@
         _electrode_map.clear();
         
         List<TrackerHit> clusters = new ArrayList<TrackerHit>();
-
+        
         // Sort RawTrackerHits by electrodes
         for (RawTrackerHit raw_hit : raw_hits)
         {
@@ -117,19 +119,22 @@
             id.setValue(strip_field,0);
             
             // Fill maps needed for clustering
-            if (_electrode_map.get(id) == null)
+            if (!_electrode_map.containsKey(id.toString()))
             {
-                _electrode_map.put(id,((SiSensor)raw_hit.getDetectorElement()).getReadoutElectrodes(carrier));
-                _hit_map.put(id,new ArrayList<RawTrackerHit>());
+//                System.out.println("Adding electrodes to map for id: "+id.toString());
+                _electrode_map.put(id.toString(),((SiSensor)raw_hit.getDetectorElement()).getReadoutElectrodes(carrier));
+                _hit_map.put(id.toString(),new ArrayList<RawTrackerHit>());
             }
-            _hit_map.get(id).add(raw_hit);
+            _hit_map.get(id.toString()).add(raw_hit);
             
         }
         
         // Do clustering for each set of electrodes
-        for (IExpandedIdentifier electrodes_id : _electrode_map.keySet())
+        for (String electrodes_id : _electrode_map.keySet())
         {
             
+//            System.out.println("Clustering electrodes: "+electrodes_id);
+            
             List<RawTrackerHit> hits = _hit_map.get(electrodes_id);
             List<RawTrackerHit> unclustered_hits = new ArrayList<RawTrackerHit>(hits);
             SiSensorElectrodes electrodes = _electrode_map.get(electrodes_id);
@@ -140,9 +145,12 @@
                 int strip_number = _strip_map.get(hit);
                 double signal = _readout_chip.decodeCharge(hit);
                 double noise = _readout_chip.getChannel(strip_number).computeNoise(electrodes.getCapacitance(strip_number));
-  
+                
                 if (signal/noise > _seed_threshold && unclustered_hits.contains(hit))
                 {
+                    
+//                    System.out.println("Creating new cluster, # Raw hits on electrodes is: "+hits.size());
+                    
                     List<RawTrackerHit> cluster = new ArrayList<RawTrackerHit>();
                     List<RawTrackerHit> clustered_hits = new ArrayList<RawTrackerHit>();
                     
@@ -153,6 +161,10 @@
                         cluster.addAll(clustered_hits);
                         unclustered_hits.removeAll(clustered_hits);
                         clustered_hits = neighborHits(clustered_hits,unclustered_hits,electrodes);
+                        
+//                        System.out.println("    Cluster size:  "+cluster.size());
+//                        System.out.println("        # Unclustered hits:  "+unclustered_hits.size());
+//                        System.out.println("        # neighbors found:  "+clustered_hits.size());
                     }
                     
                     // now make a cluster or trackerhit
@@ -181,7 +193,7 @@
                 int strip_number = _strip_map.get(hit);
                 double signal = _readout_chip.decodeCharge(hit);
                 double noise = _readout_chip.getChannel(strip_number).computeNoise(electrodes.getCapacitance(strip_number));
-      
+                
                 if (neighbor_cells.contains(_strip_map.get(hit)) && signal/noise > _neighbor_threshold)
                 {
                     neighbor_hits.add(hit);
@@ -222,7 +234,7 @@
         {
             int strip_number = _strip_map.get(hit);
             double signal = _readout_chip.decodeCharge(hit);
-     
+            
             total_charge += signal;
             position = VecOp.add(position,VecOp.mult(signal,electrodes.getCellPosition(_strip_map.get(hit))));
         }
@@ -242,7 +254,7 @@
             int strip_number = _strip_map.get(hit);
             double signal = _readout_chip.decodeCharge(hit);
             double time = _readout_chip.decodeTime(hit);
- 
+            
             time_sum += time_sum * signal;
             signal_sum += signal_sum;
             
@@ -258,8 +270,20 @@
         covariance.setElement(0,0,Math.pow(0.007,2));
         covariance.setElement(1,1,Math.pow(93.031/Math.sqrt(12),2));
         covariance.setElement(2,2,0.0);
-        VecOp.mult(electrodes.getLocalToGlobal().getRotation().getRotationMatrix(),covariance);
-        return new SymmetricMatrix((Matrix)covariance);
+        
+        BasicHep3Matrix rotation_matrix = (BasicHep3Matrix)electrodes.getLocalToGlobal().getRotation().getRotationMatrix();                
+        BasicHep3Matrix rotation_matrix_transposed = new BasicHep3Matrix(rotation_matrix);
+        rotation_matrix_transposed.transpose();
+        
+//        System.out.println("Rotation matrix: \n"+rotation_matrix);
+//        System.out.println("Rotation matrix transposed: \n"+rotation_matrix_transposed);
+//        System.out.println("Local covariance matrix: \n"+covariance);
+        
+        BasicHep3Matrix covariance_global = (BasicHep3Matrix)VecOp.mult(rotation_matrix,VecOp.mult(covariance,rotation_matrix_transposed));
+        
+//        System.out.println("Global covariance matrix: \n"+covariance_global);
+
+        return new SymmetricMatrix((Matrix)covariance_global);
     }
     
     private double getEnergy(List<RawTrackerHit> cluster)
@@ -267,10 +291,10 @@
         double total_charge = 0.0;
         for (RawTrackerHit hit : cluster)
         {
-
+            
             int strip_number = _strip_map.get(hit);
             double signal = _readout_chip.decodeCharge(hit);
-   
+            
             total_charge += signal;
         }
         return total_charge * DopedSilicon.ENERGY_EHPAIR;
CVSspam 0.2.8