CMS 3D CMS Logo

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

#include <HGCalSD.h>

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

Public Member Functions

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

std::vector< double > angles_
 
bool checkID_
 
int cornerMinMask_
 
double distanceFromEdge_
 
double eminHit_
 
bool fiducialCut_
 
HGCalGeometryMode::GeometryMode geom_mode_
 
std::unique_ptr< HGCGuardRingguardRing_
 
const HGCalDDDConstantshgcons_
 
int levelT1_
 
int levelT2_
 
std::string missingFile_
 
std::unique_ptr< HGCMouseBitemouseBite_
 
double mouseBiteCut_
 
DetId::Detector mydet_
 
std::string nameX_
 
std::unique_ptr< HGCalNumberingSchemenumberingScheme_
 
bool rejectMB_
 
double slopeMin_
 
bool storeAllG4Hits_
 
const double tan30deg_
 
int useSimWt_
 
int verbose_
 
bool waferRot_
 
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 21 of file HGCalSD.h.

Constructor & Destructor Documentation

◆ HGCalSD()

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

Definition at line 31 of file HGCalSD.cc.

References angles_, checkID_, cornerMinMask_, distanceFromEdge_, eminHit_, fiducialCut_, DetId::Forward, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), guardRing_, DetId::HGCalEE, DetId::HGCalHSi, missingFile_, mouseBite_, mydet_, Skims_PA_cff::name, nameX_, numberingScheme_, AlCaHLTBitMon_ParallelJobs::p, rejectMB_, CaloSD::setNumberCheckedHits(), CaloSD::setUseMap(), storeAllG4Hits_, AlCaHLTBitMon_QueryRunRegistry::string, verbose_, and waferRot_.

