#include <G4MultiFunctionalDetector.hh>
Inheritance diagram for G4MultiFunctionalDetector:
Public Member Functions | |
G4MultiFunctionalDetector (G4String) | |
G4bool | RegisterPrimitive (G4VPrimitiveScorer *) |
G4bool | RemovePrimitive (G4VPrimitiveScorer *) |
G4int | GetNumberOfPrimitives () const |
G4VPrimitiveScorer * | GetPrimitive (G4int id) const |
virtual | ~G4MultiFunctionalDetector () |
virtual void | Initialize (G4HCofThisEvent *) |
virtual void | EndOfEvent (G4HCofThisEvent *) |
virtual void | clear () |
virtual void | DrawAll () |
virtual void | PrintAll () |
Protected Member Functions | |
virtual G4bool | ProcessHits (G4Step *, G4TouchableHistory *) |
Protected Attributes | |
std::vector< G4VPrimitiveScorer * > | primitives |
Definition at line 48 of file G4MultiFunctionalDetector.hh.
G4MultiFunctionalDetector::G4MultiFunctionalDetector | ( | G4String | ) |
Definition at line 38 of file G4MultiFunctionalDetector.cc.
00039 :G4VSensitiveDetector(name) 00040 {;}
G4MultiFunctionalDetector::~G4MultiFunctionalDetector | ( | ) | [virtual] |
void G4MultiFunctionalDetector::clear | ( | ) | [virtual] |
Reimplemented from G4VSensitiveDetector.
Definition at line 117 of file G4MultiFunctionalDetector.cc.
References primitives.
00118 { 00119 G4int nPrim = primitives.size(); 00120 for(G4int iPrim=0;iPrim<nPrim;iPrim++) 00121 { primitives[iPrim]->clear(); } 00122 }
void G4MultiFunctionalDetector::DrawAll | ( | ) | [virtual] |
Reimplemented from G4VSensitiveDetector.
Definition at line 124 of file G4MultiFunctionalDetector.cc.
References primitives.
00125 { 00126 G4int nPrim = primitives.size(); 00127 for(G4int iPrim=0;iPrim<nPrim;iPrim++) 00128 { primitives[iPrim]->DrawAll(); } 00129 }
void G4MultiFunctionalDetector::EndOfEvent | ( | G4HCofThisEvent * | ) | [virtual] |
Reimplemented from G4VSensitiveDetector.
Definition at line 110 of file G4MultiFunctionalDetector.cc.
References primitives.
00111 { 00112 G4int nPrim = primitives.size(); 00113 for(G4int iPrim=0;iPrim<nPrim;iPrim++) 00114 { primitives[iPrim]->EndOfEvent(HC); } 00115 }
G4int G4MultiFunctionalDetector::GetNumberOfPrimitives | ( | ) | const [inline] |
Definition at line 62 of file G4MultiFunctionalDetector.hh.
References primitives.
Referenced by G4VScoringMesh::GetPrimitiveScorer(), and G4VScoringMesh::List().
00063 { return primitives.size(); }
G4VPrimitiveScorer* G4MultiFunctionalDetector::GetPrimitive | ( | G4int | id | ) | const [inline] |
Definition at line 64 of file G4MultiFunctionalDetector.hh.
References primitives.
Referenced by G4VScoringMesh::GetPrimitiveScorer(), and G4VScoringMesh::List().
00065 { return primitives[id]; }
void G4MultiFunctionalDetector::Initialize | ( | G4HCofThisEvent * | ) | [virtual] |
Reimplemented from G4VSensitiveDetector.
Definition at line 103 of file G4MultiFunctionalDetector.cc.
References primitives.
00104 { 00105 G4int nPrim = primitives.size(); 00106 for(G4int iPrim=0;iPrim<nPrim;iPrim++) 00107 { primitives[iPrim]->Initialize(HC); } 00108 }
void G4MultiFunctionalDetector::PrintAll | ( | ) | [virtual] |
Reimplemented from G4VSensitiveDetector.
Definition at line 131 of file G4MultiFunctionalDetector.cc.
References primitives.
00132 { 00133 G4int nPrim = primitives.size(); 00134 for(G4int iPrim=0;iPrim<nPrim;iPrim++) 00135 { primitives[iPrim]->PrintAll(); } 00136 }
G4bool G4MultiFunctionalDetector::ProcessHits | ( | G4Step * | , | |
G4TouchableHistory * | ||||
) | [protected, virtual] |
Implements G4VSensitiveDetector.
Definition at line 45 of file G4MultiFunctionalDetector.cc.
References G4Step::GetStepLength(), G4Step::GetTotalEnergyDeposit(), and primitives.
00046 { 00047 if(aStep->GetStepLength()>0. || aStep->GetTotalEnergyDeposit()>0.){ 00048 G4int nPrim = primitives.size(); 00049 for(G4int iPrim=0;iPrim<nPrim;iPrim++) 00050 { 00051 primitives[iPrim]->HitPrimitive(aStep,aTH); 00052 } 00053 } 00054 return true; 00055 }
G4bool G4MultiFunctionalDetector::RegisterPrimitive | ( | G4VPrimitiveScorer * | ) |
Definition at line 57 of file G4MultiFunctionalDetector.cc.
References G4SDManager::AddNewCollection(), G4VSensitiveDetector::collectionName, G4endl, G4Exception(), G4VPrimitiveScorer::GetName(), G4SDManager::GetSDMpointer(), G4CollectionNameVector::insert(), JustWarning, primitives, G4VSensitiveDetector::SensitiveDetectorName, and G4VPrimitiveScorer::SetMultiFunctionalDetector().
Referenced by G4VScoringMesh::SetPrimitiveScorer().
00058 { 00059 G4int nPrim = primitives.size(); 00060 for(G4int iPrim=0;iPrim<nPrim;iPrim++) 00061 { 00062 if(primitives[iPrim]==aPS) 00063 { 00064 G4ExceptionDescription ED; 00065 ED << "Primitive <" << aPS->GetName() << "> is already defined in <" << SensitiveDetectorName 00066 << ">." << G4endl << "Method RegisterPrimitive() is ignored." << G4endl; 00067 G4Exception("G4MultiFunctionalDetector::RegisterPrimitive","Det0101", 00068 JustWarning,ED); 00069 return false; 00070 } 00071 } 00072 primitives.push_back(aPS); 00073 aPS->SetMultiFunctionalDetector(this); 00074 collectionName.insert(aPS->GetName()); 00075 if(G4SDManager::GetSDMpointer()->FindSensitiveDetector(SensitiveDetectorName,false)) 00076 { 00077 // This G4MultiFunctionalDetector has already been registered to G4SDManager. 00078 // Make sure this new primitive is registered as well. 00079 G4SDManager::GetSDMpointer()->AddNewCollection(SensitiveDetectorName,aPS->GetName()); 00080 } 00081 return true; 00082 }
G4bool G4MultiFunctionalDetector::RemovePrimitive | ( | G4VPrimitiveScorer * | ) |
Definition at line 84 of file G4MultiFunctionalDetector.cc.
References G4VSensitiveDetector::collectionName, G4cerr, G4endl, G4VPrimitiveScorer::GetName(), primitives, G4VSensitiveDetector::SensitiveDetectorName, and G4VPrimitiveScorer::SetMultiFunctionalDetector().
00085 { 00086 std::vector<G4VPrimitiveScorer*>::iterator iterPS; 00087 std::vector<G4String>::iterator iterName = collectionName.begin(); 00088 for(iterPS=primitives.begin();iterPS!=primitives.end();iterPS++) 00089 { 00090 if(*iterPS==aPS) 00091 { 00092 primitives.erase(iterPS); 00093 aPS->SetMultiFunctionalDetector(0); 00094 return true; 00095 } 00096 iterName++; 00097 } 00098 G4cerr << "Primitive <" << aPS->GetName() << "> is not defined in <" << SensitiveDetectorName 00099 << ">." << G4endl << "Method RemovePrimitive() is ignored." << G4endl; 00100 return false; 00101 }
std::vector<G4VPrimitiveScorer*> G4MultiFunctionalDetector::primitives [protected] |
Definition at line 57 of file G4MultiFunctionalDetector.hh.
Referenced by clear(), DrawAll(), EndOfEvent(), GetNumberOfPrimitives(), GetPrimitive(), Initialize(), PrintAll(), ProcessHits(), RegisterPrimitive(), and RemovePrimitive().