CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
HGCScintSD Class Reference

#include <HGCScintSD.h>

Inheritance diagram for HGCScintSD:
CaloSD Observer< const BeginOfJob *> SensitiveCaloDetector Observer< const BeginOfRun *> Observer< const BeginOfEvent *> Observer< const BeginOfTrack *> Observer< const EndOfTrack *> Observer< const EndOfEvent *> SensitiveDetector

Public Member Functions

 HGCScintSD (const std::string &, const HGCalDDDConstants *, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
 
uint32_t setDetUnitId (const G4Step *step) override
 
 ~HGCScintSD () override=default
 
- Public Member Functions inherited from CaloSD
 CaloSD (const std::string &aSDname, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, float timeSlice=1., bool ignoreTkID=false)
 
void clear () override
 
void clearHits () override
 
void DrawAll () override
 
void EndOfEvent (G4HCofThisEvent *eventHC) override
 
void fillHits (edm::PCaloHitContainer &, const std::string &) override
 
void Initialize (G4HCofThisEvent *HCE) override
 
bool isItFineCalo (const G4VTouchable *touch)
 
void PrintAll () override
 
G4bool ProcessHits (G4Step *step, G4TouchableHistory *) override
 
bool ProcessHits (G4GFlashSpot *aSpot, G4TouchableHistory *) override
 
void reset () override
 
 ~CaloSD () override
 
- Public Member Functions inherited from SensitiveCaloDetector
 SensitiveCaloDetector (const std::string &iname, const SensitiveDetectorCatalog &clg)
 
- Public Member Functions inherited from SensitiveDetector
void EndOfEvent (G4HCofThisEvent *eventHC) override
 
const std::vector< std::string > & getNames () const
 
void Initialize (G4HCofThisEvent *eventHC) override
 
bool isCaloSD () const
 
 SensitiveDetector (const std::string &iname, const SensitiveDetectorCatalog &, bool calo)
 
 ~SensitiveDetector () override
 
- Public Member Functions inherited from Observer< const BeginOfRun *>
 Observer ()
 
void slotForUpdate (const BeginOfRun * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfEvent *>
 Observer ()
 
void slotForUpdate (const BeginOfEvent * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfTrack *>
 Observer ()
 
void slotForUpdate (const BeginOfTrack * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfTrack *>
 Observer ()
 
void slotForUpdate (const EndOfTrack * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfEvent *>
 Observer ()
 
void slotForUpdate (const EndOfEvent * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfJob *>
 Observer ()
 
void slotForUpdate (const BeginOfJob * iT)
 
virtual ~Observer ()
 

Protected Member Functions

bool filterHit (CaloG4Hit *, double) override
 
double getEnergyDeposit (const G4Step *) override
 
void initRun () override
 
void update (const BeginOfTrack *trk) override
 
void update (const ::EndOfEvent *) override
 
void update (const BeginOfRun *) override
 
void update (const EndOfTrack *trk) override
 
void update (const BeginOfEvent *) override
 
void update (const BeginOfJob *) override
 This routine will be called when the appropriate signal arrives. More...
 
- Protected Member Functions inherited from CaloSD
bool checkHit ()
 
CaloG4HitcreateNewHit (const G4Step *, const G4Track *)
 
virtual void endEvent ()
 
virtual double EnergyCorrected (const G4Step &step, const G4Track *)
 
unsigned int findBoundaryCrossingParent (const G4Track *track, bool markParentAsSaveable=true)
 
double getAttenuation (const G4Step *aStep, double birk1, double birk2, double birk3) const
 
virtual uint16_t getDepth (const G4Step *)
 
virtual bool getFromLibrary (const G4Step *step)
 
int getNumberOfHits ()
 
double getResponseWt (const G4Track *)
 
virtual int getTrackID (const G4Track *)
 
bool hitExists (const G4Step *)
 
void ignoreRejection ()
 
virtual void initEvent (const BeginOfEvent *)
 
void printDetectorLevels (const G4VTouchable *) const
 
void processHit (const G4Step *step)
 
void resetForNewPrimary (const G4Step *)
 
void setNumberCheckedHits (int val)
 
void setParameterized (bool val)
 
G4ThreeVector setToGlobal (const G4ThreeVector &, const G4VTouchable *) const
 
G4ThreeVector setToLocal (const G4ThreeVector &, const G4VTouchable *) const
 
virtual int setTrackID (const G4Step *)
 
void setUseMap (bool val)
 
std::string shortreprID (const CaloHitID &ID)
 
std::string shortreprID (const CaloG4Hit *hit)
 
void update (const BeginOfRun *) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfEvent *) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfTrack *trk) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const EndOfTrack *trk) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const ::EndOfEvent *) override
 
void updateHit (CaloG4Hit *)
 
- Protected Member Functions inherited from SensitiveDetector
TrackInformationcmsTrackInformation (const G4Track *aTrack)
 
Local3DPoint ConvertToLocal3DPoint (const G4ThreeVector &point) const
 
Local3DPoint FinalStepPosition (const G4Step *step, coordinates) const
 
Local3DPoint InitialStepPosition (const G4Step *step, coordinates) const
 
Local3DPoint LocalPostStepPosition (const G4Step *step) const
 
Local3DPoint LocalPreStepPosition (const G4Step *step) const
 
void NaNTrap (const G4Step *step) const
 
void setNames (const std::vector< std::string > &)
 
- 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...
 

Private Member Functions

bool isItinFidVolume (const G4ThreeVector &)
 
uint32_t setDetUnitId (int, int, int, int, G4ThreeVector &)
 

Private Attributes

double birk1_
 
double birk2_
 
double birk3_
 
double distanceFromEdge_
 
double eminHit_
 
bool fiducialCut_
 
HGCalGeometryMode::GeometryMode geom_mode_
 
const HGCalDDDConstantshgcons_
 
int levelT1_
 
int levelT2_
 
DetId::Detector mydet_
 
std::string nameX_
 
std::unique_ptr< HGCalNumberingSchemenumberingScheme_
 
double slopeMin_
 
bool storeAllG4Hits_
 
bool useBirk_
 
double weight_
 

Additional Inherited Members

- Protected Types inherited from SensitiveDetector
enum  coordinates { WorldCoordinates, LocalCoordinates }
 
- Static Protected Member Functions inherited from CaloSD
static std::string printableDecayChain (const std::vector< unsigned int > &decayChain)
 
- Protected Attributes inherited from CaloSD
CaloG4HitcurrentHit
 
CaloHitID currentID
 
float edepositEM
 
float edepositHAD
 
double eminHit
 
double energyCut
 
G4ThreeVector entranceLocal
 
G4ThreeVector entrancePoint
 
bool forceSave
 
float incidentEnergy
 
double kmaxIon
 
double kmaxNeutron
 
double kmaxProton
 
G4ThreeVector posGlobal
 
CaloHitID previousID
 
bool suppressHeavy
 
double tmaxHit
 

Detailed Description

Definition at line 19 of file HGCScintSD.h.

Constructor & Destructor Documentation

◆ HGCScintSD()

HGCScintSD::HGCScintSD ( const std::string &  name,
const HGCalDDDConstants hgc,
const SensitiveDetectorCatalog clg,
edm::ParameterSet const &  p,
const SimTrackManager manager 
)

Definition at line 30 of file HGCScintSD.cc.

References birk1_, birk2_, birk3_, distanceFromEdge_, eminHit_, fiducialCut_, DetId::Forward, g, edm::ParameterSet::getParameter(), DetId::HGCalHSc, mydet_, Skims_PA_cff::name, nameX_, numberingScheme_, AlCaHLTBitMon_ParallelJobs::p, CaloSD::setNumberCheckedHits(), CaloSD::setUseMap(), storeAllG4Hits_, and useBirk_.

35  : CaloSD(name,
36  clg,
37  p,
38  manager,
39  (float)(p.getParameter<edm::ParameterSet>("HGCSD").getParameter<double>("TimeSliceUnit")),
40  p.getParameter<edm::ParameterSet>("HGCSD").getParameter<bool>("IgnoreTrackID")),
41  hgcons_(hgc),
42  slopeMin_(0),
43  levelT1_(99),
44  levelT2_(99) {
45  numberingScheme_.reset(nullptr);
46 
47  edm::ParameterSet m_HGC = p.getParameter<edm::ParameterSet>("HGCScintSD");
48  eminHit_ = m_HGC.getParameter<double>("EminHit") * CLHEP::MeV;
49  fiducialCut_ = m_HGC.getParameter<bool>("FiducialCut");
50  distanceFromEdge_ = m_HGC.getParameter<double>("DistanceFromEdge");
51  useBirk_ = m_HGC.getParameter<bool>("UseBirkLaw");
52  birk1_ = m_HGC.getParameter<double>("BirkC1") * (CLHEP::g / (CLHEP::MeV * CLHEP::cm2));
53  birk2_ = m_HGC.getParameter<double>("BirkC2");
54  birk3_ = m_HGC.getParameter<double>("BirkC3");
55  storeAllG4Hits_ = m_HGC.getParameter<bool>("StoreAllG4Hits");
56 
57  if (storeAllG4Hits_) {
58  setUseMap(false);
60  }
61 
62  //this is defined in the hgcsens.xml
63  G4String myName = name;
65  nameX_ = "HGCal";
66  if (myName.find("HitsHEback") != std::string::npos) {
68  nameX_ = "HGCalHEScintillatorSensitive";
69  }
70 
71 #ifdef EDM_ML_DEBUG
72  edm::LogVerbatim("HGCSim") << "**************************************************"
73  << "\n"
74  << "* *"
75  << "\n"
76  << "* Constructing a HGCScintSD with name " << name << "\n"
77  << "* *"
78  << "\n"
79  << "**************************************************";
80 #endif
81  edm::LogVerbatim("HGCSim") << "HGCScintSD:: Threshold for storing hits: " << eminHit_ << " for " << nameX_
82  << " detector " << mydet_;
83  edm::LogVerbatim("HGCSim") << "Flag for storing individual Geant4 Hits " << storeAllG4Hits_;
84  edm::LogVerbatim("HGCSim") << "Fiducial volume cut with cut from eta/phi "
85  << "boundary " << fiducialCut_ << " at " << distanceFromEdge_;
86  edm::LogVerbatim("HGCSim") << "Use of Birks law is set to " << useBirk_
87  << " with three constants kB = " << birk1_ << ", C1 = " << birk2_ << ", C2 = " << birk3_;
88 }
double birk2_
Definition: HGCScintSD.h:50
Log< level::Info, true > LogVerbatim
int levelT2_
Definition: HGCScintSD.h:47
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
void setNumberCheckedHits(int val)
Definition: CaloSD.h:122
double birk1_
Definition: HGCScintSD.h:50
double distanceFromEdge_
Definition: HGCScintSD.h:46
int levelT1_
Definition: HGCScintSD.h:47
void setUseMap(bool val)
Definition: CaloSD.h:111
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
bool fiducialCut_
Definition: HGCScintSD.h:48
bool useBirk_
Definition: HGCScintSD.h:49
const HGCalDDDConstants * hgcons_
Definition: HGCScintSD.h:41
double eminHit_
Definition: HGCScintSD.h:46
double slopeMin_
Definition: HGCScintSD.h:46
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCScintSD.h:42
CaloSD(const std::string &aSDname, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, float timeSlice=1., bool ignoreTkID=false)
Definition: CaloSD.cc:33
std::string nameX_
Definition: HGCScintSD.h:44
DetId::Detector mydet_
Definition: HGCScintSD.h:43
double birk3_
Definition: HGCScintSD.h:50
bool storeAllG4Hits_
Definition: HGCScintSD.h:48

◆ ~HGCScintSD()

HGCScintSD::~HGCScintSD ( )
overridedefault

Member Function Documentation

◆ filterHit()

bool HGCScintSD::filterHit ( CaloG4Hit aHit,
double  time 
)
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 201 of file HGCScintSD.cc.

References eminHit_, CaloG4Hit::getEnergyDeposit(), protons_cff::time, and CaloSD::tmaxHit.

201  {
202  return ((time <= tmaxHit) && (aHit->getEnergyDeposit() > eminHit_));
203 }
double tmaxHit
Definition: CaloSD.h:144
double eminHit_
Definition: HGCScintSD.h:46
double getEnergyDeposit() const
Definition: CaloG4Hit.h:79

◆ getEnergyDeposit()

double HGCScintSD::getEnergyDeposit ( const G4Step *  aStep)
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 90 of file HGCScintSD.cc.

References funct::abs(), birk1_, birk2_, birk3_, CaloSD::getAttenuation(), CaloSD::getResponseWt(), alignCSCRings::r, slopeMin_, useBirk_, weight_, and z.

90  {
91  double r = aStep->GetPreStepPoint()->GetPosition().perp();
92  double z = std::abs(aStep->GetPreStepPoint()->GetPosition().z());
93 #ifdef EDM_ML_DEBUG
94  G4int parCode = aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
95  G4String parName = aStep->GetTrack()->GetDefinition()->GetParticleName();
96  G4LogicalVolume* lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
97  edm::LogVerbatim("HGCSim") << "HGCScintSD: Hit from standard path from " << lv->GetName() << " for Track "
98  << aStep->GetTrack()->GetTrackID() << " (" << parCode << ":" << parName << ") R = " << r
99  << " Z = " << z << " slope = " << r / z << ":" << slopeMin_;
100 #endif
101  // Apply fiducial cut
102  if (r < z * slopeMin_) {
103 #ifdef EDM_ML_DEBUG
104  edm::LogVerbatim("HGCSim") << "HGCScintSD: Fiducial Volume cut";
105 #endif
106  return 0.0;
107  }
108 
109  double wt1 = getResponseWt(aStep->GetTrack());
110  double wt2 = aStep->GetTrack()->GetWeight();
111  double wt3 = (useBirk_ ? getAttenuation(aStep, birk1_, birk2_, birk3_) : 1.0);
112  double destep = weight_ * wt1 * wt3 * (aStep->GetTotalEnergyDeposit());
113  if (wt2 > 0)
114  destep *= wt2;
115 #ifdef EDM_ML_DEBUG
116  edm::LogVerbatim("HGCalSim") << "HGCScintSD: weights= " << weight_ << ":" << wt1 << ":" << wt2 << ":" << wt3
117  << " Total weight " << weight_ * wt1 * wt2 * wt3
118  << " deStep: " << aStep->GetTotalEnergyDeposit() << ":" << destep;
119 #endif
120  return destep;
121 }
double birk2_
Definition: HGCScintSD.h:50
Log< level::Info, true > LogVerbatim
double birk1_
Definition: HGCScintSD.h:50
bool useBirk_
Definition: HGCScintSD.h:49
double weight_
Definition: HGCScintSD.h:50
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double slopeMin_
Definition: HGCScintSD.h:46
double getAttenuation(const G4Step *aStep, double birk1, double birk2, double birk3) const
Definition: CaloSD.cc:657
double getResponseWt(const G4Track *)
Definition: CaloSD.cc:849
double birk3_
Definition: HGCScintSD.h:50

◆ initRun()

void HGCScintSD::initRun ( )
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 199 of file HGCScintSD.cc.

199 {}

◆ isItinFidVolume()

bool HGCScintSD::isItinFidVolume ( const G4ThreeVector &  pos)
private

Definition at line 210 of file HGCScintSD.cc.

References distanceFromEdge_, HGCalDDDConstants::distFromEdgeTrap(), fiducialCut_, and hgcons_.

Referenced by setDetUnitId().

210  {
211  if (fiducialCut_) {
212  return (hgcons_->distFromEdgeTrap(pos.x(), pos.y(), pos.z()) > distanceFromEdge_);
213  } else {
214  return true;
215  }
216 }
double distFromEdgeTrap(double x, double y, double z) const
double distanceFromEdge_
Definition: HGCScintSD.h:46
bool fiducialCut_
Definition: HGCScintSD.h:48
const HGCalDDDConstants * hgcons_
Definition: HGCScintSD.h:41

◆ setDetUnitId() [1/2]

uint32_t HGCScintSD::setDetUnitId ( const G4Step *  step)
overridevirtual

Implements CaloSD.

Definition at line 123 of file HGCScintSD.cc.

References TauDecayModes::dec, geom_mode_, triggerObjects_cff::id, isItinFidVolume(), phase1PixelTopology::layer, levelT1_, levelT2_, callgraph::module, CaloSD::printDetectorLevels(), and HGCalGeometryMode::TrapezoidModule.

123  {
124  const G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
125  const G4VTouchable* touch = preStepPoint->GetTouchable();
126 
127 #ifdef EDM_ML_DEBUG
128  edm::LogVerbatim("HGCSim") << "DepthsTop: " << touch->GetHistoryDepth() << ":" << levelT1_ << ":" << levelT2_;
129  printDetectorLevels(touch);
130 #endif
131  //determine the exact position in global coordinates in the mass geometry
132  G4ThreeVector hitPoint = preStepPoint->GetPosition();
133  float globalZ = touch->GetTranslation(0).z();
134  int iz(globalZ > 0 ? 1 : -1);
135 
136  int layer(0), module(-1), cell(-1);
138  layer = touch->GetReplicaNumber(1);
139  } else if ((touch->GetHistoryDepth() == levelT1_) || (touch->GetHistoryDepth() == levelT2_)) {
140  layer = touch->GetReplicaNumber(0);
141 #ifdef EDM_ML_DEBUG
142  edm::LogVerbatim("HGCSim") << "DepthsTop: " << touch->GetHistoryDepth() << ":" << levelT1_ << ":" << levelT2_
143  << " name " << touch->GetVolume(0)->GetName() << " layer:module:cell " << layer << ":"
144  << module << ":" << cell;
145 #endif
146  } else {
147  layer = touch->GetReplicaNumber(3);
148  module = touch->GetReplicaNumber(2);
149  cell = touch->GetReplicaNumber(1);
150 #ifdef EDM_ML_DEBUG
151  edm::LogVerbatim("HGCSim") << "DepthsInside: " << touch->GetHistoryDepth() << " name "
152  << touch->GetVolume(0)->GetName() << " layer:module:cell " << layer << ":" << module
153  << ":" << cell;
154 #endif
155  }
156 #ifdef EDM_ML_DEBUG
157  G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
158  edm::LogVerbatim("HGCSim") << "Depths: " << touch->GetHistoryDepth() << " name " << touch->GetVolume(0)->GetName()
159  << ":" << touch->GetReplicaNumber(0) << " " << touch->GetVolume(1)->GetName() << ":"
160  << touch->GetReplicaNumber(1) << " " << touch->GetVolume(2)->GetName() << ":"
161  << touch->GetReplicaNumber(2) << " " << touch->GetVolume(3)->GetName() << ":"
162  << touch->GetReplicaNumber(3) << " " << touch->GetVolume(4)->GetName() << ":"
163  << touch->GetReplicaNumber(4) << " "
164  << " layer:module:cell " << layer << ":" << module << ":" << cell << " Material "
165  << mat->GetName() << ":" << mat->GetRadlen();
166 #endif
167  // The following statement should be examined later before elimination
168  if (aStep->GetPreStepPoint()->GetMaterial()->GetRadlen() > 100000.)
169  return 0;
170 
171  uint32_t id = setDetUnitId(layer, module, cell, iz, hitPoint);
172  if (!isItinFidVolume(hitPoint)) {
173 #ifdef EDM_ML_DEBUG
174  edm::LogVerbatim("HGCSim") << "ID " << std::hex << id << std::dec << " " << HGCScintillatorDetId(id)
175  << " is rejected by fiducilal volume cut";
176 #endif
177  id = 0;
178  }
179  return id;
180 }
Log< level::Info, true > LogVerbatim
HGCalGeometryMode::GeometryMode geom_mode_
Definition: HGCScintSD.h:45
int levelT2_
Definition: HGCScintSD.h:47
uint32_t setDetUnitId(const G4Step *step) override
Definition: HGCScintSD.cc:123
int levelT1_
Definition: HGCScintSD.h:47
constexpr std::array< uint8_t, layerIndexSize > layer
bool isItinFidVolume(const G4ThreeVector &)
Definition: HGCScintSD.cc:210
void printDetectorLevels(const G4VTouchable *) const
Definition: CaloSD.cc:1072

◆ setDetUnitId() [2/2]

uint32_t HGCScintSD::setDetUnitId ( int  layer,
int  module,
int  cell,
int  iz,
G4ThreeVector &  pos 
)
private

Definition at line 205 of file HGCScintSD.cc.

References triggerObjects_cff::id, phase1PixelTopology::layer, callgraph::module, numberingScheme_, and weight_.

205  {
206  uint32_t id = numberingScheme_ ? numberingScheme_->getUnitID(layer, module, cell, iz, pos, weight_) : 0;
207  return id;
208 }
constexpr std::array< uint8_t, layerIndexSize > layer
double weight_
Definition: HGCScintSD.h:50
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCScintSD.h:42

◆ update() [1/6]

void CaloSD::update
overrideprotected

Definition at line 681 of file CaloSD.cc.

Referenced by MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), and MatrixUtil.Steps::overwrite().