36  : CaloSD(name,
37  clg,
38  p,
39  manager,
40  static_cast<float>(p.getParameter<edm::ParameterSet>("HGCSD").getParameter<double>("TimeSliceUnit")),
41  p.getParameter<edm::ParameterSet>("HGCSD").getParameter<bool>("IgnoreTrackID")),
42  hgcons_(hgc),
43  slopeMin_(0),
44  levelT1_(99),
45  levelT2_(99),
46  useSimWt_(0),
47  tan30deg_(std::tan(30.0 * CLHEP::deg)) {
48  numberingScheme_.reset(nullptr);
49  guardRing_.reset(nullptr);
50  mouseBite_.reset(nullptr);
51 
52  edm::ParameterSet m_HGC = p.getParameter<edm::ParameterSet>("HGCSD");
53  eminHit_ = m_HGC.getParameter<double>("EminHit") * CLHEP::MeV;
54  fiducialCut_ = m_HGC.getParameter<bool>("FiducialCut");
55  storeAllG4Hits_ = m_HGC.getParameter<bool>("StoreAllG4Hits");
56  rejectMB_ = m_HGC.getParameter<bool>("RejectMouseBite");
57  waferRot_ = m_HGC.getParameter<bool>("RotatedWafer");
58  cornerMinMask_ = m_HGC.getParameter<int>("CornerMinMask");
59  angles_ = m_HGC.getUntrackedParameter<std::vector<double>>("WaferAngles");
60  missingFile_ = m_HGC.getUntrackedParameter<std::string>("MissingWaferFile");
61  checkID_ = m_HGC.getUntrackedParameter<bool>("CheckID");
62  verbose_ = m_HGC.getUntrackedParameter<int>("Verbosity");
63 
64  if (storeAllG4Hits_) {
65  setUseMap(false);
67  }
68 
69  //this is defined in the hgcsens.xml
70  G4String myName = name;
72  nameX_ = "HGCal";
73  if (myName.find("HitsEE") != std::string::npos) {
75  nameX_ = "HGCalEESensitive";
76  } else if (myName.find("HitsHEfront") != std::string::npos) {
78  nameX_ = "HGCalHESiliconSensitive";
79  }
80 
81 #ifdef EDM_ML_DEBUG
82  edm::LogVerbatim("HGCSim") << "**************************************************"
83  << "\n"
84  << "* *"
85  << "\n"
86  << "* Constructing a HGCalSD with name " << name << "\n"
87  << "* *"
88  << "\n"
89  << "**************************************************";
90 #endif
91  edm::LogVerbatim("HGCSim") << "HGCalSD:: Threshold for storing hits: " << eminHit_ << " for " << nameX_
92  << " detector " << mydet_;
93  edm::LogVerbatim("HGCSim") << "Flag for storing individual Geant4 Hits " << storeAllG4Hits_;
94  edm::LogVerbatim("HGCSim") << "Fiducial volume cut with cut from eta/phi "
95  << "boundary " << fiducialCut_ << " at " << distanceFromEdge_;
96  edm::LogVerbatim("HGCSim") << "Reject MosueBite Flag: " << rejectMB_ << " cuts along " << angles_.size()
97  << " axes: " << angles_[0] << ", " << angles_[1];
98 }
Log< level::Info, true > LogVerbatim
int verbose_
Definition: HGCalSD.h:55
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
double distanceFromEdge_
Definition: HGCalSD.h:50
int levelT2_
Definition: HGCalSD.h:52
void setNumberCheckedHits(int val)
Definition: CaloSD.h:122
double slopeMin_
Definition: HGCalSD.h:50
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCalSD.h:44
std::string nameX_
Definition: HGCalSD.h:48
void setUseMap(bool val)
Definition: CaloSD.h:111
T getUntrackedParameter(std::string const &, T const &) const
bool rejectMB_
Definition: HGCalSD.h:54
DetId::Detector mydet_
Definition: HGCalSD.h:47
std::string missingFile_
Definition: HGCalSD.h:58
bool storeAllG4Hits_
Definition: HGCalSD.h:53
std::vector< double > angles_
Definition: HGCalSD.h:57
const HGCalDDDConstants * hgcons_
Definition: HGCalSD.h:43
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
const double tan30deg_
Definition: HGCalSD.h:56
bool waferRot_
Definition: HGCalSD.h:54
bool checkID_
Definition: HGCalSD.h:54
int cornerMinMask_
Definition: HGCalSD.h:52
bool fiducialCut_
Definition: HGCalSD.h:54
CaloSD(const std::string &aSDname, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, float timeSlice=1., bool ignoreTkID=false)
Definition: CaloSD.cc:33
int useSimWt_
Definition: HGCalSD.h:55
std::unique_ptr< HGCGuardRing > guardRing_
Definition: HGCalSD.h:45
int levelT1_
Definition: HGCalSD.h:52
std::unique_ptr< HGCMouseBite > mouseBite_
Definition: HGCalSD.h:46
double eminHit_
Definition: HGCalSD.h:50

◆ ~HGCalSD()

HGCalSD::~HGCalSD ( )
overridedefault

Member Function Documentation

◆ filterHit()

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

Reimplemented from CaloSD.

Definition at line 271 of file HGCalSD.cc.

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

271  {
272  return ((time <= tmaxHit) && (aHit->getEnergyDeposit() > eminHit_));
273 }
double tmaxHit
Definition: CaloSD.h:144
double getEnergyDeposit() const
Definition: CaloG4Hit.h:79
double eminHit_
Definition: HGCalSD.h:50

◆ getEnergyDeposit()

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

Reimplemented from CaloSD.

Definition at line 100 of file HGCalSD.cc.

References funct::abs(), CaloSD::getResponseWt(), alignCSCRings::r, slopeMin_, weight_, and z.

