GeomConverter/sandbox
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