681  {
682 #ifdef EDM_ML_DEBUG
683  edm::LogVerbatim("CaloSim") << "CaloSD: Dispatched BeginOfEvent for " << GetName() << " !";
684 #endif
685  clearHits();
686  initEvent(g4Event);
687 }
Log< level::Info, true > LogVerbatim
virtual void initEvent(const BeginOfEvent *)
Definition: CaloSD.cc:792
void clearHits() override
Definition: CaloSD.cc:773

◆ update() [2/6]

void CaloSD::update
overrideprotected

Definition at line 715 of file CaloSD.cc.

Referenced by MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), and MatrixUtil.Steps::overwrite().

715  {
716  endEvent();
717  slave.get()->ReserveMemory(theHC->entries());
718 
719  int count(0);
720  int wrong(0);
721  double eEM(0.0);
722  double eHAD(0.0);
723  double eEM2(0.0);
724  double eHAD2(0.0);
725  double tt(0.0);
726  double zloc(0.0);
727  double zglob(0.0);
728  double ee(0.0);
729  int hc_entries = theHC->entries();
730  for (int i = 0; i < hc_entries; ++i) {
731  if (!saveHit((*theHC)[i])) {
732  ++wrong;
733  }
734  ++count;
735  double x = (*theHC)[i]->getEM();
736  eEM += x;
737  eEM2 += x * x;
738  x = (*theHC)[i]->getHadr();
739  eHAD += x;
740  eHAD2 += x * x;
741  tt += (*theHC)[i]->getTimeSlice();
742  ee += (*theHC)[i]->getIncidentEnergy();
743  zglob += std::abs((*theHC)[i]->getEntry().z());
744  zloc += std::abs((*theHC)[i]->getEntryLocal().z());
745  }
746 
747  double norm = (count > 0) ? 1.0 / count : 0.0;
748  eEM *= norm;
749  eEM2 *= norm;
750  eHAD *= norm;
751  eHAD2 *= norm;
752  eEM2 = std::sqrt(eEM2 - eEM * eEM);
753  eHAD2 = std::sqrt(eHAD2 - eHAD * eHAD);
754  tt *= norm;
755  ee *= norm;
756  zglob *= norm;
757  zloc *= norm;
758 
759 #ifdef EDM_ML_DEBUG
760  edm::LogVerbatim("CaloSim") << "CaloSD: " << GetName() << " store " << count << " hits; " << wrong
761  << " track IDs not given properly and " << totalHits - count
762  << " hits not passing cuts\n EmeanEM= " << eEM << " ErmsEM= " << eEM2
763  << "\n EmeanHAD= " << eHAD << " ErmsHAD= " << eHAD2 << " TimeMean= " << tt
764  << " E0mean= " << ee << " Zglob= " << zglob << " Zloc= " << zloc << " ";
765 #endif
766  tkMap.erase(tkMap.begin(), tkMap.end());
767  std::vector<std::unique_ptr<CaloG4Hit>>().swap(reusehit);
768  if (useMap)
769  hitMap.erase(hitMap.begin(), hitMap.end());
771 }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:527
Log< level::Info, true > LogVerbatim
int totalHits
Definition: CaloSD.h:177
bool useMap
Definition: CaloSD.h:171
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:117
std::unordered_map< unsigned int, unsigned int > boundaryCrossingParentMap_
Definition: CaloSD.h:189
std::unique_ptr< CaloSlaveSD > slave
Definition: CaloSD.h:163
T sqrt(T t)
Definition: SSEVec.h:19
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::map< CaloHitID, CaloG4Hit * > hitMap
Definition: CaloSD.h:187
virtual void endEvent()
Definition: CaloSD.cc:794
CaloG4HitCollection * theHC
Definition: CaloSD.h:166
std::map< int, TrackWithHistory * > tkMap
Definition: CaloSD.h:188
std::vector< std::unique_ptr< CaloG4Hit > > reusehit
Definition: CaloSD.h:190
bool saveHit(CaloG4Hit *)
Definition: CaloSD.cc:870

