Geant4 Cross Reference |
1 // 2 // ******************************************************************** 3 // * License and Disclaimer * 4 // * * 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. * 10 // * * 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitation of liability. * 17 // * * 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************************************** 25 // 26 // 27 /// \file optical/wls/include/WLSTrajectory.hh 28 /// \brief Definition of the WLSTrajectory class 29 // 30 31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 33 34 #ifndef WLSTrajectory_h 35 #define WLSTrajectory_h 1 36 37 #include "G4Allocator.hh" 38 #include "G4ParticleDefinition.hh" 39 #include "G4Step.hh" 40 #include "G4Track.hh" 41 #include "G4TrajectoryPoint.hh" 42 #include "G4VTrajectory.hh" 43 #include "globals.hh" 44 45 #include <vector> 46 47 typedef std::vector<G4VTrajectoryPoint*> WLSTrajectoryPointContainer; 48 49 class WLSTrajectory : public G4VTrajectory 50 { 51 public: 52 WLSTrajectory() = default; 53 WLSTrajectory(const G4Track*); 54 WLSTrajectory(WLSTrajectory&); 55 ~WLSTrajectory() override; 56 57 inline void* operator new(size_t); 58 inline void operator delete(void*); 59 inline int operator==(const WLSTrajectory& right) const { return (this == &right); } 60 61 inline G4int GetTrackID() const override { return fTrackID; } 62 inline G4int GetParentID() const override { return fParentID; } 63 inline G4String GetParticleName() const override { return fParticleName; } 64 inline G4double GetCharge() const override { return fPDGCharge; } 65 inline G4int GetPDGEncoding() const override { return fPDGEncoding; } 66 inline G4ThreeVector GetInitialMomentum() const override { return fInitialMomentum; } 67 68 void ShowTrajectory(std::ostream& os = G4cout) const override; 69 void AppendStep(const G4Step* aStep) override; 70 void MergeTrajectory(G4VTrajectory* secondTrajectory) override; 71 72 G4ParticleDefinition* GetParticleDefinition(); 73 74 int GetPointEntries() const override { return fpPointsContainer->size(); } 75 G4VTrajectoryPoint* GetPoint(G4int i) const override { return (*fpPointsContainer)[i]; } 76 77 const std::map<G4String, G4AttDef>* GetAttDefs() const override; 78 std::vector<G4AttValue>* CreateAttValues() const override; 79 80 private: 81 WLSTrajectoryPointContainer* fpPointsContainer = nullptr; 82 83 G4int fTrackID = 0; 84 G4int fParentID = 0; 85 G4double fPDGCharge = 0.; 86 G4int fPDGEncoding = 0; 87 G4String fParticleName; 88 G4ThreeVector fInitialMomentum; 89 90 G4ParticleDefinition* fParticleDefinition = nullptr; 91 }; 92 93 extern G4ThreadLocal G4Allocator<WLSTrajectory>* WLSTrajectoryAllocator; 94 95 inline void* WLSTrajectory::operator new(size_t) 96 { 97 if (!WLSTrajectoryAllocator) WLSTrajectoryAllocator = new G4Allocator<WLSTrajectory>; 98 return (void*)WLSTrajectoryAllocator->MallocSingle(); 99 } 100 101 inline void WLSTrajectory::operator delete(void* aTrajectory) 102 { 103 WLSTrajectoryAllocator->FreeSingle((WLSTrajectory*)aTrajectory); 104 } 105 106 #endif 107