44def makeContainer(c1):
45
46 x0 = AtlasAPI.list_datasets(client, patterns = [c1.project+'.%.physics_Main.merge.AOD%'], fields = ['run_number', 'ldn', 'events', 'total_size'], order=None, limit=None, show_archived=False, grl=c1.grl, data_period=c1.period)
47 runs =
set([a[
'run_number']
for a
in x0])
48
49 if len(runs)==0:
50 print ('no run in period'+c1.period+' is listed in GRL:', c1.grl)
51 return
52
53
54 x = AtlasAPI.list_datasets(client, patterns = [c1.project+'.%.physics_Main.merg%'+c1.derivation+'%'], fields = ['run_number', 'ldn', 'events', 'total_size'], order=None, limit=None, show_archived=False, grl=c1.grl, data_period=c1.period)
55
56
57 dic1={}
58 for a in x:
59 print (a['run_number'], a['ldn'])
60 try:
61 dic1[a[
'ldn'].
split(
'_')[-1]].append((a[
'run_number'],a[
'ldn']))
62 except KeyError:
63 dic1[a[
'ldn'].
split(
'_')[-1]] = [(a[
'run_number'],a[
'ldn'])]
64
65
66 allTags = sorted(dic1.keys(), key=lambda k: len(dic1[k]),reverse=True)
67 for tag in allTags:
68 print (tag,':', end='')
69 for xx in dic1[tag]:
70 print (xx[0], end='')
72
73
74 t_acceptTags = c1.acceptTags if c1.acceptTags else allTags
75
76
77 ds = []
78 for t in t_acceptTags:
79 for a in dic1.get(t,[]):
80 found = False
81 for d in ds:
82 if d[0] == a[0]:
83 found = True
84 break
85 if not found:
86 ds.append(a)
87
88
89 if len(ds)==0:
90 print ('No dataset in period',c1.period+', exiting...')
91 return
92
93
94 for d in ds:
95 print (d[0],d[1])
96 runs.remove(d[0])
97 print (runs)
98
99
100 if len(runs) !=0:
101 print ('!'*10)
102 print ('MISSING ', ' '.join(runs))
103
104
105 dlist=','.join([d[1] for d in ds])
106 superTag = 'period'+c1.period+','+c1.sTag+ds[0][1][-5:]
107 comments = superTag+','+c1.derivation
108
109 cmd='ami cmd COMAPopulateSuperProductionDataset -rucioRegistration="yes" -creationComment="'+comments+'" -selectionType="run_config" -superTag="'+superTag+'" -containedDatasets="'+dlist+'" -separator="," '
110 print ('command:',cmd)
111
112
113 if c1.outScript:
114 with open(c1.outScript,'a') as f1:
115 f1.write(cmd+'\n')
116 return
117
118
119 if not c1.autoCreate:
120 while True:
121 x = raw_input("create contianer: y[es]/N[o]/e[xit]")
122 if x == 'e' or x=='N': return
123 elif x=='y': break
124
125 call(cmd, shell=True)
126
127
void print(char *figname, TCanvas *c1)
std::vector< std::string > split(const std::string &s, const std::string &t=":")