◆ update() [3/6]

void CaloSD::update
overrideprotected

Definition at line 933 of file CaloSD.cc.

Referenced by MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), and MatrixUtil.Steps::overwrite().

933  {
934  int primary = -1;
935  TrackInformation* trkInfo = cmsTrackInformation((*trk)());
936  if (trkInfo->isPrimary())
937  primary = (*trk)()->GetTrackID();
938 
939 #ifdef EDM_ML_DEBUG
940  edm::LogVerbatim("CaloSim") << "New track: isPrimary " << trkInfo->isPrimary() << " primary ID = " << primary
941  << " primary ancestor ID " << primAncestor;
942 #endif
943 
944  // update the information if a different primary track ID
945 
946  if (primary > 0 && primary != primAncestor) {
947  primAncestor = primary;
948 
949  // clean the hits information
950 
951  if (theHC->entries() > 0)
953  }
954 }
Log< level::Info, true > LogVerbatim
bool isPrimary() const
int primAncestor
Definition: CaloSD.h:175
void cleanHitCollection()
Definition: CaloSD.cc:956
TrackInformation * cmsTrackInformation(const G4Track *aTrack)
CaloG4HitCollection * theHC
Definition: CaloSD.h:166

◆ update() [4/6]

void CaloSD::update
overrideprotected

