Example #1
0
 def addJetSplitter(self, output, mumax, ymin, input, modifiersin ="groomed",
                    isTrigger =False, useTriggerStore =False, doArea =True):
   from JetRec.JetRecConf import JetSplitter
   from JetRec.JetRecConf import JetRecTool
   groomer = JetSplitter(output + "Groomer")
   groomer.MuMax = mumax
   groomer.YMin = ymin
   groomer.BDRS = False
   groomer.NSubjetMax = 3
   if doArea:
     groomer.JetBuilder = self.jetBuilderWithArea
   else:
     groomer.JetBuilder = self.jetBuilderWithoutArea
   self += groomer
   jetrec = JetRecTool(output)
   jetrec.JetGroomer = groomer
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   jetrec.JetModifiers = self.getModifiers(modifiersin)
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = jetFlags.timeJetRecTool()
   self += jetrec
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #2
0
 def addJetPruner(self,
                  output,
                  rcut,
                  zcut,
                  input,
                  modifiersin="groomed",
                  isTrigger=False,
                  useTriggerStore=False,
                  doArea=True):
     from JetRec.JetRecConf import JetPruner
     from JetRec.JetRecConf import JetRecTool
     groomer = JetPruner(output + "Groomer")
     groomer.RCut = rcut
     groomer.ZCut = zcut
     if doArea:
         groomer.JetBuilder = self.jetBuilderWithArea
     else:
         groomer.JetBuilder = self.jetBuilderWithoutArea
     self += groomer
     jetrec = JetRecTool(output)
     jetrec.JetGroomer = groomer
     jetrec.InputContainer = input
     jetrec.OutputContainer = output
     jetrec.JetModifiers = self.getModifiers(modifiersin)
     jetrec.Trigger = isTrigger or useTriggerStore
     jetrec.Timer = jetFlags.timeJetRecTool()
     self += jetrec
     if isTrigger:
         self.trigjetrecs += [jetrec]
     else:
         self.jetrecs += [jetrec]
     self.jetcons += [output]
     return jetrec
Example #3
0
 def addJetPruner(self, output, rcut, zcut, input, modifiersin ="groomed",
                  isTrigger =False, useTriggerStore =False, doArea =True):
   from JetRec.JetRecConf import JetPruner
   from JetRec.JetRecConf import JetRecTool
   groomer = JetPruner(output + "Groomer")
   groomer.RCut = rcut
   groomer.ZCut = zcut
   if doArea:
     groomer.JetBuilder = self.jetBuilderWithArea
   else:
     groomer.JetBuilder = self.jetBuilderWithoutArea
   self += groomer
   jetrec = JetRecTool(output)
   jetrec.JetGroomer = groomer
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   jetrec.JetModifiers = self.getModifiers(modifiersin)
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = jetFlags.timeJetRecTool()
   self += jetrec
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #4
0
 def addJetSplitter(self,
                    output,
                    mumax,
                    ymin,
                    input,
                    modifiersin="groomed",
                    isTrigger=False,
                    useTriggerStore=False,
                    doArea=True):
     from JetRec.JetRecConf import JetSplitter
     from JetRec.JetRecConf import JetRecTool
     groomer = JetSplitter(output + "Groomer")
     groomer.MuMax = mumax
     groomer.YMin = ymin
     groomer.BDRS = False
     groomer.NSubjetMax = 3
     if doArea:
         groomer.JetBuilder = self.jetBuilderWithArea
     else:
         groomer.JetBuilder = self.jetBuilderWithoutArea
     self += groomer
     jetrec = JetRecTool(output)
     jetrec.JetGroomer = groomer
     jetrec.InputContainer = input
     jetrec.OutputContainer = output
     jetrec.JetModifiers = self.getModifiers(modifiersin)
     jetrec.Trigger = isTrigger or useTriggerStore
     jetrec.Timer = jetFlags.timeJetRecTool()
     self += jetrec
     if isTrigger:
         self.trigjetrecs += [jetrec]
     else:
         self.jetrecs += [jetrec]
     self.jetcons += [output]
     return jetrec
