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 // $Id: XrayFluoHPGeSD.cc >> 28 // GEANT4 tag $Name: xray_fluo-V04-01-03 27 // 29 // 28 // Author: Elena Guardincerri (Elena.Guardince 30 // Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it) 29 // 31 // 30 // History: 32 // History: 31 // ----------- 33 // ----------- 32 // 28 Nov 2001 Elena Guardincerri Created 34 // 28 Nov 2001 Elena Guardincerri Created 33 // 29 Nov 2002 Energy deposition bug fixed (Al 35 // 29 Nov 2002 Energy deposition bug fixed (Alfonso.mantero@ge.infn.it) 34 // ------------------------------------------- 36 // ------------------------------------------------------------------- 35 37 36 #include "XrayFluoHPGeSD.hh" 38 #include "XrayFluoHPGeSD.hh" 37 #include "XrayFluoSensorHit.hh" 39 #include "XrayFluoSensorHit.hh" 38 #include "XrayFluoDetectorConstruction.hh" 40 #include "XrayFluoDetectorConstruction.hh" 39 #include "G4VPhysicalVolume.hh" 41 #include "G4VPhysicalVolume.hh" 40 #include "G4Step.hh" 42 #include "G4Step.hh" 41 #include "G4VTouchable.hh" 43 #include "G4VTouchable.hh" 42 #include "G4TouchableHistory.hh" 44 #include "G4TouchableHistory.hh" 43 #include "G4SDManager.hh" 45 #include "G4SDManager.hh" 44 #include "G4ios.hh" 46 #include "G4ios.hh" 45 #include "G4VProcess.hh" 47 #include "G4VProcess.hh" 46 48 47 //....oooOO0OOooo........oooOO0OOooo........oo 49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 48 50 49 XrayFluoHPGeSD::XrayFluoHPGeSD(G4String name, 51 XrayFluoHPGeSD::XrayFluoHPGeSD(G4String name, 50 XrayFluoDet 52 XrayFluoDetectorConstruction* det) 51 :G4VSensitiveDetector(name),Detector(det) 53 :G4VSensitiveDetector(name),Detector(det) 52 { 54 { 53 collectionName.insert("HPGeCollection"); 55 collectionName.insert("HPGeCollection"); 54 HitHPGeID = new G4int[500]; 56 HitHPGeID = new G4int[500]; 55 //G4cout << "XrayFluoHPGeSD created" << G4en 57 //G4cout << "XrayFluoHPGeSD created" << G4endl; 56 58 57 } 59 } 58 60 59 //....oooOO0OOooo........oooOO0OOooo........oo 61 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 60 62 61 XrayFluoHPGeSD::~XrayFluoHPGeSD() 63 XrayFluoHPGeSD::~XrayFluoHPGeSD() 62 { 64 { 63 65 64 delete [] HitHPGeID; 66 delete [] HitHPGeID; 65 67 66 // delete HPGeCollection; 68 // delete HPGeCollection; 67 69 68 G4cout << "XrayFluoHPGeSD deleted" << G4endl 70 G4cout << "XrayFluoHPGeSD deleted" << G4endl; 69 } 71 } 70 72 71 //....oooOO0OOooo........oooOO0OOooo........oo 73 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 72 74 73 void XrayFluoHPGeSD::Initialize(G4HCofThisEven 75 void XrayFluoHPGeSD::Initialize(G4HCofThisEvent*HCE) 74 76 75 //initializes HCE with the hits collection(s) 77 //initializes HCE with the hits collection(s) created by this 76 //sensitive detector 78 //sensitive detector 77 { 79 { 78 if (HCE){ 80 if (HCE){ 79 81 80 HPGeCollection = new XrayFluoSensorHitsCol 82 HPGeCollection = new XrayFluoSensorHitsCollection 81 (SensitiveDetectorName,collectionName[0] 83 (SensitiveDetectorName,collectionName[0]); 82 for (G4int j=0;j<Detector->GetNbOfPixels() 84 for (G4int j=0;j<Detector->GetNbOfPixels();j++) 83 {HitHPGeID [j]= -1;}; 85 {HitHPGeID [j]= -1;}; 84 } 86 } 85 } 87 } 86 //....oooOO0OOooo........oooOO0OOooo........oo 88 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 87 89 88 G4bool XrayFluoHPGeSD::ProcessHits(G4Step* aSt 90 G4bool XrayFluoHPGeSD::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist) 89 { 91 { 90 92 91 if (ROhist){ 93 if (ROhist){ 92 94 93 G4double edep = aStep->GetTotalEnergyDepos 95 G4double edep = aStep->GetTotalEnergyDeposit(); 94 // G4String particleName = aStep->GetTr 96 // G4String particleName = aStep->GetTrack()->GetDynamicParticle()->GetDefinition()->GetParticleName(); 95 // G4String processName = aStep->GetTra 97 // G4String processName = aStep->GetTrack()->GetCreatorProcess()->GetProcessName(); 96 98 97 // G4double partEnergy = aStep->GetPreS 99 // G4double partEnergy = aStep->GetPreStepPoint()->GetKineticEnergy(); 98 // G4double secondEnergy = aStep->GetPo 100 // G4double secondEnergy = aStep->GetPostStepPoint()->GetKineticEnergy(); 99 // G4cout << " la particella che deposi 101 // G4cout << " la particella che deposita e': " << particleName << " ha una energia di keV " 100 // << partEnergy << " e deposita "<< 102 // << partEnergy << " e deposita "<< edep << G4endl; 101 // G4cout << " la particella creata dep 103 // G4cout << " la particella creata deposita: " << secondEnergy << G4endl; 102 // if (processName){ 104 // if (processName){ 103 105 104 106 105 107 106 // G4cout << " la particella viene da 108 // G4cout << " la particella viene da: " << processName << G4endl; 107 // } 109 // } 108 110 109 // else {G4cout << " il deposito provie 111 // else {G4cout << " il deposito proviene da: Rayleugh" << G4endl;} 110 112 111 if (edep==0.) return false; 113 if (edep==0.) return false; 112 114 113 // G4cout << " edep = " << edep << G4end 115 // G4cout << " edep = " << edep << G4endl; 114 116 115 G4TouchableHistory* theTouchable 117 G4TouchableHistory* theTouchable 116 = (G4TouchableHistory*)(aStep->GetPreSte 118 = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); 117 119 118 G4VPhysicalVolume* physVol = theTouchable- 120 G4VPhysicalVolume* physVol = theTouchable->GetVolume(); 119 // theTouchable->MoveUpHistory(); 121 // theTouchable->MoveUpHistory(); 120 G4int PixelNumber = 0; 122 G4int PixelNumber = 0; 121 if (Detector->GetNbOfPixels()>1) PixelNumb 123 if (Detector->GetNbOfPixels()>1) PixelNumber= physVol->GetCopyNo() ; 122 if ( HitHPGeID[PixelNumber]==-1) 124 if ( HitHPGeID[PixelNumber]==-1) 123 { 125 { 124 XrayFluoSensorHit* HPGeHit = new XrayFluoSen 126 XrayFluoSensorHit* HPGeHit = new XrayFluoSensorHit(); 125 HPGeHit->AddEnergy(edep); 127 HPGeHit->AddEnergy(edep); 126 HitHPGeID[PixelNumber] = HPGeCollection->ins 128 HitHPGeID[PixelNumber] = HPGeCollection->insert(HPGeHit) - 1; 127 if (verboseLevel>0){ 129 if (verboseLevel>0){ 128 G4cout << " New Hit on pixel: " << PixelNu 130 G4cout << " New Hit on pixel: " << PixelNumber << G4endl; 129 } 131 } 130 } 132 } 131 else 133 else 132 { 134 { 133 (*HPGeCollection)[HitHPGeID[PixelNumber]]->A 135 (*HPGeCollection)[HitHPGeID[PixelNumber]]->AddEnergy(edep); 134 //G4double ED =(*HPGeCollection)[HitHPGeID[P 136 //G4double ED =(*HPGeCollection)[HitHPGeID[PixelNumber]]->GetEdepTot(); 135 if (verboseLevel>0) 137 if (verboseLevel>0) 136 G4cout << " Energy added to Pixel: " << Pi 138 G4cout << " Energy added to Pixel: " << PixelNumber << G4endl; 137 } 139 } 138 140 139 return true; 141 return true; 140 } 142 } 141 else {return false;} 143 else {return false;} 142 144 143 } 145 } 144 146 145 147 146 //....oooOO0OOooo........oooOO0OOooo........oo 148 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 147 149 148 void XrayFluoHPGeSD::EndOfEvent(G4HCofThisEven 150 void XrayFluoHPGeSD::EndOfEvent(G4HCofThisEvent* HCE) 149 { 151 { 150 static G4int HCID = -1; 152 static G4int HCID = -1; 151 if(HCID<0) 153 if(HCID<0) 152 { HCID = G4SDManager::GetSDMpointer()->GetCo 154 { HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); } 153 HCE->AddHitsCollection(HCID,HPGeCollection); 155 HCE->AddHitsCollection(HCID,HPGeCollection); 154 } 156 } 155 157 156 //....oooOO0OOooo........oooOO0OOooo........oo 158 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 157 159 158 void XrayFluoHPGeSD::clear() 160 void XrayFluoHPGeSD::clear() 159 {} 161 {} 160 162 161 //....oooOO0OOooo........oooOO0OOooo........oo 163 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 162 164 163 void XrayFluoHPGeSD::DrawAll() 165 void XrayFluoHPGeSD::DrawAll() 164 {} 166 {} 165 167 166 //....oooOO0OOooo........oooOO0OOooo........oo 168 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 167 169 168 void XrayFluoHPGeSD::PrintAll() 170 void XrayFluoHPGeSD::PrintAll() 169 {} 171 {} 170 172 171 //....oooOO0OOooo........oooOO0OOooo........oo 173 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 172 174 173 175 174 176 175 177 176 178 177 179 178 180 179 181 180 182 181 183 182 184 183 185 184 186 185 187 186 188 187 189