Definition at line 689 of file CaloSD.cc.

Referenced by MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), and MatrixUtil.Steps::overwrite().

689  {
690  int id = (*trk)()->GetTrackID();
691  TrackInformation* trkI = cmsTrackInformation((*trk)());
692  int lastTrackID = -1;
693  if (trkI)
694  lastTrackID = trkI->getIDonCaloSurface();
695  if (id == lastTrackID) {
696  const TrackContainer* trksForThisEvent = m_trackManager->trackContainer();
697  if (trksForThisEvent != nullptr) {
698  int it = (int)(trksForThisEvent->size()) - 1;
699  if (it >= 0) {
700  TrackWithHistory* trkH = (*trksForThisEvent)[it];
701  if (trkH->trackID() == (unsigned int)(id))
702  tkMap[id] = trkH;
703 #ifdef EDM_ML_DEBUG
704  edm::LogVerbatim("CaloSim") << "CaloSD: get track " << it << " from Container of size "
705  << trksForThisEvent->size() << " with ID " << trkH->trackID();
706  } else {
707  edm::LogVerbatim("CaloSim") << "CaloSD: get track " << it << " from Container of size "
708  << trksForThisEvent->size() << " with no ID";
709 #endif
710  }
711  }
712  }
713 }
Log< level::Info, true > LogVerbatim
std::vector< TrackWithHistory * > TrackContainer
Definition: TrackContainer.h:8
TrackInformation * cmsTrackInformation(const G4Track *aTrack)
int getIDonCaloSurface() const
const TrackContainer * trackContainer() const
std::map< int, TrackWithHistory * > tkMap
Definition: CaloSD.h:188
const SimTrackManager * m_trackManager
Definition: CaloSD.h:161
unsigned int trackID() const