Example #5
0
 def addJetSplitter(self, output, mumax, ymin, input, modifiersin ="groomed",
                    isTrigger =False, useTriggerStore =False):
   if self.m_jetBuilder == None:
     self.msg(0, "Jet builder must be specified")
   from JetRec.JetRecConf import JetSplitter
   from JetRec.JetRecConf import JetRecTool
   groomer = JetSplitter(output + "Groomer")
   groomer.MuMax = mumax
   groomer.YMin = ymin
   groomer.BDRS = False
   groomer.NSubjetMax = 3
   groomer.JetBuilder = self.m_jetBuilder
   self += groomer
   jetrec = JetRecTool(output)
   jetrec.JetGroomer = groomer
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   jetrec.JetModifiers = self.getModifiers(modifiersin)
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = self.timer
   self += jetrec
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #6
0
 def addJetTrimmer(self, output, rclus, ptfrac, input, modifiersin ="groomed",
                   pseudojetRetriever ="jpjretriever",
                   isTrigger =False, useTriggerStore =False, doArea =True):
   from JetRec.JetRecConf import JetTrimmer
   from JetRec.JetRecConf import JetRecTool
   groomer = JetTrimmer(output + "Groomer")
   groomer.RClus = rclus
   groomer.PtFrac = ptfrac
   if doArea:
     groomer.JetBuilder = self.jetBuilderWithArea
   else:
     groomer.JetBuilder = self.jetBuilderWithoutArea
   self += groomer
   jetrec = JetRecTool(output)
   jetrec.JetGroomer = groomer
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   jetrec.JetModifiers = self.getModifiers(modifiersin)
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = jetFlags.timeJetRecTool()
   if pseudojetRetriever in self.tools:
     jetrec.JetPseudojetRetriever = self.tools[pseudojetRetriever]
   else:
     jetlog.info( "Requested jet pseudojet retriever is not a registered tool: " \
           + pseudojetRetriever )
     raise KeyError
   self += jetrec
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #7
0
 def addJetReclusterer(self, output, alg, radius, input, modifiersin =None,
                       consumers =None, ivtx =None,
                       ghostArea =0.0, ptmin =0.0, ptminFilter =0.0, rndseed =1,
                       isTrigger =False, useTriggerStore =False,
                       variableRMinRadius =-1.0, variableRMassScale =-1.0,
                       calibOpt ="", jetPseudojetCopier =""):
   self.msg(2, "Adding reclusterer")
   from JetRec.JetRecConf import JetRecTool
   from JetRec.JetRecConf import JetReclusterer
   # Retrieve/build the jet finder.
   lofinder,hifinder = self.addJetFinderTool(output+"Finder", alg, radius, ivtx, ghostArea, ptmin, rndseed, 
                                             variableRMinRadius, variableRMassScale)
   reclname = output + "Reclusterer"
   groomer = JetReclusterer(
     reclname,
     JetConstituentsRetriever = self.tools["jconretriever"],
     JetFinder = hifinder
   )
   self += groomer
   jetrec = JetRecTool(output)
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   jetrec.JetGroomer = groomer
   jetrec.JetModifiers = self.getModifiers(modifiersin)
   if consumers != None:
     jetrec.JetConsumers = consumers
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = jetFlags.timeJetRecTool()
   self += jetrec
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #8
0
 def addJetPruner(self, output, rcut, zcut, input, modifiersin ="groomed",
                  isTrigger =False, useTriggerStore =False):
   if self.m_jetBuilder == None:
     self.msg(0, "Jet builder must be specified")
   from JetRec.JetRecConf import JetPruner
   from JetRec.JetRecConf import JetRecTool
   groomer = JetPruner(output + "Groomer")
   groomer.RCut = rcut
   groomer.ZCut = zcut
   groomer.JetBuilder = self.m_jetBuilder
   self += groomer
   jetrec = JetRecTool(output)
   jetrec.JetGroomer = groomer
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   jetrec.JetModifiers = self.getModifiers(modifiersin)
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = self.timer
   self += jetrec
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #9
0
 def addJetTrimmer(self, output, rclus, ptfrac, input, modifiersin ="groomed",
                   pseudojetRetriever ="jpjretriever",
                   isTrigger =False, useTriggerStore =False, doArea =True):
   from JetRec.JetRecConf import JetTrimmer
   from JetRec.JetRecConf import JetRecTool
   groomer = JetTrimmer(output + "Groomer")
   groomer.RClus = rclus
   groomer.PtFrac = ptfrac
   if doArea:
     groomer.JetBuilder = self.jetBuilderWithArea
   else:
     groomer.JetBuilder = self.jetBuilderWithoutArea
   self += groomer
   jetrec = JetRecTool(output)
   jetrec.JetGroomer = groomer
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   jetrec.JetModifiers = self.getModifiers(modifiersin)
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = jetFlags.timeJetRecTool()
   if pseudojetRetriever in self.tools:
     jetrec.JetPseudojetRetriever = self.tools[pseudojetRetriever]
   else:
     print "Requested jet pseudojet retriever is not a registered tool: " \
           + pseudojetRetriever
     raise KeyError
   self += jetrec
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #10
0
 def addJetReclusterer(self, output, alg, radius, input, modifiersin =None,
                       consumers =None, ivtx =None,
                       ghostArea =0.0, ptmin =0.0, ptminFilter =0.0, rndseed =1,
                       isTrigger =False, useTriggerStore =False,
                       variableRMinRadius =-1.0, variableRMassScale =-1.0,
                       calibOpt ="", jetPseudojetCopier =""):
   self.msg(2, "Adding reclusterer")
   from JetRec.JetRecConf import JetRecTool
   from JetRec.JetRecConf import JetReclusterer
   # Retrieve/build the jet finder.
   lofinder,hifinder = self.addJetFinderTool(output+"Finder", alg, radius, ivtx, ghostArea, ptmin, rndseed, 
                                             variableRMinRadius, variableRMassScale)
   reclname = output + "Reclusterer"
   groomer = JetReclusterer(
     reclname,
     JetConstituentsRetriever = self.tools["jconretriever"],
     JetFinder = hifinder
   )
   self += groomer
   jetrec = JetRecTool(output)
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   jetrec.JetGroomer = groomer
   jetrec.JetModifiers = self.getModifiers(modifiersin)
   if consumers != None:
     jetrec.JetConsumers = consumers
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = jetFlags.timeJetRecTool()
   self += jetrec
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #11
0
  def addJetFinder(self, output, alg, radius, gettersin, modifiersin =None,
                   consumers =None, ivtxin =None,
                   ghostArea =0.0, ptmin =0.0, ptminFilter =0.0, rndseed =1,
                   isTrigger =False, useTriggerStore =False,
                   variableRMinRadius =-1.0, variableRMassScale =-1.0,
                   calibOpt ="", jetPseudojetCopier ="",
                   warnIfDuplicate=True,
                   overwrite=False):
    self.msg(2, "Adding finder")
    from JetRec.JetRecConf import JetRecTool
    if type(gettersin) == str:
      getters = self.gettersMap[gettersin]
    else:
      getters = gettersin
    # If jet finding by vertex is not specified, check for special input type names
    ivtx = ivtxin
    if ivtx == None:
      if gettersin == "ztrack": ivtx = -1        # Find tracs separatesly for each vertex
      elif gettersin == "pv0track": ivtx = 0     # Find tracks only for 1st vertex
    # Retrieve/build the jet finder.
    lofinder,hifinder = self.addJetFinderTool(output+"Finder", alg, radius, ivtx, ghostArea, ptmin, rndseed, 
                                            variableRMinRadius, variableRMassScale)
    jetrec = JetRecTool(output)
    jetrec.PseudoJetGetters = getters
    jetrec.JetFinder = hifinder
    jetrec.OutputContainer = output
    ptminSave = self.ptminFilter
    if ptminFilter > 0.0: self.ptminFilter = ptminFilter
    jetrec.JetModifiers = self.buildModifiers(modifiersin, lofinder, getters, gettersin, output, calibOpt)
    if consumers != None:
      jetrec.JetConsumers = consumers
    self.ptminFilter = ptminSave
    jetrec.Trigger = isTrigger or useTriggerStore
    jetrec.Timer = jetFlags.timeJetRecTool()
    jetrec.WarnIfDuplicate = warnIfDuplicate
    jetrec.Overwrite = overwrite

    self += jetrec
    if isTrigger:
      self.trigjetrecs += [jetrec]
    else:
      self.jetrecs += [jetrec]
    self.jetcons += [output]
    return jetrec
