Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-04-02 23:19:55

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