69 std::vector<std::pair<int, float> >(1, std::pair<int, float>(0, 0.));
113 if (fastCalo.
exists(
"ECALResponseScaling")) {
148 std::vector<unsigned int>::const_iterator itcheck =
174 <<
" WARNING: The preshower simulation has been turned on; but no preshower geometry is available " 176 edm::LogWarning(
"CalorimetryManager") <<
" Disabling the preshower simulation " << std::endl;
189 LogInfo(
"FastCalorimetry") <<
" ===> pid = " << pid << std::endl;
196 if (pid == 11 || pid == 22) {
208 else if (pid == 13 || pid == 1000024 || (pid > 1000100 && pid < 1999999 && fabs(charge_) > 0.001)) {
214 else if (pid < 1000000) {
227 std::vector<const RawParticle*> thePart;
231 LogInfo(
"FastCalorimetry") <<
" EMShowerSimulation " << myTrack << std::endl;
242 int onEcal = myTrack.
onEcal();
243 int onHcal = myTrack.
onHcal();
253 XYZPoint layer1entrance, layer2entrance;
279 if (myTrack.
type() == 22) {
284 double eMass = 0.000510998902;
286 double xm = eMass /
myPart.
e();
291 xe = random->
flatShoot() * (1. - 2. * xm) + xm;
292 weight = 1. - 4. / 3. * xe * (1. - xe);
293 }
while (weight < random->flatShoot());
298 thePart.push_back(&
myPart);
305 thePart.push_back(&
myElec);
306 thePart.push_back(&
myPosi);
312 thePart.push_back(&
myPart);
316 if (thePart.empty()) {
317 if (myPreshower ==
nullptr)
325 for (
unsigned ip = 0; ip < thePart.size(); ++ip)
327 maxEnergy = thePart[ip]->
e();
346 if (pivot.subdetId() == 0) {
348 <<
"Pivot for egamma e = " << myTrack.
hcalEntrance().
e() <<
" is not found at depth " <<
depth 349 <<
" and meanShower coordinates = " << meanShower << std::endl;
382 if (myTrack.
onEcal() == 2)
384 if ((onLayer1 || onLayer2) &&
myPart.
e() <= 250.) {
410 theShower.
setHcal(&myHcalHitMaker);
415 for (
const auto& mapIterator : myGrid.
getHits()) {
416 simE += mapIterator.second;
430 if (myPreshower !=
nullptr) {
440 LogInfo(
"FastCalorimetry") <<
" reconstructHCAL " << myTrack << std::endl;
446 hit = myTrack.
onHcal() - 1;
452 double pathEta = trackPosition.eta();
453 double pathPhi = trackPosition.phi();
459 if (pid == 13 || pid == 1000024 || (pid > 1000100 && pid < 1999999 && fabs(charge_) > 0.001)) {
462 LogInfo(
"FastCalorimetry") <<
"CalorimetryManager::reconstructHCAL - MUON !!!" << std::endl;
463 }
else if (pid == 22 || pid == 11) {
466 LogInfo(
"FastCalorimetry") <<
"CalorimetryManager::reconstructHCAL - e/gamma !!!" << std::endl;
472 LogInfo(
"FastCalorimetry") <<
"CalorimetryManager::reconstructHCAL - on-calo " 473 <<
" eta = " << pathEta <<
" phi = " << pathPhi <<
" Egen = " << EGen
474 <<
" Emeas = " << emeas << std::endl;
481 std::map<CaloHitID, float> hitMap;
482 hitMap[current_id] = emeas;
496 LogInfo(
"FastCalorimetry") <<
"CalorimetryManager::HDShowerSimulation - track param." << std::endl
497 <<
" eta = " << moment.eta() << std::endl
498 <<
" phi = " << moment.phi() << std::endl
499 <<
" et = " << moment.Et() << std::endl
503 LogInfo(
"FastCalorimetry") <<
" HDShowerSimulation " << myTrack << std::endl;
511 hit = myTrack.
onEcal() - 1;
513 }
else if (myTrack.
onVFcal()) {
518 LogInfo(
"FastCalorimetry") <<
" The particle is not in the acceptance " << std::endl;
524 int onHCAL = hit + 1;
525 int onECAL = myTrack.
onEcal();
527 double pathEta = trackPosition.eta();
528 double pathPhi = trackPosition.phi();
530 double eint = moment.e();
548 }
else if (myTrack.
onHcal()) {
557 LogInfo(
"FastCalorimetry") <<
"CalorimetryManager::HDShowerSimulation - on-calo 1 " << std::endl
558 <<
" onEcal = " << myTrack.
onEcal() << std::endl
559 <<
" onHcal = " << myTrack.
onHcal() << std::endl
560 <<
" onVFcal = " << myTrack.
onVFcal() << std::endl
561 <<
" position = " << caloentrance << std::endl;
566 }
else if (myTrack.
onHcal()) {
591 HFShower theShower(random, &theHDShowerparam, &myGrid, &myHcalHitMaker, onECAL, eGen);
599 HDShower theShower(random, &theHDShowerparam, &myGrid, &myHcalHitMaker, onECAL, eGen, pmip);
603 HDRShower theShower(random, &theHDShowerparam, &myGrid, &myHcalHitMaker, onECAL, eGen);
610 if (particleType == -2212)
612 else if (particleType == 2212)
616 int showerType = 99 + myTrack.
onEcal();
617 double globalTime = 150.0;
619 Gflash3Vector gfpos(trackPosition.X(), trackPosition.Y(), trackPosition.Z());
628 std::vector<GflashHit>::const_iterator spotIter = gflashHitList.begin();
629 std::vector<GflashHit>::const_iterator spotIterEnd = gflashHitList.end();
633 for (; spotIter != spotIterEnd; spotIter++) {
635 (30 * 100 / eGen) * (spotIter->getTime() - globalTime);
642 Gflash3Vector positionAtCurrentDepth = trajectoryPoint.getPosition();
644 Gflash3Vector lateralDisplacement = positionAtCurrentDepth - spotIter->getPosition() / CLHEP::cm;
645 double rShower = lateralDisplacement.r();
646 double azimuthalAngle = lateralDisplacement.phi();
651 bool statusPad = myGrid.getPads(currentDepth,
true);
654 myGrid.setSpotEnergy(1.2 * spotIter->getEnergy() /
CLHEP::GeV);
657 bool setHDdepth = myHcalHitMaker.
setDepth(currentDepth,
true);
684 LogInfo(
"FastCalorimetry") <<
"CalorimetryManager::HDShowerSimulation - on-calo 2" << std::endl
685 <<
" eta = " << pathEta << std::endl
686 <<
" phi = " << pathPhi << std::endl
687 <<
" Egen = " << eGen << std::endl
688 <<
" Emeas = " << emeas << std::endl
689 <<
" corr = " << correction << std::endl
690 <<
" mip = " << mip << std::endl;
692 if (myTrack.
onEcal() > 0) {
710 std::map<CaloHitID, float> hitMap;
711 hitMap[current_id] = emeas;
714 LogInfo(
"FastCalorimetry") <<
" HCAL simple cell " << cell.
rawId() <<
" added E = " << emeas << std::endl;
721 LogInfo(
"FastCalorimetry") << std::endl <<
" FASTEnergyReconstructor::HDShowerSimulation finished " << std::endl;
739 LogInfo(
"FastCalorimetry") <<
"CalorimetryManager::MuonMipSimulation - track param." << std::endl
740 <<
" eta = " << moment.eta() << std::endl
741 <<
" phi = " << moment.phi() << std::endl
742 <<
" et = " << moment.Et() << std::endl;
748 }
else if (myTrack.
onVFcal()) {
752 LogInfo(
"FastCalorimetry") <<
" The particle is not in the acceptance " << std::endl;
760 int onECAL = myTrack.
onEcal();
772 }
else if (myTrack.
onHcal()) {
783 }
else if (myTrack.
onHcal()) {
795 const std::vector<CaloSegment>& segments = myGrid.getSegments();
796 unsigned nsegments = segments.size();
806 for (
unsigned iseg = 0; iseg < nsegments && ifirstHcal < 0; ++iseg) {
808 float segmentSizeinX0 = segments[iseg].X0length();
817 if (energyLossECAL) {
818 energyLossECAL->
updateState(theMuon, segmentSizeinX0, random);
819 energy = energyLossECAL->
deltaMom().E();
820 moment -= energyLossECAL->
deltaMom();
826 myGrid.getPads(segments[iseg].sX0Entrance() + segmentSizeinX0 * 0.5);
827 myGrid.setSpotEnergy(energy);
828 myGrid.addHit(0., 0.);
850 float mipenergy = 0.0;
857 if (ifirstHcal > 0 && energyLossHCAL) {
858 for (
unsigned iseg = ifirstHcal; iseg < nsegments; ++iseg) {
859 float segmentSizeinX0 = segments[iseg].X0length();
862 if (segmentSizeinX0 > 0.001) {
867 energyLossHCAL->
updateState(theMuon, segmentSizeinX0, random);
868 mipenergy = energyLossHCAL->
deltaMom().E();
869 moment -= energyLossHCAL->
deltaMom();
871 myHcalHitMaker.
addHit(segments[iseg].entrance());
879 if (energyLossHCAL && ilastHcal >= 0) {
883 }
else if (energyLossECAL && ilastEcal >= 0) {
892 std::map<CaloHitID, float>::const_iterator mapitr;
893 std::map<CaloHitID, float>::const_iterator endmapitr;
894 if (myTrack.
onEcal() > 0) {
903 LogInfo(
"FastCalorimetry") << std::endl <<
" FASTEnergyReconstructor::MipShowerSimulation finished " << std::endl;
929 aTerm = 1. + radiusPreshowerCorrections_[1] * radiusPreshowerCorrections_[0];
930 bTerm = radiusPreshowerCorrections_[0];
936 if (pulledPadSurvivalProbability_ < 0. || pulledPadSurvivalProbability_ > 1)
937 pulledPadSurvivalProbability_ = 1.;
938 if (crackPadSurvivalProbability_ < 0. || crackPadSurvivalProbability_ > 1)
939 crackPadSurvivalProbability_ = 0.9;
941 LogInfo(
"FastCalorimetry") <<
" Fast ECAL simulation parameters " << std::endl;
942 LogInfo(
"FastCalorimetry") <<
" =============================== " << std::endl;
943 if (simulatePreshower_)
944 LogInfo(
"FastCalorimetry") <<
" The preshower is present " << std::endl;
946 LogInfo(
"FastCalorimetry") <<
" The preshower is NOT present " << std::endl;
947 LogInfo(
"FastCalorimetry") <<
" Grid Size : " << gridSize_ << std::endl;
948 if (spotFraction_ > 0.)
949 LogInfo(
"FastCalorimetry") <<
" Spot Fraction : " << spotFraction_ << std::endl;
951 LogInfo(
"FastCalorimetry") <<
" Core of the shower " << std::endl;
952 for (
unsigned ir = 0; ir < theCoreIntervals_.size() / 2; ++ir) {
953 LogInfo(
"FastCalorimetry") <<
" r < " << theCoreIntervals_[ir * 2] <<
" R_M : " << theCoreIntervals_[ir * 2 + 1]
956 LogInfo(
"FastCalorimetry") << std::endl;
958 LogInfo(
"FastCalorimetry") <<
" Tail of the shower " << std::endl;
959 for (
unsigned ir = 0; ir < theTailIntervals_.size() / 2; ++ir) {
960 LogInfo(
"FastCalorimetry") <<
" r < " << theTailIntervals_[ir * 2] <<
" R_M : " << theTailIntervals_[ir * 2 + 1]
964 LogInfo(
"FastCalorimetry") <<
"Radius correction factors: EB & EE " << radiusFactorEB_ <<
" : " << radiusFactorEE_
967 LogInfo(
"FastCalorimetry") << std::endl;
969 LogInfo(
"FastCalorimetry") <<
"Improper number of parameters for the preshower ; using 95keV" << std::endl;
975 LogInfo(
"FastCalorimetry") <<
" FrontLeakageProbability : " << pulledPadSurvivalProbability_ << std::endl;
976 LogInfo(
"FastCalorimetry") <<
" GapLossProbability : " << crackPadSurvivalProbability_ << std::endl;
981 rsp = CalorimeterParam.
getParameter<std::vector<double> >(
"RespCorrP");
982 LogInfo(
"FastCalorimetry") <<
" RespCorrP (rsp) size " << rsp.size() << std::endl;
984 if (rsp.size() % 3 != 0) {
985 LogInfo(
"FastCalorimetry") <<
" RespCorrP size is wrong -> no corrections applied !!!" << std::endl;
991 for (
unsigned i = 0;
i < rsp.size();
i += 3) {
992 LogInfo(
"FastCalorimetry") <<
"i = " <<
i / 3 <<
" p = " << rsp[
i] <<
" k_e(p) = " << rsp[
i + 1]
993 <<
" k_e(p) = " << rsp[
i + 2] << std::endl;
996 k_e.push_back(rsp[i + 1]);
997 k_h.push_back(rsp[i + 2]);
1024 useShowerLibrary = m_HS.getUntrackedParameter<
bool>(
"useShowerLibrary",
false);
1025 useCorrectionSL = m_HS.getUntrackedParameter<
bool>(
"useCorrectionSL",
false);
1036 for (
int i = 0;
i < sizeP;
i++) {
1052 double y1 =
k_e[ip - 1];
1053 double y2 =
k_e[ip];
1055 ecorr = (y1 + (y2 -
y1) * (p - x1) / (x2 -
x1));
1059 hcorr = (y1 + (y2 -
y1) * (p - x1) / (x2 -
x1));
1065 LogInfo(
"FastCalorimetry") <<
" p, ecorr, hcorr = " << p <<
" " <<
ecorr <<
" " <<
hcorr << std::endl;
1069 std::map<CaloHitID, float>::const_iterator mapitr;
1070 std::map<CaloHitID, float>::const_iterator endmapitr = hitMap.end();
1073 endmapitr = hitMap.end();
1074 for (mapitr = hitMap.begin(); mapitr != endmapitr; ++mapitr) {
1076 float energy = mapitr->second;
1080 CaloHitID current_id(mapitr->first.unitID(), mapitr->first.timeSlice(), trackID);
1082 EBMapping_.push_back(std::pair<CaloHitID, float>(current_id, energy));
1084 }
else if (onEcal == 2) {
1086 endmapitr = hitMap.end();
1087 for (mapitr = hitMap.begin(); mapitr != endmapitr; ++mapitr) {
1089 float energy = mapitr->second;
1093 CaloHitID current_id(mapitr->first.unitID(), mapitr->first.timeSlice(), trackID);
1095 EEMapping_.push_back(std::pair<CaloHitID, float>(current_id, energy));
1103 std::map<CaloHitID, float>::const_iterator mapitr;
1104 std::map<CaloHitID, float>::const_iterator endmapitr = hitMap.end();
1106 for (mapitr = hitMap.begin(); mapitr != endmapitr; ++mapitr) {
1108 float energy = mapitr->second;
1111 float time = mapitr->first.timeSlice();
1143 CaloHitID current_id(mapitr->first.unitID(),
time, trackID);
1144 HMapping_.push_back(std::pair<CaloHitID, float>(current_id, energy));
1149 std::map<CaloHitID, float>::const_iterator mapitr;
1150 std::map<CaloHitID, float>::const_iterator endmapitr = hitMap.end();
1152 for (mapitr = hitMap.begin(); mapitr != endmapitr; ++mapitr) {
1154 float energy = mapitr->second;
1158 CaloHitID current_id(mapitr->first.unitID(), mapitr->first.timeSlice(), trackID);
1160 ESMapping_.push_back(std::pair<CaloHitID, float>(current_id, energy));
1207 unsigned size = muons.size();
1208 for (
unsigned i = 0;
i <
size; ++
i) {
1209 int id = muons[
i].trackId();
1215 std::vector<FSimTrack>::const_iterator itcheck =
1218 muons[
i].setTkPosition(itcheck->trackerSurfacePosition());
1219 muons[
i].setTkMomentum(itcheck->trackerSurfaceMomentum());
1227 if (
track.momentum().perp2() > 1.0 && fabs(
track.momentum().eta()) < 3.0 &&
track.isGlobal())
1231 if (
track.momentum().perp2() > 1.0 && fabs(
track.momentum().eta()) < 3.0 &&
track.isGlobal())
T getParameter(std::string const &) const
EventNumber_t event() const
T getUntrackedParameter(std::string const &, T const &) const
std::vector< double > rsp
std::vector< double > k_h
bool noEndVertex() const
no end vertex
RawParticle myElec
A few pointers to save time.
float charge() const
charge
void reconstructHCAL(const FSimTrack &myTrack, RandomEngineAndDistribution const *)
std::vector< PCaloHit > PCaloHitContainer
XYZVector Vect() const
the momentum threevector
const ECALProperties * ecalProperties(int onEcal) const
ECAL properties.
double responseHCAL(int _mip, double energy, double eta, int partype, RandomEngineAndDistribution const *)
const RawParticle & vfcalEntrance() const
The particle at VFCAL entrance.
void updateHCAL(const std::map< CaloHitID, float > &hitMap, int trackID=0, float corr=1.0)
GflashPiKShowerProfile * thePiKProfile
double flatShoot(double xmin=0.0, double xmax=1.0) const
double pulledPadSurvivalProbability_
std::vector< double > timeShiftHO_
void updatePreshower(const std::map< CaloHitID, float > &hitMap, int trackID=0, float corr=1.0)
GflashTrajectory * getHelix()
constexpr bool null() const
is this a null id ?
MaterialEffects * theMuonEcalEffects
double crackPadSurvivalProbability_
MaterialEffects * theMuonHcalEffects
void recoHFShowerLibrary(const FSimTrack &myTrack)
const XYZTLorentzVector & momentum() const
Temporary (until move of SimTrack to Mathcore) - No! Actually very useful.
void setCrackPadSurvivalProbability(double val)
double getHCALEnergyResponse(double e, int hit, RandomEngineAndDistribution const *)
GflashHadronShowerProfile * theProfile
const HepPDT::ParticleDataTable * theTable() const
Get the pointer to the particle data table.
const RawParticle & layer1Entrance() const
The particle at Preshower Layer 1.
const std::map< CaloHitID, float > & getHits() override
bool compute()
Compute the shower longitudinal and lateral development.
constexpr uint32_t rawId() const
get the raw id
bool exists(std::string const ¶meterName) const
checks if a parameter exists
void correctHF(double e, int type)
void reconstructTrack(FSimTrack &myTrack, RandomEngineAndDistribution const *)
void setPreshower(PreshowerHitMaker *const myPresh)
set the preshower address
void loadFromPreshower(edm::PCaloHitContainer &c) const
void updateState(ParticlePropagator &myTrack, double radlen, RandomEngineAndDistribution const *)
Compute the material effect (calls the sub class)
void updateECAL(const std::map< CaloHitID, float > &hitMap, int onEcal, int trackID=0, float corr=1.0)
const CaloSubdetectorGeometry * getHcalGeometry() const
void MuonMipSimulation(const FSimTrack &myTrack, RandomEngineAndDistribution const *)
void readParameters(const edm::ParameterSet &fastCalo)
RawParticle makeMuon(bool isParticle, const math::XYZTLorentzVector &p, const math::XYZTLorentzVector &xStart)
const PreshowerLayer1Properties * layer1Properties(int onLayer1) const
Preshower Layer1 properties.
static EEDetId unhashIndex(int hi)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
static double constexpr eMass
Electron mass[GeV].
std::vector< double > timeShiftHF_
std::vector< double > p_knots
void compute()
Compute the shower longitudinal and lateral development.
std::vector< FSimTrack > muonSimTracks
double radLenIncm() const override
Radiation length in cm.
U second(std::pair< T, U > const &p)
void HDShowerSimulation(const FSimTrack &myTrack, RandomEngineAndDistribution const *)
Hadronic Shower Simulation.
const LandauFluctuationGenerator * aLandauGenerator
std::vector< double > samplingHF_
bool compute()
Compute the shower longitudinal and lateral development.
void setRadiusFactor(double r)
bool addHit(double r, double phi, unsigned layer=0) override
add the hit in the HCAL in local coordinates
int depth() const
get the tower depth
const XYZTLorentzVector & momentum() const
the momentum fourvector
void reconstruct(RandomEngineAndDistribution const *)
CalorimeterNumber getCalorimeterNumber(const Gflash3Vector &position)
double e() const
energy of the momentum
GflashAntiProtonShowerProfile * theAntiProtonProfile
math::XYZVector XYZVector
GflashShowino * getGflashShowino()
GflashProtonShowerProfile * theProtonProfile
const PreshowerLayer2Properties * layer2Properties(int onLayer2) const
Preshower Layer2 properties.
double getPathLengthAtShower()
virtual void loadParameters()
const std::map< CaloHitID, float > & getHits() override
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< void, edm::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void setTrackParameters(const XYZNormal &normal, double X0depthoffset, const FSimTrack &theTrack)
std::vector< std::pair< CaloHitID, float > > ESMapping_
void loadFromEcalEndcap(edm::PCaloHitContainer &c) const
const XYZTLorentzVector & deltaMom() const
Returns the actual energy lost.
std::vector< double > radiusPreshowerCorrections_
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
const HCALProperties * hcalProperties(int onHcal) const
HCAL properties.
Abs< T >::type abs(const T &t)
double getMIPfraction(double energy, double eta)
const RawParticle & ecalEntrance() const
The particle at ECAL entrance.
void setSpotEnergy(double e) override
Set the spot energy.
const std::map< CaloHitID, float > & getHitsMap()
std::vector< double > theTailIntervals_
std::vector< double > samplingHBHE_
void loadMuonSimTracks(edm::SimTrackContainer &m) const
unsigned int nTracks() const
Number of tracks.
HCALResponse * myHDResponse_
CaloGeometryHelper * myCalorimeter_
std::vector< double > timeShiftHB_
int ietaAbs() const
get the absolute value of the cell ieta
std::vector< std::pair< CaloHitID, float > > HMapping_
void initialize(RandomEngineAndDistribution const *random)
const double intLength[kNumberCalorimeter]
std::vector< double > theCoreIntervals_
void getGflashTrajectoryPoint(GflashTrajectoryPoint &point, double s) const
edm::EventID id() const
Method to return the EventId.
const XYZTLorentzVector & vertex() const
the vertex fourvector
void hadronicParameterization()
void loadFromHcal(edm::PCaloHitContainer &c) const
GammaFunctionGenerator * aGammaGenerator
XYZVectorD XYZVector
spatial vector with cartesian internal representation
CLHEP::Hep3Vector Gflash3Vector
std::vector< double > mipValues_
static std::vector< std::pair< int, float > > myZero_
std::vector< FSimTrack > savedMuonSimTracks
void setTkPosition(const math::XYZVectorD &pos)
std::vector< std::pair< CaloHitID, float > > EEMapping_
double getPathLengthOnEcal()
void SetRandom(const RandomEngineAndDistribution *)
static EBDetId unhashIndex(int hi)
get a DetId from a compact index for arrays
int type() const
particle type (HEP PDT convension)
void harvestMuonSimTracks(edm::SimTrackContainer &m) const
std::vector< unsigned int > evtsToDebug_
int id() const
the index in FBaseSimEvent and other vectors
bool preshowerPresent() const
void setPulledPadSurvivalProbability(double val)
const RawParticle & layer2Entrance() const
The particle at Preshower Layer 2.
std::vector< double > k_e
std::vector< GflashHit > & getGflashHitList()
void setTkMomentum(const math::XYZTLorentzVectorD &mom)
const RawParticle & hcalEntrance() const
The particle at HCAL entrance.
std::vector< std::pair< CaloHitID, float > > EBMapping_
std::vector< double > samplingHO_
void setPreshowerPresent(bool ps)
FastHFShowerLibrary * theHFShowerLibrary
DetId getClosestCell(const XYZPoint &point, bool ecal, bool central) const
math::XYZVector XYZVector
EnergyLossSimulator * energyLossSimulator() const
Return the Energy Loss engine.
std::unique_ptr< KKCorrectionFactors > ecalCorrection
HSParameters * myHSParameters_
std::vector< SimTrack > SimTrackContainer
void setVertex(const XYZTLorentzVector &vtx)
set the vertex
bool setDepth(double, bool inCm=false)
set the depth in X0 or Lambda0 units depending on showerType
void initialize(int showerType, double energy, double globalTime, double charge, Gflash3Vector &position, Gflash3Vector &momentum)
math::XYZTLorentzVector XYZTLorentzVector
void print() const
print the FBaseSimEvent in an intelligible way
void setHcal(HcalHitMaker *const myHcal)
set the HCAL address
void setGrid(EcalHitMaker *const myGrid)
set the grid address
void EMShowerSimulation(const FSimTrack &myTrack, RandomEngineAndDistribution const *)
const std::map< CaloHitID, float > & getHits() override
std::vector< double > timeShiftHE_
FSimTrack & track(int id) const
Return track with given Id.
double getMaximumOfShower() const
get the depth of the centre of gravity of the shower(s)
void loadFromEcalBarrel(edm::PCaloHitContainer &c) const