CMS 3D CMS Logo

LowPtTripletStep_cff.py
Go to the documentation of this file.
1 import FWCore.ParameterSet.Config as cms
2 from Configuration.Eras.Modifier_tracker_apv_vfp30_2016_cff import tracker_apv_vfp30_2016 as _tracker_apv_vfp30_2016
3 import RecoTracker.IterativeTracking.iterativeTkConfig as _cfg
4 from Configuration.Eras.Modifier_fastSim_cff import fastSim
5 
6 # NEW CLUSTERS (remove previously used clusters)
7 lowPtTripletStepClusters = _cfg.clusterRemoverForIter("LowPtTripletStep")
8 for _eraName, _postfix, _era in _cfg.nonDefaultEras():
9  _era.toReplaceWith(lowPtTripletStepClusters, _cfg.clusterRemoverForIter("LowPtTripletStep", _eraName, _postfix))
10 
11 # SEEDING LAYERS
13 lowPtTripletStepSeedLayers = RecoTracker.TkSeedingLayers.PixelLayerTriplets_cfi.PixelLayerTriplets.clone()
14 lowPtTripletStepSeedLayers.BPix.skipClusters = cms.InputTag('lowPtTripletStepClusters')
15 lowPtTripletStepSeedLayers.FPix.skipClusters = cms.InputTag('lowPtTripletStepClusters')
16 _layerListForPhase1 = [
17  'BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4',
18  'BPix1+BPix3+BPix4', 'BPix1+BPix2+BPix4',
19  'BPix2+BPix3+FPix1_pos', 'BPix2+BPix3+FPix1_neg',
20  'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg',
21  'BPix1+BPix3+FPix1_pos', 'BPix1+BPix3+FPix1_neg',
22  'BPix2+FPix1_pos+FPix2_pos', 'BPix2+FPix1_neg+FPix2_neg',
23  'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg',
24  'BPix1+BPix2+FPix2_pos', 'BPix1+BPix2+FPix2_neg',
25  'FPix1_pos+FPix2_pos+FPix3_pos', 'FPix1_neg+FPix2_neg+FPix3_neg',
26  'BPix1+FPix2_pos+FPix3_pos', 'BPix1+FPix2_neg+FPix3_neg',
27  'BPix1+FPix1_pos+FPix3_pos', 'BPix1+FPix1_neg+FPix3_neg'
28 ]
29 from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1
30 from Configuration.Eras.Modifier_trackingPhase1QuadProp_cff import trackingPhase1QuadProp
31 trackingPhase1.toModify(lowPtTripletStepSeedLayers, layerList = _layerListForPhase1)
32 trackingPhase1QuadProp.toModify(lowPtTripletStepSeedLayers, layerList = _layerListForPhase1)
33 
34 # combination with gap removed as only source of fakes in current geometry (kept for doc,=)
35 _layerListForPhase2 = ['BPix1+BPix2+BPix3', 'BPix2+BPix3+BPix4',
36 # 'BPix1+BPix3+BPix4', 'BPix1+BPix2+BPix4',
37  'BPix1+BPix2+FPix1_pos', 'BPix1+BPix2+FPix1_neg',
38  'BPix1+FPix1_pos+FPix2_pos', 'BPix1+FPix1_neg+FPix2_neg',
39 # 'BPix1+BPix2+FPix2_pos', 'BPix1+BPix2+FPix2_neg',
40  'FPix1_pos+FPix2_pos+FPix3_pos', 'FPix1_neg+FPix2_neg+FPix3_neg',
41 # 'BPix1+FPix1_pos+FPix3_pos', 'BPix1+FPix1_neg+FPix3_neg',
42  'FPix2_pos+FPix3_pos+FPix4_pos', 'FPix2_neg+FPix3_neg+FPix4_neg',
43  'FPix3_pos+FPix4_pos+FPix5_pos', 'FPix3_neg+FPix4_neg+FPix5_neg',
44  'FPix4_pos+FPix5_pos+FPix6_pos', 'FPix4_neg+FPix5_neg+FPix6_neg',
45 # removed as redunant and covering effectively only eta>4 (here for documentation, to be optimized after TDR)
46 # 'FPix5_pos+FPix6_pos+FPix7_pos', 'FPix5_neg+FPix6_neg+FPix7_neg',
47 # 'FPix6_pos+FPix7_pos+FPix8_pos', 'FPix6_neg+FPix7_neg+FPix8_neg'
48 ]
49 from Configuration.Eras.Modifier_trackingPhase2PU140_cff import trackingPhase2PU140
50 trackingPhase2PU140.toModify(lowPtTripletStepSeedLayers, layerList = _layerListForPhase2)
51 
52 # TrackingRegion
53 from RecoTracker.TkTrackingRegions.globalTrackingRegionFromBeamSpot_cfi import globalTrackingRegionFromBeamSpot as _globalTrackingRegionFromBeamSpot
54 lowPtTripletStepTrackingRegions = _globalTrackingRegionFromBeamSpot.clone(RegionPSet = dict(
55  ptMin = 0.2,
56  originRadius = 0.02,
57  nSigmaZ = 4.0
58 ))
59 trackingPhase1.toModify(lowPtTripletStepTrackingRegions, RegionPSet = dict(ptMin = 0.2))
60 trackingPhase1QuadProp.toModify(lowPtTripletStepTrackingRegions, RegionPSet = dict(ptMin = 0.35)) # FIXME: Phase1PU70 value, let's see if we can lower it to Run2 value (0.2)
61 trackingPhase2PU140.toModify(lowPtTripletStepTrackingRegions, RegionPSet = dict(ptMin = 0.40))
62 
63 from Configuration.Eras.Modifier_pp_on_XeXe_2017_cff import pp_on_XeXe_2017
64 from RecoTracker.TkTrackingRegions.globalTrackingRegionWithVertices_cff import globalTrackingRegionWithVertices as _globalTrackingRegionWithVertices
65 pp_on_XeXe_2017.toReplaceWith(lowPtTripletStepTrackingRegions,
66  _globalTrackingRegionWithVertices.clone(RegionPSet=dict(
67  fixedError = 0.2,
68  ptMin = 0.25,
69  originRadius = 0.02
70  )
71  )
72 )
73 
74 # seeding
75 from RecoTracker.TkHitPairs.hitPairEDProducer_cfi import hitPairEDProducer as _hitPairEDProducer
76 lowPtTripletStepHitDoublets = _hitPairEDProducer.clone(
77  seedingLayers = "lowPtTripletStepSeedLayers",
78  trackingRegions = "lowPtTripletStepTrackingRegions",
79  maxElement = 0,
80  produceIntermediateHitDoublets = True,
81 )
82 from RecoPixelVertexing.PixelTriplets.pixelTripletHLTEDProducer_cfi import pixelTripletHLTEDProducer as _pixelTripletHLTEDProducer
84 import RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi
85 lowPtTripletStepHitTriplets = _pixelTripletHLTEDProducer.clone(
86  doublets = "lowPtTripletStepHitDoublets",
87  produceSeedingHitSets = True,
88  SeedComparitorPSet = RecoPixelVertexing.PixelLowPtUtilities.LowPtClusterShapeSeedComparitor_cfi.LowPtClusterShapeSeedComparitor.clone()
89 )
90 from RecoTracker.TkSeedGenerator.seedCreatorFromRegionConsecutiveHitsEDProducer_cff import seedCreatorFromRegionConsecutiveHitsEDProducer as _seedCreatorFromRegionConsecutiveHitsEDProducer
91 lowPtTripletStepSeeds = _seedCreatorFromRegionConsecutiveHitsEDProducer.clone(
92  seedingHitSets = "lowPtTripletStepHitTriplets",
93 )
94 
95 from RecoPixelVertexing.PixelTriplets.caHitTripletEDProducer_cfi import caHitTripletEDProducer as _caHitTripletEDProducer
96 trackingPhase1.toModify(lowPtTripletStepHitDoublets, layerPairs = [0,1]) # layer pairs (0,1), (1,2)
97 trackingPhase1.toReplaceWith(lowPtTripletStepHitTriplets, _caHitTripletEDProducer.clone(
98  doublets = "lowPtTripletStepHitDoublets",
99  extraHitRPhitolerance = lowPtTripletStepHitTriplets.extraHitRPhitolerance,
100  SeedComparitorPSet = lowPtTripletStepHitTriplets.SeedComparitorPSet,
101  maxChi2 = dict(
102  pt1 = 0.8, pt2 = 2,
103  value1 = 70 , value2 = 8,
104  ),
105  useBendingCorrection = True,
106  CAThetaCut = 0.002,
107  CAPhiCut = 0.05,
108 ))
109 
110 trackingPhase2PU140.toModify(lowPtTripletStepHitDoublets, layerPairs = [0,1]) # layer pairs (0,1), (1,2)
111 trackingPhase2PU140.toReplaceWith(lowPtTripletStepHitTriplets, _caHitTripletEDProducer.clone(
112  doublets = "lowPtTripletStepHitDoublets",
113  extraHitRPhitolerance = lowPtTripletStepHitTriplets.extraHitRPhitolerance,
114  SeedComparitorPSet = lowPtTripletStepHitTriplets.SeedComparitorPSet,
115  maxChi2 = dict(
116  pt1 = 0.8, pt2 = 2,
117  value1 = 70 , value2 = 8,
118  ),
119  useBendingCorrection = True,
120  CAThetaCut = 0.002,
121  CAPhiCut = 0.05,
122 ))
123 
124 import FastSimulation.Tracking.TrajectorySeedProducer_cfi
125 _fastSim_lowPtTripletStepSeeds = FastSimulation.Tracking.TrajectorySeedProducer_cfi.trajectorySeedProducer.clone(
126  trackingRegions = "lowPtTripletStepTrackingRegions",
127  hitMasks = cms.InputTag("lowPtTripletStepMasks"),
128 )
129 
130 from FastSimulation.Tracking.SeedingMigration import _hitSetProducerToFactoryPSet
131 _fastSim_lowPtTripletStepSeeds.seedFinderSelector.pixelTripletGeneratorFactory = _hitSetProducerToFactoryPSet(lowPtTripletStepHitTriplets)
132 _fastSim_lowPtTripletStepSeeds.seedFinderSelector.pixelTripletGeneratorFactory.SeedComparitorPSet.ComponentName = "none"
133 _fastSim_lowPtTripletStepSeeds.seedFinderSelector.layerList = lowPtTripletStepSeedLayers.layerList.value()
134 #new for phase1
135 trackingPhase1.toModify(_fastSim_lowPtTripletStepSeeds, seedFinderSelector = dict(
136  pixelTripletGeneratorFactory = None,
137  CAHitTripletGeneratorFactory = _hitSetProducerToFactoryPSet(lowPtTripletStepHitTriplets).clone(SeedComparitorPSet = dict(ComponentName = "none")),
138  #new parameters required for phase1 seeding
139  BPix = dict(
140  TTRHBuilder = 'WithoutRefit',
141  HitProducer = 'TrackingRecHitProducer',
142  ),
143  FPix = dict(
144  TTRHBuilder = 'WithoutRefit',
145  HitProducer = 'TrackingRecHitProducer',
146  ),
147  layerPairs = lowPtTripletStepHitDoublets.layerPairs.value()
148  )
149 )
150 fastSim.toReplaceWith(lowPtTripletStepSeeds,_fastSim_lowPtTripletStepSeeds)
151 
152 # QUALITY CUTS DURING TRACK BUILDING
153 import TrackingTools.TrajectoryFiltering.TrajectoryFilter_cff as _TrajectoryFilter_cff
154 _lowPtTripletStepStandardTrajectoryFilterBase = _TrajectoryFilter_cff.CkfBaseTrajectoryFilter_block.clone(
155  minimumNumberOfHits = 3,
156  minPt = 0.075,
157 )
158 lowPtTripletStepStandardTrajectoryFilter = _lowPtTripletStepStandardTrajectoryFilterBase.clone(
159  maxCCCLostHits = 0,
160  minGoodStripCharge = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutLoose'))
161 )
162 from Configuration.Eras.Modifier_tracker_apv_vfp30_2016_cff import tracker_apv_vfp30_2016
163 _tracker_apv_vfp30_2016.toModify(lowPtTripletStepStandardTrajectoryFilter, maxCCCLostHits = 1)
164 from Configuration.Eras.Modifier_trackingLowPU_cff import trackingLowPU
165 trackingLowPU.toReplaceWith(lowPtTripletStepStandardTrajectoryFilter, _lowPtTripletStepStandardTrajectoryFilterBase)
166 trackingPhase2PU140.toReplaceWith(lowPtTripletStepStandardTrajectoryFilter, _lowPtTripletStepStandardTrajectoryFilterBase)
167 
168 pp_on_XeXe_2017.toModify(lowPtTripletStepStandardTrajectoryFilter, minPt=0.3)
169 
171 # Composite filter
172 lowPtTripletStepTrajectoryFilter = _TrajectoryFilter_cff.CompositeTrajectoryFilter_block.clone(
173  filters = [cms.PSet(refToPSet_ = cms.string('lowPtTripletStepStandardTrajectoryFilter')),
174  # cms.PSet(refToPSet_ = cms.string('ClusterShapeTrajectoryFilter'))
175  ]
176  )
177 trackingPhase2PU140.toModify(lowPtTripletStepTrajectoryFilter,
178  filters = lowPtTripletStepTrajectoryFilter.filters + [cms.PSet(refToPSet_ = cms.string('ClusterShapeTrajectoryFilter'))]
179 )
180 
181 lowPtTripletStepTrajectoryFilterInOut = lowPtTripletStepStandardTrajectoryFilter.clone(
182  minimumNumberOfHits = 4,
183  seedExtension = 1,
184  strictSeedExtension = False, # allow inactive
185  pixelSeedExtension = False,
186 )
187 
188 import RecoTracker.MeasurementDet.Chi2ChargeMeasurementEstimator_cfi
189 lowPtTripletStepChi2Est = RecoTracker.MeasurementDet.Chi2ChargeMeasurementEstimator_cfi.Chi2ChargeMeasurementEstimator.clone(
190  ComponentName = cms.string('lowPtTripletStepChi2Est'),
191  nSigma = cms.double(3.0),
192  MaxChi2 = cms.double(9.0),
193  clusterChargeCut = cms.PSet(refToPSet_ = cms.string('SiStripClusterChargeCutTight')),
194 )
195 _tracker_apv_vfp30_2016.toModify(lowPtTripletStepChi2Est,
196  clusterChargeCut = dict(refToPSet_ = "SiStripClusterChargeCutTiny")
197 )
198 
199 # TRACK BUILDING
201 lowPtTripletStepTrajectoryBuilder = RecoTracker.CkfPattern.GroupedCkfTrajectoryBuilder_cfi.GroupedCkfTrajectoryBuilder.clone(
202  MeasurementTrackerName = '',
203  trajectoryFilter = cms.PSet(refToPSet_ = cms.string('lowPtTripletStepTrajectoryFilter')),
204  maxCand = 4,
205  estimator = cms.string('lowPtTripletStepChi2Est'),
206  maxDPhiForLooperReconstruction = cms.double(2.0),
207  # 0.63 GeV is the maximum pT for a charged particle to loop within the 1.1m radius
208  # of the outermost Tracker barrel layer (with B=3.8T)
209  maxPtForLooperReconstruction = cms.double(0.7)
210  )
211 trackingLowPU.toModify(lowPtTripletStepTrajectoryBuilder, maxCand = 3)
212 trackingPhase2PU140.toModify(lowPtTripletStepTrajectoryBuilder,
213  inOutTrajectoryFilter = dict(refToPSet_ = "lowPtTripletStepTrajectoryFilterInOut"),
214  useSameTrajFilter = False,
215  maxCand = 3,
216 )
217 
218 # MAKING OF TRACK CANDIDATES
220 lowPtTripletStepTrackCandidates = RecoTracker.CkfPattern.CkfTrackCandidates_cfi.ckfTrackCandidates.clone(
221  src = cms.InputTag('lowPtTripletStepSeeds'),
222  ### these two parameters are relevant only for the CachingSeedCleanerBySharedInput
223  numHitsForSeedCleaner = cms.int32(50),
224  onlyPixelHitsForSeedCleaner = cms.bool(True),
225 
226  TrajectoryBuilderPSet = cms.PSet(refToPSet_ = cms.string('lowPtTripletStepTrajectoryBuilder')),
227  clustersToSkip = cms.InputTag('lowPtTripletStepClusters'),
228  doSeedingRegionRebuilding = True,
229  useHitsSplitting = True,
230  TrajectoryCleaner = 'lowPtTripletStepTrajectoryCleanerBySharedHits'
231 )
232 
233 trackingPhase2PU140.toModify(lowPtTripletStepTrackCandidates,
234  clustersToSkip = None,
235  phase2clustersToSkip = cms.InputTag("lowPtTripletStepClusters")
236 )
237 
238 import FastSimulation.Tracking.TrackCandidateProducer_cfi
239 fastSim.toReplaceWith(lowPtTripletStepTrackCandidates,
240  FastSimulation.Tracking.TrackCandidateProducer_cfi.trackCandidateProducer.clone(
241  src = cms.InputTag("lowPtTripletStepSeeds"),
242  MinNumberOfCrossedLayers = 3,
243  hitMasks = cms.InputTag("lowPtTripletStepMasks"))
244 )
245 
246 # TRACK FITTING
248 lowPtTripletStepTracks = RecoTracker.TrackProducer.TrackProducer_cfi.TrackProducer.clone(
249  src = 'lowPtTripletStepTrackCandidates',
250  AlgorithmName = cms.string('lowPtTripletStep'),
251  Fitter = cms.string('FlexibleKFFittingSmoother')
252  )
253 fastSim.toModify(lowPtTripletStepTracks, TTRHBuilder = 'WithoutRefit')
254 
255 from TrackingTools.TrajectoryCleaning.TrajectoryCleanerBySharedHits_cfi import trajectoryCleanerBySharedHits
256 lowPtTripletStepTrajectoryCleanerBySharedHits = trajectoryCleanerBySharedHits.clone(
257  ComponentName = cms.string('lowPtTripletStepTrajectoryCleanerBySharedHits'),
258  fractionShared = cms.double(0.16),
259  allowSharedFirstHit = cms.bool(True)
260  )
261 trackingLowPU.toModify(lowPtTripletStepTrajectoryCleanerBySharedHits, fractionShared = 0.19)
262 trackingPhase2PU140.toModify(lowPtTripletStepTrajectoryCleanerBySharedHits, fractionShared = 0.09)
263 
264 # Final selection
266 lowPtTripletStep = TrackMVAClassifierPrompt.clone()
267 lowPtTripletStep.src = 'lowPtTripletStepTracks'
268 lowPtTripletStep.mva.GBRForestLabel = 'MVASelectorIter1_13TeV'
269 lowPtTripletStep.qualityCuts = [-0.6,-0.3,-0.1]
270 
271 trackingPhase1.toReplaceWith(lowPtTripletStep, lowPtTripletStep.clone(
272  mva = dict(GBRForestLabel = 'MVASelectorLowPtTripletStep_Phase1'),
273  qualityCuts = [-0.4,0.0,0.3],
274 ))
275 trackingPhase1QuadProp.toReplaceWith(lowPtTripletStep, lowPtTripletStep.clone(
276  mva = dict(GBRForestLabel = 'MVASelectorLowPtTripletStep_Phase1'),
277  qualityCuts = [-0.4,0.0,0.3],
278 ))
279 fastSim.toModify(lowPtTripletStep, vertices = "firstStepPrimaryVerticesBeforeMixing")
280 
281 
282 # For LowPU and Phase2PU140
283 import RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi
284 lowPtTripletStepSelector = RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.multiTrackSelector.clone(
285  src = 'lowPtTripletStepTracks',
286  useAnyMVA = cms.bool(False),
287  GBRForestLabel = cms.string('MVASelectorIter1'),
288  trackSelectors= [
289  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone(
290  name = 'lowPtTripletStepLoose',
291  ), #end of pset
292  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.tightMTS.clone(
293  name = 'lowPtTripletStepTight',
294  preFilterName = 'lowPtTripletStepLoose',
295  ),
296  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.highpurityMTS.clone(
297  name = 'QualityMasks',
298  preFilterName = 'lowPtTripletStepTight',
299  ),
300  ] #end of vpset
301 ) #end of clone
302 trackingPhase2PU140.toModify(lowPtTripletStepSelector,
303  useAnyMVA = None,
304  GBRForestLabel = None,
305  trackSelectors= cms.VPSet(
306  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.looseMTS.clone(
307  name = 'lowPtTripletStepLoose',
308  chi2n_par = 1.2,
309  res_par = ( 0.003, 0.002 ),
310  minNumberLayers = 3,
311  maxNumberLostLayers = 2,
312  minNumber3DLayers = 3,
313  d0_par1 = ( 0.7, 4.0 ),
314  dz_par1 = ( 0.7, 4.0 ),
315  d0_par2 = ( 0.6, 4.0 ),
316  dz_par2 = ( 0.6, 4.0 )
317  ), #end of pset
318  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.tightMTS.clone(
319  name = 'lowPtTripletStepTight',
320  preFilterName = 'lowPtTripletStepLoose',
321  chi2n_par = 0.7,
322  res_par = ( 0.003, 0.002 ),
323  minNumberLayers = 3,
324  maxNumberLostLayers = 2,
325  minNumber3DLayers = 3,
326  d0_par1 = ( 0.6, 4.0 ),
327  dz_par1 = ( 0.6, 4.0 ),
328  d0_par2 = ( 0.5, 4.0 ),
329  dz_par2 = ( 0.5, 4.0 )
330  ),
331  RecoTracker.FinalTrackSelectors.multiTrackSelector_cfi.highpurityMTS.clone(
332  name = 'lowPtTripletStep',
333  preFilterName = 'lowPtTripletStepTight',
334  chi2n_par = 0.4,
335  res_par = ( 0.003, 0.001 ),
336  min_nhits = 3,
337  minNumberLayers = 4,
338  maxNumberLostLayers = 2,
339  minNumber3DLayers = 4,
340  d0_par1 = ( 0.5, 4.0 ),
341  dz_par1 = ( 0.5, 4.0 ),
342  d0_par2 = ( 0.45, 4.0 ),
343  dz_par2 = ( 0.45, 4.0 )
344  ),
345  ), #end of vpset
346 ) #end of clone
347 
348 
349 
350 # Final sequence
351 LowPtTripletStep = cms.Sequence(lowPtTripletStepClusters*
352  lowPtTripletStepSeedLayers*
353  lowPtTripletStepTrackingRegions*
354  lowPtTripletStepHitDoublets*
355  lowPtTripletStepHitTriplets*
356  lowPtTripletStepSeeds*
357  lowPtTripletStepTrackCandidates*
358  lowPtTripletStepTracks*
359  lowPtTripletStep)
360 _LowPtTripletStep_LowPU_Phase2PU140 = LowPtTripletStep.copy()
361 _LowPtTripletStep_LowPU_Phase2PU140.replace(lowPtTripletStep, lowPtTripletStepSelector)
362 trackingLowPU.toReplaceWith(LowPtTripletStep, _LowPtTripletStep_LowPU_Phase2PU140)
363 trackingPhase2PU140.toReplaceWith(LowPtTripletStep, _LowPtTripletStep_LowPU_Phase2PU140)
364 #fastsim
365 from FastSimulation.Tracking.FastTrackerRecHitMaskProducer_cfi import maskProducerFromClusterRemover
366 lowPtTripletStepMasks = maskProducerFromClusterRemover(lowPtTripletStepClusters)
367 fastSim.toReplaceWith(LowPtTripletStep,
368  cms.Sequence(lowPtTripletStepMasks
369  +lowPtTripletStepTrackingRegions
370  +lowPtTripletStepSeeds
371  +lowPtTripletStepTrackCandidates
372  +lowPtTripletStepTracks
373  +lowPtTripletStep
374  ))
COSMIC RUN SETTING.
def _hitSetProducerToFactoryPSet(producer)
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135