def printMCTree(mcps,filename="temp.dot"): #start the graph f=open(filename, 'w') f.write('digraph G {\nranksep="equally";\noverlap="false";\nrankdir="LR";\ncompound=true;\n') #make a node for each mcp colors = {-1:"white",0:"white",1:"grey",2:"yellow",3:"green",4:"red",5:"blue",6:"pink"} for mcp in mcps: name = str(mcp.id()) label = lc.pdgToName(mcp.getPDG()) colour= colors[quarkType(mcp.getPDG())] f.write('"'+name+'" [ label="'+label+' '+str(len(mcp.getParents()))+'",style="filled",color="'+colour+'" ];\n') #idn = 0 #mcp_ids = [mcp.id() for mcp in mcps] #for mcp in mcps: # daughters = [daughter for daughter in mcp.getDaughters() if daughter.id() in mcp_ids] # if daughters: # f.write('subgraph cluster'+str(idn)+'{\n') # for daughter in daughters: # f.write(str(daughter.id())+';\n') # f.write('}\n') # f.write(str(mcp.id())+'->'+str(daughter.id())+' [ lhead=cluster'+str(idn)+',label = #"'+str(mu.threeDRadius(sub(mcp.getVertex(),mcp.getEndpoint())))[:4]+'" ];') # idn += 1 #make a node in each cluster #idn = 0 #for vert in mCVertices(mcps).itervalues(): # #we need to remove the ones that leave this vertex # #vert = [mcp for mcp in vert if mu.threeDRadius(sub(mcp.getVertex(),mcp.getEndpoint())) < 0.00000001] # if len(vert) > 1: # f.write('subgraph cluster'+str(idn)+'{\n') # for mcp in vert: # f.write(str(mcp.id())+';\n') # f.write('}\n') # idn += 1 #make a link for each decay (whose product is in the list!) mcp_ids = [mcp.id() for mcp in mcps ]#if fromIP(mcp)] for mcp in mcps: for parent in mcp.getParents(): # if fromIP(parent): f.write(str(parent.id())+'->'+str(mcp.id())+' [ label = "'+str(mu.threeDRadius(mu.sub(parent.getVertex(),parent.getEndpoint())))[:4]+'" ];') #end graph f.write('}\n') f.close() f=open(filename+".png", 'w') sp.call(['dot', '-Tpng', filename],stdout = f) f.close() sp.call(['eog', filename+".png"])
def getTrueJetFlavour(event, jet): return lc.pdgToName(event.getCorrespondingObject(jet,"TrueJetFlavour")[0])