◆ update() [5/6]

void CaloSD::update
overrideprotected

Definition at line 679 of file CaloSD.cc.

Referenced by MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), and MatrixUtil.Steps::overwrite().

679 { initRun(); }
void initRun() override
Definition: HGCScintSD.cc:199

◆ update() [6/6]

void HGCScintSD::update ( const BeginOfJob )
overrideprotectedvirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfJob *>.

Definition at line 182 of file HGCScintSD.cc.

References Exception, geom_mode_, HGCalDDDConstants::geomMode(), hgcons_, levelT1_, levelT2_, HGCalDDDConstants::levelTop(), HGCalDDDConstants::minSlope(), mydet_, nameX_, numberingScheme_, and slopeMin_.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

182  {
183  if (hgcons_ != nullptr) {
186  levelT1_ = hgcons_->levelTop(0);
187  levelT2_ = hgcons_->levelTop(1);
188 #ifdef EDM_ML_DEBUG
189  edm::LogVerbatim("HGCSim") << "HGCScintSD::Initialized with mode " << geom_mode_ << " Slope cut " << slopeMin_
190  << " top Level " << levelT1_ << ":" << levelT2_;
191 #endif
192 
193  numberingScheme_ = std::make_unique<HGCalNumberingScheme>(*hgcons_, mydet_, nameX_);
194  } else {
195  throw cms::Exception("Unknown", "HGCScintSD") << "Cannot find HGCalDDDConstants for " << nameX_ << "\n";
196  }
197 }
Log< level::Info, true > LogVerbatim
HGCalGeometryMode::GeometryMode geom_mode_
Definition: HGCScintSD.h:45
int levelT2_
Definition: HGCScintSD.h:47
HGCalGeometryMode::GeometryMode geomMode() const
int levelT1_
Definition: HGCScintSD.h:47
const HGCalDDDConstants * hgcons_
Definition: HGCScintSD.h:41
double minSlope() const
double slopeMin_
Definition: HGCScintSD.h:46
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCScintSD.h:42
std::string nameX_
Definition: HGCScintSD.h:44
DetId::Detector mydet_
Definition: HGCScintSD.h:43
int levelTop(int ind=0) const

