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;
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 vertex_tmp = subEvent->vertices().front()->position();
54 }
56
58 bool addIt = true;
59 for(unsigned int ipart=0; ipart < truthParticles.size(); ipart++){
60 if( std::abs(thePart.Pt()-truthParticles[ipart].Pt()) < 0.001 ||
61 std::abs(thePart.Eta()-truthParticles[ipart].Eta()) < 0.001 ||
63 std::abs(thePart.E()-truthParticles[ipart].E()) < 0.001 ) addIt = false;
64 }
65 if(addIt){
66 truthParticles.push_back(thePart);
67
68 vertex.push_back(vertex_tmp);
69 pdg.push_back(pdg_tmp);
70 truthParticles_ent.push_back(ROOT::Math::PtEtaPhiEVector(
momentum.perp(),etaEntry_tmp ,phiEntry_tmp ,
momentum.e()));
71 truthParticles_pos.push_back(ROOT::Math::PtEtaPhiEVector(
momentum.perp(),etaPosition_tmp,phiPosition_tmp,
momentum.e()));
72 }
73 }
74
75 }
76 }
77 }
78
79 uint64_t event = ctx.eventID().event_number();
80 for(
unsigned int i=0;
i<truthParticles.size();
i++) {
81 evInf_entry particle_info(event, pdg[i],
82 truthParticles[i].
E(), truthParticles[i].
Pt(),
83 truthParticles[i].
Eta(), truthParticles_pos[i].
Eta(), truthParticles_ent[i].
Eta(),
84 truthParticles[i].
Phi(), truthParticles_pos[i].
Phi(), truthParticles_ent[i].
Phi(),
85 truthParticles[i].
Theta(), truthParticles_pos[i].
Theta(), truthParticles_ent[i].
Theta(), truthParticles_ent[i].
Theta()-truthParticles_pos[i].
Theta(),
86 j,MuEntry_Particle_n,vertex[i]);
87 Event_Info[{
event,
i}] = std::move(particle_info);
88 }
89
90 return StatusCode::SUCCESS;
91}
int generations(const T &p)
Method to return how many interactions a particle has undergone during simulation (TODO migrate to be...
float j(const xAOD::IParticle &, const xAOD::TrackMeasurementValidation &hit, const Eigen::Matrix3d &jab_inv)
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[