Example #12
0
    def addJetCopier(self,
                     output,
                     input,
                     modifiersin,
                     ptminFilter=0.0,
                     radius=0.0,
                     alg="",
                     inp="",
                     isTrigger=False,
                     useTriggerStore=False,
                     calibOpt="",
                     shallow=True,
                     constmods=[]):
        from JetRec.JetRecConf import JetRecTool
        jetrec = JetRecTool(output)
        jetrec.InputContainer = input
        jetrec.OutputContainer = output
        ptminSave = self.ptminFilter
        if ptminFilter > 0.0: self.ptminFilter = ptminFilter

        class finder:
            JetRadius = radius
            JetAlgorithm = alg

        class get:
            Label = inp

        getters = [get]
        jetrec.JetModifiers = self.buildModifiers(modifiersin,
                                                  finder,
                                                  getters,
                                                  None,
                                                  output,
                                                  calibOpt,
                                                  constmods=constmods)
        self.autoconfigureModifiers(jetrec.JetModifiers, output)
        self.ptminFilter = ptminSave
        jetrec.Trigger = isTrigger or useTriggerStore
        jetrec.Timer = jetFlags.timeJetRecTool()
        ###    jetrec.ShallowCopy = shallow
        self += jetrec
        self.jetrecs += [jetrec]
        self.jetcons += [output]
        return jetrec