Member Data Documentation

◆ birk1_

double HGCScintSD::birk1_
private

Definition at line 50 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and HGCScintSD().

◆ birk2_

double HGCScintSD::birk2_
private

Definition at line 50 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and HGCScintSD().

◆ birk3_

double HGCScintSD::birk3_
private

Definition at line 50 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and HGCScintSD().

◆ distanceFromEdge_

double HGCScintSD::distanceFromEdge_
private

Definition at line 46 of file HGCScintSD.h.

Referenced by HGCScintSD(), and isItinFidVolume().

◆ eminHit_

double HGCScintSD::eminHit_
private

Definition at line 46 of file HGCScintSD.h.

Referenced by filterHit(), and HGCScintSD().

◆ fiducialCut_

bool HGCScintSD::fiducialCut_
private

Definition at line 48 of file HGCScintSD.h.

Referenced by HGCScintSD(), and isItinFidVolume().

◆ geom_mode_

HGCalGeometryMode::GeometryMode HGCScintSD::geom_mode_
private

Definition at line 45 of file HGCScintSD.h.

Referenced by setDetUnitId(), and update().

◆ hgcons_

const HGCalDDDConstants* HGCScintSD::hgcons_
private

Definition at line 41 of file HGCScintSD.h.

Referenced by isItinFidVolume(), and update().

