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 HGCalTBDDDConstants *, 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, const std::string &newcolname="")
 
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 newCollection (const std::string &name, edm::ParameterSet const &p)
 
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, const std::string &newcollname="")
 
- 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, const std::string &newcollname="")
 
 ~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 (int k=0)
 
CaloG4HitcreateNewHit (const G4Step *, const G4Track *, int k)
 
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 (int k=0)
 
double getResponseWt (const G4Track *, int k=0)
 
virtual int getTrackID (const G4Track *)
 
bool hitExists (const G4Step *, int k)
 
void ignoreRejection ()
 
void printDetectorLevels (const G4VTouchable *) const
 
void processHit (const G4Step *step)
 
virtual void processSecondHit (const G4Step *, const G4Track *)
 
void resetForNewPrimary (const G4Step *)
 
void setNumberCheckedHits (int val, int k=0)
 
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 *, int k)
 
- 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_
 
bool dd4hep_
 
double eminHit_
 
HGCalGeometryMode::GeometryMode geom_mode_
 
const HGCalTBDDDConstantshgcons_
 
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_
 
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
std::string collName_ [2]
 
CaloG4HitcurrentHit [2]
 
CaloHitID currentID [2]
 
std::string detName_
 
float edepositEM
 
float edepositHAD
 
double eminHit
 
double energyCut
 
G4ThreeVector entranceLocal
 
G4ThreeVector entrancePoint
 
bool forceSave
 
std::vector< std::string > hcn_
 
float incidentEnergy
 
double kmaxIon
 
double kmaxNeutron
 
double kmaxProton
 
int nHC_
 
G4ThreeVector posGlobal
 
CaloHitID previousID [2]
 
bool suppressHeavy
 
double tmaxHit
 
std::vector< int > useResMap_
 

Detailed Description

Definition at line 26 of file HGCSD.h.

Constructor & Destructor Documentation

◆ HGCSD()

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

Definition at line 31 of file HGCSD.cc.

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

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

◆ ~HGCSD()

HGCSD::~HGCSD ( )
overridedefault

Member Function Documentation

◆ endEvent()

void HGCSD::endEvent ( )
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 255 of file HGCSD.cc.

255  {
256 #ifdef plotDebug
257  if (tree_)
258  tree_->Fill();
259 #endif
260 }

◆ filterHit()

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

Reimplemented from CaloSD.

Definition at line 262 of file HGCSD.cc.

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

262  {
263  return ((time <= tmaxHit) && (aHit->getEnergyDeposit() > eminHit_));
264 }
double tmaxHit
Definition: CaloSD.h:148
double eminHit_
Definition: HGCSD.h:55
double getEnergyDeposit() const
Definition: CaloG4Hit.h:79

◆ getEnergyDeposit()

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

Reimplemented from CaloSD.

Definition at line 99 of file HGCSD.cc.

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

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

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

242  {
243  const G4Event* evt = (*g4Event)();
244  t_EventID_ = evt->GetEventID();
245 #ifdef plotDebug
246  t_Layer_.clear();
247  t_Parcode_.clear();
248  t_dEStep1_.clear();
249  t_dEStep2_.clear();
250  t_TrackE_.clear();
251  t_Angle_.clear();
252 #endif
253 }
std::vector< double > t_TrackE_
Definition: HGCSD.h:69
std::vector< double > t_dEStep1_
Definition: HGCSD.h:69
std::vector< double > t_dEStep2_
Definition: HGCSD.h:69
std::vector< int > t_Layer_
Definition: HGCSD.h:68
std::vector< int > t_Parcode_
Definition: HGCSD.h:68
std::vector< double > t_Angle_
Definition: HGCSD.h:70
uint32_t t_EventID_
Definition: HGCSD.h:67

◆ initRun()

void HGCSD::initRun ( )
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 226 of file HGCSD.cc.

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

226  {
227 #ifdef plotDebug
229  if (tfile.isAvailable()) {
230  tree_ = tfile->make<TTree>("TreeHGCSD", "TreeHGCSD");
231  tree_->Branch("EventID", &t_EventID_);
232  tree_->Branch("Layer", &t_Layer_);
233  tree_->Branch("ParticleCode", &t_Parcode_);
234  tree_->Branch("dEStepOriginal", &t_dEStep1_);
235  tree_->Branch("dEStepWeighted", &t_dEStep2_);
236  tree_->Branch("TrackEnergy", &t_TrackE_);
237  tree_->Branch("ThetaAngle", &t_Angle_);
238  }
239 #endif
240 }
std::vector< double > t_TrackE_
Definition: HGCSD.h:69
std::vector< double > t_dEStep1_
Definition: HGCSD.h:69
std::vector< double > t_dEStep2_
Definition: HGCSD.h:69
std::vector< int > t_Layer_
Definition: HGCSD.h:68
Definition: tfile.py:1
std::vector< int > t_Parcode_
Definition: HGCSD.h:68
std::vector< double > t_Angle_
Definition: HGCSD.h:70
uint32_t t_EventID_
Definition: HGCSD.h:67

