Skip to content

Commit 6975683

Browse files
authored
Merge pull request cms-sw#42506 from fabiocos/fc-psimhitOffset
Simulation: define PSimHit track Id offset and propagate to MTD hit categories
2 parents 8b77986 + 49cd3e2 commit 6975683

File tree

7 files changed

+29
-7
lines changed

7 files changed

+29
-7
lines changed

SimDataFormats/TrackingHit/interface/PSimHit.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class TrackingSlaveSD; // for friend declaration only
1414

1515
class PSimHit {
1616
public:
17+
static constexpr unsigned int k_tidOffset = 200000000;
18+
1719
PSimHit() : theDetUnitId(0) {}
1820

1921
PSimHit(const Local3DPoint& entry,
@@ -105,6 +107,15 @@ class PSimHit {
105107
*/
106108
unsigned int trackId() const { return theTrackId; }
107109

110+
/** In case te SimTrack ID is incremented by the k_tidOffset for hit category definition, this
111+
* methods returns the original theTrackId value directly.
112+
*/
113+
unsigned int originalTrackId() const { return theTrackId % k_tidOffset; }
114+
115+
unsigned int offsetTrackId() const { return theTrackId / k_tidOffset; }
116+
117+
static unsigned int addTrackIdOffset(unsigned int tId, unsigned int offset) { return offset * k_tidOffset + tId; }
118+
108119
EncodedEventId eventId() const { return theEventId; }
109120

110121
void setEventId(EncodedEventId e) { theEventId = e; }

SimG4CMS/Forward/BuildFile.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<use name="DataFormats/ForwardDetId"/>
99
<use name="DataFormats/Math"/>
1010
<use name="SimDataFormats/SimHitMaker"/>
11+
<use name="SimDataFormats/TrackingHit"/>
1112
<use name="SimDataFormats/CaloHit"/>
1213
<use name="Geometry/MTDCommonData"/>
1314
<use name="boost"/>

SimG4CMS/Forward/interface/MtdSD.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ class MtdSD : public TimingSD {
2828
int getTrackID(const G4Track *) override;
2929

3030
private:
31-
static constexpr unsigned int k_idsecOffset = 100000000;
32-
static constexpr unsigned int k_idloopOffset = 200000000;
33-
static constexpr unsigned int k_idFromCaloOffset = 300000000;
31+
static constexpr unsigned int k_idsecOffset = 1;
32+
static constexpr unsigned int k_idloopOffset = 2;
33+
static constexpr unsigned int k_idFromCaloOffset = 3;
3434

3535
double energyCut;
3636
double energyHistoryCut;

SimG4CMS/Forward/src/MtdSD.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "Geometry/MTDCommonData/interface/BTLNumberingScheme.h"
99
#include "Geometry/MTDCommonData/interface/ETLNumberingScheme.h"
1010
#include "DataFormats/ForwardDetId/interface/MTDDetId.h"
11+
#include "SimDataFormats/TrackingHit/interface/PSimHit.h"
1112

1213
#include "G4Track.hh"
1314
#include "G4Step.hh"
@@ -108,11 +109,11 @@ int MtdSD::getTrackID(const G4Track* aTrack) {
108109
if (rname == "FastTimerRegionSensBTL") {
109110
theID = trkInfo->mcTruthID();
110111
if (trkInfo->isExtSecondary() && !trkInfo->isInTrkFromBackscattering()) {
111-
theID += k_idsecOffset;
112+
theID = PSimHit::addTrackIdOffset(theID, k_idsecOffset);
112113
} else if (trkInfo->isInTrkFromBackscattering()) {
113-
theID += k_idFromCaloOffset;
114+
theID = PSimHit::addTrackIdOffset(theID, k_idFromCaloOffset);
114115
} else if (trkInfo->isBTLlooper()) {
115-
theID += k_idloopOffset;
116+
theID = PSimHit::addTrackIdOffset(theID, k_idloopOffset);
116117
}
117118
#ifdef EDM_ML_DEBUG
118119
edm::LogVerbatim("MtdSim") << "MtdSD: Track ID: " << aTrack->GetTrackID()

SimG4Core/Application/test/SimHitCaloHitDumper.cc

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,10 @@ void SimHitCaloHitDumper::analyze(const edm::Event& iEvent, const edm::EventSetu
371371
edm::LogPrint("SimHitCaloHitDumper") << (*icoll).second << " hits in the event = " << (*icoll).first;
372372
edm::LogPrint("SimHitCaloHitDumper") << "\n";
373373
for (int ihit = 0; ihit < (*icoll).first; ++ihit) {
374-
edm::LogPrint("SimHitCaloHitDumper") << theMTDHits[nhit] << " Track Id = " << theMTDHits[nhit].trackId();
374+
edm::LogPrint("SimHitCaloHitDumper")
375+
<< theMTDHits[nhit] << " Energy = " << theMTDHits[nhit].energyLoss()
376+
<< " tid orig/offset= " << theMTDHits[nhit].originalTrackId() << " " << theMTDHits[nhit].offsetTrackId()
377+
<< " Track Id = " << theMTDHits[nhit].trackId();
375378
nhit++;
376379
}
377380
}

SimG4Core/Notification/BuildFile.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<lib name="1"/>
33
</export>
44
<use name="SimDataFormats/Forward"/>
5+
<use name="SimDataFormats/TrackingHit"/>
56
<use name="SimDataFormats/Track"/>
67
<use name="SimDataFormats/Vertex"/>
78
<use name="DataFormats/Math"/>

SimG4Core/Notification/src/SimTrackManager.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "SimG4Core/Notification/interface/TmpSimVertex.h"
2020
#include "SimG4Core/Notification/interface/TmpSimEvent.h"
2121
#include "SimG4Core/Notification/interface/TrackInformation.h"
22+
#include "SimDataFormats/TrackingHit/interface/PSimHit.h"
2223

2324
#include "FWCore/MessageLogger/interface/MessageLogger.h"
2425
#include "FWCore/Utilities/interface/Exception.h"
@@ -162,6 +163,10 @@ void SimTrackManager::reallyStoreTracks() {
162163
}
163164
}
164165

166+
if (id >= static_cast<int>(PSimHit::k_tidOffset)) {
167+
throw cms::Exception("SimTrackManager::reallyStoreTracks")
168+
<< " SimTrack ID " << id << " exceeds maximum allowed by PSimHit identifier" << PSimHit::k_tidOffset;
169+
}
165170
TmpSimTrack* g4simtrack =
166171
new TmpSimTrack(id, trkH->particleID(), trkH->momentum(), trkH->totalEnergy(), ivertex, ig, pm, spos, smom);
167172
g4simtrack->copyCrossedBoundaryVars(trkH);

0 commit comments

Comments
 (0)