CMS 3D CMS Logo

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

#include <HGCSD.h>

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

Public Member Functions

 HGCSD (const std::string &, const HGCalDDDConstants *, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
 
uint32_t setDetUnitId (const G4Step *step) override
 
 ~HGCSD () 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

void endEvent () override
 
bool filterHit (CaloG4Hit *, double) override
 
double getEnergyDeposit (const G4Step *) override
 
void initEvent (const BeginOfEvent *) override
 
void initRun () override
 
void update (const BeginOfRun *) override
 
void update (const BeginOfTrack *trk) override
 
void update (const EndOfTrack *trk) override
 
void update (const BeginOfEvent *) override
 
void update (const ::EndOfEvent *) 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 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 ()
 
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 (ForwardSubdetector &, int, int, int, int, G4ThreeVector &)
 

Private Attributes

std::vector< double > angles_
 
double eminHit_
 
HGCalGeometryMode::GeometryMode geom_mode_
 
const HGCalDDDConstantshgcons_
 
int levelT_
 
std::unique_ptr< HGCMouseBitemouseBite_
 
double mouseBiteCut_
 
ForwardSubdetector myFwdSubdet_
 
std::string nameX_
 
std::unique_ptr< HGCNumberingSchemenumberingScheme_
 
bool rejectMB_
 
double slopeMin_
 
bool storeAllG4Hits_
 
std::vector< double > t_Angle_
 
std::vector< double > t_dEStep1_
 
std::vector< double > t_dEStep2_
 
uint32_t t_EventID_
 
std::vector< int > t_Layer_
 
std::vector< int > t_Parcode_
 
std::vector< double > t_TrackE_
 
TTree * tree_
 
bool waferRot_
 

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 22 of file HGCSD.h.

Constructor & Destructor Documentation

◆ HGCSD()

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

Definition at line 32 of file HGCSD.cc.

References angles_, CaloSD::eminHit, eminHit_, ForwardEmpty, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), HGCEE, HGCHEB, HGCHEF, mouseBite_, mouseBiteCut_, myFwdSubdet_, Skims_PA_cff::name, nameX_, numberingScheme_, AlCaHLTBitMon_ParallelJobs::p, rejectMB_, CaloSD::setNumberCheckedHits(), CaloSD::setUseMap(), storeAllG4Hits_, funct::tan(), and waferRot_.