Example #13
0
  def addJetFinder(self, output, alg, radius, gettersin, modifiersin =None,
                   consumers =None, ivtxin =None,
                   ghostArea =0.0, ptmin =0.0, ptminFilter =0.0, rndseed =1,
                   isTrigger =False, useTriggerStore =False,
                   variableRMinRadius =-1.0, variableRMassScale =-1.0,
                   calibOpt ="", jetPseudojetCopier ="",
                   warnIfDuplicate=True,
                   overwrite=False):
    self.msg(2, "Adding finder")
    from JetRec.JetRecConf import JetRecTool
    if type(gettersin) == str:
      getters = self.gettersMap[gettersin]
    else:
      getters = gettersin
    # If jet finding by vertex is not specified, check for special input type names
    ivtx = ivtxin
    if ivtx == None:
      if gettersin == "ztrack": ivtx = -1        # Find tracs separatesly for each vertex
      elif gettersin == "pv0track": ivtx = 0     # Find tracks only for 1st vertex
    # Retrieve/build the jet finder.
    lofinder,hifinder = self.addJetFinderTool(output+"Finder", alg, radius, ivtx, ghostArea, ptmin, rndseed, 
                                            variableRMinRadius, variableRMassScale)
    jetrec = JetRecTool(output)
    jetrec.PseudoJetGetters = getters
    jetrec.JetFinder = hifinder
    jetrec.OutputContainer = output
    ptminSave = self.ptminFilter
    if ptminFilter > 0.0: self.ptminFilter = ptminFilter
    jetrec.JetModifiers = self.buildModifiers(modifiersin, lofinder, getters, gettersin, output, calibOpt)
    if consumers != None:
      jetrec.JetConsumers = consumers
    self.ptminFilter = ptminSave
    jetrec.Trigger = isTrigger or useTriggerStore
    jetrec.Timer = jetFlags.timeJetRecTool()
    jetrec.WarnIfDuplicate = warnIfDuplicate
    jetrec.Overwrite = overwrite

    self += jetrec
    if isTrigger:
      self.trigjetrecs += [jetrec]
    else:
      self.jetrecs += [jetrec]
    self.jetcons += [output]
    return jetrec