◆ isItinFidVolume()

bool HGCSD::isItinFidVolume ( const G4ThreeVector &  )
inlineprivate

Definition at line 48 of file HGCSD.h.

48 { return true; }

◆ setDetUnitId() [1/2]

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

Implements CaloSD.

Definition at line 143 of file HGCSD.cc.

References TauDecayModes::dec, EcalPhiSymFlatTableProducers_cfi::id, isotrackApplyRegressor::k, nano_mu_digi_cff::layer, levelT_, DTRecHitClients_cfi::local, callgraph::module, mouseBite_, myFwdSubdet_, rejectMB_, HGCalTestNumbering::unpackHexagonIndex(), and z.

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

References EcalPhiSymFlatTableProducers_cfi::id, nano_mu_digi_cff::layer, and numberingScheme_.

266  {
267  uint32_t id = numberingScheme_ ? numberingScheme_->getUnitID(subdet, layer, module, cell, iz, pos) : 0;
268  return id;
269 }
std::unique_ptr< HGCNumberingScheme > numberingScheme_
Definition: HGCSD.h:53

◆ update() [1/6]

void CaloSD::update
overrideprotected

Definition at line 781 of file CaloSD.cc.

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

781  {
782  endEvent();
783  for (int k = 0; k < nHC_; ++k) {
784  slave[k].get()->ReserveMemory(theHC[k]->entries());
785 
786  int count(0);
787  double eEM(0.0);
788  double eHAD(0.0);
789  double eEM2(0.0);
790  double eHAD2(0.0);
791 #ifdef EDM_ML_DEBUG
792  int wrong(0);
793  double tt(0.0);
794  double zloc(0.0);
795  double zglob(0.0);
796  double ee(0.0);
797 #endif
798  int hc_entries = theHC[k]->entries();
799  for (int i = 0; i < hc_entries; ++i) {
800 #ifdef EDM_ML_DEBUG
801  if (!saveHit((*theHC[k])[i], k)) {
802  ++wrong;
803  }
804 #else
805  saveHit((*theHC[k])[i], k);
806 #endif
807 
808  ++count;
809  double x = (*theHC[k])[i]->getEM();
810  eEM += x;
811  eEM2 += x * x;
812  x = (*theHC[k])[i]->getHadr();
813  eHAD += x;
814  eHAD2 += x * x;
815 #ifdef EDM_ML_DEBUG
816  tt += (*theHC[k])[i]->getTimeSlice();
817  ee += (*theHC[k])[i]->getIncidentEnergy();
818  zglob += std::abs((*theHC[k])[i]->getEntry().z());
819  zloc += std::abs((*theHC[k])[i]->getEntryLocal().z());
820 #endif
821  }
822 
823  double norm = (count > 0) ? 1.0 / count : 0.0;
824  eEM *= norm;
825  eEM2 *= norm;
826  eHAD *= norm;
827  eHAD2 *= norm;
828  eEM2 = std::sqrt(eEM2 - eEM * eEM);
829  eHAD2 = std::sqrt(eHAD2 - eHAD * eHAD);
830 #ifdef EDM_ML_DEBUG
831  tt *= norm;
832  ee *= norm;
833  zglob *= norm;
834  zloc *= norm;
835  edm::LogVerbatim("CaloSim") << "CaloSD: " << GetName() << " store " << count << " hits; " << wrong
836  << " track IDs not given properly and " << totalHits - count
837  << " hits not passing cuts\n EmeanEM= " << eEM << " ErmsEM= " << eEM2
838  << "\n EmeanHAD= " << eHAD << " ErmsHAD= " << eHAD2 << " TimeMean= " << tt
839  << " E0mean= " << ee << " Zglob= " << zglob << " Zloc= " << zloc << " ";
840 #endif
841  std::vector<std::unique_ptr<CaloG4Hit>>().swap(reusehit[k]);
842  if (useMap)
843  hitMap[k].erase(hitMap[k].begin(), hitMap[k].end());
844  }
845  tkMap.erase(tkMap.begin(), tkMap.end());
847 }
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:527
Log< level::Info, true > LogVerbatim
std::map< CaloHitID, CaloG4Hit * > hitMap[2]
Definition: CaloSD.h:195
bool useMap
Definition: CaloSD.h:179
CaloG4HitCollection * theHC[2]
Definition: CaloSD.h:174
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:112
bool saveHit(CaloG4Hit *, int k=0)
Definition: CaloSD.cc:950
std::unordered_map< unsigned int, unsigned int > boundaryCrossingParentMap_
Definition: CaloSD.h:197
int nHC_
Definition: CaloSD.h:158
Definition: TTTypes.h:54
T sqrt(T t)
Definition: SSEVec.h:23
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::vector< std::unique_ptr< CaloG4Hit > > reusehit[2]
Definition: CaloSD.h:198
int totalHits[2]
Definition: CaloSD.h:185
std::map< int, TrackWithHistory * > tkMap
Definition: CaloSD.h:196
void endEvent() override
Definition: HGCSD.cc:255
std::unique_ptr< CaloSlaveSD > slave[2]
Definition: CaloSD.h:171