37  : CaloSD(name,
38  clg,
39  p,
40  manager,
41  (float)(p.getParameter<edm::ParameterSet>("HGCSD").getParameter<double>("TimeSliceUnit")),
42  p.getParameter<edm::ParameterSet>("HGCSD").getParameter<bool>("IgnoreTrackID")),
43  hgcons_(hgc),
44  slopeMin_(0),
45  levelT_(99),
46  tree_(nullptr) {
47  numberingScheme_.reset(nullptr);
48  mouseBite_.reset(nullptr);
49 
50  edm::ParameterSet m_HGC = p.getParameter<edm::ParameterSet>("HGCSD");
51  eminHit_ = m_HGC.getParameter<double>("EminHit") * CLHEP::MeV;
52  storeAllG4Hits_ = m_HGC.getParameter<bool>("StoreAllG4Hits");
53  rejectMB_ = m_HGC.getParameter<bool>("RejectMouseBite");
54  waferRot_ = m_HGC.getParameter<bool>("RotatedWafer");
55  angles_ = m_HGC.getUntrackedParameter<std::vector<double>>("WaferAngles");
56  double waferSize = m_HGC.getUntrackedParameter<double>("WaferSize") * CLHEP::mm;
57  double mouseBite = m_HGC.getUntrackedParameter<double>("MouseBite") * CLHEP::mm;
58  mouseBiteCut_ = waferSize * tan(30.0 * CLHEP::deg) - mouseBite;
59 
60  if (storeAllG4Hits_) {
61  setUseMap(false);
63  }
64  //this is defined in the hgcsens.xml
65  G4String myName = name;
67  nameX_ = "HGCal";
68  if (myName.find("HitsEE") != std::string::npos) {
70  nameX_ = "HGCalEESensitive";
71  } else if (myName.find("HitsHEfront") != std::string::npos) {
73  nameX_ = "HGCalHESiliconSensitive";
74  } else if (myName.find("HitsHEback") != std::string::npos) {
76  nameX_ = "HGCalHEScintillatorSensitive";
77  }
78 
79 #ifdef EDM_ML_DEBUG
80  edm::LogVerbatim("HGCSim") << "**************************************************"
81  << "\n"
82  << "* *"
83  << "\n"
84  << "* Constructing a HGCSD with name " << name << "\n"
85  << "* *"
86  << "\n"
87  << "**************************************************";
88 #endif
89  edm::LogVerbatim("HGCSim") << "HGCSD:: Threshold for storing hits: " << eminHit << " for " << nameX_ << " subdet "
90  << myFwdSubdet_;
91  edm::LogVerbatim("HGCSim") << "Flag for storing individual Geant4 Hits " << storeAllG4Hits_;
92  edm::LogVerbatim("HGCSim") << "Reject MosueBite Flag: " << rejectMB_ << " Size of wafer " << waferSize
93  << " Mouse Bite " << mouseBite << ":" << mouseBiteCut_ << " along " << angles_.size()
94  << " axes";
95 }
Log< level::Info, true > LogVerbatim
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
void setNumberCheckedHits(int val)
Definition: CaloSD.h:122
int levelT_
Definition: HGCSD.h:54
double mouseBiteCut_
Definition: HGCSD.h:56
std::string nameX_
Definition: HGCSD.h:47
std::vector< double > angles_
Definition: HGCSD.h:57
bool storeAllG4Hits_
Definition: HGCSD.h:55
bool waferRot_
Definition: HGCSD.h:55
void setUseMap(bool val)
Definition: CaloSD.h:111
double eminHit
Definition: CaloSD.h:144
T getUntrackedParameter(std::string const &, T const &) const
double slopeMin_
Definition: HGCSD.h:53
std::unique_ptr< HGCMouseBite > mouseBite_
Definition: HGCSD.h:50
const HGCalDDDConstants * hgcons_
Definition: HGCSD.h:46
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
std::unique_ptr< HGCNumberingScheme > numberingScheme_
Definition: HGCSD.h:49
double eminHit_
Definition: HGCSD.h:51
bool rejectMB_
Definition: HGCSD.h:55
TTree * tree_
Definition: HGCSD.h:59
CaloSD(const std::string &aSDname, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, float timeSlice=1., bool ignoreTkID=false)
Definition: CaloSD.cc:33
ForwardSubdetector myFwdSubdet_
Definition: HGCSD.h:52

◆ ~HGCSD()

HGCSD::~HGCSD ( )
overridedefault

Member Function Documentation

◆ endEvent()

void HGCSD::endEvent ( )
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 251 of file HGCSD.cc.

References tree_.

251  {
252 #ifdef plotDebug
253  if (tree_)
254  tree_->Fill();
255 #endif
256 }
TTree * tree_
Definition: HGCSD.h:59

◆ filterHit()

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

Reimplemented from CaloSD.

Definition at line 258 of file HGCSD.cc.

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

258  {
259  return ((time <= tmaxHit) && (aHit->getEnergyDeposit() > eminHit_));
260 }
double tmaxHit
Definition: CaloSD.h:144
double eminHit_
Definition: HGCSD.h:51
double getEnergyDeposit() const
Definition: CaloG4Hit.h:79

◆ getEnergyDeposit()

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

Reimplemented from CaloSD.

Definition at line 97 of file HGCSD.cc.

References funct::abs(), angle(), CaloSD::getResponseWt(), pixelTopology::layer, levelT_, alignCSCRings::r, slopeMin_, t_Angle_, t_dEStep1_, t_dEStep2_, t_Layer_, t_Parcode_, t_TrackE_, and z.

