Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | List of all members
RE05StackingAction Class Reference

#include <Doxymodules_runAndEvent.h>

Inheritance diagram for RE05StackingAction:
G4UserStackingAction

Public Member Functions

 RE05StackingAction ()
 
virtual ~RE05StackingAction ()
 
virtual G4ClassificationOfNewTrack ClassifyNewTrack (const G4Track *aTrack)
 
virtual void NewStage ()
 
virtual void PrepareNewEvent ()
 
void SetNRequestMuon (G4int val)
 
G4int GetNRequestMuon () const
 
void SetNRequestIsoMuon (G4int val)
 
G4int GetNRequestIsoMuon () const
 
void SetNIsolation (G4int val)
 
G4int GetNIsolation () const
 
void SetRoIAngle (G4double val)
 
G4double GetRoIAngle () const
 

Private Member Functions

G4bool InsideRoI (const G4Track *aTrack, G4double ang)
 
G4VHitsCollectionGetCollection (G4String colName)
 

Private Attributes

RE05TrackerHitsCollectionfTrkHits
 
RE05MuonHitsCollectionfMuonHits
 
RE05StackingActionMessengerfMessenger
 
G4int fStage
 
G4int fReqMuon
 
G4int fReqIsoMuon
 
G4int fReqIso
 
G4double fAngRoI
 

Detailed Description

Definition at line 117 of file Doxymodules_runAndEvent.h.

Constructor & Destructor Documentation

◆ RE05StackingAction()

RE05StackingAction::RE05StackingAction ( )

Definition at line 46 of file RE05StackingAction.cc.

◆ ~RE05StackingAction()

RE05StackingAction::~RE05StackingAction ( )
virtual

Definition at line 59 of file RE05StackingAction.cc.

60{ delete fMessenger; }

Member Function Documentation

◆ ClassifyNewTrack()

G4ClassificationOfNewTrack RE05StackingAction::ClassifyNewTrack ( const G4Track aTrack)
virtual

Definition at line 65 of file RE05StackingAction.cc.

66{
67 G4ClassificationOfNewTrack classification = fWaiting;
68 switch(fStage)
69 {
70 case 0: // Stage 0 : Primary muons only
71 if(aTrack->GetParentID()==0)
72 {
73 G4ParticleDefinition * particleType = aTrack->GetDefinition();
74 if((particleType==G4MuonPlus::MuonPlusDefinition())
75 ||(particleType==G4MuonMinus::MuonMinusDefinition()))
76 { classification = fUrgent; }
77 }
78 break;
79
80 case 1: // Stage 1 : Charged primaries only
81 // Suspended tracks will be sent to the waiting stack
82 if(aTrack->GetParentID()!=0) { break; }
83 if(aTrack->GetTrackStatus()==fSuspend) { break; }
84 if(aTrack->GetDefinition()->GetPDGCharge()==0.) { break; }
85 classification = fUrgent;
86 break;
87
88 default: // Stage 2 : Accept all primaries
89 // Accept all secondaries in RoI
90 // Kill secondaries outside RoI
91 if(aTrack->GetParentID()==0)
92 {
93 classification = fUrgent;
94 break;
95 }
96 if((fAngRoI<0.)||InsideRoI(aTrack,fAngRoI))
97 {
98 classification = fUrgent;
99 break;
100 }
101 classification = fKill;
102 }
103 return classification;
104}
G4bool InsideRoI(const G4Track *aTrack, G4double ang)

◆ NewStage()

void RE05StackingAction::NewStage ( )
virtual

Definition at line 147 of file RE05StackingAction.cc.

148{
149 fStage++;
150 G4int nhits;
151 if(fStage==1)
152 {
153 // Stage 0->1 : check if at least "fReqMuon" hits on muon chamber
154 // otherwise abort current event
155 if(!fMuonHits)
156 { fMuonHits = (RE05MuonHitsCollection*)GetCollection("muonCollection"); }
157 if(!fMuonHits)
158 { G4cerr << "muonCollection NOT FOUND" << G4endl;
159 return; }
160 nhits = fMuonHits->entries();
161//// G4cout << "Stage 0->1 : " << nhits << " hits found in the muon chamber."
162//// << G4endl;
163 if(nhits<fReqMuon)
164 {
165 stackManager->clear();
166//// G4cout << "++++++++ event aborted" << G4endl;
167 return;
168 }
169 stackManager->ReClassify();
170 return;
171 }
172
173 else if(fStage==2)
174 {
175 // Stage 1->2 : check the isolation of muon tracks
176 // at least "fReqIsoMuon" isolated muons
177 // otherwise abort current event.
178 // Isolation requires "fReqIso" or less hits
179 // (including own hits) in the RoI region
180 // in the tracker layers.
181 nhits = fMuonHits->entries();
182 if(!fTrkHits)
183 { fTrkHits = (RE05TrackerHitsCollection*)GetCollection("trackerCollection"); }
184 if(!fTrkHits)
185 { G4cerr << "trackerCollection NOT FOUND" << G4endl;
186 return; }
187 G4int nTrkhits = fTrkHits->entries();
188 G4int isoMuon = 0;
189 for(G4int j=0;j<nhits;j++)
190 {
191 G4ThreeVector hitPos = (*fMuonHits)[j]->GetPos();
192 G4int nhitIn = 0;
193 for(G4int jj=0;(jj<nTrkhits)&&(nhitIn<=fReqIso);jj++)
194 {
195 G4ThreeVector trkhitPos = (*fTrkHits)[jj]->GetPos();
196 if(trkhitPos.angle(hitPos)<fAngRoI) nhitIn++;
197 }
198 if(nhitIn<=fReqIso) isoMuon++;
199 }
200//// G4cout << "Stage 1->2 : " << isoMuon << " isolated muon found." << G4endl;
201 if(isoMuon<fReqIsoMuon)
202 {
203 stackManager->clear();
204//// G4cout << "++++++++ event aborted" << G4endl;
205 return;
206 }
207 stackManager->ReClassify();
208 return;
209 }
210
211 else
212 {
213 // Other fStage change : just re-classify
214 stackManager->ReClassify();
215 }
216}
G4THitsCollection< RE05MuonHit > RE05MuonHitsCollection
G4THitsCollection< RE05TrackerHit > RE05TrackerHitsCollection
G4VHitsCollection * GetCollection(G4String colName)

