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 edm::EventSetup &, 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 edm::EventSetup &es, 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
 
bool ProcessHits (G4GFlashSpot *aSpot, G4TouchableHistory *) override
 
G4bool ProcessHits (G4Step *step, G4TouchableHistory *) override
 
void reset () override
 
 ~CaloSD () override
 
- Public Member Functions inherited from SensitiveCaloDetector
 SensitiveCaloDetector (const std::string &iname, const edm::EventSetup &es, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p)
 
- 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 edm::EventSetup &es, const SensitiveDetectorCatalog &, edm::ParameterSet const &p, bool calo)
 
 ~SensitiveDetector () override
 
- Public Member Functions inherited from Observer< const BeginOfRun * >
 Observer ()
 
void slotForUpdate (const BeginOfRun * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfEvent * >
 Observer ()
 
void slotForUpdate (const BeginOfEvent * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfTrack * >
 Observer ()
 
void slotForUpdate (const BeginOfTrack * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfTrack * >
 Observer ()
 
void slotForUpdate (const EndOfTrack * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const EndOfEvent * >
 Observer ()
 
void slotForUpdate (const EndOfEvent * iT)
 
virtual ~Observer ()
 
- Public Member Functions inherited from Observer< const BeginOfJob * >
 Observer ()
 
void slotForUpdate (const BeginOfJob * iT)
 
virtual ~Observer ()
 

Protected Member Functions

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

Private Member Functions

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

Private Attributes

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

Additional Inherited Members

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

Detailed Description

Definition at line 22 of file HGCSD.h.

Constructor & Destructor Documentation

◆ HGCSD()

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

Definition at line 35 of file HGCSD.cc.

40  : CaloSD(name,
41  es,
42  clg,
43  p,
44  manager,
45  (float)(p.getParameter<edm::ParameterSet>("HGCSD").getParameter<double>("TimeSliceUnit")),
46  p.getParameter<edm::ParameterSet>("HGCSD").getParameter<bool>("IgnoreTrackID")),
47  slopeMin_(0),
48  levelT_(99),
49  tree_(nullptr) {
50  numberingScheme_.reset(nullptr);
51  mouseBite_.reset(nullptr);
52 
53  edm::ParameterSet m_HGC = p.getParameter<edm::ParameterSet>("HGCSD");
54  eminHit_ = m_HGC.getParameter<double>("EminHit") * CLHEP::MeV;
55  storeAllG4Hits_ = m_HGC.getParameter<bool>("StoreAllG4Hits");
56  rejectMB_ = m_HGC.getParameter<bool>("RejectMouseBite");
57  waferRot_ = m_HGC.getParameter<bool>("RotatedWafer");
58  angles_ = m_HGC.getUntrackedParameter<std::vector<double>>("WaferAngles");
59  double waferSize = m_HGC.getUntrackedParameter<double>("WaferSize") * CLHEP::mm;
60  double mouseBite = m_HGC.getUntrackedParameter<double>("MouseBite") * CLHEP::mm;
61  mouseBiteCut_ = waferSize * tan(30.0 * CLHEP::deg) - mouseBite;
62 
63  if (storeAllG4Hits_) {
64  setUseMap(false);
66  }
67  //this is defined in the hgcsens.xml
68  G4String myName = name;
70  nameX_ = "HGCal";
71  if (myName.find("HitsEE") != std::string::npos) {
73  nameX_ = "HGCalEESensitive";
74  } else if (myName.find("HitsHEfront") != std::string::npos) {
76  nameX_ = "HGCalHESiliconSensitive";
77  } else if (myName.find("HitsHEback") != std::string::npos) {
79  nameX_ = "HGCalHEScintillatorSensitive";
80  }
81 
82 #ifdef EDM_ML_DEBUG
83  edm::LogVerbatim("HGCSim") << "**************************************************"
84  << "\n"
85  << "* *"
86  << "\n"
87  << "* Constructing a HGCSD with name " << name << "\n"
88  << "* *"
89  << "\n"
90  << "**************************************************";
91 #endif
92  edm::LogVerbatim("HGCSim") << "HGCSD:: Threshold for storing hits: " << eminHit << " for " << nameX_ << " subdet "
93  << myFwdSubdet_;
94  edm::LogVerbatim("HGCSim") << "Flag for storing individual Geant4 Hits " << storeAllG4Hits_;
95  edm::LogVerbatim("HGCSim") << "Reject MosueBite Flag: " << rejectMB_ << " Size of wafer " << waferSize
96  << " Mouse Bite " << mouseBite << ":" << mouseBiteCut_ << " along " << angles_.size()
97  << " axes";
98 }

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

◆ ~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 }

References tree_.

◆ filterHit()

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

Reimplemented from CaloSD.

Definition at line 262 of file HGCSD.cc.

262  {
263  return ((time <= tmaxHit) && (aHit->getEnergyDeposit() > eminHit_));
264 }

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

◆ getEnergyDeposit()

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

Reimplemented from CaloSD.

Definition at line 100 of file HGCSD.cc.

100  {
101  double r = aStep->GetPreStepPoint()->GetPosition().perp();
102  double z = std::abs(aStep->GetPreStepPoint()->GetPosition().z());
103 
104 #ifdef EDM_ML_DEBUG
105  G4int parCode = aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
106  G4LogicalVolume* lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
107  edm::LogVerbatim("HGCSim") << "HGCSD: Hit from standard path from " << lv->GetName() << " for Track "
108  << aStep->GetTrack()->GetTrackID() << " ("
109  << aStep->GetTrack()->GetDefinition()->GetParticleName() << ":" << parCode << ") R = " << r
110  << " Z = " << z << " slope = " << r / z << ":" << slopeMin_;
111 #endif
112 
113  // Apply fiductial volume
114  if (r < z * slopeMin_) {
115  return 0.0;
116  }
117 
118  double wt1 = getResponseWt(aStep->GetTrack());
119  double wt2 = aStep->GetTrack()->GetWeight();
120  double destep = wt1 * aStep->GetTotalEnergyDeposit();
121  if (wt2 > 0)
122  destep *= wt2;
123 
124 #ifdef plotDebug
125  const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
126  G4double tmptrackE = aStep->GetTrack()->GetKineticEnergy();
127  G4int parCode = aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
128  G4double angle = (aStep->GetTrack()->GetMomentumDirection().theta()) / CLHEP::deg;
129  G4int layer = ((touch->GetHistoryDepth() == levelT_) ? touch->GetReplicaNumber(0) : touch->GetReplicaNumber(2));
130  G4int ilayer = (layer - 1) / 3;
131  if (aStep->GetTotalEnergyDeposit() > 0) {
132  t_Layer_.emplace_back(ilayer);
133  t_Parcode_.emplace_back(parCode);
134  t_dEStep1_.emplace_back(aStep->GetTotalEnergyDeposit());
135  t_dEStep2_.emplace_back(destep);
136  t_TrackE_.emplace_back(tmptrackE);
137  t_Angle_.emplace_back(angle);
138  }
139 #endif
140 
141  return destep;
142 }

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

◆ initEvent()

void HGCSD::initEvent ( const BeginOfEvent g4Event)
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 242 of file HGCSD.cc.

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 }

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

◆ initRun()

void HGCSD::initRun ( )
overrideprotectedvirtual

Reimplemented from CaloSD.

Definition at line 226 of file HGCSD.cc.

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 }

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

◆ isItinFidVolume()

bool HGCSD::isItinFidVolume ( const G4ThreeVector &  )
inlineprivate

Definition at line 44 of file HGCSD.h.

44 { return true; }

◆ setDetUnitId() [1/2]

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

Implements CaloSD.

Definition at line 144 of file HGCSD.cc.

144  {
145  const G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
146  const G4VTouchable* touch = preStepPoint->GetTouchable();
147 
148  //determine the exact position in global coordinates in the mass geometry
149  G4ThreeVector hitPoint = preStepPoint->GetPosition();
150  float globalZ = touch->GetTranslation(0).z();
151  int iz(globalZ > 0 ? 1 : -1);
152 
153  //convert to local coordinates (=local to the current volume):
154  G4ThreeVector localpos = touch->GetHistory()->GetTopTransform().TransformPoint(hitPoint);
155 
156  //get the det unit id with
158 
159  int layer, module, cell;
160  if (touch->GetHistoryDepth() == levelT_) {
161  layer = touch->GetReplicaNumber(0);
162  module = -1;
163  cell = -1;
164 #ifdef EDM_ML_DEBUG
165  edm::LogVerbatim("HGCSim") << "Depths: " << touch->GetHistoryDepth() << " name " << touch->GetVolume(0)->GetName()
166  << " layer:module:cell " << layer << ":" << module << ":" << cell;
167 #endif
168  } else {
169  layer = touch->GetReplicaNumber(2);
170  module = touch->GetReplicaNumber(1);
171  cell = touch->GetReplicaNumber(0);
172  }
173 #ifdef EDM_ML_DEBUG
174  const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
175  edm::LogVerbatim("HGCSim") << "Depths: " << touch->GetHistoryDepth() << " name " << touch->GetVolume(0)->GetName()
176  << ":" << touch->GetReplicaNumber(0) << " " << touch->GetVolume(1)->GetName() << ":"
177  << touch->GetReplicaNumber(1) << " " << touch->GetVolume(2)->GetName() << ":"
178  << touch->GetReplicaNumber(2) << " layer:module:cell " << layer << ":" << module << ":"
179  << cell << " Material " << mat->GetName() << ":" << mat->GetRadlen();
180 //for (int k = 0; k< touch->GetHistoryDepth(); ++k)
181 // edm::LogVerbatim("HGCSim") << "Level [" << k << "] " << touch->GetVolume(k)->GetName() << ":" << 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  if (mouseBite_->exclude(hitPoint, z, wafer, 0))
199  id = 0;
200  }
201  return id;
202 }

