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 // Filter trajectories according to volume name. Only registered 28 // volumes will pass the filter. 29 // 30 // Jane Tinslay May 2006 31 // 32 #include "G4TrajectoryOriginVolumeFilter.hh" 33 #include "G4TransportationManager.hh" 34 #include "G4VTrajectoryPoint.hh" 35 36 G4TrajectoryOriginVolumeFilter::G4TrajectoryOriginVolumeFilter(const G4String& name) 37 :G4SmartFilter<G4VTrajectory>(name) 38 {} 39 40 G4TrajectoryOriginVolumeFilter::~G4TrajectoryOriginVolumeFilter() {} 41 42 bool 43 G4TrajectoryOriginVolumeFilter::Evaluate(const G4VTrajectory& traj) const 44 { 45 G4VTrajectoryPoint* aTrajectoryPoint = traj.GetPoint(0); 46 assert (0 != aTrajectoryPoint); 47 48 G4Navigator* navigator = 49 G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); 50 51 G4VPhysicalVolume* volume = navigator->LocateGlobalPointAndSetup 52 (aTrajectoryPoint->GetPosition(), nullptr,false,true); 53 54 // Logical volume 55 G4LogicalVolume* logicalVolume = volume->GetLogicalVolume(); 56 assert (0 != logicalVolume); 57 58 // Get volume names 59 G4String logicalName = logicalVolume->GetName(); 60 G4String physicalName = volume->GetName(); 61 62 if (GetVerbose()) { 63 G4cout<<"G4TrajectoryOriginVolumeFilter processing trajectory with originating volume "<<G4endl; 64 G4cout<<"logical and physical names: "<<logicalName<<" "<<physicalName<<G4endl; 65 } 66 // Search for logical volume name 67 std::vector<G4String>::const_iterator iterLogical = std::find(fVolumes.begin(), fVolumes.end(), logicalName); 68 69 // Keep if logical volume registered 70 if (iterLogical != fVolumes.end()) return true; 71 72 // Repeat for physical volume name 73 std::vector<G4String>::const_iterator iterPhysical = std::find(fVolumes.begin(), fVolumes.end(), physicalName); 74 75 if (iterPhysical != fVolumes.end()) return true; 76 77 // Volume names not registered 78 return false; 79 } 80 81 void 82 G4TrajectoryOriginVolumeFilter::Add(const G4String& volume) 83 { 84 fVolumes.push_back(volume); 85 } 86 87 void 88 G4TrajectoryOriginVolumeFilter::Print(std::ostream& ostr) const 89 { 90 ostr<<"Volume names registered: "<<G4endl; 91 std::vector<G4String>::const_iterator iter = fVolumes.begin(); 92 93 while (iter != fVolumes.end()) { 94 ostr<<*iter<<G4endl; 95 iter++; 96 } 97 } 98 99 void 100 G4TrajectoryOriginVolumeFilter::Clear() 101 { 102 // Clear volume vector 103 fVolumes.clear(); 104 } 105