Print

Print


Commit in lcsim on MAIN
src/org/lcsim/recon/tracking/digitization/sisim/config/SiTrackerBarrelSensorSetup.java+31-91.2 -> 1.3
                                                      /SiTrackerEndcap2SensorSetup.java+26-101.2 -> 1.3
                                                      /SiTrackerEndcapSensorSetup.java+26-51.2 -> 1.3
                                                      /SiVertexBarrelSensorSetup.java+38-101.2 -> 1.3
                                                      /SiVertexEndcapSensorSetup.java+33-31.2 -> 1.3
testResources/org/lcsim/recon/tracking/digitization/sisim/config/digiTest.xml+16-11.3 -> 1.4
+170-38
6 modified files
make pitches and basic transfer efficiencies settable for all default config drivers; update test case xml file

lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
SiTrackerBarrelSensorSetup.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SiTrackerBarrelSensorSetup.java	24 Aug 2009 23:07:39 -0000	1.2
+++ SiTrackerBarrelSensorSetup.java	25 Aug 2009 18:37:39 -0000	1.3
@@ -26,6 +26,10 @@
 public class SiTrackerBarrelSensorSetup extends Driver 
 {
 	String subdetectorName;
+	
+	double readoutElectrodesPitch = 0.050;
+	double senseElectrodesPitch = 0.025;
+	double transferEfficiencies[] = {0.986,0.419};
 
 	public SiTrackerBarrelSensorSetup()
 	{}
@@ -51,11 +55,29 @@
 		else
 			throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
 	}
+	
+	public void setReadoutElectrodesPitch(double readoutElectrodesPitch)
+	{
+		this.readoutElectrodesPitch = readoutElectrodesPitch;
+	}
+	
+	public void setSenseElectrodesPitch(double senseElectrodesPitch)
+	{
+		this.senseElectrodesPitch = senseElectrodesPitch;
+	}
+	
+	public void setTransferEfficiencies(double transferEfficiencies[])
+	{
+		if (transferEfficiencies.length < 2)
+		{
+			throw new IllegalArgumentException("Not enough values in transferEfficiencies array.");
+		}
+		this.transferEfficiencies[0] = transferEfficiencies[0];
+		this.transferEfficiencies[1] = transferEfficiencies[1];
+	}
 
 	private void setupSensorDetectorElements(Subdetector subdet)
-	{
-		//System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");		
-		
+	{		
 		for ( IDetectorElement layer : subdet.getDetectorElement().getChildren() )
 		{
 			for ( IDetectorElement module : layer.getChildren() )
@@ -63,7 +85,7 @@
 					List<SiSensor> sensors = module.findDescendants(SiSensor.class);
 
 					if (sensors.size() == 0)
-						throw new RuntimeException("No sensors found in module.");
+						throw new RuntimeException("No sensors found in module " + module.getName() + ".");
 
 					SiSensor sensor = sensors.get(0);
 
@@ -71,7 +93,7 @@
 					IPolyhedron sensor_solid = (IPolyhedron)sensor.getGeometry().getLogicalVolume().getSolid();
 
 					// Bias the sensor
-					Polygon3D p_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,1)).get(0);                        
+					Polygon3D p_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,1)).get(0);
 
 					Polygon3D n_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0,0,-1)).get(0);
 
@@ -84,14 +106,14 @@
 					Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
 
 					// Free calculation of readout electrodes, sense electrodes determined thereon
-					SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
-					SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
+					SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,this.readoutElectrodesPitch,sensor,electrodes_transform);
+					SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,senseElectrodesPitch,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
 
 					sensor.setSenseElectrodes(sense_electrodes);
 					sensor.setReadoutElectrodes(readout_electrodes);
 
-					double[][] transfer_efficiencies = { {0.986,0.419} };
-					sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));                        
+					double[][] transferEfficienciesMatrix = { transferEfficiencies };
+					sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transferEfficienciesMatrix));                        
 			}                
 		}        
 	}

lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
SiTrackerEndcap2SensorSetup.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SiTrackerEndcap2SensorSetup.java	24 Aug 2009 23:07:39 -0000	1.2
+++ SiTrackerEndcap2SensorSetup.java	25 Aug 2009 18:37:39 -0000	1.3
@@ -26,6 +26,9 @@
 public class SiTrackerEndcap2SensorSetup extends Driver 
 {
 	String subdetectorName;
+	double readoutPitch = 0.050;
+	double sensePitch = 0.025;
+	double transferEfficiencies[] = {0.986,0.419};
 
 	public SiTrackerEndcap2SensorSetup()
 	{}
@@ -51,16 +54,33 @@
 		else
 			throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerEndcap.");
 	}
+	
+	public void setReadoutPitch(double p)
+	{
+		this.readoutPitch = p;
+	}
+	
+	public void setSensePitch(double p)
+	{
+		this.sensePitch = p;
+	}
+	
+	public void setTransferEfficiencies(double transferEfficiencies[])
+	{
+		if (transferEfficiencies.length < 2)
+		{
+			throw new IllegalArgumentException("Not enough values in transferEfficiencies array.");
+		}
+		this.transferEfficiencies[0] = transferEfficiencies[0];
+		this.transferEfficiencies[1] = transferEfficiencies[1];
+	}
 
 	private void setupSensorDetectorElements(Subdetector subdet)
 	{
-		//System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
-
 		for ( IDetectorElement endcap : subdet.getDetectorElement().getChildren() )
 		{
 			for ( IDetectorElement layer : endcap.getChildren() )
 			{
-				//int nwedges = layer.getChildren().size();
 				for ( IDetectorElement wedge : layer.getChildren() )
 				{
 					for ( IDetectorElement module : wedge.getChildren() )
@@ -70,7 +90,6 @@
 						if (sensors.size() == 0)
 							throw new RuntimeException("No sensors found in module.");
 
-						//int sensorId = 0;
 						for (SiSensor sensor : sensors)
 						{
 							Trd sensor_solid = (Trd)sensor.getGeometry().getLogicalVolume().getSolid();
@@ -89,17 +108,14 @@
                             Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);                                
                             
                             // Free calculation of readout electrodes, sense electrodes determined thereon
-                            SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
-                            SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);                                                                
+                            SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,this.readoutPitch,sensor,electrodes_transform);
+                            SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,this.sensePitch,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);                                                                
                             
                             sensor.setSenseElectrodes(sense_electrodes);
                             sensor.setReadoutElectrodes(readout_electrodes);
                             
-                            double[][] transfer_efficiencies = { {0.986,0.419} };
+                            double[][] transfer_efficiencies = { transferEfficiencies };
                             sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
-							// here
-
-							//++sensorId;
 						}
 					}
 				}                

lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
SiTrackerEndcapSensorSetup.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SiTrackerEndcapSensorSetup.java	24 Aug 2009 23:07:39 -0000	1.2
+++ SiTrackerEndcapSensorSetup.java	25 Aug 2009 18:37:39 -0000	1.3
@@ -26,6 +26,9 @@
 public class SiTrackerEndcapSensorSetup extends Driver 
 {
 	String subdetectorName;
+	double readoutPitch = 0.050;
+	double sensePitch = 0.025;
+	double transferEfficiencies[] = {0.986,0.419};
 
 	public SiTrackerEndcapSensorSetup()
 	{}
@@ -51,11 +54,29 @@
 		else
 			throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerEndcap.");
 	}