References TauDecayModes::dec, triggerObjects_cff::id, phase1PixelTopology::layer, levelT_, mouseBite_, myFwdSubdet_, rejectMB_, HGCalTestNumbering::unpackHexagonIndex(), and z.

◆ 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.

266  {
267  uint32_t id = numberingScheme_ ? numberingScheme_->getUnitID(subdet, layer, module, cell, iz, pos) : 0;
268  return id;
269 }

References triggerObjects_cff::id, phase1PixelTopology::layer, and numberingScheme_.

◆ update() [1/6]

void CaloSD::update
overrideprotected

Definition at line 743 of file CaloSD.cc.

743  {
744  endEvent();
745  slave.get()->ReserveMemory(theHC->entries());
746 
747  int count(0);
748  int wrong(0);
749  double eEM(0.0);
750  double eHAD(0.0);
751  double eEM2(0.0);
752  double eHAD2(0.0);
753  double tt(0.0);
754  double zloc(0.0);
755  double zglob(0.0);
756  double ee(0.0);
757  int hc_entries = theHC->entries();
758  for (int i = 0; i < hc_entries; ++i) {
759  if (!saveHit((*theHC)[i])) {
760  ++wrong;
761  }
762  ++count;
763  double x = (*theHC)[i]->getEM();
764  eEM += x;
765  eEM2 += x * x;
766  x = (*theHC)[i]->getHadr();
767  eHAD += x;
768  eHAD2 += x * x;
769  tt += (*theHC)[i]->getTimeSlice();
770  ee += (*theHC)[i]->getIncidentEnergy();
771  zglob += std::abs((*theHC)[i]->getEntry().z());
772  zloc += std::abs((*theHC)[i]->getEntryLocal().z());
773  }
774 
775  double norm = (count > 0) ? 1.0 / count : 0.0;
776  eEM *= norm;
777  eEM2 *= norm;
778  eHAD *= norm;
779  eHAD2 *= norm;
780  eEM2 = std::sqrt(eEM2 - eEM * eEM);
781  eHAD2 = std::sqrt(eHAD2 - eHAD * eHAD);
782  tt *= norm;
783  ee *= norm;
784  zglob *= norm;
785  zloc *= norm;
786 
787 #ifdef EDM_ML_DEBUG
788  edm::LogVerbatim("CaloSim") << "CaloSD: " << GetName() << " store " << count << " hits; " << wrong
789  << " track IDs not given properly and " << totalHits - count
790  << " hits not passing cuts\n EmeanEM= " << eEM << " ErmsEM= " << eEM2
791  << "\n EmeanHAD= " << eHAD << " ErmsHAD= " << eHAD2 << " TimeMean= " << tt
792  << " E0mean= " << ee << " Zglob= " << zglob << " Zloc= " << zloc << " ";
793 #endif
794  tkMap.erase(tkMap.begin(), tkMap.end());
795  std::vector<std::unique_ptr<CaloG4Hit>>().swap(reusehit);
796  if (useMap)
797  hitMap.erase(hitMap.begin(), hitMap.end());
798 }

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

