graph_vals.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import pydotplus.graphviz as pdp
  2. log = """
  3. "GenPart_eta" at address 0x43f4040
  4. "GenPart_mass" at address 0x43f1110
  5. "GenPart_motherId" at address 0x43f70a0
  6. "GenPart_motherIndex" at address 0x43f88d0
  7. "GenPart_pdgId" at address 0x44cb260
  8. "GenPart_phi" at address 0x43f2810
  9. "GenPart_pt" at address 0x43f5860
  10. "GenPart_status" at address 0x43ef9a0
  11. "Jet_btagCMVA" at address 0x44cd090
  12. "Jet_eta" at address 0x43f0b50
  13. "Jet_mass" at address 0x44cee60
  14. "Jet_phi" at address 0x43eff60
  15. "Jet_pt" at address 0x43f16d0
  16. "LepGood_charge" at address 0x43f6a70
  17. "LepGood_eta" at address 0x43f8f10
  18. "LepGood_mass" at address 0x43f7700
  19. "LepGood_mcMatchAny" at address 0x43f4690
  20. "LepGood_mcMatchId" at address 0x43f5e60
  21. "LepGood_mcMatchPdgId" at address 0x43f5270
  22. "LepGood_mcMatchTau" at address 0x43f3a10
  23. "LepGood_mcPt" at address 0x43f2e80
  24. "LepGood_pdgId" at address 0x44cb8b0
  25. "LepGood_phi" at address 0x43f8290
  26. "LepGood_pt" at address 0x44cac00
  27. "cartProduct(lorentz_vectors(vectorOf(nJet,Jet_pt),vectorOf(nJet,Jet_eta),vectorOf(nJet,Jet_phi),vectorOf(nJet,Jet_mass)),lorentz_vectors(vectorOf(nJet,Jet_pt),vectorOf(nJet,Jet_eta),vectorOf(nJet,Jet_phi),vectorOf(nJet,Jet_mass)))" at address 0x2c7a230
  28. "count(bJet_Selection:vectorOf(nJet,Jet_btagCMVA))" at address 0x442cbc0
  29. "count(is_electron:vectorOf(nGenPart,GenPart_pdgId))" at address 0x2c7bad0
  30. "count(is_electron:vectorOf(nLepGood,LepGood_pdgId))" at address 0x2c7be30
  31. "count(is_lepton:vectorOf(nGenPart,GenPart_pdgId))" at address 0x2c7bde0
  32. "count(is_lepton:vectorOf(nLepGood,LepGood_pdgId))" at address 0x2c7c230
  33. "count(is_muon:vectorOf(nGenPart,GenPart_pdgId))" at address 0x2c7bb20
  34. "count(is_muon:vectorOf(nLepGood,LepGood_pdgId))" at address 0x2c7bfa0
  35. "energies(lorentz_vectors(vectorOf(nGenPart,GenPart_pt),vectorOf(nGenPart,GenPart_eta),vectorOf(nGenPart,GenPart_phi),vectorOf(nGenPart,GenPart_mass)))" at address 0x448ca00
  36. "energies(lorentz_vectors(vectorOf(nJet,Jet_pt),vectorOf(nJet,Jet_eta),vectorOf(nJet,Jet_phi),vectorOf(nJet,Jet_mass)))" at address 0x448bd90
  37. "energies(lorentz_vectors(vectorOf(nLepGood,LepGood_pt),vectorOf(nLepGood,LepGood_eta),vectorOf(nLepGood,LepGood_phi),vectorOf(nLepGood,LepGood_mass)))" at address 0x43ed5a0
  38. "evt" at address 0x43f4c70
  39. "lorentz_vectors(vectorOf(nGenPart,GenPart_pt),vectorOf(nGenPart,GenPart_eta),vectorOf(nGenPart,GenPart_phi),vectorOf(nGenPart,GenPart_mass))" at address 0x44187b0
  40. "lorentz_vectors(vectorOf(nJet,Jet_pt),vectorOf(nJet,Jet_eta),vectorOf(nJet,Jet_phi),vectorOf(nJet,Jet_mass))" at address 0x4416800
  41. "lorentz_vectors(vectorOf(nLepGood,LepGood_pt),vectorOf(nLepGood,LepGood_eta),vectorOf(nLepGood,LepGood_phi),vectorOf(nLepGood,LepGood_mass))" at address 0x4415860
  42. "lumi" at address 0x44cbe90
  43. "map(inv_mass:cartProduct(lorentz_vectors(vectorOf(nJet,Jet_pt),vectorOf(nJet,Jet_eta),vectorOf(nJet,Jet_phi),vectorOf(nJet,Jet_mass)),lorentz_vectors(vectorOf(nJet,Jet_pt),vectorOf(nJet,Jet_eta),vectorOf(nJet,Jet_phi),vectorOf(nJet,Jet_mass))))" at address 0x448b760
  44. "nBJetLoose40" at address 0x44ccab0
  45. "nBJetMedium40" at address 0x44bfbb0
  46. "nBJetTight40" at address 0x43f6440
  47. "nGenPart" at address 0x4414830
  48. "nJet" at address 0x43f2250
  49. "nLepGood" at address 0x44cc470
  50. "nVert" at address 0x43f3450
  51. "os-dilepton" at address 0x2c7cbe0
  52. "pair(count(is_electron:vectorOf(nGenPart,GenPart_pdgId)),count(is_electron:vectorOf(nLepGood,LepGood_pdgId)))" at address 0x2c7c280
  53. "pair(count(is_lepton:vectorOf(nGenPart,GenPart_pdgId)),count(is_lepton:vectorOf(nLepGood,LepGood_pdgId)))" at address 0x2c7c7b0
  54. "pair(count(is_muon:vectorOf(nGenPart,GenPart_pdgId)),count(is_muon:vectorOf(nLepGood,LepGood_pdgId)))" at address 0x2c7c610
  55. "pair(energies(lorentz_vectors(vectorOf(nJet,Jet_pt),vectorOf(nJet,Jet_eta),vectorOf(nJet,Jet_phi),vectorOf(nJet,Jet_mass))),vectorOf(nJet,Jet_eta))" at address 0x2c7a710
  56. "pair(energies(lorentz_vectors(vectorOf(nLepGood,LepGood_pt),vectorOf(nLepGood,LepGood_eta),vectorOf(nLepGood,LepGood_phi),vectorOf(nLepGood,LepGood_mass))),vectorOf(nLepGood,LepGood_pt))" at address 0x2c7a2a0
  57. "pair(nLepGood,nJet)" at address 0x2c7e3c0
  58. "reduceWith(max:energies(lorentz_vectors(vectorOf(nLepGood,LepGood_pt),vectorOf(nLepGood,LepGood_eta),vectorOf(nLepGood,LepGood_phi),vectorOf(nLepGood,LepGood_mass))))" at address 0x4489e80
  59. "reduceWith(mean:energies(lorentz_vectors(vectorOf(nLepGood,LepGood_pt),vectorOf(nLepGood,LepGood_eta),vectorOf(nLepGood,LepGood_phi),vectorOf(nLepGood,LepGood_mass))))" at address 0x43eee70
  60. "reduceWith(min:energies(lorentz_vectors(vectorOf(nLepGood,LepGood_pt),vectorOf(nLepGood,LepGood_eta),vectorOf(nLepGood,LepGood_phi),vectorOf(nLepGood,LepGood_mass))))" at address 0x44873c0
  61. "reduceWith(range:energies(lorentz_vectors(vectorOf(nLepGood,LepGood_pt),vectorOf(nLepGood,LepGood_eta),vectorOf(nLepGood,LepGood_phi),vectorOf(nLepGood,LepGood_mass))))" at address 0x44327f0
  62. "run" at address 0x43f0590
  63. "ss-dilepton" at address 0x44158d0
  64. "trilepton" at address 0x2c7c660
  65. "vectorOf(nGenPart,GenPart_eta)" at address 0x44321a0
  66. "vectorOf(nGenPart,GenPart_mass)" at address 0x442ef10
  67. "vectorOf(nGenPart,GenPart_motherId)" at address 0x44855a0
  68. "vectorOf(nGenPart,GenPart_motherIndex)" at address 0x44861f0
  69. "vectorOf(nGenPart,GenPart_pdgId)" at address 0x4486dd0
  70. "vectorOf(nGenPart,GenPart_phi)" at address 0x43ee800
  71. "vectorOf(nGenPart,GenPart_pt)" at address 0x4432e40
  72. "vectorOf(nGenPart,GenPart_status)" at address 0x442e370
  73. "vectorOf(nJet,Jet_btagCMVA)" at address 0x4487fa0
  74. "vectorOf(nJet,Jet_eta)" at address 0x448a500
  75. "vectorOf(nJet,Jet_mass)" at address 0x4488c30
  76. "vectorOf(nJet,Jet_phi)" at address 0x4489820
  77. "vectorOf(nJet,Jet_pt)" at address 0x448b140
  78. "vectorOf(nLepGood,LepGood_charge)" at address 0x442a270
  79. "vectorOf(nLepGood,LepGood_eta)" at address 0x442c5d0
  80. "vectorOf(nLepGood,LepGood_mass)" at address 0x442ae40
  81. "vectorOf(nLepGood,LepGood_mcMatchAny)" at address 0x43ee190
  82. "vectorOf(nLepGood,LepGood_mcMatchId)" at address 0x44296f0
  83. "vectorOf(nLepGood,LepGood_mcMatchPdgId)" at address 0x4428b70
  84. "vectorOf(nLepGood,LepGood_mcMatchTau)" at address 0x43ecf10
  85. "vectorOf(nLepGood,LepGood_mcPt)" at address 0x448c3a0
  86. "vectorOf(nLepGood,LepGood_pdgId)" at address 0x442dda0
  87. "vectorOf(nLepGood,LepGood_phi)" at address 0x442ba10
  88. "vectorOf(nLepGood,LepGood_pt)" at address 0x442d1a0
  89. "xsec" at address 0x44ce800
  90. """
  91. def parse(str_in):
  92. str_in = "("+str_in+")"
  93. ends = {}
  94. nests = {}
  95. names = {}
  96. styles = {}
  97. parens = []
  98. name = ""
  99. name_start = 0
  100. name_end = 0
  101. for i, char in enumerate(str_in):
  102. if char == "(":
  103. nests[name_start] = []
  104. if parens:
  105. nests[parens[-1]].append(name_start)
  106. names[name_start] = name # save function name
  107. styles[name_start] = {"shape": "ellipse"}
  108. name = ""
  109. parens.append(name_start)
  110. elif char == ")":
  111. if name:
  112. ends[name_start] = name_end
  113. names[name_start] = name
  114. styles[name_start] = {"shape": "rectangle"}
  115. nests[parens[-1]].append(name_start)
  116. name = ""
  117. ends[parens.pop()] = i
  118. elif char in ",:":
  119. if name:
  120. ends[name_start] = name_end
  121. names[name_start] = name
  122. if char == ",":
  123. styles[name_start] = {"shape": "rectangle"}
  124. else:
  125. styles[name_start] = {"shape": "invhouse"}
  126. nests[parens[-1]].append(name_start)
  127. name = ""
  128. else:
  129. if not name:
  130. name_start = i
  131. name += char
  132. name_end = i
  133. # clean up duplicate sub-trees
  134. text = {}
  135. for start, end in ends.items():
  136. s = str_in[start:end+1]
  137. if s in text:
  138. dup_id = text[s]
  139. names.pop(start)
  140. if start in nests:
  141. nests.pop(start)
  142. for l in nests.values():
  143. for i in range(len(l)):
  144. if l[i] == start:
  145. l[i] = dup_id
  146. else:
  147. text[s] = start
  148. names.pop(0)
  149. nests.pop(0)
  150. g = pdp.Dot()
  151. for id_, name in names.items():
  152. g.add_node(pdp.Node(str(id_), label=name, **styles[id_]))
  153. for group_id, children in nests.items():
  154. for child_id in children:
  155. g.add_edge(pdp.Edge(str(group_id), str(child_id)))
  156. with open("outfile.ps", "wb") as f:
  157. try:
  158. f.write(g.create_ps())
  159. except Exception as e:
  160. print(g.to_string())
  161. raise e
  162. if __name__ == '__main__':
  163. vals = log.split('\n')
  164. vals = [val.split(' at ')[0][1:-1] for val in vals if val]
  165. for val in vals:
  166. parse(val)
  167. input()