Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-04-09 02:02:19

0001 #ifndef SimG4Core_Application_RunManagerMTWorker_H
0002 #define SimG4Core_Application_RunManagerMTWorker_H
0003 
0004 #include "FWCore/Utilities/interface/EDGetToken.h"
0005 
0006 #include "DataFormats/Provenance/interface/RunID.h"
0007 #include "SimDataFormats/Forward/interface/LHCTransportLinkContainer.h"
0008 
0009 #include "SimG4Core/Generators/interface/Generator.h"
0010 #include "SimG4Core/Generators/interface/Generator3.h"
0011 #include "SimG4Core/Notification/interface/TmpSimEvent.h"
0012 
0013 #include "MagneticField/Engine/interface/MagneticField.h"
0014 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0015 
0016 #include <memory>
0017 #include <unordered_map>
0018 #include <string>
0019 
0020 namespace edm {
0021   class ParameterSet;
0022   class Event;
0023   class EventSetup;
0024   class ConsumesCollector;
0025   class HepMCProduct;
0026   class HepMC3Product;
0027 }  // namespace edm
0028 
0029 class Generator;
0030 class RunManagerMT;
0031 
0032 class G4Event;
0033 class G4Run;
0034 class SimTrackManager;
0035 class CustomUIsession;
0036 
0037 class RunAction;
0038 class EventAction;
0039 class Phase2EventAction;
0040 class TrackingAction;
0041 class Phase2TrackingAction;
0042 class SteppingAction;
0043 class Phase2SteppingAction;
0044 class CMSSteppingVerbose;
0045 class CMSSimEventManager;
0046 class G4Field;
0047 
0048 class SensitiveTkDetector;
0049 class SensitiveCaloDetector;
0050 class SensitiveDetectorMakerBase;
0051 
0052 class SimWatcher;
0053 class SimProducer;
0054 
0055 class RunManagerMTWorker {
0056 public:
0057   explicit RunManagerMTWorker(const edm::ParameterSet& iConfig, edm::ConsumesCollector&& iC);
0058   ~RunManagerMTWorker();
0059 
0060   void beginRun(const edm::EventSetup&);
0061   void endRun();
0062 
0063   TmpSimEvent* produce(const edm::Event& inpevt, const edm::EventSetup& es, RunManagerMT& runManagerMaster);
0064 
0065   void abortEvent();
0066   void abortRun(bool softAbort = false);
0067 
0068   void Connect(RunAction*);
0069   void Connect(EventAction*);
0070   void Connect(Phase2EventAction*);
0071   void Connect(TrackingAction*);
0072   void Connect(Phase2TrackingAction*);
0073   void Connect(SteppingAction*);
0074   void Connect(Phase2SteppingAction*);
0075 
0076   SimTrackManager* getSimTrackManager();
0077   std::vector<SensitiveTkDetector*>& sensTkDetectors();
0078   std::vector<SensitiveCaloDetector*>& sensCaloDetectors();
0079   std::vector<std::shared_ptr<SimProducer>>& producers();
0080 
0081   void initializeG4(RunManagerMT* runManagerMaster, const edm::EventSetup& es);
0082 
0083   inline TmpSimEvent* simEvent() { return &m_simEvent; }
0084   inline int getThreadIndex() const { return m_thread_index; }
0085 
0086 private:
0087   void initializeTLS();
0088   void initializeUserActions();
0089   void initializeRun();
0090   void terminateRun();
0091 
0092   G4Event* generateEvent(const edm::Event& inpevt);
0093   void resetGenParticleId(const edm::Event& inpevt);
0094 
0095   void DumpMagneticField(const G4Field*, const std::string&) const;
0096 
0097   Generator m_generator;
0098   Generator3 m_generator3;
0099   edm::EDGetTokenT<edm::HepMCProduct> m_InToken;
0100   edm::EDGetTokenT<edm::HepMC3Product> m_InToken3;
0101   edm::EDGetTokenT<edm::HepMCProduct> m_LHCToken;
0102   edm::EDGetTokenT<edm::LHCTransportLinkContainer> m_theLHCTlinkToken;
0103   edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> m_MagField;
0104   const MagneticField* m_pMagField{nullptr};
0105 
0106   bool m_nonBeam{false};
0107   bool m_UseG4EventManager{true};
0108   bool m_pUseMagneticField{true};
0109   bool m_hasWatchers{false};
0110   bool m_LHCTransport{false};
0111   bool m_dumpMF{false};
0112   bool m_dumpGDML{false};
0113   bool m_endOfRun{false};
0114   bool m_isPhase2{false};
0115 
0116   const int m_thread_index{-1};
0117 
0118   edm::ParameterSet m_pField;
0119   edm::ParameterSet m_pRunAction;
0120   edm::ParameterSet m_pEventAction;
0121   edm::ParameterSet m_pStackingAction;
0122   edm::ParameterSet m_pTrackingAction;
0123   edm::ParameterSet m_pSteppingAction;
0124   std::vector<std::string> m_G4Commands;
0125   std::vector<std::string> m_G4CommandsEndRun;
0126   edm::ParameterSet m_p;
0127 
0128   struct TLSData;
0129   TLSData* m_tls{nullptr};
0130 
0131   CustomUIsession* m_UIsession{nullptr};
0132   TmpSimEvent m_simEvent;
0133   std::unique_ptr<CMSSimEventManager> m_evtManager;
0134   std::unique_ptr<CMSSteppingVerbose> m_sVerbose;
0135   std::unordered_map<std::string, std::unique_ptr<SensitiveDetectorMakerBase>> m_sdMakers;
0136 };
0137 
0138 #endif