CMS 3D CMS Logo

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

#include <HGCScintSD.h>

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

Public Member Functions

 HGCScintSD (const std::string &, const HGCalDDDConstants *, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
 
uint32_t setDetUnitId (const G4Step *step) override
 
 ~HGCScintSD () override=default
 
- Public Member Functions inherited from CaloSD
 CaloSD (const std::string &aSDname, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, float timeSlice=1., bool ignoreTkID=false, 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

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 (int k=0)
 
CaloG4HitcreateNewHit (const G4Step *, const G4Track *, int k)
 
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 (int k=0)
 
double getResponseWt (const G4Track *, int k=0)
 
virtual int getTrackID (const G4Track *)
 
bool hitExists (const G4Step *, int k)
 
void ignoreRejection ()
 
virtual void initEvent (const BeginOfEvent *)
 
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 (int, int, int, int, G4ThreeVector &)
 

Private Attributes

double birk1_
 
double birk2_
 
double birk3_
 
bool checkID_
 
double distanceFromEdge_
 
double eminHit_
 
bool fiducialCut_
 
std::string fileName_
 
int firstLayer_
 
HGCalGeometryMode::GeometryMode geom_mode_
 
const HGCalDDDConstantshgcons_
 
int levelT1_
 
int levelT2_
 
DetId::Detector mydet_
 
std::string nameX_
 
std::unique_ptr< HGCalNumberingSchemenumberingScheme_
 
double slopeMin_
 
bool storeAllG4Hits_
 
std::vector< int > tiles_
 
bool useBirk_
 
int verbose_
 
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
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 19 of file HGCScintSD.h.

Constructor & Destructor Documentation

◆ HGCScintSD()

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

Definition at line 32 of file HGCScintSD.cc.

References birk1_, birk2_, birk3_, edmScanValgrind::buffer, checkID_, distanceFromEdge_, eminHit_, fiducialCut_, MillePedeFileConverter_cfg::fileName, fileName_, DetId::Forward, edm::FileInPath::fullPath(), g, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), DetId::HGCalHSc, mps_monitormerge::items, nano_mu_digi_cff::layer, mydet_, mergeVDriftHistosByStation::name, nameX_, numberingScheme_, AlCaHLTBitMon_ParallelJobs::p, phi, relativeConstraints::ring, CaloSD::setNumberCheckedHits(), CaloSD::setUseMap(), CaloSimUtils::splitString(), storeAllG4Hits_, AlCaHLTBitMon_QueryRunRegistry::string, HGCalTileIndex::tileIndex(), tiles_, useBirk_, and verbose_.

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  levelT1_(99),
46  levelT2_(99),
47  firstLayer_(0) {
48  numberingScheme_.reset(nullptr);
49 
50  edm::ParameterSet m_HGC = p.getParameter<edm::ParameterSet>("HGCScintSD");
51  eminHit_ = m_HGC.getParameter<double>("EminHit") * CLHEP::MeV;
52  fiducialCut_ = m_HGC.getParameter<bool>("FiducialCut");
53  distanceFromEdge_ = m_HGC.getParameter<double>("DistanceFromEdge");
54  useBirk_ = m_HGC.getParameter<bool>("UseBirkLaw");
55  birk1_ = m_HGC.getParameter<double>("BirkC1") * (CLHEP::g / (CLHEP::MeV * CLHEP::cm2));
56  birk2_ = m_HGC.getParameter<double>("BirkC2");
57  birk3_ = m_HGC.getParameter<double>("BirkC3");
58  storeAllG4Hits_ = m_HGC.getParameter<bool>("StoreAllG4Hits");
59  checkID_ = m_HGC.getUntrackedParameter<bool>("CheckID");
60  fileName_ = m_HGC.getUntrackedParameter<std::string>("TileFileName");
61  verbose_ = m_HGC.getUntrackedParameter<int>("Verbosity");
62 
63  if (storeAllG4Hits_) {
64  setUseMap(false);
66  }
67 
68  //this is defined in the hgcsens.xml
69  G4String myName = name;
71  nameX_ = "HGCal";
72  if (myName.find("HitsHEback") != std::string::npos) {
74  nameX_ = "HGCalHEScintillatorSensitive";
75  }
76 
77 #ifdef EDM_ML_DEBUG
78  edm::LogVerbatim("HGCSim") << "**************************************************"
79  << "\n"
80  << "* *"
81  << "\n"
82  << "* Constructing a HGCScintSD with name " << name << "\n"
83  << "* *"
84  << "\n"
85  << "**************************************************";
86 #endif
87  edm::LogVerbatim("HGCSim") << "HGCScintSD:: Threshold for storing hits: " << eminHit_ << " for " << nameX_
88  << " detector " << mydet_ << " File " << fileName_;
89  edm::LogVerbatim("HGCSim") << "Flag for storing individual Geant4 Hits " << storeAllG4Hits_;
90  edm::LogVerbatim("HGCSim") << "Fiducial volume cut with cut from eta/phi "
91  << "boundary " << fiducialCut_ << " at " << distanceFromEdge_;
92  edm::LogVerbatim("HGCSim") << "Use of Birks law is set to " << useBirk_
93  << " with three constants kB = " << birk1_ << ", C1 = " << birk2_ << ", C2 = " << birk3_;
94 
95  if (!fileName_.empty()) {
96  edm::FileInPath filetmp("SimG4CMS/Calo/data/" + fileName_);
97  std::string fileName = filetmp.fullPath();
98  std::ifstream fInput(fileName.c_str());
99  if (!fInput.good()) {
100  edm::LogVerbatim("HGCSim") << "Cannot open file " << fileName;
101  } else {
102  char buffer[80];
103  while (fInput.getline(buffer, 80)) {
104  std::vector<std::string> items = CaloSimUtils::splitString(std::string(buffer));
105  if (items.size() > 2) {
106  int layer = std::atoi(items[0].c_str());
107  int ring = std::atoi(items[1].c_str());
108  int phi = std::atoi(items[2].c_str());
109  tiles_.emplace_back(HGCalTileIndex::tileIndex(layer, ring, phi));
110  }
111  }
112  edm::LogVerbatim("HGCSim") << "Reads in " << tiles_.size() << " tile information from " << fileName_;
113  fInput.close();
114  }
115  }
116 }
double birk2_
Definition: HGCScintSD.h:50
Log< level::Info, true > LogVerbatim
int levelT2_
Definition: HGCScintSD.h:47
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
double birk1_
Definition: HGCScintSD.h:50
void setNumberCheckedHits(int val, int k=0)
Definition: CaloSD.h:126
double distanceFromEdge_
Definition: HGCScintSD.h:46
bool checkID_
Definition: HGCScintSD.h:51
std::vector< int > tiles_
Definition: HGCScintSD.h:53
int levelT1_
Definition: HGCScintSD.h:47
void setUseMap(bool val)
Definition: CaloSD.h:115
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
bool fiducialCut_
Definition: HGCScintSD.h:48
bool useBirk_
Definition: HGCScintSD.h:49
const HGCalDDDConstants * hgcons_
Definition: HGCScintSD.h:41
T getUntrackedParameter(std::string const &, T const &) const
int32_t tileIndex(int32_t layer, int32_t ring, int32_t phi)
std::vector< std::string > splitString(const std::string &)
Definition: CaloSimUtils.cc:3
int verbose_
Definition: HGCScintSD.h:47
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: HGCScintSD.h:46
std::string fileName_
Definition: HGCScintSD.h:52
double slopeMin_
Definition: HGCScintSD.h:46
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCScintSD.h:42
int firstLayer_
Definition: HGCScintSD.h:47
std::string nameX_
Definition: HGCScintSD.h:44
DetId::Detector mydet_
Definition: HGCScintSD.h:43
double birk3_
Definition: HGCScintSD.h:50
bool storeAllG4Hits_
Definition: HGCScintSD.h:48

◆ ~HGCScintSD()

HGCScintSD::~HGCScintSD ( )
overridedefault

Member Function Documentation

◆ filterHit()

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

Reimplemented from CaloSD.

Definition at line 260 of file HGCScintSD.cc.

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

260  {
261  return ((time <= tmaxHit) && (aHit->getEnergyDeposit() > eminHit_));
262 }
double tmaxHit
Definition: CaloSD.h:148
double eminHit_
Definition: HGCScintSD.h:46
double getEnergyDeposit() const
Definition: CaloG4Hit.h:79

◆ getEnergyDeposit()

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

Reimplemented from CaloSD.

Definition at line 118 of file HGCScintSD.cc.

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

118  {
119  double r = aStep->GetPreStepPoint()->GetPosition().perp();
120  double z = std::abs(aStep->GetPreStepPoint()->GetPosition().z());
121 #ifdef EDM_ML_DEBUG
122  G4int parCode = aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
123  G4String parName = aStep->GetTrack()->GetDefinition()->GetParticleName();
124  G4LogicalVolume* lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
125  edm::LogVerbatim("HGCSim") << "HGCScintSD: Hit from standard path from " << lv->GetName() << " for Track "
126  << aStep->GetTrack()->GetTrackID() << " (" << parCode << ":" << parName << ") R = " << r
127  << " Z = " << z << " slope = " << r / z << ":" << slopeMin_;
128 #endif
129  // Apply fiducial cut
130  if (r < z * slopeMin_) {
131 #ifdef EDM_ML_DEBUG
132  edm::LogVerbatim("HGCSim") << "HGCScintSD: Fiducial Volume cut";
133 #endif
134  return 0.0;
135  }
136 
137  double wt1 = getResponseWt(aStep->GetTrack());
138  double wt2 = aStep->GetTrack()->GetWeight();
139  double wt3 = (useBirk_ ? getAttenuation(aStep, birk1_, birk2_, birk3_) : 1.0);
140  double destep = weight_ * wt1 * wt3 * (aStep->GetTotalEnergyDeposit());
141  if (wt2 > 0)
142  destep *= wt2;
143 #ifdef EDM_ML_DEBUG
144  edm::LogVerbatim("HGCalSim") << "HGCScintSD: weights= " << weight_ << ":" << wt1 << ":" << wt2 << ":" << wt3
145  << " Total weight " << weight_ * wt1 * wt2 * wt3
146  << " deStep: " << aStep->GetTotalEnergyDeposit() << ":" << destep;
147 #endif
148  return destep;
149 }
double birk2_
Definition: HGCScintSD.h:50
Log< level::Info, true > LogVerbatim
double birk1_
Definition: HGCScintSD.h:50
bool useBirk_
Definition: HGCScintSD.h:49
double getResponseWt(const G4Track *, int k=0)
Definition: CaloSD.cc:929
double weight_
Definition: HGCScintSD.h:50
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double slopeMin_
Definition: HGCScintSD.h:46
double getAttenuation(const G4Step *aStep, double birk1, double birk2, double birk3) const
Definition: CaloSD.cc:728
double birk3_
Definition: HGCScintSD.h:50

◆ initRun()

void HGCScintSD::initRun ( )
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 258 of file HGCScintSD.cc.

258 {}

◆ isItinFidVolume()

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

Definition at line 269 of file HGCScintSD.cc.

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

Referenced by setDetUnitId().

269  {
270  if (fiducialCut_) {
271  return (hgcons_->distFromEdgeTrap(pos.x(), pos.y(), pos.z()) > distanceFromEdge_);
272  } else {
273  return true;
274  }
275 }
double distFromEdgeTrap(double x, double y, double z) const
double distanceFromEdge_
Definition: HGCScintSD.h:46
bool fiducialCut_
Definition: HGCScintSD.h:48
const HGCalDDDConstants * hgcons_
Definition: HGCScintSD.h:41

◆ setDetUnitId() [1/2]

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

Implements CaloSD.

Definition at line 151 of file HGCScintSD.cc.

References HGCalDDDConstants::cassetteShiftScintillator(), checkID_, ALPAKA_ACCELERATOR_NAMESPACE::brokenline::constexpr(), debug, TauDecayModes::dec, change_name::diff, PVValHelper::dx, PVValHelper::dy, spr::find(), firstLayer_, geom_mode_, hgcons_, EcalPhiSymFlatTableProducers_cfi::id, HGCScintillatorDetId::iphi(), isItinFidVolume(), HGCalDDDConstants::isValidTrap(), nano_mu_digi_cff::layer, HGCScintillatorDetId::layer(), levelT1_, levelT2_, HGCalDDDConstants::locateCell(), callgraph::module, CaloSD::printDetectorLevels(), HGCScintillatorDetId::ring(), mathSSE::sqrt(), HGCalTileIndex::tileIndex(), tiles_, HGCalGeometryMode::TrapezoidCassette, HGCalGeometryMode::TrapezoidModule, validateGeometry_cfg::valid, verbose_, geometryCSVtoXML::xy, and HGCScintillatorDetId::zside().

151  {
152  const G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
153  const G4VTouchable* touch = preStepPoint->GetTouchable();
154 
155 #ifdef EDM_ML_DEBUG
156  edm::LogVerbatim("HGCSim") << "DepthsTop: " << touch->GetHistoryDepth() << ":" << levelT1_ << ":" << levelT2_;
157  printDetectorLevels(touch);
158 #endif
159  //determine the exact position in global coordinates in the mass geometry
160  G4ThreeVector hitPoint = preStepPoint->GetPosition();
161  float globalZ = touch->GetTranslation(0).z();
162  int iz(globalZ > 0 ? 1 : -1);
163 
164  int layer(0), module(-1), cell(-1);
166  layer = touch->GetReplicaNumber(1);
167  } else if ((touch->GetHistoryDepth() == levelT1_) || (touch->GetHistoryDepth() == levelT2_)) {
168  layer = touch->GetReplicaNumber(0);
169 #ifdef EDM_ML_DEBUG
170  edm::LogVerbatim("HGCSim") << "DepthsTop: " << touch->GetHistoryDepth() << ":" << levelT1_ << ":" << levelT2_
171  << " name " << touch->GetVolume(0)->GetName() << " layer:module:cell " << layer << ":"
172  << module << ":" << cell;
173 #endif
174  } else {
175  layer = touch->GetReplicaNumber(3);
176  module = touch->GetReplicaNumber(2);
177  cell = touch->GetReplicaNumber(1);
178 #ifdef EDM_ML_DEBUG
179  edm::LogVerbatim("HGCSim") << "DepthsInside: " << touch->GetHistoryDepth() << " name "
180  << touch->GetVolume(0)->GetName() << " layer:module:cell " << layer << ":" << module
181  << ":" << cell;
182 #endif
183  }
184 #ifdef EDM_ML_DEBUG
185  G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
186  edm::LogVerbatim("HGCSim") << "Depths: " << touch->GetHistoryDepth() << " name " << touch->GetVolume(0)->GetName()
187  << ":" << touch->GetReplicaNumber(0) << " " << touch->GetVolume(1)->GetName() << ":"
188  << touch->GetReplicaNumber(1) << " " << touch->GetVolume(2)->GetName() << ":"
189  << touch->GetReplicaNumber(2) << " " << touch->GetVolume(3)->GetName() << ":"
190  << touch->GetReplicaNumber(3) << " " << touch->GetVolume(4)->GetName() << ":"
191  << touch->GetReplicaNumber(4) << " "
192  << " layer:module:cell " << layer << ":" << module << ":" << cell << " Material "
193  << mat->GetName() << ":" << mat->GetRadlen();
194 #endif
195  // The following statement should be examined later before elimination
196  if (aStep->GetPreStepPoint()->GetMaterial()->GetRadlen() > 100000.)
197  return 0;
198 
199  uint32_t id = setDetUnitId(layer, module, cell, iz, hitPoint);
200  bool debug(false);
201  if (!tiles_.empty()) {
202  HGCScintillatorDetId hid(id);
203  int indx = HGCalTileIndex::tileIndex(firstLayer_ + hid.layer(), hid.ring(), hid.iphi());
204  if (std::find(tiles_.begin(), tiles_.end(), indx) != tiles_.end())
205  debug = true;
206  }
207  if (debug)
208  edm::LogVerbatim("HGCSim") << "Layer:module:cell:iz " << layer << ":" << module << ":" << cell << ":" << iz
209  << " Point (" << hitPoint.x() << ", " << hitPoint.y() << ", " << hitPoint.z() << ") "
210  << HGCScintillatorDetId(id);
211 
212  if (!isItinFidVolume(hitPoint)) {
213 #ifdef EDM_ML_DEBUG
214  edm::LogVerbatim("HGCSim") << "ID " << std::hex << id << std::dec << " " << HGCScintillatorDetId(id)
215  << " is rejected by fiducilal volume cut";
216 #endif
217  id = 0;
218  }
219  if ((id != 0) && checkID_) {
220  HGCScintillatorDetId hid1(id);
221  std::string_view pid =
222  ((hgcons_->cassetteShiftScintillator(hid1.zside(), hid1.layer(), hid1.iphi())) ? "HGCSim" : "HGCalSim");
223  bool debug = (verbose_ > 0) ? true : false;
225  double dx = xy.first - (hitPoint.x() / CLHEP::cm);
226  double dy = xy.second - (hitPoint.y() / CLHEP::cm);
227  double diff = std::sqrt(dx * dx + dy * dy);
228  constexpr double tol = 10.0;
229  bool valid = hgcons_->isValidTrap(hid1.zside(), hid1.layer(), hid1.ring(), hid1.iphi());
230  if ((diff > tol) || (!valid))
231  pid = "HGCalError";
232  edm::LogVerbatim(pid) << "CheckID " << HGCScintillatorDetId(id) << " input position: (" << hitPoint.x() / CLHEP::cm
233  << ", " << hitPoint.y() / CLHEP::cm << "); position from ID (" << xy.first << ", "
234  << xy.second << ") distance " << diff << " Valid " << valid
235  << " Rho = " << hitPoint.perp() / CLHEP::cm;
236  }
237  return id;
238 }
Log< level::Info, true > LogVerbatim
HGCalGeometryMode::GeometryMode geom_mode_
Definition: HGCScintSD.h:45
int levelT2_
Definition: HGCScintSD.h:47
bool cassetteShiftScintillator(int zside, int layer, int iphi) const
bool checkID_
Definition: HGCScintSD.h:51
std::vector< int > tiles_
Definition: HGCScintSD.h:53
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
uint32_t setDetUnitId(const G4Step *step) override
Definition: HGCScintSD.cc:151
int levelT1_
Definition: HGCScintSD.h:47
const HGCalDDDConstants * hgcons_
Definition: HGCScintSD.h:41
int32_t tileIndex(int32_t layer, int32_t ring, int32_t phi)
T sqrt(T t)
Definition: SSEVec.h:23
bool isItinFidVolume(const G4ThreeVector &)
Definition: HGCScintSD.cc:269
int verbose_
Definition: HGCScintSD.h:47
bool isValidTrap(int zside, int lay, int ieta, int iphi) const
#define debug
Definition: HDRShower.cc:19
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
int firstLayer_
Definition: HGCScintSD.h:47
void printDetectorLevels(const G4VTouchable *) const
Definition: CaloSD.cc:1159

