Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 // 26 // 27 // ------------------------------------------- 27 // -------------------------------------------------------------- 28 // GEANT 4 - Underground Dark Matter Detecto 28 // GEANT 4 - Underground Dark Matter Detector Advanced Example 29 // 29 // 30 // For information related to this code c 30 // For information related to this code contact: Alex Howard 31 // e-mail: alexander.howard@cern.ch 31 // e-mail: alexander.howard@cern.ch 32 // ------------------------------------------- 32 // -------------------------------------------------------------- 33 // Comments 33 // Comments 34 // 34 // 35 // Underground Advanced 35 // Underground Advanced 36 // by A. Howard and H. Araujo 36 // by A. Howard and H. Araujo 37 // (27th November 2001) 37 // (27th November 2001) 38 // 38 // 39 // ScintSD (scintillator sensitive detector de 39 // ScintSD (scintillator sensitive detector definition) program 40 // ------------------------------------------- 40 // -------------------------------------------------------------- 41 41 42 #include "DMXScintSD.hh" 42 #include "DMXScintSD.hh" 43 43 44 #include "DMXScintHit.hh" 44 #include "DMXScintHit.hh" 45 #include "DMXDetectorConstruction.hh" 45 #include "DMXDetectorConstruction.hh" 46 46 47 #include "G4VPhysicalVolume.hh" 47 #include "G4VPhysicalVolume.hh" 48 #include "G4HCofThisEvent.hh" 48 #include "G4HCofThisEvent.hh" 49 #include "G4Step.hh" 49 #include "G4Step.hh" 50 #include "G4SDManager.hh" 50 #include "G4SDManager.hh" 51 #include "G4ParticleDefinition.hh" 51 #include "G4ParticleDefinition.hh" 52 #include "G4ParticleTypes.hh" 52 #include "G4ParticleTypes.hh" 53 #include "G4Ions.hh" 53 #include "G4Ions.hh" 54 #include "G4ios.hh" 54 #include "G4ios.hh" 55 55 56 #include "G4OpticalPhoton.hh" << 57 << 58 //....oooOO0OOooo........oooOO0OOooo........oo 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 59 57 60 DMXScintSD::DMXScintSD(G4String name) << 58 DMXScintSD::DMXScintSD(G4String name,DMXDetectorConstruction* DMXSD) 61 :G4VSensitiveDetector(name) << 59 :G4VSensitiveDetector(name),DMXDetector(DMXSD) 62 { 60 { 63 G4String HCname="scintillatorCollection"; 61 G4String HCname="scintillatorCollection"; 64 collectionName.insert(HCname); 62 collectionName.insert(HCname); 65 } 63 } 66 64 67 //....oooOO0OOooo........oooOO0OOooo........oo 65 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 68 66 69 DMXScintSD::~DMXScintSD(){ } 67 DMXScintSD::~DMXScintSD(){ } 70 68 71 //....oooOO0OOooo........oooOO0OOooo........oo 69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 72 70 73 void DMXScintSD::Initialize(G4HCofThisEvent*) 71 void DMXScintSD::Initialize(G4HCofThisEvent*) 74 { 72 { 75 scintillatorCollection = new DMXScintHitsCol 73 scintillatorCollection = new DMXScintHitsCollection 76 (SensitiveDetectorName,collectionName[0]); 74 (SensitiveDetectorName,collectionName[0]); 77 75 78 HitID = -1; 76 HitID = -1; 79 } 77 } 80 78 81 //....oooOO0OOooo........oooOO0OOooo........oo 79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 82 80 83 G4bool DMXScintSD::ProcessHits(G4Step* aStep, 81 G4bool DMXScintSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) 84 { 82 { 85 << 86 //need to know if this is an optical photon << 87 if(aStep->GetTrack()->GetDefinition() << 88 == G4OpticalPhoton::OpticalPhotonDefiniti << 89 << 90 << 91 G4double edep = aStep->GetTotalEnergyDeposit 83 G4double edep = aStep->GetTotalEnergyDeposit(); 92 G4ParticleDefinition* particleType = aStep-> 84 G4ParticleDefinition* particleType = aStep->GetTrack()->GetDefinition(); 93 G4String particleName = particleType->GetPar 85 G4String particleName = particleType->GetParticleName(); 94 86 95 G4double stepl = 0.; 87 G4double stepl = 0.; 96 if (particleType->GetPDGCharge() != 0.) 88 if (particleType->GetPDGCharge() != 0.) 97 stepl = aStep->GetStepLength(); 89 stepl = aStep->GetStepLength(); 98 90 99 if ((edep==0.)&&(stepl==0.)) return false; 91 if ((edep==0.)&&(stepl==0.)) return false; 100 92 101 93 102 // fill in hit 94 // fill in hit 103 DMXScintHit* newHit = new DMXScintHit(); 95 DMXScintHit* newHit = new DMXScintHit(); 104 newHit->SetEdep(edep); 96 newHit->SetEdep(edep); 105 newHit->SetPos(aStep->GetPostStepPoint()->Ge 97 newHit->SetPos(aStep->GetPostStepPoint()->GetPosition()); 106 newHit->SetTime(aStep->GetPreStepPoint()->Ge 98 newHit->SetTime(aStep->GetPreStepPoint()->GetGlobalTime()); 107 newHit->SetParticle(particleName); 99 newHit->SetParticle(particleName); 108 newHit->SetParticleEnergy(aStep->GetPreStepP 100 newHit->SetParticleEnergy(aStep->GetPreStepPoint()->GetKineticEnergy() ); 109 101 110 HitID = scintillatorCollection->insert(newHi 102 HitID = scintillatorCollection->insert(newHit); 111 103 112 return true; 104 return true; 113 } 105 } 114 106 115 107 116 //....oooOO0OOooo........oooOO0OOooo........oo 108 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 117 109 118 void DMXScintSD::EndOfEvent(G4HCofThisEvent* H 110 void DMXScintSD::EndOfEvent(G4HCofThisEvent* HCE) 119 { 111 { 120 112 121 G4String HCname = collectionName[0]; 113 G4String HCname = collectionName[0]; 122 static G4int HCID = -1; 114 static G4int HCID = -1; 123 if(HCID<0) 115 if(HCID<0) 124 HCID = G4SDManager::GetSDMpointer()->GetCo 116 HCID = G4SDManager::GetSDMpointer()->GetCollectionID(HCname); 125 HCE->AddHitsCollection(HCID,scintillatorColl 117 HCE->AddHitsCollection(HCID,scintillatorCollection); 126 118 127 G4int nHits = scintillatorCollection->entrie 119 G4int nHits = scintillatorCollection->entries(); 128 if (verboseLevel>=1) 120 if (verboseLevel>=1) 129 G4cout << " LXe collection: " << nHit 121 G4cout << " LXe collection: " << nHits << " hits" << G4endl; 130 if (verboseLevel>=2) 122 if (verboseLevel>=2) 131 scintillatorCollection->PrintAllHits(); 123 scintillatorCollection->PrintAllHits(); 132 124 133 } 125 } 134 126 135 //....oooOO0OOooo........oooOO0OOooo........oo 127 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 136 128 137 void DMXScintSD::clear() 129 void DMXScintSD::clear() 138 {} 130 {} 139 131 140 //....oooOO0OOooo........oooOO0OOooo........oo 132 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 141 133 142 void DMXScintSD::DrawAll() 134 void DMXScintSD::DrawAll() 143 {} 135 {} 144 136 145 //....oooOO0OOooo........oooOO0OOooo........oo 137 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 146 138 147 void DMXScintSD::PrintAll() 139 void DMXScintSD::PrintAll() 148 {} 140 {} 149 141 150 //....oooOO0OOooo........oooOO0OOooo........oo 142 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 151 143 152 144