CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
trackTools.py
Go to the documentation of this file.
2 
3 
5 
6  """ Create selected tracks and a candidate hypothesis on AOD:
7  """
8  _label='makeAODTrackCandidates'
9  _defaultParameters=dicttypes.SortedKeysDict()
10 
11  def __init__(self):
12  ConfigToolBase.__init__(self)
13  self.addParameter(self._defaultParameters,'label','TrackCands', "output collection will be <'patAOD'+label>")
14  self.addParameter(self._defaultParameters,'tracks',cms.InputTag('generalTracks'), 'input tracks')
15  self.addParameter(self._defaultParameters,'particleType','pi+', 'particle type (for mass)')
16  self.addParameter(self._defaultParameters,'candSelection','pt > 10', 'preselection cut on the candidates')
17 
18  self._parameters=copy.deepcopy(self._defaultParameters)
19  self._comment = ""
20 
22  return self._defaultParameters
23 
24  def __call__(self,process,
25  label = None,
26  tracks = None,
27  particleType = None,
28  candSelection = None) :
29  if label is None:
30  label=self._defaultParameters['label'].value
31  if tracks is None:
32  tracks=self._defaultParameters['tracks'].value
33  if particleType is None:
34  particleType=self._defaultParameters['particleType'].value
35  if candSelection is None:
36  candSelection=self._defaultParameters['candSelection'].value
37  self.setParameter('label',label)
38  self.setParameter('tracks',tracks)
39  self.setParameter('particleType',particleType)
40  self.setParameter('candSelection',candSelection)
41  self.apply(process)
42 
43  def toolCode(self, process):
44  label=self._parameters['label'].value
45  tracks=self._parameters['tracks'].value
46  particleType=self._parameters['particleType'].value
47  candSelection=self._parameters['candSelection'].value
48 
49  process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi");
50  ## add ChargedCandidateProducer from track
51  setattr(process, 'patAOD' + label + 'Unfiltered', cms.EDProducer("ConcreteChargedCandidateProducer",
52  src = tracks,
53  particleType = cms.string(particleType)
54  )
55  )
56  ## add CandViewSelector with preselection string
57  setattr(process, 'patAOD' + label, cms.EDFilter("CandViewSelector",
58  src = cms.InputTag('patAOD' + label + 'Unfiltered'),
59  cut = cms.string(candSelection)
60  )
61  )
62  ## run production of TrackCandidates at the very beginning of the sequence
63  process.patDefaultSequence.replace(process.patCandidates, getattr(process, 'patAOD' + label + 'Unfiltered') * getattr(process, 'patAOD' + label) * process.patCandidates)
64 
65 makeAODTrackCandidates=MakeAODTrackCandidates()
66 
67 
69 
70  """ Create pat track candidates from AOD track collections:
71  """
72  _label='makePATTrackCandidates'
73  _defaultParameters=dicttypes.SortedKeysDict()
74 
75  def __init__(self):
76  ConfigToolBase.__init__(self)
77  self.addParameter(self._defaultParameters,'label','TrackCands', "output will be 'all/selectedLayer1'+label")
78  self.addParameter(self._defaultParameters,'input',cms.InputTag('patAODTrackCands'), 'name of the input collection')
79  self.addParameter(self._defaultParameters,'selection','pt > 10', 'selection on PAT Layer 1 objects')
80  self.addParameter(self._defaultParameters,'isolation',{'tracker':0.3, 'ecalTowers':0.3, 'hcalTowers':0.3}, "solation to use (as 'source': value of dR)\ntracker : as muon iso from tracks\necalTowers : as muon iso from calo tower\nhcalTowers : as muon iso from calo towers",allowedValues=['tracker','ecalTowers','hcalTowers'])
81  self.addParameter(self._defaultParameters,'isoDeposits',['tracker','ecalTowers','hcalTowers'], 'iso deposits')
82  self.addParameter(self._defaultParameters,'mcAs',None, "eplicate mc match as the one used by PAT on this AOD collection (None=no mc match); choose 'photon', 'electron', 'muon', 'tau','jet', 'met' as input string",Type=str, allowedValues=['photon', 'electron', 'muon', 'tau','jet', 'met', None], acceptNoneValue = True)
83 
84  self._parameters=copy.deepcopy(self._defaultParameters)
85  self._comment = ""
86 
88  return self._defaultParameters
89 
90  def __call__(self,process,
91  label = None,
92  input = None,
93  selection = None,
94  isolation = None,
95  isoDeposits = None,
96  mcAs = None) :
97  if label is None:
98  label=self._defaultParameters['label'].value
99  if input is None:
100  input=self._defaultParameters['input'].value
101  if selection is None:
102  selection=self._defaultParameters['selection'].value
103  if isolation is None:
104  isolation=self._defaultParameters['isolation'].value
105  if isoDeposits is None:
106  isoDeposits=self._defaultParameters['isoDeposits'].value
107  if mcAs is None:
108  mcAs=self._defaultParameters['mcAs'].value
109  self.setParameter('label',label)
110  self.setParameter('input',input)
111  self.setParameter('selection',selection)
112  self.setParameter('isolation',isolation)
113  self.setParameter('isoDeposits',isoDeposits)
114  self.setParameter('mcAs',mcAs,True)
115  self.apply(process)
116 
117  def toolCode(self, process):
118  label=self._parameters['label'].value
119  input=self._parameters['input'].value
120  selection=self._parameters['selection'].value
121  isolation=self._parameters['isolation'].value
122  isoDeposits=self._parameters['isoDeposits'].value
123  mcAs=self._parameters['mcAs'].value
124 
125  ## add patTracks to the process
126  from PhysicsTools.PatAlgos.producersLayer1.genericParticleProducer_cfi import patGenericParticles
127  setattr(process, 'pat' + label, patGenericParticles.clone(src = input))
128  ## add selectedPatTracks to the process
129  setattr(process, 'selectedPat' + label, cms.EDFilter("PATGenericParticleSelector",
130  src = cms.InputTag("pat"+label),
131  cut = cms.string(selection)
132  )
133  )
134  ## add cleanPatTracks to the process
135  from PhysicsTools.PatAlgos.cleaningLayer1.genericTrackCleaner_cfi import cleanPatTracks
136  setattr(process, 'cleanPat' + label, cleanPatTracks.clone(src = cms.InputTag('selectedPat' + label)))
137 
138  ## get them as variables, so we can put them in the sequences and/or configure them
139  l1cands = getattr(process, 'pat' + label)
140  selectedL1cands = getattr(process, 'selectedPat' + label)
141  cleanL1cands = getattr(process, 'cleanPat' + label)
142 
143  ## insert them in sequence, after the electrons
144  process.patCandidates.replace(process.patElectrons, l1cands + process.patElectrons)
145  process.selectedPatCandidates.replace(process.selectedPatElectrons, process.selectedPatElectrons + selectedL1cands)
146  process.cleanPatCandidates.replace(process.cleanPatElectrons, process.cleanPatElectrons + cleanL1cands)
147 
148  ## add them to the Summary Tables
149  process.patCandidateSummary.candidates += [ cms.InputTag("allPat"+label) ]
150  process.selectedPatCandidateSummary.candidates += [ cms.InputTag("selectedPat"+label) ]
151  process.cleanPatCandidateSummary.candidates += [ cms.InputTag("cleanPat"+label) ]
152 
153  ## isolation: start with empty config
154  if(isolation or isoDeposits):
155  process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAlong_cfi")
156  process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorOpposite_cfi")
157  process.load("TrackPropagation.SteppingHelixPropagator.SteppingHelixPropagatorAny_cfi")
158  isoModules = []
159  runIsoDeps = {'tracker':False, 'caloTowers':False}
160 
161  for source,deltaR in isolation.items():
162  ## loop items in isolation
163  if(source == 'tracker'):
164  runIsoDeps['tracker'] = True
165  l1cands.userIsolation.tracker = cms.PSet(
166  src = cms.InputTag('pat'+label+'IsoDepositTracks'),
167  deltaR = cms.double(deltaR),
168  )
169  elif(source == 'ecalTowers'):
170  runIsoDeps['caloTowers'] = True
171  l1cands.userIsolation.ecal = cms.PSet(
172  src = cms.InputTag('pat'+label+'IsoDepositCaloTowers', 'ecal'),
173  deltaR = cms.double(deltaR),
174  )
175  elif(source == 'hcalTowers'):
176  runIsoDeps['caloTowers'] = True
177  l1cands.userIsolation.hcal = cms.PSet(
178  src = cms.InputTag('pat'+label+'IsoDepositCaloTowers', 'hcal'),
179  deltaR = cms.double(deltaR),
180  )
181 
182  for source in isoDeposits:
183  ## loop items in isoDeposits
184  if(source == 'tracker'):
185  runIsoDeps['tracker'] = True
186  l1cands.isoDeposits.tracker = cms.InputTag('pat'+label+'IsoDepositTracks')
187  elif(source == 'ecalTowers'):
188  runIsoDeps['caloTowers'] = True
189  l1cands.isoDeposits.ecal = cms.InputTag('pat'+label+'IsoDepositCaloTowers', 'ecal')
190  elif(source == 'hcalTowers'):
191  runIsoDeps['caloTowers'] = True
192  l1cands.isoDeposits.hcal = cms.InputTag('pat'+label+'IsoDepositCaloTowers', 'hcal')
193 
194  for dep in [ dep for dep,runme in runIsoDeps.items() if runme == True ]:
195  if(dep == 'tracker'):
196  from RecoMuon.MuonIsolationProducers.trackExtractorBlocks_cff import MIsoTrackExtractorCtfBlock
197  setattr(process, 'pat'+label+'IsoDepositTracks',
198  cms.EDProducer("CandIsoDepositProducer",
199  src = input,
200  trackType = cms.string('best'),
201  MultipleDepositsFlag = cms.bool(False),
202  ExtractorPSet = cms.PSet( MIsoTrackExtractorCtfBlock )
203  )
204  )
205  isoModules.append( getattr(process, 'pat'+label+'IsoDepositTracks') )
206  elif(dep == 'caloTowers'):
207  from RecoMuon.MuonIsolationProducers.caloExtractorByAssociatorBlocks_cff import MIsoCaloExtractorByAssociatorTowersBlock
208  setattr(process, 'pat'+label+'IsoDepositCaloTowers',
209  cms.EDProducer("CandIsoDepositProducer",
210  src = input,
211  trackType = cms.string('best'),
212  MultipleDepositsFlag = cms.bool(True),
213  ExtractorPSet = cms.PSet( MIsoCaloExtractorByAssociatorTowersBlock )
214  )
215  )
216  isoModules.append( getattr(process, 'pat'+label+'IsoDepositCaloTowers') )
217  for m in isoModules:
218  process.patDefaultSequence.replace(l1cands, m * l1cands)
219  # ES
220  process.load( 'TrackingTools.TrackAssociator.DetIdAssociatorESProducer_cff' )
221  # MC
222  from PhysicsTools.PatAlgos.tools.helpers import MassSearchParamVisitor
223  if(type(mcAs) != type(None)):
224  findMatch= []
225  findMatch.append(getattr(process, mcAs+'Match'))
226 
227  ## clone mc matchiong module of object mcAs and add it to the path
228  setattr(process, 'pat'+label+'MCMatch', findMatch[0].clone(src = input))
229  process.patDefaultSequence.replace( l1cands, getattr(process, 'pat'+label+'MCMatch') * l1cands)
230  l1cands.addGenMatch = True
231  l1cands.genParticleMatch = cms.InputTag('pat'+label+'MCMatch')
232 
233 
234 makePATTrackCandidates=MakePATTrackCandidates()
235 
236 
238  """ Create selected tracks and a candidate hypothesis on AOD:
239  """
240  _label='makeTrackCandidates'
241  _defaultParameters=dicttypes.SortedKeysDict()
242 
243  def __init__(self):
244  ConfigToolBase.__init__(self)
245  self.addParameter(self._defaultParameters,'label','TrackCands', "output collection will be <'patAOD'+label>")
246  self.addParameter(self._defaultParameters,'tracks',cms.InputTag('generalTracks'), 'input tracks')
247  self.addParameter(self._defaultParameters,'particleType','pi+', 'particle type (for mass)')
248  self.addParameter(self._defaultParameters,'preselection','pt > 10', 'preselection cut on the AOD candidates')
249  self.addParameter(self._defaultParameters,'selection','pt > 10', 'selection cut on the PAT candidates (for the selectedLayer1Candidate collection)')
250  self.addParameter(self._defaultParameters,'isolation',{'tracker':0.3, 'ecalTowers':0.3, 'hcalTowers':0.3}, "isolation to use (as 'source': value of dR)\ntracker : as muon iso from tracks\necalTowers : as muon iso from calo tower\nhcalTowers : as muon iso from calo towers",allowedValues=['tracker','ecalTowers','hcalTowers'])
251  self.addParameter(self._defaultParameters,'isoDeposits',['tracker','ecalTowers','hcalTowers'], 'iso deposits')
252  self.addParameter(self._defaultParameters,'mcAs',None, "eplicate mc match as the one used by PAT on this AOD collection (None=no mc match); choose 'photon', 'electron', 'muon', 'tau','jet', 'met' as input string",Type=str,allowedValues=['photon', 'electron', 'muon', 'tau','jet', 'met', None], acceptNoneValue = True)
253 
254  self._parameters=copy.deepcopy(self._defaultParameters)
255  self._comment = ""
256 
258  return self._defaultParameters
259 
260  def __call__(self,process,
261  label = None,
262  tracks = None,
263  particleType = None,
264  preselection = None,
265  selection = None,
266  isolation = None,
267  isoDeposits = None,
268  mcAs = None) :
269  if label is None:
270  label=self._defaultParameters['label'].value
271  if tracks is None:
272  tracks=self._defaultParameters['tracks'].value
273  if particleType is None:
274  particleType=self._defaultParameters['particleType'].value
275  if preselection is None:
276  preselection=self._defaultParameters['preselection'].value
277  if selection is None:
278  selection=self._defaultParameters['selection'].value
279  if isolation is None:
280  isolation=self._defaultParameters['isolation'].value
281  if isoDeposits is None:
282  isoDeposits=self._defaultParameters['isoDeposits'].value
283  if mcAs is None:
284  mcAs=self._defaultParameters['mcAs'].value
285  self.setParameter('label',label)
286  self.setParameter('tracks',tracks)
287  self.setParameter('particleType',particleType)
288  self.setParameter('preselection',preselection)
289  self.setParameter('selection',selection)
290  self.setParameter('isolation',isolation)
291  self.setParameter('isoDeposits',isoDeposits)
292  self.setParameter('mcAs',mcAs,True)
293  self.apply(process)
294 
295  def toolCode(self, process):
296  label=self._parameters['label'].value
297  tracks=self._parameters['tracks'].value
298  particleType=self._parameters['particleType'].value
299  preselection=self._parameters['preselection'].value
300  selection=self._parameters['selection'].value
301  isolation=self._parameters['isolation'].value
302  isoDeposits=self._parameters['isoDeposits'].value
303  mcAs=self._parameters['mcAs'].value
304 
305  makeAODTrackCandidates(process,
306  tracks = tracks,
307  particleType = particleType,
308  candSelection = preselection,
309  label = label
310  )
311  makePATTrackCandidates(process,
312  label = label,
313  input = cms.InputTag('patAOD' + label),
314  isolation = isolation,
315  isoDeposits = isoDeposits,
316  mcAs = mcAs,
317  selection = selection
318  )
319 
320 makeTrackCandidates=MakeTrackCandidates()
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
perl if(1 lt scalar(@::datatypes))
Definition: edlooper.cc:31