Example #14
0
 def addJetCopier(self, output, input, modifiersin, ptminFilter =0.0, radius =0.0, alg ="", inp ="",
                  isTrigger=False, useTriggerStore=False, calibOpt =""):
   from JetRec.JetRecConf import JetRecTool
   jetrec = JetRecTool(output)
   jetrec.InputContainer = input
   jetrec.OutputContainer = output
   ptminSave = self.ptminFilter
   if ptminFilter > 0.0: self.ptminFilter = ptminFilter
   class finder:
     JetRadius = radius
     JetAlgorithm = alg
   class get:
     Label = inp
   getters = [get]
   jetrec.JetModifiers = self.buildModifiers(modifiersin, finder, getters, None, output, calibOpt)
   self.ptminFilter = ptminSave
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = self.timer
   self += jetrec
   self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #15
0
    def addJetRecursiveSoftDrop(self,
                                output,
                                beta,
                                zcut,
                                N,
                                r0,
                                input,
                                modifiersin="groomed",
                                isTrigger=False,
                                useTriggerStore=False,
                                doArea=True):
        from JetRec.JetRecConf import JetRecursiveSoftDrop
        from JetRec.JetRecConf import JetRecTool

        groomer = JetRecursiveSoftDrop(output + "Groomer")
        groomer.ZCut = zcut
        groomer.Beta = beta
        groomer.N = N
        groomer.R0 = r0
        if doArea:
            groomer.JetBuilder = self.jetBuilderWithArea
        else:
            groomer.JetBuilder = self.jetBuilderWithoutArea
        self += groomer
        jetrec = JetRecTool(output)
        jetrec.JetGroomer = groomer
        jetrec.InputContainer = input
        jetrec.OutputContainer = output
        jetrec.JetModifiers = self.getModifiers(modifiersin)
        self.autoconfigureModifiers(jetrec.JetModifiers, output)
        jetrec.Trigger = isTrigger or useTriggerStore
        jetrec.Timer = jetFlags.timeJetRecTool()
        self += jetrec
        if isTrigger:
            self.trigjetrecs += [jetrec]
        else:
            self.jetrecs += [jetrec]
        self.jetcons += [output]
        return jetrec
Example #16
0
 def addJetFinder(self, output, alg, radius, gettersin, modifiersin =None, ivtxin =None,
                  ghostArea =0.0, ptmin =0.0, ptminFilter =0.0, rndseed =1,
                  isTrigger =False, useTriggerStore =False,
                  variableRMinRadius =-1.0, variableRMassScale =-1.0,
                  calibOpt =""):
   from JetRec.JetRecConf import JetByVertexFinder
   self.msg(2, "Adding finder")
   if ghostArea == 0.0:
     self.m_jetBuilder = self.jetBuilderWithoutArea
   else:
     self.m_jetBuilder = self.jetBuilderWithArea
   if self.m_jetBuilder == None:
     self.msg(0, "Jet builder must be specified")
     raise Error
   from JetRec.JetRecConf import JetFinder
   from JetRec.JetRecConf import JetSplitter
   from JetRec.JetRecConf import JetRecTool
   if type(gettersin) == str:
     getters = self.gettersMap[gettersin]
   else:
     getters = gettersin
   areaSuffix= "Area" if ghostArea>0.0 else ""
   finder = JetFinder(output + areaSuffix+ "Finder")
   finder.JetAlgorithm = alg
   finder.JetRadius = radius
   finder.VariableRMinRadius = variableRMinRadius
   finder.VariableRMassScale = variableRMassScale
   finder.RandomOption = rndseed
   finder.GhostArea = ghostArea
   if ptmin > 0.0:
     finder.PtMin = ptmin
   else:
     finder.PtMin = self.ptminFinder
   finder.JetBuilder = self.m_jetBuilder
   self += finder
   jrfinder = finder;
   # If jet finding by vertex is not specified, check for special input type names
   ivtx = ivtxin
   if ivtx == None:
     if gettersin == "ztrack": ivtx = -1        # Find tracs separatesly for each vertex
     elif gettersin == "pv0track": ivtx = 0     # Find tracks only for 1st vertex
   # If jet finding by vertex is requested, change the finder
   if type(ivtx) is int:
     vfinder = JetByVertexFinder(
       output + "VertexFinder",
       JetFinder = finder,
       Vertex = ivtx
     )
     self += vfinder
     jrfinder = vfinder;
   jetrec = JetRecTool(output)
   jetrec.PseudoJetGetters = getters
   jetrec.JetFinder = jrfinder
   jetrec.OutputContainer = output
   ptminSave = self.ptminFilter
   if ptminFilter > 0.0: self.ptminFilter = ptminFilter
   jetrec.JetModifiers = self.buildModifiers(modifiersin, finder, getters, gettersin, output, calibOpt)
   self.ptminFilter = ptminSave
   jetrec.Trigger = isTrigger or useTriggerStore
   jetrec.Timer = self.timer
   self += jetrec
   self.finders += [finder]
   if isTrigger:
     self.trigjetrecs += [jetrec]
   else:
     self.jetrecs += [jetrec]
   self.jetcons += [output]
   return jetrec