97  {
98  double r = aStep->GetPreStepPoint()->GetPosition().perp();
99  double z = std::abs(aStep->GetPreStepPoint()->GetPosition().z());
100 
101 #ifdef EDM_ML_DEBUG
102  G4int parCode = aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
103  G4LogicalVolume* lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
104  edm::LogVerbatim("HGCSim") << "HGCSD: Hit from standard path from " << lv->GetName() << " for Track "
105  << aStep->GetTrack()->GetTrackID() << " ("
106  << aStep->GetTrack()->GetDefinition()->GetParticleName() << ":" << parCode << ") R = " << r
107  << " Z = " << z << " slope = " << r / z << ":" << slopeMin_;
108 #endif
109 
110  // Apply fiductial volume
111  if (r < z * slopeMin_) {
112  return 0.0;
113  }
114 
115  double wt1 = getResponseWt(aStep->GetTrack());
116  double wt2 = aStep->GetTrack()->GetWeight();
117  double destep = wt1 * aStep->GetTotalEnergyDeposit();
118  if (wt2 > 0)
119  destep *= wt2;
120 
121 #ifdef plotDebug
122  const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
123  G4double tmptrackE = aStep->GetTrack()->GetKineticEnergy();
124  G4int parCodex = aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
125  G4double angle = (aStep->GetTrack()->GetMomentumDirection().theta()) / CLHEP::deg;
126  G4int layer = ((touch->GetHistoryDepth() == levelT_) ? touch->GetReplicaNumber(0) : touch->GetReplicaNumber(2));
127  G4int ilayer = (layer - 1) / 3;
128  if (aStep->GetTotalEnergyDeposit() > 0) {
129  t_Layer_.emplace_back(ilayer);
130  t_Parcode_.emplace_back(parCodex);
131  t_dEStep1_.emplace_back(aStep->GetTotalEnergyDeposit());
132  t_dEStep2_.emplace_back(destep);
133  t_TrackE_.emplace_back(tmptrackE);
134  t_Angle_.emplace_back(angle);
135  }
136 #endif
137 
138  return destep;
139 }
std::vector< double > t_TrackE_
Definition: HGCSD.h:62
Log< level::Info, true > LogVerbatim
std::vector< double > t_dEStep1_
Definition: HGCSD.h:62
std::vector< double > t_dEStep2_
Definition: HGCSD.h:62
int levelT_
Definition: HGCSD.h:54
std::vector< int > t_Layer_
Definition: HGCSD.h:61
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
double slopeMin_
Definition: HGCSD.h:53
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< int > t_Parcode_
Definition: HGCSD.h:61
std::vector< double > t_Angle_
Definition: HGCSD.h:63
double getResponseWt(const G4Track *)
Definition: CaloSD.cc:855
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11

◆ initEvent()

void HGCSD::initEvent ( const BeginOfEvent g4Event)
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 238 of file HGCSD.cc.

References t_Angle_, t_dEStep1_, t_dEStep2_, t_EventID_, t_Layer_, t_Parcode_, and t_TrackE_.

238  {
239  const G4Event* evt = (*g4Event)();
240  t_EventID_ = evt->GetEventID();
241 #ifdef plotDebug
242  t_Layer_.clear();
243  t_Parcode_.clear();
244  t_dEStep1_.clear();
245  t_dEStep2_.clear();
246  t_TrackE_.clear();
247  t_Angle_.clear();
248 #endif
249 }
std::vector< double > t_TrackE_
Definition: HGCSD.h:62
std::vector< double > t_dEStep1_
Definition: HGCSD.h:62
std::vector< double > t_dEStep2_
Definition: HGCSD.h:62
std::vector< int > t_Layer_
Definition: HGCSD.h:61
std::vector< int > t_Parcode_
Definition: HGCSD.h:61
std::vector< double > t_Angle_
Definition: HGCSD.h:63
uint32_t t_EventID_
Definition: HGCSD.h:60

◆ initRun()

void HGCSD::initRun ( )
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 222 of file HGCSD.cc.

References t_Angle_, t_dEStep1_, t_dEStep2_, t_EventID_, t_Layer_, t_Parcode_, t_TrackE_, compare::tfile, and tree_.

