CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Private Member Functions | Private Attributes
MuonSensitiveDetector Class Reference

#include <MuonSensitiveDetector.h>

Inheritance diagram for MuonSensitiveDetector:
SensitiveTkDetector Observer< const BeginOfEvent * > Observer< const EndOfEvent * > SensitiveDetector

Public Member Functions

virtual void EndOfEvent (G4HCofThisEvent *)
 
void fillHits (edm::PSimHitContainer &, std::string use)
 
std::vector< std::string > getNames ()
 
const MuonSlaveSDGetSlaveMuon () const
 
 MuonSensitiveDetector (std::string, const DDCompactView &, SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
 
virtual G4bool ProcessHits (G4Step *, G4TouchableHistory *)
 
virtual uint32_t setDetUnitId (G4Step *)
 
std::string type ()
 
virtual ~MuonSensitiveDetector ()
 
- Public Member Functions inherited from SensitiveTkDetector
 SensitiveTkDetector (std::string &iname, const DDCompactView &cpv, SensitiveDetectorCatalog &clg, edm::ParameterSet const &p)
 
- Public Member Functions inherited from SensitiveDetector
virtual void AssignSD (std::string &vname)
 
Local3DPoint ConvertToLocal3DPoint (G4ThreeVector point)
 
Local3DPoint FinalStepPosition (G4Step *s, coordinates)
 
virtual void Initialize (G4HCofThisEvent *eventHC)
 
Local3DPoint InitialStepPosition (G4Step *s, coordinates)
 
std::string nameOfSD ()
 
void NaNTrap (G4Step *step)
 
void Register ()
 
 SensitiveDetector (std::string &iname, const DDCompactView &cpv, SensitiveDetectorCatalog &, edm::ParameterSet const &p)
 
virtual ~SensitiveDetector ()
 
- Public Member Functions inherited from Observer< const BeginOfEvent * >
 Observer ()
 
void slotForUpdate (const BeginOfEvent *iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfEvent * >
 Observer ()
 
void slotForUpdate (const EndOfEvent *iT)
 
virtual ~Observer ()
 

Private Member Functions

virtual void clearHits ()
 
void createHit (G4Step *)
 
Local3DPoint FinalStepPositionVsParent (G4Step *currentStep, G4int levelsUp)
 
TrackInformationgetOrCreateTrackInformation (const G4Track *theTrack)
 
Local3DPoint InitialStepPositionVsParent (G4Step *currentStep, G4int levelsUp)
 
bool newHit (G4Step *)
 
void saveHit ()
 
void storeVolumeAndTrack (G4Step *)
 
Local3DPoint toOrcaRef (Local3DPoint in, G4Step *s)
 
Local3DPoint toOrcaUnits (Local3DPoint)
 
Global3DPoint toOrcaUnits (Global3DPoint)
 
void update (const BeginOfEvent *)
 This routine will be called when the appropriate signal arrives. More...
 
void update (const ::EndOfEvent *)
 
void updateHit (G4Step *)
 

Private Attributes

MuonSubDetectordetector
 
MuonG4Numberingg4numbering
 
G4TrackToParticleIDmyG4TrackToParticleID
 
MuonSimHitNumberingSchemenumbering
 
bool printHits
 
MuonSlaveSDslaveMuon
 
bool STallMuonsPersistent
 
double STenergyPersistentCut
 
uint32_t theDetUnitId
 
G4ProcessTypeEnumeratortheG4ProcessTypeEnumerator
 
Global3DPoint theGlobalEntry
 
UpdatablePSimHittheHit
 
const SimTrackManagertheManager
 
SimHitPrinterthePrinter
 
G4VPhysicalVolume * thePV
 
MuonFrameRotationtheRotation
 
unsigned int theTrackID
 

Additional Inherited Members

- Public Types inherited from SensitiveDetector
enum  coordinates { WorldCoordinates, LocalCoordinates }
 
- Protected Member Functions inherited from Observer< const EndOfEvent * >
virtual void update (const EndOfEvent *)=0
 This routine will be called when the appropriate signal arrives. More...
 

Detailed Description

implementation of SensitiveDetector for the muon detector; a MuonSlaveSD handles the interfacing to the database; numbering scheme are booked according to the detector name

Author
Arno Straessner, CERN arno..nosp@m.stra.nosp@m.essne.nosp@m.r@ce.nosp@m.rn.ch

Modification: 19/05/03. P.Arce Add SimTracks selection

Definition at line 44 of file MuonSensitiveDetector.h.

Constructor & Destructor Documentation

MuonSensitiveDetector::MuonSensitiveDetector ( std::string  name,
const DDCompactView cpv,
SensitiveDetectorCatalog clg,
edm::ParameterSet const &  p,
const SimTrackManager manager 
)

Definition at line 29 of file MuonSensitiveDetector.cc.

References SensitiveDetector::AssignSD(), detector, g4numbering, edm::ParameterSet::getParameter(), MuonSubDetector::isEndcap(), MuonSubDetector::isGem(), MuonSubDetector::isRpc(), LogDebug, SensitiveDetectorCatalog::logicalNames(), myG4TrackToParticleID, numbering, printHits, SensitiveDetector::Register(), slaveMuon, STallMuonsPersistent, STenergyPersistentCut, theG4ProcessTypeEnumerator, theManager, thePrinter, and theRotation.

34  : SensitiveTkDetector(name, cpv, clg, p),
35  thePV(0), theHit(0), theDetUnitId(0), theTrackID(0), theManager(manager)
36 {
37  edm::ParameterSet m_MuonSD = p.getParameter<edm::ParameterSet>("MuonSD");
38  STenergyPersistentCut = m_MuonSD.getParameter<double>("EnergyThresholdForPersistency");//Default 1. GeV
39  STallMuonsPersistent = m_MuonSD.getParameter<bool>("AllMuonsPersistent");
40  printHits = m_MuonSD.getParameter<bool>("PrintHits");
41 
42  //
43  // Here simply create 1 MuonSlaveSD for the moment
44  //
45 
46  LogDebug("MuonSimDebug") << "create MuonSubDetector "<<name<<std::endl;
47 
49 
50  LogDebug("MuonSimDebug") << "create MuonFrameRotation"<<std::endl;
51 
52  if (detector->isEndcap()) {
53  // cout << "MuonFrameRotation create MuonEndcapFrameRotation"<<endl;
55  } else if (detector->isRpc()) {
56  // cout << "MuonFrameRotation create MuonRpcFrameRotation"<<endl;
58  } else if (detector->isGem()) {
59  // cout << "MuonFrameRotation create MuonGemFrameRotation"<<endl;
61  } else {
62  theRotation = 0;
63  }
64  LogDebug("MuonSimDebug") << "create MuonSlaveSD"<<std::endl;
66  LogDebug("MuonSimDebug") << "create MuonSimHitNumberingScheme"<<std::endl;
68  g4numbering = new MuonG4Numbering(cpv);
69 
70 
71  //
72  // Now attach the right detectors (LogicalVolumes) to me
73  //
74  std::vector<std::string> lvNames = clg.logicalNames(name);
75  this->Register();
76  for (std::vector<std::string>::iterator it = lvNames.begin(); it != lvNames.end(); it++){
77  LogDebug("MuonSimDebug") << name << " MuonSensitiveDetector:: attaching SD to LV " << *it << std::endl;
78  this->AssignSD(*it);
79  }
80 
81  if (printHits) {
82  thePrinter = new SimHitPrinter("HitPositionOSCAR.dat");
83  }
84 
85 
86  LogDebug("MuonSimDebug") << " EnergyThresholdForPersistency " << STenergyPersistentCut << " AllMuonsPersistent " << STallMuonsPersistent << std::endl;
87 
90 
91 }
#define LogDebug(id)
T getParameter(std::string const &) const
std::vector< std::string > logicalNames(std::string &readoutName)
MuonSubDetector * detector
SensitiveTkDetector(std::string &iname, const DDCompactView &cpv, SensitiveDetectorCatalog &clg, edm::ParameterSet const &p)
G4ProcessTypeEnumerator * theG4ProcessTypeEnumerator
const SimTrackManager * theManager
MuonFrameRotation * theRotation
MuonSimHitNumberingScheme * numbering
G4TrackToParticleID * myG4TrackToParticleID
virtual void AssignSD(std::string &vname)
G4VPhysicalVolume * thePV
UpdatablePSimHit * theHit
MuonG4Numbering * g4numbering
MuonSensitiveDetector::~MuonSensitiveDetector ( )
virtual

Definition at line 94 of file MuonSensitiveDetector.cc.

References detector, g4numbering, myG4TrackToParticleID, numbering, slaveMuon, theG4ProcessTypeEnumerator, and theRotation.

94  {
95  delete g4numbering;
96  delete numbering;
97  delete slaveMuon;
98  delete theRotation;
99  delete detector;
100 
102 
103  delete myG4TrackToParticleID;
104 }
MuonSubDetector * detector
G4ProcessTypeEnumerator * theG4ProcessTypeEnumerator
MuonFrameRotation * theRotation
MuonSimHitNumberingScheme * numbering
G4TrackToParticleID * myG4TrackToParticleID
MuonG4Numbering * g4numbering

Member Function Documentation

void MuonSensitiveDetector::clearHits ( )
privatevirtual

Implements SensitiveDetector.

Definition at line 122 of file MuonSensitiveDetector.cc.

References TrackingSlaveSD::Initialize(), LogDebug, and slaveMuon.

Referenced by update().

123 {
124  LogDebug("MuonSimDebug") << "MuonSensitiveDetector::clearHits"<<std::endl;
126 }
#define LogDebug(id)
virtual void Initialize()
void MuonSensitiveDetector::createHit ( G4Step *  aStep)
private

Definition at line 196 of file MuonSensitiveDetector.cc.

References abs, SensitiveDetector::ConvertToLocal3DPoint(), detector, SensitiveDetector::FinalStepPosition(), FinalStepPositionVsParent(), getOrCreateTrackInformation(), info, SensitiveDetector::InitialStepPosition(), InitialStepPositionVsParent(), MuonSubDetector::isBarrel(), MuonSubDetector::isEndcap(), SensitiveDetector::LocalCoordinates, LogDebug, mag(), myG4TrackToParticleID, AlCaHLTBitMon_ParallelJobs::p, p2, G4TrackToParticleID::particleID(), PV3DBase< T, PVType, FrameType >::phi(), printHits, G4ProcessTypeEnumerator::processId(), setDetUnitId(), STallMuonsPersistent, STenergyPersistentCut, TrackInformation::storeTrack(), storeVolumeAndTrack(), theDetUnitId, theG4ProcessTypeEnumerator, theGlobalEntry, theHit, thePV, PV3DBase< T, PVType, FrameType >::theta(), theTrackID, toOrcaRef(), toOrcaUnits(), csvLumiCalc::unit, SensitiveDetector::WorldCoordinates, PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by ProcessHits().

196  {
197 
198  G4Track * theTrack = aStep->GetTrack();
199 
200  Local3DPoint theEntryPoint;
201  Local3DPoint theExitPoint;
202 
203  if (detector->isBarrel()) {
204  theEntryPoint= toOrcaUnits(toOrcaRef(InitialStepPositionVsParent(aStep,1),aStep)); // 1 level up
205  theExitPoint= toOrcaUnits(toOrcaRef(FinalStepPositionVsParent(aStep,1),aStep));
206  } else if (detector->isEndcap()) {
207  // save local z at current level
208  theEntryPoint= toOrcaUnits(toOrcaRef(InitialStepPosition(aStep,LocalCoordinates),aStep));
209  theExitPoint= toOrcaUnits(toOrcaRef(FinalStepPosition(aStep,LocalCoordinates),aStep));
210  float zentry = theEntryPoint.z();
211  float zexit = theExitPoint.z();
212  Local3DPoint tempEntryPoint= toOrcaUnits(toOrcaRef(InitialStepPositionVsParent(aStep,4),aStep)); // 4 levels up
213  Local3DPoint tempExitPoint= toOrcaUnits(toOrcaRef(FinalStepPositionVsParent(aStep,4),aStep));
214  // reset local z from z wrt deep-parent volume to z wrt low-level volume
215  theEntryPoint = Local3DPoint( tempEntryPoint.x(), tempEntryPoint.y(), zentry );
216  theExitPoint = Local3DPoint( tempExitPoint.x(), tempExitPoint.y(), zexit );
217  } else {
218  theEntryPoint= toOrcaUnits(toOrcaRef(InitialStepPosition(aStep,LocalCoordinates),aStep));
219  theExitPoint= toOrcaUnits(toOrcaRef(FinalStepPosition(aStep,LocalCoordinates),aStep));
220  }
221 
222  float thePabs = aStep->GetPreStepPoint()->GetMomentum().mag()/GeV;
223  float theTof = aStep->GetPreStepPoint()->GetGlobalTime()/nanosecond;
224  float theEnergyLoss = aStep->GetTotalEnergyDeposit()/GeV;
225  // int theParticleType = theTrack->GetDefinition()->GetPDGEncoding();
226  int theParticleType = myG4TrackToParticleID->particleID(theTrack);
227  G4ThreeVector gmd = aStep->GetPreStepPoint()->GetMomentumDirection();
228  G4ThreeVector lmd = ((const G4TouchableHistory *)(aStep->GetPreStepPoint()->GetTouchable()))->GetHistory()
229  ->GetTopTransform().TransformAxis(gmd);
230  Local3DPoint lnmd = toOrcaRef(ConvertToLocal3DPoint(lmd),aStep);
231  float theThetaAtEntry = lnmd.theta();
232  float thePhiAtEntry = lnmd.phi();
233 
234  storeVolumeAndTrack( aStep );
235  theDetUnitId = setDetUnitId(aStep);
236 
237  Global3DPoint theGlobalPos;
238  if (printHits) {
239  Local3DPoint theGlobalHelp = InitialStepPosition(aStep,WorldCoordinates);
240  theGlobalEntry = toOrcaUnits(Global3DPoint (theGlobalHelp.x(),theGlobalHelp.y(),theGlobalHelp.z()));
241 
242  G4StepPoint * preStepPoint = aStep->GetPreStepPoint();
243  const G4TouchableHistory * theTouchable=(const G4TouchableHistory *)
244  (preStepPoint->GetTouchable());
245  theGlobalHelp=ConvertToLocal3DPoint(theTouchable->GetTranslation());
246  theGlobalPos = toOrcaUnits(Global3DPoint (theGlobalHelp.x(),theGlobalHelp.y(),theGlobalHelp.z()));
247  // const G4RotationMatrix * theGlobalRot = theTouchable->GetRotation();
248  }
249 
250  LogDebug("MuonSimDebug") << "MuonSensitiveDetector::createHit UpdatablePSimHit"<<std::endl;
251 
252  theHit = new UpdatablePSimHit(theEntryPoint,theExitPoint,thePabs,theTof,
253  theEnergyLoss,theParticleType,theDetUnitId,
254  theTrackID,theThetaAtEntry,thePhiAtEntry,
255  theG4ProcessTypeEnumerator->processId(theTrack->GetCreatorProcess()));
256 
257 
258  LogDebug("MuonSimDebug") <<"=== NEW ==================> ELOSS = "<<theEnergyLoss<<" "
259  <<thePV->GetLogicalVolume()->GetName()<<std::endl;
260  const G4VProcess* p = aStep->GetPostStepPoint()->GetProcessDefinedStep();
261  const G4VProcess* p2 = aStep->GetPreStepPoint()->GetProcessDefinedStep();
262  if (p)
263  LogDebug("MuonSimDebug") <<" POST PROCESS = "<<p->GetProcessName()<<std::endl;
264  if (p2)
265  LogDebug("MuonSimDebug") <<" PRE PROCESS = "<<p2->GetProcessName()<<std::endl;
266  LogDebug("MuonSimDebug") << "newhit theta " << theThetaAtEntry<<std::endl;
267  LogDebug("MuonSimDebug") << "newhit phi " << thePhiAtEntry<<std::endl;
268  LogDebug("MuonSimDebug") << "newhit pabs " << thePabs<<std::endl;
269  LogDebug("MuonSimDebug") << "newhit tof " << theTof<<std::endl;
270  LogDebug("MuonSimDebug") << "newhit track " << theTrackID<<std::endl;
271  LogDebug("MuonSimDebug") << "newhit entry " << theEntryPoint<<std::endl;
272  LogDebug("MuonSimDebug") << "newhit exit " << theExitPoint<<std::endl;
273  LogDebug("MuonSimDebug") << "newhit eloss " << theEnergyLoss << std::endl;
274  LogDebug("MuonSimDebug") << "newhit detid " << theDetUnitId<<std::endl;
275  LogDebug("MuonSimDebug") << "newhit delta " << (theExitPoint-theEntryPoint)<<std::endl;
276  LogDebug("MuonSimDebug") << "newhit deltu " << (theExitPoint-theEntryPoint).unit();
277  LogDebug("MuonSimDebug") << " " << (theExitPoint-theEntryPoint).mag()<<std::endl;
278  LogDebug("MuonSimDebug") << "newhit glob " << theGlobalEntry<<std::endl;
279  LogDebug("MuonSimDebug") << "newhit dpos " << theGlobalPos<<std::endl;
280  LogDebug("MuonSimDebug") << "newhit drot " << std::endl;
281  // theGlobalRot->print(LogDebug("MuonSimDebug"));
282 
283 
284  //
285  //----- SimTracks: Make it persistent?
286  //
287  int thePID = theTrack->GetDefinition()->GetPDGEncoding();
288  LogDebug("MuonSimDebug") << " checking simtrack " << thePID << " " << thePabs << " STenergyPersistentCut " << STenergyPersistentCut << std::endl;
289 
290  if( thePabs*GeV > STenergyPersistentCut
291  || ( abs(thePID) == 13 && STallMuonsPersistent ) ){
293  LogDebug("MuonSimDebug") <<" track leaving hit in muons made selected for persistency"<<std::endl;
294 
295  info->storeTrack(true);
296  }
297 
298 }
#define LogDebug(id)
Local3DPoint FinalStepPositionVsParent(G4Step *currentStep, G4int levelsUp)
bool storeTrack() const
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Local3DPoint ConvertToLocal3DPoint(G4ThreeVector point)
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
T y() const
Definition: PV3DBase.h:63
#define abs(x)
Definition: mlp_lapack.h:159
MuonSubDetector * detector
Geom::Theta< T > theta() const
Definition: PV3DBase.h:75
G4ProcessTypeEnumerator * theG4ProcessTypeEnumerator
string unit
Definition: csvLumiCalc.py:46
T z() const
Definition: PV3DBase.h:64
Local3DPoint toOrcaUnits(Local3DPoint)
double p2[4]
Definition: TauolaWrapper.h:90
int particleID(const G4Track *)
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9
unsigned int processId(const G4VProcess *)
Local3DPoint toOrcaRef(Local3DPoint in, G4Step *s)
G4TrackToParticleID * myG4TrackToParticleID
G4VPhysicalVolume * thePV
Local3DPoint InitialStepPositionVsParent(G4Step *currentStep, G4int levelsUp)
Local3DPoint FinalStepPosition(G4Step *s, coordinates)
virtual uint32_t setDetUnitId(G4Step *)
T x() const
Definition: PV3DBase.h:62
TrackInformation * getOrCreateTrackInformation(const G4Track *theTrack)
Local3DPoint InitialStepPosition(G4Step *s, coordinates)
UpdatablePSimHit * theHit
void MuonSensitiveDetector::EndOfEvent ( G4HCofThisEvent *  )
virtual

Reimplemented from SensitiveDetector.

Definition at line 382 of file MuonSensitiveDetector.cc.

References saveHit().

383 {
384 // TimeMe t("MuonSensitiveDetector::EndOfEvent", false);
385  // LogDebug("MuonSimDebug") << "MuonSensitiveDetector::EndOfEvent saving last hit en event " << std::endl;
386  saveHit();
387 }
void MuonSensitiveDetector::fillHits ( edm::PSimHitContainer c,
std::string  use 
)
virtual

Implements SensitiveTkDetector.

Definition at line 390 of file MuonSensitiveDetector.cc.

References TrackingSlaveSD::hits(), n, TrackingSlaveSD::name(), and slaveMuon.

390  {
391  //
392  // do it once for low, once for High
393  //
394 
395  if (slaveMuon->name() == n) c=slaveMuon->hits();
396 
397 }
std::string name() const
std::vector< PSimHit > & hits()
Local3DPoint MuonSensitiveDetector::FinalStepPositionVsParent ( G4Step *  currentStep,
G4int  levelsUp 
)
private

Definition at line 420 of file MuonSensitiveDetector.cc.

References SensitiveDetector::ConvertToLocal3DPoint().

Referenced by createHit(), and updateHit().

420  {
421 
422  G4StepPoint * postStepPoint = currentStep->GetPostStepPoint();
423  G4StepPoint * preStepPoint = currentStep->GetPreStepPoint();
424  G4ThreeVector globalCoordinates = postStepPoint->GetPosition();
425 
426  const G4TouchableHistory * theTouchable = (const G4TouchableHistory *)
427  (preStepPoint->GetTouchable());
428 
429  G4int depth = theTouchable->GetHistory()->GetDepth();
430  G4ThreeVector localCoordinates = theTouchable->GetHistory()
431  ->GetTransform(depth-levelsUp).TransformPoint(globalCoordinates);
432 
433  return ConvertToLocal3DPoint(localCoordinates);
434 }
Local3DPoint ConvertToLocal3DPoint(G4ThreeVector point)
std::vector< std::string > MuonSensitiveDetector::getNames ( )
virtual

Reimplemented from SensitiveDetector.

Definition at line 399 of file MuonSensitiveDetector.cc.

References TrackingSlaveSD::name(), slaveMuon, and groupFilesInBlocks::temp.

399  {
400  std::vector<std::string> temp;
401  temp.push_back(slaveMuon->name());
402  return temp;
403 }
std::string name() const
TrackInformation * MuonSensitiveDetector::getOrCreateTrackInformation ( const G4Track *  theTrack)
private

Definition at line 366 of file MuonSensitiveDetector.cc.

References dtNoiseDBValidation_cfg::cerr, info, and groupFilesInBlocks::temp.

Referenced by createHit().

367 {
368  G4VUserTrackInformation* temp = gTrack->GetUserInformation();
369  if (temp == 0){
370  std::cerr <<" ERROR: no G4VUserTrackInformation available"<<std::endl;
371  abort();
372  }else{
373  TrackInformation* info = dynamic_cast<TrackInformation*>(temp);
374  if (info ==0){
375  std::cerr <<" ERROR: TkSimTrackSelection: the UserInformation does not appear to be a TrackInformation"<<std::endl;
376  abort();
377  }
378  return info;
379  }
380 }
const MuonSlaveSD* MuonSensitiveDetector::GetSlaveMuon ( ) const
inline

Definition at line 63 of file MuonSensitiveDetector.h.

References slaveMuon.

63  {
64  return slaveMuon; }
Local3DPoint MuonSensitiveDetector::InitialStepPositionVsParent ( G4Step *  currentStep,
G4int  levelsUp 
)
private

Transform from local coordinates of a volume to local coordinates of a parent volume one or more levels up the volume hierarchy: e.g. levelsUp = 1 for immediate parent.
This is done by moving from local_1 -> global -> local_2.

Definition at line 405 of file MuonSensitiveDetector.cc.

References SensitiveDetector::ConvertToLocal3DPoint().

Referenced by createHit().

405  {
406 
407  G4StepPoint * preStepPoint = currentStep->GetPreStepPoint();
408  G4ThreeVector globalCoordinates = preStepPoint->GetPosition();
409 
410  const G4TouchableHistory * theTouchable=(const G4TouchableHistory *)
411  (preStepPoint->GetTouchable());
412 
413  G4int depth = theTouchable->GetHistory()->GetDepth();
414  G4ThreeVector localCoordinates = theTouchable->GetHistory()
415  ->GetTransform(depth-levelsUp).TransformPoint(globalCoordinates);
416 
417  return ConvertToLocal3DPoint(localCoordinates);
418 }
Local3DPoint ConvertToLocal3DPoint(G4ThreeVector point)
bool MuonSensitiveDetector::newHit ( G4Step *  aStep)
private

Definition at line 183 of file MuonSensitiveDetector.cc.

References setDetUnitId(), lumiQTWidget::t, theDetUnitId, thePV, and theTrackID.

Referenced by ProcessHits().

183  {
184 
185  G4VPhysicalVolume* pv = aStep->GetPreStepPoint()->GetPhysicalVolume();
186  G4Track * t = aStep->GetTrack();
187  uint32_t currentUnitId=setDetUnitId(aStep);
188  unsigned int currentTrackID=t->GetTrackID();
189  //unsigned int currentEventID=G4EventManager::GetEventManager()->GetConstCurrentEvent()->GetEventID();
190  bool changed=((pv!=thePV) ||
191  (currentUnitId!=theDetUnitId) ||
192  (currentTrackID!=theTrackID));
193  return changed;
194 }
G4VPhysicalVolume * thePV
virtual uint32_t setDetUnitId(G4Step *)
bool MuonSensitiveDetector::ProcessHits ( G4Step *  aStep,
G4TouchableHistory *  ROhist 
)
virtual

Implements SensitiveDetector.

Definition at line 128 of file MuonSensitiveDetector.cc.

References createHit(), SensitiveDetector::InitialStepPosition(), LogDebug, newHit(), saveHit(), storeVolumeAndTrack(), updateHit(), and SensitiveDetector::WorldCoordinates.

129 {
130  LogDebug("MuonSimDebug") <<" MuonSensitiveDetector::ProcessHits "<<InitialStepPosition(aStep,WorldCoordinates)<<std::endl;
131 
132  // TimeMe t1( theHitTimer, false);
133 
134  if (aStep->GetTotalEnergyDeposit()>0.){
135  // do not count neutrals that are killed by User Limits MinEKine
136  if( aStep->GetTrack()->GetDynamicParticle()->GetCharge() != 0 ){
137 
138  if (newHit(aStep)) {
139  saveHit();
140  createHit(aStep);
141  } else {
142  updateHit(aStep);
143  }
144  return true;
145  } else {
146  storeVolumeAndTrack(aStep);
147  return false;
148  }
149  }
150  return false;
151 }
#define LogDebug(id)
Local3DPoint InitialStepPosition(G4Step *s, coordinates)
void MuonSensitiveDetector::saveHit ( )
private

Definition at line 345 of file MuonSensitiveDetector.cc.

References detector, PSimHit::detUnitId(), PSimHit::entryPoint(), PSimHit::exitPoint(), MuonSubDetector::name(), SimHitPrinter::printGlobal(), printHits, SimHitPrinter::printId(), SimHitPrinter::printLocal(), TrackingSlaveSD::processHits(), slaveMuon, SimHitPrinter::startNewSimHit(), theGlobalEntry, theHit, and thePrinter.

Referenced by EndOfEvent(), and ProcessHits().

345  {
346 
347  if (theHit) {
348  if (printHits) {
351  // thePrinter->printTrack(theHit->trackId());
352  //thePrinter->printPabs(theHit->pabs());
353  //thePrinter->printEloss(theHit->energyLoss());
356  }
358  // seems the hit does not want to be deleted
359  // done by the hit collection?
360  delete theHit;
361  theHit = 0; //set it to 0, because you are checking that is 0
362  }
363 
364 }
void printLocal(LocalPoint, LocalPoint) const
std::string name()
MuonSubDetector * detector
Local3DPoint exitPoint() const
Exit point in the local Det frame.
Definition: PSimHit.h:38
void printGlobal(GlobalPoint) const
void startNewSimHit(std::string)
void printId(int) const
virtual bool processHits(const PSimHit &)
Local3DPoint entryPoint() const
Entry point in the local Det frame.
Definition: PSimHit.h:35
unsigned int detUnitId() const
Definition: PSimHit.h:93
UpdatablePSimHit * theHit
uint32_t MuonSensitiveDetector::setDetUnitId ( G4Step *  aStep)
virtual

Implements SensitiveDetector.

Definition at line 153 of file MuonSensitiveDetector.cc.

References MuonSimHitNumberingScheme::baseNumberToUnitNumber(), g4numbering, numbering, and MuonG4Numbering::PhysicalVolumeToBaseNumber().

Referenced by createHit(), and newHit().

154 {
155  // G4VPhysicalVolume * pv = aStep->GetPreStepPoint()->GetPhysicalVolume();
157  return numbering->baseNumberToUnitNumber(num);
158 }
virtual int baseNumberToUnitNumber(const MuonBaseNumber)
MuonBaseNumber PhysicalVolumeToBaseNumber(const G4Step *aStep)
MuonSimHitNumberingScheme * numbering
long long int num
Definition: procUtils.cc:71
MuonG4Numbering * g4numbering
void MuonSensitiveDetector::storeVolumeAndTrack ( G4Step *  aStep)
private

Definition at line 176 of file MuonSensitiveDetector.cc.

References lumiQTWidget::t, thePV, and theTrackID.

Referenced by createHit(), and ProcessHits().

176  {
177  G4VPhysicalVolume* pv = aStep->GetPreStepPoint()->GetPhysicalVolume();
178  G4Track * t = aStep->GetTrack();
179  thePV=pv;
180  theTrackID=t->GetTrackID();
181 }
G4VPhysicalVolume * thePV
Local3DPoint MuonSensitiveDetector::toOrcaRef ( Local3DPoint  in,
G4Step *  s 
)
private

Definition at line 161 of file MuonSensitiveDetector.cc.

References theRotation, and MuonFrameRotation::transformPoint().

Referenced by createHit(), and updateHit().

161  {
162  if (theRotation !=0 ) {
163  return theRotation->transformPoint(in,s);
164  }
165  return (in);
166 }
virtual Local3DPoint transformPoint(const Local3DPoint &, const G4Step *) const =0
MuonFrameRotation * theRotation
Local3DPoint MuonSensitiveDetector::toOrcaUnits ( Local3DPoint  in)
private

Definition at line 168 of file MuonSensitiveDetector.cc.

References PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by createHit(), and updateHit().

168  {
169  return Local3DPoint(in.x()/cm,in.y()/cm,in.z()/cm);
170 }
T y() const
Definition: PV3DBase.h:63
T z() const
Definition: PV3DBase.h:64
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9
T x() const
Definition: PV3DBase.h:62
Global3DPoint MuonSensitiveDetector::toOrcaUnits ( Global3DPoint  in)
private

Definition at line 172 of file MuonSensitiveDetector.cc.

References PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

172  {
173  return Global3DPoint(in.x()/cm,in.y()/cm,in.z()/cm);
174 }
T y() const
Definition: PV3DBase.h:63
Point3DBase< float, GlobalTag > Global3DPoint
Definition: GlobalPoint.h:7
T z() const
Definition: PV3DBase.h:64
T x() const
Definition: PV3DBase.h:62
std::string MuonSensitiveDetector::type ( )
void MuonSensitiveDetector::update ( const BeginOfEvent )
privatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfEvent * >.

Definition at line 106 of file MuonSensitiveDetector.cc.

References clearHits(), theDetUnitId, thePV, and theTrackID.

Referenced by progressbar.ProgressBar::__next__(), relval_steps.Matrix::__setitem__(), relval_steps.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), relval_steps.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

106  {
107  clearHits();
108 
109  //----- Initialize variables to check if two steps belong to same hit
110  thePV = 0;
111  theDetUnitId = 0;
112  theTrackID = 0;
113 
114 }
G4VPhysicalVolume * thePV
void MuonSensitiveDetector::update ( const ::EndOfEvent ev)
private

Definition at line 116 of file MuonSensitiveDetector.cc.

Referenced by progressbar.ProgressBar::__next__(), relval_steps.Matrix::__setitem__(), relval_steps.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), relval_steps.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

