CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
TreatSecondary Class Reference

#include <TreatSecondary.h>

Public Member Functions

void initTrack (const G4Track *trk)
 
std::vector< math::XYZTLorentzVectortracks (const G4Step *step, std::string &procName, int &procID, bool &intr, double &deltaE, std::vector< int > &charges)
 
 TreatSecondary (const edm::ParameterSet &p)
 
virtual ~TreatSecondary ()
 

Private Member Functions

const TreatSecondaryoperator= (const TreatSecondary &)=delete
 
 TreatSecondary (const TreatSecondary &)=delete
 

Private Attributes

double eTrack
 
int killAfter
 
double minDeltaE
 
int minSec
 
int nHad
 
int nsecL
 
int step
 
G4ProcessTypeEnumeratortypeEnumerator
 
int verbosity
 

Detailed Description

Definition at line 16 of file TreatSecondary.h.

Constructor & Destructor Documentation

◆ TreatSecondary() [1/2]

TreatSecondary::TreatSecondary ( const edm::ParameterSet p)

Definition at line 17 of file TreatSecondary.cc.

17  : typeEnumerator(nullptr) {
18  verbosity = p.getUntrackedParameter<int>("Verbosity", 0);
19  killAfter = p.getUntrackedParameter<int>("KillAfter", -1);
20  minDeltaE = p.getUntrackedParameter<double>("MinimumDeltaE", 10.0) * MeV;
21 
22  edm::LogInfo("CheckSecondary") << "Instantiate CheckSecondary with Flag"
23  << " for Killing track after " << killAfter
24  << " hadronic interactions\nDefine inelastic"
25  << " if > 1 seondary or change in KE > " << minDeltaE << " MeV\n";
26 
28 }

References killAfter, MeV, minDeltaE, AlCaHLTBitMon_ParallelJobs::p, typeEnumerator, and verbosity.

◆ ~TreatSecondary()

TreatSecondary::~TreatSecondary ( )
virtual

Definition at line 30 of file TreatSecondary.cc.

30  {
31  if (typeEnumerator)
32  delete typeEnumerator;
33 }

References typeEnumerator.

◆ TreatSecondary() [2/2]

TreatSecondary::TreatSecondary ( const TreatSecondary )
privatedelete

Member Function Documentation

◆ initTrack()

void TreatSecondary::initTrack ( const G4Track *  trk)

Definition at line 35 of file TreatSecondary.cc.

35  {
36  step = 0;
37  nsecL = 0;
38  nHad = 0;
39  eTrack = thTk->GetKineticEnergy() / MeV;
40  LogDebug("CheckSecondary") << "TreatSecondary::initTrack:Track: " << thTk->GetTrackID()
41  << " Type: " << thTk->GetDefinition()->GetParticleName() << " KE "
42  << thTk->GetKineticEnergy() / GeV << " GeV p " << thTk->GetMomentum().mag() / GeV
43  << " GeV daughter of particle " << thTk->GetParentID();
44 }

References eTrack, GeV, LogDebug, MeV, nHad, and nsecL.

Referenced by StoreSecondary::update(), and CheckSecondary::update().

◆ operator=()

const TreatSecondary& TreatSecondary::operator= ( const TreatSecondary )
privatedelete

◆ tracks()

std::vector< math::XYZTLorentzVector > TreatSecondary::tracks ( const G4Step *  step,
std::string &  procName,
int &  procID,
bool &  intr,
double &  deltaE,
std::vector< int > &  charges 
)

Definition at line 46 of file TreatSecondary.cc.

47  {
48  step++;
49  procid = -1;
50  name = "Unknown";
51  hadrInt = false;
52  deltaE = 0;
53  std::vector<math::XYZTLorentzVector> secondaries;
54  charges.clear();
55 
56  if (aStep != nullptr) {
57  const G4TrackVector *tkV = aStep->GetSecondary();
58  G4Track *thTk = aStep->GetTrack();
59  const G4StepPoint *preStepPoint = aStep->GetPreStepPoint();
60  const G4StepPoint *postStepPoint = aStep->GetPostStepPoint();
61  double eTrackNew = thTk->GetKineticEnergy() / MeV;
62  deltaE = eTrack - eTrackNew;
63  eTrack = eTrackNew;
64  if (tkV != nullptr && postStepPoint != nullptr) {
65  int nsc = (*tkV).size();
66  const G4VProcess *proc = postStepPoint->GetProcessDefinedStep();
67  if (proc != nullptr) {
68  G4ProcessType type = proc->GetProcessType();
70  name = proc->GetProcessName();
71  int sec = nsc - nsecL;
72  LogDebug("CheckSecondary") << sec << " secondaries in step " << thTk->GetCurrentStepNumber() << " of track "
73  << thTk->GetTrackID() << " from " << name << " of type " << type << " ID " << procid
74  << " (" << typeEnumerator->processG4Name(procid) << ")";
75 
76  // hadronic interaction
77  if (procid >= 121 && procid <= 151) {
78  LogDebug("CheckSecondary") << "Hadronic Interaction " << nHad << " of Type " << procid << " with " << sec
79  << " secondaries from process " << proc->GetProcessName() << " Delta E " << deltaE
80  << " Flag " << hadrInt;
81  math::XYZTLorentzVector secondary;
82  for (int i = nsecL; i < nsc; ++i) {
83  G4Track *tk = (*tkV)[i];
84  G4ThreeVector pp = tk->GetMomentum();
85  double ee = tk->GetTotalEnergy();
86  secondary = math::XYZTLorentzVector(pp.x(), pp.y(), pp.z(), ee);
87  secondaries.push_back(secondary);
88  int charge = (int)(tk->GetDefinition()->GetPDGCharge());
89  charges.push_back(charge);
90  }
91  if (verbosity > 0) {
92  for (int i = nsecL; i < nsc; i++) {
93  G4Track *tk = (*tkV)[i];
94  LogDebug("CheckSecondary") << "Secondary: " << sec << " ID " << tk->GetTrackID() << " Status "
95  << tk->GetTrackStatus() << " Particle "
96  << tk->GetDefinition()->GetParticleName() << " Position " << tk->GetPosition()
97  << " KE " << tk->GetKineticEnergy() << " Time " << tk->GetGlobalTime();
98  }
99  }
100  }
101  nsecL = nsc;
102  }
103  }
104  if (verbosity > 1) {
105  LogDebug("CheckSecondary") << "Track: " << thTk->GetTrackID() << " Status " << thTk->GetTrackStatus()
106  << " Particle " << thTk->GetDefinition()->GetParticleName() << " at "
107  << preStepPoint->GetPosition() << " Step: " << step << " KE "
108  << thTk->GetKineticEnergy() / GeV << " GeV; p " << thTk->GetMomentum().mag() / GeV
109  << " GeV/c; Step Length " << aStep->GetStepLength() << " Energy Deposit "
110  << aStep->GetTotalEnergyDeposit() / MeV << " MeV; Interaction " << hadrInt;
111  }
112  }
113  return secondaries;
114 }