Example #17
0
    def addJetFinder(self,
                     output,
                     alg,
                     radius,
                     gettersin,
                     modifiersin=None,
                     consumers=None,
                     ivtxin=None,
                     ghostArea=0.0,
                     ptmin=0.0,
                     ptminFilter=0.0,
                     rndseed=1,
                     isTrigger=False,
                     useTriggerStore=False,
                     variableRMinRadius=-1.0,
                     variableRMassScale=-1.0,
                     calibOpt="",
                     jetPseudojetCopier="",
                     constmods=[]):
        self.msg(2, "Adding finder")
        from JetRec.JetRecConf import JetRecTool
        if type(gettersin) == str:
            getters = self.gettersMap[gettersin]
        else:
            getters = gettersin

        # Accumulate all PseudoJetGetters such that we can schedule all
        # needed PseudoJetAlgorithms before jet building
        self.allGetters += [
            getter for getter in getters if not getter in self.allGetters
        ]
        # If jet finding by vertex is not specified, check for special input type names
        ivtx = ivtxin
        if ivtx == None:
            if gettersin == "ztrack":
                ivtx = -1  # Find tracs separatesly for each vertex
            elif gettersin == "pv0track":
                ivtx = 0  # Find tracks only for 1st vertex
        # Retrieve/build the jet finder.
        lofinder, hifinder = self.addJetFinderTool(output + "Finder",
                                                   alg,
                                                   radius,
                                                   ivtx,
                                                   ghostArea,
                                                   ptmin,
                                                   rndseed,
                                                   variableRMinRadius,
                                                   variableRMassScale,
                                                   constmods=constmods)
        jetrec = JetRecTool(output)
        jetrec.InputPseudoJets = [getter.OutputContainer for getter in getters]
        jetrec.JetFinder = hifinder
        jetrec.OutputContainer = output
        ptminSave = self.ptminFilter
        if ptminFilter > 0.0: self.ptminFilter = ptminFilter
        jetrec.JetModifiers = self.buildModifiers(modifiersin,
                                                  lofinder,
                                                  getters,
                                                  gettersin,
                                                  output,
                                                  calibOpt,
                                                  constmods=constmods)
        self.autoconfigureModifiers(jetrec.JetModifiers, output)
        if consumers != None:
            jetrec.JetConsumers = consumers
        self.ptminFilter = ptminSave
        jetrec.Trigger = isTrigger or useTriggerStore
        jetrec.Timer = jetFlags.timeJetRecTool()
        #jetrec.WarnIfDuplicate = warnIfDuplicate
        #jetrec.Overwrite = overwrite
        # JetRecTool.OutputLevel = VERBOSE
        self += jetrec
        if isTrigger:
            self.trigjetrecs += [jetrec]
        else:
            self.jetrecs += [jetrec]
        self.jetcons += [output]
        return jetrec