Commit in GeomConverter/sandbox on MAIN
DetectorId.java+481added 1.1
JM: sandbox

GeomConverter/sandbox
DetectorId.java added at 1.1
diff -N DetectorId.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ DetectorId.java	24 Aug 2007 23:35:23 -0000	1.1
@@ -0,0 +1,481 @@
+package org.lcsim.detector;
+
+import org.lcsim.detector.identifier.ExpandedIdentifier;
+import org.lcsim.detector.identifier.IExpandedIdentifier;
+import org.lcsim.detector.identifier.IIdentifier;
+import org.lcsim.detector.identifier.IIdentifierDictionary;
+import org.lcsim.detector.identifier.IdentifierHelper;
+import org.lcsim.detector.identifier.IIdentifierDictionary.FieldNotFoundException;
+import org.lcsim.detector.identifier.IIdentifierDictionary.InvalidIndexException;
+
+public class DetectorId
+extends IdentifierHelper
+{	
+	// Index of system field in the dictionary.
+	int systemIndex=-1;
+	
+	// Index of barrel field in the dictionary.
+	int barrelIndex=-1;
+	
+    // Barrel or endcap flag.
+	public final static int	BARREL=0;
+	public final static int ENDCAP_POSITIVE=1;
+	public final static int	ENDCAP_NEGATIVE=-1;
+	
+	// Subsystem id values.
+	// FIXME: These need to be settable if reading from a compact description.
+	public final static int	UNKNOWN=0;
+	public final static int	VTX=1;
+	public final static int SIT=2;
+	public final static int	TPC=3;
+	public final static int	ECAL=4;
+	public final static int	HCAL=5;
+	public final static int	MUON=6;
+	public final static int	FORWARD=7;
+	public final static int	LUMI=8;	
+	
+	IIdentifier barrelId;
+	IIdentifier endcapPositiveId;
+	IIdentifier endcapNegativeId;
+	
+	IIdentifier vtxId;
+	IIdentifier vtxBarrelId;
+	IIdentifier vtxEndcapPositiveId;
+	IIdentifier vtxEndcapNegativeId;
+	
+	IIdentifier sitId;
+	IIdentifier sitBarrelId;
+	IIdentifier sitEndcapPositiveId;
+	IIdentifier sitEndcapNegativeId;
+	 
+	IIdentifier tpcId;
+	
+	IIdentifier ecalId;
+	IIdentifier ecalBarrelId;
+	IIdentifier ecalEndcapPositiveId;
+	IIdentifier ecalEndcapNegativeId;
+	
+	IIdentifier hcalId;
+	IIdentifier hcalBarrelId;
+	IIdentifier hcalEndcapPositiveId;
+	IIdentifier hcalEndcapNegativeId;
+	
+	IIdentifier muonId;
+	IIdentifier muonBarrelId;
+	IIdentifier muonEndcapPositiveId;
+	IIdentifier muonEndcapNegativeId;
+	
+	IIdentifier forwardId;
+	
+	IIdentifier lumiId;
+		
+	DetectorId(IIdentifierDictionary dict) throws FieldNotFoundException, InvalidIndexException
+	{
+		super(dict);
+		
+		systemIndex = dict.getFieldIndex("system");
+		barrelIndex = dict.getFieldIndex("barrel");
+		
+		barrelId = makeBarrelId(BARREL);
+		endcapPositiveId = makeBarrelId(ENDCAP_POSITIVE);
+		endcapNegativeId = makeBarrelId(ENDCAP_NEGATIVE);
+		
+		vtxId = makeSubsysId(VTX);
+		sitId = makeSubsysId(SIT);
+		tpcId = makeSubsysId(TPC);
+		ecalId = makeSubsysId(ECAL);
+		hcalId = makeSubsysId(HCAL);
+		muonId = makeSubsysId(MUON);
+		forwardId = makeSubsysId(FORWARD);
+		lumiId = makeSubsysId(LUMI);
+	}	
+		
+	private IIdentifier makeSubsysId(int system) throws InvalidIndexException
+	{		
+		IExpandedIdentifier expid = 
+			new ExpandedIdentifier(getIdentifierDictionary().getNumberOfFields());
+		expid.setValue(systemIndex, system);
+		IIdentifier id = pack(expid);
+		return id;
+	}
+	
+	private IIdentifier makeSubsysId(int system, int barrel) throws InvalidIndexException
+	{		
+		IExpandedIdentifier expid = 
+			new ExpandedIdentifier(getIdentifierDictionary().getNumberOfFields());
+		expid.setValue(systemIndex, system);
+		expid.setValue(barrelIndex, barrel);
+		IIdentifier id = pack(expid);
+		return id;
+	}
+	
+	
+	private IIdentifier makeBarrelId(int barrel) throws InvalidIndexException
+	{		
+		IExpandedIdentifier expid = 
+			new ExpandedIdentifier(getIdentifierDictionary().getNumberOfFields());
+		expid.setValue(barrelIndex, barrel);
+		IIdentifier id = pack(expid);
+		return id;
+	}
+	
+			
+	private boolean compareSystem(IIdentifier id, int system)
+	{
+		try {
+			return unpack(id).getValue(systemIndex) == system;
+		}
+		catch (InvalidIndexException x)
+		{
+			throw new RuntimeException(x);
+		}
+	}	
+    
+    public IIdentifier getBarrelId()
+    {
+    	return barrelId;
+    }
+    
+	public IIdentifier getEndcapPositiveId()
+	{
+		return endcapPositiveId;
+	}
+	
+    public IIdentifier getEndcapNegativeId()
+    {
+    	return endcapNegativeId;
+    }
+    
+    public IIdentifier getVtxId()
+    {
+    	return vtxId;
+    }
+    
+    public IIdentifier getVtxBarrelId()
+    {
+    	return vtxBarrelId;
+    }
+    
+    public IIdentifier getVtxEndcapPositiveId()
+    {
+    	return vtxEndcapPositiveId;
+    }
+    
+    public IIdentifier getVtxEndcapNegativeId()
+    {
+    	return vtxEndcapNegativeId;
+    }
+    
+    public IIdentifier getSitId()
+    {
+    	return sitId;
+    }
+    
+    public IIdentifier getSitBarrelId()
+    {
+    	return sitBarrelId;
+    }
+    
+    public IIdentifier getSitEndcapPositiveId()
+    {
+    	return sitEndcapPositiveId;
+    }
+    
+    public IIdentifier getSitEndcapNegativeId()
+    {
+    	return sitEndcapNegativeId;
+    }    
+    
+    public IIdentifier getTpcId()
+    {
+    	return tpcId;
+    }
+    
+    public IIdentifier getEcalId()
+    {
+    	return ecalId;
+    }
+    
+    public IIdentifier getEcalBarrelId()
+    {
+    	return ecalBarrelId;
+    }
+    
+    public IIdentifier getEcalEndcapNegativeId()
+    {
+    	return ecalEndcapNegativeId;
+    }
+    
+    public IIdentifier getEcalEndcapPositiveId()
+    {
+    	return ecalEndcapPositiveId;
+    }
+    
+    public IIdentifier getHcalId()
+    {
+    	return hcalId;
+    }
+    
+    public IIdentifier getHcalBarrelId()
+    {
+    	return hcalBarrelId;
+    }
+    
+    public IIdentifier getHcalEndcapNegativeId()
+    {
+    	return hcalEndcapNegativeId;
+    }
+    
+    public IIdentifier getHcalEndcapPositiveId()
+    {
+    	return hcalEndcapPositiveId;
+    }
+       
+    public IIdentifier getMuonId()
+    {
+    	return muonId;
+    }
+    
+    public IIdentifier getMuonBarrelId()
+    {
+    	return muonBarrelId;
+    }
+    
+    public IIdentifier getMuonEndcapNegativeId()
+    {
+    	return muonEndcapNegativeId;
+    }
+    
+    public IIdentifier getMuonEndcapPositiveId()
+    {
+    	return muonEndcapPositiveId;
+    }
+       
+    public IIdentifier getFowardId()
+    {
+    	return forwardId;
+    }
+    
+    public IIdentifier getLumiId()
+    {
+    	return lumiId;
+    }
+    
+    public boolean isBarrel(IIdentifier i)
+    {
+    	try {
+    		return unpack(i).getValue(barrelIndex) == BARREL;
+    	}
+    	catch (InvalidIndexException x)
+    	{
+    		throw new RuntimeException(x);
+    	}
+    }
+    
+    public boolean isEndcap(IIdentifier i)
+    {
+    	return isEndcapPositive(i) || isEndcapNegative(i);
+    }
+    
+    public boolean isEndcapPositive(IIdentifier i)
+    {
+    	try {
+    		return unpack(i).getValue(barrelIndex) == ENDCAP_POSITIVE;
+    	}
+    	catch (InvalidIndexException x)
+    	{
+    		throw new RuntimeException(x);
+    	}
+    }
+    
+    public boolean isEndcapNegative(IIdentifier i)
+    {
+    	try {
+    		return unpack(i).getValue(barrelIndex) == ENDCAP_NEGATIVE;
+    	}
+    	catch (InvalidIndexException x)
+    	{
+    		throw new RuntimeException(x);
+    	}
+    }
+    
+    public boolean isTracker(IIdentifier i)
+    {
+    	return isVtx(i) || isTpc(i) || isSit(i);
+    }
+    
+    public boolean isTrackerBarrel(IIdentifier i)
+    {
+    	return isTracker(i) && isBarrel(i);
+    }
+    
+    public boolean isTrackerEndcapPositive(IIdentifier i)
+    {
+    	return isTracker(i) && isEndcapPositive(i);
+    }
+    
+    public boolean isTrackerEndcapNegative(IIdentifier i)
+    {
+    	return isTracker(i) && isEndcapNegative(i);
+    }
+    
+    public boolean isCalorimeter(IIdentifier i)
+    {
+    	return isEcal(i) || isHcal(i) || isMuon(i) || isForward(i) || isLumi(i);
+    }
+    
+    public boolean isCalorimeterBarrel(IIdentifier i)
+    {
+    	return isCalorimeter(i) && isBarrel(i);
+    }
+    
+    public boolean isCalorimeterEndcapPositive(IIdentifier i)
+    {
+    	return isCalorimeter(i) && isEndcapPositive(i);
+    }
+    
+    public boolean isCalorimeterEndcapNegative(IIdentifier i)
+    {
+    	return isCalorimeter(i) && isEndcapNegative(i);
+    }    
+    
+    public boolean isVtx(IIdentifier i)
+    {
+    	return compareSystem(i,VTX);
+    }
+    
+    public boolean isVtxBarrel(IIdentifier i)
+    {
+    	return isVtx(i) && isBarrel(i);
+    }
+        
+    public boolean isVtxEndcap(IIdentifier i)
+    {
+    	return compareSystem(i,VTX) && isEndcap(i);
+    }
+    
+    public boolean isVtxEndcapPositive(IIdentifier i)
+    {
+    	return isVtx(i) && isEndcapPositive(i);
+    }
+    
+    public boolean isVtxEndcapNegative(IIdentifier i)
+    {
+    	return isVtx(i) && isEndcapNegative(i);
+    }
+
+    public boolean isSit(IIdentifier i)
+    {
+    	return compareSystem(i,SIT);
+    }
+    
+    public boolean isSitBarrel(IIdentifier i)
+    {
+    	return isSit(i) && isBarrel(i);
+    }
+        
+    public boolean isSitEndcap(IIdentifier i)
+    {
+    	return isSit(i) && isEndcap(i);
+    }
+    
+    public boolean isSitEndcapPositive(IIdentifier i)
+    {
+    	return isSit(i) && isEndcapPositive(i);
+    }
+    
+    public boolean isSitEndcapNegative(IIdentifier i)
+    {
+    	return isSit(i) && isEndcapNegative(i);
+    }    
+    
+    public boolean isTpc(IIdentifier i)
+    {
+    	return compareSystem(i,TPC);
+    }
+    
+    public boolean isEcal(IIdentifier i)
+    {
+    	return compareSystem(i,ECAL);
+    }
+    
+    public boolean isEcalBarrel(IIdentifier i)
+    {
+    	return isEcal(i) && isBarrel(i);
+    }
+        
+    public boolean isEcalEndcap(IIdentifier i)
+    {
+    	return compareSystem(i,ECAL) && isEndcap(i);
+    }
+    
+    public boolean isEcalEndcapPositive(IIdentifier i)
+    {
+    	return isEcal(i) && isEndcapPositive(i);
+    }
+    
+    public boolean isEcalEndcapNegative(IIdentifier i)
+    {
+    	return isEcal(i) && isEndcapNegative(i);
+    }        
+    
+    public boolean isHcal(IIdentifier i)
+    {
+    	return compareSystem(i,HCAL);
+    }
+    
+    public boolean isHcalBarrel(IIdentifier i)
+    {
+    	return isHcal(i) && isBarrel(i);
+    }
+        
+    public boolean isHcalEndcap(IIdentifier i)
+    {
+    	return isHcal(i) && isEndcap(i);
+    }
+    
+    public boolean isHcalEndcapPositive(IIdentifier i)
+    {
+    	return isHcal(i) && isEndcapPositive(i);
+    }
+    
+    public boolean isHcalEndcapNegative(IIdentifier i)
+    {
+    	return isHcal(i) && isEndcapNegative(i);
+    }            
+    
+    public boolean isMuon(IIdentifier i)
+    {
+    	return compareSystem(i,MUON);
+    }
+    
+    public boolean isMuonBarrel(IIdentifier i)
+    {
+    	return isMuon(i) && isBarrel(i);
+    }   
+        
+    public boolean isMuonEndcap(IIdentifier i)
+    {
+    	return isMuon(i) && isEndcap(i);
+    }
+    
+    public boolean isMuonEndcapPositive(IIdentifier i)
+    {
+    	return isMuon(i) && isEndcapPositive(i);
+    }
+    
+    public boolean isMuonEndcapNegative(IIdentifier i)
+    {
+    	return isMuon(i) && isMuonEndcapNegative(i);
+    }
+    
+    public boolean isForward(IIdentifier i)
+    {
+    	return compareSystem(i,FORWARD);
+    }
+    
+    public boolean isLumi(IIdentifier i)
+    {
+    	return compareSystem(i,LUMI);
+    }    
+}
\ No newline at end of file
CVSspam 0.2.8