Commit in projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact on MAIN
HPSTestRunTracker2014Converter.java+76-253290 -> 3291
Updating detector elements.

projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact
HPSTestRunTracker2014Converter.java 3290 -> 3291
--- projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java	2014-09-02 05:07:43 UTC (rev 3290)
+++ projects/lcsim/trunk/detector-framework/src/main/java/org/lcsim/detector/converter/compact/HPSTestRunTracker2014Converter.java	2014-09-02 05:09:36 UTC (rev 3291)
@@ -10,6 +10,7 @@
 import org.lcsim.detector.ILogicalVolume;
 import org.lcsim.detector.IPhysicalVolume;
 import org.lcsim.detector.DetectorIdentifierHelper.SystemMap;
+import org.lcsim.detector.PhysicalVolumeNavigator;
 import org.lcsim.detector.PhysicalVolumeStore;
 import org.lcsim.detector.converter.compact.HPSTestRunTracker2014JavaBuilder.GhostJavaBaseGeom;
 import org.lcsim.detector.converter.compact.HPSTestRunTracker2014JavaBuilder.JavaBaseGeom;
@@ -151,16 +152,19 @@
 				
 				int nfields = builder.getDetectorIdentifierHelper().getIdentifierDictionary().getNumberOfFields();
 				IExpandedIdentifier layerPosId = new ExpandedIdentifier(nfields);
-				
 				layerPosId.setValue(builder.getDetectorIdentifierHelper().getFieldIndex("system"), builder.getSubdetector().getSystemID());
 				layerPosId.setValue(builder.getDetectorIdentifierHelper().getFieldIndex("barrel"), builder.getDetectorIdentifierHelper().getBarrelValue());
-				int layer = HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName());
+				//use the old definition of layer number to be consistent
+				//int layer = HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName());
+				int layer = HPSTestRunTracker2014Builder.getOldGeomDefLayerFromVolumeName(geometryObject.getName());
 				layerPosId.setValue(builder.getDetectorIdentifierHelper().getFieldIndex("layer"), layer);
-				
+				if(_debug) System.out.printf("%s: layerPosId layer = %d (compare with new layer %d)\n", getClass().getSimpleName(),layer, HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName()));
 				// create the layer detector element and keep track of it
+				//IDetectorElement layerDe = builder.getLayerDetectorElement(layerPosId);
 				IDetectorElement layerDe = builder.getLayerDetectorElement(layerPosId);
 				if(layerDe==null) {
 					layerDe =  new DetectorElement(builder.getSubdetector().getName() + "_layer" + layer, builder.getSubdetector().getDetectorElement(), builder.getDetectorIdentifierHelper().pack(layerPosId));
+					//builder.addLayerDetectorElement(layerDe);
 					builder.addLayerDetectorElement(layerDe);
 				} else {
 					System.out.printf("%s: layerDE exists\n", getClass().getSimpleName());
@@ -186,25 +190,52 @@
                 
 				if(_debug) {
 					System.out.printf("%s: create SiTrackerModule with: placementname %s, modulePath %s, moduleNumber %d  \n", getClass().getSimpleName(),modulePlacementName, modulePath, moduleNumber);
+					System.out.printf("%s: print all %d physical volumes from the Store\n", getClass().getSimpleName(),PhysicalVolumeStore.getInstance().size());
 					for(IPhysicalVolume v :  PhysicalVolumeStore.getInstance()) {
-						System.out.printf("%s: %s %s %s\n", getClass().getSimpleName(),v.getName(), v.getLogicalVolume().getName(), v.getMotherLogicalVolume().getName());
+						System.out.printf("%s: %s %s %s\n", getClass().getSimpleName(), v.getName(), v.getLogicalVolume().getName(), v.getMotherLogicalVolume()!=null?v.getMotherLogicalVolume().getName():"(no mother)");
 					}
 				}
 
 				SiTrackerModule moduleDe = new SiTrackerModule(modulePlacementName, layerDe, modulePath, moduleNumber);
                 
-                //keep track of the module detector element
-                builder.addModuleDetectorElement(moduleDe);
+				//keep track of the module detector element
+				//builder.addModuleDetectorElement(moduleDe);
                 
+				
+				if(_debug) System.out.printf("%s: add module DE to existing ones  \n", getClass().getSimpleName(),modulePlacementName, modulePath, moduleNumber);
+				
+                
+				builder.addModuleDetectorElement(moduleDe);
+				
+                
+                
 
+			} else if(HPSTestRunTracker2014Builder.isSensor(geometryObject.getName())) {
+				
+				if(_debug) System.out.printf("%s: this is where I would create a detector element for the sensor %s if needed\n", getClass().getSimpleName(),geometryObject.getName());
+
 			} else if(HPSTestRunTracker2014Builder.isActiveSensor(geometryObject.getName())) {
 
-				//TODO should this be the active sensor volume????
+				// Setup the active sensor element
+				// to be consistent with old converter I also add the sensor 
+				// in the path to the element even though it's not associated with 
+				// with a element. I'm not sure why this is done.
 				
-				if(_debug) System.out.printf("%s: create the sensor detector element\n", getClass().getSimpleName());
+				if(_debug) System.out.printf("%s: create the active sensor detector element\n", getClass().getSimpleName());
+
+				if(_debug) System.out.printf("%s: find the active sensor phys vol\n", this.getClass().getSimpleName());				
 				
-				 // Sensor physical volume.
-                IPhysicalVolume sensorPhysVol = geometryObject.getPhysVolume();
+				// Find active Sensor physical volume.
+				// Keep name consistent with old converter
+				IPhysicalVolume sensorPhysVol = geometryObject.getPhysVolume();
+
+				if(sensorPhysVol==null) throw new RuntimeException("cannot find physVol for " + geometryObject.getName());
+				
+				if(_debug) System.out.printf("%s: found %s phys vol\n", this.getClass().getSimpleName(),sensorPhysVol.getName());				
+
+				if(_debug) System.out.printf("%s: find the sensor phys vol\n", this.getClass().getSimpleName());				
+	
+				// find the module detector element
                 
                 // Helpers
                 IIdentifierDictionary iddict = builder.getDetectorIdentifierHelper().getIdentifierDictionary();
@@ -212,31 +243,47 @@
                 // Find the mother: the module detector element
                 IExpandedIdentifier layerExpId = new ExpandedIdentifier(iddict.getNumberOfFields());
 				layerExpId.setValue(iddict.getFieldIndex("system"), builder.getSubdetector().getSystemID());
-                layerExpId.setValue(iddict.getFieldIndex("barrel"), 0);                            
-                int layer = HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName());
+                layerExpId.setValue(iddict.getFieldIndex("barrel"), builder.getDetectorIdentifierHelper().getBarrelValue());                            
+                //use the old definition of layer number to be consistent
+				//int layer = HPSTestRunTracker2014Builder.getLayerFromVolumeName(geometryObject.getName());
+				int layer = HPSTestRunTracker2014Builder.getOldGeomDefLayerFromVolumeName(geometryObject.getName());
 				layerExpId.setValue(iddict.getFieldIndex("layer"), layer);
