00001
00002
00003
00004
00005
00006
00007 import GaudiKernel.SystemOfUnits as units
00008
00009
00010 from GaudiPython.GaudiAlgs import GaudiAlgo
00011 from GaudiPython import SUCCESS, FAILURE
00012
00013 class PositionerAlg(GaudiAlgo):
00014 """An algorithm that places a volume in the detector geometry"""
00015 def __init__(self,name):
00016 GaudiAlgo.__init__(self,name)
00017 print "Making PositionerAlg",name
00018 self.posToolConf = None
00019
00020 def initialize(self):
00021 status = GaudiAlgo.initialize(self)
00022 print "getFullName = ",self.posToolConf.getFullName()
00023 self.posTool = self.tool('IPositionerTool',
00024 self.posToolConf.getFullName())
00025
00026 status = self.posTool.placeVolume()
00027 return status
00028
00029 def execute(self):
00030
00031 de_name = "/dd/Structure/AD/db-gds1"
00032 dbSupport = self.getDet(de_name)
00033 dbSupportGeo = dbSupport.geometry()
00034 nPVolumes = dbSupportGeo.lvolume().pvolumes().size()
00035 print "pvolumes: ", nPVolumes
00036 for pvol in dbSupportGeo.lvolume().pvolumes():
00037 print pvol.name(), pvol
00038 print pvol.lvolumeName(), pvol.name()
00039 print pvol.lvolume().name(), pvol.name()
00040 print "\n"
00041 for cde in dbSupport.childIDetectorElements():
00042 print cde.name()
00043 print cde.geometry().lvolume().name()
00044 print "\n"
00045 return SUCCESS
00046
00047 diffBallPositioner = None
00048 myAlgName = "posAlg"
00049
00050 def configure():
00051
00052 from DetHelpers.DetHelpersConf import AutoPositionerTool
00053 global diffBallPositioner, myAlgName
00054 diffBallPositioner = AutoPositionerTool( myAlgName+".diffBallPositioner" )
00055 diffBallPositioner.PhysicalVolume = "pvDiffuserBall"
00056 diffBallPositioner.LogicalVolume = "/dd/Geometry/CalibrationSources/lvLedSourceAssy"
00057 diffBallPositioner.CoordinateDetElem = "/dd/Structure/AD/db-oil1"
00058 diffBallPositioner.Position = [0., 0., 0.]
00059
00060 diffBallPositioner.Rotation = [1., 0., 0.,
00061 0., 1., 0.,
00062 0., 0., 1.]
00063 diffBallPositioner.Element = "db-diffuserBallCenter1"
00064 diffBallPositioner.ElementPath = "/dd/Structure/CalibrationSources"
00065 return
00066
00067 def run(app):
00068
00069 global diffBallPositioner, myAlgName
00070 posAlg = PositionerAlg( myAlgName )
00071 posAlg.posToolConf = diffBallPositioner
00072 app.addAlgorithm(posAlg)