100  {
101  double r = aStep->GetPreStepPoint()->GetPosition().perp();
102  double z = std::abs(aStep->GetPreStepPoint()->GetPosition().z());
103 #ifdef EDM_ML_DEBUG
104  G4int parCode = aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
105  G4String parName = aStep->GetTrack()->GetDefinition()->GetParticleName();
106  G4LogicalVolume* lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
107  edm::LogVerbatim("HGCSim") << "HGCalSD: Hit from standard path from " << lv->GetName() << " for Track "
108  << aStep->GetTrack()->GetTrackID() << " (" << parCode << ":" << parName << ") R = " << r
109  << " Z = " << z << " slope = " << r / z << ":" << slopeMin_;
110 #endif
111  // Apply fiducial cut
112  if (r < z * slopeMin_) {
113 #ifdef EDM_ML_DEBUG
114  edm::LogVerbatim("HGCSim") << "HGCalSD: Fiducial Volume cut";
115 #endif
116  return 0.0;
117  }
118 
119  double wt1 = getResponseWt(aStep->GetTrack());
120  double wt2 = aStep->GetTrack()->GetWeight();
121  double destep = weight_ * wt1 * (aStep->GetTotalEnergyDeposit());
122  if (wt2 > 0)
123  destep *= wt2;
124 #ifdef EDM_ML_DEBUG
125  edm::LogVerbatim("HGCSim") << "HGCalSD: weights= " << weight_ << ":" << wt1 << ":" << wt2 << " Total weight "
126  << weight_ * wt1 * wt2 << " deStep: " << aStep->GetTotalEnergyDeposit() << ":" << destep;
127 #endif
128  return destep;
129 }
Log< level::Info, true > LogVerbatim
double slopeMin_
Definition: HGCalSD.h:50
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double weight_
Definition: HGCalSD.h:51
double getResponseWt(const G4Track *)
Definition: CaloSD.cc:855

◆ initRun()

void HGCalSD::initRun ( )
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 269 of file HGCalSD.cc.

269 {}

◆ isItinFidVolume()

bool HGCalSD::isItinFidVolume ( const G4ThreeVector &  )
private

◆ setDetUnitId() [1/2]

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

Implements CaloSD.

Definition at line 131 of file HGCalSD.cc.

References HGCalDDDConstants::cassetteShiftSilicon(), HGCSiliconDetId::cellU(), HGCSiliconDetId::cellV(), checkID_, angle_units::operators::convertRadToDeg(), debug, TauDecayModes::dec, change_name::diff, PVValHelper::dx, PVValHelper::dy, fiducialCut_, guardRing_, hgcons_, l1ctLayer2EG_cff::id, HGCalDDDConstants::isValidHex8(), HGCSiliconDetId::layer(), pixelTopology::layer, HGCalTypes::layerFrontBack(), HGCalDDDConstants::layerType(), levelT1_, levelT2_, DTRecHitClients_cfi::local, HGCalDDDConstants::locateCell(), callgraph::module, mouseBite_, CaloSD::printDetectorLevels(), rejectMB_, mathSSE::sqrt(), useSimWt_, verbose_, HGCalDDDConstants::waferFileInfo(), HGCalWaferIndex::waferIndex(), HGCalDDDConstants::waferTypeRotation(), HGCSiliconDetId::waferU(), HGCSiliconDetId::waferUV(), HGCSiliconDetId::waferV(), geometryCSVtoXML::xx, geometryCSVtoXML::xy, and HGCSiliconDetId::zside().

