4 import FWCore.ParameterSet.Config as cms 6 process = cms.Process("OfflineValidator") 8 .oO[datasetDefinition]Oo. 10 process.options = cms.untracked.PSet( 11 wantSummary = cms.untracked.bool(False), 12 Rethrow = cms.untracked.vstring("ProductNotFound"), # make this exception fatal 13 fileMode = cms.untracked.string('NOMERGE') # no ordering needed, but calls endRun/beginRun etc. at file boundaries 17 ## Messages & Convenience 19 process.load("FWCore.MessageLogger.MessageLogger_cfi") 20 process.MessageLogger.cerr = cms.untracked.PSet(placeholder = cms.untracked.bool(True)) 21 process.MessageLogger.cout = cms.untracked.PSet(INFO = cms.untracked.PSet( 22 reportEvery = cms.untracked.int32(1000) # every 1000th only 23 # limit = cms.untracked.int32(10) # or limit to 10 printouts... 25 process.MessageLogger.statistics.append('cout') 27 ############################################################# 28 ##select trigger bits 40 OR 41 29 ##AND NOT (36 OR 37 OR 38 OR 39) 30 ##trigger bit 0 is selecting crossing bunches (not in MC) 31 ########################################################## 32 process.load('L1TriggerConfig.L1GtConfigProducers.L1GtTriggerMaskTechTrigConfig_cff') 33 process.load('HLTrigger/HLTfilters/hltLevel1GTSeed_cfi') 36 process.bptxAnd = process.hltLevel1GTSeed.clone(L1TechTriggerSeeding = cms.bool(True), L1SeedsLogicalExpression = cms.string('0')) 38 #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))')) 41 process.load('HLTrigger.special.hltPhysicsDeclared_cfi') 42 process.hltPhysicsDeclared.L1GtReadoutRecordTag = 'gtDigis' 45 ############################################################# 46 ##select only high purity tracks 47 ##has to run first as necessary information 48 ##is only available in initial track selection 49 ##(Quality information is thrown away by the tracker refitters) 50 ########################################################## 51 import Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi 52 process.HighPuritySelector = Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi.AlignmentTrackSelector.clone( 53 applyBasicCuts = True, 55 src = '.oO[TrackCollection]Oo.', 56 trackQualities = ["highPurity"] 59 ############################################################### 60 ## Quality filters on the event (REAL DATA - FIRST COLLISIONS DEC09 ONLY!) 61 ## see https://twiki.cern.ch/twiki/bin/viewauth/CMS/TRKPromptFeedBack#Event_and_track_selection_recipe 62 ##NOT in PATH yet, to be commented in, if necessay 64 ######################################################### 65 ############################################################################ 66 ##Produce Primary Vertex Collection needed for later analysis 67 ############################################################################ 68 #process.load('TrackingTools/TransientTrack/TransientTrackBuilder_cfi') 69 #process.load("RecoVertex.PrimaryVertexProducer.OfflinePrimaryVertices_cfi") 70 #process.offlinePrimaryVertices.TrackLabel = 'ALCARECOTkAlMinBias' 72 process.oneGoodVertexFilter = cms.EDFilter("VertexSelector", 73 src = cms.InputTag("offlinePrimaryVertices"), 74 cut = cms.string("!isFake && ndof > 4 && abs(z) <= 15 && position.Rho <= 2"), # tracksSize() > 3 for the older cut 75 filter = cms.bool(True), # otherwise it won't filter the events, just produce an empty vertex collection. 80 process.FilterGoodEvents=cms.Sequence(#process.HighPuritySelector* 81 process.oneGoodVertexFilter) 84 process.noScraping= cms.EDFilter("FilterOutScraping", 85 src=cms.InputTag("ALCARECOTkAlMinBias"), 86 applyfilter = cms.untracked.bool(True), 87 debugOn = cms.untracked.bool(False), ## Or 'True' to get some per-event info 88 numtrack = cms.untracked.uint32(10), 89 thresh = cms.untracked.double(0.25) 91 #################################### 98 # TrackerTrackHitFilter takes as input the tracks/trajectories coming out from TrackRefitter1 99 process.load("RecoTracker.FinalTrackSelectors.TrackerTrackHitFilter_cff") 100 process.TrackerTrackHitFilter.src = 'TrackRefitter1' 102 #-- Alignment Track Selection 103 process.load("Alignment.CommonAlignmentProducer.AlignmentTrackSelector_cfi") 104 process.AlignmentTrackSelector.src = 'HitFilteredTracks' 105 process.AlignmentTrackSelector.filter = True 107 .oO[TrackSelectionTemplate]Oo. 109 #now we give the TrackCandidate coming out of the TrackerTrackHitFilter to the track producer 110 import RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff 111 process.HitFilteredTracks = RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff.ctfWithMaterialTracks.clone( 112 src = 'TrackerTrackHitFilter', 113 NavigationSchool = "", 115 ### TrajectoryInEvent = True, 116 TTRHBuilder = "WithAngleAndTemplate" 120 ## Load and Configure TrackRefitter1 123 process.load("RecoTracker.TrackProducer.TrackRefitters_cff") 126 # parameters for TrackRefitter 127 #process.load("RecoTracker.TrackProducer.RefitterWithMaterial_cff") 128 import RecoTracker.TrackProducer.TrackRefitters_cff 129 process.TrackRefitter1 = process.TrackRefitter.clone( 130 src = 'HighPuritySelector', 131 TrajectoryInEvent = True, 132 TTRHBuilder = "WithAngleAndTemplate", 133 NavigationSchool = "" 135 process.TrackRefitter2 = process.TrackRefitter1.clone( 136 # src = 'HitFilteredTracks') 137 src = 'AlignmentTrackSelector' 144 process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff") 146 .oO[LoadGlobalTagTemplate]Oo. 148 .oO[LorentzAngleTemplate]Oo. 153 process.load("Configuration.Geometry.GeometryDB_cff") 158 process.load("Configuration/StandardSequences/.oO[magneticField]Oo._cff") 162 ## to apply misalignments 163 #TrackerDigiGeometryESModule.applyAlignment = True 166 ## Load and Configure OfflineValidation and Output File 168 process.load("Alignment.OfflineValidation.TrackerOfflineValidation_.oO[offlineValidationMode]Oo._cff") 169 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..Tracks = 'TrackRefitter2' 170 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..trajectoryInput = 'TrackRefitter2' 171 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..moduleLevelHistsTransient = .oO[offlineModuleLevelHistsTransient]Oo. 172 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..moduleLevelProfiles = .oO[offlineModuleLevelProfiles]Oo. 173 process.TrackerOfflineValidation.oO[offlineValidationMode]Oo..stripYResiduals = .oO[stripYResiduals]Oo. 174 .oO[offlineValidationFileOutput]Oo. 179 process.p = cms.Path( 180 #process.triggerSelection* 181 process.offlineBeamSpot*process.HighPuritySelector*process.TrackRefitter1*process.TrackerTrackHitFilter*process.HitFilteredTracks 182 *process.AlignmentTrackSelector*process.TrackRefitter2*process.seqTrackerOfflineValidation.oO[offlineValidationMode]Oo.) 189 mergeOfflineParJobsTemplate=
""" 190 #include "Alignment/OfflineValidation/scripts/merge_TrackerOfflineValidation.C" 192 int TkAlOfflineJobsMerge(TString pars, TString outFile) 194 // load framework lite just to find the CMSSW libs... 195 gSystem->Load("libFWCoreFWLite"); 196 FWLiteEnabler::enable(); 198 return hadd(pars, outFile); 205 offlineFileOutputTemplate =
""" 206 process.TFileService.fileName = '.oO[outputFile]Oo.' 211 offlineDqmFileOutputTemplate =
""" 212 process.TrackerOfflineValidationSummary.oO[offlineValidationMode]Oo..removeModuleLevelHists = .oO[offlineModuleLevelHistsTransient]Oo. 213 process.DqmSaverTkAl.workflow = '.oO[workflow]Oo.' 214 process.DqmSaverTkAl.dirName = '.oO[workdir]Oo./.' 215 process.DqmSaverTkAl.forceRunNumber = .oO[firstRunNumber]Oo. 226 LorentzAngleTemplate =
"#use lorentz angle from global tag" 231 TrackSelectionTemplate =
""" 232 #####default for MC tracks with now further corrections etc. 234 process.AlignmentTrackSelector.applyBasicCuts = True 235 # Note that pMin is overridden and set to zero in 236 # the offlineTemplate0T 237 process.AlignmentTrackSelector.pMin = 3 238 process.AlignmentTrackSelector.pMax = 9999. 239 process.AlignmentTrackSelector.ptMin = 0.65 240 process.AlignmentTrackSelector.ptMax = 9999. 241 process.AlignmentTrackSelector.etaMin = -999. 242 process.AlignmentTrackSelector.etaMax = 999. 243 process.AlignmentTrackSelector.nHitMin = 8 244 process.AlignmentTrackSelector.nHitMin2D = 2 245 process.AlignmentTrackSelector.chi2nMax = 999. 246 process.AlignmentTrackSelector.applyMultiplicityFilter = False 247 process.AlignmentTrackSelector.maxMultiplicity = 1 248 process.AlignmentTrackSelector.applyNHighestPt = False 249 process.AlignmentTrackSelector.nHighestPt = 1 250 process.AlignmentTrackSelector.seedOnlyFrom = 0 251 process.AlignmentTrackSelector.applyIsolationCut = False 252 process.AlignmentTrackSelector.minHitIsolation = 0.8 253 process.AlignmentTrackSelector.applyChargeCheck = False 254 process.AlignmentTrackSelector.minHitChargeStrip = 50. 255 #process.AlignmentTrackSelector.trackQualities = ["highPurity"] 256 #process.AlignmentTrackSelector.iterativeTrackingSteps = ["iter1","iter2"] 259 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 260 process.TrackerTrackHitFilter.minimumHits = 8 261 process.TrackerTrackHitFilter.commands = cms.vstring("keep PXB","keep PXE","keep TIB","keep TID","keep TOB","keep TEC") 262 process.TrackerTrackHitFilter.detsToIgnore = [] 263 process.TrackerTrackHitFilter.replaceWithInactiveHits = True 264 process.TrackerTrackHitFilter.stripAllInvalidHits = False 265 process.TrackerTrackHitFilter.rejectBadStoNHits = True 266 process.TrackerTrackHitFilter.StoNcommands = cms.vstring("ALL 12.0") 267 process.TrackerTrackHitFilter.rejectLowAngleHits= True 268 process.TrackerTrackHitFilter.TrackAngleCut= 0.17 # in rads, starting from the module surface 269 process.TrackerTrackHitFilter.usePixelQualityFlag= True 274 #for MC only trigger bit 40 is simulated 275 #no triger on bunch crossing bit 0 278 # process.triggerSelection=cms.Sequence(process.bit40) 285 extendedValidationExecution=
""" 286 #run extended offline validation scripts 287 echo -e "\n\nRunning extended offline validation" 289 rfcp .oO[extendedValScriptPath]Oo. . 290 root -x -b -q -l TkAlExtendedOfflineValidation.C 297 extendedValidationTemplate=
""" 298 #include "Alignment/OfflineValidation/macros/PlotAlignmentValidation.C" 299 #include "FWCore/FWLite/interface/FWLiteEnabler.h" 301 void TkAlExtendedOfflineValidation() 303 TkAlStyle::legendheader = ".oO[legendheader]Oo."; 304 TkAlStyle::legendoptions = ".oO[legendoptions]Oo."; 305 TkAlStyle::set(.oO[publicationstatus]Oo., .oO[era]Oo., ".oO[customtitle]Oo.", ".oO[customrighttitle]Oo."); 306 gStyle->SetTitleH ( 0.07 ); 307 gStyle->SetTitleW ( 1.00 ); 308 gStyle->SetTitleFont ( 132 ); 309 // load framework lite just to find the CMSSW libs... 310 gSystem->Load("libFWCoreFWLite"); 311 FWLiteEnabler::enable(); 313 .oO[extendedInstantiation]Oo. 314 p.setOutputDir(".oO[datadir]Oo./ExtendedOfflineValidation_Images"); 315 p.setTreeBaseDir(".oO[OfflineTreeBaseDir]Oo."); 316 p.plotDMR(".oO[DMRMethod]Oo.",.oO[DMRMinimum]Oo.,".oO[DMROptions]Oo."); 317 p.plotSurfaceShapes(".oO[SurfaceShapes]Oo."); 318 p.plotChi2("root://eoscms//eos/cms/store/caf/user/$USER/.oO[eosdir]Oo./.oO[resultPlotFile]Oo._result.root");