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 /// \file Par01/src/Par01CalorimeterSD.cc << 27 /// \brief Implementation of the Par01Calorime << 28 // << 29 // 26 // >> 27 // $Id: Par01CalorimeterSD.cc 90093 2015-05-13 11:59:54Z gcosmo $ 30 // 28 // 31 29 32 #include "Par01CalorimeterSD.hh" 30 #include "Par01CalorimeterSD.hh" 33 << 34 #include "Par01CalorimeterHit.hh" 31 #include "Par01CalorimeterHit.hh" 35 32 >> 33 #include "G4VPhysicalVolume.hh" 36 #include "G4LogicalVolume.hh" 34 #include "G4LogicalVolume.hh" >> 35 #include "G4Track.hh" 37 #include "G4ParticleDefinition.hh" 36 #include "G4ParticleDefinition.hh" 38 #include "G4SDManager.hh" 37 #include "G4SDManager.hh" 39 #include "G4Track.hh" << 40 #include "G4VPhysicalVolume.hh" << 41 #include "G4ios.hh" 38 #include "G4ios.hh" 42 39 43 //....oooOO0OOooo........oooOO0OOooo........oo << 40 Par01CalorimeterSD::Par01CalorimeterSD( G4String name, 44 << 41 G4int nCells, 45 Par01CalorimeterSD::Par01CalorimeterSD(G4Strin << 42 G4String colName ) 46 : G4VSensitiveDetector(name), fNumberOfCells << 43 : G4VSensitiveDetector(name), >> 44 fNumberOfCells(nCells), >> 45 fHCID(-1) 47 { 46 { 48 G4String HCname; 47 G4String HCname; 49 collectionName.insert(HCname = colName); << 48 collectionName.insert(HCname=colName); 50 fCellID = new G4int[fNumberOfCells]; 49 fCellID = new G4int[fNumberOfCells]; 51 } 50 } 52 51 53 //....oooOO0OOooo........oooOO0OOooo........oo << 54 << 55 Par01CalorimeterSD::~Par01CalorimeterSD() 52 Par01CalorimeterSD::~Par01CalorimeterSD() 56 { 53 { 57 delete[] fCellID; << 54 delete [] fCellID; 58 } 55 } 59 56 60 //....oooOO0OOooo........oooOO0OOooo........oo << 61 << 62 void Par01CalorimeterSD::Initialize(G4HCofThis 57 void Par01CalorimeterSD::Initialize(G4HCofThisEvent*) 63 { 58 { 64 fCalCollection = new Par01CalorimeterHitsCol << 59 fCalCollection = new Par01CalorimeterHitsCollection 65 for (G4int j = 0; j < fNumberOfCells; j++) { << 60 (SensitiveDetectorName,collectionName[0]); 66 fCellID[j] = -1; << 61 for(G4int j=0;j<fNumberOfCells;j++) 67 } << 62 { >> 63 fCellID[j] = -1; >> 64 } 68 } 65 } 69 66 70 //....oooOO0OOooo........oooOO0OOooo........oo << 71 << 72 G4bool Par01CalorimeterSD::ProcessHits(G4Step* 67 G4bool Par01CalorimeterSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) 73 { 68 { 74 G4double edep = aStep->GetTotalEnergyDeposit 69 G4double edep = aStep->GetTotalEnergyDeposit(); 75 if (edep <= 0.) return false; << 70 if(edep<=0.) return false; 76 << 71 77 auto hist = (G4TouchableHistory*)(aStep->Get << 72 G4TouchableHistory* hist = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); 78 const G4VPhysicalVolume* physVol = hist->Get 73 const G4VPhysicalVolume* physVol = hist->GetVolume(); 79 G4int copyID = hist->GetReplicaNumber(); 74 G4int copyID = hist->GetReplicaNumber(); 80 << 75 81 if (fCellID[copyID] == -1) { << 76 if(fCellID[copyID]==-1) 82 Par01CalorimeterHit* calHit = new Par01Cal << 77 { 83 calHit->SetEdep(edep); << 78 Par01CalorimeterHit* calHit = 84 G4AffineTransform aTrans = hist->GetHistor << 79 new Par01CalorimeterHit(physVol->GetLogicalVolume()); 85 aTrans.Invert(); << 80 calHit->SetEdep( edep ); 86 calHit->SetPos(aTrans.NetTranslation()); << 81 G4AffineTransform aTrans = hist->GetHistory()->GetTopTransform(); 87 calHit->SetRot(aTrans.NetRotation()); << 82 aTrans.Invert(); 88 G4int icell = fCalCollection->insert(calHi << 83 calHit->SetPos(aTrans.NetTranslation()); 89 fCellID[copyID] = icell - 1; << 84 calHit->SetRot(aTrans.NetRotation()); 90 if (verboseLevel > 0) { << 85 G4int icell = fCalCollection->insert( calHit ); 91 G4cout << " New Calorimeter Hit on CellI << 86 fCellID[copyID] = icell - 1; >> 87 if(verboseLevel>0) >> 88 { G4cout << " New Calorimeter Hit on CellID " << copyID << G4endl; } 92 } 89 } 93 } << 90 else 94 else { << 91 { 95 (*fCalCollection)[fCellID[copyID]]->AddEde << 92 (*fCalCollection)[fCellID[copyID]]->AddEdep( edep ); 96 if (verboseLevel > 0) { << 93 if(verboseLevel>0) 97 G4cout << " Energy added to CellID " << << 94 { G4cout << " Energy added to CellID " << copyID << G4endl; } 98 } 95 } 99 } << 96 100 << 101 return true; 97 return true; 102 } 98 } 103 99 104 //....oooOO0OOooo........oooOO0OOooo........oo << 100 void Par01CalorimeterSD::EndOfEvent(G4HCofThisEvent*HCE) 105 << 106 void Par01CalorimeterSD::EndOfEvent(G4HCofThis << 107 { 101 { 108 if (fHCID < 0) { << 102 if(fHCID<0) 109 fHCID = G4SDManager::GetSDMpointer()->GetC << 103 { fHCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); } 110 } << 104 HCE->AddHitsCollection( fHCID, fCalCollection ); 111 HCE->AddHitsCollection(fHCID, fCalCollection << 112 } 105 } 113 106 114 //....oooOO0OOooo........oooOO0OOooo........oo << 107 void Par01CalorimeterSD::clear() 115 << 108 { 116 void Par01CalorimeterSD::clear() {} << 109 } 117 << 118 //....oooOO0OOooo........oooOO0OOooo........oo << 119 << 120 void Par01CalorimeterSD::DrawAll() {} << 121 110 122 //....oooOO0OOooo........oooOO0OOooo........oo << 111 void Par01CalorimeterSD::DrawAll() >> 112 { >> 113 } 123 114 124 void Par01CalorimeterSD::PrintAll() {} << 115 void Par01CalorimeterSD::PrintAll() >> 116 { >> 117 } 125 118