Print

Print


Commit in java/branches/hps_java_trunk_HPSJAVA-255 on MAIN
conditions/pom.xml+21045 -> 1046
conditions/src/main/java/org/hps/conditions/ConditionsDriver.java-1351045 removed
conditions/src/main/java/org/hps/conditions/config/TestRunReadOnlyConfiguration.java+41045 -> 1046
conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java+74-151045 -> 1046
conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java+311045 -> 1046
                                               /SvtDetectorSetup.java+38-171045 -> 1046
conditions/src/main/resources/org/hps/conditions/config/conditions_database_testrun_2012.xml+43-41045 -> 1046
conditions/src/test/java/org/hps/conditions/ConditionsDriverTest.java+2-21045 -> 1046
                                           /ConditionsTestRunTest.java+2-21045 -> 1046
conditions/src/test/java/org/hps/conditions/beam/BeamCurrentTest.java+2-21045 -> 1046
conditions/src/test/java/org/hps/conditions/ecal/PhysicalToGainTest.java+2-21045 -> 1046
conditions/src/test/java/org/hps/conditions/svt/SvtBadChannelTest.java+2-21045 -> 1046
                                               /SvtDetectorSetupTest.java+41-231045 -> 1046
integration-tests/pom.xml+13-51045 -> 1046
integration-tests/src/test/java/org/hps/EcalReadoutSimTest.java+2-31045 -> 1046
                                       /EtSystemTest.java+6-31045 -> 1046
                                       /MockDataReconTest.java+1-11045 -> 1046
monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedCommissioning.java+89-551045 -> 1046
tracking/src/main/java/org/hps/recon/tracking/gbl/GBLStripClusterData.java+18-81045 -> 1046
                                                 /GBLTrackData.java+23-21045 -> 1046
                                                 /GblData.java+125-1031045 -> 1046
                                                 /GblPoint.java+105-781045 -> 1046
                                                 /GblTrajectory.java+376-8211045 -> 1046
tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/BorderedBandMatrix.java+113-1291045 -> 1046
                                                        /Matrix.java+36-361045 -> 1046
                                                        /VMatrix.java+31-461045 -> 1046
                                                        /VVector.java+8-131045 -> 1046
                                                        /Vector.java+13-31045 -> 1046
+1202-1510
1 removed + 27 modified, total 28 files
Merge in from current trunk to get this branch up to date.

java/branches/hps_java_trunk_HPSJAVA-255/conditions
pom.xml 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/pom.xml	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/pom.xml	2014-09-18 18:30:50 UTC (rev 1046)
@@ -26,6 +26,8 @@
                         <exclude>org/hps/conditions/svt/SvtGainInsertTest.java</exclude>
                         <exclude>org/hps/conditions/svt/SvtDetectorSetupTest.java</exclude> 
                         <exclude>org/hps/conditions/svt/SvtConfigurationTest.java</exclude>
+                        <exclude>org/hps/conditions/ConditionsSeriesConverterTest.java</exclude>
+                        <exclude>org/hps/conditions/ConditionsObjectTest.java</exclude>
                     </excludes>
                 </configuration>
             </plugin>

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions
ConditionsDriver.java removed after 1045
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/ConditionsDriver.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -1,135 +0,0 @@
-package org.hps.conditions;
-
-import static org.hps.conditions.TableConstants.ECAL_CONDITIONS;
-import static org.hps.conditions.TableConstants.SVT_CONDITIONS;
-
-import org.hps.conditions.ecal.EcalConditions;
-import org.hps.conditions.ecal.EcalDetectorSetup;
-import org.hps.conditions.svt.SvtConditions;
-import org.hps.conditions.svt.SvtDetectorSetup;
-import org.lcsim.geometry.Detector;
-import org.lcsim.util.Driver;
-
-/**
- * This {@link org.lcsim.util.Driver} sets up the {@link DatabaseConditionsManager} and
- * loads the conditions onto a detector.
- * 
- * @author Jeremy McCormick <[log in to unmask]>
- */
-public final class ConditionsDriver extends Driver {
-
-    // Static instance of the manager.
-    static DatabaseConditionsManager manager;
-
-    // Default conditions system XML config, which is for the Test Run 2012 database.
-    String _defaultConfigResource = "/org/hps/conditions/config/conditions_database_testrun_2012.xml";
-
-    // Default database connection parameters, which points to the SLAC development
-    // database.
-    static String _defaultConnectionResource = "/org/hps/conditions/config/conditions_database_testrun_2012_connection.properties";
-
-    String ecalSubdetectorName = "Ecal";
-    String svtSubdetectorName = "Tracker";
-    
-    boolean loadSvtConditions = true;
-    boolean loadEcalConditions = true;
-
-    /**
-     * Constructor which initializes the conditions manager with default connection
-     * parameters and configuration.
-     */
-    public ConditionsDriver() {
-        manager = new DatabaseConditionsManager();
-        manager.setConnectionResource(_defaultConnectionResource);
-        manager.configure(_defaultConfigResource);
-        manager.register();
-    }
-
-    /**
-     * Set the configuration XML resource to be used by the manager.
-     * @param resource the configuration resource
-     */
-    public void setConfigResource(String resource) {
-        manager.configure(resource);
-    }
-
-    /**
-     * Set the connection properties file resource to be used by the manager.
-     * @param resource the connection resource
-     */
-    public void setConnectionResource(String resource) {
-        manager.setConnectionResource(resource);
-    }
-    
-    public void setLoadSvtConditions(boolean loadSvtConditions) {
-        this.loadSvtConditions = loadSvtConditions;
-    }
-    
-    public void setLoadEcalConditions(boolean loadEcaltConditions) {
-        this.loadEcalConditions = loadSvtConditions;
-    }
-
-    /**
-     * Set the class of the conditions reader to use.
-     */
-    /*
-    public void setConditionsReaderClass(String className) {
-        try {
-            Object object = Class.forName(className).newInstance();
-            ConditionsReader reader = (ConditionsReader) object;
-            if (reader != null)
-                manager.setBaseConditionsReader(reader);
-            else
-                throw new IllegalArgumentException("The class " + className + " is not a ConditionsReader.");
-        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
-            throw new RuntimeException(e);
-        }
-    }
-    */
-
-    public void setEcalSubdetectorName(String ecalSubdetectorName) {
-        this.ecalSubdetectorName = ecalSubdetectorName;
-    }
-
-    public void setSvtSubdetectorName(String svtSubdetectorName) {
-        this.svtSubdetectorName = svtSubdetectorName;
-    }
-    
-    
-
-    /**
-     * This method updates a new detector with SVT and ECal conditions data.
-     */
-    public void detectorChanged(Detector detector) {
-        // Load SVT conditions onto the detector.
-        if (loadSvtConditions)
-            loadSvtConditions(detector);
-        // Load ECAL conditions onto the detector.
-        if (loadEcalConditions)
-            loadEcalConditions(detector);
-    }
-
-    /**
-     * Load the SVT conditions onto the <code>Detector</code>.
-     * @param detector The detector to update.
-     */
-    private void loadSvtConditions(Detector detector) {
-        SvtConditions conditions = manager.getCachedConditions(SvtConditions.class, SVT_CONDITIONS).getCachedData();
-        SvtDetectorSetup loader = new SvtDetectorSetup();
-        loader.load(detector, conditions);
-    }
-
-    /**
-     * Load the ECal conditions onto the <code>Detector</code>.
-     * @param detector The detector to update.
-     */
-    private void loadEcalConditions(Detector detector) {
-        EcalConditions conditions = manager.getCachedConditions(EcalConditions.class, ECAL_CONDITIONS).getCachedData();
-        EcalDetectorSetup loader = new EcalDetectorSetup();
-        loader.load(detector.getSubdetector(ecalSubdetectorName), conditions);
-    }
-
-    public void endOfData() {
-        manager.closeConnection();
-    }
-}

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/config
TestRunReadOnlyConfiguration.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/config/TestRunReadOnlyConfiguration.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/config/TestRunReadOnlyConfiguration.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -22,6 +22,10 @@
     private static final String config = "/org/hps/conditions/config/conditions_database_testrun_2012.xml";
     private static final String prop = "/org/hps/conditions/config/conditions_database_testrun_2012_connection.properties";
    