222  {
223 #ifdef plotDebug
225  if (tfile.isAvailable()) {
226  tree_ = tfile->make<TTree>("TreeHGCSD", "TreeHGCSD");
227  tree_->Branch("EventID", &t_EventID_);
228  tree_->Branch("Layer", &t_Layer_);
229  tree_->Branch("ParticleCode", &t_Parcode_);
230  tree_->Branch("dEStepOriginal", &t_dEStep1_);
231  tree_->Branch("dEStepWeighted", &t_dEStep2_);
232  tree_->Branch("TrackEnergy", &t_TrackE_);
233  tree_->Branch("ThetaAngle", &t_Angle_);
234  }
235 #endif
236 }
std::vector< double > t_TrackE_
Definition: HGCSD.h:62
std::vector< double > t_dEStep1_
Definition: HGCSD.h:62
std::vector< double > t_dEStep2_
Definition: HGCSD.h:62
std::vector< int > t_Layer_
Definition: HGCSD.h:61
Definition: tfile.py:1
std::vector< int > t_Parcode_
Definition: HGCSD.h:61
std::vector< double > t_Angle_
Definition: HGCSD.h:63
TTree * tree_
Definition: HGCSD.h:59
uint32_t t_EventID_
Definition: HGCSD.h:60

◆ isItinFidVolume()

bool HGCSD::isItinFidVolume ( const G4ThreeVector &  )
inlineprivate

Definition at line 44 of file HGCSD.h.

44 { return true; }

◆ setDetUnitId() [1/2]

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

Implements CaloSD.

Definition at line 141 of file HGCSD.cc.

References TauDecayModes::dec, l1ctLayer2EG_cff::id, dqmdumpme::k, pixelTopology::layer, levelT_, DTRecHitClients_cfi::local, callgraph::module, mouseBite_, myFwdSubdet_, rejectMB_, HGCalTestNumbering::unpackHexagonIndex(), and z.

141  {
142  const G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
143  const G4VTouchable* touch = preStepPoint->GetTouchable();
144 
145  //determine the exact position in global coordinates in the mass geometry
146  G4ThreeVector hitPoint = preStepPoint->GetPosition();
147  float globalZ = touch->GetTranslation(0).z();
148  int iz(globalZ > 0 ? 1 : -1);
149 
150  //convert to local coordinates (=local to the current volume):
151  G4ThreeVector localpos = touch->GetHistory()->GetTopTransform().TransformPoint(hitPoint);
152 
153  //get the det unit id with
155 
156  int layer(-1), moduleLev(-1), module(-1), cell(-1);
157  if (touch->GetHistoryDepth() == levelT_) {
158  layer = touch->GetReplicaNumber(0);
159 #ifdef EDM_ML_DEBUG
160  edm::LogVerbatim("HGCSim") << "Depths: " << touch->GetHistoryDepth() << " name " << touch->GetVolume(0)->GetName()
161  << " layer:module:cell " << layer << ":" << moduleLev << ":" << module << ":" << cell;
162 #endif
163  } else {
164  layer = touch->GetReplicaNumber(2);
165  module = touch->GetReplicaNumber(1);
166  cell = touch->GetReplicaNumber(0);
167  moduleLev = 1;
168  }
169 #ifdef EDM_ML_DEBUG
170  const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
171  edm::LogVerbatim("HGCSim") << "Depths: " << touch->GetHistoryDepth() << " name " << touch->GetVolume(0)->GetName()
172  << ":" << touch->GetReplicaNumber(0) << " " << touch->GetVolume(1)->GetName() << ":"
173  << touch->GetReplicaNumber(1) << " " << touch->GetVolume(2)->GetName() << ":"
174  << touch->GetReplicaNumber(2) << " layer:module:cell " << layer << ":" << moduleLev
175  << ":" << module << ":" << cell << " Material " << mat->GetName() << ":"
176  << mat->GetRadlen();
177  for (int k = 0; k < touch->GetHistoryDepth(); ++k)
178  edm::LogVerbatim("HGCSim") << "Level [" << k << "] " << touch->GetVolume(k)->GetName() << ":"
179  << touch->GetReplicaNumber(k);
180 #endif
181  // The following statement should be examined later before elimination
182  // VI: this is likely a check if media is vacuum - not needed
183  if (aStep->GetPreStepPoint()->GetMaterial()->GetRadlen() > 100000.)
184  return 0;
185 
186  uint32_t id = setDetUnitId(subdet, layer, module, cell, iz, localpos);
187  if (rejectMB_ && id != 0) {
188  int det, z, lay, wafer, type, ic;
189  HGCalTestNumbering::unpackHexagonIndex(id, det, z, lay, wafer, type, ic);
190 #ifdef EDM_ML_DEBUG
191  edm::LogVerbatim("HGCSim") << "ID " << std::hex << id << std::dec << " Input " << subdet << ":" << layer << ":"
192  << module << ":" << cell << ":" << iz << localpos.x() << ":" << localpos.y()
193  << " Decode " << det << ":" << z << ":" << lay << ":" << wafer << ":" << type << ":"
194  << ic;
195 #endif
196  G4ThreeVector local =
197  ((moduleLev >= 0) ? (touch->GetHistory()->GetTransform(moduleLev).TransformPoint(hitPoint)) : G4ThreeVector());
198  if (mouseBite_->exclude(local, z, layer, wafer, 0))
199  id = 0;
200  }
201  return id;
202 }
Log< level::Info, true > LogVerbatim
int levelT_
Definition: HGCSD.h:54
ForwardSubdetector
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
std::unique_ptr< HGCMouseBite > mouseBite_
Definition: HGCSD.h:50
bool rejectMB_
Definition: HGCSD.h:55
uint32_t setDetUnitId(const G4Step *step) override
Definition: HGCSD.cc:141
ForwardSubdetector myFwdSubdet_
Definition: HGCSD.h:52
static void unpackHexagonIndex(const uint32_t &idx, int &subdet, int &z, int &lay, int &wafer, int &celltyp, int &cell)

