Beispiel #1
0
def plot():
    if (len(sys.argv) < 2) or (sys.argv[1] not in ("r", "z", "eta")):
        usage()
        sys.exit(1)
    dir_name = sys.argv[1]
    direction = material.Element.directions[dir_name]
    dir_label = material.Element.dir_labels[dir_name]
    layers = sys.argv[2:]

    elements = []
    for layer in layers:
        elements += material.parse(file("layers/" + layer))
    if len(elements) == 0:
        sys.exit(1)

    positions = set()
    for element in elements:
        positions.add(element.position[direction])
    positions = list(positions)
    positions.sort()

    data = ROOT.TFile("TrackerRecMaterial.root")
    canvas = ROOT.TCanvas("material", "", 800, 600)
    if dir_name == "r":
        modules = ROOT.TH1F("modules", "material along R", 1200, 0, 120)
    elif dir_name == "z":
        modules = ROOT.TH1F("modules", "material along Z", 6000, -300, 300)
    else:
        modules = ROOT.TH1F("modules", "material along Eta", 60, -3, 3)
    for position in positions:
        modules.SetBinContent(modules.GetXaxis().FindBin(position), 1)
    modules.SetLineColor(ROOT.kBlack)
    modules.SetFillStyle(1001)
    modules.SetFillColor(ROOT.kBlack)
    modules.SetMaximum(1)
    modules.Draw()
    dedx = dict((layer, data.Get("%s_dedx_vs_%s" % (layer, dir_name)))
                for layer in layers)
    radlen = dict((layer, data.Get("%s_radlen_vs_%s" % (layer, dir_name)))
                  for layer in layers)
    for layer in layers:
        dedx[layer].SetLineColor(ROOT.kRed)
        dedx[layer].Draw("same")
        radlen[layer].SetLineColor(ROOT.kGreen)
        radlen[layer].Draw("same")

    canvas.Update()

    while (canvas):
        pass
Beispiel #2
0
def plot():
  if (len(sys.argv) < 2) or (sys.argv[1] not in ("r", "z", "eta")):
    usage()
    sys.exit(1)
  dir_name  = sys.argv[1]
  direction = material.Element.directions[dir_name]
  dir_label = material.Element.dir_labels[dir_name]
  layers = sys.argv[2:]

  elements = []
  for layer in layers:
    elements += material.parse(file("layers/" + layer))
  if len(elements) == 0:
    sys.exit(1)

  positions = set()
  for element in elements:
    positions.add(element.position[direction])
  positions = list(positions)
  positions.sort()

  data   = ROOT.TFile("TrackerRecMaterial.root")
  canvas = ROOT.TCanvas("material", "", 800, 600)
  if dir_name == "r":
    modules = ROOT.TH1F("modules", "material along R",   1200,    0, 120)
  elif dir_name == "z":
    modules = ROOT.TH1F("modules", "material along Z",   6000, -300, 300)
  else:
    modules = ROOT.TH1F("modules", "material along Eta",   60,   -3,   3)
  for position in positions:
    modules.SetBinContent(modules.GetXaxis().FindBin(position), 1)
  modules.SetLineColor(ROOT.kBlack)
  modules.SetFillStyle(1001)
  modules.SetFillColor(ROOT.kBlack)
  modules.SetMaximum(1)
  modules.Draw()
  dedx   = dict( (layer, data.Get("%s_dedx_vs_%s"   % (layer, dir_name))) for layer in layers )
  radlen = dict( (layer, data.Get("%s_radlen_vs_%s" % (layer, dir_name))) for layer in layers )
  for layer in layers:
    dedx[layer].SetLineColor(ROOT.kRed)
    dedx[layer].Draw("same")
    radlen[layer].SetLineColor(ROOT.kGreen)
    radlen[layer].Draw("same")

  canvas.Update()

  while(canvas):
    pass
Beispiel #3
0
def dump():
    if (len(sys.argv) < 2) or (sys.argv[1] not in material.Element.directions):
        usage()
        sys.exit(1)
    dir = material.Element.directions[sys.argv[1]]

    elements = material.parse(sys.stdin)
    if len(elements) == 0:
        sys.exit(1)

    positions = set()
    for element in elements:
        positions.add(element.position[dir])
    positions = sorted(positions)
    for position in positions:
        print(position)
Beispiel #4
0
def dump():
  if (len(sys.argv) < 2) or (sys.argv[1] not in material.Element.directions):
    usage()
    sys.exit(1)
  dir = material.Element.directions[sys.argv[1]]

  elements  = material.parse(sys.stdin)
  if len(elements) == 0:
    sys.exit(1)

  positions = set()
  for element in elements:
    positions.add(element.position[dir])
  positions = sorted(positions)
  for position in positions:
    print(position)
Beispiel #5
0
def split():
  if (len(sys.argv) < 2):
    usage()
    sys.exit(1)

  basename = sys.argv[1]
  if (len(sys.argv) in (2,3)):
    dir_name  = 'none'
    cuts = []
  else:
    dir_name = sys.argv[2].lower()
    if not dir_name in material.Element.directions:
      usage()
      sys.exit(1)
    cuts = [float(x) for x in sys.argv[3:]]
  direction = material.Element.directions[dir_name]
  dir_label = material.Element.dir_labels[dir_name]
  
  elements = material.parse(sys.stdin)
  if len(elements) == 0:
    sys.exit(1)

  groups = material.split_along(direction, elements, cuts)
  groups = material.remove_copy_number(elements, groups)

  try:
    # parse trackingMaterialGroups.xml
    document = minidom.parse("trackingMaterialGroups.xml")
    # remove text
    dom_strip(document)
    section = document.getElementsByTagName("SpecParSection")[0]
  except:
    # invalid document or no document to parse, create a new one
    document = minidom.getDOMImplementation().createDocument(xml.dom.XML_NAMESPACE, "DDDefinition", None)
    document.documentElement.setAttribute("xmlns", "http://www.cern.ch/cms/DDL")
    document.documentElement.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
    document.documentElement.setAttribute("xsi:schemaLocation", "http://www.cern.ch/cms/DDL ../../../DetectorDescription/Schema/DDLSchema.xsd")
    section = document.createElement("SpecParSection")
    section.setAttribute("label", "spec-pars2.xml")
    section.appendChild(document.createTextNode(""))
    document.documentElement.appendChild(section)

  for (index, group) in enumerate(groups):
    if len(group) == 0:
    # empty group
      continue

    if len(groups) == 1:
      # layer with no subgroups, use simple name
      group_name = basename
    else:
      # layer with subgroups, build sensible names
      if index == 0:
        group_name = "%s_%s%d"% (basename, dir_label, 0)
      else:
        group_name = "%s_%s%d"% (basename, dir_label, int(round(cuts[index-1])))
    
    specpar = document.createElement("SpecPar")
    specpar.setAttribute("name", group_name)
    specpar.setAttribute("eval", "true")
    for filter in group:
      selector = document.createElement("PartSelector")
      selector.setAttribute("path", filter.full_name())
      specpar.appendChild(selector)
    groupname = document.createElement("Parameter")
    groupname.setAttribute("name", "TrackingMaterialGroup")
    groupname.setAttribute("value", group_name)
    specpar.appendChild(groupname)
    section.appendChild(specpar)
    section.appendChild(document.createTextNode(""))

  # write the updated XML
  out = open("trackingMaterialGroups.xml", "w")
  out.write(document.toprettyxml("  ", "\n", "utf-8"))
  out.close()