◆ update() [2/6]

void CaloSD::update
overrideprotected

Definition at line 1014 of file CaloSD.cc.

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

1014  {
1015  int primary = -1;
1016  TrackInformation* trkInfo = cmsTrackInformation((*trk)());
1017  if (trkInfo->isPrimary())
1018  primary = (*trk)()->GetTrackID();
1019 
1020 #ifdef EDM_ML_DEBUG
1021  edm::LogVerbatim("CaloSim") << "New track: isPrimary " << trkInfo->isPrimary() << " primary ID = " << primary
1022  << " primary ancestor ID " << primAncestor;
1023 #endif
1024 
1025  // update the information if a different primary track ID
1026 
1027  if (primary > 0 && primary != primAncestor) {
1028  primAncestor = primary;
1029 
1030  // clean the hits information
1031 
1032  bool clean(false);
1033  for (int k = 0; k < nHC_; ++k)
1034  if (theHC[k]->entries() > 0)
1035  clean = true;
1036  if (clean)
1038  }
1039 }
Log< level::Info, true > LogVerbatim
bool isPrimary() const
CaloG4HitCollection * theHC[2]
Definition: CaloSD.h:174
int primAncestor
Definition: CaloSD.h:183
void cleanHitCollection()
Definition: CaloSD.cc:1041
static void clean(char *s)
int nHC_
Definition: CaloSD.h:158
TrackInformation * cmsTrackInformation(const G4Track *aTrack)

◆ update() [3/6]

void CaloSD::update
overrideprotected

Definition at line 750 of file CaloSD.cc.

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

750 { initRun(); }
void initRun() override
Definition: HGCSD.cc:226

◆ update() [4/6]

void CaloSD::update
overrideprotected

Definition at line 752 of file CaloSD.cc.

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

752  {
753 #ifdef EDM_ML_DEBUG
754  edm::LogVerbatim("CaloSim") << "CaloSD: Dispatched BeginOfEvent for " << GetName() << " !";
755 #endif
756  clearHits();
757  initEvent(g4Event);
758 }
Log< level::Info, true > LogVerbatim
void initEvent(const BeginOfEvent *) override
Definition: HGCSD.cc:242
void clearHits() override
Definition: CaloSD.cc:849

◆ update() [5/6]

void CaloSD::update
overrideprotected

Definition at line 760 of file CaloSD.cc.

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

760  {
761  int id = (*trk)()->GetTrackID();
762  TrackInformation* trkI = cmsTrackInformation((*trk)());
763  int lastTrackID = -1;
764  if (trkI)
765  lastTrackID = trkI->getIDonCaloSurface();
766  if (id == lastTrackID) {
767  auto trksForThisEvent = m_trackManager->trackContainer();
768  if (!trksForThisEvent->empty()) {
769  TrackWithHistory* trkH = trksForThisEvent->back();
770  if (trkH->trackID() == id) {
771  tkMap[id] = trkH;
772 #ifdef EDM_ML_DEBUG
773  edm::LogVerbatim("CaloSim") << "CaloSD: get track " << id << " from Container of size "
774  << trksForThisEvent->size() << " with ID " << trkH->trackID();
775 #endif
776  }
777  }
778  }
779 }
Log< level::Info, true > LogVerbatim
TrackInformation * cmsTrackInformation(const G4Track *aTrack)
int getIDonCaloSurface() const
const std::vector< TrackWithHistory * > * trackContainer() const
int trackID() const
std::map< int, TrackWithHistory * > tkMap
Definition: CaloSD.h:196
const SimTrackManager * m_trackManager
Definition: CaloSD.h:169

◆ 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 206 of file HGCSD.cc.

References angles_, dd4hep_, Exception, geom_mode_, HGCalTBDDDConstants::geomMode(), hgcons_, levelT_, HGCalTBDDDConstants::levelTop(), HGCalTBDDDConstants::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().