◆ levelT1_

int HGCScintSD::levelT1_
private

Definition at line 47 of file HGCScintSD.h.

Referenced by setDetUnitId(), and update().

◆ levelT2_

int HGCScintSD::levelT2_
private

Definition at line 47 of file HGCScintSD.h.

Referenced by setDetUnitId(), and update().

◆ mydet_

DetId::Detector HGCScintSD::mydet_
private

Definition at line 43 of file HGCScintSD.h.

Referenced by HGCScintSD(), and update().

◆ nameX_

std::string HGCScintSD::nameX_
private

Definition at line 44 of file HGCScintSD.h.

Referenced by HGCScintSD(), and update().

◆ numberingScheme_

std::unique_ptr<HGCalNumberingScheme> HGCScintSD::numberingScheme_
private

Definition at line 42 of file HGCScintSD.h.

Referenced by HGCScintSD(), setDetUnitId(), and update().

◆ slopeMin_

double HGCScintSD::slopeMin_
private

Definition at line 46 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and update().

◆ storeAllG4Hits_

bool HGCScintSD::storeAllG4Hits_
private

Definition at line 48 of file HGCScintSD.h.

Referenced by HGCScintSD().

◆ useBirk_

bool HGCScintSD::useBirk_
private

Definition at line 49 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and HGCScintSD().

◆ weight_

double HGCScintSD::weight_
private

Definition at line 50 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and setDetUnitId().