◆ PrepareNewEvent()

void RE05StackingAction::PrepareNewEvent ( )
virtual

Definition at line 220 of file RE05StackingAction.cc.

221{
222 fStage = 0;
223 fTrkHits = 0;
224 fMuonHits = 0;
225}

◆ InsideRoI()

G4bool RE05StackingAction::InsideRoI ( const G4Track aTrack,
G4double  ang 
)
private

Definition at line 108 of file RE05StackingAction.cc.

109{
110 if(!fMuonHits)
111 { fMuonHits = (RE05MuonHitsCollection*)GetCollection("muonCollection"); }
112 if(!fMuonHits)
113 { G4cerr << "muonCollection NOT FOUND" << G4endl;
114 return true; }
115
116 G4int nhits = fMuonHits->entries();
117
118 const G4ThreeVector trPos = aTrack->GetPosition();
119 for(G4int i=0;i<nhits;i++)
120 {
121 G4ThreeVector muHitPos = (*fMuonHits)[i]->GetPos();
122 G4double angl = muHitPos.angle(trPos);
123 if(angl<ang) { return true; }
124 }
125
126 return false;
127}

◆ GetCollection()

G4VHitsCollection * RE05StackingAction::GetCollection ( G4String  colName)
private

Definition at line 131 of file RE05StackingAction.cc.

132{
133 G4SDManager* SDMan = G4SDManager::GetSDMpointer();
134 G4RunManager* runMan = G4RunManager::GetRunManager();
135 int colID = SDMan->GetCollectionID(colName);
136 if(colID>=0)
137 {
138 const G4Event* currentEvent = runMan->GetCurrentEvent();
139 G4HCofThisEvent* HCE = currentEvent->GetHCofThisEvent();
140 return HCE->GetHC(colID);
141 }
142 return 0;
143}

◆ SetNRequestMuon()

void RE05StackingAction::SetNRequestMuon ( G4int  val)
inline

Definition at line 70 of file RE05StackingAction.hh.

70{ fReqMuon = val; }

◆ GetNRequestMuon()

G4int RE05StackingAction::GetNRequestMuon ( ) const
inline

Definition at line 71 of file RE05StackingAction.hh.

71{ return fReqMuon; }

◆ SetNRequestIsoMuon()

void RE05StackingAction::SetNRequestIsoMuon ( G4int  val)
inline

Definition at line 72 of file RE05StackingAction.hh.

72{ fReqIsoMuon = val; }

◆ GetNRequestIsoMuon()

G4int RE05StackingAction::GetNRequestIsoMuon ( ) const
inline

Definition at line 73 of file RE05StackingAction.hh.

73{ return fReqIsoMuon; }

◆ SetNIsolation()

void RE05StackingAction::SetNIsolation ( G4int  val)
inline

Definition at line 74 of file RE05StackingAction.hh.

74{ fReqIso = val; }

◆ GetNIsolation()

G4int RE05StackingAction::GetNIsolation ( ) const
inline

Definition at line 75 of file RE05StackingAction.hh.

75{ return fReqIso; }

◆ SetRoIAngle()

void RE05StackingAction::SetRoIAngle ( G4double  val)
inline

Definition at line 76 of file RE05StackingAction.hh.

76{ fAngRoI = val; }

◆ GetRoIAngle()

G4double RE05StackingAction::GetRoIAngle ( ) const
inline

Definition at line 77 of file RE05StackingAction.hh.

77{ return fAngRoI; }

Member Data Documentation

◆ fTrkHits

RE05TrackerHitsCollection* RE05StackingAction::fTrkHits
private

Definition at line 59 of file RE05StackingAction.hh.

◆ fMuonHits

RE05MuonHitsCollection* RE05StackingAction::fMuonHits
private

Definition at line 60 of file RE05StackingAction.hh.

◆ fMessenger

RE05StackingActionMessenger* RE05StackingAction::fMessenger
private

Definition at line 61 of file RE05StackingAction.hh.

◆ fStage

G4int RE05StackingAction::fStage
private

Definition at line 63 of file RE05StackingAction.hh.

◆ fReqMuon

G4int RE05StackingAction::fReqMuon
private

Definition at line 64 of file RE05StackingAction.hh.

◆ fReqIsoMuon

G4int RE05StackingAction::fReqIsoMuon
private

Definition at line 65 of file RE05StackingAction.hh.

◆ fReqIso

G4int RE05StackingAction::fReqIso
private

Definition at line 66 of file RE05StackingAction.hh.

◆ fAngRoI

G4double RE05StackingAction::fAngRoI
private

Definition at line 67 of file RE05StackingAction.hh.


The documentation for this class was generated from the following files:

Applications | User Support | Publications | Collaboration