206  {
207  if (hgcons_ != nullptr) {
210  levelT_ = hgcons_->levelTop();
211  if (dd4hep_)
212  ++levelT_;
213  numberingScheme_ = std::make_unique<HGCNumberingScheme>(*hgcons_, nameX_);
214  if (rejectMB_)
215  mouseBite_ = std::make_unique<HGCMouseBite>(*hgcons_, angles_, mouseBiteCut_, waferRot_);
216  } else {
217  edm::LogError("HGCSim") << "HGCSD : Cannot find HGCalTBDDDConstants for " << nameX_;
218  throw cms::Exception("Unknown", "HGCSD") << "Cannot find HGCalTBDDDConstants for " << nameX_ << "\n";
219  }
220 #ifdef EDM_ML_DEBUG
221  edm::LogVerbatim("HGCSim") << "HGCSD::Initialized with mode " << geom_mode_ << " Slope cut " << slopeMin_
222  << " top Level " << levelT_ << " dd4hep " << dd4hep_;
223 #endif
224 }
bool dd4hep_
Definition: HGCSD.h:61
Log< level::Info, true > LogVerbatim
int levelT_
Definition: HGCSD.h:58
double mouseBiteCut_
Definition: HGCSD.h:60
int levelTop(int ind=0) const
std::string nameX_
Definition: HGCSD.h:51
std::vector< double > angles_
Definition: HGCSD.h:62
Log< level::Error, false > LogError
bool waferRot_
Definition: HGCSD.h:59
HGCalGeometryMode::GeometryMode geom_mode_
Definition: HGCSD.h:52
double slopeMin_
Definition: HGCSD.h:57
std::unique_ptr< HGCMouseBite > mouseBite_
Definition: HGCSD.h:54
std::unique_ptr< HGCNumberingScheme > numberingScheme_
Definition: HGCSD.h:53
bool rejectMB_
Definition: HGCSD.h:59
const HGCalTBDDDConstants * hgcons_
Definition: HGCSD.h:50
HGCalGeometryMode::GeometryMode geomMode() const

Member Data Documentation

◆ angles_

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

Definition at line 62 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ dd4hep_

bool HGCSD::dd4hep_
private

Definition at line 61 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ eminHit_

double HGCSD::eminHit_
private

Definition at line 55 of file HGCSD.h.

Referenced by filterHit(), and HGCSD().

◆ geom_mode_

HGCalGeometryMode::GeometryMode HGCSD::geom_mode_
private

Definition at line 52 of file HGCSD.h.

Referenced by update().

◆ hgcons_

const HGCalTBDDDConstants* HGCSD::hgcons_
private

Definition at line 50 of file HGCSD.h.

Referenced by update().

◆ levelT_

int HGCSD::levelT_
private

Definition at line 58 of file HGCSD.h.

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

◆ mouseBite_

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

Definition at line 54 of file HGCSD.h.

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

◆ mouseBiteCut_

double HGCSD::mouseBiteCut_
private

Definition at line 60 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ myFwdSubdet_

ForwardSubdetector HGCSD::myFwdSubdet_
private

Definition at line 56 of file HGCSD.h.

Referenced by HGCSD(), and setDetUnitId().

◆ nameX_

std::string HGCSD::nameX_
private

Definition at line 51 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ numberingScheme_

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

Definition at line 53 of file HGCSD.h.

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

◆ rejectMB_

bool HGCSD::rejectMB_
private

Definition at line 59 of file HGCSD.h.

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

◆ slopeMin_

double HGCSD::slopeMin_
private

Definition at line 57 of file HGCSD.h.

Referenced by getEnergyDeposit(), and update().

◆ storeAllG4Hits_

bool HGCSD::storeAllG4Hits_
private

Definition at line 59 of file HGCSD.h.

Referenced by HGCSD().

◆ t_Angle_

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

Definition at line 70 of file HGCSD.h.

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

◆ t_dEStep1_

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

Definition at line 69 of file HGCSD.h.

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

◆ t_dEStep2_

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

Definition at line 69 of file HGCSD.h.

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

◆ t_EventID_

uint32_t HGCSD::t_EventID_
private

Definition at line 67 of file HGCSD.h.

Referenced by initEvent(), and initRun().

◆ t_Layer_

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

Definition at line 68 of file HGCSD.h.

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

◆ t_Parcode_

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

Definition at line 68 of file HGCSD.h.

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

◆ t_TrackE_

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

Definition at line 69 of file HGCSD.h.

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

◆ waferRot_

bool HGCSD::waferRot_
private

Definition at line 59 of file HGCSD.h.

Referenced by HGCSD(), and update().