ATLAS Offline Software
web.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
2 
3 # -*- coding: utf-8 -*-
4 import sys
5 
6 import grid
7 import ami
8 
9 toGB = 1. / 1000. / 1000. / 1000.
10 
11 def makeDict(scope, query):
12  map = {}
13  map2 = {}
14  #print scope, query
15  for ds in grid.listDatasets(scope, query):
16  ar = ds.replace('/','').split('.')
17  tag = ar[5]
18 
19  if tag.find('_p'):
20  tag = tag.split('_p')[0]
21 
22  short = ar[1] + '.' + tag
23  map[short] = ds
24  map2[int(ar[1])] = ds
25 
26  return map, map2
27 
28 def makeTable(name, ids):
29 
30  print('---++ %s (%d)' % (name, len(ids)))
31 
32  print('''%TABLE{tablewidth="100%" columnwidths="6%,70%,12%,12%"}%''')
33  print('| %8s | %60s | %22s | %22s | %22s | %22s |' % ( '*DSID*', '*Description*', '*Primary xAOD yield*', '*TOPQ1 yield*', '*Primary size [GB]*', '*xAOD size [GB]*' ))
34 
35  for id in ids:
36  dsids_sofar.append(id)
37 
38  primary_name = ''
39  topq1_name = 'Not Available (requested?)'
40  aod_yield = 0
41  topq1_yield = 0
42  aod_size = 0
43  topq1_size = 0
44 
45  if aods_idonly.has_key(id):
46  primary_name = aods_idonly[id]
47 
48  if topq1_idonly.has_key(id):
49  topq1_name = topq1_idonly[id]
50 
51  if aods_ami.has_key(primary_name.replace('/','')):
52  aod_yield = aods_ami[primary_name.replace('/','')]
53 
54  if topq1_ami.has_key(topq1_name.replace('/','')):
55  topq1_yield = topq1_ami[topq1_name.replace('/','')]
56 
57 
58  if aods_ami_size.has_key(primary_name.replace('/','')):
59  aod_size = aods_ami_size[primary_name.replace('/','')]
60 
61  if topq1_ami_size.has_key(topq1_name.replace('/','')):
62  topq1_size = topq1_ami_size[topq1_name.replace('/','')]
63 
64 
65  #print id, primary_name
66  desc = primary_name.split('.')[2]
67 
68  #%TWISTY{mode="div"showlink="AOD: 6.298.988"hidelink="Collapse"showimgleft="%ICONURLPATH{toggleopen-small}%"hideimgleft="%ICONURLPATH{toggleclose-small}%"}%INPUT%ICON{choice-no}%
69 
70  twisty = '''%TWISTY{
71  mode="div"
72  showlink="'''+desc+'''"
73  hidelink="'''+desc+'''"
74  showimgleft="%ICONURLPATH{toggleopen-small}%"
75  hideimgleft="%ICONURLPATH{toggleclose-small}%"}%''' + '<b>Primary:</b> ' + primary_name + '<br><b>TOPQ1:</b> ' + topq1_name + '<br>' + '%ENDTWISTY%'
76 
77  frac = 0
78  if aod_yield > 0:
79  frac = 100. * topq1_yield / aod_yield
80 
81  topq1_yield_txt = "%15d (%0.0f%%)" % (topq1_yield, frac)
82  cstart = ''
83  cend = ''
84  if aod_yield < topq1_yield:
85  cstart = '%RED%'
86  cend = "%ENDCOLOR%"
87  elif aod_yield > topq1_yield:
88  cstart = '%ORANGE%'
89  cend = "%ENDCOLOR%"
90 
91  topq1_yield_txt = cstart + topq1_yield_txt + cend
92 
93  frac = 0
94  if topq1_size > 0:
95  frac = 100. * topq1_size / aod_size
96 
97  topq1_size_txt = "%15d (%0.0f%%)" % (topq1_size * toGB, frac)
98 
99  print('| %d|%s| %d| %s| %4.2f| %s|' % (id, twisty, aod_yield, topq1_yield_txt, aod_size * toGB, topq1_size_txt))
100 
101  print('')
102 
103 if __name__ == '__main__':
104  query = '*.AOD.*_r5591_r5625'
105  query13 = '*.merge.AOD.*_r5787_r5853'
106 
107  print('%TOC%')
108 
109  print('---+ Introduction')
110 
111  aods_idtag, aods_idonly = makeDict('mc14_8TeV', query)
112  topq1_idtag, topq1_idonly = makeDict('mc14_8TeV', query.replace('AOD','DAOD_TOPQ1') + '_p1854')
113  aods_ami = ami.askAmi('mc14_8TeV.' + query)
114  topq1_ami = ami.askAmi('mc14_8TeV.' + query.replace('AOD','DAOD_TOPQ1') + '_p1854')
115 
116  aods_ami_size = ami.askAmi('mc14_8TeV.' + query, 'totalSize')
117  topq1_ami_size = ami.askAmi('mc14_8TeV.' + query.replace('AOD','DAOD_TOPQ1') + '_p1854', 'totalSize')
118 
119  #print len(aods_ami), len(topq1_ami)
120  #sys.exit()
121  dsids_sofar = []
122 
123  print('---+ 8 !TeV')
124 
125  makeTable('ttbar', [117050])
126  makeTable('single top', [110101, 110119, 110140])
127  makeTable('Z+jets sherpa', [147770, 147771])
128  makeTable('Z+jets sherpa with massive b/c', range(167749, 167758) + range(167797, 167806) + range(167809, 167818) + range(167821, 167830) + range(167833, 167842))
129  makeTable('W+jets sherpa with massive b/c', range(167740, 167750) + range(180534, 180543) + range(167761, 167770) + range(167770, 167779) + range(167779, 167788) + range(167788, 167797))
130  makeTable('Diboson powheg+pythia8', range(126928, 126937))
131 
132  remaining = set(aods_idonly.keys()).difference(set(dsids_sofar))
133  makeTable('Remaining / uncategorised (as of now)', sorted(remaining))
134 
135 
136 
137  query = query13
138  aods_idtag, aods_idonly = makeDict('mc14_13TeV', query)
139  topq1_idtag, topq1_idonly = makeDict('mc14_13TeV', query.replace('AOD','DAOD_TOPQ1') + '_p1852')
140 
141  aods_ami = ami.askAmi('mc14_13TeV.' + query)
142  topq1_ami = ami.askAmi('mc14_13TeV.' + query.replace('AOD','DAOD_TOPQ1') + '_p1852')
143  aods_ami_size = ami.askAmi('mc14_13TeV.' + query, 'totalSize')
144  topq1_ami_size = ami.askAmi('mc14_13TeV.' + query.replace('AOD','DAOD_TOPQ1') + '_p1852', 'totalSize')
145 
146  dsids_sofar = []
147 
148  print('---+ 13 !TeV')
149 
150  makeTable('ttbar', [110401])
151  makeTable('single top', [110070, 110071, 110305])
152 
153  remaining = set(aods_idonly.keys()).difference(set(dsids_sofar))
154  makeTable('Remaining / uncategorised (as of now)', sorted(remaining))
155 
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
python.web.makeDict
def makeDict(scope, query)
Definition: web.py:11
python.web.makeTable
def makeTable(name, ids)
Definition: web.py:28
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename T::value_type > sorted(T begin, T end)
Helper function to create a sorted vector from an unsorted one.
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:224
Muon::print
std::string print(const MuPatSegment &)
Definition: MuonTrackSteering.cxx:28
Trk::split
@ split
Definition: LayerMaterialProperties.h:38