Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:30:31

0001 #ifndef SimG4Core_SensitiveDetector_H
0002 #define SimG4Core_SensitiveDetector_H
0003 
0004 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0005 #include "SimG4Core/Geometry/interface/SensitiveDetectorCatalog.h"
0006 #include "SimG4Core/Notification/interface/TrackInformation.h"
0007 
0008 #include "G4VSensitiveDetector.hh"
0009 
0010 #include <string>
0011 #include <cstdint>
0012 
0013 class G4Track;
0014 class G4Step;
0015 class G4HCofThisEvent;
0016 class G4TouchableHistory;
0017 class G4VPhysicalVolume;
0018 
0019 class SensitiveDetector : public G4VSensitiveDetector {
0020 public:
0021   explicit SensitiveDetector(const std::string& iname,
0022                              const SensitiveDetectorCatalog&,
0023                              bool calo,
0024                              const std::string& newcollname = "");
0025 
0026   ~SensitiveDetector() override;
0027 
0028   void Initialize(G4HCofThisEvent* eventHC) override;
0029   G4bool ProcessHits(G4Step* step, G4TouchableHistory* tHistory) override = 0;
0030   void EndOfEvent(G4HCofThisEvent* eventHC) override;
0031 
0032   virtual uint32_t setDetUnitId(const G4Step* step) = 0;
0033   virtual void clearHits() = 0;
0034 
0035   inline const std::vector<std::string>& getNames() const { return m_namesOfSD; }
0036 
0037   inline bool isCaloSD() const { return m_isCalo; }
0038 
0039 protected:
0040   // generic geometry methods, all coordinates in mm
0041   enum coordinates { WorldCoordinates, LocalCoordinates };
0042   Local3DPoint InitialStepPosition(const G4Step* step, coordinates) const;
0043   Local3DPoint FinalStepPosition(const G4Step* step, coordinates) const;
0044 
0045   // local coordinates to the volume, in which the step is done
0046   Local3DPoint LocalPreStepPosition(const G4Step* step) const;
0047   Local3DPoint LocalPostStepPosition(const G4Step* step) const;
0048 
0049   inline Local3DPoint ConvertToLocal3DPoint(const G4ThreeVector& point) const {
0050     return Local3DPoint(point.x(), point.y(), point.z());
0051   }
0052 
0053   void setNames(const std::vector<std::string>&);
0054   void NaNTrap(const G4Step* step) const;
0055 
0056   TrackInformation* cmsTrackInformation(const G4Track* aTrack);
0057 
0058 private:
0059   void AssignSD(const std::string& vname);
0060 
0061   std::vector<std::string> m_namesOfSD;
0062   bool m_isCalo;
0063 };
0064 
0065 #endif