CMS 3D CMS Logo

VIDSelectorBase.py
Go to the documentation of this file.
1 from __future__ import print_function
2 import ROOT
3 import string
4 import random
5 import sys
6 
7 from PhysicsTools.SelectorUtils.centralIDRegistry import central_id_registry
8 from PhysicsTools.SelectorUtils.VIDCutFlowResult import VIDCutFlowResult
9 import DataFormats.FWLite
10 
11 # load FWLite C++ libraries
12 ROOT.gSystem.Load("libFWCoreFWLite.so");
13 ROOT.gSystem.Load("libDataFormatsFWLite.so");
14 ROOT.FWLiteEnabler.enable()
15 
16 config_template = """
17 import FWCore.ParameterSet.Config as cms
18 
19 from PhysicsTools.SelectorUtils.centralIDRegistry import central_id_registry
20 
21 ebCutOff = 1.479
22 
23 %s = %s
24 """
25 
26 def process_pset( builder, pythonpset, suffix ):
27  """ turn a python cms.PSet into a VID ID """
28  idname = pythonpset.idName.value().replace('-','_') + suffix
29  escaped_pset = config_template%(idname, pythonpset)
30 
31  return builder(escaped_pset,idname)
32 
33 def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
34  return ''.join(random.choice(chars) for _ in range(size))
35 
37  def __init__(self, vidSelectorBuilder, ptrMaker, printer, pythonpset = None):
38  self.__initialized = False
40  self.__printer = printer()
41  self.__ptrMaker = ptrMaker()
42  self.__selectorBuilder = vidSelectorBuilder()
43  self.__instance = None
44  if pythonpset is not None:
45  if hasattr(pythonpset,'isPOGApproved'):
46  approved = pythonpset.isPOGApproved.value()
47  if not approved:
48  sys.stderr.write('This ID is not POG approved and likely under development!!!!\n')
49  sys.stderr.write('Please make sure to report your progress with this ID'\
50  ' at the next relevant POG meeting.\n')
51  del pythonpset.isPOGApproved
52  else:
53  sys.stderr.write('This ID is not POG approved and likely under development!!!!\n')
54  sys.stderr.write('Please make sure to report your progress with this ID'\
55  ' at the next relevant POG meeting.\n')
56  self.__instance = process_pset( self.__selectorBuilder, pythonpset, self.__suffix )
57  expectedmd5 = central_id_registry.getMD5FromName(pythonpset.idName)
58  if expectedmd5 != self.md5String():
59  sys.stderr.write("ID: %s\n"%self.name())
60  sys.stderr.write("The expected md5: %s does not match the md5\n"%expectedmd5)
61  sys.stderr.write("calculated by the ID: %s please\n"%self.md5String())
62  sys.stderr.write("update your python configuration or determine the source\n")
63  sys.stderr.write("of transcription error!\n")
64  self.__initialized = True
65  else:
66  self.__instance = self.__selectorBuilder()
67 
68  def __call__(self,*args):
69  if( len(args) == 1 ):
70  return self.__instance(*args)
71  if( len(args) == 2 and isinstance(args[1],DataFormats.FWLite.Events) ):
72  return self.__instance(args[0],args[1].object().event())
73  elif( len(args) == 2 and isinstance(args[1], int) ):
74  temp = self.__ptrMaker(args[0],args[1])
75  newargs = [temp]
76  return self.__instance(*newargs)
77  if( len(args) == 3 and isinstance(args[1], int) and isinstance(args[2], DataFormats.FWLite.Events) ):
78  temp = self.__ptrMaker(args[0],args[1])
79  newargs = [temp]
80  newargs += [args[2].object().event()]
81  return self.__instance(*newargs)
82  raise ValueError('VIDSelectorBase __call__ with args: "%s" is not a valid call pattern'%(','.join([repr(arg) for arg in args])))
83 
84 
85  def initialize(self,pythonpset):
86  if( self.__initialized ):
87  print('VID Selector is already initialized, doing nothing!')
88  return
89  del process.__instance
90  if hasattr(pythonpset,'isPOGApproved'):
91  approved = pythonpset.isPOGApproved.value()
92  if not approved:
93  sys.stderr.write('This ID is not POG approved and likely under development!!!!\n')
94  sys.stderr.write('Please make sure to report your progress with this ID'\
95  ' at the next relevant POG meeting.\n')
96  del pythonpset.isPOGApproved
97  else:
98  sys.stderr.write('This ID is not POG approved and likely under development!!!!\n')
99  sys.stderr.write('Please make sure to report your progress with this ID'\
100  ' at the next relevant POG meeting.\n')
101  self.__instance = process_pset( self.__selectorBuilder, pythonpset, self.__suffix )
102  expectedmd5 = central_id_registry.getMD5FromName(pythonpset.idName)
103  if expectedmd5 != self.md5String():
104  sys.stderr.write("ID: %s\n"%self.name())
105  sys.stderr.write("The expected md5: %s does not match the md5\n"%expectedmd5)
106  sys.stderr.write("calculated by the ID: %s please\n"%self.md5String())
107  sys.stderr.write("update your python configuration or determine the source\n")
108  sys.stderr.write("of transcription error!\n")
109  self.__initialized = True
110 
111  def cutFlowSize(self):
112  return self.__instance.cutFlowSize()
113 
114  def cutFlowResult(self):
115  return VIDCutFlowResult(self.__instance.cutFlowResult())
116 
117  def howFarInCutFlow(self):
118  return self.__instance.howFarInCutFlow()
119 
120  def name(self):
121  return self.__instance.name()
122 
123  def bitMap(self):
124  return self.__instance.bitMap()
125 
126  def md5String(self):
127  return self.__instance.md5String()
128 
129  def md55Raw(self):
130  return self.__instance.md55Raw()
131 
132  def __repr__(self):
133  return self.__printer(self.__instance)
def replace(string, replacements)
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:65
def process_pset(builder, pythonpset, suffix)
def initialize(self, pythonpset)
def id_generator(size=6, chars=string.ascii_uppercase+string.digits)
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def __init__(self, vidSelectorBuilder, ptrMaker, printer, pythonpset=None)
Definition: event.py:1