+	
+	public void setReadoutPitch(double p)
+	{
+		this.readoutPitch = p;
+	}
+	
+	public void setSensePitch(double p)
+	{
+		this.sensePitch = p;
+	}
+	
+	public void setTransferEfficiencies(double transferEfficiencies[])
+	{
+		if (transferEfficiencies.length < 2)
+		{
+			throw new IllegalArgumentException("Not enough values in transferEfficiencies array.");
+		}
+		this.transferEfficiencies[0] = transferEfficiencies[0];
+		this.transferEfficiencies[1] = transferEfficiencies[1];
+	}
 
 	private void setupSensorDetectorElements(Subdetector subdet)
 	{
-		//System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");
-
 		for ( IDetectorElement endcap : subdet.getDetectorElement().getChildren() )
 		{
 			for ( IDetectorElement layer : endcap.getChildren() )
@@ -107,13 +128,13 @@
 							Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
 
 							// Free calculation of readout electrodes, sense electrodes determined thereon
-							SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,0.050,sensor,electrodes_transform);
-							SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,0.025,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
+							SiSensorElectrodes readout_electrodes = new SiStrips(ChargeCarrier.HOLE,this.readoutPitch,sensor,electrodes_transform);
+							SiSensorElectrodes sense_electrodes = new SiStrips(ChargeCarrier.HOLE,this.sensePitch,(readout_electrodes.getNCells()*2-1),sensor,electrodes_transform);
 
 							sensor.setSenseElectrodes(sense_electrodes);
 							sensor.setReadoutElectrodes(readout_electrodes);
 
-							double[][] transfer_efficiencies = { {0.986,0.419} };
+							double[][] transfer_efficiencies = { transferEfficiencies };
 							sensor.setTransferEfficiencies(ChargeCarrier.HOLE,new BasicMatrix(transfer_efficiencies));
 
 							++sensorId;

lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
SiVertexBarrelSensorSetup.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SiVertexBarrelSensorSetup.java	24 Aug 2009 23:07:39 -0000	1.2
+++ SiVertexBarrelSensorSetup.java	25 Aug 2009 18:37:39 -0000	1.3
@@ -23,10 +23,16 @@
 import org.lcsim.geometry.subdetector.SiTrackerBarrel;
 import org.lcsim.util.Driver;
 
-// TODO: Make pixel size a settable parameter.
 public class SiVertexBarrelSensorSetup extends Driver
 {
 	String subdetectorName;
+	
+    // Sets pixel size to x=0.05 and y=0.25 (mm)
+	double readoutPitchX = 0.05;
+	double readoutPitchY = 0.25;
+	double sensePitchX = 0.05;
+	double sensePitchY = 0.25;
+	double transferEfficiency = 1.0;
 
 	public SiVertexBarrelSensorSetup()
 	{}
@@ -53,10 +59,33 @@
 			throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
 	}
 	
-	private void setupSensorDetectorElements(Subdetector subdet)
+	public void setReadoutPitchX(double x)
 	{
-		//System.out.println(this.getClass().getCanonicalName() + " - Setting up sensors for " + subdet.getName() + " ...");		
-		
+		this.readoutPitchX = x;
+	}
+	
+	public void setReadoutPitchY(double y)
+	{
+		this.readoutPitchY = y;
+	}
+	
+	public void setSensePitchX(double x)
+	{
+		this.sensePitchX = x;
+	}
+	
+	public void setSensePitchY(double y)
+	{
+		this.sensePitchY = y;
+	}
+	
+	public void setTransferEfficiency(double t)
+	{
+		this.transferEfficiency = t;
+	}
+	
+	private void setupSensorDetectorElements(Subdetector subdet)
+	{		
 		for ( IDetectorElement layer : subdet.getDetectorElement().getChildren() )
 		{
 			for ( IDetectorElement module : layer.getChildren() )
@@ -64,7 +93,7 @@
 					List<SiSensor> sensors = module.findDescendants(SiSensor.class);
 
 					if (sensors.size() == 0)
-						throw new RuntimeException("No sensors found in module.");
+						throw new RuntimeException("No sensors found in module " + module.getName() + ".");
 
 					SiSensor sensor = sensors.get(0);
 					IPolyhedron sensor_solid = (IPolyhedron) sensor.getGeometry().getLogicalVolume().getSolid();
@@ -72,7 +101,7 @@
                     Polygon3D top_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, 0, 1)).get(0);
                     Polygon3D bot_side = sensor_solid.getFacesNormalTo(new BasicHep3Vector(0, 0, -1)).get(0);
                    
-                    //   collect electrons on the top side
+                    // collect electrons on the top side
                     sensor.setBiasSurface(ChargeCarrier.HOLE, bot_side);
                     sensor.setBiasSurface(ChargeCarrier.ELECTRON, top_side);
 
@@ -84,9 +113,8 @@
                     Transform3D electrodes_transform = new Transform3D(electrodes_position, electrodes_rotation);
 
                     //  Define the pixel electrodes...collecting holes;
-                    // Sets pixel size to x=0.05 and y=0.25 (mm)
-                    SiSensorElectrodes readout_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
-                    SiSensorElectrodes sense_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
+                    SiSensorElectrodes readout_electrodes = new SiPixels(ChargeCarrier.ELECTRON, this.readoutPitchX, this.readoutPitchY, sensor, electrodes_transform);
+                    SiSensorElectrodes sense_electrodes = new SiPixels(ChargeCarrier.ELECTRON, this.sensePitchX, this.sensePitchY, sensor, electrodes_transform);
 
                     //  Tell the sensor about the electrodes
                     sensor.setSenseElectrodes(sense_electrodes);
@@ -94,7 +122,7 @@
 
                     //  Define the transfer efficiency from sense electrodes to readout electrodes
                     //  For pixels, we do a direct transfer of charge from sense electrodes to readout electrodes
-                    double[][] transfer_efficiencies = {{1.0}};
+                    double[][] transfer_efficiencies = {{this.transferEfficiency}};
                     sensor.setTransferEfficiencies(ChargeCarrier.ELECTRON, new BasicMatrix(transfer_efficiencies));
 			}
 		}