◆ setDetUnitId() [2/2]

uint32_t HGCSD::setDetUnitId ( ForwardSubdetector subdet,
int  layer,
int  module,
int  cell,
int  iz,
G4ThreeVector &  pos 
)
private

Definition at line 262 of file HGCSD.cc.

References l1ctLayer2EG_cff::id, pixelTopology::layer, callgraph::module, and numberingScheme_.

262  {
263  uint32_t id = numberingScheme_ ? numberingScheme_->getUnitID(subdet, layer, module, cell, iz, pos) : 0;
264  return id;
265 }
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
std::unique_ptr< HGCNumberingScheme > numberingScheme_
Definition: HGCSD.h:49

◆ update() [1/6]

void CaloSD::update
overrideprotected

Definition at line 718 of file CaloSD.cc.

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

718  {
719  endEvent();
720  slave.get()->ReserveMemory(theHC->entries());
721 
722  int count(0);
723  int wrong(0);
724  double eEM(0.0);
725  double eHAD(0.0);
726  double eEM2(0.0);
727  double eHAD2(0.0);
728 #ifdef EDM_ML_DEBUG
729  double tt(0.0);
730  double zloc(0.0);
731  double zglob(0.0);
732  double ee(0.0);
733 #endif
734  int hc_entries = theHC->entries();
735  for (int i = 0; i < hc_entries; ++i) {
736  if (!saveHit((*theHC)[i])) {
737  ++wrong;
738  }
739  ++count;
740  double x = (*theHC)[i]->getEM();
741  eEM += x;
742  eEM2 += x * x;
743  x = (*theHC)[i]->getHadr();
744  eHAD += x;
745  eHAD2 += x * x;
746 #ifdef EDM_ML_DEBUG
747  tt += (*theHC)[i]->getTimeSlice();
748  ee += (*theHC)[i]->getIncidentEnergy();
749  zglob += std::abs((*theHC)[i]->getEntry().z());
750  zloc += std::abs((*theHC)[i]->getEntryLocal().z());
751 #endif
752  }
753 
754  double norm = (count > 0) ? 1.0 / count : 0.0;
755  eEM *= norm;
756  eEM2 *= norm;
757  eHAD *= norm;
758  eHAD2 *= norm;
759  eEM2 = std::sqrt(eEM2 - eEM * eEM);
760  eHAD2 = std::sqrt(eHAD2 - eHAD * eHAD);
761 #ifdef EDM_ML_DEBUG
762  tt *= norm;
763  ee *= norm;
764  zglob *= norm;
765  zloc *= norm;
766  edm::LogVerbatim("CaloSim") << "CaloSD: " << GetName() << " store " << count << " hits; " << wrong
767  << " track IDs not given properly and " << totalHits - count
768  << " hits not passing cuts\n EmeanEM= " << eEM << " ErmsEM= " << eEM2
769  << "\n EmeanHAD= " << eHAD << " ErmsHAD= " << eHAD2 << " TimeMean= " << tt
770  << " E0mean= " << ee << " Zglob= " << zglob << " Zloc= " << zloc << " ";
771 #endif
772  tkMap.erase(tkMap.begin(), tkMap.end());
773  std::vector<std::unique_ptr<CaloG4Hit>>().swap(reusehit);
774  if (useMap)
775  hitMap.erase(hitMap.begin(), hitMap.end());
777 }
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
Definition: TTTypes.h:54
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
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
void endEvent() override
Definition: HGCSD.cc:251
bool saveHit(CaloG4Hit *)
Definition: CaloSD.cc:876

