/
githubmirror
/
cmssw
Обзор
Документация
Войти
/
githubmirror
/
cmssw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
SimG4Core/Notification/src/MCTruthUtil.cc
102 строки
4 KB
Vladimir
preparation of G4 user actions for adept GPU project
23 апр 2026, 16:01
23 апр 2026, 16:01
b194afa
Код
Авторство
О чём код?
//#define EDM_ML_DEBUG #include "SimG4Core/Notification/interface/MCTruthUtil.h" #include "SimG4Core/Notification/interface/TrackInformation.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "G4Track.hh" void MCTruthUtil::primary(G4Track* aTrack) { TrackInformation* trkInfo = new TrackInformation(); trkInfo->setPrimary(true); trkInfo->setStoreTrack(); trkInfo->setGenParticlePID(aTrack->GetDefinition()->GetPDGEncoding()); trkInfo->setGenParticleP(aTrack->GetMomentum().mag()); trkInfo->setMCTruthID(aTrack->GetTrackID()); trkInfo->setIdLastStoredAncestor(aTrack->GetTrackID()); aTrack->SetUserInformation(trkInfo); } void MCTruthUtil::secondary(G4Track* aTrack, const G4Track* mother, int flag) { const TrackInformation* motherInfo = nullptr; if (nullptr != mother) { motherInfo = dynamic_cast<const TrackInformation*>(mother->GetUserInformation()); } auto trkInfo = new TrackInformation(); // Take care of cascade decays if (flag == 1) { trkInfo->setPrimary(true); trkInfo->setStoreTrack(); trkInfo->setGenParticlePID(aTrack->GetDefinition()->GetPDGEncoding()); trkInfo->setGenParticleP(aTrack->GetMomentum().mag()); trkInfo->setMCTruthID(aTrack->GetTrackID()); } else if (nullptr != motherInfo) { // secondary trkInfo->setGenParticlePID(motherInfo->genParticlePID()); trkInfo->setGenParticleP(motherInfo->genParticleP()); trkInfo->setMCTruthID(motherInfo->mcTruthID()); } // Store if decay or conversion if (flag > 0) { trkInfo->setStoreTrack(); trkInfo->setIDonCaloSurface(aTrack->GetTrackID(), motherInfo->getIDCaloVolume(), motherInfo->getIDLastVolume(), aTrack->GetDefinition()->GetPDGEncoding(), aTrack->GetMomentum().mag()); trkInfo->setIdLastStoredAncestor(aTrack->GetTrackID()); } else if (nullptr != motherInfo) { // transfer calo ID from mother (to be checked in TrackingAction) trkInfo->setIDonCaloSurface(motherInfo->getIDonCaloSurface(), motherInfo->getIDCaloVolume(), motherInfo->getIDLastVolume(), motherInfo->caloSurfaceParticlePID(), motherInfo->caloSurfaceParticleP()); trkInfo->setIdLastStoredAncestor(motherInfo->idLastStoredAncestor()); } // for MTD if (!trkInfo->isPrimary() && !isInBTL(aTrack)) { trkInfo->setExtSecondary(); } if (nullptr != motherInfo) { // for Run1 and Run2 if (motherInfo->hasCastorHit()) { trkInfo->setCastorHitPID(motherInfo->getCastorHitPID()); } if (motherInfo->isExtSecondary()) { trkInfo->setExtSecondary(); } // for MTD if (motherInfo->isBTLlooper()) { trkInfo->setBTLlooper(); } if (motherInfo->isInTrkFromBackscattering()) { trkInfo->setInTrkFromBackscattering(); } } aTrack->SetUserInformation(trkInfo); } void MCTruthUtil::updateSecondary(G4Track* aTrack) { auto trkInfo = dynamic_cast<TrackInformation*>(aTrack->GetUserInformation()); if (nullptr == trkInfo) { delete aTrack->GetUserInformation(); trkInfo = new TrackInformation(); aTrack->SetUserInformation(trkInfo); } trkInfo->setMCTruthID(aTrack->GetTrackID()); } bool MCTruthUtil::isInBTL(const G4Track* aTrack) { bool out = false; G4String tName(aTrack->GetVolume()->GetLogicalVolume()->GetRegion()->GetName()); if (tName == "FastTimerRegionBTL" || tName == "FastTimerRegionSensBTL") { out = true; } return out; }