lcsim/src/org/lcsim/recon/tracking/digitization/sisim/config
SiVertexEndcapSensorSetup.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- SiVertexEndcapSensorSetup.java	25 Aug 2009 00:01:59 -0000	1.2
+++ SiVertexEndcapSensorSetup.java	25 Aug 2009 18:37:39 -0000	1.3
@@ -28,6 +28,11 @@
 {
 	
 	String subdetectorName;
+	double readoutPitchX = 0.05;
+	double readoutPitchY = 0.25;
+	double sensePitchX = 0.05;
+	double sensePitchY = 0.25;
+	double transferEfficiency = 1.0;
 
 	public SiVertexEndcapSensorSetup()
 	{}
@@ -54,6 +59,31 @@
 			throw new RuntimeException("The subdetector " + subdetectorName + " is not an instance of SiTrackerBarrel.");
 	}
 	
+	public void setReadoutPitchX(double x)
+	{
+		this.readoutPitchX = x;
+	}
+	
+	public void setReadoutPitchY(double y)
+	{
+		this.readoutPitchY = y;
+	}
+	
+	public void setSensePitchX(double x)
+	{
+		this.sensePitchX = x;
+	}
+	
+	public void setSensePitchY(double y)
+	{
+		this.sensePitchY = y;
+	}
+	
+	public void setTransferEfficiency(double t)
+	{
+		this.transferEfficiency = t;
+	}
+	
 	private void setupSensorDetectorElements(Subdetector subdet)
 	{
         for (IDetectorElement endcap : subdet.getDetectorElement().getChildren()) {
@@ -121,8 +151,8 @@
     						sensor.setBiasSurface(ChargeCarrier.HOLE, n_side);
             
     						//  Define the pixel electrodes.
-    						SiSensorElectrodes readout_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
-    						SiSensorElectrodes sense_electrodes = new SiPixels(ChargeCarrier.ELECTRON, 0.05, 0.25, sensor, electrodes_transform);
+    						SiSensorElectrodes readout_electrodes = new SiPixels(ChargeCarrier.ELECTRON, readoutPitchX, readoutPitchY, sensor, electrodes_transform);
+    						SiSensorElectrodes sense_electrodes = new SiPixels(ChargeCarrier.ELECTRON, sensePitchX, sensePitchY, sensor, electrodes_transform);
 
     						//  Tell the sensor about the electrodes.
     						sensor.setSenseElectrodes(sense_electrodes);
@@ -130,7 +160,7 @@
 
     						//  Define the transfer efficiency from sense electrodes to readout electrodes.
     						//  For pixels, we do a direct transfer of charge from sense electrodes to readout electrodes.
-    						double[][] transfer_efficiencies = {{1.0}};
+    						double[][] transfer_efficiencies = {{transferEfficiency}};
     						sensor.setTransferEfficiencies(ChargeCarrier.ELECTRON, new BasicMatrix(transfer_efficiencies));
     					}
                     }