◆ update() [2/6]

void CaloSD::update
overrideprotected

Definition at line 939 of file CaloSD.cc.

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

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

◆ update() [3/6]

void CaloSD::update
overrideprotected

Definition at line 687 of file CaloSD.cc.

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

687 { initRun(); }
void initRun() override
Definition: HGCSD.cc:222

◆ 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 #ifdef EDM_ML_DEBUG
691  edm::LogVerbatim("CaloSim") << "CaloSD: Dispatched BeginOfEvent for " << GetName() << " !";
692 #endif
693  clearHits();
694  initEvent(g4Event);
695 }
Log< level::Info, true > LogVerbatim
void initEvent(const BeginOfEvent *) override
Definition: HGCSD.cc:238
void clearHits() override
Definition: CaloSD.cc:779

◆ update() [5/6]

void CaloSD::update
overrideprotected

Definition at line 697 of file CaloSD.cc.

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

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

◆ update() [6/6]

void HGCSD::update ( const BeginOfJob )
overrideprotectedvirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfJob *>.

Definition at line 204 of file HGCSD.cc.

References angles_, Exception, geom_mode_, HGCalDDDConstants::geomMode(), hgcons_, levelT_, HGCalDDDConstants::levelTop(), HGCalDDDConstants::minSlope(), mouseBite_, mouseBiteCut_, nameX_, numberingScheme_, rejectMB_, slopeMin_, and waferRot_.

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

204  {
205  if (hgcons_ != nullptr) {
208  levelT_ = hgcons_->levelTop();
209  numberingScheme_ = std::make_unique<HGCNumberingScheme>(*hgcons_, nameX_);
210  if (rejectMB_)
211  mouseBite_ = std::make_unique<HGCMouseBite>(*hgcons_, angles_, mouseBiteCut_, waferRot_);
212  } else {
213  edm::LogError("HGCSim") << "HGCSD : Cannot find HGCalDDDConstants for " << nameX_;
214  throw cms::Exception("Unknown", "HGCSD") << "Cannot find HGCalDDDConstants for " << nameX_ << "\n";
215  }
216 #ifdef EDM_ML_DEBUG
217  edm::LogVerbatim("HGCSim") << "HGCSD::Initialized with mode " << geom_mode_ << " Slope cut " << slopeMin_
218  << " top Level " << levelT_;
219 #endif
220 }
Log< level::Info, true > LogVerbatim
int levelT_
Definition: HGCSD.h:54
double mouseBiteCut_
Definition: HGCSD.h:56
std::string nameX_
Definition: HGCSD.h:47
std::vector< double > angles_
Definition: HGCSD.h:57
Log< level::Error, false > LogError
HGCalGeometryMode::GeometryMode geomMode() const
bool waferRot_
Definition: HGCSD.h:55
HGCalGeometryMode::GeometryMode geom_mode_
Definition: HGCSD.h:48
double slopeMin_
Definition: HGCSD.h:53
std::unique_ptr< HGCMouseBite > mouseBite_
Definition: HGCSD.h:50
const HGCalDDDConstants * hgcons_
Definition: HGCSD.h:46
std::unique_ptr< HGCNumberingScheme > numberingScheme_
Definition: HGCSD.h:49
bool rejectMB_
Definition: HGCSD.h:55
double minSlope() const
int levelTop(int ind=0) const

