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
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
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)
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()