lcsim/testResources/org/lcsim/recon/tracking/digitization/sisim/config
digiTest.xml 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- digiTest.xml	25 Aug 2009 00:01:59 -0000	1.3
+++ digiTest.xml	25 Aug 2009 18:37:39 -0000	1.4
@@ -25,18 +25,34 @@
         <driver name="TrackerBarrelSetup"
                 type="org.lcsim.recon.tracking.digitization.sisim.config.SiTrackerBarrelSensorSetup">
             <subdetectorName>SiTrackerBarrel</subdetectorName>
+            <readoutElectrodesPitch>0.050</readoutElectrodesPitch>
+            <senseElectrodesPitch>0.025</senseElectrodesPitch>
+            <transferEfficiencies>0.986 0.419</transferEfficiencies>
         </driver>
         <driver name="TrackerEndcapSetup"
                 type="org.lcsim.recon.tracking.digitization.sisim.config.SiTrackerEndcapSensorSetup">
             <subdetectorName>SiTrackerEndcap</subdetectorName>
+            <readoutPitch>0.050</readoutPitch>
+            <sensePitch>0.025</sensePitch>
+            <transferEfficiencies>0.986 0.419</transferEfficiencies>
         </driver>
         <driver name="VertexBarrelSetup"
                 type="org.lcsim.recon.tracking.digitization.sisim.config.SiVertexBarrelSensorSetup">
             <subdetectorName>SiVertexBarrel</subdetectorName>
+            <readoutPitchX>0.05</readoutPitchX>
+            <readoutPitchY>0.25</readoutPitchY>
+            <sensePitchX>0.05</sensePitchX>
+            <sensePitchY>0.25</sensePitchY>
+            <transferEfficiency>1.0</transferEfficiency>
         </driver>
         <driver name="VertexEndcapSetup"
                 type="org.lcsim.recon.tracking.digitization.sisim.config.SiVertexEndcapSensorSetup">
             <subdetectorName>SiVertexEndcap</subdetectorName>
+            <readoutPitchX>0.05</readoutPitchX>
+            <readoutPitchY>0.25<readoutPitchY>
+            <sensePitchX>0.05</sensePitchX>
+            <sensePitchY>0.25</sensePitchY>
+            <transferEfficiency>1.0</transferEfficiency>
         </driver>
         <driver name="TrackerDigi"
                 type="org.lcsim.recon.tracking.digitization.sisim.config.StripDigiSetupDriver">
@@ -55,7 +71,6 @@
             <twoClusterErr>0.2</twoClusterErr>
             <threeClusterErr>0.333333333</threeClusterErr>
             <fourClusterErr>0.5</fourClusterErr>
-
         </driver>
         <driver name="VertexDigi" 
                 type="org.lcsim.recon.tracking.digitization.sisim.config.PixelDigiSetupDriver">
CVSspam 0.2.8