19 {
20
21 std::vector<ROOT::Math::PtEtaPhiEVector> truthParticles, truthParticles_ent, truthParticles_pos;
22 std::vector<int> pdg;
23 std::vector<ROOT::Math::XYZVector>
vertex;
24 float phiEntry_tmp = 0;
25 float phiPosition_tmp = 0;
26 float etaEntry_tmp = 0;
27 float etaPosition_tmp = 0;
28 int pdg_tmp = 0;
29 ROOT::Math::XYZVector vertex_tmp(0.,0.,0.);
30
31 ROOT::Math::PtEtaPhiEVector thePart, theInfo;
32 auto MuEntry_Particle_n = (trackRecordCollection!=
nullptr)?trackRecordCollection->
size():0;
33 int j=0;
34 if( truthContainer != nullptr ){
35 for(const auto subEvent : *truthContainer) {
36 for(const auto& particle : *subEvent){
40 if(trackRecordCollection!=nullptr){
41 for(const auto & mit : *trackRecordCollection ) {
42 const CLHEP::Hep3Vector mumomentum = mit.GetMomentum();
43 const CLHEP::Hep3Vector muposition = mit.GetPosition();
44 if(!trackRecordCollection->empty() &&
HepMC::barcode(particle) == mit.barcode()) {
46 phiEntry_tmp = mumomentum.getPhi();
47 etaEntry_tmp = mumomentum.getEta();
48 phiPosition_tmp = muposition.getPhi();
49 etaPosition_tmp = muposition.getEta();
50 }
51 }
52 }
53#ifdef HEPMC3
54 vertex_tmp = subEvent->vertices().front()->position();
55#else
57 for(const auto vit : subEvent->vertex_range())
58 {
59 if(l!=0){break;}
61 const HepMC::GenVertex *vertex1 = vit;
62 const HepMC::FourVector& position = vertex1->position();
63 vertex_tmp.SetXYZ(position.x(),position.y(),position.z());
64 }
65#endif
66 }
67 j++;
68
70 bool addIt = true;
71 for(unsigned int ipart=0; ipart < truthParticles.size(); ipart++){
72 if( std::abs(thePart.Pt()-truthParticles[ipart].Pt()) < 0.001 ||
73 std::abs(thePart.Eta()-truthParticles[ipart].Eta()) < 0.001 ||
75 std::abs(thePart.E()-truthParticles[ipart].E()) < 0.001 ) addIt = false;
76 }
77 if(addIt){
78 truthParticles.push_back(thePart);
79
80 vertex.push_back(vertex_tmp);
81 pdg.push_back(pdg_tmp);
82 truthParticles_ent.push_back(ROOT::Math::PtEtaPhiEVector(
momentum.perp(),etaEntry_tmp ,phiEntry_tmp ,
momentum.e()));
83 truthParticles_pos.push_back(ROOT::Math::PtEtaPhiEVector(
momentum.perp(),etaPosition_tmp,phiPosition_tmp,
momentum.e()));
84 }
85 }
86
87 }
88 }
89 }
90
91 uint64_t event = ctx.eventID().event_number();
92 for(
unsigned int i=0;
i<truthParticles.size();
i++) {
93 evInf_entry particle_info(event, pdg[i],
94 truthParticles[i].
E(), truthParticles[i].
Pt(),
95 truthParticles[i].
Eta(), truthParticles_pos[i].
Eta(), truthParticles_ent[i].
Eta(),
96 truthParticles[i].
Phi(), truthParticles_pos[i].
Phi(), truthParticles_ent[i].
Phi(),
97 truthParticles[i].
Theta(), truthParticles_pos[i].
Theta(), truthParticles_ent[i].
Theta(), truthParticles_ent[i].
Theta()-truthParticles_pos[i].
Theta(),
98 j,MuEntry_Particle_n,vertex[i]);
99 Event_Info[{
event,
i}] = std::move(particle_info);
100 }
101
102 return StatusCode::SUCCESS;
103}
int generations(const T &p)
Method to return how many interactions a particle has undergone during simulation (TODO migrate to be...
l
Printing final latex table to .tex output file.
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[