CMS 3D CMS Logo

FastHFShowerLibrary.cc
Go to the documentation of this file.
1 // File: FastHFShowerLibrary.cc
3 // Description: Shower library for Very forward hadron calorimeter
5 
21 
22 #include "Randomize.hh"
23 #include "CLHEP/Units/GlobalSystemOfUnits.h"
24 #include "CLHEP/Units/GlobalPhysicalConstants.h"
25 
26 // Geant4 headers
27 #include "G4ParticleDefinition.hh"
28 #include "G4DynamicParticle.hh"
29 #include "G4DecayPhysics.hh"
30 #include "G4ParticleTable.hh"
31 #include "G4ParticleTypes.hh"
32 
33 // STL headers
34 #include <memory>
35 
36 #include <iostream>
37 #include <mutex>
38 #include <vector>
39 
40 //#define DebugLog
41 
42 static std::once_flag initializeOnce;
43 
45  edm::ParameterSet m_HS = p.getParameter<edm::ParameterSet>("HFShowerLibrary");
46  applyFidCut = m_HS.getParameter<bool>("ApplyFiducialCut");
47 }
48 
50  edm::LogInfo("FastCalorimetry") << "initHFShowerLibrary::initialization";
51 
53  iSetup.get<HcalSimNumberingRecord>().get(hdc);
54  hcalConstants = hdc.product();
55 
57  iSetup.get<HcalSimNumberingRecord>().get(hdsc);
58  const HcalSimulationConstants* hsps = hdsc.product();
59 
60  std::string name = "HcalHits";
61  numberingFromDDD = std::make_unique<HcalNumberingFromDDD>(hcalConstants);
62  hfshower = std::make_unique<HFShowerLibrary>(name, hcalConstants, hsps->hcalsimpar(), fast);
63 
64  //only one thread can be allowed to setup the G4 physics table.
65  std::call_once(initializeOnce, []() {
66  // Geant4 particles
67  G4DecayPhysics decays;
68  decays.ConstructParticle();
69  G4ParticleTable* partTable = G4ParticleTable::GetParticleTable();
70  partTable->SetReadiness();
71  });
72  //G4ParticleTable* partTable = G4ParticleTable::GetParticleTable();
73  //hfshower->initRun(partTable, hcalConstants); // init particle code
74 }
75 
77  // define Geant4 engine per thread
78  G4Random::setTheEngine(&(rnd->theEngine()));
79  LogDebug("FastHFShowerLibrary::recoHFShowerLibrary")
80  << "Begin of event " << G4UniformRand() << " " << rnd->theEngine().name() << " " << rnd->theEngine();
81 }
82 
84 #ifdef DebugLog
85  edm::LogInfo("FastCalorimetry") << "FastHFShowerLibrary: recoHFShowerLibrary ";
86 #endif
87 
88  if (!myTrack.onVFcal()) {
89 #ifdef DebugLog
90  edm::LogInfo("FastCalorimetry") << "FastHFShowerLibrary: we should not be here ";
91 #endif
92  }
93 
94  hitMap.clear();
95  double eGen = 1000. * myTrack.vfcalEntrance().e(); // energy in [MeV]
96  double delZv = (myTrack.vfcalEntrance().vertex().Z() > 0.0) ? 50.0 : -50.0;
97  G4ThreeVector vertex(10. * myTrack.vfcalEntrance().vertex().X(),
98  10. * myTrack.vfcalEntrance().vertex().Y(),
99  10. * myTrack.vfcalEntrance().vertex().Z() + delZv); // in [mm]
100 
101  G4ThreeVector direction(
102  myTrack.vfcalEntrance().Vect().X(), myTrack.vfcalEntrance().Vect().Y(), myTrack.vfcalEntrance().Vect().Z());
103 
104  bool ok;
105  double weight = 1.0; // rad. damage
106  int parCode = myTrack.type();
107  double tSlice = 0.1 * vertex.mag() / 29.98;
108 
109  std::vector<HFShowerLibrary::Hit> hits =
110  hfshower->fillHits(vertex, direction, parCode, eGen, ok, weight, tSlice, false);
111 
112  for (unsigned int i = 0; i < hits.size(); ++i) {
113  G4ThreeVector pos = hits[i].position;
114  int depth = hits[i].depth;
115  double time = hits[i].time;
116  if (!applyFidCut || (HFFibreFiducial::PMTNumber(pos) > 0)) {
117  // if (!applyFidCut || (applyFidCut && HFFibreFiducial::PMTNumber(pos)>0)) {
118  int det = 5;
119  int lay = 1;
120  uint32_t id = 0;
122  numberingFromDDD->unitID(det, math::XYZVectorD(pos.x(), pos.y(), pos.z()), depth, lay);
123  modifyDepth(tmp);
125 
126  CaloHitID current_id(id, time, myTrack.id());
127  std::map<CaloHitID, float>::iterator cellitr;
128  cellitr = hitMap.find(current_id);
129  if (cellitr == hitMap.end()) {
130  hitMap.insert(std::pair<CaloHitID, float>(current_id, 1.0));
131  } else {
132  cellitr->second += 1.0;
133  }
134  } // end of isItinFidVolume check
135  } // end loop over hits
136 }
137 
139  if (id.subdet == HcalForward) {
140  int ieta = (id.zside == 0) ? -id.etaR : id.etaR;
141  if (hcalConstants->maxHFDepth(ieta, id.phis) > 2) {
142  if (id.depth <= 2) {
143  if (G4UniformRand() > 0.5)
144  id.depth += 2;
145  }
146  }
147  }
148 }
FastHFShowerLibrary::hcalConstants
const HcalDDDSimConstants * hcalConstants
Definition: FastHFShowerLibrary.h:56
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
FastHFShowerLibrary.h
FastHFShowerLibrary::fast
const edm::ParameterSet fast
Definition: FastHFShowerLibrary.h:53
HcalNumberingScheme::getUnitID
virtual uint32_t getUnitID(const HcalNumberingFromDDD::HcalID &id)
Definition: HcalNumberingScheme.cc:19
bJpsiMuMuTrigSettings_cff.decays
decays
Definition: bJpsiMuMuTrigSettings_cff.py:15
mps_fire.i
i
Definition: mps_fire.py:428
ESTransientHandle.h
HcalNumberingFromDDD::HcalID
Definition: HcalNumberingFromDDD.h:21
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
ESHandle.h
HcalSimNumberingRecord.h
RawParticle::vertex
const XYZTLorentzVector & vertex() const
the vertex fourvector
Definition: RawParticle.h:320
FastHFShowerLibrary::recoHFShowerLibrary
void recoHFShowerLibrary(const FSimTrack &myTrack)
Definition: FastHFShowerLibrary.cc:83
HFFibreFiducial.h
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
pos
Definition: PixelAliasList.h:18
FSimTrack.h
protons_cff.time
time
Definition: protons_cff.py:39
FastHFShowerLibrary::numberingScheme
HcalNumberingScheme numberingScheme
Definition: FastHFShowerLibrary.h:57
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
createJobs.tmp
tmp
align.sh
Definition: createJobs.py:716
convertSQLiteXML.ok
bool ok
Definition: convertSQLiteXML.py:98
RandomEngineAndDistribution.h
HFFibreFiducial::PMTNumber
int PMTNumber(const G4ThreeVector &pe_effect)
Definition: HFFibreFiducial.cc:9
FastHFShowerLibrary::name
std::string name
Definition: FastHFShowerLibrary.h:62
HcalSimulationConstants::hcalsimpar
const HcalSimulationParameters * hcalsimpar() const
Definition: HcalSimulationConstants.h:20
FSimEvent.h
FastHFShowerLibrary::FastHFShowerLibrary
FastHFShowerLibrary(edm::ParameterSet const &p)
Definition: FastHFShowerLibrary.cc:44
HcalParametersRcd.h
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
FSimTrack::vfcalEntrance
const RawParticle & vfcalEntrance() const
The particle at VFCAL entrance.
Definition: FSimTrack.h:149
HcalSimulationConstants
Definition: HcalSimulationConstants.h:15
edm::ESHandle
Definition: DTSurvey.h:22
FSimTrack::onVFcal
int onVFcal() const
Definition: FSimTrack.h:121
HcalDDDSimConstants::maxHFDepth
int maxHFDepth(const int &ieta, const int &iphi) const
Definition: HcalDDDSimConstants.cc:655
LEDCalibrationChannels.depth
depth
Definition: LEDCalibrationChannels.py:65
RawParticle::Vect
XYZVector Vect() const
the momentum threevector
Definition: RawParticle.h:323
FastHFShowerLibrary::hitMap
std::map< CaloHitID, float > hitMap
Definition: FastHFShowerLibrary.h:59
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
math::XYZVectorD
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
Definition: Vector3D.h:8
FSimTrack::id
int id() const
the index in FBaseSimEvent and other vectors
Definition: FSimTrack.h:96
LEDCalibrationChannels.ieta
ieta
Definition: LEDCalibrationChannels.py:63
bphysicsOniaDQM_cfi.vertex
vertex
Definition: bphysicsOniaDQM_cfi.py:7
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
edm::ParameterSet
Definition: ParameterSet.h:47
HcalDetId.h
IdealGeometryRecord.h
CoreSimTrack::type
int type() const
particle type (HEP PDT convension)
Definition: CoreSimTrack.h:22
edm::EventSetup
Definition: EventSetup.h:58
HcalSubdetector.h
get
#define get
RandomEngineAndDistribution::theEngine
CLHEP::HepRandomEngine & theEngine() const
Definition: RandomEngineAndDistribution.h:25
HcalForward
Definition: HcalAssistant.h:36
FastHFShowerLibrary::modifyDepth
void modifyDepth(HcalNumberingFromDDD::HcalID &id)
Definition: FastHFShowerLibrary.cc:138
RawParticle::e
double e() const
energy of the momentum
Definition: RawParticle.h:305
initializeOnce
static std::once_flag initializeOnce
Definition: FastHFShowerLibrary.cc:42
CaloHitID
Definition: CaloHitID.h:11
HcalSimulationConstants.h
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Exception.h
FastHFShowerLibrary::numberingFromDDD
std::unique_ptr< HcalNumberingFromDDD > numberingFromDDD
Definition: FastHFShowerLibrary.h:55
FastHFShowerLibrary::hfshower
std::unique_ptr< HFShowerLibrary > hfshower
Definition: FastHFShowerLibrary.h:54
FSimTrack
Definition: FSimTrack.h:30
FastHFShowerLibrary::SetRandom
void SetRandom(const RandomEngineAndDistribution *)
Definition: FastHFShowerLibrary.cc:76
HcalSimNumberingRecord
Definition: HcalSimNumberingRecord.h:25
FastHFShowerLibrary::applyFidCut
bool applyFidCut
Definition: FastHFShowerLibrary.h:61
weight
Definition: weight.py:1
FastHFShowerLibrary::initHFShowerLibrary
const void initHFShowerLibrary(const edm::EventSetup &)
Definition: FastHFShowerLibrary.cc:49
HcalDDDSimConstants.h
RandomEngineAndDistribution
Definition: RandomEngineAndDistribution.h:18