ATLAS Offline Software
pool_insertFileToCatalog.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 # Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
4 
5 # @file: pool_insertFileToCatalog.py
6 # @purpose: insert a POOL file into a POOL file catalog without displaying the
7 # annoying ROOT warnings for missing dictionaries
8 # Also speeds up greatly processing time by shrinking LD_LIBRARY_PATH
9 # @author: Sebastien Binet <binet@cern.ch>
10 # @date: May 2006
11 #
12 # @example:
13 #
14 # python pool_insertFileToCatalog.py aod.pool.root
15 #
16 # if pool_insertFileToCatalog.py has been made 'chmod +x' one can just do:
17 # ./pool_insertFileToCatalog.py aod.pool.root
18 from __future__ import with_statement, print_function
19 
20 from future import standard_library
21 standard_library.install_aliases()
22 
23 def pool_insert(files, catalog_name="xmlcatalog_file:PoolFileCatalog.xml"):
24  print (":: inserting [%i] files into pool catalog... (%s)"%(
25  len (files),
26  catalog_name
27  ))
28  import os
29  import subprocess
30  sc,exe = subprocess.getstatusoutput ('which pool_insertFileToCatalog')
31  if sc != 0:
32  print (":: could not find 'pool_insertFileToCatalog' !")
33  print (exe)
34  return 1
35 
36  os.environ['POOL_CATALOG'] = catalog_name
37  cmd = "%s %s" % (exe, " ".join(files))
38  sc, out = subprocess.getstatusoutput (cmd)
39 
40  out = os.linesep.join(
41  [o for o in out.splitlines()
42  if not (o.startswith("Warning in <TClass::TClass>: no dictionary for class ") or
43  o.startswith('Warning in <TEnvRec::ChangeValue>: duplicate entry'))]
44  )
45 
46  if sc != 0:
47  print (":: problem running pool_insertFileToCatalog:")
48  print (out)
49  return 2
50 
51  print (out)
52  print (":: inserting [%i] files into pool catalog... [done]"%len(files))
53  return sc
54 
55 if __name__ == "__main__":
56  import sys
57  from optparse import OptionParser
58  parser = OptionParser(usage="%prog file1.pool [file2.pool [...]] [--catalog='xmlcatalog_file:PoolFileCatalog.xml']")
59  parser.add_option("-f", "--files",
60  dest = "files",
61  help = "(list of) files to be inserted in the catalog")
62  parser.add_option("--catalog",
63  dest = "catalog",
64  default = "xmlcatalog_file:PoolFileCatalog.xml",
65  help = "catalog connection string")
66  options, args = parser.parse_args()
67 
68  files = list()
69  if len(args) > 0:
70  files = [ arg for arg in args if arg[0] != "-" ]
71  pass
72 
73  if options.files is None and len(files) == 0:
74  str(parser.print_help() or "")
75  print (":: You have to provide at least one POOL file to insert:")
76  print (" shell> pool_insertFileToCatalog.py aod.pool")
77  sys.exit(1)
78 
79  if not (options.files is None):
80  import os
81  for f in options.files.split():
82  f = os.path.expandvars(os.path.expanduser(f))
83  files.append(f)
84 
85  sc = pool_insert(files=files, catalog_name=options.catalog)
86  sys.exit(sc)
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
str
Definition: BTagTrackIpAccessor.cxx:11
pool_insertFileToCatalog.pool_insert
def pool_insert(files, catalog_name="xmlcatalog_file:PoolFileCatalog.xml")
Definition: pool_insertFileToCatalog.py:23