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