CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
offlineValidationTemplates.py
Go to the documentation of this file.
1 ######################################################################
2 ######################################################################
3 offlineTemplate = """
4 import FWCore.ParameterSet.Config as cms
5 
6 process = cms.Process("OfflineValidator")
7 
8 # process.load("Alignment.OfflineValidation..oO[dataset]Oo._cff")
9 .oO[datasetDefinition]Oo.
10 
11 process.options = cms.untracked.PSet(
12  wantSummary = cms.untracked.bool(False),
13  Rethrow = cms.untracked.vstring("ProductNotFound"), # make this exception fatal
14  fileMode = cms.untracked.string('NOMERGE') # no ordering needed, but calls endRun/beginRun etc. at file boundaries
15 )
16 
17 # ##
18 # ## Maximum number of Events
19 # ##
20 # process.maxEvents = cms.untracked.PSet(
21 # input = cms.untracked.int32(.oO[nEvents]Oo.)
22 # )
23 
24  ##
25  ## Messages & Convenience
26  ##
27 process.load("FWCore.MessageLogger.MessageLogger_cfi")
28 process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True))
29 process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet(
30 reportEvery = cms.untracked.int32(1000) # every 1000th only
31 # limit = cms.untracked.int32(10) # or limit to 10 printouts...
32 ))
33 process.MessageLogger.statistics.append('cout')
34 
35 #############################################################
36 ##select trigger bits 40 OR 41
37 ##AND NOT (36 OR 37 OR 38 OR 39)
38 ##trigger bit 0 is selecting crossing bunches (not in MC)
39 ##########################################################
40 process.load('L1TriggerConfig.L1GtConfigProducers.L1GtTriggerMaskTechTrigConfig_cff')
41 process.load('HLTrigger/HLTfilters/hltLevel1GTSeed_cfi')
42 
43 #Good Bunch Crossings
44 process.bptxAnd = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('0'))
45 #BSCNOBEAMHALO
46 #process.bit40 = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('(40 OR 41) AND NOT (36 OR 37 OR 38 OR 39) AND NOT ((42 AND NOT 43) OR (43 AND NOT 42))'))
47 
48 #Physics declared
49 process.load('HLTrigger.special.hltPhysicsDeclared_cfi')
50 process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis'
51 
52 
53 #############################################################
54 ##select only high purity tracks
55 ##has to run first as necessary information
56 ##is only available in initial track selection
57 ##(Quality information is thrown away by the tracker refitters)
58 ##########################################################
59 import Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi
60 process.HighPuritySelector = Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi.AlignmentTrackSelector.clone(
61  applyBasicCuts = True,
62  filter = True,
63  src = '.oO[TrackCollection]Oo.',
64  trackQualities = ["highPurity"]
65  )
66 
67 ###############################################################
68 ## Quality filters on the event (REAL DATA - FIRST COLLISIONS DEC09 ONLY!)
69 ## see https://twiki.cern.ch/twiki/bin/viewauth/CMS/TRKPromptFeedBack#Event_and_track_selection_recipe
70 ##NOT in PATH yet, to be commented in, if necessay
71 ##
72 #########################################################
73 ############################################################################
74 ##Produce Primary Vertex Collection needed for later analysis
75 ############################################################################
76 #process.load('TrackingTools/TransientTrack/TransientTrackBuilder_cfi')
77 #process.load("RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi")
78 #process.offlinePrimaryVertices.TrackLabel = 'ALCARECOTkAlMinBias'
79 
80 process.oneGoodVertexFilter = cms.EDFilter("VertexSelector",
81  src = cms.InputTag("offlinePrimaryVertices"),
82  cut = cms.string("!isFake && ndof > 4 && abs(z) <= 15 && position.Rho <= 2"), # tracksSize() > 3 for the older cut
83  filter = cms.bool(True), # otherwise it won't filter the events, just produce an empty vertex collection.
84  )
85 
86 
87 
88 process.FilterGoodEvents=cms.Sequence(#process.HighPuritySelector*
89 process.oneGoodVertexFilter)
90 
91 
92 process.noScraping= cms.EDFilter("FilterOutScraping",
93  src=cms.InputTag("ALCARECOTkAlMinBias"),
94  applyfilter = cms.untracked.bool(True),
95  debugOn = cms.untracked.bool(False), ## Or 'True' to get some per-event info
96  numtrack = cms.untracked.uint32(10),
97  thresh = cms.untracked.double(0.25)
98  )
99 ####################################
100 
101 
102 
103 
104 
105 #-- Track hit filter
106 # TrackerTrackHitFilter takes as input the tracks/trajectories coming out from TrackRefitter1
107 process.load("RecoTracker.FinalTrackSelectors.TrackerTrackHitFilter_cff")
108 process.TrackerTrackHitFilter.src = 'TrackRefitter1'
109 
110 #-- Alignment Track Selection
111 process.load("Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi")
112 process.AlignmentTrackSelector.src = 'HitFilteredTracks'
113 process.AlignmentTrackSelector.filter = True
114 
115 .oO[TrackSelectionTemplate]Oo.
116 
117 #now we give the TrackCandidate coming out of the TrackerTrackHitFilter to the track producer
118 import RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff
119 process.HitFilteredTracks = RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff.ctfWithMaterialTracks.clone(
120  src = 'TrackerTrackHitFilter',
121  NavigationSchool = "",
122 
123 ### TrajectoryInEvent = True,
124  TTRHBuilder = "WithAngleAndTemplate"
125 )
126 
127  ##
128  ## Load and Configure TrackRefitter1
129  ##
130 
131 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
132 
133 #############
134 # parameters for TrackRefitter
135 #process.load("RecoTracker.TrackProducer.RefitterWithMaterial_cff")
136 import RecoTracker.TrackProducer.TrackRefitters_cff
137 process.TrackRefitter1 = process.TrackRefitter.clone(
138  src = 'HighPuritySelector',
139  TrajectoryInEvent = True,
140  TTRHBuilder = "WithAngleAndTemplate",
141  NavigationSchool = ""
142 )
143 process.TrackRefitter2 = process.TrackRefitter1.clone(
144 # src = 'HitFilteredTracks')
145  src = 'AlignmentTrackSelector'
146 )
147 
148 
149  ##
150  ## Get the BeamSpot
151  ##
152 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
153 
154  ##
155  ## GlobalTag Conditions (if needed)
156  ##
157 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
158 process.GlobalTag.globaltag = ".oO[GlobalTag]Oo."
159 
160 
161 .oO[LorentzAngleTemplate]Oo.
162 
163  ##
164  ## Geometry
165  ##
166 process.load("Configuration.StandardSequences.Geometry_cff")
167 
168  ##
169  ## Magnetic Field
170  ##
171 process.load("Configuration/StandardSequences/MagneticField_38T_cff")
172 
173 .oO[condLoad]Oo.
174 
175 ## to apply misalignments
176 #TrackerDigiGeometryESModule.applyAlignment = True
177 
178  ##
179  ## Load and Configure OfflineValidation and Output File
180  ##
181 process.load("Alignment.OfflineValidation.TrackerOfflineValidation_.oO[offlineValidationMode]Oo._cff")
182 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..Tracks = 'TrackRefitter2'
183 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..trajectoryInput = 'TrackRefitter2'
184 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..moduleLevelHistsTransient = .oO[offlineModuleLevelHistsTransient]Oo.
185 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..moduleLevelProfiles = .oO[offlineModuleLevelProfiles]Oo.
186 .oO[offlineValidationFileOutput]Oo.
187 
188  ##
189  ## PATH
190  ##
191 process.p = cms.Path(
192 #process.triggerSelection*
193 process.offlineBeamSpot*process.HighPuritySelector*process.TrackRefitter1*process.TrackerTrackHitFilter*process.HitFilteredTracks
194 *process.AlignmentTrackSelector*process.TrackRefitter2*process.seqTrackerOfflineValidation.oO[offlineValidationMode]Oo.)
195 
196 """
197 
198 
199 ######################################################################
200 ######################################################################
201 offlineParallelTemplate = """
202 import FWCore.ParameterSet.Config as cms
203 
204 process = cms.Process("OfflineValidator")
205 
206 process.load("Alignment.OfflineValidation..oO[dataset]Oo._cff")
207 
208 process.options = cms.untracked.PSet(
209  wantSummary = cms.untracked.bool(False),
210  Rethrow = cms.untracked.vstring("ProductNotFound"), # make this exception fatal
211  fileMode = cms.untracked.string('NOMERGE') # no ordering needed, but calls endRun/beginRun etc. at file boundaries
212 )
213 
214  ##
215  ## Maximum number of Events
216  ## and number of events to be skipped
217  ## in case of parallel job nIndex
218  ## .oO[nIndex]Oo * .oO[nEvents]Oo/.oO[nJobs]Oo
219  ##
220 process.maxEvents = cms.untracked.PSet(
221  input = cms.untracked.int32(.oO[nEvents]Oo./.oO[nJobs]Oo.)
222  )
223 process.source.skipEvents=cms.untracked.uint32(.oO[nIndex]Oo.*.oO[nEvents]Oo./.oO[nJobs]Oo.)
224 
225  ##
226  ## Messages & Convenience
227  ##
228 process.load("FWCore.MessageLogger.MessageLogger_cfi")
229 process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True))
230 process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet(
231 reportEvery = cms.untracked.int32(1000) # every 1000th only
232 # limit = cms.untracked.int32(10) # or limit to 10 printouts...
233 ))
234 process.MessageLogger.statistics.append('cout')
235 
236 #############################################################
237 ##select trigger bits 40 OR 41
238 ##AND NOT (36 OR 37 OR 38 OR 39)
239 ##trigger bit 0 is selecting crossing bunches (not in MC)
240 ##########################################################
241 process.load('L1TriggerConfig.L1GtConfigProducers.L1GtTriggerMaskTechTrigConfig_cff')
242 process.load('HLTrigger/HLTfilters/hltLevel1GTSeed_cfi')
243 
244 #Good Bunch Crossings
245 process.bptxAnd = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('0'))
246 #BSCNOBEAMHALO
247 #process.bit40 = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('(40 OR 41) AND NOT (36 OR 37 OR 38 OR 39) AND NOT ((42 AND NOT 43) OR (43 AND NOT 42))'))
248 
249 #Physics declared
250 process.load('HLTrigger.special.hltPhysicsDeclared_cfi')
251 process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis'
252 
253 
254 #############################################################
255 ##select only high purity tracks
256 ##has to run first as necessary information
257 ##is only available in initial track selection
258 ##(Quality information is thrown away by the tracker refitters)
259 ##########################################################
260 import Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi
261 process.HighPuritySelector = Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi.AlignmentTrackSelector.clone(
262  applyBasicCuts = True,
263  filter = True,
264  src = '.oO[TrackCollection]Oo.',
265  trackQualities = ["highPurity"]
266  )
267 
268 ###############################################################
269 ## Quality filters on the event (REAL DATA - FIRST COLLISIONS DEC09 ONLY!)
270 ## see https://twiki.cern.ch/twiki/bin/viewauth/CMS/TRKPromptFeedBack#Event_and_track_selection_recipe
271 ##NOT in PATH yet, to be commented in, if necessay
272 ##
273 #########################################################
274 ############################################################################
275 ##Produce Primary Vertex Collection needed for later analysis
276 ############################################################################
277 #process.load('TrackingTools/TransientTrack/TransientTrackBuilder_cfi')
278 #process.load("RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi")
279 #process.offlinePrimaryVertices.TrackLabel = 'ALCARECOTkAlMinBias'
280 
281 process.oneGoodVertexFilter = cms.EDFilter("VertexSelector",
282  src = cms.InputTag("offlinePrimaryVertices"),
283  cut = cms.string("!isFake && ndof > 4 && abs(z) <= 15 && position.Rho <= 2"), # tracksSize() > 3 for the older cut
284  filter = cms.bool(True), # otherwise it won't filter the events, just produce an empty vertex collection.
285  )
286 
287 
288 
289 process.FilterGoodEvents=cms.Sequence(#process.HighPuritySelector*
290 process.oneGoodVertexFilter)
291 
292 
293 process.noScraping= cms.EDFilter("FilterOutScraping",
294  src=cms.InputTag("ALCARECOTkAlMinBias"),
295  applyfilter = cms.untracked.bool(True),
296  debugOn = cms.untracked.bool(False), ## Or 'True' to get some per-event info
297  numtrack = cms.untracked.uint32(10),
298  thresh = cms.untracked.double(0.25)
299  )
300 ####################################
301 
302 
303 
304 
305 
306 #-- Track hit filter
307 # TrackerTrackHitFilter takes as input the tracks/trajectories coming out from TrackRefitter1
308 process.load("RecoTracker.FinalTrackSelectors.TrackerTrackHitFilter_cff")
309 process.TrackerTrackHitFilter.src = 'TrackRefitter1'
310 
311 #-- Alignment Track Selection
312 process.load("Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi")
313 process.AlignmentTrackSelector.src = 'HitFilteredTracks'
314 process.AlignmentTrackSelector.filter = True
315 
316 .oO[TrackSelectionTemplate]Oo.
317 
318 #now we give the TrackCandidate coming out of the TrackerTrackHitFilter to the track producer
319 import RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff
320 process.HitFilteredTracks = RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff.ctfWithMaterialTracks.clone(
321  src = 'TrackerTrackHitFilter',
322  NavigationSchool = "",
323 
324 ### TrajectoryInEvent = True,
325  TTRHBuilder = "WithAngleAndTemplate"
326 )
327 
328  ##
329  ## Load and Configure TrackRefitter1
330  ##
331 
332 process.load("RecoTracker.TrackProducer.TrackRefitters_cff")
333 
334 #############
335 # parameters for TrackRefitter
336 #process.load("RecoTracker.TrackProducer.RefitterWithMaterial_cff")
337 import RecoTracker.TrackProducer.TrackRefitters_cff
338 process.TrackRefitter1 = process.TrackRefitter.clone(
339  src = 'HighPuritySelector',
340  TrajectoryInEvent = True,
341  TTRHBuilder = "WithAngleAndTemplate",
342  NavigationSchool = ""
343 )
344 process.TrackRefitter2 = process.TrackRefitter1.clone(
345 # src = 'HitFilteredTracks')
346  src = 'AlignmentTrackSelector'
347 )
348 
349 
350  ##
351  ## Get the BeamSpot
352  ##
353 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff")
354 
355  ##
356  ## GlobalTag Conditions (if needed)
357  ##
358 process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
359 process.GlobalTag.globaltag = ".oO[GlobalTag]Oo."
360 
361 
362 .oO[LorentzAngleTemplate]Oo.
363 
364  ##
365  ## Geometry
366  ##
367 process.load("Configuration.StandardSequences.Geometry_cff")
368 
369  ##
370  ## Magnetic Field
371  ##
372 process.load("Configuration/StandardSequences/MagneticField_38T_cff")
373 
374 .oO[condLoad]Oo.
375 
376 ## to apply misalignments
377 #TrackerDigiGeometryESModule.applyAlignment = True
378 
379  ##
380  ## Load and Configure OfflineValidation and Output File
381  ##
382 process.load("Alignment.OfflineValidation.TrackerOfflineValidation_.oO[offlineValidationMode]Oo._cff")
383 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..Tracks = 'TrackRefitter2'
384 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..trajectoryInput = 'TrackRefitter2'
385 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..moduleLevelHistsTransient = .oO[offlineModuleLevelHistsTransient]Oo.
386 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..moduleLevelProfiles = .oO[offlineModuleLevelProfiles]Oo.
387 .oO[offlineValidationFileOutput]Oo.
388 
389  ##
390  ## PATH
391  ##
392 process.p = cms.Path(
393 #process.triggerSelection*
394 process.offlineBeamSpot*process.HighPuritySelector*process.TrackRefitter1*process.TrackerTrackHitFilter*process.HitFilteredTracks
395 *process.AlignmentTrackSelector*process.TrackRefitter2*process.seqTrackerOfflineValidation.oO[offlineValidationMode]Oo.)
396 
397 """
398 
399 
400 ######################################################################
401 ######################################################################
402 mergeOfflineParallelResults="""
403 
404 # Merging works also if there is only one file to merge
405 # if merged file already exists it will be moved to a backup file (~)
406 
407 # run TkAlOfflinejobs.C
408 echo -e "\n\nMerging results from parallel jobs with TkAlOfflineJobsMerge.C"
409 #set directory to which TkAlOfflineJobsMerge.C saves the merged file
410 # export OUTPUTDIR=.oO[datadir]Oo.
411 export OUTPUTDIR=.
412 cp .oO[CMSSW_BASE]Oo./src/Alignment/OfflineValidation/scripts/merge_TrackerOfflineValidation.C .
413 .oO[haddLoop]Oo.
414 
415 # create log file
416 # ls -al .oO[datadir]Oo./AlignmentValidation*.root > .oO[datadir]Oo./log_rootfilelist.txt
417 ls -al AlignmentValidation*.root > .oO[datadir]Oo./log_rootfilelist.txt
418 
419 # Remove parallel job files
420 .oO[rmUnmerged]Oo.
421 """
422 
423 
424 ######################################################################
425 ######################################################################
426 mergeOfflineParJobsTemplate="""
427 int TkAlOfflineJobsMerge(TString pars, TString outFile)
428 {
429 // load framework lite just to find the CMSSW libs...
430 gSystem->Load("libFWCoreFWLite");
431 AutoLibraryLoader::enable();
432 //compile the macro
433 gROOT->ProcessLine(".L merge_TrackerOfflineValidation.C++");
434 
435 return hadd(pars, outFile);
436 }
437 """
438 
439 
440 ######################################################################
441 ######################################################################
442 offlineStandaloneFileOutputTemplate = """
443 process.TFileService.fileName = '.oO[outputFile]Oo.'
444 """
445 
446 ######################################################################
447 ######################################################################
448 offlineParallelFileOutputTemplate = """
449 process.TFileService.fileName = '.oO[outputFile]Oo.'
450 """
451 
452 ######################################################################
453 ######################################################################
454 offlineDqmFileOutputTemplate = """
455 process.TrackerOfflineValidationSummary.oO[offlineValidationMode]Oo..removeModuleLevelHists = .oO[offlineModuleLevelHistsTransient]Oo.
456 process.DqmSaverTkAl.workflow = '.oO[workflow]Oo.'
457 process.DqmSaverTkAl.dirName = '.oO[workdir]Oo./.'
458 process.DqmSaverTkAl.forceRunNumber = .oO[firstRunNumber]Oo.
459 """
460 #offlineDqmFileOutputTemplate = """
461 #process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..workflow = .oO[workflow]Oo.
462 #process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..dirName = .oO[workdir]Oo./.
463 #process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..forceRunNumber = .oO[firstRunNumber]Oo.
464 #"""
465 
466 
467 ######################################################################
468 ######################################################################
469 LorentzAngleTemplate = "#use lorentz angle from global tag"
470 
471 
472 ######################################################################
473 ######################################################################
474 TrackSelectionTemplate = """
475 #####default for MC tracks with now further corrections etc.
476 
477 process.AlignmentTrackSelector.applyBasicCuts = True
478 # Note that pMin is overridden and set to zero in
479 # the offlineTemplate0T
480 process.AlignmentTrackSelector.pMin = 3
481 process.AlignmentTrackSelector.pMax = 9999.
482 process.AlignmentTrackSelector.ptMin = 0.65
483 process.AlignmentTrackSelector.ptMax = 9999.
484 process.AlignmentTrackSelector.etaMin = -999.
485 process.AlignmentTrackSelector.etaMax = 999.
486 process.AlignmentTrackSelector.nHitMin = 8
487 process.AlignmentTrackSelector.nHitMin2D = 2
488 process.AlignmentTrackSelector.chi2nMax = 999.
489 process.AlignmentTrackSelector.applyMultiplicityFilter = False
490 process.AlignmentTrackSelector.maxMultiplicity = 1
491 process.AlignmentTrackSelector.applyNHighestPt = False
492 process.AlignmentTrackSelector.nHighestPt = 1
493 process.AlignmentTrackSelector.seedOnlyFrom = 0
494 process.AlignmentTrackSelector.applyIsolationCut = False
495 process.AlignmentTrackSelector.minHitIsolation = 0.8
496 process.AlignmentTrackSelector.applyChargeCheck = False
497 process.AlignmentTrackSelector.minHitChargeStrip = 50.
498 #process.AlignmentTrackSelector.trackQualities = ["highPurity"]
499 #process.AlignmentTrackSelector.iterativeTrackingSteps = ["iter1","iter2"]
500 
501 ##### For Hits:
502 process.TrackerTrackHitFilter.useTrajectories= True # this is needed only if you require some selections; but it will work even if you don't ask for them
503 process.TrackerTrackHitFilter.minimumHits = 8
504 process.TrackerTrackHitFilter.commands = cms.vstring("keep PXB","keep PXE","keep TIB","keep TID","keep TOB","keep TEC")
505 process.TrackerTrackHitFilter.detsToIgnore = [
506  # see https://hypernews.cern.ch/HyperNews/CMS/get/tracker-performance/484.html
507  # TIB / TID
508  #369136710, 369136714, 402668822,
509  # TOB
510  #436310989, 436310990, 436299301, 436299302,
511  # TEC
512  #470340521, 470063045, 470063046, 470114669, 470114670, 470161093, 470161094, 470164333, 470164334, 470312005, 470312006, 470312009, 470067405, 470067406, 470128813
513 ]
514 process.TrackerTrackHitFilter.replaceWithInactiveHits = True
515 process.TrackerTrackHitFilter.stripAllInvalidHits = False
516 process.TrackerTrackHitFilter.rejectBadStoNHits = True
517 process.TrackerTrackHitFilter.StoNcommands = cms.vstring("ALL 12.0")
518 process.TrackerTrackHitFilter.rejectLowAngleHits= True
519 process.TrackerTrackHitFilter.TrackAngleCut= 0.17 # in rads, starting from the module surface
520 process.TrackerTrackHitFilter.usePixelQualityFlag= True
521 
522 ##############
523 ##Trigger sequence
524 #############
525 #for MC only trigger bit 40 is simulated
526 #no triger on bunch crossing bit 0
527 
528 
529 # process.triggerSelection=cms.Sequence(process.bit40)
530 
531 """
532