From 4e475c54b4993d1d67c51d7b2930a947fa5bb57f Mon Sep 17 00:00:00 2001 From: Marko Petric <marko.petric@cern.ch> Date: Thu, 12 Sep 2019 13:32:33 +0200 Subject: [PATCH] flake8 DDCore --- DDCore/python/dd4hep.py | 4 +- DDCore/python/dd4hepFactories.py | 24 +- DDCore/python/dd4hep_base.py | 19 +- DDCore/python/lcdd.py | 487 ------------------------------- 4 files changed, 23 insertions(+), 511 deletions(-) delete mode 100644 DDCore/python/lcdd.py diff --git a/DDCore/python/dd4hep.py b/DDCore/python/dd4hep.py index 1177b14ca..f02a172c4 100644 --- a/DDCore/python/dd4hep.py +++ b/DDCore/python/dd4hep.py @@ -9,5 +9,5 @@ # # ========================================================================== from __future__ import absolute_import, unicode_literals -from dd4hep_base import * -import_units(__import__(__name__)) +from dd4hep_base import * # noqa: F403 +import_units(__import__(__name__)) # noqa: F405 diff --git a/DDCore/python/dd4hepFactories.py b/DDCore/python/dd4hepFactories.py index 2cb18d098..13959f5ce 100755 --- a/DDCore/python/dd4hepFactories.py +++ b/DDCore/python/dd4hepFactories.py @@ -15,6 +15,7 @@ import os import sys import optparse import logging +import errno from ddsix.moves import input from io import open @@ -45,11 +46,11 @@ class ComponentDumper: file = open(fname, "r") lines = file.readlines() dirname = os.path.dirname(fname) - for l in lines: - l = l[:-1] - if len(l) > 2 and (l[0:2] == '//' or l[0] == '#'): + for line in lines: + line = line[:-1] + if len(line) > 2 and (line[0:2] == '//' or line[0] == '#'): continue - lib, comp = l.split(':') + lib, comp = line.split(':') self.all_components.append([dirname + os.sep + lib, comp]) file.close() @@ -102,12 +103,12 @@ class ComponentDumper: ret = 'D' if interactive: try: - ret = input("<CR> to DUMP the list of components \n" + - "<Q> to QUIT \n" + - "<D> to DUMP the list of components \n" + - "<S> to SKIP this particular library\n" + - "<L> to no longer LOAD libraries \n") - except Exception as X: + ret = input("%s%s%s%s" % ("<CR> to DUMP the list of components \n", + "<Q> to QUIT \n", + "<D> to DUMP the list of components \n", + "<S> to SKIP this particular library\n", + "<L> to no longer LOAD libraries \n")) + except Exception: ret = 'D' if not len(ret): ret = 'D' @@ -155,7 +156,6 @@ if not (opts.check or opts.dump or opts.load): sys.exit(0) try: - import ROOT from ROOT import gROOT from ROOT import gSystem gROOT.SetBatch(1) @@ -164,7 +164,7 @@ except ImportError as X: sys.exit(errno.ENOENT) try: - import dd4hep + import dd4hep # noqa: F401 except ImportError as X: logger.error('dd4hep python interface not accessible: %s', str(X)) sys.exit(errno.ENOENT) diff --git a/DDCore/python/dd4hep_base.py b/DDCore/python/dd4hep_base.py index 33bc4b5e1..f633524c7 100644 --- a/DDCore/python/dd4hep_base.py +++ b/DDCore/python/dd4hep_base.py @@ -20,7 +20,6 @@ logger = logging.getLogger(__name__) def compileAClick(dictionary, g4=True): from ROOT import gInterpreter, gSystem - import sys import os.path dd4hep = os.environ['DD4hepINSTALL'] inc = ' -I' + os.environ['ROOTSYS'] + '/include -I' + dd4hep + '/include ' @@ -45,7 +44,6 @@ def loaddd4hep(): import sys # Add ROOT to the python path in case it is not yet there.... sys.path.append(os.environ['ROOTSYS'] + os.sep + 'lib') - import ROOT from ROOT import gSystem import platform @@ -258,7 +256,7 @@ import_detail() # Calling import_units makes all the units local to the dd4hep module. # try: - ###from ROOT import TGeoUnit as TGeoUnits + # from ROOT import TGeoUnit as TGeoUnits def import_units(ns=None): def import_unit(ns, nam): setattr(ns, nam, getattr(core, nam)) @@ -274,12 +272,13 @@ try: # Angle 'radian', 'milliradian', 'degree', 'steradian', 'rad', 'mrad', 'sr', 'deg', # Time & frequency - 'nanosecond', 'second', 'millisecond', 'microsecond', 'picosecond', 'hertz', 'kilohertz', 'megahertz', 'ns', 's', 'ms', + 'nanosecond', 'second', 'millisecond', 'microsecond', 'picosecond', 'hertz', + 'kilohertz', 'megahertz', 'ns', 's', 'ms', # Electric charge 'eplus', 'e_SI', 'coulomb', # Energy - 'electronvolt', 'kiloelectronvolt', 'megaelectronvolt', 'gigaelectronvolt', 'teraelectronvolt', 'petaelectronvolt', - 'joule', 'eV', 'keV', 'MeV', 'GeV', 'TeV', 'PeV', + 'electronvolt', 'kiloelectronvolt', 'megaelectronvolt', 'gigaelectronvolt', 'teraelectronvolt', + 'petaelectronvolt', 'joule', 'eV', 'keV', 'MeV', 'GeV', 'TeV', 'PeV', # Mass 'milligram', 'gram', 'kilogram', 'mg', 'g', 'kg', # Power, Force, Pressure @@ -296,8 +295,8 @@ try: 'candela', 'lumen', 'lux', # Misc 'perCent', 'perThousand', 'perMillion', 'pi', 'twopi', 'halfpi', 'pi2', - 'Avogadro', 'c_light', 'c_squared', 'h_Planck', 'hbar_Planck', 'hbarc', 'hbarc_squared', 'electron_charge', 'e_squared', - 'electron_mass_c2', 'proton_mass_c2', 'neutron_mass_c2', 'amu_c2', 'amu', 'mu0', 'epsilon0', + 'Avogadro', 'c_light', 'c_squared', 'h_Planck', 'hbar_Planck', 'hbarc', 'hbarc_squared', 'electron_charge', + 'e_squared', 'electron_mass_c2', 'proton_mass_c2', 'neutron_mass_c2', 'amu_c2', 'amu', 'mu0', 'epsilon0', # 'elm_coupling', 'fine_structure_const', 'classic_electr_radius', 'electron_Compton_length', 'Bohr_radius', 'alpha_rcl2', 'twopi_mc2_rcl2', 'k_Boltzmann', 'STP_Temperature', 'STP_Pressure', @@ -310,8 +309,8 @@ try: if u[0] != '_': import_unit(ns, u) return len(items) -except: - logger.warning('No units can be imported.') +except Exception as e: + logger.warning('No units can be imported. %s' % str(e)) def import_units(ns=None): return 0 diff --git a/DDCore/python/lcdd.py b/DDCore/python/lcdd.py deleted file mode 100644 index 5e4f8ba31..000000000 --- a/DDCore/python/lcdd.py +++ /dev/null @@ -1,487 +0,0 @@ -# ========================================================================== -# AIDA Detector description implementation -# -------------------------------------------------------------------------- -# Copyright (C) Organisation europeenne pour la Recherche nucleaire (CERN) -# All rights reserved. -# -# For the licensing terms see $DD4hepINSTALL/LICENSE. -# For the list of contributors see $DD4hepINSTALL/doc/CREDITS. -# -# ========================================================================== -from __future__ import absolute_import, unicode_literals - -import xml.etree.ElementTree as xml -from math import cos, sin, pi, tan -from os import path, listdir -from functools import partial -import g4units -import math -import logging -from ddsix.moves import range -from io import open -from ROOT import SetOwnership, dd4hep, TGeoMixture, TGeoMedium, gGeoManager, TNamed - -logger = logging.getLogger(__name__) - -Detector = dd4hep.Geometry.Detector -Constant = dd4hep.Geometry.Constant -Material = dd4hep.Geometry.Material -VisAttr = dd4hep.Geometry.VisAttr -AlignmentEntry = dd4hep.Geometry.AlignmentEntry -Limit = dd4hep.Geometry.Limit -DetElement = dd4hep.Geometry.DetElement -Box = dd4hep.Geometry.Box -Tube = dd4hep.Geometry.Tube -Trapezoid = dd4hep.Geometry.Trapezoid -Volume = dd4hep.Geometry.Volume -PlacedVolume = dd4hep.Geometry.PlacedVolume -Position = dd4hep.Geometry.Position -Rotation = dd4hep.Geometry.Rotation -Handle = dd4hep.Geometry.Handle -Readout = dd4hep.Geometry.Readout -GridXYZ = dd4hep.Geometry.GridXYZ -GlobalGridXY = dd4hep.Geometry.GlobalGridXY -CartesianGridXY = dd4hep.Geometry.CartesianGridXY -NoSegmentation = dd4hep.Geometry.NoSegmentation -GridPhiEta = dd4hep.Geometry.GridPhiEta -GridRPhiEta = dd4hep.Geometry.GridRPhiEta -ProjectiveCylinder = dd4hep.Geometry.ProjectiveCylinder -NonProjectiveCylinder = dd4hep.Geometry.NonProjectiveCylinder -ProjectiveZPlane = dd4hep.Geometry.ProjectiveZPlane -IDDescriptor = dd4hep.Geometry.IDDescriptor - -_toDictionary = dd4hep.Geometry._toDictionary - -unique_mat_id = 0x7FFEFEED - -current_xmlfile = None - -constants = {} -constants.update(g4units.__dict__) -constants.update(math.__dict__) -drivers = {} -drivers.update(math.__dict__) -drivers.update(dd4hep.Geometry.__dict__) - - -# ---Enhancing the Element class with dedicated accessors-------------------------- -def _getInt(self, attrib): return int(eval(self.get(attrib).replace('(int)', ''), constants)) - - -def _getFloat(self, *attrib): - sval = self.get(attrib[0], None) - if not sval and len(attrib) > 1: - return attrib[1] - else: - return float(eval(sval.replace('(int)', ''), constants)) - - -def _getBool(self, attrib): - return self.get(attrib, '').lower() in ('true', 'yes', 'on') - - -xml._ElementInterface.getI = _getInt -xml._ElementInterface.getF = _getFloat -xml._ElementInterface.getB = _getBool - - -xml._ElementInterface.name = property(lambda self: self.get('name')) -xml._ElementInterface.type = property(lambda self: self.get('type')) -xml._ElementInterface.vis = property(lambda self: self.get('vis')) -xml._ElementInterface.ref = property(lambda self: self.get('ref')) -xml._ElementInterface.value = property(lambda self: self.getF('value')) -xml._ElementInterface.material = property(lambda self: self.get('material')) -xml._ElementInterface.module = property(lambda self: self.get('module')) -xml._ElementInterface.id = property(lambda self: self.getI('id')) -xml._ElementInterface.number = property(lambda self: self.getI('number')) -xml._ElementInterface.x1 = property(lambda self: self.getF('x1')) -xml._ElementInterface.x2 = property(lambda self: self.getF('x2')) -xml._ElementInterface.x = property(lambda self: self.getF('x')) -xml._ElementInterface.y = property(lambda self: self.getF('y')) -xml._ElementInterface.z = property(lambda self: self.getF('z')) -xml._ElementInterface.zstart = property(lambda self: self.getF('zstart')) -xml._ElementInterface.offset = property(lambda self: self.getF('offset')) -xml._ElementInterface.radius = property(lambda self: self.getF('radius')) -xml._ElementInterface.zhalf = property(lambda self: self.getF('zhalf')) -xml._ElementInterface.phi0 = property(lambda self: self.getF('phi0')) -xml._ElementInterface.r = property(lambda self: self.getF('r')) -xml._ElementInterface.dz = property(lambda self: self.getF('dz')) -xml._ElementInterface.thickness = property(lambda self: self.getF('thickness')) -xml._ElementInterface.length = property(lambda self: self.getF('length')) -xml._ElementInterface.width = property(lambda self: self.getF('width')) -xml._ElementInterface.inner_r = property(lambda self: self.getF('inner_r')) -xml._ElementInterface.outer_r = property(lambda self: self.getF('outer_r')) -xml._ElementInterface.z_length = property(lambda self: self.getF('z_length')) -xml._ElementInterface.rmin = property(lambda self: self.getF('rmin')) -xml._ElementInterface.rmax = property(lambda self: self.getF('rmax')) - - -def getRotation(rot): - if rot is not None: - return Rotation(rot.getF('x', 0.0), rot.getF('y', 0.0), rot.getF('z', 0.0)) - else: - return Rotation() - - -def getPosition(pos): - if pos is not None: - return Position(pos.getF('x', 0.0), pos.getF('y', 0.0), pos.getF('z', 0.0)) - else: - return Position() - - -drivers['getRotation'] = getRotation -drivers['getPosition'] = getPosition - - -# --------------------------------------------------------------------------------- -def load_drivers(*args): - if not args: - args = [path.join(path.dirname(__file__), 'drivers')] - for arg in args: - if path.exists(arg): - if path.isfile(arg): - logger.info("Loading driver file ... %s" % arg) - exec(compile(open(arg).read(), arg, 'exec'), drivers) - elif path.isdir(arg): - for f in listdir(arg): - if path.splitext(f)[1] == '.py': - logger.info("Loading driver file ... %s" % path.join(arg, f)) - exec(compile(open(path.join(arg, f)).read(), path.join(arg, f), 'exec'), drivers) - else: - raise IOError("Path '%s' is not a directory or file" % arg) - else: - raise IOError("Path '%s' does not exists" % arg) - - -# --------------------------------------------------------------------------------- -def process_xmlfile(description, file): - global current_xmlfile - file = file.replace('file:', '') - root = xml.parse(file).getroot() - last_xmlfile, current_xmlfile = current_xmlfile, file - tags = ('includes', 'define', 'materials', 'properties', 'limits', 'display', - 'readouts', 'detectors', 'alignments', 'fields', 'sensitive_detectors') - if root.tag in tags: - process_tag(description, root) - else: - for tag in tags: - for e in root.findall(tag): - process_tag(description, e) - current_xmlfile = last_xmlfile - - -def process_tag(description, elem): - if elem.tag == 'detectors': - description.init() # call init before processing 'detectors' (need world volume) - procs = globals().get('process_%s' % elem.tag, None) - if not procs: - procs = drivers.get('process_%s' % elem.tag, None) - if procs: - procs(*(description, elem)) - else: - logger.info('XML tag %s not processed!!! No function found.' % elem.tag) - - -# -------------------------------------------------------------------------------- -def fromXML(xmlfile): - logger.info('Converting Compact file: %s', xmlfile) - description = Detector.getInstance() - # description.create() - process_xmlfile(description, xmlfile) - return description - -# --------------------------------------------------------------------------------- - - -def process_includes(description, elem): - for c in elem.findall('gdmlFile'): - logger.info('Adding Gdml file ... %s', c.get('ref')) - fname = c.get('ref').replace('file:', '') - if not path.isabs(fname): - fname = path.join(path.dirname(current_xmlfile), fname) - process_xmlfile(description, fname) - for c in elem.findall('pyBuilder'): - logger.info('Adding PyBuilder ... %s', c.get('ref')) - fname = c.get('ref') - if not path.isabs(fname): - fname = path.join(path.dirname(current_xmlfile), fname) - load_drivers(fname) - for c in elem.findall('alignment'): - logger.info('Adding Alignment file ... %s', c.get('ref')) - fname = c.get('ref').replace('file:', '') - if not path.isabs(fname): - fname = path.join(path.dirname(current_xmlfile), fname) - process_xmlfile(description, fname) - -# --------------------------------------------------------------------------------- - - -def process_info(description, elem): - pass - -# --------------------------------------------------------------------------------- - - -def process_define(description, elem): - for c in elem.findall('constant'): - description.addConstant(Constant(c.get('name'), c.get('value'))) - _toDictionary(c.get('name'), c.get('value')) # -- Make it known to the evaluator - constants[c.get('name')] = c.getF('value') - -# --------------------------------------------------------------------------------- - - -def process_element(description, elem): - ename = elem.get('name') - tab = gGeoManager.GetElementTable() - element = tab.FindElement(ename) - if not element: - atom = elem.find('atom') - tab.AddElement(atom.get('name'), atom.get('formula'), atom.getI('Z'), atom.getI('value')) - -# --------------------------------------------------------------------------------- - - -def process_materials(description, elem): - for m in elem.findall('material'): - process_material(description, m) - -# --------------------------------------------------------------------------------- -# <material formula="Ac" name="Actinium" state="solid" > -# <RL type="X0" unit="cm" value="0.601558" /> -# <NIL type="lambda" unit="cm" value="21.2048" /> -# <D type="density" unit="g/cm3" value="10.07" /> -# <composite n="1" ref="Ac" /> -# </material> -# <material name="G10"> -# <D type="density" value="1.7" unit="g/cm3"/> -# <fraction n="0.08" ref="Cl"/> -# <fraction n="0.773" ref="Quartz"/> -# <fraction n="0.147" ref="Epoxy"/> -# </material> - - -def process_material(description, m): - density = m.find('D') - radlen = m.find('RL') - intlen = m.find('NIL') - composites = m.findall('fraction') or m.findall('composite') - table = gGeoManager.GetElementTable() - mat = gGeoManager.GetMaterial(m.name) - if not mat: - mat = TGeoMixture(m.name, len(composites), eval(density.get( - 'value') + '*' + density.get('unit') + '/(g/cm3)', constants)) - SetOwnership(mat, False) - rl = (radlen is not None) and eval(radlen.get('value') + '*' + radlen.get('unit'), constants) or 0.0 - il = (intlen is not None) and eval(intlen.get('value') + '*' + intlen.get('unit'), constants) or 0.0 - #mat.SetRadLen(-rl, -il) - elts = [mat.GetElement(i).GetName() for i in range(mat.GetNelements())] - for c in composites: - nam = c.ref - if nam not in elts: - if c.tag == 'composite': - fraction = c.getI('n') - elif c.tag == 'fraction': - fraction = c.getF('n') - if table.FindElement(nam): - mat.AddElement(table.FindElement(nam), fraction) - elif gGeoManager.GetMaterial(nam): - mat.AddElement(gGeoManager.GetMaterial(nam), fraction) - else: - raise NameError('Something going very wrong. Undefined material:' + nam) - medium = gGeoManager.GetMedium(m.name) - if not medium: - global unique_mat_id - unique_mat_id = unique_mat_id - 1 - medium = TGeoMedium(m.name, unique_mat_id, mat) - SetOwnership(medium, False) - medium.SetTitle('material') - medium.SetUniqueID(unique_mat_id) - description.addMaterial(Handle(medium)) - - -# ---------------------------------------------------------------------------------- -def process_display(description, elem): - for v in elem.findall('vis'): - visattr = VisAttr(v.name) - r, g, b = 1., 1., 1. - if 'r' in list(v.keys()): - r = v.getF('r') - if 'g' in list(v.keys()): - g = v.getF('g') - if 'b' in list(v.keys()): - b = v.getF('b') - visattr.setColor(r, g, b) - if 'showDaughters' in list(v.keys()): - visattr.setShowDaughters(v.getB('showDaughters')) - if 'visible' in list(v.keys()): - visattr.setVisible(v.getB('visible')) - if 'alpha' in list(v.keys()): - visattr.setAlpha(v.getF('alpha')) - if 'lineStyle' in list(v.keys()): - ls = v.get('lineStyle') - if ls == 'unbroken': - visattr.setLineStyle(VisAttr.SOLID) - if ls == 'broken': - visattr.setLineStyle(VisAttr.DASHED) - else: - visattr.setLineStyle(VisAttr.SOLID) - if 'drawingStyle' in list(v.keys()): - ds = v.get('drawingStyle') - if ds == 'wireframe': - visattr.setDrawingStyle(VisAttr.WIREFRAME) - description.addVisAttribute(visattr) - - -def process_limits(description, elem): - # <limit name="step_length_max" particles="*" value="5.0" unit="mm" /> - for l in elem.findall('limit'): - limit = Limit(description.document(), l.get('name')) - limit.setParticles(l.get('particles')) - limit.setValue(l.getF('value')) - limit.setUnit(l.get('unit')) - description.addLimit(limit) - -# ----------------------------------------------------------------------------------- - - -def process_detectors(description, elem): - for d in elem.findall('detector'): - procs = drivers.get('detector_%s' % d.get('type'), None) - if procs: - detector = procs(*(description, d)) - description.addDetector(detector) - else: - logger.info('Detector type %s not found' % d.get('type')) - -# ----------------------------------------------------------------------------------- - - -def process_alignments(description, elem): - for a in elem.findall('alignment'): - process_alignment(description, a) - -# ----------------------------------------------------------------------------------- - - -def process_alignment(description, elem): - alignment = AlignmentEntry(description, elem.name) - pos = getPosition(elem.find('position')) - rot = getRotation(elem.find('rotation')) - logger.info("%s %s", pos.isNull(), rot.isNull()) - alignment.align(pos, rot) - return alignment - -# ----------------------------------------------------------------------------------- - - -def process_readouts(description, elem): - for a in elem.findall('readout'): - process_readout(description, a) - -# ----------------------------------------------------------------------------------- - - -def process_readout(description, elem): - readout = Readout(elem.name) - seg = elem.find('segmentation') - if seg is not None: - procs = globals().get('create_%s' % seg.get('type'), None) - if not procs: - procs = drivers.get('create_%s' % seg.get('type'), None) - if procs: - segment = procs(*(description, seg)) - readout.setSegmentation(segment) - else: - logger.info('Segmentation type %s not found' % seg.get('type')) - id = elem.find('id') - if id is not None: - idSpec = IDDescriptor(id.text) - idSpec.SetName(elem.name) - readout.setIDDescriptor(idSpec) - description.addIDSpecification(idSpec) - description.addReadout(readout) - -# ---Segmentations-------------------------------------------------------------------- - - -def create_GridXYZ(description, elem): - obj = GridXYZ() - if 'gridSizeX' in list(elem.keys()): - obj.setGridSizeX(elem.getF('gridSizeX')) - if 'gridSizeY' in list(elem.keys()): - obj.setGridSizeY(elem.getF('gridSizeY')) - if 'gridSizeZ' in list(elem.keys()): - obj.setGridSizeZ(elem.getF('gridSizeZ')) - return obj - - -def create_GlobalGridXY(description, elem): - obj = GlobalGridXY() - if 'gridSizeX' in list(elem.keys()): - obj.setGridSizeX(elem.getF('gridSizeX')) - if 'gridSizeY' in list(elem.keys()): - obj.setGridSizeY(elem.getF('gridSizeY')) - return obj - - -def create_CartesianGridXY(description, elem): - obj = CartesianGridXY() - if 'gridSizeX' in list(elem.keys()): - obj.setGridSizeX(elem.getF('gridSizeX')) - if 'gridSizeY' in list(elem.keys()): - obj.setGridSizeY(elem.getF('gridSizeY')) - return obj - - -def create_NoSegmentation(description, elem): - obj = NoSegmentation() - return obj - - -def create_ProjectiveCylinder(description, elem): - obj = ProjectiveCylinder() - if 'phiBins' in list(elem.keys()): - obj.setPhiBins(elem.getI('phiBins')) - if 'thetaBins' in list(elem.keys()): - obj.setThetaBins(elem.getI('thetaBins')) - return obj - - -def create_NonProjectiveCylinder(description, elem): - obj = NonProjectiveCylinder() - if 'gridSizePhi' in list(elem.keys()): - obj.setThetaBinSize(elem.getF('gridSizePhi')) - if 'gridSizeZ' in list(elem.keys()): - obj.setPhiBinSize(elem.getI('gridSizeZ')) - return obj - - -def create_ProjectiveZPlane(description, elem): - obj = ProjectiveZPlaner() - if 'phiBins' in list(elem.keys()): - obj.setPhiBins(elem.getI('phiBins')) - if 'thetaBins' in list(elem.keys()): - obj.setThetaBins(elem.getI('thetaBins')) - return obj - - -def create_GridPhiEta(description, elem): - obj = GridPhiEta() - if 'phiBins' in list(elem.keys()): - obj.setPhiBins(elem.getI('phiBins')) - if 'gridSizeEta' in list(elem.keys()): - obj.setGridSizeEta(elem.getI('gridSizeEta')) - return obj - - -def create_GridRPhiEta(description, elem): - obj = GridRPhiEta() - if 'phiBins' in list(elem.keys()): - obj.setPhiBins(elem.getI('gridSizeR')) - if 'gridSizeEta' in list(elem.keys()): - obj.setGridSizeEta(elem.getI('gridSizeEta')) - if 'gridSizeR' in list(elem.keys()): - obj.setGridSizeR(elem.getI('gridSizeR')) - return obj -- GitLab