Member Data Documentation

◆ angles_

std::vector<double> HGCSD::angles_
private

Definition at line 57 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ eminHit_

double HGCSD::eminHit_
private

Definition at line 51 of file HGCSD.h.

Referenced by filterHit(), and HGCSD().

◆ geom_mode_

HGCalGeometryMode::GeometryMode HGCSD::geom_mode_
private

Definition at line 48 of file HGCSD.h.

Referenced by update().

◆ hgcons_

const HGCalDDDConstants* HGCSD::hgcons_
private

Definition at line 46 of file HGCSD.h.

Referenced by update().

◆ levelT_

int HGCSD::levelT_
private

Definition at line 54 of file HGCSD.h.

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

◆ mouseBite_

std::unique_ptr<HGCMouseBite> HGCSD::mouseBite_
private

Definition at line 50 of file HGCSD.h.

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

◆ mouseBiteCut_

double HGCSD::mouseBiteCut_
private

Definition at line 56 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ myFwdSubdet_

ForwardSubdetector HGCSD::myFwdSubdet_
private

Definition at line 52 of file HGCSD.h.

Referenced by HGCSD(), and setDetUnitId().

◆ nameX_

std::string HGCSD::nameX_
private

Definition at line 47 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ numberingScheme_

std::unique_ptr<HGCNumberingScheme> HGCSD::numberingScheme_
private

Definition at line 49 of file HGCSD.h.

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

◆ rejectMB_

bool HGCSD::rejectMB_
private

Definition at line 55 of file HGCSD.h.

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

◆ slopeMin_

double HGCSD::slopeMin_
private

Definition at line 53 of file HGCSD.h.

Referenced by getEnergyDeposit(), and update().

◆ storeAllG4Hits_

bool HGCSD::storeAllG4Hits_
private

Definition at line 55 of file HGCSD.h.

Referenced by HGCSD().

◆ t_Angle_

std::vector<double> HGCSD::t_Angle_
private

Definition at line 63 of file HGCSD.h.

Referenced by getEnergyDeposit(), initEvent(), and initRun().

◆ t_dEStep1_

std::vector<double> HGCSD::t_dEStep1_
private

Definition at line 62 of file HGCSD.h.

Referenced by getEnergyDeposit(), initEvent(), and initRun().

◆ t_dEStep2_

std::vector<double> HGCSD::t_dEStep2_
private

Definition at line 62 of file HGCSD.h.

Referenced by getEnergyDeposit(), initEvent(), and initRun().

◆ t_EventID_

uint32_t HGCSD::t_EventID_
private

Definition at line 60 of file HGCSD.h.

Referenced by initEvent(), and initRun().

◆ t_Layer_

std::vector<int> HGCSD::t_Layer_
private

Definition at line 61 of file HGCSD.h.

Referenced by getEnergyDeposit(), initEvent(), and initRun().

◆ t_Parcode_

std::vector<int> HGCSD::t_Parcode_
private

Definition at line 61 of file HGCSD.h.

Referenced by getEnergyDeposit(), initEvent(), and initRun().

◆ t_TrackE_

std::vector<double> HGCSD::t_TrackE_
private

Definition at line 62 of file HGCSD.h.

Referenced by getEnergyDeposit(), initEvent(), and initRun().

◆ tree_

TTree* HGCSD::tree_
private

Definition at line 59 of file HGCSD.h.

Referenced by endEvent(), and initRun().

◆ waferRot_

bool HGCSD::waferRot_
private

Definition at line 55 of file HGCSD.h.

Referenced by HGCSD(), and update().