117 {
118  //slaveMuon->renumbering(theManager);
119 }
void MuonSensitiveDetector::updateHit ( G4Step *  aStep)
private

Definition at line 300 of file MuonSensitiveDetector.cc.

References UpdatablePSimHit::addEnergyLoss(), dtNoiseDBValidation_cfg::cerr, detector, PSimHit::energyLoss(), PSimHit::entryPoint(), SensitiveDetector::FinalStepPosition(), FinalStepPositionVsParent(), MuonSubDetector::isBarrel(), MuonSubDetector::isEndcap(), SensitiveDetector::LocalCoordinates, LogDebug, mag(), AlCaHLTBitMon_ParallelJobs::p, p2, theDetUnitId, theHit, thePV, toOrcaRef(), toOrcaUnits(), csvLumiCalc::unit, UpdatablePSimHit::updateExitPoint(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by ProcessHits().

300  {
301  // float thePabs = aStep->GetPreStepPoint()->GetMomentum().mag()/GeV;
302  // Local3DPoint theEntryPoint= InitialStepPosition(aStep,LocalCoordinates);
303 
304 
305  Local3DPoint theExitPoint;
306 
307  if (detector->isBarrel()) {
308  theExitPoint= toOrcaUnits(toOrcaRef(FinalStepPositionVsParent(aStep,1),aStep));
309  } else if (detector->isEndcap()) {
310  // save local z at current level
311  theExitPoint= toOrcaUnits(toOrcaRef(FinalStepPosition(aStep,LocalCoordinates),aStep));
312  float zexit = theExitPoint.z();
313  Local3DPoint tempExitPoint= toOrcaUnits(toOrcaRef(FinalStepPositionVsParent(aStep,4),aStep));
314  theExitPoint = Local3DPoint( tempExitPoint.x(), tempExitPoint.y(), zexit );
315  } else {
316  theExitPoint= toOrcaUnits(toOrcaRef(FinalStepPosition(aStep,LocalCoordinates),aStep));
317  }
318 
319  float theEnergyLoss = aStep->GetTotalEnergyDeposit()/GeV;
320 
321  if( theHit == 0 ){
322  std::cerr << "!!ERRROR in MuonSensitiveDetector::updateHit. It is called when there is no hit " << std::endl;
323  }
324 
325  theHit->updateExitPoint(theExitPoint);
326  theHit->addEnergyLoss(theEnergyLoss);
327 
328  LogDebug("MuonSimDebug") <<"=== UPDATE ===============> ELOSS = "<<theEnergyLoss<<" "
329  <<thePV->GetLogicalVolume()->GetName()<<std::endl;
330  const G4VProcess* p = aStep->GetPostStepPoint()->GetProcessDefinedStep();
331  const G4VProcess* p2 = aStep->GetPreStepPoint()->GetProcessDefinedStep();
332  if (p)
333  LogDebug("MuonSimDebug") <<" POST PROCESS = "<<p->GetProcessName()<<std::endl;
334  if (p2)
335  LogDebug("MuonSimDebug") <<" PRE PROCESS = "<<p2->GetProcessName()<<std::endl;
336  LogDebug("MuonSimDebug") << "updhit exit " << theExitPoint<<std::endl;
337  LogDebug("MuonSimDebug") << "updhit eloss " << theHit->energyLoss() <<std::endl;
338  LogDebug("MuonSimDebug") << "updhit detid " << theDetUnitId<<std::endl;
339  LogDebug("MuonSimDebug") << "updhit delta " << (theExitPoint-theHit->entryPoint())<<std::endl;
340  LogDebug("MuonSimDebug") << "updhit deltu " << (theExitPoint-theHit->entryPoint()).unit();
341  LogDebug("MuonSimDebug") << " " << (theExitPoint-theHit->entryPoint()).mag()<<std::endl;
342 
343 }
#define LogDebug(id)
Local3DPoint FinalStepPositionVsParent(G4Step *currentStep, G4int levelsUp)
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
T y() const
Definition: PV3DBase.h:63
MuonSubDetector * detector
void updateExitPoint(const Local3DPoint &exit)
string unit
Definition: csvLumiCalc.py:46
T z() const
Definition: PV3DBase.h:64
Local3DPoint toOrcaUnits(Local3DPoint)
double p2[4]
Definition: TauolaWrapper.h:90
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9
void addEnergyLoss(float eloss)
Local3DPoint toOrcaRef(Local3DPoint in, G4Step *s)
float energyLoss() const
The energy deposit in the PSimHit, in ???.
Definition: PSimHit.h:75
G4VPhysicalVolume * thePV
Local3DPoint FinalStepPosition(G4Step *s, coordinates)
T x() const
Definition: PV3DBase.h:62
Local3DPoint entryPoint() const
Entry point in the local Det frame.
Definition: PSimHit.h:35
UpdatablePSimHit * theHit

Member Data Documentation

MuonSubDetector* MuonSensitiveDetector::detector
private
MuonG4Numbering* MuonSensitiveDetector::g4numbering
private
G4TrackToParticleID* MuonSensitiveDetector::myG4TrackToParticleID
private
MuonSimHitNumberingScheme* MuonSensitiveDetector::numbering
private
bool MuonSensitiveDetector::printHits
private

Definition at line 103 of file MuonSensitiveDetector.h.

Referenced by createHit(), MuonSensitiveDetector(), and saveHit().

MuonSlaveSD* MuonSensitiveDetector::slaveMuon
private
bool MuonSensitiveDetector::STallMuonsPersistent
private

Definition at line 109 of file MuonSensitiveDetector.h.

Referenced by createHit(), and MuonSensitiveDetector().

double MuonSensitiveDetector::STenergyPersistentCut
private

Definition at line 108 of file MuonSensitiveDetector.h.

Referenced by createHit(), and MuonSensitiveDetector().

uint32_t MuonSensitiveDetector::theDetUnitId
private

Definition at line 100 of file MuonSensitiveDetector.h.

Referenced by createHit(), newHit(), update(), and updateHit().

G4ProcessTypeEnumerator* MuonSensitiveDetector::theG4ProcessTypeEnumerator
private
Global3DPoint MuonSensitiveDetector::theGlobalEntry
private

Definition at line 105 of file MuonSensitiveDetector.h.

Referenced by createHit(), and saveHit().

UpdatablePSimHit* MuonSensitiveDetector::theHit
private

Definition at line 99 of file MuonSensitiveDetector.h.

Referenced by createHit(), saveHit(), and updateHit().

const SimTrackManager* MuonSensitiveDetector::theManager
private

Definition at line 114 of file MuonSensitiveDetector.h.

Referenced by MuonSensitiveDetector().

SimHitPrinter* MuonSensitiveDetector::thePrinter
private

Definition at line 104 of file MuonSensitiveDetector.h.

Referenced by MuonSensitiveDetector(), and saveHit().

G4VPhysicalVolume* MuonSensitiveDetector::thePV
private

Definition at line 98 of file MuonSensitiveDetector.h.

Referenced by createHit(), newHit(), storeVolumeAndTrack(), update(), and updateHit().

MuonFrameRotation* MuonSensitiveDetector::theRotation
private
unsigned int MuonSensitiveDetector::theTrackID
private

Definition at line 101 of file MuonSensitiveDetector.h.

Referenced by createHit(), newHit(), storeVolumeAndTrack(), and update().