| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

Helpers.py

Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 ''' Several helper classes to assist in configuring GenTools.  They
00003 assume geometry has already been setup.  The helper classes that
00004 produce tools need to define a "tools()" method that returns an
00005 ordered list of what tools it created.  Users of these helper classes
00006 should use them like:
00007 
00008 
00009  
00010 '''
00011 
00012 import GaudiKernel.SystemOfUnits as units
00013 from GenTools.GenToolsConf import GtHepEvtGenTool, GtPositionerTool
00014 from GenTools.GenToolsConf import GtGunGenTool, GtDiffuserBallTool
00015 from GenTools.GenToolsConf import GtTimeratorTool, GtTransformTool
00016 import LED
00017 
00018 class Gun:
00019     '''
00020     Configure a particle gun based kinematics
00021     '''
00022 
00023     def __init__(self,
00024                  name = "gun",
00025                  volume = '/dd/Structure/AD/far-oil1',
00026                  gun = None,
00027                  positioner = None,
00028                  timerator = None,
00029                  transformer = None
00030                  ):
00031 
00032         '''Construct the configuration.  Coustom configured tools can
00033         be passed in or customization can be done after construction
00034         using the data members:
00035 
00036         .gun
00037         .positioner
00038         .timerator
00039         .transformer
00040         
00041         They can be accessed for additional, direct configuration.
00042 
00043         If the Volume property for the positioner and transformer is
00044         not yet set, it will be set to the value of "volume"
00045         '''
00046 
00047         if gun == None:
00048             gun = GtGunGenTool(name,
00049                                ParticlesPerEvent = 1,
00050                                ParticleName = 'e+',
00051                                Momentum = 3*units.MeV,
00052                                MomentumMode = 'Fixed',
00053                                DirectionMode = 'Fixed',
00054                                Direction = [1,0,0])
00055         if positioner == None:
00056             positioner = GtPositionerTool(name+"Positioner",
00057                                           Mode = 'Fixed',
00058                                           Position = [0,0,0])
00059         if timerator == None:
00060             timerator = GtTimeratorTool(name+"Timerator",
00061                                         LifeTime = 1*units.second)
00062         if transformer == None:
00063             transformer = GtTransformTool(name+"Transformer")
00064 
00065         try: 
00066             v = positioner.Volume
00067         except AttributeError:
00068             positioner.Volume = volume
00069             
00070         try:
00071             v = transformer.Volume
00072         except AttributeError:
00073             transformer.Volume = volume
00074 
00075         self.gun = gun
00076         self.positioner = positioner
00077         self.timerator = timerator
00078         self.transformer = transformer
00079         return
00080 
00081     def setVolume(self,volumename):
00082         self.positioner.Volume = volumename
00083         self.transformer.Volume = volumename
00084         return
00085 
00086     def tools(self):
00087         return [self.gun,self.positioner,self.timerator,self.transformer]
00088 
00089     pass # end Gun
00090 
00091 
00092 class DiffuserBall:
00093     '''
00094     Configure a calibration diffuser ball
00095     '''
00096 
00097     def __init__(self,
00098                  name = "deployedLed_ad1",
00099                  volume = '/dd/Structure/AD/db-oil1',
00100                  ball = None,
00101                  positioner = None,
00102                  timerator = None,
00103                  transformer = None,
00104                  useGeometry = True
00105                  ):
00106 
00107         '''Construct the configuration.  Custom configured tools can
00108         be passed in or customization can be done after construction
00109         using the data members:
00110 
00111         .ball
00112         .positioner
00113         .timerator
00114         .transformer
00115         
00116         They can be accessed for additional, direct configuration.
00117 
00118         If the Volume property for the positioner and transformer is
00119         not yet set, it will be set to the value of "volume"
00120         '''
00121 
00122         if ball == None:
00123             ball = GtDiffuserBallTool(name+"ball",
00124                                       PhotonsPerEvent = 3500,
00125                                       WavelengthMode = 'Defined',
00126                                       Wavelength = 430.0*units.nanometer,
00127                                       WavelengthSpread = 5.0*units.nanometer,
00128                                       PdfWave = LED.PdfWave(),
00129                                       PdfEdgesWave = LED.PdfEdgesWave(),
00130                                       TimingMode = 'Defined',
00131                                       PdfTime = LED.PdfTime(),
00132                                       PdfEdgesTime = LED.PdfEdgesTime(),
00133                                       Radius = 0.9525*units.cm)
00134         if positioner == None:
00135             positioner = GtPositionerTool(name+"Positioner",
00136                                           Mode = 'Relative',
00137                                           Position = [0,0,0])
00138         if timerator == None:
00139             timerator = GtTimeratorTool(name+"Timerator",
00140                                         Mode = 'Relative',
00141                                         Distribution = 'Uniform',
00142                                         LifeTime = 1.0/(500.0*units.hertz))
00143         if transformer == None:
00144             transformer = GtTransformTool(name+"Transformer")
00145         self.geometryTool = None
00146         if useGeometry:
00147             from DetHelpers.DetHelpersConf import AutoPositionerTool
00148             self.geometryTool =  AutoPositionerTool("diffuserBallGeomPos",
00149                               PhysicalVolume = "pvDiffuserBall",
00150                               LogicalVolume = "/dd/Geometry/CalibrationSources/lvLedSourceAssy",
00151                               CoordinateDetElem = "/dd/Structure/AD/db-oil1",
00152                               Position = [0., 0., 0.],
00153                               Element = "db-ad1-deployedLed",
00154                               ElementPath = "/dd/Structure/CalibrationSources")
00155 
00156         self.ball = ball
00157         self.positioner = positioner
00158         self.timerator = timerator
00159         self.transformer = transformer
00160         if useGeometry:
00161             self.ball.GeomPosTool = self.geometryTool
00162         else:
00163             self.ball.GeomPosTool = ""
00164         self.setVolume( volume )
00165         return
00166 
00167     def setVolume(self,volumename):
00168         self.positioner.Volume = volumename
00169         self.transformer.Volume = volumename
00170         if self.geometryTool != None:
00171             self.geometryTool.CoordinateDetElem = volumename
00172         return
00173 
00174     def setPosition(self, position):
00175         self.positioner.Position = position
00176         if self.geometryTool != None:
00177             self.geometryTool.Position = position
00178 
00179     def tools(self):
00180         return [self.ball,self.positioner,self.timerator,self.transformer]
00181 
00182     pass # end DiffuserBall
00183 
00184 
00185 class HepEVT:
00186     '''
00187     Configure kinematics to use a HepEVT source.
00188     '''
00189 
00190     def __init__(self,
00191                  hepEvtDataSource,
00192                  name = None,
00193                  positioner = None,
00194                  timerator = None,
00195                  transformer = None
00196                  ):
00197         ''' Configure for a HepEVT data source.  First argument is the
00198         data source and must be specified.  If it is an executable
00199         source the last character in the string must be a pipe ('|')
00200         and if the executable is not specified with an absolute path
00201         it will be looked up using your PATH environment variable.
00202         You may specify the "positioner", "timerator", and "transformer" tools or later
00203         configure them through the members of these same names.
00204         '''
00205 
00206         exe = hepEvtDataSource.split(' ')[0]
00207         if name == None:
00208             # Automatically set name based on executable
00209             exeName = exe[exe.rfind('/')+1:]
00210             dot = exeName.rfind('.')
00211             basename = exeName
00212             if dot > 0: basename = exeName[:dot]
00213             sanitized = basename.replace('.','_')
00214             name = sanitized
00215 
00216         # If we got an executable and it is relative, look for it in the path
00217         if hepEvtDataSource[-1] == '|' and hepEvtDataSource[0] != '/':
00218             import os, os.path
00219             path = os.getenv('PATH')
00220             for p in path:
00221                 if (os.path.isfile(path+'/'+exe)):
00222                     hepEvtDataSource = path+'/'+exe + ' ' + ' '.join(hepEvtDataSource.split(' ')[1:])
00223                     break
00224                 continue
00225             pass
00226         
00227         self.hepevt = GtHepEvtGenTool(name+'HepEvt',
00228                                       HepEvtDataSource = hepEvtDataSource)
00229         if positioner == None:
00230             positioner = GtPositionerTool(name+"Positioner")
00231         if timerator == None:
00232             timerator = GtTimeratorTool(name+"Timerator",
00233                                         LifeTime = 1*units.second)
00234         if transformer == None:
00235             transformer = GtTransformTool(name+"Transformer")
00236 
00237 
00238         self.positioner = positioner
00239         
00240         self.timerator = timerator
00241         
00242         self.transformer = transformer
00243 
00244         return
00245 
00246     def tools(self):
00247         return [self.hepevt,self.positioner,self.timerator,self.transformer]
00248 
00249     pass # End HepEVT
00250 
00251 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:55:36 2011 for GenTools by doxygen 1.4.7