References ALCARECOTkAlJpsiMuMu_cff::charge, CosmicGenFilterHelix_cfi::charges, EgHLTOffHistBins_cfi::deltaE, eTrack, GeV, mps_fire::i, createfilelist::int, LogDebug, MeV, Skims_PA_cff::name, nHad, nsecL, createTree::pp, ValidateTausOnZEEFastSim_cff::proc, G4ProcessTypeEnumerator::processG4Name(), G4ProcessTypeEnumerator::processIdLong(), fileinputsource_cfi::sec, typeEnumerator, and verbosity.

Referenced by StoreSecondary::update(), and CheckSecondary::update().

Member Data Documentation

◆ eTrack

double TreatSecondary::eTrack
private

Definition at line 31 of file TreatSecondary.h.

Referenced by initTrack(), and tracks().

◆ killAfter

int TreatSecondary::killAfter
private

Definition at line 30 of file TreatSecondary.h.

Referenced by TreatSecondary().

◆ minDeltaE

double TreatSecondary::minDeltaE
private

Definition at line 31 of file TreatSecondary.h.

Referenced by TreatSecondary().

◆ minSec

int TreatSecondary::minSec
private

Definition at line 30 of file TreatSecondary.h.

◆ nHad

int TreatSecondary::nHad
private

Definition at line 33 of file TreatSecondary.h.

Referenced by initTrack(), and tracks().

◆ nsecL

int TreatSecondary::nsecL
private

Definition at line 33 of file TreatSecondary.h.

Referenced by initTrack(), and tracks().

◆ step

int TreatSecondary::step
private

Definition at line 33 of file TreatSecondary.h.

◆ typeEnumerator

G4ProcessTypeEnumerator* TreatSecondary::typeEnumerator
private

Definition at line 32 of file TreatSecondary.h.

Referenced by tracks(), TreatSecondary(), and ~TreatSecondary().

◆ verbosity

int TreatSecondary::verbosity
private

Definition at line 30 of file TreatSecondary.h.

Referenced by tracks(), and TreatSecondary().

CosmicGenFilterHelix_cfi.charges
charges
only generated particles of these IDs are considered
Definition: CosmicGenFilterHelix_cfi.py:6
mps_fire.i
i
Definition: mps_fire.py:428
TreatSecondary::eTrack
double eTrack
Definition: TreatSecondary.h:31
step
step
Definition: StallMonitor.cc:94
MeV
const double MeV
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
G4ProcessTypeEnumerator
Definition: G4ProcessTypeEnumerator.h:6
TreatSecondary::nHad
int nHad
Definition: TreatSecondary.h:33
TreatSecondary::minDeltaE
double minDeltaE
Definition: TreatSecondary.h:31
ALCARECOTkAlJpsiMuMu_cff.charge
charge
Definition: ALCARECOTkAlJpsiMuMu_cff.py:47
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:233
ValidateTausOnZEEFastSim_cff.proc
proc
Definition: ValidateTausOnZEEFastSim_cff.py:6
AlCaHLTBitMon_ParallelJobs.p
def p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
type
type
Definition: SiPixelVCal_PayloadInspector.cc:39
GeV
const double GeV
Definition: MathUtil.h:16
EgHLTOffHistBins_cfi.deltaE
deltaE
Definition: EgHLTOffHistBins_cfi.py:28
createfilelist.int
int
Definition: createfilelist.py:10
G4ProcessTypeEnumerator::processIdLong
int processIdLong(const G4VProcess *p) const
Definition: G4ProcessTypeEnumerator.h:12
TreatSecondary::killAfter
int killAfter
Definition: TreatSecondary.h:30
TreatSecondary::typeEnumerator
G4ProcessTypeEnumerator * typeEnumerator
Definition: TreatSecondary.h:32
fileinputsource_cfi.sec
sec
Definition: fileinputsource_cfi.py:94
math::XYZTLorentzVector
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
TreatSecondary::verbosity
int verbosity
Definition: TreatSecondary.h:30
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
createTree.pp
pp
Definition: createTree.py:17
G4ProcessTypeEnumerator::processG4Name
std::string processG4Name(int) const
Definition: G4ProcessTypeEnumerator.cc:55
TreatSecondary::nsecL
int nsecL
Definition: TreatSecondary.h:33