◆ update() [2/6]

void CaloSD::update
overrideprotected

Definition at line 709 of file CaloSD.cc.

709  {
710 #ifdef EDM_ML_DEBUG
711  edm::LogVerbatim("CaloSim") << "CaloSD: Dispatched BeginOfEvent for " << GetName() << " !";
712 #endif
713  clearHits();
714  initEvent(g4Event);
715 }

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

◆ update() [3/6]

void HGCSD::update ( const BeginOfJob )
overrideprotectedvirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfJob * >.

Definition at line 204 of file HGCSD.cc.

204  {
205  const edm::EventSetup* es = (*job)();
207  es->get<IdealGeometryRecord>().get(nameX_, hdc);
208  if (hdc.isValid()) {
209  const HGCalDDDConstants* hgcons = hdc.product();
210  geom_mode_ = hgcons->geomMode();
211  slopeMin_ = hgcons->minSlope();
212  levelT_ = hgcons->levelTop();
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") << "HCalSD : Cannot find HGCalDDDConstants for " << nameX_;
218  throw cms::Exception("Unknown", "HGCSD") << "Cannot find HGCalDDDConstants 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_;
223 #endif
224 }

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

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

◆ update() [4/6]

void CaloSD::update
overrideprotected

◆ update() [5/6]

void CaloSD::update
overrideprotected

Definition at line 965 of file CaloSD.cc.

965  {
966  int primary = -1;
967  TrackInformation* trkInfo = cmsTrackInformation((*trk)());
968  if (trkInfo->isPrimary())
969  primary = (*trk)()->GetTrackID();
970 
971 #ifdef EDM_ML_DEBUG
972  edm::LogVerbatim("CaloSim") << "New track: isPrimary " << trkInfo->isPrimary() << " primary ID = " << primary
973  << " primary ancestor ID " << primAncestor;
974 #endif
975 
976  // update the information if a different primary track ID
977 
978  if (primary > 0 && primary != primAncestor) {
979  primAncestor = primary;
980 
981  // clean the hits information
982 
983  if (theHC->entries() > 0)
985  }
986 }

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

◆ update() [6/6]

void CaloSD::update
overrideprotected

Definition at line 717 of file CaloSD.cc.

717  {
718  int id = (*trk)()->GetTrackID();
719  TrackInformation* trkI = cmsTrackInformation((*trk)());
720  int lastTrackID = -1;
721  if (trkI)
722  lastTrackID = trkI->getIDonCaloSurface();
723  if (id == lastTrackID) {
724  const TrackContainer* trksForThisEvent = m_trackManager->trackContainer();
725  if (trksForThisEvent != nullptr) {
726  int it = (int)(trksForThisEvent->size()) - 1;
727  if (it >= 0) {
728  TrackWithHistory* trkH = (*trksForThisEvent)[it];
729  if (trkH->trackID() == (unsigned int)(id))
730  tkMap[id] = trkH;
731 #ifdef EDM_ML_DEBUG
732  edm::LogVerbatim("CaloSim") << "CaloSD: get track " << it << " from Container of size "
733  << trksForThisEvent->size() << " with ID " << trkH->trackID();
734  } else {
735  edm::LogVerbatim("CaloSim") << "CaloSD: get track " << it << " from Container of size "
736  << trksForThisEvent->size() << " with no ID";
737 #endif
738  }
739  }
740  }
741 }

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

Member Data Documentation

◆ angles_

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

Definition at line 56 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ eminHit_

double HGCSD::eminHit_
private

Definition at line 50 of file HGCSD.h.

Referenced by filterHit(), and HGCSD().

◆ geom_mode_

HGCalGeometryMode::GeometryMode HGCSD::geom_mode_
private

Definition at line 47 of file HGCSD.h.

Referenced by update().

◆ levelT_

int HGCSD::levelT_
private

Definition at line 53 of file HGCSD.h.

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

◆ mouseBite_

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

Definition at line 49 of file HGCSD.h.

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

◆ mouseBiteCut_

double HGCSD::mouseBiteCut_
private

Definition at line 55 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ myFwdSubdet_

ForwardSubdetector HGCSD::myFwdSubdet_
private

Definition at line 51 of file HGCSD.h.

Referenced by HGCSD(), and setDetUnitId().

◆ nameX_

std::string HGCSD::nameX_
private

Definition at line 46 of file HGCSD.h.

Referenced by HGCSD(), and update().

◆ numberingScheme_

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

Definition at line 48 of file HGCSD.h.

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

◆ rejectMB_

bool HGCSD::rejectMB_
private

Definition at line 54 of file HGCSD.h.

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

◆ slopeMin_

double HGCSD::slopeMin_
private

Definition at line 52 of file HGCSD.h.

Referenced by getEnergyDeposit(), and update().

◆ storeAllG4Hits_

bool HGCSD::storeAllG4Hits_
private

Definition at line 54 of file HGCSD.h.

Referenced by HGCSD().

◆ t_Angle_

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

Definition at line 62 of file HGCSD.h.

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

◆ t_dEStep1_

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

Definition at line 61 of file HGCSD.h.

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

◆ t_dEStep2_

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

Definition at line 61 of file HGCSD.h.

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

◆ t_EventID_

uint32_t HGCSD::t_EventID_
private

Definition at line 59 of file HGCSD.h.

Referenced by initEvent(), and initRun().

◆ t_Layer_

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

Definition at line 60 of file HGCSD.h.

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

◆ t_Parcode_

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

Definition at line 60 of file HGCSD.h.

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

◆ t_TrackE_

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

Definition at line 61 of file HGCSD.h.

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

◆ tree_

TTree* HGCSD::tree_
private

Definition at line 58 of file HGCSD.h.

Referenced by endEvent(), and initRun().

◆ waferRot_

bool HGCSD::waferRot_
private

Definition at line 54 of file HGCSD.h.

Referenced by HGCSD(), and update().

CaloSD::tkMap
std::map< int, TrackWithHistory * > tkMap
Definition: CaloSD.h:185
HGCSD::t_dEStep2_
std::vector< double > t_dEStep2_
Definition: HGCSD.h:61
HGCSD::levelT_
int levelT_
Definition: HGCSD.h:53
CaloSD::tmaxHit
double tmaxHit
Definition: CaloSD.h:141
mps_fire.i
i
Definition: mps_fire.py:428
TrackInformation::getIDonCaloSurface
int getIDonCaloSurface() const
Definition: TrackInformation.h:43
HGCSD::mouseBiteCut_
double mouseBiteCut_
Definition: HGCSD.h:55
ForwardEmpty
Definition: ForwardSubdetector.h:5
CaloSD::saveHit
bool saveHit(CaloG4Hit *)
Definition: CaloSD.cc:897
groupFilesInBlocks.tt
int tt
Definition: groupFilesInBlocks.py:144
HGCSD::nameX_
std::string nameX_
Definition: HGCSD.h:46
ForwardSubdetector
ForwardSubdetector
Definition: ForwardSubdetector.h:4
HGCalDDDConstants::geomMode
HGCalGeometryMode::GeometryMode geomMode() const
Definition: HGCalDDDConstants.h:54
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
HGCSD::waferRot_
bool waferRot_
Definition: HGCSD.h:54
edm::swap
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:117
TrackWithHistory
Definition: TrackWithHistory.h:16
pos
Definition: PixelAliasList.h:18
HGCalTestNumbering::unpackHexagonIndex
static void unpackHexagonIndex(const uint32_t &idx, int &subdet, int &z, int &lay, int &wafer, int &celltyp, int &cell)
Definition: HGCalTestNumbering.cc:46
HGCSD::angles_
std::vector< double > angles_
Definition: HGCSD.h:56
protons_cff.time
time
Definition: protons_cff.py:39
MeV
const double MeV
edm::ParameterSet::getUntrackedParameter
T getUntrackedParameter(std::string const &, T const &) const
HGCSD::storeAllG4Hits_
bool storeAllG4Hits_
Definition: HGCSD.h:54
DDAxes::x
HGCSD::slopeMin_
double slopeMin_
Definition: HGCSD.h:52
HGCalDDDConstants
Definition: HGCalDDDConstants.h:27
CaloSD::getResponseWt
double getResponseWt(const G4Track *)
Definition: CaloSD.cc:876
HGCSD::initRun
void initRun() override
Definition: HGCSD.cc:226
CaloSD::useMap
bool useMap
Definition: CaloSD.h:168
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
TrackInformation::isPrimary
bool isPrimary() const
Definition: TrackInformation.h:27
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
tfile
Definition: tfile.py:1
CaloG4Hit::getEnergyDeposit
double getEnergyDeposit() const
Definition: CaloG4Hit.h:78
DDAxes::z
edm::ESHandle
Definition: DTSurvey.h:22
submitPVResolutionJobs.count
count
Definition: submitPVResolutionJobs.py:352
CaloSD::clearHits
void clearHits() override
Definition: CaloSD.cc:800
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
HGCSD::t_Parcode_
std::vector< int > t_Parcode_
Definition: HGCSD.h:60
HGCEE
Definition: ForwardSubdetector.h:8
CaloSD::eminHit
double eminHit
Definition: CaloSD.h:141
HGCSD::geom_mode_
HGCalGeometryMode::GeometryMode geom_mode_
Definition: HGCSD.h:47
edm::ParameterSet
Definition: ParameterSet.h:47
CaloSD::hitMap
std::map< CaloHitID, CaloG4Hit * > hitMap
Definition: CaloSD.h:184
CaloSD::theHC
CaloG4HitCollection * theHC
Definition: CaloSD.h:163
CaloSD::totalHits
int totalHits
Definition: CaloSD.h:174
type
type
Definition: SiPixelVCal_PayloadInspector.cc:37
HGCSD::mouseBite_
std::unique_ptr< HGCMouseBite > mouseBite_
Definition: HGCSD.h:49
gainCalibHelper::gainCalibPI::type
type
Definition: SiPixelGainCalibHelper.h:40
CaloSD::slave
std::unique_ptr< CaloSlaveSD > slave
Definition: CaloSD.h:160
funct::tan
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
TrackInformation
Definition: TrackInformation.h:12
edm::Service< TFileService >
createfilelist.int
int
Definition: createfilelist.py:10
CaloSD::CaloSD
CaloSD(const std::string &aSDname, const edm::EventSetup &es, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, float timeSlice=1., bool ignoreTkID=false)
Definition: CaloSD.cc:35
HGCSD::numberingScheme_
std::unique_ptr< HGCNumberingScheme > numberingScheme_
Definition: HGCSD.h:48
CaloSD::setNumberCheckedHits
void setNumberCheckedHits(int val)
Definition: CaloSD.h:119
HGCSD::setDetUnitId
uint32_t setDetUnitId(const G4Step *step) override
Definition: HGCSD.cc:144
edm::EventSetup
Definition: EventSetup.h:58
CaloSD::reusehit
std::vector< std::unique_ptr< CaloG4Hit > > reusehit
Definition: CaloSD.h:186
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
get
#define get
HGCSD::eminHit_
double eminHit_
Definition: HGCSD.h:50
alignCSCRings.r
r
Definition: alignCSCRings.py:93
compare.tfile
tfile
Definition: compare.py:325
CaloSD::m_trackManager
const SimTrackManager * m_trackManager
Definition: CaloSD.h:158
HGCSD::rejectMB_
bool rejectMB_
Definition: HGCSD.h:54
HGCalDDDConstants::minSlope
double minSlope() const
Definition: HGCalDDDConstants.h:96
TrackWithHistory::trackID
unsigned int trackID() const
Definition: TrackWithHistory.h:28
TrackContainer
std::vector< TrackWithHistory * > TrackContainer
Definition: TrackContainer.h:8
HGCSD::initEvent
void initEvent(const BeginOfEvent *) override
Definition: HGCSD.cc:242
SensitiveDetector::cmsTrackInformation
TrackInformation * cmsTrackInformation(const G4Track *aTrack)
Definition: SensitiveDetector.cc:96
HGCSD::endEvent
void endEvent() override
Definition: HGCSD.cc:255
CaloSD::cleanHitCollection
void cleanHitCollection()
Definition: CaloSD.cc:988
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:29
CaloSD::primAncestor
int primAncestor
Definition: CaloSD.h:172
Exception
Definition: hltDiff.cc:245
HGCSD::t_Angle_
std::vector< double > t_Angle_
Definition: HGCSD.h:62
angle
T angle(T x1, T y1, T z1, T x2, T y2, T z2)
Definition: angle.h:11
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
HGCSD::tree_
TTree * tree_
Definition: HGCSD.h:58
HGCSD::t_TrackE_
std::vector< double > t_TrackE_
Definition: HGCSD.h:61
HGCalDDDConstants::levelTop
int levelTop(int ind=0) const
Definition: HGCalDDDConstants.h:88
HGCSD::myFwdSubdet_
ForwardSubdetector myFwdSubdet_
Definition: HGCSD.h:51
HGCHEF
Definition: ForwardSubdetector.h:9
CaloSD::setUseMap
void setUseMap(bool val)
Definition: CaloSD.h:108
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::roottree::getEntry
Int_t getEntry(TBranch *branch, EntryNumber entryNumber)
Definition: RootTree.cc:496
HGCSD::t_dEStep1_
std::vector< double > t_dEStep1_
Definition: HGCSD.h:61
HGCSD::t_EventID_
uint32_t t_EventID_
Definition: HGCSD.h:59
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
IdealGeometryRecord
Definition: IdealGeometryRecord.h:25
SimTrackManager::trackContainer
const TrackContainer * trackContainer() const
Definition: SimTrackManager.h:52
HGCSD::t_Layer_
std::vector< int > t_Layer_
Definition: HGCSD.h:60
HGCHEB
Definition: ForwardSubdetector.h:10