◆ setDetUnitId() [2/2]

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

Definition at line 264 of file HGCScintSD.cc.

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

264  {
265  uint32_t id = numberingScheme_ ? numberingScheme_->getUnitID(layer, module, cell, iz, pos, weight_) : 0;
266  return id;
267 }
double weight_
Definition: HGCScintSD.h:50
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCScintSD.h:42

◆ update() [1/6]

void CaloSD::update
overrideprotected

Definition at line 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
virtual void initEvent(const BeginOfEvent *)
Definition: CaloSD.cc:870
void clearHits() override
Definition: CaloSD.cc:849

◆ update() [2/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
virtual void endEvent()
Definition: CaloSD.cc:872
std::map< int, TrackWithHistory * > tkMap
Definition: CaloSD.h:196
std::unique_ptr< CaloSlaveSD > slave[2]
Definition: CaloSD.h:171

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

◆ update() [6/6]

void HGCScintSD::update ( const BeginOfJob )
overrideprotectedvirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfJob *>.

Definition at line 240 of file HGCScintSD.cc.

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

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

240  {
241  if (hgcons_ != nullptr) {
244  levelT1_ = hgcons_->levelTop(0);
245  levelT2_ = hgcons_->levelTop(1);
246  firstLayer_ = hgcons_->firstLayer() - 1;
247 #ifdef EDM_ML_DEBUG
248  edm::LogVerbatim("HGCSim") << "HGCScintSD::Initialized with mode " << geom_mode_ << " Slope cut " << slopeMin_
249  << " top Level " << levelT1_ << ":" << levelT2_ << " FirstLayer " << firstLayer_;
250 #endif
251 
252  numberingScheme_ = std::make_unique<HGCalNumberingScheme>(*hgcons_, mydet_, nameX_, fileName_);
253  } else {
254  throw cms::Exception("Unknown", "HGCScintSD") << "Cannot find HGCalDDDConstants for " << nameX_ << "\n";
255  }
256 }
Log< level::Info, true > LogVerbatim
HGCalGeometryMode::GeometryMode geom_mode_
Definition: HGCScintSD.h:45
int levelT2_
Definition: HGCScintSD.h:47
int firstLayer() const
HGCalGeometryMode::GeometryMode geomMode() const
int levelT1_
Definition: HGCScintSD.h:47
const HGCalDDDConstants * hgcons_
Definition: HGCScintSD.h:41
double minSlope() const
std::string fileName_
Definition: HGCScintSD.h:52
double slopeMin_
Definition: HGCScintSD.h:46
std::unique_ptr< HGCalNumberingScheme > numberingScheme_
Definition: HGCScintSD.h:42
int firstLayer_
Definition: HGCScintSD.h:47
std::string nameX_
Definition: HGCScintSD.h:44
DetId::Detector mydet_
Definition: HGCScintSD.h:43
int levelTop(int ind=0) const

Member Data Documentation

◆ birk1_

double HGCScintSD::birk1_
private

Definition at line 50 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and HGCScintSD().

◆ birk2_

double HGCScintSD::birk2_
private

Definition at line 50 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and HGCScintSD().

◆ birk3_

double HGCScintSD::birk3_
private

Definition at line 50 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and HGCScintSD().

◆ checkID_

bool HGCScintSD::checkID_
private

Definition at line 51 of file HGCScintSD.h.

Referenced by HGCScintSD(), and setDetUnitId().

◆ distanceFromEdge_

double HGCScintSD::distanceFromEdge_
private

Definition at line 46 of file HGCScintSD.h.

Referenced by HGCScintSD(), and isItinFidVolume().

◆ eminHit_

double HGCScintSD::eminHit_
private

Definition at line 46 of file HGCScintSD.h.

Referenced by filterHit(), and HGCScintSD().

◆ fiducialCut_

bool HGCScintSD::fiducialCut_
private

Definition at line 48 of file HGCScintSD.h.

Referenced by HGCScintSD(), and isItinFidVolume().

◆ fileName_

std::string HGCScintSD::fileName_
private

Definition at line 52 of file HGCScintSD.h.

Referenced by HGCScintSD(), and update().

◆ firstLayer_

int HGCScintSD::firstLayer_
private

Definition at line 47 of file HGCScintSD.h.

Referenced by setDetUnitId(), and update().

◆ geom_mode_

HGCalGeometryMode::GeometryMode HGCScintSD::geom_mode_
private

Definition at line 45 of file HGCScintSD.h.

Referenced by setDetUnitId(), and update().

◆ hgcons_

const HGCalDDDConstants* HGCScintSD::hgcons_
private

Definition at line 41 of file HGCScintSD.h.

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

◆ levelT1_

int HGCScintSD::levelT1_
private

Definition at line 47 of file HGCScintSD.h.

Referenced by setDetUnitId(), and update().

◆ levelT2_

int HGCScintSD::levelT2_
private

Definition at line 47 of file HGCScintSD.h.

Referenced by setDetUnitId(), and update().

◆ mydet_

DetId::Detector HGCScintSD::mydet_
private

Definition at line 43 of file HGCScintSD.h.

Referenced by HGCScintSD(), and update().

◆ nameX_

std::string HGCScintSD::nameX_
private

Definition at line 44 of file HGCScintSD.h.

Referenced by HGCScintSD(), and update().

◆ numberingScheme_

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

Definition at line 42 of file HGCScintSD.h.

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

◆ slopeMin_

double HGCScintSD::slopeMin_
private

Definition at line 46 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and update().

◆ storeAllG4Hits_

bool HGCScintSD::storeAllG4Hits_
private

Definition at line 48 of file HGCScintSD.h.

Referenced by HGCScintSD().

◆ tiles_

std::vector<int> HGCScintSD::tiles_
private

Definition at line 53 of file HGCScintSD.h.

Referenced by HGCScintSD(), and setDetUnitId().

◆ useBirk_

bool HGCScintSD::useBirk_
private

Definition at line 49 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and HGCScintSD().

◆ verbose_

int HGCScintSD::verbose_
private

Definition at line 47 of file HGCScintSD.h.

Referenced by HGCScintSD(), and setDetUnitId().

◆ weight_

double HGCScintSD::weight_
private

Definition at line 50 of file HGCScintSD.h.

Referenced by getEnergyDeposit(), and setDetUnitId().