113def printFileInfo( fileName, categoryStrings ):
114
115
116 f = ROOT.TFile.Open( fileName, "READ" )
117 if not f or f.IsZombie():
118 raise "Couldn't open file %s" % fileName
119
120
121 t = f.Get( "CollectionTree" )
122 if not t:
123 raise "Couldn't find 'CollectionTree; in file %s" % fileName
124
125
126 infoForCont = {}
127 categData = {}
128
129
130 entries = t.GetEntries()
131
132
133 branches = t.GetListOfBranches()
134 for i in range( branches.GetEntries() ):
135
136 branch = branches.At( i )
137
138 if branch.GetEntries() != entries:
139 raise "Found %i entries in branch %s instead of %i" % \
140 ( branch.GetEntries(), branch.GetName(), entries )
141
142 brName = branch.GetName()
143
144 m = re.match( r"(.*)Aux\..*", branch.GetName() )
145 if m:
146 brName = m.group( 1 )
147 pass
148
149 m = re.match( r"(.*)AuxDyn\..*", branch.GetName() )
150 if m:
151 brName = m.group( 1 )
152 pass
153
154 if brName in infoForCont.keys():
155 infoForCont[ brName ]._memSize += branch.GetTotBytes( "*" )
156 infoForCont[ brName ]._diskSize += branch.GetZipBytes( "*" )
157 else:
158 infoForCont[ brName ] = ContainerInfo( brName,
159 branch.GetTotBytes( "*" ),
160 branch.GetZipBytes( "*" ),
161 entries )
162 pass
163 pass
164
165
166 orderedData = []
167 for cName in infoForCont.keys():
168 orderedData += [ infoForCont[ cName ] ]
169 pass
170 orderedData.sort( key = operator.attrgetter( "_diskSize" ) )
171
172
173 memSize = 0.0
174 diskSize = 0.0
176 print(
" File: %s" % fileName )
178 print(
" Memory size Disk Size Size/Event Compression "
179 "Entries Name (Type)" )
181 for d in orderedData:
182
183 intBr = t.GetBranch( d.name() )
184 className = "<!!!Interface missing!!!>"
185 if intBr:
186 className = intBr.GetClassName()
187 pass
188
189 nameType = "%s (%s)" % ( d.name(), className )
190
191
192
193 found = False
194 catName = '*Unknown*'
195
196 for categ in categoryStrings:
197 for pattern in categoryStrings[ categ ]:
198
199 m = None
200 try:
201 m = re.match(pattern, d.name())
202 except TypeError:
203 pass
204 if m:
205 found = True
206 catName = categ
207 break
208
209 pass
210 if not found:
211
212 pass
213 pass
214
215 nameType += ' [' + catName + ']'
216
217
218
219 if catName in categData.keys():
220 categData[ catName ]._memSize += d._memSize
221 categData[ catName ]._diskSize += d._diskSize
222 else:
223 categData[ catName ] = \
224 ContainerInfo( catName,
225 d._memSize,
226 d._diskSize,
227 d._nEntries )
228 pass
229 pass
230 memSize = memSize + d.memSize()
231 diskSize = diskSize + d.diskSize()
232
233 print(
" %12.2f kB %12.2f kB %7.2f kB/event %5.2f %8i %s" % \
234 ( d.memSize(), d.diskSize(),
235 d.diskSizePerEntry(),
236 d.compression(),
237 d.nEntries(), nameType ) )
238 pass
240 print(
" %12.2f kB %12.2f kB %7.2f kB/event Total" % \
241 ( memSize, diskSize, diskSize/entries ) )
244
245
246
247 categorizedData = []
248 for br in categData.keys():
249 categorizedData += [ categData[ br ] ]
250 pass
251 categorizedData.sort( key = operator.attrgetter( "_diskSize" ) )
252
254 print(
" Categorized data" )
256 print(
" Disk Size Fraction Category Name" )
258 totDiskSize = 0.0
259 frac = 0.0
260 ds = []
261 dsFrac = []
262 dsName = []
263 for d in categorizedData:
264
265 dsPerEvt = d.diskSize() / d.nEntries()
266 dsPerEvtFrac = d.diskSize() / diskSize
267 totDiskSize += dsPerEvt
268 frac += dsPerEvtFrac
269 ds += [dsPerEvt]
270 dsFrac += [dsPerEvtFrac]
271 dsName += [d.name()]
272 print(
"%12.3f kb %12.3f %s" % ( dsPerEvt, dsPerEvtFrac, d.name() ) )
273 pass
274 print(
"%12.3f kb %12.3f %s" % ( totDiskSize , frac,
"Total" ) )
275 ds += [totDiskSize]
276 dsFrac += [frac]
277 dsName += ["Total"]
278
281 print(
"CSV for categories disk size/evt and fraction:" )
282
283 print(
",".join(dsName[::-1]))
284 b = ['{:<0.3f}'.format(i) for i in ds[::-1]]
286 b = ['{:<0.3f}'.format(i) for i in dsFrac[::-1]]
290
291 return
292
293
void print(char *figname, TCanvas *c1)