+				String half = HPSTestRunTracker2014Builder.getHalfFromName(geometryObject.getName());
+				if(half.equals("")) throw new RuntimeException("No half found for " + geometryObject.getName());
+				int moduleNumber = half.equals("top") ? 0 : 1;
 				
-				// TODO Jeremy, why is the module ID not part of the expanded ID for the module DE but stored as a separate member?
-                
-				//String half = HPSTestRunTracker2014Builder.getHalfFromName(geometryObject.getName());
-				//if(half.equals("")) throw new RuntimeException("No half found for " + geometryObject.getName());
-				//int moduleNumber = half.equals("top") ? 0 : 1;
+				// The expId is the same for the layerDE and moduleDE because the tracker module object stores the 
+				// module ID in a member variable. So when searching I need to add this info
+				// TODO Can we change this and add the module ID to the identifier?
+				//IDetectorElement moduleDe = builder.getModuleDetectorElement(layerExpId);
+				//IDetectorElement moduleDe = builder.getSiTrackerModuleDetectorElement(layerExpId, moduleNumber);
 				
-				IDetectorElement moduleDe = builder.getModuleDetectorElement(layerExpId);
+				//Find the layer
+				IDetectorElement layerDe = builder.getLayerDetectorElement(layerExpId);
+
+				if(layerDe==null) throw new RuntimeException("Cannot find layer DE");
 				
+				//Find the module
+				IDetectorElement moduleDe = null;
+				for(IDetectorElement e : layerDe.getChildren()) {
+					if(e instanceof SiTrackerModule) {
+						SiTrackerModule m = (SiTrackerModule)e;
+						if(m.getModuleId()==moduleNumber) {
+							moduleDe = m;
+						}
+					}
+				}
+				
+				
 				if(moduleDe==null) throw new RuntimeException("Cannot find module DE for " + geometryObject.getName());
 				
-				// Find the layer element
-				IDetectorElement layerDe = moduleDe.getParent();
-				
 				// Setup SiSensor's identifier.
 				IExpandedIdentifier expId = new ExpandedIdentifier(iddict.getNumberOfFields());
 			    expId.setValue(iddict.getFieldIndex("system"), builder.getSubdetector().getSystemID());
                 expId.setValue(iddict.getFieldIndex("barrel"), 0);                            
                 expId.setValue(iddict.getFieldIndex("layer"), builder.getDetectorIdentifierHelper().getValue(layerDe.getIdentifier(), "layer"));
                 expId.setValue(iddict.getFieldIndex("module"), ((SiTrackerModule) moduleDe).getModuleId());
-                
-                // TODO: what does this number mean? It's basically just a counter in the old compact
+                // The sensorNumber is always 0 in the old geometry. Keep it that way.
                 int sensorNumber = 0;
                 expId.setValue(iddict.getFieldIndex("sensor"), sensorNumber);
 
@@ -245,10 +292,14 @@
 
                 // Sensor paths.
                String modulePath = moduleDe.getGeometry().getPathString();
-               IPhysicalVolume componentPhysVol = geometryObject.getMother().getPhysVolume();
+               IPhysicalVolume componentPhysVol = geometryObject.getPhysMother().getPhysVolume();
                String sensorPath = modulePath.toString() + "/" + componentPhysVol.getName() + "/" + sensorPhysVol.getName();
                String sensorName = moduleDe.getName() + "_sensor" + sensorNumber;
-                
+
+               if(_debug) System.out.printf("%s: create HpsSiSensor with sensorNumber %d name %s moduleDe %s sensorPath %s sensor Id %d \n", getClass().getSimpleName(), 
+            		   sensorNumber, sensorName, moduleDe.getName(), sensorPath, sensorNumber);
+
+               
                 // Create the sensor.
                 HpsSiSensor sensor = new HpsSiSensor(sensorNumber, sensorName, moduleDe, sensorPath, sensorId);
                 
SVNspam 0.1


Use REPLY-ALL to reply to list

To unsubscribe from the LCDET-SVN list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCDET-SVN&A=1