G4MultiFunctionalDetector Class Reference

#include <G4MultiFunctionalDetector.hh>

Inheritance diagram for G4MultiFunctionalDetector:

G4VSensitiveDetector

Public Member Functions

 G4MultiFunctionalDetector (G4String)
G4bool RegisterPrimitive (G4VPrimitiveScorer *)
G4bool RemovePrimitive (G4VPrimitiveScorer *)
G4int GetNumberOfPrimitives () const
G4VPrimitiveScorerGetPrimitive (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

Detailed Description

Definition at line 48 of file G4MultiFunctionalDetector.hh.


Constructor & Destructor Documentation

G4MultiFunctionalDetector::G4MultiFunctionalDetector ( G4String   ) 

Definition at line 38 of file G4MultiFunctionalDetector.cc.

00039 :G4VSensitiveDetector(name)
00040 {;}

G4MultiFunctionalDetector::~G4MultiFunctionalDetector (  )  [virtual]

Definition at line 42 of file G4MultiFunctionalDetector.cc.

00043 {;}


Member Function Documentation

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 }   


Field Documentation

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().


The documentation for this class was generated from the following files:
Generated on Mon May 27 17:52:32 2013 for Geant4 by  doxygen 1.4.7