Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-09-12 10:20:43

0001 import FWCore.ParameterSet.Config as cms
0002 
0003 from SimG4Core.Application.hectorParameter_cfi import *
0004 
0005 ## HF Raddam Dose Class in /SimG4CMS/Calo
0006 from SimG4CMS.Calo.HFDarkeningParams_cff import *
0007 
0008 ## HF shower parameters
0009 from Geometry.HcalSimData.HFParameters_cff import *
0010 
0011 ## Modification needed for H2 TestBeam studies
0012 from Configuration.Eras.Modifier_h2tb_cff import h2tb
0013 
0014 ## This object is used to customise g4SimHits for different running scenarios
0015 
0016 common_heavy_suppression = cms.PSet(
0017     NeutronThreshold = cms.double(30.0),
0018     ProtonThreshold = cms.double(30.0),
0019     IonThreshold = cms.double(30.0)
0020 )
0021 
0022 common_maximum_time = cms.PSet(
0023     MaxTrackTime  = cms.double(500.0), # ns
0024     MaxTrackTimeForward = cms.double(2000.0), # ns
0025     MaxTimeNames  = cms.vstring(),
0026     MaxTrackTimes = cms.vdouble(),     # ns
0027     MaxZCentralCMS = cms.double(50.0), # m
0028     DeadRegions   = cms.vstring('QuadRegion','InterimRegion'),
0029     CriticalEnergyForVacuum = cms.double(2.0),   # MeV
0030     CriticalDensity         = cms.double(1e-15)  # g/cm3
0031 )
0032 
0033 h2tb.toModify(common_maximum_time,
0034     MaxTrackTime = cms.double(1000.0),
0035     DeadRegions  = cms.vstring()
0036 )
0037 
0038 common_UsePMT = cms.PSet(
0039     UseR7600UPMT  = cms.bool(False)
0040 )
0041 
0042 common_UseHF = cms.PSet(
0043     Lambda1       = cms.double(280.0),
0044     Lambda2       = cms.double(700.0),
0045     Gain          = cms.double(0.33),
0046     CheckSurvive  = cms.bool(False),
0047     FibreR        = cms.double(0.3)
0048 )
0049 
0050 common_UseLuminosity = cms.PSet(
0051     InstLuminosity  = cms.double(0.),
0052     DelivLuminosity = cms.double(5000.)
0053 )
0054 
0055 common_MCtruth = cms.PSet(
0056     DoFineCalo = cms.bool(False),
0057     SaveCaloBoundaryInformation = cms.bool(False),
0058     PersistencyEmin = cms.double(50.0), # in GeV
0059     RegionEmin = cms.vdouble(), # in GeV
0060     RegionEminName = cms.vstring(), # name of regions for reduced 
0061     # currently unused; left in place for future studies
0062     EminFineTrack = cms.double(10000.0), #in MeV
0063     FineCaloNames = cms.vstring('ECAL', 'HCal', 'HGCal', 'HFNoseVol', 'VCAL'),
0064     FineCaloLevels = cms.vint32(4, 4, 8, 3, 3),
0065     UseFineCalo = cms.vint32(2, 3),
0066 )
0067 
0068 ## enable fine calorimeter functionality: must occur *before* common PSet is used below
0069 from Configuration.ProcessModifiers.fineCalo_cff import fineCalo
0070 fineCalo.toModify(common_MCtruth,
0071     DoFineCalo = True,
0072     UseFineCalo = [2],
0073     EminFineTrack = 0.0,
0074 )
0075 
0076 ## enable CaloBoundary information for all Phase2 workflows
0077 from Configuration.Eras.Modifier_phase2_hgcal_cff import phase2_hgcal
0078 phase2_hgcal.toModify(common_MCtruth,
0079     SaveCaloBoundaryInformation = True
0080 )
0081 
0082 g4SimHits = cms.EDProducer("OscarMTProducer",
0083     g4GeometryDD4hepSource = cms.bool(False),
0084     NonBeamEvent = cms.bool(False),
0085     EventVerbose = cms.int32(0),
0086     UseG4EventManager = cms.bool(True),
0087     UseMagneticField = cms.bool(True),
0088     UseCommandBaseScorer = cms.bool(False),
0089     StoreRndmSeeds = cms.bool(False),
0090     RestoreRndmSeeds = cms.bool(False),
0091     PhysicsTablesDirectory = cms.untracked.string(''),
0092     StorePhysicsTables = cms.untracked.bool(False),
0093     RestorePhysicsTables = cms.untracked.bool(False),
0094     UseParametrisedEMPhysics = cms.untracked.bool(True),
0095     ThresholdForGeometryExceptions = cms.double(0.1), ## in GeV
0096     TraceExceptions = cms.bool(False),
0097     CheckGeometry = cms.untracked.bool(False),
0098     OnlySDs = cms.vstring('BSCSensitiveDetector','BCM1FSensitiveDetector','BHMSensitiveDetector','CTPPSDiamondSensitiveDetector','CTPPSSensitiveDetector','CaloTrkProcessing','CastorSensitiveDetector','EcalSensitiveDetector','HcalSensitiveDetector','MuonSensitiveDetector','PLTSensitiveDetector','RomanPotSensitiveDetector','TkAccumulatingSensitiveDetector','TotemSensitiveDetector','TotemT2ScintSensitiveDetector','ZdcSensitiveDetector'),
0099     TrackHits = cms.vstring('BCM1FHits','BHMHits','BSCHits','CTPPSPixelHits','CTPPSTimingHits','MuonCSCHits','MuonDTHits','MuonGEMHits','MuonME0Hits','MuonRPCHits','PLTHits','TotemHitsRP','TotemHitsT1','TrackerHitsPixelEndcapLowTof','TrackerHitsPixelEndcapHighTof','TrackerHitsPixelBarrelLowTof','TrackerHitsPixelBarrelHighTof','TrackerHitsTECLowTof','TrackerHitsTECHighTof','TrackerHitsTIBLowTof','TrackerHitsTIBHighTof','TrackerHitsTIDLowTof','TrackerHitsTIDHighTof','TrackerHitsTOBLowTof','TrackerHitsTOBHighTof'),
0100     CaloHits = cms.vstring('CaloHitsTk','CastorBU','CastorFI','CastorPL','CastorTU','EcalHitsEB','EcalHitsEE','EcalHitsES','HcalHits','ZDCHITS'),
0101     Init = cms.PSet(
0102         DefaultVoxelDensity = cms.double(2.0),
0103         VoxelRegions = cms.vstring(),
0104         VoxelDensityPerRegion = cms.vdouble()
0105     ),
0106     G4CheckOverlap = cms.untracked.PSet(
0107         OutputBaseName = cms.string('2022'),
0108         MaterialFlag = cms.bool(True),
0109         GeomFlag = cms.bool(True),
0110         OverlapFlag = cms.bool(False),
0111         RegionFlag = cms.bool(True),  # if true - selection by G4Region name
0112         gdmlFlag = cms.bool(False),   # if true - dump gdml file
0113         Verbose = cms.bool(True),
0114         Tolerance = cms.double(0.0),
0115         Resolution = cms.int32(10000),
0116         ErrorThreshold = cms.int32(1),
0117         Level = cms.int32(1),
0118         Depth = cms.int32(3),        # -1 means check whatever depth
0119         PVname = cms.string(''),
0120         LVname = cms.string(''),
0121         NodeName = cms.string(''),
0122         NodeNames = cms.vstring('World')
0123     ),
0124     G4Commands = cms.vstring(),
0125     G4CommandsEndRun = cms.vstring(),
0126     SteppingVerbosity = cms.untracked.int32(0),
0127     StepVerboseThreshold = cms.untracked.double(0.1), # in GeV
0128     VerboseEvents = cms.untracked.vint32(),
0129     VertexNumber  = cms.untracked.vint32(),
0130     VerboseTracks = cms.untracked.vint32(),
0131     FileNameField = cms.untracked.string(''),
0132     FileNameGDML = cms.untracked.string(''),
0133     FileNameRegions = cms.untracked.string(''),
0134     Watchers = cms.VPSet(),
0135     HepMCProductLabel = cms.InputTag("generatorSmeared"),
0136     theLHCTlinkTag = cms.InputTag("LHCTransport"),
0137     LHCTransport = cms.bool(False),
0138     CustomUIsession = cms.untracked.PSet(
0139         Type = cms.untracked.string("MessageLogger"), # alternatives: MessageLoggerThreadPrefix, FilePerThread
0140         ThreadPrefix = cms.untracked.string("W"),     # for MessageLoggerThreadPrefix
0141         ThreadFile = cms.untracked.string("sim_output_thread"), # for FilePerThread
0142     ),
0143     MagneticField = cms.PSet(
0144         UseLocalMagFieldManager = cms.bool(False),
0145         Verbosity = cms.bool(False),
0146         ConfGlobalMFM = cms.PSet(
0147             Volume = cms.string('OCMS'),
0148             OCMS = cms.PSet(
0149                 Stepper = cms.string('CMSTDormandPrince45'),
0150                 Type = cms.string('CMSIMField'),
0151                 StepperParam = cms.PSet(
0152                     VacRegions = cms.vstring(),
0153 #                   VacRegions = cms.vstring('DefaultRegionForTheWorld','BeamPipeVacuum','BeamPipeOutside'),
0154                     EnergyThTracker = cms.double(0.2),     ## in GeV
0155                     RmaxTracker = cms.double(8000),        ## in mm
0156                     ZmaxTracker = cms.double(11000),       ## in mm
0157                     MaximumEpsilonStep = cms.untracked.double(0.01),
0158                     DeltaOneStep = cms.double(0.001),      ## in mm
0159                     DeltaOneStepTracker = cms.double(1e-4),## in mm
0160                     MaximumLoopCounts = cms.untracked.double(1000.0),
0161                     DeltaChord = cms.double(0.002),        ## in mm
0162                     DeltaChordTracker = cms.double(0.001), ## in mm
0163                     MinStep = cms.double(0.1),             ## in mm
0164                     DeltaIntersectionAndOneStep = cms.untracked.double(-1.0),
0165                     DeltaIntersection = cms.double(0.0001),     ## in mm
0166                     DeltaIntersectionTracker = cms.double(1e-6),## in mm
0167                     MaxStep = cms.double(150.),            ## in cm
0168                     MinimumEpsilonStep = cms.untracked.double(1e-05),
0169                     EnergyThSimple = cms.double(0.015),    ## in GeV
0170                     DeltaChordSimple = cms.double(0.1),    ## in mm
0171                     DeltaOneStepSimple = cms.double(0.1),  ## in mm
0172                     DeltaIntersectionSimple = cms.double(0.01), ## in mm
0173                     MaxStepSimple = cms.double(50.),       ## in cm
0174                 )
0175             )
0176         ),
0177         delta = cms.double(1.0) ## in mm
0178     ),
0179     Physics = cms.PSet(
0180         common_maximum_time,
0181         # NOTE : if you want EM Physics only,
0182         #        please select "SimG4Core/Physics/DummyPhysics" for type
0183         #        and turn ON DummyEMPhysics
0184         #
0185         type = cms.string('SimG4Core/Physics/FTFP_BERT_EMH'),
0186         DummyEMPhysics = cms.bool(False),
0187         # 1 will print cuts as they get set from DD
0188         # 2 will do as 1 + will dump Geant4 table of cuts
0189         Verbosity = cms.untracked.int32(0),
0190         # EM physics options
0191         CutsPerRegion = cms.bool(True),
0192         CutsOnProton  = cms.bool(True),
0193         DefaultCutValue = cms.double(1.0), ## cuts in cm
0194         G4BremsstrahlungThreshold = cms.double(0.5), ## cut in GeV
0195         G4MuonBremsstrahlungThreshold = cms.double(10000.), ## cut in GeV
0196         G4TrackingCut = cms.double(0.025), ## cut in MeV
0197         G4MscRangeFactor = cms.double(0.04),
0198         G4MscGeomFactor = cms.double(2.5), 
0199         G4MscSafetyFactor = cms.double(0.6), 
0200         G4MscLambdaLimit = cms.double(1.0), # in mm 
0201         G4MscStepLimit = cms.string("UseSafety"),
0202         G4GammaGeneralProcess = cms.bool(True),
0203         G4ElectronGeneralProcess = cms.bool(False),
0204         G4TransportWithMSC = cms.int32(2),  # 1 - fEnabled, 2 - fMultipleSteps
0205         PhotoeffectBelowKShell = cms.bool(False),
0206         G4HepEmActive = cms.bool(False),
0207         G4MuonPairProductionByMuon = cms.bool(False),
0208         ReadMuonData = cms.bool(False), 
0209         Region      = cms.string(''),
0210         TrackingCut = cms.bool(False),
0211         SRType      = cms.bool(True),
0212         FlagMuNucl  = cms.bool(False),
0213         FlagFluo    = cms.bool(False),
0214         EMPhysics   = cms.untracked.bool(True),
0215         # Hadronic physics options
0216         HadPhysics  = cms.untracked.bool(True),
0217         FlagBERT    = cms.untracked.bool(False),
0218         EminFTFP    = cms.double(3.), # in GeV
0219         EmaxBERT    = cms.double(6.), # in GeV
0220         EminQGSP    = cms.double(12.), # in GeV
0221         EmaxFTFP    = cms.double(25.), # in GeV
0222         EmaxBERTpi  = cms.double(12.), # in GeV
0223         G4NeutronGeneralProcess = cms.bool(False),
0224         G4BCHadronicProcess = cms.bool(False),
0225         G4LightHyperNucleiTracking = cms.bool(False),
0226         ThermalNeutrons = cms.untracked.bool(False),
0227         # Exotica
0228         MonopoleCharge       = cms.untracked.int32(1),
0229         MonopoleDeltaRay     = cms.untracked.bool(True),
0230         MonopoleMultiScatter = cms.untracked.bool(False),
0231         MonopoleTransport    = cms.untracked.bool(True),
0232         MonopoleMass         = cms.untracked.double(0),
0233         ExoticaTransport     = cms.untracked.bool(False),
0234         ExoticaPhysicsSS     = cms.untracked.bool(False),
0235         RhadronPhysics       = cms.bool(False),
0236         DarkMPFactor         = cms.double(1.0),
0237         # GFlash methods
0238         LowEnergyGflashEcal = cms.bool(False),
0239         LowEnergyGflashEcalEmax = cms.double(0.02), # in GeV
0240         GflashEcal    = cms.bool(False),
0241         GflashHcal    = cms.bool(False),
0242         GflashEcalHad = cms.bool(False),
0243         GflashHcalHad = cms.bool(False),
0244         bField        = cms.double(3.8),
0245         energyScaleEB = cms.double(1.032),
0246         energyScaleEE = cms.double(1.024),
0247         # Russian roulette
0248         RusRoElectronEnergyLimit  = cms.double(0.0),
0249         RusRoEcalElectron         = cms.double(1.0),
0250         RusRoHcalElectron         = cms.double(1.0),
0251         RusRoMuonIronElectron     = cms.double(1.0),
0252         RusRoPreShowerElectron    = cms.double(1.0),
0253         RusRoCastorElectron       = cms.double(1.0),
0254         RusRoWorldElectron        = cms.double(1.0),
0255         # Tracking and step limiters
0256         ElectronStepLimit         = cms.bool(False),
0257         ElectronRangeTest         = cms.bool(False),
0258         PositronStepLimit         = cms.bool(False),
0259         ProtonRegionLimit         = cms.bool(False),
0260         PionRegionLimit           = cms.bool(False),
0261         LimitsPerRegion = cms.vstring('EcalRegion','HcalRegion'),
0262         EnergyLimitsE   = cms.vdouble(0.,0.0),
0263         EnergyLimitsH   = cms.vdouble(0.,0.0),
0264         EnergyFactorsE  = cms.vdouble(1.,0.0),
0265         EnergyRMSE      = cms.vdouble(0.0,0.0),
0266         MinStepLimit              = cms.double(1.0),
0267         ModifyTransportation      = cms.bool(False),
0268         ThresholdWarningEnergy    = cms.untracked.double(100.0), #in MeV
0269         ThresholdImportantEnergy  = cms.untracked.double(250.0), #in MeV
0270         ThresholdTrials           = cms.untracked.int32(10)
0271     ),
0272     Generator = cms.PSet(
0273         common_maximum_time,
0274         HectorEtaCut,
0275         HepMCProductLabel = cms.InputTag('generatorSmeared'),
0276         ApplyPCuts = cms.bool(True),
0277         ApplyPtransCut = cms.bool(False),
0278         MinPCut = cms.double(0.04), ## the cut is in GeV 
0279         MaxPCut = cms.double(99999.0), ## the pmax=99.TeV 
0280         ApplyEtaCuts = cms.bool(True),
0281         MinEtaCut = cms.double(-5.5),
0282         MaxEtaCut = cms.double(5.5),
0283         RDecLenCut = cms.double(2.9), ## (cm) the cut on vertex radius
0284         LDecLenCut = cms.double(30.0), ## (cm) decay volume length
0285         ApplyPhiCuts = cms.bool(False),
0286         MinPhiCut = cms.double(-3.14159265359), ## (radians)
0287         MaxPhiCut = cms.double(3.14159265359),  ## according to CMS conventions
0288         ApplyLumiMonitorCuts = cms.bool(False), ## primary for lumi monitors
0289         IsSlepton = cms.bool(False),
0290         Verbosity = cms.untracked.int32(0),
0291         PDGselection = cms.PSet(
0292             PDGfilterSel = cms.bool(False), ## filter out unwanted particles
0293             PDGfilter = cms.vint32(21,1,2,3,4,5,6) ## list of unwanted particles (gluons and quarks)
0294         )
0295     ),
0296     RunAction = cms.PSet(
0297         StopFile = cms.string('')
0298     ),
0299     EventAction = cms.PSet(
0300         debug = cms.untracked.bool(False),
0301         StopFile = cms.string(''),
0302         PrintRandomSeed = cms.bool(False),
0303         CollapsePrimaryVertices = cms.bool(False)
0304     ),
0305     StackingAction = cms.PSet(
0306         common_heavy_suppression,
0307         common_maximum_time,
0308         KillDeltaRay  = cms.bool(False),
0309         TrackNeutrino = cms.bool(False),
0310         KillHeavy     = cms.bool(False),
0311         KillGamma     = cms.bool(True),
0312         GammaThreshold = cms.double(0.0001), ## (MeV)
0313         SaveFirstLevelSecondary = cms.untracked.bool(False),
0314         SavePrimaryDecayProductsAndConversionsInTracker = cms.untracked.bool(False),
0315         SavePrimaryDecayProductsAndConversionsInCalo = cms.untracked.bool(False),
0316         SavePrimaryDecayProductsAndConversionsInMuon = cms.untracked.bool(False),
0317         SaveAllPrimaryDecayProductsAndConversions = cms.untracked.bool(True),
0318         RusRoGammaEnergyLimit  = cms.double(5.0), ## (MeV)
0319         RusRoEcalGamma         = cms.double(0.3),
0320         RusRoHcalGamma         = cms.double(0.3),
0321         RusRoMuonIronGamma     = cms.double(0.3),
0322         RusRoPreShowerGamma    = cms.double(0.3),
0323         RusRoCastorGamma       = cms.double(0.3),
0324         RusRoZDCGamma          = cms.double(0.3),
0325         RusRoHGcalGamma        = cms.double(1.3),
0326         RusRoWorldGamma        = cms.double(0.3),
0327         RusRoNeutronEnergyLimit  = cms.double(10.0), ## (MeV)
0328         RusRoEcalNeutron         = cms.double(0.1),
0329         RusRoHcalNeutron         = cms.double(0.1),
0330         RusRoMuonIronNeutron     = cms.double(0.1),
0331         RusRoPreShowerNeutron    = cms.double(0.1),
0332         RusRoCastorNeutron       = cms.double(0.1),
0333         RusRoZDCNeutron          = cms.double(0.1),
0334         RusRoHGcalNeutron        = cms.double(1.1),
0335         RusRoWorldNeutron        = cms.double(0.1),
0336         RusRoProtonEnergyLimit  = cms.double(0.0),
0337         RusRoEcalProton         = cms.double(1.0),
0338         RusRoHcalProton         = cms.double(1.0),
0339         RusRoMuonIronProton     = cms.double(1.0),
0340         RusRoPreShowerProton    = cms.double(1.0),
0341         RusRoCastorProton       = cms.double(1.0),
0342         RusRoWorldProton        = cms.double(1.0)
0343     ),
0344     TrackingAction = cms.PSet(
0345         common_MCtruth,
0346         DetailedTiming = cms.untracked.bool(False),
0347         CheckTrack = cms.untracked.bool(False),
0348         EndPrintTrackID = cms.int32(0)
0349     ),
0350     SteppingAction = cms.PSet(
0351         common_MCtruth,
0352         common_maximum_time,
0353         CMStoZDCtransport       = cms.bool(False),
0354         MaxNumberOfSteps        = cms.int32(20000),
0355         CMSName                 = cms.string('CMSE'),
0356         TrackerName             = cms.string('Tracker'),
0357         CaloName                = cms.string('CALO'),
0358         BTLName                 = cms.string('BarrelTimingLayer'),
0359         CMS2ZDCName             = cms.string('CMStoZDC'),
0360         EkinNames               = cms.vstring(),
0361         EkinThresholds          = cms.vdouble(),
0362         EkinParticles           = cms.vstring()
0363     ),
0364     TrackerSD = cms.PSet(
0365         ZeroEnergyLoss = cms.bool(False),
0366         PrintHits = cms.bool(False),
0367         ElectronicSigmaInNanoSeconds = cms.double(12.06),
0368         NeverAccumulate = cms.bool(False),
0369         EnergyThresholdForPersistencyInGeV = cms.double(0.2),
0370         EnergyThresholdForHistoryInGeV = cms.double(0.05)
0371     ),
0372     MuonSD = cms.PSet(
0373         EnergyThresholdForPersistency = cms.double(1.0), # in GeV
0374         PrintHits = cms.bool(False),
0375         AllMuonsPersistent = cms.bool(True),
0376         UseDemoHitRPC = cms.bool(True),
0377         UseDemoHitGEM = cms.bool(True),
0378         HaveDemoChambers = cms.bool(True),
0379         RemoveGEMHits = cms.vint32()
0380     ),
0381     CaloSD = cms.PSet(
0382         common_heavy_suppression,
0383         common_MCtruth,
0384         SuppressHeavy = cms.bool(False),
0385         EminTrack = cms.double(1.0),
0386         TmaxHit   = cms.double(1000.0),
0387         HCNames   = cms.vstring('EcalHitsEB','EcalHitsEE','EcalHitsES','HcalHits','ZDCHITS'),
0388         EminHits  = cms.vdouble(0.015,0.010,0.0,0.0,0.0),
0389         EminHitsDepth = cms.vdouble(0.0,0.0,0.0,0.0,0.0),
0390         TmaxHits  = cms.vdouble(500.0,500.0,500.0,500.0,2000.0),
0391         UseResponseTables = cms.vint32(0,0,0,0,0),
0392         BeamPosition      = cms.double(0.0),
0393         CorrectTOFBeam    = cms.bool(False),
0394         DetailedTiming    = cms.untracked.bool(False),
0395         UseMap            = cms.untracked.bool(False),
0396         Verbosity         = cms.untracked.int32(0),
0397         CheckHits         = cms.untracked.int32(25)
0398     ),
0399     CaloResponse = cms.PSet(
0400         UseResponseTable  = cms.bool(True),
0401         ResponseScale     = cms.double(1.0),
0402         ResponseFile      = cms.FileInPath('SimG4CMS/Calo/data/responsTBpim50.dat')
0403     ),
0404     ECalSD = cms.PSet(
0405         common_UseLuminosity,
0406         UseBirkLaw      = cms.bool(True),
0407         BirkL3Parametrization = cms.bool(True),
0408         BirkSlope       = cms.double(0.253694),
0409         BirkCut         = cms.double(0.1),
0410         BirkC1          = cms.double(0.03333),
0411         BirkC3          = cms.double(1.0),
0412         BirkC2          = cms.double(0.0),
0413         SlopeLightYield = cms.double(0.02),
0414         StoreSecondary  = cms.bool(False),
0415         TimeSliceUnit   = cms.double(1),
0416         IgnoreTrackID   = cms.bool(False),
0417         XtalMat         = cms.untracked.string('E_PbWO4'),
0418         TestBeam        = cms.untracked.bool(False),
0419         NullNumbering   = cms.untracked.bool(False),
0420         StoreRadLength  = cms.untracked.bool(False),
0421         ScaleRadLength  = cms.untracked.double(1.0),
0422         StoreLayerTimeSim = cms.untracked.bool(False),
0423         AgeingWithSlopeLY = cms.untracked.bool(False),
0424         Detectors         = cms.untracked.int32(3),
0425         DumpGeometry      = cms.untracked.int32(0)
0426         ),
0427     HCalSD = cms.PSet(
0428         common_UseLuminosity,
0429         UseBirkLaw                = cms.bool(True),
0430         # Values of Birks constants from NIM 80 (1970) 239-244:
0431         # as implemented in Geant3 required correction due to
0432         # biased computation of enery deposition
0433         BirkC3                    = cms.double(1.75),
0434         BirkC2                    = cms.double(0.142),
0435         BirkC1                    = cms.double(0.0060),
0436         UseShowerLibrary          = cms.bool(True),
0437         UseParametrize            = cms.bool(False),
0438         UsePMTHits                = cms.bool(False),
0439         UseFibreBundleHits        = cms.bool(False),
0440         TestNumberingScheme       = cms.bool(False),
0441         doNeutralDensityFilter    = cms.bool(False),
0442         EminHitHB                 = cms.double(0.0),
0443         EminHitHE                 = cms.double(0.0),
0444         EminHitHO                 = cms.double(0.0),
0445         EminHitHF                 = cms.double(0.0),
0446         BetaThreshold             = cms.double(0.7),
0447         TimeSliceUnit             = cms.double(1),
0448         IgnoreTrackID             = cms.bool(False),
0449         HBDarkening               = cms.bool(False),
0450         HEDarkening               = cms.bool(False),
0451         HFDarkening               = cms.bool(False),
0452         UseHF                     = cms.untracked.bool(True),
0453         ForTBH2                   = cms.untracked.bool(False),
0454         ForTBHCAL                 = cms.untracked.bool(False),
0455         UseLayerWt                = cms.untracked.bool(False),
0456         WtFile                    = cms.untracked.string('None'),
0457         TestNS                    = cms.untracked.bool(False),
0458         DumpGeometry              = cms.untracked.bool(False),
0459         HFDarkeningParameterBlock = HFDarkeningParameterBlock
0460     ),
0461     CaloTrkProcessing = cms.PSet(
0462         common_MCtruth,
0463         TestBeam   = cms.bool(False),
0464         EminTrack  = cms.double(0.01),
0465         PutHistory = cms.bool(False),
0466     ),
0467     HFShower = cms.PSet(
0468         common_UsePMT,
0469         common_UseHF,
0470         PEPerGeV          = cms.double(0.31),
0471         TrackEM           = cms.bool(False),
0472         UseShowerLibrary  = cms.bool(True),
0473         UseHFGflash       = cms.bool(False),
0474         EminLibrary       = cms.double(0.0),
0475         LambdaMean        = cms.double(350.0),
0476         ApplyFiducialCut  = cms.bool(True),
0477         RefIndex          = cms.double(1.459),
0478         Aperture          = cms.double(0.33),
0479         ApertureTrapped   = cms.double(0.22),
0480         CosApertureTrapped= cms.double(0.5),
0481         SinPsiMax         = cms.untracked.double(0.5),
0482         ParametrizeLast   = cms.untracked.bool(False),
0483         HFShowerBlock     = cms.PSet(refToPSet_ = cms.string("HFShowerBlock"))
0484     ),
0485     HFShowerLibrary = cms.PSet(
0486         HFLibraryFileBlock = cms.PSet(refToPSet_ = cms.string("HFLibraryFileBlock"))
0487     ),
0488     HFShowerPMT = cms.PSet(
0489         common_UsePMT,
0490         common_UseHF,
0491         PEPerGeVPMT       = cms.double(1.0),
0492         RefIndex          = cms.double(1.52),
0493         Aperture          = cms.double(0.99),
0494         ApertureTrapped   = cms.double(0.22),
0495         CosApertureTrapped= cms.double(0.5),
0496         SinPsiMax         = cms.untracked.double(0.5)
0497     ),
0498     HFShowerStraightBundle = cms.PSet(
0499         common_UsePMT,
0500         common_UseHF,
0501         FactorBundle      = cms.double(1.0),
0502         RefIndex          = cms.double(1.459),
0503         Aperture          = cms.double(0.33),
0504         ApertureTrapped   = cms.double(0.22),
0505         CosApertureTrapped= cms.double(0.5),
0506         SinPsiMax         = cms.untracked.double(0.5)
0507     ),
0508     HFShowerConicalBundle = cms.PSet(
0509         common_UsePMT,
0510         common_UseHF,
0511         FactorBundle      = cms.double(1.0),
0512         RefIndex          = cms.double(1.459),
0513         Aperture          = cms.double(0.33),
0514         ApertureTrapped   = cms.double(0.22),
0515         CosApertureTrapped= cms.double(0.5),
0516         SinPsiMax         = cms.untracked.double(0.5)
0517     ),
0518     HFGflash = cms.PSet(
0519         BField          = cms.untracked.double(3.8),
0520         WatcherOn       = cms.untracked.bool(True),
0521         FillHisto       = cms.untracked.bool(True)
0522     ),
0523     CastorSD = cms.PSet(
0524         useShowerLibrary               = cms.bool(True),
0525         minEnergyInGeVforUsingSLibrary = cms.double(1.0),
0526         nonCompensationFactor          = cms.double(0.817),
0527         Verbosity                      = cms.untracked.int32(0)
0528     ),
0529     CastorShowerLibrary =  cms.PSet(
0530         FileName  = cms.FileInPath('SimG4CMS/Forward/data/CastorShowerLibrary_CMSSW500_Standard.root'),
0531         BranchEvt = cms.untracked.string('hadShowerLibInfo.'),
0532         BranchEM  = cms.untracked.string('emParticles.'),
0533         BranchHAD = cms.untracked.string('hadParticles.'),
0534         Verbosity = cms.untracked.bool(False)
0535     ),
0536     BHMSD = cms.PSet(
0537          Verbosity = cms.untracked.int32(0)
0538     ),
0539     MtdSD = cms.PSet(
0540         Verbosity = cms.untracked.int32(0),
0541         TimeSliceUnit    = cms.double(0.01), #stepping = 10 ps (for timing)
0542         IgnoreTrackID    = cms.bool(False),
0543         EminHit          = cms.double(0.0),
0544         CheckID          = cms.untracked.bool(True),
0545         EnergyThresholdForPersistencyInGeV = cms.double(1e9), # keep temporarily old behaviour
0546         EnergyThresholdForHistoryInGeV = cms.double(1e9) # keep temporarily old behaviour)
0547     ),
0548     HGCSD = cms.PSet(
0549         Verbosity        = cms.untracked.int32(0),
0550         TimeSliceUnit    = cms.double(0.001), #stepping = 1 ps (for timing)
0551         IgnoreTrackID    = cms.bool(False),
0552         EminHit          = cms.double(0.0),
0553         FiducialCut      = cms.bool(False),
0554         DistanceFromEdge = cms.double(1.0),
0555         StoreAllG4Hits   = cms.bool(False),
0556         RejectMouseBite  = cms.bool(False),
0557         RotatedWafer     = cms.bool(False),
0558         CornerMinMask    = cms.int32(0),
0559         HitCollection    = cms.int32(1),
0560         WaferAngles      = cms.untracked.vdouble(90.0,30.0),
0561         WaferSize        = cms.untracked.double(123.7),
0562         MouseBite        = cms.untracked.double(2.5),
0563         CheckID          = cms.untracked.bool(False),
0564         UseDetector      = cms.untracked.int32(3),
0565         Detectors        = cms.untracked.int32(2),
0566         MissingWaferFile = cms.untracked.string("")
0567     ),
0568     HGCScintSD = cms.PSet(
0569         Verbosity        = cms.untracked.int32(0),
0570         EminHit          = cms.double(0.0),
0571         UseBirkLaw       = cms.bool(True),
0572         # Values of Birks constants from NIM 80 (1970) 239-244:
0573         # as implemented in Geant3 required correction due to
0574         # biased computation of enery deposition
0575         BirkC3           = cms.double(1.75),
0576         BirkC2           = cms.double(0.142),
0577         BirkC1           = cms.double(0.0060),
0578         FiducialCut      = cms.bool(False),
0579         DistanceFromEdge = cms.double(1.0),
0580         StoreAllG4Hits   = cms.bool(False),
0581         CheckID          = cms.untracked.bool(False),
0582         TileFileName     = cms.untracked.string("")
0583     ),
0584     HFNoseSD = cms.PSet(
0585         Verbosity        = cms.untracked.int32(0),
0586         TimeSliceUnit    = cms.double(0.001), #stepping = 1 ps (for timing)
0587         IgnoreTrackID    = cms.bool(False),
0588         EminHit          = cms.double(0.0),
0589         FiducialCut      = cms.bool(False),
0590         DistanceFromEdge = cms.double(1.0),
0591         StoreAllG4Hits   = cms.bool(False),
0592         RejectMouseBite  = cms.bool(False),
0593         RotatedWafer     = cms.bool(False),
0594         CornerMinMask    = cms.int32(0),
0595         WaferAngles      = cms.untracked.vdouble(90.0,30.0),
0596         CheckID          = cms.untracked.bool(True),
0597     ),
0598     TotemRPSD = cms.PSet(
0599         Verbosity = cms.int32(0)
0600     ),
0601     TotemSD = cms.PSet(
0602         Verbosity = cms.untracked.int32(0)
0603     ),
0604     TotemT2ScintSD = cms.PSet(
0605         UseBirkLaw    = cms.bool(True),
0606         BirkC3        = cms.double(1.75),
0607         BirkC2        = cms.double(0.142),
0608         BirkC1        = cms.double(0.006),
0609         TimeSliceUnit = cms.double(1),
0610         IgnoreTrackID = cms.bool(False),
0611     ),
0612     PPSDiamondSD = cms.PSet(
0613         Verbosity = cms.int32(0)
0614     ),
0615     PPSPixelSD = cms.PSet(
0616         Verbosity = cms.untracked.int32(0)
0617     ),
0618     ZdcSD = cms.PSet(
0619         Verbosity = cms.int32(0),
0620         UseShowerLibrary = cms.bool(False),
0621         UseShowerHits = cms.bool(True),
0622         FiberDirection = cms.double(45.0),
0623         ZdcHitEnergyCut = cms.double(10.0)
0624     ),
0625     ZdcShowerLibrary = cms.PSet(
0626         Verbosity = cms.untracked.int32(0)
0627     ),
0628     FP420SD = cms.PSet(
0629         Verbosity = cms.untracked.int32(2)
0630     ),
0631     BscSD = cms.PSet(
0632         Verbosity = cms.untracked.int32(0)
0633     ),
0634     PltSD = cms.PSet(
0635         EnergyThresholdForPersistencyInGeV = cms.double(0.2),
0636         EnergyThresholdForHistoryInGeV = cms.double(0.05)
0637     ),
0638     Bcm1fSD = cms.PSet(
0639         EnergyThresholdForPersistencyInGeV = cms.double(0.010),
0640         EnergyThresholdForHistoryInGeV = cms.double(0.005)
0641     ),
0642     HcalTB02SD = cms.PSet(
0643         UseBirkLaw = cms.untracked.bool(False),
0644         BirkC1 = cms.untracked.double(0.013),
0645         BirkC3 = cms.untracked.double(1.75),
0646         BirkC2 = cms.untracked.double(0.0568)
0647     ),
0648     EcalTBH4BeamSD = cms.PSet(
0649         UseBirkLaw = cms.bool(False),
0650         BirkC1 = cms.double(0.013),
0651         BirkC3 = cms.double(1.75),
0652         BirkC2 = cms.double(0.0568)
0653     ),
0654     HGCalTestBeamSD = cms.PSet(
0655         Material   = cms.string('Scintillator'),
0656         UseBirkLaw = cms.bool(False),
0657         BirkC1 = cms.double(0.013),
0658         BirkC3 = cms.double(1.75),
0659         BirkC2 = cms.double(0.0568),
0660     ),
0661     HcalTB06BeamSD = cms.PSet(
0662         UseBirkLaw = cms.bool(False),
0663         BirkC1 = cms.double(0.013),
0664         BirkC3 = cms.double(1.75),
0665         BirkC2 = cms.double(0.0568)
0666     ),
0667     AHCalSD = cms.PSet(
0668         UseBirkLaw      = cms.bool(True),
0669         BirkC3          = cms.double(1.75),
0670         BirkC2          = cms.double(0.142),
0671         BirkC1          = cms.double(0.0052),
0672         EminHit         = cms.double(0.0),
0673         TimeSliceUnit   = cms.double(1),
0674         IgnoreTrackID   = cms.bool(False),
0675     ),
0676 )
0677 ##
0678 ## Change the HFShowerLibrary file from Run 2
0679 ##
0680 from Configuration.Eras.Modifier_run2_common_cff import run2_common
0681 run2_common.toModify( g4SimHits, ZdcSD = dict(
0682     UseShowerLibrary = False,
0683     UseShowerHits = True,
0684     ZdcHitEnergyCut = 1.0 ) )
0685 
0686 ##
0687 ## Change HCAL numbering scheme in 2017
0688 ##
0689 from Configuration.Eras.Modifier_run2_HCAL_2017_cff import run2_HCAL_2017
0690 run2_HCAL_2017.toModify( g4SimHits, HCalSD = dict( TestNumberingScheme = True ) )
0691 
0692 ##
0693 ## Disable Castor from Run 3, enable PPS (***temporarily disable PPS***)
0694 ##
0695 from Configuration.Eras.Modifier_run3_common_cff import run3_common
0696 run3_common.toModify( g4SimHits, CastorSD = dict( useShowerLibrary = False ) ) 
0697 run3_common.toModify( g4SimHits, LHCTransport = True )
0698 run3_common.toModify( g4SimHits,
0699                       OnlySDs = ['BSCSensitiveDetector','BCM1FSensitiveDetector','BHMSensitiveDetector','CTPPSDiamondSensitiveDetector','CTPPSSensitiveDetector','CaloTrkProcessing','EcalSensitiveDetector','HcalSensitiveDetector','MuonSensitiveDetector','PLTSensitiveDetector','RomanPotSensitiveDetector','TkAccumulatingSensitiveDetector','TotemSensitiveDetector','TotemT2ScintSensitiveDetector','ZdcSensitiveDetector'],
0700                       TrackHits = ['BCM1FHits','BHMHits','BSCHits','CTPPSPixelHits','CTPPSTimingHits','MuonCSCHits','MuonDTHits','MuonGEMHits','MuonME0Hits','MuonRPCHits','PLTHits','TotemHitsRP','TotemHitsT1','TrackerHitsPixelEndcapLowTof','TrackerHitsPixelEndcapHighTof','TrackerHitsPixelBarrelLowTof','TrackerHitsPixelBarrelHighTof','TrackerHitsTECLowTof','TrackerHitsTECHighTof','TrackerHitsTIBLowTof','TrackerHitsTIBHighTof','TrackerHitsTIDLowTof','TrackerHitsTIDHighTof','TrackerHitsTOBLowTof','TrackerHitsTOBHighTof'],
0701                       CaloHits = ['CaloHitsTk','EcalHitsEB','EcalHitsEE','EcalHitsES','HcalHits','TotemHitsT2Scint','ZDCHITS'] )
0702 
0703 ##
0704 ## Disable PPS from Run 3 PbPb runs and enable ZDC 
0705 ##
0706 from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3
0707 from Configuration.Eras.Modifier_run3_upc_cff import run3_upc
0708 (pp_on_PbPb_run3 | run3_upc).toModify(g4SimHits, LHCTransport = False)
0709 #                         SteppingAction = dict(
0710 #                             CMStoZDCtransport = True) )
0711 
0712 ##
0713 ## Change ECAL time slices
0714 ##
0715 from Configuration.Eras.Modifier_phase2_timing_cff import phase2_timing
0716 phase2_timing.toModify( g4SimHits, ECalSD = dict(
0717     StoreLayerTimeSim = True,
0718     TimeSliceUnit = 0.001 ) )
0719 
0720 ##
0721 ## For ECAL component study
0722 ##
0723 from Configuration.ProcessModifiers.ecal_component_cff import ecal_component
0724 from Configuration.ProcessModifiers.ecal_component_finely_sampled_waveforms_cff import ecal_component_finely_sampled_waveforms
0725 (ecal_component | ecal_component_finely_sampled_waveforms).toModify(g4SimHits,ECalSD = dict(StoreLayerTimeSim = True, SlopeLightYield = 0.0))
0726 
0727 ##
0728 ## Change CALO Thresholds
0729 ##
0730 from Configuration.Eras.Modifier_h2tb_cff import h2tb
0731 h2tb.toModify(g4SimHits,
0732               OnlySDs = ['CaloTrkProcessing','EcalSensitiveDetector','FP420SensitiveDetector','HcalTB06BeamDetector','HcalSensitiveDetector'],
0733               TrackHits = ['FP420SI'],
0734               CaloHits = ['CaloHitsTk','ChamberHits','EcalHitsEB','EcalHitsEE','EcalHitsES','EcalTBH4BeamHits','FibreHits','HFNoseHits','HcalHits','HcalTB06BeamHits','WedgeHits'],
0735               ECalSD = dict(
0736                   TestBeam = True ),
0737               CaloSD = dict(
0738                   EminHits  = [0.0, 0.0, 0.0, 0.0, 0.0],
0739                   TmaxHits  = [1000.0, 1000.0, 1000.0, 1000.0, 2000.0] ),
0740               CaloTrkProcessing = dict(
0741                   TestBeam = True ),
0742               HCalSD = dict(
0743                   ForTBHCAL = True )
0744 )
0745 
0746 ##
0747 ## DD4hep migration
0748 ##
0749 from Configuration.ProcessModifiers.dd4hep_cff import dd4hep
0750 dd4hep.toModify( g4SimHits, 
0751                  g4GeometryDD4hepSource = True )
0752 
0753 ##
0754 ## Selection of SD's for Phase2, exclude PPS
0755 ##
0756 
0757 from Configuration.Eras.Modifier_phase2_common_cff import phase2_common
0758 phase2_common.toModify(g4SimHits,
0759                        OnlySDs = ['BCM1FSensitiveDetector','BHMSensitiveDetector','CTPPSDiamondSensitiveDetector','CTPPSSensitiveDetector','CaloTrkProcessing','EcalSensitiveDetector','HFNoseSensitiveDetector','HGCScintillatorSensitiveDetector','HGCalSensitiveDetector','HcalSensitiveDetector','MtdSensitiveDetector','MuonSensitiveDetector','PLTSensitiveDetector','RomanPotSensitiveDetector','TkAccumulatingSensitiveDetector','ZdcSensitiveDetector'],
0760                        TrackHits = ['BCM1FHits','BHMHits','CTPPSPixelHits','CTPPSTimingHits','FastTimerHitsBarrel','FastTimerHitsEndcap','HFNoseHits','MuonCSCHits','MuonDTHits','MuonGEMHits','MuonME0Hits','MuonRPCHits','PLTHits','TrackerHitsPixelEndcapLowTof','TrackerHitsPixelEndcapHighTof','TrackerHitsPixelBarrelLowTof','TrackerHitsPixelBarrelHighTof','TrackerHitsTECLowTof','TrackerHitsTECHighTof','TrackerHitsTIBLowTof','TrackerHitsTIBHighTof','TrackerHitsTIDLowTof','TrackerHitsTIDHighTof','TrackerHitsTOBLowTof','TrackerHitsTOBHighTof'],
0761                        CaloHits = ["CalibrationHGCHitsEE",'CalibrationHGCHitsHEback',"CalibrationHGCHitsHEfront",'CaloHitsTk','EcalHitsEB','HFNoseHits',"HGCHitsEE","HGCHitsHEback","HGCHitsHEfront",'HcalHits','ZDCHITS'],
0762                        LHCTransport = False, 
0763                        MuonSD = dict( 
0764                        HaveDemoChambers = False ) 
0765 )
0766 
0767 from Configuration.Eras.Modifier_hgcaltb_cff import hgcaltb
0768 hgcaltb.toModify(g4SimHits,
0769                  OnlySDs = ['AHcalSensitiveDetector','CaloTrkProcessing','HFNoseSensitiveDetector','HGCSensitiveDetector','HGCalSensitiveDetector','HGCalTB1601SensitiveDetector','HcalTB06BeamDetector'],
0770                  TrackHits = ['FP420SI'],
0771                  CaloHits = ['CalibrationHGCHitsEE','CalibrationHGCHitsHEback','CalibrationHGCHitsHEfront','CaloHitsTk','ChamberHits','HFNoseHits','HGCHitsEE','HGCHitsHEback','HGCHitsHEfront','HcalHits','HcalTB06BeamHits','WedgeHits'],
0772                  NonBeamEvent = True,
0773                  UseMagneticField = False,
0774                  CaloSD = dict(
0775                      EminHits  = [0.0, 0.0, 0.0, 0.0, 0.0],
0776                      TmaxHits  = [1000.0, 1000.0, 1000.0, 1000.0, 2000.0] ),
0777                  CaloTrkProcessing = dict(
0778                      TestBeam = True ),
0779                  HCalSD = dict(
0780                      ForTBHCAL = True)
0781 )
0782 
0783 from Configuration.Eras.Modifier_phase2_hgcalOnly_cff import phase2_hgcalOnly
0784 phase2_hgcalOnly.toModify(g4SimHits,
0785                        OnlySDs = ['CaloTrkProcessing','HGCScintillatorSensitiveDetector','HGCalSensitiveDetector'],
0786                        TrackHits = [],
0787                        CaloHits = ["CalibrationHGCHitsEE",'CalibrationHGCHitsHEback',"CalibrationHGCHitsHEfront","CaloHitsTk","HGCHitsEE","HGCHitsHEback","HGCHitsHEfront",],
0788                        LHCTransport = False
0789 )
0790 
0791 from Configuration.Eras.Modifier_phase2_hgcalV18_cff import phase2_hgcalV18
0792 phase2_hgcalV18.toModify(g4SimHits,
0793                  HGCSD = dict(
0794                      HitCollection = 2)
0795 )
0796 
0797 ##
0798 ## Fix for long-lived slepton simulation
0799 ##
0800 from Configuration.ProcessModifiers.fixLongLivedSleptonSim_cff import fixLongLivedSleptonSim
0801 fixLongLivedSleptonSim.toModify( g4SimHits,
0802                                  Generator = dict(IsSlepton = True)
0803 )