131  {
132  const G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
133  const G4VTouchable* touch = preStepPoint->GetTouchable();
134 
135 #ifdef EDM_ML_DEBUG
136  edm::LogVerbatim("HGCSim") << "DepthsTop: " << touch->GetHistoryDepth() << ":" << levelT1_ << ":" << levelT2_;
137  printDetectorLevels(touch);
138 #endif
139  //determine the exact position in global coordinates in the mass geometry
140  G4ThreeVector hitPoint = preStepPoint->GetPosition();
141  float globalZ = touch->GetTranslation(0).z();
142  int iz(globalZ > 0 ? 1 : -1);
143 
144  int layer(0), moduleLev(-1), cell(-1);
145  if (useSimWt_ > 0) {
146  layer = touch->GetReplicaNumber(2);
147  moduleLev = 1;
148  } else if (touch->GetHistoryDepth() > levelT2_) {
149  layer = touch->GetReplicaNumber(4);
150  cell = touch->GetReplicaNumber(1);
151  moduleLev = 3;
152  } else {
153  layer = touch->GetReplicaNumber(3);
154  moduleLev = 2;
155  }
156  int module = touch->GetReplicaNumber(moduleLev);
157 #ifdef EDM_ML_DEBUG
158  edm::LogVerbatim("HGCSim") << "DepthsTop: " << touch->GetHistoryDepth() << ":" << levelT1_ << ":" << levelT2_ << ":"
159  << useSimWt_ << " name " << touch->GetVolume(0)->GetName() << " layer:module:cell "
160  << layer << ":" << moduleLev << ":" << module << ":" << cell;
161  printDetectorLevels(touch);
162  G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
163  edm::LogVerbatim("HGCSim") << "Depths: " << touch->GetHistoryDepth() << " name " << touch->GetVolume(0)->GetName()
164  << ":" << touch->GetReplicaNumber(0) << " " << touch->GetVolume(1)->GetName() << ":"
165  << touch->GetReplicaNumber(1) << " " << touch->GetVolume(2)->GetName() << ":"
166  << touch->GetReplicaNumber(2) << " " << touch->GetVolume(3)->GetName() << ":"
167  << touch->GetReplicaNumber(3) << " " << touch->GetVolume(4)->GetName() << ":"
168  << touch->GetReplicaNumber(4) << " "
169  << " layer:module:cell " << layer << ":" << module << ":" << cell << " Material "
170  << mat->GetName() << ":" << mat->GetRadlen();
171 #endif
172  // The following statement should be examined later before elimination
173  if (aStep->GetPreStepPoint()->GetMaterial()->GetRadlen() > 100000.)
174  return 0;
175 
176  uint32_t id = setDetUnitId(layer, module, cell, iz, hitPoint);
177  if ((rejectMB_ || fiducialCut_) && id != 0) {
178  auto uv = HGCSiliconDetId(id).waferUV();
179 #ifdef EDM_ML_DEBUG
180  edm::LogVerbatim("HGCSim") << "ID " << std::hex << id << std::dec << " " << HGCSiliconDetId(id);
181 #endif
182  G4ThreeVector local = (touch->GetHistory()->GetTransform(moduleLev).TransformPoint(hitPoint));
183  if (fiducialCut_) {
184  int layertype = hgcons_->layerType(layer);
185  int frontBack = HGCalTypes::layerFrontBack(layertype);
186  if (guardRing_->exclude(local, iz, frontBack, layer, uv.first, uv.second)) {
187  id = 0;
188 #ifdef EDM_ML_DEBUG
189  edm::LogVerbatim("HGCSim") << "Rejected by GuardRing cutoff *****";
190 #endif
191  }
192  }
193  if ((rejectMB_) && (mouseBite_->exclude(local, iz, layer, uv.first, uv.second))) {
194  id = 0;
195 #ifdef EDM_ML_DEBUG
196  edm::LogVerbatim("HGCSim") << "Rejected by MouseBite cutoff *****";
197 #endif
198  }
199  }
200 #ifdef EDM_ML_DEBUG
201  if (id != 0)
202  edm::LogVerbatim("HGCSim") << HGCSiliconDetId(id);
203 #endif
204  if ((id != 0) && checkID_) {
205  HGCSiliconDetId hid1(id);
206  bool cshift = (hgcons_->cassetteShiftSilicon(hid1.zside(), hid1.layer(), hid1.waferU(), hid1.waferV()));
207  std::string_view pid = (cshift ? "HGCSim" : "HGCalSim");
208  bool debug = (verbose_ > 0) ? true : false;
209  auto xy = hgcons_->locateCell(hid1, debug);
210  double xx = (hid1.zside() > 0) ? xy.first : -xy.first;
211  double dx = xx - (hitPoint.x() / CLHEP::cm);
212  double dy = xy.second - (hitPoint.y() / CLHEP::cm);
213  double diff = (dx * dx + dy * dy);
214  constexpr double tol = 2.0 * 2.0;
215  bool valid1 = hgcons_->isValidHex8(hid1.layer(), hid1.waferU(), hid1.waferV(), hid1.cellU(), hid1.cellV(), true);
216  if ((diff > tol) || (!valid1))
217  pid = "HGCalError";
218  auto partn = hgcons_->waferTypeRotation(hid1.layer(), hid1.waferU(), hid1.waferV(), false, false);
219  int indx = HGCalWaferIndex::waferIndex(layer, hid1.waferU(), hid1.waferV());
220  edm::LogVerbatim(pid) << "CheckID " << HGCSiliconDetId(id) << " Layer:Module:Cell:ModuleLev " << layer << ":"
221  << module << ":" << cell << ":" << moduleLev << " SimWt:history " << useSimWt_ << ":"
222  << touch->GetHistoryDepth() << ":" << levelT1_ << ":" << levelT2_ << " input position: ("
223  << hitPoint.x() / CLHEP::cm << ", " << hitPoint.y() / CLHEP::cm << ":"
224  << convertRadToDeg(std::atan2(hitPoint.y(), hitPoint.x())) << "); position from ID (" << xx
225  << ", " << xy.second << ") distance " << dx << ":" << dy << ":" << std::sqrt(diff)
226  << " Valid " << valid1 << " Wafer type|rotation " << partn.first << ":" << partn.second
227  << " Part:Orient:Cassette " << std::get<1>(hgcons_->waferFileInfo(indx)) << ":"
228  << std::get<2>(hgcons_->waferFileInfo(indx)) << ":"
229  << std::get<3>(hgcons_->waferFileInfo(indx)) << " CassetteShift " << cshift;
230  if ((diff > tol) || (!valid1)) {
231  printDetectorLevels(touch);
232  hgcons_->locateCell(hid1, true);
233  }
234  }
235  return id;
236 }
int verbose_
Definition: HGCalSD.h:55
Log< level::Info, true > LogVerbatim
int levelT2_
Definition: HGCalSD.h:52
constexpr NumType convertRadToDeg(NumType radians)
Definition: angle_units.h:21
std::pair< int, int > waferTypeRotation(int layer, int waferU, int waferV, bool fromFile, bool debug) const
std::pair< int, int > waferUV() const
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart) const
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
bool rejectMB_
Definition: HGCalSD.h:54
uint32_t setDetUnitId(const G4Step *step) override
Definition: HGCalSD.cc:131
std::tuple< int, int, int, int > waferFileInfo(unsigned int kk) const
T sqrt(T t)
Definition: SSEVec.h:19
const HGCalDDDConstants * hgcons_
Definition: HGCalSD.h:43
int32_t waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old=false)
bool checkID_
Definition: HGCalSD.h:54
#define debug
Definition: HDRShower.cc:19
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
bool fiducialCut_
Definition: HGCalSD.h:54
void printDetectorLevels(const G4VTouchable *) const
Definition: CaloSD.cc:1078
bool cassetteShiftSilicon(int zside, int layer, int waferU, int waferV) const
int useSimWt_
Definition: HGCalSD.h:55
std::unique_ptr< HGCGuardRing > guardRing_
Definition: HGCalSD.h:45
int levelT1_
Definition: HGCalSD.h:52
std::unique_ptr< HGCMouseBite > mouseBite_
Definition: HGCalSD.h:46
static int32_t layerFrontBack(int32_t layerOrient)
Definition: HGCalTypes.h:125
int layerType(int lay) const