+    public TestRunReadOnlyConfiguration() {
+        super(config, prop);
+    }
+    
     /**
      * Class constructor.
      * @param setup True to setup the conditions manager and the detector.  

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/ecal
EcalConditionsConverter.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/ecal/EcalConditionsConverter.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -6,64 +6,123 @@
 import static org.hps.conditions.TableConstants.ECAL_GAINS;
 import static org.hps.conditions.TableConstants.ECAL_TIME_SHIFTS;
 
+
+import org.lcsim.conditions.ConditionsConverter;
+import org.lcsim.conditions.ConditionsManager;
+
 import org.hps.conditions.ecal.EcalBadChannel.EcalBadChannelCollection;
 import org.hps.conditions.ecal.EcalCalibration.EcalCalibrationCollection;
 import org.hps.conditions.ecal.EcalChannel.ChannelId;
 import org.hps.conditions.ecal.EcalChannel.EcalChannelCollection;
 import org.hps.conditions.ecal.EcalGain.EcalGainCollection;
 import org.hps.conditions.ecal.EcalTimeShift.EcalTimeShiftCollection;
-import org.lcsim.conditions.ConditionsConverter;
-import org.lcsim.conditions.ConditionsManager;
+import org.hps.conditions.DatabaseConditionsManager;
+import org.hps.conditions.TableMetaData;
 
 /**
  * This class loads all ecal conditions into an {@link EcalConditions} object from the
  * database, based on the current run number known by the conditions manager.
+ * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
 public final class EcalConditionsConverter implements ConditionsConverter<EcalConditions> {
 
+	private TableMetaData metaData = null; 
+	private String tableName = null;
+	
     /**
      * Create ECAL conditions object containing all data for the current run.
      */
     public EcalConditions getData(ConditionsManager manager, String name) {
 
-        // Create new, empty conditions object to fill with data.
-        EcalConditions conditions = new EcalConditions();
+    	DatabaseConditionsManager dbConditionsManager = (DatabaseConditionsManager) manager;
 
-        // Get the channel information from the database.
-        EcalChannelCollection channels = manager.getCachedConditions(EcalChannelCollection.class, ECAL_CHANNELS).getCachedData();
+        // Get the table name containing the Ecal channel map from the database
+        // configuration.  If it doesn't exist, use the default value.
+        metaData = dbConditionsManager.findTableMetaData(EcalChannelCollection.class);
+        if(metaData != null){
+        	tableName = metaData.getTableName();
+        } else { 
+        	tableName = ECAL_CHANNELS;  
+        }
+        // Get the Ecal channel map from the conditions database
+        EcalChannelCollection channels = manager.getCachedConditions(EcalChannelCollection.class, tableName).getCachedData();
 
+    	// Create the Ecal conditions object that will be used to encapsulate
+        // Ecal conditions collections
+        EcalConditions conditions = new EcalConditions();
+        
         // Set the channel map.
         conditions.setChannelCollection(channels);
 
         System.out.println("channel collection size = " + channels.getObjects().size());
 
-        // Add gains.
-        EcalGainCollection gains = manager.getCachedConditions(EcalGainCollection.class, ECAL_GAINS).getCachedData();
+        // Get the table name containing the Ecal gains from the database
+        // configuration. If it doesn't exist, use the default value.
+        metaData = dbConditionsManager.findTableMetaData(EcalGainCollection.class);
+        if(metaData != null){
+        	tableName = metaData.getTableName();
+        } else { 
+        	tableName = ECAL_GAINS;  
+        }
+        // Add the gains
+        EcalGainCollection gains = manager.getCachedConditions(EcalGainCollection.class, tableName).getCachedData();
         for (EcalGain gain : gains.getObjects()) {
             ChannelId channelId = new ChannelId(new int[] {gain.getChannelId()});
             EcalChannel channel = channels.findChannel(channelId);
             conditions.getChannelConstants(channel).setGain(gain);
         }
 
+        // Get the table name containing the Ecal bad channel map from the 
+        // database configuration. If it doesn't exist, use the default value.
+        metaData = dbConditionsManager.findTableMetaData(EcalBadChannelCollection.class);
+        if(metaData != null){
+        	tableName = metaData.getTableName();
+        } else { 
+        	tableName = ECAL_BAD_CHANNELS;  
+        }
+        
         // Add bad channels.
-        EcalBadChannelCollection badChannels = manager.getCachedConditions(EcalBadChannelCollection.class, ECAL_BAD_CHANNELS).getCachedData();
-        for (EcalBadChannel badChannel : badChannels.getObjects()) {
-            ChannelId channelId = new ChannelId(new int[] {badChannel.getChannelId()});
-            EcalChannel channel = channels.findChannel(channelId);
-            conditions.getChannelConstants(channel).setBadChannel(true);
+        // FIXME: This should be changed to catch a conditions record not found
+        // exception instead of a runtime exception
+        try { 
+        	EcalBadChannelCollection badChannels = manager.getCachedConditions(EcalBadChannelCollection.class, tableName).getCachedData();
+        	for (EcalBadChannel badChannel : badChannels.getObjects()) {
+        		ChannelId channelId = new ChannelId(new int[] {badChannel.getChannelId()});
+        		EcalChannel channel = channels.findChannel(channelId);
+        		conditions.getChannelConstants(channel).setBadChannel(true);
+        	}
+        } catch(RuntimeException e){
+        	e.printStackTrace();
         }
 
+        
+        // Get the table name containing the Ecal calibrations (pedestal, noise)
+        // from the database configuration. If it doesn't exist, use the default value.
+        metaData = dbConditionsManager.findTableMetaData(EcalCalibrationCollection.class);
+        if(metaData != null){
+        	tableName = metaData.getTableName();
+        } else { 
+        	tableName = ECAL_CALIBRATIONS;  
+        }
         // Add calibrations including pedestal and noise values.
-        EcalCalibrationCollection calibrations = manager.getCachedConditions(EcalCalibrationCollection.class, ECAL_CALIBRATIONS).getCachedData();
+        EcalCalibrationCollection calibrations = manager.getCachedConditions(EcalCalibrationCollection.class, tableName).getCachedData();
         for (EcalCalibration calibration : calibrations.getObjects()) {
             ChannelId channelId = new ChannelId(new int[] {calibration.getChannelId()});
             EcalChannel channel = channels.findChannel(channelId);
             conditions.getChannelConstants(channel).setCalibration(calibration);
         }
 
+        // Get the table name containing the Ecal calibrations (pedestal, noise)
+        // from the database configuration. If it doesn't exist, use the default value.
+        metaData = dbConditionsManager.findTableMetaData(EcalTimeShiftCollection.class);
+        if(metaData != null){
+        	tableName = metaData.getTableName();
+        } else { 
+        	tableName = ECAL_TIME_SHIFTS;  
+        }
         // Add time shifts.
-        EcalTimeShiftCollection timeShifts = manager.getCachedConditions(EcalTimeShiftCollection.class, ECAL_TIME_SHIFTS).getCachedData();
+        EcalTimeShiftCollection timeShifts = manager.getCachedConditions(EcalTimeShiftCollection.class, tableName).getCachedData();
         for (EcalTimeShift timeShift : timeShifts.getObjects()) {
             ChannelId channelId = new ChannelId(new int[] {timeShift.getChannelId()});
             EcalChannel channel = channels.findChannel(channelId);

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt
SvtDaqMapping.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/SvtDaqMapping.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -4,6 +4,12 @@
 import org.hps.conditions.ConditionsObjectCollection;
 import org.hps.util.Pair;
 
+/**
+ * This class encapsulates the SVT DAQ map.
+ * 
+ * @author Jeremy McCormick <[log in to unmask]>
+ * @author Omar Moreno <[log in to unmask]>
+ */
 public final class SvtDaqMapping extends AbstractConditionsObject {
 
     public static class SvtDaqMappingCollection extends ConditionsObjectCollection<SvtDaqMapping> {
@@ -13,6 +19,12 @@
          */
         public static final String TOP_HALF = "T";
         public static final String BOTTOM_HALF = "B";
+        
+        /**
+         * Flag values for axial or stereo sensors 
+         */
+        public static final String AXIAL = "A";
+        public static final String STEREO = "S";
 
         /**
          * Get a DAQ pair (FEB ID, FEB Hybrid ID) by SVT volume, layer number
@@ -67,6 +79,25 @@
             return null;
         }
         
+        /**
+         * Get the orientation of a sensor using the FEB ID and FEB Hybrid ID.
+         * If the FEB ID and FEB Hybrid ID combination is not found, return null.
+         * 
+         * @param daqPair (Pair<FEB ID, FEB Hybrid ID>) for a given sensor
+         * @return If a daqPair is found, return an "A" if the sensor 
+         * 		   orientation is Axial, an "S" if the orientation is Stereo or
+         * 		   null if the daqPair doesn't exist.
+         */
+        public String getOrientation(Pair<Integer, Integer> daqPair){
+        	
+        	for(SvtDaqMapping daqMapping : this.getObjects()){
+        		
+        		if(daqPair.getFirstElement() == daqMapping.getFebID() && daqPair.getSecondElement() == daqMapping.getFebHybridID()){
+        			return daqMapping.getOrientation(); 
+        		}
+        	}
+        	return null;
+        }
 
         /**
          * Convert this object to a string.

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt
SvtDetectorSetup.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/SvtDetectorSetup.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/java/org/hps/conditions/svt/SvtDetectorSetup.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -8,6 +8,7 @@
 import org.hps.conditions.svt.SvtT0Shift.SvtT0ShiftCollection;
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.geometry.Detector;
+import org.lcsim.geometry.compact.Subdetector;
 import org.hps.util.Pair;
 
 /**
@@ -19,16 +20,15 @@
 public final class SvtDetectorSetup {
 
     /**
-     * Load conditions data onto a detector object. This method is analogous to
-     * {@link org.lcsim.hps.recon.tracking.SvtUtils#setup(Detector)}.
-     * @param detector The detector object.
+     * Load conditions data onto a detector object.
+     * 
+     * @param  The detector object.
      * @param conditions The conditions object.
      */
-    // FIXME: Change this to use a Subdetector instead of the Detector.
-    public void load(Detector detector, SvtConditions conditions) {
+    public void load(Subdetector subdetector, SvtConditions conditions) {
 
         // Find sensor objects.
-        List<HpsSiSensor> sensors = detector.getDetectorElement().findDescendants(HpsSiSensor.class);
+    	List<HpsSiSensor> sensors = subdetector.getDetectorElement().findDescendants(HpsSiSensor.class);
         SvtChannelCollection channelMap = conditions.getChannelMap();
         SvtDaqMappingCollection daqMap = conditions.getDaqMap();
         SvtT0ShiftCollection t0Shifts = conditions.getT0Shifts();
@@ -66,35 +66,56 @@
            
             // Set the FEB Hybrid ID of the sensor
             sensor.setFebHybridID(daqPair.getSecondElement());
+           
+            // Set the orientation of the sensor
+            String orientation = daqMap.getOrientation(daqPair);
+            if(orientation != null && orientation.contentEquals(SvtDaqMappingCollection.AXIAL)){
+            	sensor.setAxial(true);
+            } else if(orientation != null && orientation.contains(SvtDaqMappingCollection.STEREO)){
+            	sensor.setStereo(true);
+            }
 
             // Find all the channels for this sensor.
             Collection<SvtChannel> channels = channelMap.find(daqPair);
 
             // Loop over the channels of the sensor.
             for (SvtChannel channel : channels) {
-                // Get conditions data for this channel.
+                
+            	// Get conditions data for this channel.
                 ChannelConstants constants = conditions.getChannelConstants(channel);
                 int channelNumber = channel.getChannel();
 
                 //
                 // Set conditions data for this channel on the sensor object:
                 //
+                
+                // Check if the channel was flagged as bad
                 if (constants.isBadChannel()) {
                     sensor.setBadChannel(channelNumber);
                 }
-
-                /*
+                
+                // Set the pedestal and noise of each of the samples for the 
+                // channel
+                double[] pedestal = new double[6];
+                double[] noise = new double[6];
+                for(int sampleN = 0; sampleN < HpsSiSensor.NUMBER_OF_SAMPLES; sampleN++){
+                	pedestal[sampleN] = constants.getCalibration().getPedestal(sampleN);
+                	noise[sampleN] = constants.getCalibration().getNoise(sampleN);
+                }
+                sensor.setPedestal(channelNumber, pedestal);
+                sensor.setNoise(channelNumber, noise);
+               
+                // Set the gain and offset for the channel
                 sensor.setGain(channelNumber, constants.getGain().getGain());
-                sensor.setTimeOffset(channelNumber, constants.getGain().getOffset());
-                sensor.setNoise(channelNumber, constants.getCalibration().getNoise());
-                sensor.setPedestal(channelNumber, constants.getCalibration().getPedestal());
-                sensor.setPulseParameters(channelNumber, constants.getPulseParameters().toArray());
-                */
+                sensor.setOffset(channelNumber, constants.getGain().getOffset());
+               
+                // Set the shape fit parameters
+                sensor.setShapeFitParameters(channelNumber, constants.getShapeFitParameters().toArray());
             }
 
-            // Set the time shift for the sensor.
-            //SvtTimeShift sensorTimeShift = timeShifts.find(daqPair).get(0);
-            //sensor.setTimeShift(sensorTimeShift.getTimeShift());
+            // Set the t0 shift for the sensor.
+            SvtT0Shift sensorT0Shift = t0Shifts.find(daqPair).get(0);
+            sensor.setT0Shift(sensorT0Shift.getT0Shift());
         }
     }
 }

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/resources/org/hps/conditions/config
conditions_database_testrun_2012.xml 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/resources/org/hps/conditions/config/conditions_database_testrun_2012.xml	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/main/resources/org/hps/conditions/config/conditions_database_testrun_2012.xml	2014-09-18 18:30:50 UTC (rev 1046)
@@ -6,14 +6,18 @@
         <converter class="org.hps.conditions.ConditionsRecordConverter"/>
 
         <!-- SVT converters -->
+        <!--          
         <converter class="org.hps.conditions.svt.SvtConditionsConverter"/>
         <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtBadChannelConverter"/>
         <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtCalibrationConverter"/>
         <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtChannelConverter"/>
         <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtDaqMappingConverter"/>
         <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtGainConverter"/>
-        <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtPulseParametersConverter"/>
+        <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtPulseParametersConverter"/> 
+        <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtShapeFitParametersConverter"/>
         <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtTimeShiftConverter"/>
+        <converter class="org.hps.conditions.svt.SvtConverterRegistry$SvtT0ShiftConverter"/>
+        -->
 
         <!-- ECal converters -->
         <converter class="org.hps.conditions.ecal.EcalConditionsConverter"/>
@@ -49,7 +53,8 @@
                 <field name="collection_id" />
             </fields>
         </table>
-    
+
+<!--      
         <table key="svt_channels" name="svt_channels">
             <classes>
                 <object class="org.hps.conditions.svt.SvtChannel"/>
@@ -73,10 +78,25 @@
                 <field name="gain" />
                 <field name="offset" />
             </fields>
-        </table>
+        </table>        
         
         <table key="svt_pulse_parameters" name="svt_pulse_parameters">
             <classes>
+                <object class="org.hps.conditions.svt.SvtShapeFitParameters"/>
+                <collection class="org.hps.conditions.svt.SvtShapeFitParameters$SvtShapeFitParametersCollection"/>
+            </classes>
+            <fields>
+                <field name="svt_channel_id" />
+                <field name="amplitude" />
+                <field name="t0" />
+                <field name="tp" />
+            </fields>        
+        </table>
+-->        
+
+<!--         
+        <table key="svt_pulse_parameters" name="svt_pulse_parameters">
+            <classes>
                 <object class="org.hps.conditions.svt.SvtPulseParameters"/>
                 <collection class="org.hps.conditions.svt.SvtPulseParameters$SvtPulseParametersCollection"/>
             </classes>
@@ -88,7 +108,9 @@
                 <field name="chisq" />
             </fields>        
         </table>
+-->
         
+<!--          
         <table key="svt_calibrations" name="svt_calibrations">
             <classes>
                 <object class="org.hps.conditions.svt.SvtCalibration"/>
@@ -100,6 +122,20 @@
                 <field name="pedestal" />
             </fields>        
         </table>
+-->        
+
+<!--                  
+        <table key="svt_t0_shifts" name="svt_t0_shifts">
+            <classes>
+                <object class="org.hps.conditions.svt.SvtT0Shift"/>
+                <collection class="org.hps.conditions.svt.SvtT0Shift$SvtT0ShiftCollection"/>
+            </classes>
+            <fields>
+                <field name="feb_id" />
+                <field name="feb_hybrid_id" />
+                <field name="t0_shift" />
+            </fields>        
+        </table>
         
         <table key="svt_time_shifts" name="svt_time_shifts">
             <classes>
@@ -112,7 +148,9 @@
                 <field name="time_shift" />
             </fields>        
         </table>
-        
+-->        
+
+<!--          
         <table key="svt_bad_channels" name="svt_bad_channels">
             <classes>
                 <object class="org.hps.conditions.svt.SvtBadChannel"/>
@@ -135,6 +173,7 @@
                 <field name="hybrid" />
             </fields>  
         </table>
+-->        
         
         <table key="ecal_bad_channels" name="ecal_bad_channels">
             <classes>

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions
ConditionsDriverTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/ConditionsDriverTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/ConditionsDriverTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -15,7 +15,7 @@
 import org.lcsim.util.loop.LCSimLoop;
 
 /**
- * This class tests that {@link org.lcsim.hps.conditions.ConditionsDriver} works correctly
+ * This class tests that {@link org.lcsim.hps.conditions.TestRunConditionsDriver} works correctly
  * by checking the number of runs it processes.
  * @author Jeremy McCormick <[log in to unmask]>
  */
@@ -42,7 +42,7 @@
 
         // Configure the loop.
         loop.setLCIORecordSource(testFile);
-        ConditionsDriver conditionsDriver = new ConditionsDriver();
+        TestRunConditionsDriver conditionsDriver = new TestRunConditionsDriver();
         conditionsDriver.setLoadSvtConditions(false);
         loop.add(conditionsDriver);
         RunNumberDriver runNumberDriver = new RunNumberDriver();

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions
ConditionsTestRunTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/ConditionsTestRunTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/ConditionsTestRunTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -13,14 +13,14 @@
     static String config = "/org/hps/conditions/config/conditions_database_testrun_2012.xml";
     static String prop = "/org/hps/conditions/config/conditions_database_testrun_2012_connection.properties";
     
-    public void testConditionsDev() {
+    public void testConditionsTestRun() {
 
         DatabaseConditionsManager manager = new DatabaseConditionsManager();
         manager.configure(config);
         manager.setConnectionResource(prop);
         manager.register();
         try {
-            manager.setDetector("HPS-Proposal2014-v8-6pt6", 0);
+            manager.setDetector("HPS-TestRun-v8-5", 0);
         } catch (ConditionsNotFoundException e) {
             throw new RuntimeException(e);
         }

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/beam
BeamCurrentTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/beam/BeamCurrentTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/beam/BeamCurrentTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -9,7 +9,7 @@
 
 import junit.framework.TestCase;
 
-import org.hps.conditions.ConditionsDriver;
+import org.hps.conditions.TestRunConditionsDriver;
 import org.hps.conditions.beam.BeamCurrent.BeamCurrentCollection;
 import org.lcsim.conditions.ConditionsManager;
 import org.lcsim.event.EventHeader;
@@ -57,7 +57,7 @@
 
         // Configure and run the loop.
         loop.setLCIORecordSource(testFile);
-        ConditionsDriver conditionsDriver = new ConditionsDriver();
+        TestRunConditionsDriver conditionsDriver = new TestRunConditionsDriver();
         conditionsDriver.setLoadSvtConditions(false);
         loop.add(conditionsDriver);
         loop.add(new BeamCurrentChecker());

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/ecal
PhysicalToGainTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/ecal/PhysicalToGainTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/ecal/PhysicalToGainTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -6,8 +6,8 @@
 
 import junit.framework.TestCase;
 
-import org.hps.conditions.ConditionsDriver;
 import org.hps.conditions.TableConstants;
+import org.hps.conditions.TestRunConditionsDriver;
 import org.hps.conditions.ecal.EcalChannel.EcalChannelCollection;
 import org.hps.conditions.ecal.EcalChannel.GeometryId;
 import org.lcsim.conditions.ConditionsManager;
@@ -43,7 +43,7 @@
 
         // Configure the loop.
         loop.setLCIORecordSource(testFile);
-        ConditionsDriver conditionsDriver = new ConditionsDriver();
+        TestRunConditionsDriver conditionsDriver = new TestRunConditionsDriver();
         conditionsDriver.setLoadSvtConditions(false);
         loop.add(conditionsDriver);
         loop.add(new PhysicalToGainDriver());

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt
SvtBadChannelTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt/SvtBadChannelTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt/SvtBadChannelTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -9,8 +9,8 @@
 
 import junit.framework.TestCase;
 
-import org.hps.conditions.ConditionsDriver;
 import org.hps.conditions.DatabaseConditionsManager;
+import org.hps.conditions.TestRunConditionsDriver;
 import org.lcsim.detector.tracker.silicon.HpsSiSensor;
 import org.lcsim.event.EventHeader;
 import org.lcsim.geometry.Detector;
@@ -58,7 +58,7 @@
 
         // Configure the loop.
         loop.setLCIORecordSource(testFile);
-        loop.add(new ConditionsDriver());
+        loop.add(new TestRunConditionsDriver());
         loop.add(new SvtBadChannelChecker());
 
         DatabaseConditionsManager.getInstance().setLogLevel(Level.OFF);

java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt
SvtDetectorSetupTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt/SvtDetectorSetupTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/conditions/src/test/java/org/hps/conditions/svt/SvtDetectorSetupTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -15,18 +15,26 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  * @author Omar Moreno <[log in to unmask]>
- * @version $Id$
  */
-// TODO: Need to fix this tests so that it actually makes sense for the conditions we have.
+// TODO: Update this test with more meaningful test.
 public class SvtDetectorSetupTest extends TestCase {
 	
 	
 	//--- Constants ---//
 	//-----------------//
+	// TODO: Move all of these constants to their own class
 	
 	// Total number of SVT sensors
 	public static final int TOTAL_NUMBER_OF_SENSORS = 36;	
-	   
+	// Max FEB ID 
+	public static final int MAX_FEB_ID = 9; 
+	// Max FEB Hybrid ID
+	public static final int MAX_FEB_HYBRID_ID = 3;
+	// Max channel number
+	public static final int MAX_CHANNEL_NUMBER = 639;
+	// SVT Subdetector name
+	public static final String SVT_SUBDETECTOR_NAME = "Tracker";
+	
 	public void setUp(){
 	    new DevReadOnlyConfiguration().setup().load("HPS-Proposal2014-v7-2pt2", 0);
 	}
@@ -46,41 +54,51 @@
 
         // Load the SVT conditions onto detector.
         SvtDetectorSetup loader = new SvtDetectorSetup();
-        loader.load(detector, conditions);
+        loader.load(detector.getSubdetector(SVT_SUBDETECTOR_NAME), conditions);
 
         // Check sensor data.
-        List<HpsSiSensor> sensors = detector.getDetectorElement().findDescendants(HpsSiSensor.class);
+        List<HpsSiSensor> sensors = detector.getSubdetector(SVT_SUBDETECTOR_NAME).getDetectorElement().findDescendants(HpsSiSensor.class);
         
-        int nChannels = sensors.get(0).getNumberOfChannels();
-        this.printDebug("Total number of channels per sensor: " + nChannels);
+        // Check for correct number of sensors processed.
+		this.printDebug("Total number of sensors found: " + sensors.size());
+		assertTrue(sensors.size() == TOTAL_NUMBER_OF_SENSORS);
         
         // Loop over sensors.
         int totalSensors = 0; 
         for (HpsSiSensor sensor : sensors) {
 
-        	totalSensors++; 
+        	int nChannels = sensor.getNumberOfChannels();
+        	assertTrue("The number of channels this sensor has is invalid", nChannels <= MAX_CHANNEL_NUMBER);
+        
+        	this.printDebug(sensor.toString());
         	
-        	// Check that hardware information seems reasonable.
+        	// Check that the FEB ID as within the appropriate range
+            int febID = sensor.getFebID();
+            assertTrue("FEB ID is invalid.  The FEB ID should be less than " + MAX_FEB_ID,
+            		febID <= MAX_FEB_ID);
+            
             int febHybridID = sensor.getFebHybridID();
-            int febID = sensor.getFebID();
-
+            assertTrue("FEB Hybrid ID is invalid.  The FEB Hybrid ID should be less than " + MAX_FEB_HYBRID_ID,
+            		febHybridID <= MAX_FEB_HYBRID_ID);
+            
             for (int channel = 0; channel < nChannels; channel++) {
         
-                // Check that conditions values are not zero:
-                /*assertTrue("Gain is zero.", sensor.getGain(channel) != 0);
-                assertTrue("Noise is zero.", sensor.getNoise(channel) != 0);
-                assertTrue("Pedestal is zero.", sensor.getPedestal(channel) != 0);
-                assertTrue("Time offset is zero.", sensor.getTimeOffset(channel) != 0);
-                assertTrue("PulseParameters points to null.", sensor.getPulseParameters(channel) != null);
-                double[] pulse = sensor.getPulseParameters(channel);
-                */
+            	//
+                // Check that channel conditions values are not zero
+            	//
+            	for(int sampleN = 0; sampleN < 6; sampleN++){
+            		assertTrue("Pedestal sample " + sampleN + " is zero.",
+            				sensor.getPedestal(channel, sampleN) != 0);
+            		assertTrue("Noise sample " + sampleN + " is zero.",
+            				sensor.getNoise(channel, sampleN) != 0);
+            	}
+                assertTrue("Gain is zero.", sensor.getGain(channel) != 0);
+                assertTrue("Shape fit parameters points to null.",
+                		sensor.getShapeFitParameters(channel) != null);
+                
             }
         }
         
-        // Check for correct number of sensors processed.
-		this.printDebug("Total number of sensors found: " + totalSensors);
-		assertTrue(totalSensors == TOTAL_NUMBER_OF_SENSORS);
-        
         System.out.println("Successfully loaded conditions data onto " + totalSensors + " SVT sensors!"); 
     }
 

java/branches/hps_java_trunk_HPSJAVA-255/integration-tests
pom.xml 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/pom.xml	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/pom.xml	2014-09-18 18:30:50 UTC (rev 1046)
@@ -1,30 +1,38 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    
     <modelVersion>4.0.0</modelVersion>
     <artifactId>hps-integration-tests</artifactId>
     <name>integration-tests</name>
     <description>Integration test suite</description>
-    
     <parent>
         <groupId>org.hps</groupId>
         <artifactId>hps-parent</artifactId>
         <relativePath>../parent/pom.xml</relativePath>
         <version>3.0.3-SNAPSHOT</version>
     </parent>
-    
     <scm>
         <url>http://java.freehep.org/svn/repos/hps/list/java/trunk/integration-tests/</url>
         <connection>scm:svn:svn://svn.freehep.org/hps/java/trunk/integration-tests/</connection>
         <developerConnection>scm:svn:svn://svn.freehep.org/hps/java/trunk/integration-tests/</developerConnection>
     </scm>
-
     <dependencies>
         <dependency>
             <groupId>org.hps</groupId>
             <artifactId>hps-distribution</artifactId>
         </dependency>
     </dependencies>
-    
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>org/hps/GenerateEcalReadoutSimData.java</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+        </plugins>            
+    </build>
     <profiles>
         <profile>
             <id>non-slac</id>

java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps
EcalReadoutSimTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps/EcalReadoutSimTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps/EcalReadoutSimTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -86,9 +86,8 @@
     static final String className = EcalReadoutSimTest.class.getSimpleName();
     
     // Resource locations.    
-    static final String resourceDir = "/org/hps/ecalreadoutsim/";
-    static final String steeringResource = resourceDir + className + ".lcsim";
-    static final String triggeredEventsResource = resourceDir + "triggered_events.txt";
+    static final String steeringResource = "/org/hps/steering/test/EcalReadoutSimTest.lcsim";
+    static final String triggeredEventsResource = "/org/hps/test/EcalReadoutSimTest/triggered_events.txt";
     
     // File information.
     static final File inputFile = new File("/nfs/slac/g/hps3/data/testcase/ecal_readout_sim_input.slcio");

java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps
EtSystemTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps/EtSystemTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps/EtSystemTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -115,15 +115,18 @@
         etProcess.destroy();
         
         // Now wait for the station process to die from the ET ring going down which will cause an EOFException.
-        int stationProcessReturnCode = 0;
+        //int stationProcessReturnCode = 0;
         try {
-            stationProcessReturnCode = etStationProcess.waitFor();
+            //stationProcessReturnCode = 
+            etStationProcess.waitFor();
         } catch (InterruptedException e) {
             e.printStackTrace();
         }
         
-        assertEquals("The station process returned a non-zero exit status.", 0, stationProcessReturnCode);
+        //System.out.println("state")
         
+        //assertEquals("The station process returned a non-zero exit status.", 0, stationProcessReturnCode);
+        
         // Clear the list of active processes.
         processes.clear();
     }

java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps
MockDataReconTest.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps/MockDataReconTest.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/integration-tests/src/test/java/org/hps/MockDataReconTest.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -35,7 +35,7 @@
     static final File reconFile = new File(outputFile.getAbsolutePath() + ".slcio");
     static final File aidaFile = new File(outputFile.getAbsolutePath() + ".aida");    
 
-    static final String steeringResource = "/org/hps/mockdatarecon/MockDataReconTest.lcsim";
+    static final String steeringResource = "/org/hps/steering/test/MockDataReconTest.lcsim";
     //static final String steeringResource = "/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim";
     
     // TODO: Get some values for these and add test assertions!

java/branches/hps_java_trunk_HPSJAVA-255/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots
EcalLedCommissioning.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedCommissioning.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/monitoring-drivers/src/main/java/org/hps/monitoring/ecal/plots/EcalLedCommissioning.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -6,6 +6,7 @@
 import hep.aida.ICloud2D;
 import hep.aida.IPlotter;
 import hep.aida.IPlotterFactory;
+import hep.aida.IPlotterStyle;
 
 import java.awt.Point;
 import java.awt.event.ActionEvent;
@@ -67,6 +68,7 @@
    // ArrayList<ICloud1D> channelRawWaveform;
     ArrayList<IHistogram2D> channelTimeVsEnergyPlot;
    
+    IPlotterStyle pstyle;
     
     
     double maxEch = 2500 * ECalUtils.MeV;
@@ -130,46 +132,36 @@
    	   ix=ECalUtils.getColumnFromHistoID(id);  
    	   
    	   
-    	
-    			
-    			
-    			
-    	plotterFactory = aida.analysisFactory().createPlotterFactory("Ecal single channel plots");
-   
-       
+    	plotterFactory = aida.analysisFactory().createPlotterFactory("Ecal LED commissioning");       
         plotter = plotterFactory.create("Single channel");
+   	    pstyle = this.createDefaultStyle(); 		
         plotter.setTitle("");
-        plotter.style().setParameter("hist2DStyle", "colorMap");
-        plotter.style().dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
-        plotter.style().dataStyle().fillStyle().setParameter("showZeroHeightBins",Boolean.FALSE.toString());
-        plotter.style().dataStyle().errorBarStyle().setVisible(false);
+   
+     
         plotter.createRegions(2,2);
 
 
+        pstyle.xAxisStyle().setLabel("Hit energy (GeV)");
+        pstyle.yAxisStyle().setLabel("");
+        plotter.region(0).plot(channelEnergyPlot.get(id),pstyle);
+   
+        pstyle.xAxisStyle().setLabel("Hit Time (ns)");
+        pstyle.yAxisStyle().setLabel("");    
+        plotter.region(1).plot(channelTimePlot.get(id),pstyle);           	    
         
-        plotter.region(0).plot(channelEnergyPlot.get(id));
-        plotter.region(0).style().xAxisStyle().setLabel("Hit energy (GeV)");
-        plotter.region(0).style().yAxisStyle().setLabel("");
-        
-        plotter.region(1).plot(channelTimePlot.get(id));           	    
-        plotter.region(1).style().xAxisStyle().setLabel("Hit Time (ns)");
-        plotter.region(1).style().yAxisStyle().setLabel("");
+        pstyle.xAxisStyle().setLabel("Hit Time (ns)");
+        pstyle.yAxisStyle().setLabel("Hit Energy (GeV)");    
+    	plotter.region(2).plot(channelTimeVsEnergyPlot.get(id),pstyle);
 
-    	plotter.region(2).plot(channelTimeVsEnergyPlot.get(id));
-        plotter.region(2).style().xAxisStyle().setLabel("Hit Time (ns)");
-        plotter.region(2).style().yAxisStyle().setLabel("Hit Energy (GeV)");
-    
-    	
-	    plotter.region(3).plot(channelRawWaveform.get(id));
-	    plotter.region(3).style().xAxisStyle().setLabel("Hit energy (GeV)");
-        plotter.region(3).style().yAxisStyle().setLabel("");
-        plotter.region(3).style().dataStyle().fillStyle().setColor("orange");
-        plotter.region(3).style().dataStyle().markerStyle().setColor("orange");
-        plotter.region(3).style().dataStyle().errorBarStyle().setVisible(false);
+    	pstyle.xAxisStyle().setLabel("Hit Energy (GeV)");    
+        pstyle.yAxisStyle().setLabel("");
+        pstyle.dataStyle().fillStyle().setColor("orange");
+        pstyle.dataStyle().markerStyle().setColor("orange");
+        pstyle.dataStyle().errorBarStyle().setVisible(false);
+	    plotter.region(3).plot(channelRawWaveform.get(id),pstyle);
+	
         
         
-        
-        
         System.out.println("Create the event viewer");
         viewer=new PEventViewer();
         viewer.addCrystalListener(this);
@@ -323,36 +315,78 @@
     	    id=ECalUtils.getHistoIDFromRowColumn(iy,ix);
     	    System.out.println("Crystal event: "+ix+" "+iy+" "+id);
         
-    	
-       	
-           	plotter.region(0).clear();
-            plotter.region(0).plot(channelEnergyPlot.get(id));
-            plotter.region(0).style().xAxisStyle().setLabel("Hit energy (GeV)");
-            plotter.region(0).style().yAxisStyle().setLabel("");
-            
-            plotter.region(1).clear();
-            plotter.region(1).plot(channelTimePlot.get(id));           	    
-            plotter.region(1).style().xAxisStyle().setLabel("Hit Time (ns)");
-            plotter.region(1).style().yAxisStyle().setLabel("");
+    	    
+    	    
+    	    
+    	    
+        	plotter.region(0).clear();
+            pstyle.xAxisStyle().setLabel("Hit energy (GeV)");
+            pstyle.yAxisStyle().setLabel("");
+            plotter.region(0).plot(channelEnergyPlot.get(id),pstyle);
+       
+        	plotter.region(1).clear();
+            pstyle.xAxisStyle().setLabel("Hit Time (ns)");
+            pstyle.yAxisStyle().setLabel("");    
+            plotter.region(1).plot(channelTimePlot.get(id),pstyle);           	    
+     
+            plotter.region(2).clear();
+            pstyle.xAxisStyle().setLabel("Hit Time (ns)");
+            pstyle.yAxisStyle().setLabel("Hit Energy (GeV)");    
+        	plotter.region(2).plot(channelTimeVsEnergyPlot.get(id),pstyle);
 
-    	    plotter.region(2).clear();
-        	plotter.region(2).plot(channelTimeVsEnergyPlot.get(id));
-            plotter.region(2).style().yAxisStyle().setLabel("Hit Energy (GeV)");
-            plotter.region(2).style().xAxisStyle().setLabel("Hit Time (ns)");
+        	plotter.region(3).clear();
         	
-    	    plotter.region(3).clear();
-    	    plotter.region(3).plot(channelRawWaveform.get(id));
+        	 
     	    if (!isFirstRaw[id]){
-    	        plotter.region(3).style().yAxisStyle().setLabel("Signal amplitude (mV)");
-                plotter.region(3).style().xAxisStyle().setLabel("Time (ns)");
-                plotter.region(3).style().dataStyle().fillStyle().setColor("orange");
-                plotter.region(3).style().dataStyle().markerStyle().setColor("orange");
-                plotter.region(3).style().dataStyle().errorBarStyle().setVisible(false);
+    	        pstyle.yAxisStyle().setLabel("Signal amplitude (mV)");
+    	        pstyle.xAxisStyle().setLabel("Time (ns)");
+    	        pstyle.dataStyle().fillStyle().setColor("orange");
+    	        pstyle.dataStyle().markerStyle().setColor("orange");
+    	        pstyle.dataStyle().errorBarStyle().setVisible(false);
     	    }
     	    else{
-    	    	 plotter.region(3).style().xAxisStyle().setLabel("Hit energy (GeV)");
-    	         plotter.region(3).style().yAxisStyle().setLabel("");
+    	    	pstyle.xAxisStyle().setLabel("Hit Energy (GeV)");    
+                pstyle.yAxisStyle().setLabel("");  	    
     	    }
+    	    plotter.region(3).plot(channelRawWaveform.get(id),pstyle);
+        
+
+    	    
+ 
+         
+       
     	}
     }    
+    
+    
+    /*
+     * This method set the default style.
+     */
+    public IPlotterStyle createDefaultStyle() {
+    	IPlotterStyle pstyle = plotterFactory.createPlotterStyle();
+    	// Axis appearence.
+    	pstyle.xAxisStyle().labelStyle().setBold(true);
+    	pstyle.yAxisStyle().labelStyle().setBold(true);
+    	pstyle.xAxisStyle().tickLabelStyle().setBold(true);
+    	pstyle.yAxisStyle().tickLabelStyle().setBold(true);
+    	pstyle.xAxisStyle().lineStyle().setColor("black");
+    	pstyle.yAxisStyle().lineStyle().setColor("black");
+    	pstyle.xAxisStyle().lineStyle().setThickness(2);
+    	pstyle.yAxisStyle().lineStyle().setThickness(2);
+    	
+    	pstyle.dataStyle().fillStyle().setParameter("colorMapScheme", "rainbow");
+    	pstyle.dataStyle().fillStyle().setParameter("showZeroHeightBins",Boolean.FALSE.toString());
+    	pstyle.dataStyle().errorBarStyle().setVisible(false);
+        pstyle.setParameter("hist2DStyle", "colorMap");
+    	// Force auto range to zero.
+    	pstyle.yAxisStyle().setParameter("allowZeroSuppression", "false");
+    	pstyle.xAxisStyle().setParameter("allowZeroSuppression", "false");
+    	// Title style.
+    	pstyle.titleStyle().textStyle().setFontSize(20);
+    	// Draw caps on error bars.
+    	pstyle.dataStyle().errorBarStyle().setParameter("errorBarDecoration", (new Float(1.0f)).toString());
+    	// Turn off grid lines until explicitly enabled.
+    	pstyle.gridStyle().setVisible(false);
+    	return pstyle;
+    	}   
 }

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl
GBLStripClusterData.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLStripClusterData.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLStripClusterData.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -10,6 +10,7 @@
  * 
  * @author phansson
  *
+ * @version $Id:
  */
 public class GBLStripClusterData implements GenericObject {
 	
@@ -61,6 +62,23 @@
 	public GBLStripClusterData(int id) {
 		setId(id);
 	}
+        
+        /*
+        * Constructor from GenericObject
+        * TODO add size checks for backwards compatability
+        */
+        public GBLStripClusterData(GenericObject o)
+        {
+            for(int i=0; i<GBLINT.BANK_INT_SIZE; ++i)
+            {
+                bank_int[i] = o.getIntVal(i);
+            }
+            for(int i=0; i<GBLDOUBLE.BANK_DOUBLE_SIZE; ++i)
+            {
+                bank_double[i] = o.getDoubleVal(i);
+            }
+            
+        }
 	
 	/**
 	 * @param set track id to val
@@ -263,11 +281,6 @@
 		return getDoubleVal(GBLDOUBLE.MSANGLE);
 	}
 	
-
-	
-
-
-
 	/*
 	 * The functions below are all overide from 
 	 * @see org.lcsim.event.GenericObject#getNInt()
@@ -301,7 +314,4 @@
 		return false;
 	}
 
-	
-
-
 }

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl
GBLTrackData.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLTrackData.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GBLTrackData.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -3,6 +3,11 @@
 import org.hps.recon.tracking.gbl.GBLOutput.PerigeeParams;
 import org.lcsim.event.GenericObject;
 
+/**
+ * 
+ * 
+ * @version $Id:
+ */
 public class GBLTrackData implements GenericObject {
 	
 	/*
@@ -34,6 +39,23 @@
 	public GBLTrackData(int id) {	
 		setTrackId(id);
 	}
+        
+        /*
+        * Constructor from GenericObject
+        * TODO add size checks for backwards compatability
+        */
+        public GBLTrackData(GenericObject o)
+        {
+            for(int i=0; i<GBLINT.BANK_INT_SIZE; ++i)
+            {
+                bank_int[i] = o.getIntVal(i);
+            }
+            for(int i=0; i<GBLDOUBLE.BANK_DOUBLE_SIZE; ++i)
+            {
+                bank_double[i] = o.getDoubleVal(i);
+            }
+            
+        }
 	
 	/**
 	 * @param set track id to val
@@ -104,5 +126,4 @@
 		return false;
 	}
 
-
-}
+}
\ No newline at end of file

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl
GblData.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GblData.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GblData.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -2,9 +2,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import org.hps.recon.tracking.gbl.matrix.Matrix;
 import org.hps.recon.tracking.gbl.matrix.VVector;
 
-
 /**
  *
  * @author Norman A Graf
@@ -40,92 +40,109 @@
         thePrediction = 0.;
     }
 
-///// Add derivatives from measurement.
-///**
-// * Add (non-zero) derivatives to data block. Fill list of labels of used fit parameters.
-// * \param [in] iRow Row index (0-4) in up to 5D measurement
-// * \param [in] labDer Labels for derivatives
-// * \param [in] matDer Derivatives (matrix) 'measurement vs track fit parameters'
-// * \param [in] iOff Offset for row index for additional parameters
-// * \param [in] derLocal Derivatives (matrix) for additional local parameters
-// * \param [in] labGlobal Labels for additional global (MP-II) parameters
-// * \param [in] derGlobal Derivatives (matrix) for additional global (MP-II) parameters
-// * \param [in] extOff Offset for external parameters
-// * \param [in] extDer Derivatives for external Parameters
-// */
-//void addDerivatives(unsigned int iRow,
-//		const std::vector<unsigned int> &labDer, const SMatrix55 &matDer,
-//		unsigned int iOff, const TMatrixD &derLocal,
-//		const std::vector<int> &labGlobal, const TMatrixD &derGlobal,
-//		unsigned int extOff, const TMatrixD &extDer) {
-//
-//	unsigned int nParMax = 5 + derLocal.GetNcols() + extDer.GetNcols();
+/// Add derivatives from measurement.
+    /**
+     * Add (non-zero) derivatives to data block. Fill list of labels of used fit
+     * parameters. \param [in] iRow Row index (0-4) in up to 5D measurement
+     * \param [in] labDer Labels for derivatives \param [in] matDer Derivatives
+     * (matrix) 'measurement vs track fit parameters' \param [in] iOff Offset
+     * for row index for additional parameters \param [in] derLocal Derivatives
+     * (matrix) for additional local parameters \param [in] labGlobal Labels for
+     * additional global (MP-II) parameters \param [in] derGlobal Derivatives
+     * (matrix) for additional global (MP-II) parameters \param [in] extOff
+     * Offset for external parameters \param [in] extDer Derivatives for
+     * external Parameters
+     */
+    void addDerivatives(int iRow,
+                        List<Integer> labDer, Matrix matDer,
+                        int iOff, Matrix derLocal,
+                        List<Integer> labGlobal, Matrix derGlobal,
+                        int extOff, Matrix extDer)
+    {
+        int nLocal = 0;
+        int nExt = 0;
+        if (derLocal != null) {
+            nLocal = derLocal.getColumnDimension();
+        }
+        if (extDer != null) {
+            nExt = extDer.getColumnDimension();
+        }
+        int nParMax = 5 + nLocal + nExt;
 //	theParameters.reserve(nParMax); // have to be sorted
 //	theDerivatives.reserve(nParMax);
-//
-//	for (int i = 0; i < derLocal.GetNcols(); ++i) // local derivatives
-//			{
-//		if (derLocal(iRow - iOff, i)) {
-//			theParameters.push_back(i + 1);
-//			theDerivatives.push_back(derLocal(iRow - iOff, i));
-//		}
-//	}
-//
-//	for (int i = 0; i < extDer.GetNcols(); ++i) // external derivatives
-//			{
-//		if (extDer(iRow - iOff, i)) {
-//			theParameters.push_back(extOff + i + 1);
-//			theDerivatives.push_back(extDer(iRow - iOff, i));
-//		}
-//	}
-//
-//	for (unsigned int i = 0; i < 5; ++i) // curvature, offset derivatives
-//			{
-//		if (labDer[i] && matDer(iRow, i)) {
-//			theParameters.push_back(labDer[i]);
-//			theDerivatives.push_back(matDer(iRow, i));
-//		}
-//	}
-//
-//	globalLabels = labGlobal;
-//	for (int i = 0; i < derGlobal.GetNcols(); ++i) // global derivatives
-//		globalDerivatives.push_back(derGlobal(iRow - iOff, i));
-//}
-//
-///// Add derivatives from kink.
-///**
-// * Add (non-zero) derivatives to data block. Fill list of labels of used fit parameters.
-// * \param [in] iRow Row index (0-1) in 2D kink
-// * \param [in] labDer Labels for derivatives
-// * \param [in] matDer Derivatives (matrix) 'kink vs track fit parameters'
-// * \param [in] extOff Offset for external parameters
-// * \param [in] extDer Derivatives for external Parameters
-// */
-//void addDerivatives(unsigned int iRow,
-//		const std::vector<unsigned int> &labDer, const SMatrix27 &matDer,
-//		unsigned int extOff, const TMatrixD &extDer) {
-//
-//	unsigned int nParMax = 7 + extDer.GetNcols();
+
+        if (derLocal != null) {
+            for (int i = 0; i < derLocal.getColumnDimension(); ++i) // local derivatives
+            {
+                if (derLocal.get(iRow - iOff, i) != 0) {
+                    theParameters.add(i + 1);
+                    theDerivatives.add(derLocal.get(iRow - iOff, i));
+                }
+            }
+        }
+
+        if (extDer != null) {
+            for (int i = 0; i < extDer.getColumnDimension(); ++i) // external derivatives
+            {
+                if (extDer.get(iRow - iOff, i) > 0) {
+                    theParameters.add(extOff + i + 1);
+                    theDerivatives.add(extDer.get(iRow - iOff, i));
+                }
+            }
+        }
+        for (int i = 0; i < 5; ++i) // curvature, offset derivatives
+        {
+            if (labDer.get(i) != 0 && matDer.get(iRow, i) != 0) {
+                theParameters.add(labDer.get(i));
+                theDerivatives.add(matDer.get(iRow, i));
+            }
+        }
+
+        globalLabels = labGlobal;
+        for (int i = 0; i < derGlobal.getColumnDimension(); ++i) // global derivatives
+        {
+            globalDerivatives.add(derGlobal.get(iRow - iOff, i));
+        }
+    }
+
+/// Add derivatives from kink.
+    /**
+     * Add (non-zero) derivatives to data block. Fill list of labels of used fit
+     * parameters. \param [in] iRow Row index (0-1) in 2D kink \param [in]
+     * labDer Labels for derivatives \param [in] matDer Derivatives (matrix)
+     * 'kink vs track fit parameters' \param [in] extOff Offset for external
+     * parameters \param [in] extDer Derivatives for external Parameters
+     */
+    void addDerivatives(int iRow,
+                        List<Integer> labDer, Matrix matDer,
+                        int extOff, Matrix extDer)
+    {
+        int nExtDer = 0;
+        if (extDer != null) {
+            nExtDer = extDer.getColumnDimension();
+        }
+        int nParMax = 7 + nExtDer;
 //	theParameters.reserve(nParMax); // have to be sorted
 //	theDerivatives.reserve(nParMax);
-//
-//	for (int i = 0; i < extDer.GetNcols(); ++i) // external derivatives
-//			{
-//		if (extDer(iRow, i)) {
-//			theParameters.push_back(extOff + i + 1);
-//			theDerivatives.push_back(extDer(iRow, i));
-//		}
-//	}
-//
-//	for (unsigned int i = 0; i < 7; ++i) // curvature, offset derivatives
-//			{
-//		if (labDer[i] && matDer(iRow, i)) {
-//			theParameters.push_back(labDer[i]);
-//			theDerivatives.push_back(matDer(iRow, i));
-//		}
-//	}
-//}
-//
+
+        if (extDer != null) {
+            for (int i = 0; i < extDer.getColumnDimension(); ++i) // external derivatives
+            {
+                if (extDer.get(iRow, i) != 0) {
+                    theParameters.add(extOff + i + 1);
+                    theDerivatives.add(extDer.get(iRow, i));
+                }
+            }
+        }
+        for (int i = 0; i < 7; ++i) // curvature, offset derivatives
+        {
+            if (labDer.get(i) != 0 && matDer.get(iRow, i) != 0) {
+                theParameters.add(labDer.get(i));
+                theDerivatives.add(matDer.get(iRow, i));
+            }
+        }
+    }
+
 ///// Add derivatives from external seed.
 ///**
 // * Add (non-zero) derivatives to data block. Fill list of labels of used fit parameters.
@@ -191,23 +208,23 @@
         return aDiff * aDiff * thePrecision * theDownWeight;
     }
 
-///// Print data block.
-//void printData() const {
-//
-//	std::cout << " measurement at label " << theLabel << ": " << theValue
-//			<< ", " << thePrecision << std::endl;
-//	std::cout << "  param " << theParameters.size() << ":";
-//	for (unsigned int i = 0; i < theParameters.size(); ++i)
-//		std::cout << " " << theParameters[i];
-//	}
-//	std::cout << std::endl;
-//	std::cout << "  deriv " << theDerivatives.size() << ":";
-//	for (unsigned int i = 0; i < theDerivatives.size(); ++i) {
-//		std::cout << " " << theDerivatives[i];
-//	}
-//	std::cout << std::endl;
-//}
-//
+/// Print data block.
+    void printData()
+    {
+        System.out.println(" measurement at label " + theLabel + ": " + theValue
+                + ", " + thePrecision);
+        System.out.print("  param " + theParameters.size() + ":");
+        for (int i = 0; i < theParameters.size(); ++i) {
+            System.out.print(" " + theParameters.get(i));
+        }
+        System.out.println("\n");
+        System.out.print("  deriv " + theDerivatives.size() + ":");
+        for (int i = 0; i < theDerivatives.size(); ++i) {
+            System.out.print(" " + theDerivatives.get(i));
+        }
+        System.out.println("");
+    }
+
     public String toString()
     {
         StringBuffer sb = new StringBuffer(" measurement at label " + theLabel + ": " + theValue + ", " + thePrecision + "\n");
@@ -216,6 +233,10 @@
             sb.append(" " + theParameters.get(i));
         }
         sb.append("\n");
+        for (int i = 0; i < theDerivatives.size(); ++i) {
+            sb.append(" " + theDerivatives.get(i));
+        }
+        sb.append("\n");
         return sb.toString();
     }
 
@@ -236,16 +257,17 @@
 
     void getLocalData(double[] retVal, int[] indLocal, double[] derLocal)
     {
-
         retVal[0] = theValue;
         retVal[1] = thePrecision * theDownWeight;
-        indLocal = new int[theParameters.size()];
-        derLocal = new double[theParameters.size()];
         for (int i = 0; i < theParameters.size(); ++i) {
             indLocal[i] = theParameters.get(i);
             derLocal[i] = theDerivatives.get(i);
         }
+    }
 
+    int getNumParameters()
+    {
+        return theParameters.size();
     }
 
 //

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl
GblPoint.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GblPoint.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GblPoint.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -14,9 +14,11 @@
  *
  * @version $Id:
  */
-public class GblPoint {
+public class GblPoint
+{
 
-    public GblPoint(hep.physics.matrix.BasicMatrix jacPointToPoint) {
+    public GblPoint(hep.physics.matrix.BasicMatrix jacPointToPoint)
+    {
         theLabel = 0;
         theOffset = 0;
         measDim = 0;
@@ -34,70 +36,65 @@
         }
     }
 
-    public void addMeasurement(hep.physics.matrix.Matrix proL2m, hep.physics.matrix.BasicMatrix meas, hep.physics.matrix.BasicMatrix measPrec) {
+    public void addMeasurement(hep.physics.matrix.Matrix proL2m, hep.physics.matrix.BasicMatrix meas, hep.physics.matrix.BasicMatrix measPrec)
+    {
 
         int ncols = proL2m.getNColumns();
         int nrows = proL2m.getNRows();
-        System.out.println("proL2m has "+nrows+" rows and "+ ncols+ "columns");
+        System.out.println("proL2m has " + nrows + " rows and " + ncols + "columns");
         Matrix a = new Matrix(nrows, ncols);
-        for(int i=0; i<nrows; ++i)
-        {
-            for(int j=0; j<ncols; ++j)
-            {
-                a.set(i,j,proL2m.e(i, j));
+        for (int i = 0; i < nrows; ++i) {
+            for (int j = 0; j < ncols; ++j) {
+                a.set(i, j, proL2m.e(i, j));
             }
         }
         System.out.println("GblPoint add matrix: ");
         a.print(10, 6);
-        
-        
-        
+
         int measnrows = meas.getNRows();
         int measncols = meas.getNColumns();
-        System.out.println("meas has "+measnrows+" rows and "+measncols+" columns");
-        
+        System.out.println("meas has " + measnrows + " rows and " + measncols + " columns");
+
         Vector measvec = new Vector(measncols);
-        for(int i=0; i<measnrows; ++i)
-        {
+        for (int i = 0; i < measnrows; ++i) {
             measvec.set(i, meas.e(0, i));
         }
         System.out.println("GblPoint add meas: ");
         measvec.print(10, 6);
-        
-        
+
         int measPrecnrows = measPrec.getNRows();
         int measPrecncols = measPrec.getNColumns();
-        
-        System.out.println("measPrec has "+measPrecnrows+" rows and "+measPrecncols+" columns");
+
+        System.out.println("measPrec has " + measPrecnrows + " rows and " + measPrecncols + " columns");
         Vector measPrecvec = new Vector(measPrecncols);
-        for(int i=0; i<measPrecnrows; ++i)
-        {
+        for (int i = 0; i < measPrecnrows; ++i) {
             measPrecvec.set(i, measPrec.e(0, i));
         }
         System.out.println("GblPoint add measPrec: ");
-        measPrecvec.print(10, 6); 
-        
+        measPrecvec.print(10, 6);
+
         addMeasurement(a, measvec, measPrecvec, 0.);
     }
 
-    public void addScatterer(hep.physics.matrix.BasicMatrix scat, hep.physics.matrix.BasicMatrix scatPrec) {
+    public void addScatterer(hep.physics.matrix.BasicMatrix scat, hep.physics.matrix.BasicMatrix scatPrec)
+    {
         // TODO Auto-generated method stub
 
     }
 
     private int theLabel; ///< Label identifying point
     private int theOffset; ///< Offset number at point if not negative (else interpolation needed)
-    private Matrix p2pJacobian = new SymMatrix(5); ///< Point-to-point jacobian from previous point
-    private Matrix prevJacobian = new SymMatrix(5); ///< Jacobian to previous scatterer (or first measurement)
-    private Matrix nextJacobian = new SymMatrix(5); ///< Jacobian to next scatterer (or last measurement)
+    private Matrix p2pJacobian = new Matrix(5, 5); ///< Point-to-point jacobian from previous point
+    private Matrix prevJacobian = new Matrix(5, 5); ///< Jacobian to previous scatterer (or first measurement)
+    private Matrix nextJacobian = new Matrix(5, 5); ///< Jacobian to next scatterer (or last measurement)
     private int measDim; ///< Dimension of measurement (1-5), 0 indicates absence of measurement
-    private SymMatrix measProjection = new SymMatrix(5); ///< Projection from measurement to local system
+    private Matrix measProjection = new Matrix(5, 5); ///< Projection from measurement to local system
     private Vector measResiduals = new Vector(5); ///< Measurement residuals
     private Vector measPrecision = new Vector(5); ///< Measurement precision (diagonal of inverse covariance matrix)
     private boolean transFlag; ///< Transformation exists?
     private Matrix measTransformation; ///< Transformation of diagonalization (of meas. precision matrix)
     private boolean scatFlag; ///< Scatterer present?
-    private SymMatrix scatTransformation = new SymMatrix(2); ///< Transformation of diagonalization (of scat. precision matrix)
+    private Matrix scatTransformation = new Matrix(2, 2); ///< Transformation of diagonalization (of scat. precision matrix)
     private Vector scatResiduals = new Vector(2); ///< Scattering residuals (initial kinks if iterating)
     private Vector scatPrecision = new Vector(2); ///< Scattering precision (diagonal of inverse covariance matrix)
     private Matrix localDerivatives = new Matrix(0, 0); ///< Derivatives of measurement vs additional local (fit) parameters
@@ -110,7 +107,8 @@
      * previous point. \param [in] aJacobian Transformation jacobian from
      * previous point
      */
-    public GblPoint(Matrix aJacobian) {
+    public GblPoint(Matrix aJacobian)
+    {
 
         theLabel = 0;
         theOffset = 0;
@@ -129,7 +127,8 @@
         }
     }
 
-    public GblPoint(SymMatrix aJacobian) {
+    public GblPoint(SymMatrix aJacobian)
+    {
         theLabel = 0;
         theOffset = 0;
         p2pJacobian = new SymMatrix(aJacobian);
@@ -153,8 +152,9 @@
      * Minimal precision to accept measurement
      */
     public void addMeasurement(Matrix aProjection,
-            Vector aResiduals, Vector aPrecision,
-            double minPrecision) {
+                               Vector aResiduals, Vector aPrecision,
+                               double minPrecision)
+    {
         measDim = aResiduals.getRowDimension();
         int iOff = 5 - measDim;
         for (int i = 0; i < measDim; ++i) {
@@ -176,8 +176,9 @@
      * (matrix) \param [in] minPrecision Minimal precision to accept measurement
      */
     public void addMeasurement(Matrix aProjection,
-            Vector aResiduals, SymMatrix aPrecision,
-            double minPrecision) {
+                               Vector aResiduals, SymMatrix aPrecision,
+                               double minPrecision)
+    {
         measDim = aResiduals.getRowDimension();
         EigenvalueDecomposition measEigen = new EigenvalueDecomposition(aPrecision);
         measTransformation.ResizeTo(measDim, measDim);
@@ -206,7 +207,8 @@
      * minPrecision Minimal precision to accept measurement
      */
     public void addMeasurement(Vector aResiduals,
-            Vector aPrecision, double minPrecision) {
+                               Vector aPrecision, double minPrecision)
+    {
         measDim = aResiduals.getRowDimension();
         int iOff = 5 - measDim;
         for (int i = 0; i < measDim; ++i) {
@@ -214,7 +216,7 @@
             measPrecision.set(iOff + i,
                     aPrecision.get(i) >= minPrecision ? aPrecision.get(i) : 0.);
         }
-        measProjection.setToIdentity();
+        measProjection.UnitMatrix();// setToIdentity();
     }
 
 /// Add a measurement to a point.
@@ -226,7 +228,8 @@
      * (matrix) \param [in] minPrecision Minimal precision to accept measurement
      */
     public void addMeasurement(Vector aResiduals,
-            SymMatrix aPrecision, double minPrecision) {
+                               SymMatrix aPrecision, double minPrecision)
+    {
         measDim = aResiduals.getRowDimension();
         EigenvalueDecomposition measEigen = new EigenvalueDecomposition(aPrecision);
         measTransformation.ResizeTo(measDim, measDim);
@@ -249,7 +252,8 @@
     /**
      * Get dimension of measurement (0 = none). \return measurement dimension
      */
-    int hasMeasurement() {
+    int hasMeasurement()
+    {
         return measDim;
     }
 
@@ -259,18 +263,20 @@
      * local system \param [out] aResiduals Measurement residuals \param [out]
      * aPrecision Measurement precision (diagonal)
      */
-    public void getMeasurement(SymMatrix aProjection, Vector aResiduals,
-            Vector aPrecision) {
-        aProjection = measProjection;
-        aResiduals = measResiduals;
-        aPrecision = measPrecision;
+    public void getMeasurement(Matrix aProjection, Vector aResiduals,
+                               Vector aPrecision)
+    {
+        aProjection.placeAt(measProjection, 0, 0);
+        aResiduals.placeInCol(measResiduals, 0, 0);
+        aPrecision.placeInCol(measPrecision, 0, 0);
     }
 
 /// Get measurement transformation (from diagonalization).
     /**
      * \param [out] aTransformation Transformation matrix
      */
-    public void getMeasTransformation(Matrix aTransformation) {
+    public void getMeasTransformation(Matrix aTransformation)
+    {
         aTransformation.ResizeTo(measDim, measDim);
         if (transFlag) {
             aTransformation = measTransformation;
@@ -288,13 +294,14 @@
      * Scatterer precision (diagonal of inverse covariance matrix)
      */
     public void addScatterer(Vector aResiduals,
-            Vector aPrecision) {
+                             Vector aPrecision)
+    {
         scatFlag = true;
         scatResiduals.set(0, aResiduals.get(0));
         scatResiduals.set(1, aResiduals.get(1));
         scatPrecision.set(0, aPrecision.get(0));
         scatPrecision.set(1, aPrecision.get(1));
-        scatTransformation.setToIdentity();
+        scatTransformation.UnitMatrix();// setToIdentity();
     }
 
 /// Add a (thin) scatterer to a point.
@@ -313,7 +320,8 @@
      * Scatterer precision (matrix)
      */
     public void addScatterer(Vector aResiduals,
-            SymMatrix aPrecision) {
+                             SymMatrix aPrecision)
+    {
         scatFlag = true;
         EigenvalueDecomposition scatEigen = new EigenvalueDecomposition(aPrecision);
         Matrix aTransformation = scatEigen.getEigenVectors();
@@ -330,7 +338,8 @@
     }
 
 /// Check for scatterer at a point.
-    boolean hasScatterer() {
+    boolean hasScatterer()
+    {
         return scatFlag;
     }
 
@@ -340,18 +349,20 @@
      * diagonalization \param [out] aResiduals Scatterer residuals \param [out]
      * aPrecision Scatterer precision (diagonal)
      */
-    public void getScatterer(SymMatrix aTransformation, Vector aResiduals,
-            Vector aPrecision) {
-        aTransformation = scatTransformation;
-        aResiduals = scatResiduals;
-        aPrecision = scatPrecision;
+    public void getScatterer(Matrix aTransformation, Vector aResiduals,
+                             Vector aPrecision)
+    {
+        aTransformation.placeAt(scatTransformation, 0, 0);
+        aResiduals.placeAt(scatResiduals, 0, 0);
+        aPrecision.placeAt(scatPrecision, 0, 0);
     }
 
 /// Get scatterer transformation (from diagonalization).
     /**
      * \param [out] aTransformation Transformation matrix
      */
-    public void getScatTransformation(Matrix aTransformation) {
+    public void getScatTransformation(Matrix aTransformation)
+    {
         aTransformation.ResizeTo(2, 2);
         if (scatFlag) {
             for (int i = 0; i < 2; ++i) {
@@ -369,7 +380,8 @@
      * Point needs to have a measurement. \param [in] aDerivatives Local
      * derivatives (matrix)
      */
-    public void addLocals(Matrix aDerivatives) {
+    public void addLocals(Matrix aDerivatives)
+    {
         if (measDim != 0) {
             localDerivatives.ResizeTo(aDerivatives.getRowDimension(), aDerivatives.getColumnDimension());
             if (transFlag) {
@@ -381,12 +393,14 @@
     }
 
 /// Retrieve number of local derivatives from a point.
-    int getNumLocals() {
+    int getNumLocals()
+    {
         return localDerivatives.getColumnDimension();
     }
 
 /// Retrieve local derivatives from a point.
-    Matrix getLocalDerivatives() {
+    Matrix getLocalDerivatives()
+    {
         return localDerivatives;
     }
 
@@ -396,7 +410,8 @@
      * labels \param [in] aDerivatives Global derivatives (matrix)
      */
     public void addGlobals(List<Integer> aLabels,
-            Matrix aDerivatives) {
+                           Matrix aDerivatives)
+    {
         if (measDim != 0) {
             globalLabels = aLabels;
             globalDerivatives.ResizeTo(aDerivatives.getRowDimension(), aDerivatives.getColumnDimension());
@@ -410,17 +425,20 @@
     }
 
 /// Retrieve number of global derivatives from a point.
-    int getNumGlobals() {
+    int getNumGlobals()
+    {
         return globalDerivatives.getColumnDimension();
     }
 
 /// Retrieve global derivatives labels from a point.
-    List<Integer> getGlobalLabels() {
+    List<Integer> getGlobalLabels()
+    {
         return globalLabels;
     }
 
 /// Retrieve global derivatives from a point.
-    Matrix getGlobalDerivatives() {
+    Matrix getGlobalDerivatives()
+    {
         return globalDerivatives;
     }
 
@@ -428,12 +446,14 @@
     /**
      * \param [in] aLabel Label identifying point
      */
-    public void setLabel(int aLabel) {
+    public void setLabel(int aLabel)
+    {
         theLabel = aLabel;
     }
 
 /// Retrieve label of point
-    int getLabel() {
+    int getLabel()
+    {
         return theLabel;
     }
 
@@ -441,17 +461,20 @@
     /**
      * \param [in] anOffset Offset number
      */
-    public void setOffset(int anOffset) {
+    public void setOffset(int anOffset)
+    {
         theOffset = anOffset;
     }
 
 /// Retrieve offset for point
-    int getOffset() {
+    int getOffset()
+    {
         return theOffset;
     }
 
 /// Retrieve point-to-(previous)point jacobian
-    Matrix getP2pJacobian() {
+    Matrix getP2pJacobian()
+    {
         return p2pJacobian;
     }
 
@@ -459,7 +482,8 @@
     /**
      * \param [in] aJac Jacobian
      */
-    public void addPrevJacobian(Matrix aJac) {
+    public void addPrevJacobian(Matrix aJac)
+    {
         int ifail = 0;
 // to optimize: need only two last rows of inverse
 //	prevJacobian = aJac.InverseFast(ifail);
@@ -476,7 +500,8 @@
     /**
      * \param [in] aJac Jacobian
      */
-    public void addNextJacobian(Matrix aJac) {
+    public void addNextJacobian(Matrix aJac)
+    {
         nextJacobian = aJac;
     }
 
@@ -489,21 +514,23 @@
      * std::overflow_error : matrix S is singular.
      */
     public void getDerivatives(int aDirection, Matrix matW, Matrix matWJ,
-            Vector vecWd) {
+                               Vector vecWd)
+    {
 
         Matrix matJ;
+        Matrix matWt;
         Vector vecd;
         if (aDirection < 1) {
             matJ = prevJacobian.sub(2, 3, 3);
-            matW = prevJacobian.sub(2, 3, 1).uminus();
+            matWt = prevJacobian.sub(2, 3, 1).uminus();
             vecd = prevJacobian.subCol(2, 0, 3);
         } else {
             matJ = nextJacobian.sub(2, 3, 3);
-            matW = nextJacobian.sub(2, 3, 1);
+            matWt = nextJacobian.sub(2, 3, 1);
             vecd = nextJacobian.subCol(2, 0, 3);
         }
 
-        matW = matW.inverse();
+        matW.placeAt(matWt.inverse(), 0, 0);
 //	if (!matW.InvertFast()) {
 //		std::cout << " getDerivatives failed to invert matrix: "
 //				<< matW << "\n";
@@ -512,8 +539,8 @@
 //				<< "\n";
 //		throw std::overflow_error("Singular matrix inversion exception");
 //	}
-        matWJ = matW.times(matJ);
-        vecWd = matW.times(vecd);
+        matWJ.placeAt(matW.times(matJ), 0, 0);
+        vecWd.placeAt(matW.times(vecd), 0, 0);
 
     }
 //
@@ -522,7 +549,8 @@
     /**
      * \param [in] level print level (0: minimum, >0: more)
      */
-    public void printPoint(int level) {
+    public void printPoint(int level)
+    {
         StringBuffer sb = new StringBuffer("GblPoint");
         if (theLabel != 0) {
             sb.append(", label " + theLabel);
@@ -586,5 +614,4 @@
         }
         System.out.println(sb.toString());
     }
-
 }

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl
GblTrajectory.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/GblTrajectory.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -1,43 +1,46 @@
 package org.hps.recon.tracking.gbl;
 
 /**
- * 
- * 
+ *
+ *
  * @author Per Hansson Adrian <[log in to unmask]>
  *
  * @author Norman A Graf
  *
  * @version $Id:
- * 
+ *
  */
-
+import static java.lang.Math.abs;
 import static java.lang.Math.max;
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.commons.math3.util.Pair;
 import org.hps.recon.tracking.gbl.matrix.BorderedBandMatrix;
 import org.hps.recon.tracking.gbl.matrix.Matrix;
 import org.hps.recon.tracking.gbl.matrix.SymMatrix;
 import org.hps.recon.tracking.gbl.matrix.VVector;
 import org.hps.recon.tracking.gbl.matrix.Vector;
 
+public class GblTrajectory
+{
 
-public class GblTrajectory {
+    private boolean debug = true;
 
-	public GblTrajectory(List<GblPoint> listOfPoints) {
-		this(listOfPoints, 0, new SymMatrix(0), false, false, false);
-	}
+    public GblTrajectory(List<GblPoint> listOfPoints)
+    {
+        this(listOfPoints, true, true, true);
+    }
 
+    public void fit(double m_chi2, int m_ndf, int m_lost_weight)
+    {
+        // TODO Auto-generated method stub
+    }
 
-	public void fit(double m_chi2, int m_ndf, int m_lost_weight) {
-		// TODO Auto-generated method stub
-		
-	}
+    public void milleOut(MilleBinary mille)
+    {
+        // TODO implement binary writeout of millepedeII data
+    }
 
-	public void milleOut(MilleBinary mille) {
-		// TODO Auto-generated method stub
-		
-	}
-
     /**
      * \mainpage General information
      *
@@ -142,7 +145,7 @@
     List<List<GblPoint>> thePoints = new ArrayList<List<GblPoint>>(); ///< (list of) List of points on trajectory
     List<GblData> theData = new ArrayList<GblData>(); ///< List of data blocks
     List<Integer> measDataIndex = new ArrayList<Integer>(); ///< mapping points to data blocks from measurements
-    List<Integer> scatDataIndex; ///< mapping points to data blocks from scatterers
+    List<Integer> scatDataIndex = new ArrayList<Integer>();  ///< mapping points to data blocks from scatterers
     List<Integer> externalIndex; ///< List of fit parameters used by external seed
     SymMatrix externalSeed; ///< Precision (inverse covariance matrix) of external seed
     List<Matrix> innerTransformations; ///< Transformations at innermost points of
@@ -160,38 +163,31 @@
 //     * [in] flagCurv Use q/p \param [in] flagU1dir Use in u1 direction \param
 //     * [in] flagU2dir Use in u2 direction
 //     */
-//    GblTrajectory(List<GblPoint> aPointList,
-//            boolean flagCurv, boolean flagU1dir, boolean flagU2dir)
-//    {
-//        numAllPoints = aPointList.size();
-//        //numPoints()
-//        numOffsets = 0;
-//        numInnerTrans = 0;
-//        numCurvature = (flagCurv ? 1 : 0);
-//        numParameters = 0;
-//        numLocals = 0;
-//        numMeasurements = 0;
-//        externalPoint = 0;
-//                //externalSeed()
-//        //innerTransformations()
-//        //externalDerivatives()
-//        //externalMeasurements()
-//        // externalPrecisions() 
-//
-//        if (flagU1dir)
-//        {
-//            theDimension.add(0);
-//        }
-//        if (flagU2dir)
-//        {
-//            theDimension.add(1);
-//        }
+    GblTrajectory(List<GblPoint> aPointList,
+                  boolean flagCurv, boolean flagU1dir, boolean flagU2dir)
+    {
+        numAllPoints = aPointList.size();
+        numOffsets = 0;
+        numInnerTrans = 0;
+        numCurvature = (flagCurv ? 1 : 0);
+        numParameters = 0;
+        numLocals = 0;
+        numMeasurements = 0;
+        externalPoint = 0;
+
+        if (flagU1dir) {
+            theDimension.add(0);
+        }
+        if (flagU2dir) {
+            theDimension.add(1);
+        }
 //        // simple (single) trajectory
-//        thePoints.add(aPointList);
-//        numPoints.add(numAllPoints);
-////	construct(); // construct trajectory
-//    }
+        thePoints.add(aPointList);
+        numPoints.add(numAllPoints);
+        construct(); // construct trajectory
+    }
 /// Create new (simple) trajectory from list of points with external seed.
+
     /**
      * Curved trajectory in space (default) or without curvature (q/p) or in one
      * plane (u-direction) only. \param [in] aPointList List of points \param
@@ -201,36 +197,21 @@
      * flagU1dir Use in u1 direction \param [in] flagU2dir Use in u2 direction
      */
     GblTrajectory(List<GblPoint> aPointList,
-            int aLabel, SymMatrix aSeed, boolean flagCurv,
-            boolean flagU1dir, boolean flagU2dir)
+                  int aLabel, SymMatrix aSeed, boolean flagCurv,
+                  boolean flagU1dir, boolean flagU2dir)
     {
         numAllPoints = aPointList.size();
-        //numPoints(), 
         numOffsets = 0;
         numInnerTrans = 0;
         numCurvature = (flagCurv ? 1 : 0);
         numParameters = 0;
         numLocals = 0;
         numMeasurements = 0;
-        //externalPoint(aLabel) 
-        //theDimension(),
-        //thePoints(), 
-        //theData(), 
-        //measDataIndex(), 
-        //scatDataIndex(), 
-        //externalIndex(), 
-        //externalSeed(aSeed), 
-        //innerTransformations(), 
-        //externalDerivatives(), 
-        //externalMeasurements(), 
-        //externalPrecisions() {
 
-        if (flagU1dir)
-        {
+        if (flagU1dir) {
             theDimension.add(0);
         }
-        if (flagU2dir)
-        {
+        if (flagU2dir) {
             theDimension.add(1);
         }
         // simple (single) trajectory
@@ -239,62 +220,6 @@
         construct(); // construct trajectory
     }
 
-///// Create new composed trajectory from list of points and transformations.
-///**
-// * Composed of curved trajectory in space.
-// * \param [in] aPointsAndTransList List containing pairs with list of points and transformation (at inner (first) point)
-// */
-//GblTrajectory(
-//		const List<std::pair<List<GblPoint>, TMatrixD> > &aPointsAndTransList) :
-//		numAllPoints(), numPoints(), numOffsets(0), numInnerTrans(
-//				aPointsAndTransList.size()), numParameters(0), numLocals(0), numMeasurements(
-//				0), externalPoint(0), theDimension(0), thePoints(), theData(), measDataIndex(), scatDataIndex(), externalIndex(), externalSeed(), innerTransformations(), externalDerivatives(), externalMeasurements(), externalPrecisions() {
-//
-//	for ( int iTraj = 0; iTraj < aPointsAndTransList.size(); ++iTraj) {
-//		thePoints.add(aPointsAndTransList[iTraj].first);
-//		numPoints.add(thePoints.back().size());
-//		numAllPoints += numPoints.back();
-//		innerTransformations.add(aPointsAndTransList[iTraj].second);
-//	}
-//	theDimension.add(0);
-//	theDimension.add(1);
-//	numCurvature = innerTransformations[0].GetNcols();
-//	construct(); // construct (composed) trajectory
-//}
-//
-///// Create new composed trajectory from list of points and transformations with (independent) external measurements.
-///**
-// * Composed of curved trajectory in space.
-// * \param [in] aPointsAndTransList List containing pairs with list of points and transformation (at inner (first) point)
-// * \param [in] extDerivatives Derivatives of external measurements vs external parameters
-// * \param [in] extMeasurements External measurements (residuals)
-// * \param [in] extPrecisions Precision of external measurements
-// */
-//GblTrajectory(
-//		const List<std::pair<List<GblPoint>, TMatrixD> > &aPointsAndTransList,
-//		const TMatrixD &extDerivatives, const TVectorD &extMeasurements,
-//		const TVectorD &extPrecisions) :
-//		numAllPoints(), numPoints(), numOffsets(0), numInnerTrans(
-//				aPointsAndTransList.size()), numParameters(0), numLocals(0), numMeasurements(
-//				0), externalPoint(0), theDimension(0), thePoints(), theData(), measDataIndex(), scatDataIndex(), externalIndex(), externalSeed(), innerTransformations(), externalDerivatives(
-//				extDerivatives), externalMeasurements(extMeasurements), externalPrecisions(
-//				extPrecisions) {
-//
-//	for ( int iTraj = 0; iTraj < aPointsAndTransList.size(); ++iTraj) {
-//		thePoints.add(aPointsAndTransList[iTraj].first);
-//		numPoints.add(thePoints.back().size());
-//		numAllPoints += numPoints.back();
-//		innerTransformations.add(aPointsAndTransList[iTraj].second);
-//	}
-//	theDimension.add(0);
-//	theDimension.add(1);
-//	numCurvature = innerTransformations[0].GetNcols();
-//	construct(); // construct (composed) trajectory
-//}
-//
-//~GblTrajectory() {
-//}
-//
 /// Retrieve validity of trajectory
     boolean isValid()
     {
@@ -320,20 +245,8 @@
         int aLabel = 0;
         // loop over trajectories
         numTrajectories = thePoints.size();
-        //std::cout << " numTrajectories: " << numTrajectories << ", "<< innerTransformations.size()  << std::endl;
-//	for ( int iTraj = 0; iTraj < numTrajectories; ++iTraj) {
-//		List<GblPoint>::iterator itPoint;
-//		for (itPoint = thePoints[iTraj].begin();
-//				itPoint < thePoints[iTraj].end(); ++itPoint) {
-//			numLocals = std::max(numLocals, itPoint->getNumLocals());
-//			numMeasurements += itPoint->hasMeasurement();
-//			itPoint->setLabel(++aLabel);
-//		}
-//	}
-        for (List<GblPoint> list : thePoints)
-        {
-            for (GblPoint p : list)
-            {
+        for (List<GblPoint> list : thePoints) {
+            for (GblPoint p : list) {
                 numLocals = max(numLocals, p.getNumLocals());
                 numMeasurements += p.hasMeasurement();
                 p.setLabel(++aLabel);
@@ -341,13 +254,7 @@
         }
         defineOffsets();
         calcJacobians();
-//	try {
-		prepare();
-//	} catch (std::overflow_error &e) {
-//		std::cout << " GblTrajectory construction failed: " << e.what()
-//				<< std::endl;
-//		return;
-//	}
+        prepare();
         constructOK = true;
         // number of fit parameters
         numParameters = (numOffsets - 2 * numInnerTrans) * theDimension.size()
@@ -364,36 +271,20 @@
     {
 
         // loop over trajectories
-        for (int iTraj = 0; iTraj < numTrajectories; ++iTraj)
-        {
+        for (int iTraj = 0; iTraj < numTrajectories; ++iTraj) {
             List<GblPoint> list = thePoints.get(iTraj);
             int size = list.size();
             // first point is offset
-//		thePoints[iTraj].front().setOffset(numOffsets++);
             list.get(0).setOffset(numOffsets++);		// intermediate scatterers are offsets
-//		List<GblPoint>::iterator itPoint;
-//		for (itPoint = thePoints[iTraj].begin() + 1;
-//				itPoint < thePoints[iTraj].end() - 1; ++itPoint) {
-//			if (itPoint->hasScatterer()) {
-//				itPoint->setOffset(numOffsets++);
-//			} else {
-//				itPoint->setOffset(-numOffsets);
-//			}
-//		}
-            for (int i = 1; i < size - 1; ++i)
-            {
+            for (int i = 1; i < size - 1; ++i) {
                 GblPoint p = list.get(i);
-                if (p.hasScatterer())
-                {
+                if (p.hasScatterer()) {
                     p.setOffset(numOffsets++);
-                } else
-                {
+                } else {
                     p.setOffset(-numOffsets);
                 }
-
             }
             // last point is offset
-//		thePoints[iTraj].back().setOffset(numOffsets++);
             list.get(size - 1).setOffset(numOffsets++);
         }
     }
@@ -404,70 +295,31 @@
 
         Matrix scatJacobian = new Matrix(5, 5);
         // loop over trajectories
-        for (int iTraj = 0; iTraj < numTrajectories; ++iTraj)
-        {
+        for (int iTraj = 0; iTraj < numTrajectories; ++iTraj) {
             List<GblPoint> list = thePoints.get(iTraj);
             int size = list.size();
             // forward propagation (all)
             GblPoint previousPoint = list.get(0);
             int numStep = 0;
-            for (int i = 1; i < size; ++i)
-            {
+            for (int i = 1; i < size; ++i) {
                 GblPoint p = list.get(i);
-                if (numStep == 0)
-                {
+                if (numStep == 0) {
                     scatJacobian = p.getP2pJacobian();
-                } else
-                {
+                } else {
                     scatJacobian = p.getP2pJacobian().times(scatJacobian);
                 }
                 numStep++;
                 p.addPrevJacobian(scatJacobian);// iPoint -> previous scatterer
-                if (p.getOffset() >= 0)
-                {
+                if (p.getOffset() >= 0) {
                     previousPoint.addNextJacobian(scatJacobian); // lastPoint -> next scatterer
                     numStep = 0;
                     previousPoint = p;
                 }
             }
-//            List<GblPoint>::iterator itPoint;
-//            for (itPoint = thePoints[iTraj].begin() + 1;
-//                    itPoint < thePoints[iTraj].end(); ++itPoint)
-//            {
-//                if (numStep == 0)
-//                {
-//                    scatJacobian = itPoint -> getP2pJacobian();
-//                } else
-//                {
-//                    scatJacobian = itPoint -> getP2pJacobian() * scatJacobian;
-//                }
-//                numStep++;
-//                itPoint -> addPrevJacobian(scatJacobian); // iPoint -> previous scatterer
-//                if (itPoint -> getOffset() >= 0)
-//                {
-//                    previousPoint -> addNextJacobian(scatJacobian); // lastPoint -> next scatterer
-//                    numStep = 0;
-//                    previousPoint =  & ( * itPoint);
-//                }
-//            }
-//            // backward propagation (without scatterers)
-//            for (itPoint = thePoints[iTraj].end() - 1;
-//                    itPoint > thePoints[iTraj].begin(); --itPoint)
-//            {
-//                if (itPoint -> getOffset() >= 0)
-//                {
-//                    scatJacobian = itPoint -> getP2pJacobian();
-//                    continue; // skip offsets
-//                }
-//                itPoint -> addNextJacobian(scatJacobian); // iPoint -> next scatterer
-//                scatJacobian = scatJacobian * itPoint -> getP2pJacobian();
-//            }
             // backward propagation (without scatterers)            
-            for (int i = size - 1; i > 0; --i)
-            {
+            for (int i = size - 1; i > 0; --i) {
                 GblPoint p = list.get(i);
-                if (p.getOffset() >= 0)
-                {
+                if (p.getOffset() >= 0) {
                     scatJacobian = p.getP2pJacobian();
                     continue; // skip offsets
                 }
@@ -476,82 +328,85 @@
             }
         }
     }
-//
-///// Get jacobian for transformation from fit to track parameters at point.
-///**
-// * Jacobian broken lines (q/p,..,u_i,u_i+1..) to track (q/p,u',u) parameters
-// * including additional local parameters.
-// * \param [in] aSignedLabel (Signed) label of point for external seed
-// * (<0: in front, >0: after point, slope changes at scatterer!)
-// * \return List of fit parameters with non zero derivatives and
-// * corresponding transformation matrix
-// */
-//std::pair<List< int>, TMatrixD> getJacobian(
-//		int aSignedLabel) const {
-//
-//	 int nDim = theDimension.size();
-//	 int nCurv = numCurvature;
-//	 int nLocals = numLocals;
-//	 int nBorder = nCurv + nLocals;
-//	 int nParBRL = nBorder + 2 * nDim;
-//	 int nParLoc = nLocals + 5;
-//	List< int> anIndex;
-//	anIndex.reserve(nParBRL);
-//	TMatrixD aJacobian(nParLoc, nParBRL);
-//	aJacobian.Zero();
-//
-//	 int aLabel = abs(aSignedLabel);
-//	 int firstLabel = 1;
-//	 int lastLabel = 0;
-//	 int aTrajectory = 0;
-//	// loop over trajectories
-//	for ( int iTraj = 0; iTraj < numTrajectories; ++iTraj) {
-//		aTrajectory = iTraj;
-//		lastLabel += numPoints[iTraj];
-//		if (aLabel <= lastLabel)
-//			break;
-//		if (iTraj < numTrajectories - 1)
-//			firstLabel += numPoints[iTraj];
-//	}
-//	int nJacobian; // 0: prev, 1: next
-//	// check consistency of (index, direction)
-//	if (aSignedLabel > 0) {
-//		nJacobian = 1;
-//		if (aLabel >= lastLabel) {
-//			aLabel = lastLabel;
-//			nJacobian = 0;
-//		}
-//	} else {
-//		nJacobian = 0;
-//		if (aLabel <= firstLabel) {
-//			aLabel = firstLabel;
-//			nJacobian = 1;
-//		}
-//	}
-//	const GblPoint aPoint = thePoints[aTrajectory][aLabel - firstLabel];
-//	List< int> labDer(5);
-//	SMatrix55 matDer;
-//	getFitToLocalJacobian(labDer, matDer, aPoint, 5, nJacobian);
-//
-//	// from local parameters
-//	for ( int i = 0; i < nLocals; ++i) {
-//		aJacobian(i + 5, i) = 1.0;
-//		anIndex.add(i + 1);
-//	}
-//	// from trajectory parameters
-//	 int iCol = nLocals;
-//	for ( int i = 0; i < 5; ++i) {
-//		if (labDer[i] > 0) {
-//			anIndex.add(labDer[i]);
-//			for ( int j = 0; j < 5; ++j) {
-//				aJacobian(j, iCol) = matDer(j, i);
-//			}
-//			++iCol;
-//		}
-//	}
-//	return std::make_pair(anIndex, aJacobian);
-//}
 
+/// Get jacobian for transformation from fit to track parameters at point.
+    /**
+     * Jacobian broken lines (q/p,..,u_i,u_i+1..) to track (q/p,u',u) parameters
+     * including additional local parameters. \param [in] aSignedLabel (Signed)
+     * label of point for external seed (<0: in front, >0: after point, slope
+     * changes at scatterer!) \return List of fit parameters with non zero
+     * derivatives and corresponding transformation matrix
+     */
+    Pair<List< Integer>, Matrix> getJacobian(int aSignedLabel)
+    {
+
+        int nDim = theDimension.size();
+        int nCurv = numCurvature;
+        int nLocals = numLocals;
+        int nBorder = nCurv + nLocals;
+        int nParBRL = nBorder + 2 * nDim;
+        int nParLoc = nLocals + 5;
+        List< Integer> anIndex = new ArrayList<Integer>();
+
+        Matrix aJacobian = new Matrix(nParLoc, nParBRL);
+
+        int aLabel = abs(aSignedLabel);
+        int firstLabel = 1;
+        int lastLabel = 0;
+        int aTrajectory = 0;
+        // loop over trajectories
+        for (int iTraj = 0; iTraj < numTrajectories; ++iTraj) {
+            aTrajectory = iTraj;
+            lastLabel += numPoints.get(iTraj);
+            if (aLabel <= lastLabel) {
+                break;
+            }
+            if (iTraj < numTrajectories - 1) {
+                firstLabel += numPoints.get(iTraj);
+            }
+        }
+        int nJacobian; // 0: prev, 1: next
+        // check consistency of (index, direction)
+        if (aSignedLabel > 0) {
+            nJacobian = 1;
+            if (aLabel >= lastLabel) {
+                aLabel = lastLabel;
+                nJacobian = 0;
+            }
+        } else {
+            nJacobian = 0;
+            if (aLabel <= firstLabel) {
+                aLabel = firstLabel;
+                nJacobian = 1;
+            }
+        }
+        GblPoint aPoint = thePoints.get(aTrajectory).get(aLabel - firstLabel);
+        List< Integer> labDer = new ArrayList<Integer>();
+        for (int i = 0; i < 5; ++i) {
+            labDer.add(0);
+        }
+        Matrix matDer = new Matrix(5, 5);
+        getFitToLocalJacobian(labDer, matDer, aPoint, 5, nJacobian);
+
+        // from local parameters
+        for (int i = 0; i < nLocals; ++i) {
+            aJacobian.set(i + 5, i, 1.0);
+            anIndex.add(i + 1);
+        }
+        // from trajectory parameters
+        int iCol = nLocals;
+        for (int i = 0; i < 5; ++i) {
+            if (labDer.get(i) > 0) {
+                anIndex.add(labDer.get(i));
+                for (int j = 0; j < 5; ++j) {
+                    aJacobian.set(j, iCol, matDer.get(j, i));
+                }
+                ++iCol;
+            }
+        }
+        return new Pair(anIndex, aJacobian);
+    }
+
 /// Get (part of) jacobian for transformation from (trajectory) fit to track parameters at point.
     /**
      * Jacobian broken lines (q/p,..,u_i,u_i+1..) to local (q/p,u',u)
@@ -563,8 +418,8 @@
      * offset)
      */
     void getFitToLocalJacobian(List<Integer> anIndex,
-            Matrix aJacobian, GblPoint aPoint, int measDim,
-            int nJacobian)
+                               Matrix aJacobian, GblPoint aPoint, int measDim,
+                               int nJacobian)
     {
 
         int nDim = theDimension.size();
@@ -596,35 +451,18 @@
             int iOff = nDim * (-nOffset - 1) + nLocals + nCurv + 1; // first offset ('i' in u_i)
 
             // local offset
-            if (nCurv > 0)
-            {
+            if (nCurv > 0) {
                 Vector negDiff = prevNd.minus(nextNd).uminus();
                 aJacobian.placeInCol(negDiff, 3, 0); // from curvature
                 anIndex.set(0, nLocals + 1);
             }
             aJacobian.placeAt(prevNW, 3, 1); // from 1st Offset
             aJacobian.placeAt(nextNW, 3, 3); // from 2nd Offset
-            for (int i = 0; i < nDim; ++i)
-            {
+            for (int i = 0; i < nDim; ++i) {
                 anIndex.set(1 + theDimension.get(i), iOff + i);
                 anIndex.set(3 + theDimension.get(i), iOff + nDim + i);
             }
-//
-////		// local slope and curvature
-////		if (measDim > 2) {
-////			// derivatives for u'_int
-////			const SMatrix22 prevWPN(nextWJ * prevNW); // W+ * J+ * N * W-
-////			const SMatrix22 nextWPN(prevWJ * nextNW); // W- * J- * N * W+
-////			const SVector2 prevWNd(nextWJ * prevNd); // W+ * J+ * N * W- * d-
-////			const SVector2 nextWNd(prevWJ * nextNd); // W- * J- * N * W+ * d+
-////			if (nCurv > 0) {
-////				aJacobian(0, 0) = 1.0;
-////				aJacobian.Place_in_col(prevWNd - nextWNd, 1, 0); // from curvature
-////			}
-////			aJacobian.Place_at(-prevWPN, 1, 1); // from 1st Offset
-////			aJacobian.Place_at(nextWPN, 1, 3); // from 2nd Offset
-////		}
-//	} else { // at point
+        } else { // at point
             // anIndex must be sorted
             // forward : iOff2 = iOff1 + nDim, index1 = 1, index2 = 3
             // backward: iOff2 = iOff1 - nDim, index1 = 3, index2 = 1
@@ -635,29 +473,25 @@
             // local offset
             aJacobian.set(3, index1, 1.0); // from 1st Offset
             aJacobian.set(4, index1 + 1, 1.0);
-            for (int i = 0; i < nDim; ++i)
-            {
+            for (int i = 0; i < nDim; ++i) {
                 anIndex.set(index1 + theDimension.get(i), iOff1 + i);
             }
 
             // local slope and curvature
-            if (measDim > 2)
-            {
+            if (measDim > 2) {
                 Matrix matW = new Matrix(2, 2);
                 Matrix matWJ = new Matrix(2, 2);
                 Vector vecWd = new Vector(2);
                 aPoint.getDerivatives(nJacobian, matW, matWJ, vecWd); // W, W * J, W * d
                 double sign = (nJacobian > 0) ? 1. : -1.;
-                if (nCurv > 0)
-                {
+                if (nCurv > 0) {
                     aJacobian.set(0, 0, 1.0);
                     aJacobian.placeInCol(vecWd.timesScalar(-sign), 1, 0); // from curvature
                     anIndex.set(0, nLocals + 1);
                 }
                 aJacobian.placeAt(matWJ.times(-sign), 1, index1); // from 1st Offset
                 aJacobian.placeAt(matW.times(sign), 1, index2); // from 2nd Offset
-                for (int i = 0; i < nDim; ++i)
-                {
+                for (int i = 0; i < nDim; ++i) {
                     anIndex.set(index2 + theDimension.get(i), iOff2 + i);
                 }
             }
@@ -672,7 +506,7 @@
      * \param [in] aPoint Point to use
      */
     void getFitToKinkJacobian(List< Integer> anIndex,
-            Matrix aJacobian, GblPoint aPoint)
+                              Matrix aJacobian, GblPoint aPoint)
     {
 
         //nb aJacobian has dimension 2,7
@@ -696,431 +530,187 @@
         int iOff = (nOffset - 1) * nDim + nCurv + nLocals + 1; // first offset ('i' in u_i)
 
         // local offset
-        if (nCurv > 0)
-        {
+        if (nCurv > 0) {
             aJacobian.placeInCol(sumWd.uminus(), 0, 0); // from curvature
             anIndex.set(0, nLocals + 1);
         }
         aJacobian.placeAt(prevW, 0, 1); // from 1st Offset
         aJacobian.placeAt(sumWJ.uminus(), 0, 3); // from 2nd Offset
         aJacobian.placeAt(nextW, 0, 5); // from 1st Offset
-        for (int i = 0; i < nDim; ++i)
-        {
+        for (int i = 0; i < nDim; ++i) {
             anIndex.set(1 + theDimension.get(i), iOff + i);
             anIndex.set(3 + theDimension.get(i), iOff + nDim + i);
             anIndex.set(5 + theDimension.get(i), iOff + nDim * 2 + i);
         }
     }
 
-///// Get fit results at point.
-///**
-// * Get corrections and covariance matrix for local track and additional parameters
-// * in forward or backward direction.
-// * \param [in] aSignedLabel (Signed) label of point on trajectory
-// * (<0: in front, >0: after point, slope changes at scatterer!)
-// * \param [out] localPar Corrections for local parameters
-// * \param [out] localCov Covariance for local parameters
-// * \return error code (non-zero if trajectory not fitted successfully)
-// */
-// int getResults(int aSignedLabel, TVectorD &localPar,
-//		SymMatrix &localCov) const {
-//	if (! fitOK)
-//		return 1;
-//	std::pair<List< int>, TMatrixD> indexAndJacobian =
-//			getJacobian(aSignedLabel);
-//	 int nParBrl = indexAndJacobian.first.size();
-//	TVectorD aVec(nParBrl); // compressed vector
-//	for ( int i = 0; i < nParBrl; ++i) {
-//		aVec[i] = theVector(indexAndJacobian.first[i] - 1);
-//	}
-//	SymMatrix aMat = theMatrix.getBlockMatrix(indexAndJacobian.first); // compressed matrix
-//	localPar = indexAndJacobian.second * aVec;
-//	localCov = aMat.Similarity(indexAndJacobian.second);
-//	return 0;
-//}
-//
-///// Get residuals at point from measurement.
-///**
-// * Get (diagonalized) residual, error of measurement and residual and down-weighting
-// * factor for measurement at point
-// *
-// * \param [in]  aLabel Label of point on trajectory
-// * \param [out] numData Number of data blocks from measurement at point
-// * \param [out] aResiduals Measurements-Predictions
-// * \param [out] aMeasErrors Errors of Measurements
-// * \param [out] aResErrors Errors of Residuals (including correlations from track fit)
-// * \param [out] aDownWeights Down-Weighting factors
-// * \return error code (non-zero if trajectory not fitted successfully)
-// */
-// int getMeasResults( int aLabel,
-//		 int &numData, TVectorD &aResiduals, TVectorD &aMeasErrors,
-//		TVectorD &aResErrors, TVectorD &aDownWeights) {
-//	numData = 0;
-//	if (! fitOK)
-//		return 1;
-//
-//	 int firstData = measDataIndex[aLabel - 1]; // first data block with measurement
-//	numData = measDataIndex[aLabel] - firstData; // number of data blocks
-//	for ( int i = 0; i < numData; ++i) {
-//		getResAndErr(firstData + i, aResiduals[i], aMeasErrors[i],
-//				aResErrors[i], aDownWeights[i]);
-//	}
-//	return 0;
-//}
-//
-///// Get (kink) residuals at point from scatterer.
-///**
-// * Get (diagonalized) residual, error of measurement and residual and down-weighting
-// * factor for scatterering kinks at point
-// *
-// * \param [in]  aLabel Label of point on trajectory
-// * \param [out] numData Number of data blocks from scatterer at point
-// * \param [out] aResiduals (kink)Measurements-(kink)Predictions
-// * \param [out] aMeasErrors Errors of (kink)Measurements
-// * \param [out] aResErrors Errors of Residuals (including correlations from track fit)
-// * \param [out] aDownWeights Down-Weighting factors
-// * \return error code (non-zero if trajectory not fitted successfully)
-// */
-// int getScatResults( int aLabel,
-//		 int &numData, TVectorD &aResiduals, TVectorD &aMeasErrors,
-//		TVectorD &aResErrors, TVectorD &aDownWeights) {
-//	numData = 0;
-//	if (! fitOK)
-//		return 1;
-//
-//	 int firstData = scatDataIndex[aLabel - 1]; // first data block with scatterer
-//	numData = scatDataIndex[aLabel] - firstData; // number of data blocks
-//	for ( int i = 0; i < numData; ++i) {
-//		getResAndErr(firstData + i, aResiduals[i], aMeasErrors[i],
-//				aResErrors[i], aDownWeights[i]);
-//	}
-//	return 0;
-//}
-//
-///// Get (list of) labels of points on (simple) trajectory
-///**
-// * \param [out] aLabelList List of labels (aLabelList[i] = i+1)
-// */
-//void getLabels(List< int> &aLabelList) {
-//	 int aLabel = 0;
-//	 int nPoint = thePoints[0].size();
-//	aLabelList.resize(nPoint);
-//	for ( i = 0; i < nPoint; ++i) {
-//		aLabelList[i] = ++aLabel;
-//	}
-//}
-//
-///// Get (list of lists of) labels of points on (composed) trajectory
-///**
-// * \param [out] aLabelList List of of lists of labels
-// */
-//void getLabels(
-//		List<List< int> > &aLabelList) {
-//	 int aLabel = 0;
-//	aLabelList.resize(numTrajectories);
-//	for ( int iTraj = 0; iTraj < numTrajectories; ++iTraj) {
-//		 int nPoint = thePoints[iTraj].size();
-//		aLabelList[iTraj].resize(nPoint);
-//		for ( i = 0; i < nPoint; ++i) {
-//			aLabelList[iTraj][i] = ++aLabel;
-//		}
-//	}
-//}
-//
-///// Get residual and errors from data block.
-///**
-// * Get residual, error of measurement and residual and down-weighting
-// * factor for (single) data block
-// * \param [in]  aData Label of data block
-// * \param [out] aResidual Measurement-Prediction
-// * \param [out] aMeasError Error of Measurement
-// * \param [out] aResError Error of Residual (including correlations from track fit)
-// * \param [out] aDownWeight Down-Weighting factor
-// */
-//void getResAndErr( int aData, double &aResidual,
-//		double &aMeasError, double &aResError, double &aDownWeight) {
-//
-//	double aMeasVar;
-//	List< int>* indLocal;
-//	List<double>* derLocal;
-//	theData[aData].getResidual(aResidual, aMeasVar, aDownWeight, indLocal,
-//			derLocal);
-//	 int nParBrl = (*indLocal).size();
-//	TVectorD aVec(nParBrl); // compressed vector of derivatives
-//	for ( int j = 0; j < nParBrl; ++j) {
-//		aVec[j] = (*derLocal)[j];
-//	}
-//	SymMatrix aMat = theMatrix.getBlockMatrix(*indLocal); // compressed (covariance) matrix
-//	double aFitVar = aMat.Similarity(aVec); // variance from track fit
-//	aMeasError = sqrt(aMeasVar); // error of measurement
-//	aResError = (aFitVar < aMeasVar ? sqrt(aMeasVar - aFitVar) : 0.); // error of residual
-//}
+/// Get fit results at point.
+    /**
+     * Get corrections and covariance matrix for local track and additional
+     * parameters in forward or backward direction. \param [in] aSignedLabel
+     * (Signed) label of point on trajectory (<0: in front, >0: after point,
+     * slope changes at scatterer!) \param [out] localPar Corrections for local
+     * parameters \param [out] localCov Covariance for local parameters \return
+     * error code (non-zero if trajectory not fitted successfully)
+     */
+    int getResults(int aSignedLabel, Vector localPar,
+                   SymMatrix localCov)
+    {
+        if (!fitOK) {
+            return 1;
+        }
+        Pair<List< Integer>, Matrix> indexAndJacobian = getJacobian(aSignedLabel);
+        int nParBrl = indexAndJacobian.getFirst().size();
+        Vector aVec = new Vector(nParBrl); // compressed vector
+        for (int i = 0; i < nParBrl; ++i) {
+            aVec.set(i, theVector.get(indexAndJacobian.getFirst().get(i) - 1));
+        }
+        SymMatrix aMat = theMatrix.getBlockMatrix(indexAndJacobian.getFirst()); // compressed matrix
+        localPar.placeAt(indexAndJacobian.getSecond().times(aVec), 0, 0);
+        localCov.placeAt(aMat.Similarity(indexAndJacobian.getSecond()), 0, 0);
+        return 0;
+    }
 /// Build linear equation system from data (blocks).
+
     void buildLinearEquationSystem()
     {
         int nBorder = numCurvature + numLocals;
-//	theVector. resize(numParameters);
+        theVector = new VVector(numParameters);
         theMatrix.resize(numParameters, nBorder, 5);
         double[] retVals = new double[2];
         double aValue, aWeight;
-        int[] indLocal = null;
-        double[] derLocal = null;
-        for (GblData d : theData)
-        {
+        int nData = 0;
+        for (GblData d : theData) {
+            int size = d.getNumParameters();
+            int[] indLocal = new int[size];
+            double[] derLocal = new double[size];
             d.getLocalData(retVals, indLocal, derLocal);
             aValue = retVals[0];
             aWeight = retVals[1];
-            for (int j = 0; j < indLocal.length; ++j)
-            {
+            for (int j = 0; j < size; ++j) {
                 theVector.addTo(indLocal[j] - 1, derLocal[j] * aWeight * aValue);
             }
             theMatrix.addBlockMatrix(aWeight, indLocal, derLocal);
+            nData++;
         }
     }
 //}
 
 /// Prepare fit for simple or composed trajectory
-/**
- * Generate data (blocks) from measurements, kinks, external seed and measurements.
- */
-void prepare() {
-	 int nDim = theDimension.size();
-	// upper limit
-	 int maxData = numMeasurements + nDim * (numOffsets - 2);
-//cng			+ externalSeed.getRowDimension();
-//	theData.reserve(maxData);
-//	measDataIndex.resize(numAllPoints + 3); // include external seed and measurements
-         //cng
-         for(int i = 0; i<numAllPoints + 3; ++i) measDataIndex.add(i,0);
-         //cng
-//	scatDataIndex.resize(numAllPoints + 1);
-	 int nData = 0;
-	List<Matrix> innerTransDer = new ArrayList<Matrix>();
-	List<List<Integer> > innerTransLab = new ArrayList<List<Integer>>();
-//	// composed trajectory ?
-//	if (numInnerTrans > 0) {
-//		//std::cout << "composed trajectory" << std::endl;
-//		for ( int iTraj = 0; iTraj < numTrajectories; ++iTraj) {
-//			// innermost point
-//			GblPoint* innerPoint = &thePoints[iTraj].front();
-//			// transformation fit to local track parameters
-//			List< int> firstLabels(5);
-//			SMatrix55 matFitToLocal, matLocalToFit;
-//			getFitToLocalJacobian(firstLabels, matFitToLocal, *innerPoint, 5);
-//			// transformation local track to fit parameters
-//			int ierr;
-//			matLocalToFit = matFitToLocal.Inverse(ierr);
-//			TMatrixD localToFit(5, 5);
-//			for ( int i = 0; i < 5; ++i) {
-//				for ( int j = 0; j < 5; ++j) {
-//					localToFit(i, j) = matLocalToFit(i, j);
-//				}
-//			}
-//			// transformation external to fit parameters at inner (first) point
-//			innerTransDer.add(localToFit * innerTransformations[iTraj]);
-//			innerTransLab.add(firstLabels);
-//		}
-//	}
-	// measurements
-	Matrix matP = new Matrix(5,5);
-//	// loop over trajectories
-//	List<GblPoint>::iterator itPoint;
-//	for ( int iTraj = 0; iTraj < numTrajectories; ++iTraj) {
-//		for (itPoint = thePoints[iTraj].begin();
-//				itPoint < thePoints[iTraj].end(); ++itPoint) {
-//			SVector5 aMeas, aPrec;
-//			 int nLabel = itPoint->getLabel();
-//			 int measDim = itPoint->hasMeasurement();
-//			if (measDim) {
-//				const TMatrixD localDer = itPoint->getLocalDerivatives();
-//				const List<int> globalLab = itPoint->getGlobalLabels();
-//				const TMatrixD globalDer = itPoint->getGlobalDerivatives();
-//				TMatrixD transDer;
-//				itPoint->getMeasurement(matP, aMeas, aPrec);
-//				 int iOff = 5 - measDim; // first active component
-//				List< int> labDer(5);
-//				SMatrix55 matDer, matPDer;
-//				 int nJacobian =
-//						(itPoint < thePoints[iTraj].end() - 1) ? 1 : 0; // last point needs backward propagation
-//				getFitToLocalJacobian(labDer, matDer, *itPoint, measDim,
-//						nJacobian);
-//				if (measDim > 2) {
-//					matPDer = matP * matDer;
-//				} else { // 'shortcut' for position measurements
-//					matPDer.Place_at(
-//							matP.Sub<SMatrix22>(3, 3)
-//									* matDer.Sub<SMatrix25>(3, 0), 3, 0);
-//				}
-//
-////				if (numInnerTrans > 0) {
-////					// transform for external parameters
-////					TMatrixD proDer(measDim, 5);
-////					// match parameters
-////					 int ifirst = 0;
-////					 int ilabel = 0;
-////					while (ilabel < 5) {
-////						if (labDer[ilabel] > 0) {
-////							while (innerTransLab[iTraj][ifirst]
-////									!= labDer[ilabel] && ifirst < 5) {
-////								++ifirst;
-////							}
-////							if (ifirst >= 5) {
-////								labDer[ilabel] -= 2 * nDim * (iTraj + 1); // adjust label
-////							} else {
-////								// match
-////								labDer[ilabel] = 0; // mark as related to external parameters
-////								for ( int k = iOff; k < 5; ++k) {
-////									proDer(k - iOff, ifirst) = matPDer(k,
-////											ilabel);
-////								}
-////							}
-////						}
-////						++ilabel;
-////					}
-////					transDer.ResizeTo(measDim, numCurvature);
-////					transDer = proDer * innerTransDer[iTraj];
-////				}
-//				for ( int i = iOff; i < 5; ++i) {
-//					if (aPrec(i) > 0.) {
-//						GblData aData(nLabel, aMeas(i), aPrec(i));
-//						aData.addDerivatives(i, labDer, matPDer, iOff, localDer,
-//								globalLab, globalDer, numLocals, transDer);
-//						theData.add(aData);
-//						nData++;
-//					}
-//				}
-//
-//			}
-//			measDataIndex[nLabel] = nData;
-//		}
-//	} // end loop over trajectories
+    /**
+     * Generate data (blocks) from measurements, kinks, external seed and
+     * measurements.
+     */
+    void prepare()
+    {
+        int nDim = theDimension.size();
+        // upper limit
+        int maxData = numMeasurements + nDim * (numOffsets - 2);
[truncated at 1000 lines; 483 more skipped]

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix
BorderedBandMatrix.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/BorderedBandMatrix.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/BorderedBandMatrix.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -3,6 +3,7 @@
 import static java.lang.Math.abs;
 import static java.lang.Math.min;
 import static java.lang.Math.max;
+import java.util.List;
 
 /**
  *
@@ -37,8 +38,8 @@
     private int numBand; ///< Band width
     private int numCol; ///< Band matrix size
     private VSymMatrix theBorder = new VSymMatrix(0); ///< Border part
-    private VMatrix theMixed = new VMatrix(0,0); ///< Mixed part
-    private VMatrix theBand = new VMatrix(0,0); ///< Band part
+    private VMatrix theMixed = new VMatrix(0, 0); ///< Mixed part
+    private VMatrix theBand = new VMatrix(0, 0); ///< Band part
 
 /// Resize bordered band matrix.
     /**
@@ -65,26 +66,21 @@
      * of rows/colums to be used \param aVector [in] Vector
      */
     public void addBlockMatrix(double aWeight,
-            int[] anIndex,
-            double[] aVector)
+                               int[] anIndex,
+                               double[] aVector)
     {
         int nBorder = numBorder;
-        for (int i = 0; i < anIndex.length; ++i)
-        {
+        for (int i = 0; i < anIndex.length; ++i) {
             int iIndex = (anIndex)[i] - 1; // anIndex has to be sorted
-            for (int j = 0; j <= i; ++j)
-            {
+            for (int j = 0; j <= i; ++j) {
                 int jIndex = (anIndex)[j] - 1;
-                if (iIndex < nBorder)
-                {
+                if (iIndex < nBorder) {
                     theBorder.addTo(iIndex, jIndex, aVector[i] * aWeight
                             * aVector[j]);
-                } else if (jIndex < nBorder)
-                {
+                } else if (jIndex < nBorder) {
                     theMixed.addTo(jIndex, iIndex - nBorder, aVector[i] * aWeight
                             * aVector[j]);
-                } else
-                {
+                } else {
                     int nBand = iIndex - jIndex;
                     theBand.addTo(nBand, jIndex - nBorder, aVector[i] * aWeight
                             * aVector[j]);
@@ -94,34 +90,36 @@
         }
     }
 
-///// Retrieve symmetric block matrix.
-///**
-// * Get (compressed) block from bordered band matrix: aMatrix(i,j) = BBmatrix(anIndex(i),anIndex(j)).
-// * \param anIndex [in] List of rows/colums to be used
-// */
-//TMatrixDSym BorderedBandMatrix::getBlockMatrix(
-//		const std::vector<unsigned int> anIndex) const {
-//
-//	TMatrixDSym aMatrix(anIndex.size());
-//	int nBorder = numBorder;
-//	for (unsigned int i = 0; i < anIndex.size(); ++i) {
-//		int iIndex = anIndex[i] - 1; // anIndex has to be sorted
-//		for (unsigned int j = 0; j <= i; ++j) {
-//			int jIndex = anIndex[j] - 1;
-//			if (iIndex < nBorder) {
-//				aMatrix(i, j) = theBorder(iIndex, jIndex); // border part of inverse
-//			} else if (jIndex < nBorder) {
-//				aMatrix(i, j) = -theMixed(jIndex, iIndex - nBorder); // mixed part of inverse
-//			} else {
-//				unsigned int nBand = iIndex - jIndex;
-//				aMatrix(i, j) = theBand(nBand, jIndex - nBorder); // band part of inverse
-//			}
-//			aMatrix(j, i) = aMatrix(i, j);
-//		}
-//	}
-//	return aMatrix;
-//}    
+/// Retrieve symmetric block matrix.
+    /**
+     * Get (compressed) block from bordered band matrix: aMatrix(i,j) =
+     * BBmatrix(anIndex(i),anIndex(j)). \param anIndex [in] List of rows/colums
+     * to be used
+     */
+    public SymMatrix getBlockMatrix(List<Integer> anIndex)
+    {
+
+        SymMatrix aMatrix = new SymMatrix(anIndex.size());
+        int nBorder = numBorder;
+        for (int i = 0; i < anIndex.size(); ++i) {
+            int iIndex = anIndex.get(i) - 1; // anIndex has to be sorted
+            for (int j = 0; j <= i; ++j) {
+                int jIndex = anIndex.get(j) - 1;
+                if (iIndex < nBorder) {
+                    aMatrix.set(i, j, theBorder.get(iIndex, jIndex)); // border part of inverse
+                } else if (jIndex < nBorder) {
+                    aMatrix.set(i, j, -theMixed.get(jIndex, iIndex - nBorder)); // mixed part of inverse
+                } else {
+                    int nBand = iIndex - jIndex;
+                    aMatrix.set(i, j, theBand.get(nBand, jIndex - nBorder)); // band part of inverse
+                }
+                aMatrix.set(j, i, aMatrix.get(i, j));
+            }
+        }
+        return aMatrix;
+    }
 /// Solve linear equation system, partially calculate inverse.
+
     /**
      * Solve linear equation A*x=b system with bordered band matrix A, calculate
      * bordered band part of inverse of A. Use decomposition in border and band
@@ -146,38 +144,40 @@
      * \param [in] aRightHandSide Right hand side (vector) 'b' of A*x=b \param
      * [out] aSolution Solution (vector) x of A*x=b
      */
-public void  solveAndInvertBorderedBand(
-		  VVector aRightHandSide, VVector aSolution) {
+    public void solveAndInvertBorderedBand(
+            VVector aRightHandSide, VVector aSolution)
+    {
 
-	// decompose band
-	decomposeBand();
-	// invert band
-	VMatrix inverseBand = invertBand();
-	if (numBorder > 0) { // need to use block matrix decomposition to solve
-		// solve for mixed part
-		 VMatrix auxMat = solveBand(theMixed); // = Xt
-		 VMatrix auxMatT = auxMat.transpose(); // = X
-		// solve for border part
-		 VVector auxVec = aRightHandSide.getVec(numBorder,0).minus(
-				auxMat.times( aRightHandSide.getVec(numCol, numBorder) ) ); // = b1 - Xt*b2
-		VSymMatrix inverseBorder = theBorder.minus(theMixed.times(auxMatT) );
-		inverseBorder.invert(); // = E
-		 VVector borderSolution = inverseBorder.times(auxVec); // = x1
-		// solve for band part
-		 VVector bandSolution = solveBand(
-				aRightHandSide.getVec(numCol, numBorder)); // = x
-		aSolution.putVec(borderSolution,0);
-		aSolution.putVec(bandSolution.minus(auxMatT.times(borderSolution)), numBorder); // = x2
-		// parts of inverse
-		theBorder = inverseBorder; // E
-		theMixed = inverseBorder.times(auxMat); // E*Xt (-mixed part of inverse) !!!
-		theBand = inverseBand.plus(bandOfAVAT(auxMatT, inverseBorder)); // band(D^-1 + X*E*Xt)
-	} else {
-		aSolution.putVec(solveBand(aRightHandSide),0);
-		theBand = inverseBand;
-	}
-}
+        // decompose band
+        decomposeBand();
+        // invert band
+        VMatrix inverseBand = invertBand();
+        if (numBorder > 0) { // need to use block matrix decomposition to solve
+            // solve for mixed part
+            VMatrix auxMat = solveBand(theMixed); // = Xt
+            VMatrix auxMatT = auxMat.transpose(); // = X
+            // solve for border part
+            VVector auxVec = aRightHandSide.getVec(numBorder, 0).minus(
+                    auxMat.times(aRightHandSide.getVec(numCol, numBorder))); // = b1 - Xt*b2
+            VSymMatrix inverseBorder = theBorder.minus(theMixed.times(auxMatT));
+            inverseBorder.invert(); // = E
+            VVector borderSolution = inverseBorder.times(auxVec); // = x1
+            // solve for band part
+            VVector bandSolution = solveBand(
+                    aRightHandSide.getVec(numCol, numBorder)); // = x
+            aSolution.putVec(borderSolution, 0);
+            aSolution.putVec(bandSolution.minus(auxMatT.times(borderSolution)), numBorder); // = x2
+            // parts of inverse
+            theBorder = inverseBorder; // E
+            theMixed = inverseBorder.times(auxMat); // E*Xt (-mixed part of inverse) !!!
+            theBand = inverseBand.plus(bandOfAVAT(auxMatT, inverseBorder)); // band(D^-1 + X*E*Xt)
+        } else {
+            aSolution.putVec(solveBand(aRightHandSide), 0);
+            theBand = inverseBand;
+        }
+    }
 /// Print bordered band matrix.
+
     public void printMatrix()
     {
         System.out.println("Border part ");
@@ -204,29 +204,22 @@
         int nRow = numBand + 1;
         int nCol = numCol;
         VVector auxVec = new VVector(nCol);
-        for (int i = 0; i < nCol; ++i)
-        {
+        for (int i = 0; i < nCol; ++i) {
             auxVec.set(i, theBand.get(0, i) * 16.0); // save diagonal elements
         }
-        for (int i = 0; i < nCol; ++i)
-        {
-            if ((theBand.get(0, i) + auxVec.get(i)) != theBand.get(0, i))
-            {
+        for (int i = 0; i < nCol; ++i) {
+            if ((theBand.get(0, i) + auxVec.get(i)) != theBand.get(0, i)) {
                 theBand.set(0, i, 1.0 / theBand.get(0, i));
-                if (theBand.get(0, i) < 0.)
-                {
+                if (theBand.get(0, i) < 0.) {
                     throw new RuntimeException("BorderedBandMatrix decomposeBand not positive definite");
                 }
-            } else
-            {
+            } else {
                 theBand.set(0, i, 0.0);
                 throw new RuntimeException("BorderedBandMatrix decomposeBand singular");
             }
-            for (int j = 1; j < min(nRow, nCol - i); ++j)
-            {
+            for (int j = 1; j < min(nRow, nCol - i); ++j) {
                 double rxw = theBand.get(j, i) * theBand.get(0, i);
-                for (int k = 0; k < min(nRow, nCol - i) - j; ++k)
-                {
+                for (int k = 0; k < min(nRow, nCol - i) - j; ++k) {
                     theBand.subFrom(k, i + j, theBand.get(k + j, i) * rxw);
                 }
                 theBand.set(j, i, rxw);
@@ -245,13 +238,10 @@
         int nCol = numCol;
         VMatrix inverseBand = new VMatrix(nRow, nCol);
 
-        for (int i = nCol - 1; i >= 0; i--)
-        {
+        for (int i = nCol - 1; i >= 0; i--) {
             double rxw = theBand.get(0, i);
-            for (int j = i; j >= max(0, i - nRow + 1); j--)
-            {
-                for (int k = j + 1; k < min(nCol, j + nRow); ++k)
-                {
+            for (int j = i; j >= max(0, i - nRow + 1); j--) {
+                for (int k = j + 1; k < min(nCol, j + nRow); ++k) {
                     rxw -= inverseBand.get(abs(i - k), min(i, k))
                             * theBand.get(k - j, j);
                 }
@@ -277,16 +267,14 @@
         VVector aSolution = new VVector(aRightHandSide);
         for (int i = 0; i < nCol; ++i) // forward substitution
         {
-            for (int j = 1; j < min(nRow, nCol - i); ++j)
-            {
+            for (int j = 1; j < min(nRow, nCol - i); ++j) {
                 aSolution.subFrom(j + i, theBand.get(j, i) * aSolution.get(i));
             }
         }
         for (int i = nCol - 1; i >= 0; i--) // backward substitution
         {
             double rxw = theBand.get(0, i) * aSolution.get(i);
-            for (int j = 1; j < min(nRow, nCol - i); ++j)
-            {
+            for (int j = 1; j < min(nRow, nCol - i); ++j) {
                 rxw -= theBand.get(j, i) * aSolution.get(j + i);
             }
             aSolution.set(i, rxw);
@@ -306,12 +294,10 @@
         int nRow = theBand.getNumRows();
         int nCol = theBand.getNumCols();
         VMatrix aSolution = new VMatrix(aRightHandSide);
-        for (int iBorder = 0; iBorder < numBorder; iBorder++)
-        {
+        for (int iBorder = 0; iBorder < numBorder; iBorder++) {
             for (int i = 0; i < nCol; ++i) // forward substitution
             {
-                for (int j = 1; j < min(nRow, nCol - i); ++j)
-                {
+                for (int j = 1; j < min(nRow, nCol - i); ++j) {
                     aSolution.subFrom(iBorder, j + i, theBand.get(j, i)
                             * aSolution.get(iBorder, i));
                 }
@@ -319,8 +305,7 @@
             for (int i = nCol - 1; i >= 0; i--) // backward substitution
             {
                 double rxw = theBand.get(0, i) * aSolution.get(iBorder, i);
-                for (int j = 1; j < min(nRow, nCol - i); ++j)
-                {
+                for (int j = 1; j < min(nRow, nCol - i); ++j) {
                     rxw -= theBand.get(j, i) * aSolution.get(iBorder, j + i);
                 }
                 aSolution.set(iBorder, i, rxw);
@@ -329,32 +314,31 @@
         return aSolution;
     }
 
-
     /// Calculate band part of: 'anArray * aSymArray * anArray.T'.
-/**
- * \return Band part of product
- */
-private VMatrix bandOfAVAT( VMatrix anArray,
-		 VSymMatrix aSymArray)  {
-	int nBand = numBand;
-	int nCol = numCol;
-	int nBorder = numBorder;
-	double sum;
-	VMatrix aBand = new VMatrix((nBand + 1), nCol);
-	for (int i = 0; i < nCol; ++i) {
-		for (int j = max(0, i - nBand); j <= i; ++j) {
-			sum = 0.;
-			for (int l = 0; l < nBorder; ++l) { // diagonal
-				sum += anArray.get(i, l) * aSymArray.get(l, l) * anArray.get(j, l);
-				for (int k = 0; k < l; ++k) { // off diagonal
-					sum += anArray.get(i, l) * aSymArray.get(l, k) * anArray.get(j, k)
-							+ anArray.get(i, k) * aSymArray.get(l, k) * anArray.get(j, l);
-				}
-			}
-			aBand.set(i - j, j, sum);
-		}
-	}
-	return aBand;
-}
-    
-}
+    /**
+     * \return Band part of product
+     */
+    private VMatrix bandOfAVAT(VMatrix anArray,
+                               VSymMatrix aSymArray)
+    {
+        int nBand = numBand;
+        int nCol = numCol;
+        int nBorder = numBorder;
+        double sum;
+        VMatrix aBand = new VMatrix((nBand + 1), nCol);
+        for (int i = 0; i < nCol; ++i) {
+            for (int j = max(0, i - nBand); j <= i; ++j) {
+                sum = 0.;
+                for (int l = 0; l < nBorder; ++l) { // diagonal
+                    sum += anArray.get(i, l) * aSymArray.get(l, l) * anArray.get(j, l);
+                    for (int k = 0; k < l; ++k) { // off diagonal
+                        sum += anArray.get(i, l) * aSymArray.get(l, k) * anArray.get(j, k)
+                                + anArray.get(i, k) * aSymArray.get(l, k) * anArray.get(j, l);
+                    }
+                }
+                aBand.set(i - j, j, sum);
+            }
+        }
+        return aBand;
+    }
+}
\ No newline at end of file

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix
Matrix.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/Matrix.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/Matrix.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -205,22 +205,22 @@
 //        return X;
 //    }
 //
-//    /**
-//     * Make a deep copy of a matrix
-//     */
-//    public Matrix copy()
-//    {
-//        Matrix X = new Matrix(m, n);
-//        double[][] C = X.getArray();
-//        for (int i = 0; i < m; i++)
-//        {
-//            for (int j = 0; j < n; j++)
-//            {
-//                C[i][j] = A[i][j];
-//            }
-//        }
-//        return X;
-//    }
+    /**
+     * Make a deep copy of a matrix
+     */
+    public Matrix copy()
+    {
+        Matrix X = new Matrix(m, n);
+        double[][] C = X.getArray();
+        for (int i = 0; i < m; i++)
+        {
+            for (int j = 0; j < n; j++)
+            {
+                C[i][j] = A[i][j];
+            }
+        }
+        return X;
+    }
 //
 //    /**
 //     * Clone the Matrix object.
@@ -1354,27 +1354,27 @@
         output.println();   // end with blank line.
     }
 
+    /**
+     * String representation for this Object.
+     *
+     * @return string representation of this object.
+     */
+    public String toString()
+    {
+        StringBuffer tmp = new StringBuffer();
+        for (int i = 0; i < m; ++i)
+        {
+            for (int j = 0; j < n; ++j)
+            {
+                tmp.append(" " + A[i][j]);
+            }
+            tmp.append("\n");
+        }
+        tmp.append("\n");
+        return tmp.toString();
+    }
+
 //    /**
-//     * String representation for this Object.
-//     *
-//     * @return string representation of this object.
-//     */
-//    public String toString()
-//    {
-//        StringBuffer tmp = new StringBuffer();
-//        for (int i = 0; i < m; ++i)
-//        {
-//            for (int j = 0; j < n; ++j)
-//            {
-//                tmp.append(" " + A[i][j]);
-//            }
-//            tmp.append("\n");
-//        }
-//        tmp.append("\n");
-//        return tmp.toString();
-//    }
-//
-//    /**
 //     * Read a matrix from a stream. The format is the same the print method, so
 //     * printed matrices can be read back in (provided they were printed using US
 //     * Locale). Elements are separated by whitespace, all the elements for each

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix
VMatrix.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/VMatrix.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/VMatrix.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -23,33 +23,31 @@
         numRows = nRows;
         numCols = nCols;
         theVec = new ArrayList(nRows * nCols);
-        for (int i = 0; i < numRows * nCols; ++i)
-        {
+        for (int i = 0; i < numRows * nCols; ++i) {
             theVec.add(0.);
         }
     }
-    
-public VMatrix(VMatrix m)
+
+    public VMatrix(VMatrix m)
     {
         numRows = m.numRows;
         numCols = m.numCols;
         theVec = new ArrayList(numRows * numCols);
-        for (int i = 0; i < numRows; ++i)
-        {
-            for(int j=0; j<numCols; ++j)
-            {
-            theVec.set(numCols * i + j, m.get(i, j));
+        for (int i = 0; i < numRows * numCols; ++i) {
+            theVec.add(0.);
+        }
+        for (int i = 0; i < numRows; ++i) {
+            for (int j = 0; j < numCols; ++j) {
+                theVec.set(numCols * i + j, m.get(i, j));
             }
         }
-    }    
+    }
 
     public VMatrix copy()
     {
         VMatrix aResult = new VMatrix(numRows, numCols);
-        for (int i = 0; i < numRows; ++i)
-        {
-            for (int j = 0; j < numCols; ++j)
-            {
+        for (int i = 0; i < numRows; ++i) {
+            for (int j = 0; j < numCols; ++j) {
                 {
                     aResult.set(i, j, get(i, j));
                 }
@@ -69,8 +67,7 @@
         numRows = nRows;
         numCols = nCols;
         theVec = new ArrayList(numRows * nCols);
-        for (int i = 0; i < numRows * nCols; ++i)
-        {
+        for (int i = 0; i < numRows * nCols; ++i) {
             theVec.add(0.);
         }
     }
@@ -82,10 +79,8 @@
     public VMatrix transpose()
     {
         VMatrix aResult = new VMatrix(numCols, numRows);
-        for (int i = 0; i < numRows; ++i)
-        {
-            for (int j = 0; j < numCols; ++j)
-            {
+        for (int i = 0; i < numRows; ++i) {
+            for (int j = 0; j < numCols; ++j) {
                 //System.out.println("row: "+i+" col: "+j+" val: "+theVec.get(numCols * i + j));
                 aResult.set(j, i, (double) theVec.get(numCols * i + j));
             }
@@ -97,14 +92,15 @@
     {
         theVec.set(numCols * row + col, val);
     }
-    
-     public void addTo(int row, int col, double val)
+
+    public void addTo(int row, int col, double val)
     {
-        theVec.set(numCols * row + col, (double) theVec.get(numCols * row + col)+val);
+        theVec.set(numCols * row + col, (double) theVec.get(numCols * row + col) + val);
     }
-     public void subFrom(int row, int col, double val)
+
+    public void subFrom(int row, int col, double val)
     {
-        theVec.set(numCols * row + col, (double) theVec.get(numCols * row + col)-val);
+        theVec.set(numCols * row + col, (double) theVec.get(numCols * row + col) - val);
     }
 
     public double get(int row, int col)
@@ -134,11 +130,9 @@
     VVector times(VVector aVector)
     {
         VVector aResult = new VVector(numRows);
-        for (int i = 0; i < numRows; ++i)
-        {
+        for (int i = 0; i < numRows; ++i) {
             double sum = 0.0;
-            for (int j = 0; j < numCols; ++j)
-            {
+            for (int j = 0; j < numCols; ++j) {
                 sum += (double) theVec.get(numCols * i + j) * aVector.get(j);
             }
             aResult.set(i, sum);
@@ -151,13 +145,10 @@
     {
 
         VMatrix aResult = new VMatrix(numRows, aMatrix.numCols);
-        for (int i = 0; i < numRows; ++i)
-        {
-            for (int j = 0; j < aMatrix.numCols; ++j)
-            {
+        for (int i = 0; i < numRows; ++i) {
+            for (int j = 0; j < aMatrix.numCols; ++j) {
                 double sum = 0.0;
-                for (int k = 0; k < numCols; ++k)
-                {
+                for (int k = 0; k < numCols; ++k) {
                     sum += (double) theVec.get(numCols * i + k) * aMatrix.get(k, j);
                 }
                 aResult.set(i, j, sum);
@@ -170,10 +161,8 @@
     VMatrix plus(VMatrix aMatrix)
     {
         VMatrix aResult = new VMatrix(numRows, numCols);
-        for (int i = 0; i < numRows; ++i)
-        {
-            for (int j = 0; j < numCols; ++j)
-            {
+        for (int i = 0; i < numRows; ++i) {
+            for (int j = 0; j < numCols; ++j) {
                 aResult.set(i, j, (double) theVec.get(numCols * i + j) + (double) aMatrix.get(i, j));
             }
         }
@@ -184,12 +173,9 @@
     public void print()
     {
         System.out.println(" VMatrix: " + numRows + "*" + numCols);
-        for (int i = 0; i < numRows; ++i)
-        {
-            for (int j = 0; j < numCols; ++j)
-            {
-                if (j % 5 == 0)
-                {
+        for (int i = 0; i < numRows; ++i) {
+            for (int j = 0; j < numCols; ++j) {
+                if (j % 5 == 0) {
                     System.out.format("%n%4d " + "," + "%4d" + " - " + "%4d" + " : ", i, j, min(j + 4, numCols));
                 }
                 System.out.format("%13f", theVec.get(numCols * i + j));
@@ -197,5 +183,4 @@
         }
         System.out.print("\n\n\n");
     }
-
 }

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix
VVector.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/VVector.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/VVector.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -21,8 +21,7 @@
     {
         numRows = nRows;
         theVec = new ArrayList(nRows);
-        for (int i = 0; i < numRows; ++i)
-        {
+        for (int i = 0; i < numRows; ++i) {
             theVec.add(0.);
         }
     }
@@ -44,12 +43,12 @@
     {
         theVec.set(row, val);
     }
-    
+
     public void addTo(int row, double val)
     {
         theVec.set(row, (double) theVec.get(row) + val);
     }
-    
+
     public void subFrom(int row, double val)
     {
         theVec.set(row, (double) theVec.get(row) - val);
@@ -67,7 +66,7 @@
      */
     public VVector getVec(int len, int start)
     {
-        return new VVector(theVec.subList(start, start + len - 1));
+        return new VVector(theVec.subList(start, start + len));
 
     }
 
@@ -93,10 +92,8 @@
     public void print()
     {
         System.out.println(theVec.size());
-        for (int i = 0; i < numRows; ++i)
-        {
-            if (i % 5 == 0)
-            {
+        for (int i = 0; i < numRows; ++i) {
+            if (i % 5 == 0) {
                 System.out.format("%n%4d " + " - " + "%4d" + " : ", i, min(i + 4, numRows));
             }
             System.out.format("%13f", theVec.get(i));
@@ -108,8 +105,7 @@
     VVector minus(VVector aVector)
     {
         VVector aResult = new VVector(numRows);
-        for (int i = 0; i < numRows; ++i)
-        {
+        for (int i = 0; i < numRows; ++i) {
             aResult.set(i, (double) theVec.get(i) - aVector.get(i));
         }
         return aResult;
@@ -119,8 +115,7 @@
     public VVector copy()
     {
         VVector aResult = new VVector(numRows);
-        for (int i = 0; i < numRows; ++i)
-        {
+        for (int i = 0; i < numRows; ++i) {
             aResult.set(i, get(i));
         }
         return aResult;

java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix
Vector.java 1045 -> 1046
--- java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/Vector.java	2014-09-17 23:30:16 UTC (rev 1045)
+++ java/branches/hps_java_trunk_HPSJAVA-255/tracking/src/main/java/org/hps/recon/tracking/gbl/matrix/Vector.java	2014-09-18 18:30:50 UTC (rev 1046)
@@ -73,7 +73,7 @@
     {
         Vector x = copyVector();
         for (int i = 0; i < size(); ++i) {
-            A[i][0] = -A[i][0];
+            x.set(i, -get(i));
         }
         return x;
     }
@@ -184,7 +184,12 @@
 
     public Vector plus(Vector vec) throws IllegalArgumentException
     {
-        return (Vector) super.plus(vec);
+        Vector tmp = new Vector(getSize());
+        for(int i=0; i<getSize(); ++i)
+        {
+            tmp.set(i, get(i)+vec.get(i));
+        }
+        return tmp;
     }
 
     /**
@@ -196,7 +201,12 @@
      */
     public Vector timesScalar(double s)
     {
-        return (Vector) super.times(s);
+        Vector tmp = new Vector(getSize());
+        for(int i=0; i<getSize(); ++i)
+        {
+            tmp.set(i, get(i)*s);
+        }
+        return tmp;
     }
 
 //    /**
SVNspam 0.1