◆ setDetUnitId() [2/2]

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

Definition at line 275 of file HGCalSD.cc.

References cornerMinMask_, hgcons_, l1ctLayer2EG_cff::id, CaloSD::ignoreRejection(), pixelTopology::layer, HGCalDDDConstants::maskCell(), callgraph::module, numberingScheme_, HGCalDDDConstants::waferHexagon8File(), and weight_.

275  {
276  uint32_t id = numberingScheme_ ? numberingScheme_->getUnitID(layer, module, cell, iz, pos, weight_) : 0;
277  if (cornerMinMask_ > 2) {
278  if (hgcons_->maskCell(DetId(id), cornerMinMask_)) {
279  id = 0;
280  ignoreRejection();
281  }
282  }
283  if (hgcons_->waferHexagon8File() || (id == 0))
284  ignoreRejection();
285  return id;
286 }
bool maskCell(const DetId &id, int corners) const
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCalSD.h:44
void ignoreRejection()
Definition: CaloSD.h:108
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
const HGCalDDDConstants * hgcons_
Definition: HGCalSD.h:43
Definition: DetId.h:17
int cornerMinMask_
Definition: HGCalSD.h:52
bool waferHexagon8File() const
double weight_
Definition: HGCalSD.h:51

◆ update() [1/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
virtual void initEvent(const BeginOfEvent *)
Definition: CaloSD.cc:798
void clearHits() override
Definition: CaloSD.cc:779

◆ update() [2/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
virtual void endEvent()
Definition: CaloSD.cc:800
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:876

◆ update() [3/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() [4/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() [5/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: HGCalSD.cc:269

◆ update() [6/6]

void HGCalSD::update ( const BeginOfJob )
overrideprotectedvirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfJob *>.

Definition at line 238 of file HGCalSD.cc.

References angles_, Exception, fiducialCut_, geom_mode_, HGCalDDDConstants::geomMode(), HGCalDDDConstants::getParameter(), guardRing_, hgcons_, levelT1_, levelT2_, HGCalDDDConstants::levelTop(), HGCalDDDConstants::minSlope(), missingFile_, HGCalDDDConstants::mouseBite(), mouseBite_, mouseBiteCut_, mydet_, nameX_, numberingScheme_, rejectMB_, slopeMin_, tan30deg_, HGCalParameters::useOffset_, useSimWt_, HGCalParameters::useSimWt_, waferRot_, and HGCalDDDConstants::waferSize().

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

238  {
239  if (hgcons_ != nullptr) {
242  levelT1_ = hgcons_->levelTop(0);
243  levelT2_ = hgcons_->levelTop(1);
245  int useOffset = hgcons_->getParameter()->useOffset_;
246  double waferSize = hgcons_->waferSize(false);
247  double mouseBite = hgcons_->mouseBite(false);
248  mouseBiteCut_ = waferSize * tan30deg_ - mouseBite;
249  if (useOffset > 0) {
250  rejectMB_ = true;
251  fiducialCut_ = true;
252  }
253 #ifdef EDM_ML_DEBUG
254  edm::LogVerbatim("HGCSim") << "HGCalSD::Initialized with mode " << geom_mode_ << " Slope cut " << slopeMin_
255  << " top Level " << levelT1_ << ":" << levelT2_ << " useSimWt " << useSimWt_ << " wafer "
256  << waferSize << ":" << mouseBite << " useOffset " << useOffset;
257 #endif
258 
259  numberingScheme_ = std::make_unique<HGCalNumberingScheme>(*hgcons_, mydet_, nameX_, missingFile_);
260  if (rejectMB_)
261  mouseBite_ = std::make_unique<HGCMouseBite>(*hgcons_, angles_, mouseBiteCut_, waferRot_);
262  if (fiducialCut_)
263  guardRing_ = std::make_unique<HGCGuardRing>(*hgcons_);
264  } else {
265  throw cms::Exception("Unknown", "HGCalSD") << "Cannot find HGCalDDDConstants for " << nameX_ << "\n";
266  }
267 }
Log< level::Info, true > LogVerbatim
int levelT2_
Definition: HGCalSD.h:52
double slopeMin_
Definition: HGCalSD.h:50
const HGCalParameters * getParameter() const
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCalSD.h:44
std::string nameX_
Definition: HGCalSD.h:48
double mouseBiteCut_
Definition: HGCalSD.h:51
HGCalGeometryMode::GeometryMode geomMode() const
bool rejectMB_
Definition: HGCalSD.h:54
DetId::Detector mydet_
Definition: HGCalSD.h:47
std::string missingFile_
Definition: HGCalSD.h:58
std::vector< double > angles_
Definition: HGCalSD.h:57
const HGCalDDDConstants * hgcons_
Definition: HGCalSD.h:43
const double tan30deg_
Definition: HGCalSD.h:56
double mouseBite(bool reco) const
bool waferRot_
Definition: HGCalSD.h:54
double minSlope() const
HGCalGeometryMode::GeometryMode geom_mode_
Definition: HGCalSD.h:49
bool fiducialCut_
Definition: HGCalSD.h:54
int useSimWt_
Definition: HGCalSD.h:55
std::unique_ptr< HGCGuardRing > guardRing_
Definition: HGCalSD.h:45
int levelT1_
Definition: HGCalSD.h:52
std::unique_ptr< HGCMouseBite > mouseBite_
Definition: HGCalSD.h:46
int levelTop(int ind=0) const
double waferSize(bool reco) const

Member Data Documentation

◆ angles_

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

Definition at line 57 of file HGCalSD.h.

Referenced by HGCalSD(), and update().

◆ checkID_

bool HGCalSD::checkID_
private

Definition at line 54 of file HGCalSD.h.

Referenced by HGCalSD(), and setDetUnitId().

◆ cornerMinMask_

int HGCalSD::cornerMinMask_
private

Definition at line 52 of file HGCalSD.h.

Referenced by HGCalSD(), and setDetUnitId().

◆ distanceFromEdge_

double HGCalSD::distanceFromEdge_
private

Definition at line 50 of file HGCalSD.h.

Referenced by HGCalSD().

◆ eminHit_

double HGCalSD::eminHit_
private

Definition at line 50 of file HGCalSD.h.

Referenced by filterHit(), and HGCalSD().

◆ fiducialCut_

bool HGCalSD::fiducialCut_
private

Definition at line 54 of file HGCalSD.h.

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

◆ geom_mode_

HGCalGeometryMode::GeometryMode HGCalSD::geom_mode_
private

Definition at line 49 of file HGCalSD.h.

Referenced by update().

◆ guardRing_

std::unique_ptr<HGCGuardRing> HGCalSD::guardRing_
private

Definition at line 45 of file HGCalSD.h.

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

◆ hgcons_

const HGCalDDDConstants* HGCalSD::hgcons_
private

Definition at line 43 of file HGCalSD.h.

Referenced by setDetUnitId(), and update().

◆ levelT1_

int HGCalSD::levelT1_
private

Definition at line 52 of file HGCalSD.h.

Referenced by setDetUnitId(), and update().

◆ levelT2_

int HGCalSD::levelT2_
private

Definition at line 52 of file HGCalSD.h.

Referenced by setDetUnitId(), and update().

◆ missingFile_

std::string HGCalSD::missingFile_
private

Definition at line 58 of file HGCalSD.h.

Referenced by HGCalSD(), and update().

◆ mouseBite_

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

Definition at line 46 of file HGCalSD.h.

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

◆ mouseBiteCut_

double HGCalSD::mouseBiteCut_
private

Definition at line 51 of file HGCalSD.h.

Referenced by update().

◆ mydet_

DetId::Detector HGCalSD::mydet_
private

Definition at line 47 of file HGCalSD.h.

Referenced by HGCalSD(), and update().

◆ nameX_

std::string HGCalSD::nameX_
private

Definition at line 48 of file HGCalSD.h.

Referenced by HGCalSD(), and update().

◆ numberingScheme_

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

Definition at line 44 of file HGCalSD.h.

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

◆ rejectMB_

bool HGCalSD::rejectMB_
private

Definition at line 54 of file HGCalSD.h.

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

◆ slopeMin_

double HGCalSD::slopeMin_
private

Definition at line 50 of file HGCalSD.h.

Referenced by getEnergyDeposit(), and update().

◆ storeAllG4Hits_

bool HGCalSD::storeAllG4Hits_
private

Definition at line 53 of file HGCalSD.h.

Referenced by HGCalSD().

◆ tan30deg_

const double HGCalSD::tan30deg_
private

Definition at line 56 of file HGCalSD.h.

Referenced by update().

◆ useSimWt_

int HGCalSD::useSimWt_
private

Definition at line 55 of file HGCalSD.h.

Referenced by setDetUnitId(), and update().

◆ verbose_

int HGCalSD::verbose_
private

Definition at line 55 of file HGCalSD.h.

Referenced by HGCalSD(), and setDetUnitId().

◆ waferRot_

bool HGCalSD::waferRot_
private

Definition at line 54 of file HGCalSD.h.

Referenced by HGCalSD(), and update().

◆ weight_

double HGCalSD::weight_
private

Definition at line 51 of file HGCalSD.h.

Referenced by getEnergyDeposit(), and setDetUnitId().