Belle II Software  release-05-01-25
CDCPathTruthVarSet.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2019 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Simon Kurz, Nils Braun *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/ckf/cdc/filters/paths/CDCPathTruthVarSet.h>
11 
12 #include <tracking/ckf/cdc/entities/CDCCKFState.h>
13 
14 #include <ecl/dataobjects/ECLShower.h>
15 #include <mdst/dataobjects/MCParticle.h>
16 
17 #include <tracking/dataobjects/RecoTrack.h>
18 
19 using namespace std;
20 using namespace Belle2;
21 
22 bool CDCPathTruthVarSet::extract(const BaseCDCPathFilter::Object* path)
23 {
24  // check if hit belongs to same seed
25  const auto& seed = path->front();
26  auto* seedRecoTrack = seed.getSeed();
27  auto* seedMCTrack = seedRecoTrack->getRelated<RecoTrack>("MCRecoTracks");
28 
29  MCParticle* seedMCParticle;
30  if (seedMCTrack) {
31  seedMCParticle = seedMCTrack->getRelated<MCParticle>();
32  }
33  // maybe used track from Ecl seeding?
34  else {
35  seedRecoTrack = seedRecoTrack->getRelated<RecoTrack>("EclSeedRecoTracks");
36  seedMCTrack = seedRecoTrack->getRelated<RecoTrack>("MCRecoTracks");
37  const auto* seedEclShower = seedRecoTrack->getRelated<ECLShower>("ECLShowers");
38  seedMCParticle = seedEclShower->getRelated<MCParticle>();
39  }
40 
41  int daughters = 0;
42  std::vector<MCParticle*> daughterMCParticles;
43  if (seedMCParticle->getNDaughters() > 0) {
44  daughterMCParticles = seedMCParticle->getDaughters();
45 
46  while (daughterMCParticles.size() == 1) {
47  daughterMCParticles = daughterMCParticles.at(0)->getDaughters();
48  }
49  if (daughterMCParticles.size() > 1) {
50  daughters = daughterMCParticles.size();
51  }
52  }
53 
54  while (seedMCParticle->getMother()) {
55  seedMCParticle = seedMCParticle->getMother();
56  }
57 
58  int mcTrackHits = 0;
59 
60  if (seedMCTrack) {
61  mcTrackHits = seedMCTrack->getNumberOfCDCHits();
62  }
63  var<named("mcTrackHits")>() = mcTrackHits;
64 
65  var<named("daughters")>() = daughters;
66  var<named("PDG")>() = seedMCParticle->getPDG();
67 
68  auto seedMom = seedMCParticle->getMomentum();
69  var<named("seed_p_truth")>() = seedMom.Mag();
70  var<named("seed_theta_truth")>() = seedMom.Theta() * 180. / M_PI;
71  var<named("seed_pt_truth")>() = seedMom.Perp();
72  var<named("seed_pz_truth")>() = seedMom.Z();
73  var<named("seed_px_truth")>() = seedMom.X();
74  var<named("seed_py_truth")>() = seedMom.Y();
75 
76  return true;
77 }
Belle2::RelationsInterface::getRelated
T * getRelated(const std::string &name="", const std::string &namedRelation="") const
Get the object to or from which this object has a relation.
Definition: RelationsObject.h:280
Belle2::RecoTrack
This is the Reconstruction Event-Data Model Track.
Definition: RecoTrack.h:78
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::MCParticle
A Class to store the Monte Carlo particle information.
Definition: MCParticle.h:43
Belle2::TrackFindingCDC::Filter::Object
AObject Object
Type of the object to be analysed.
Definition: Filter.dcl.h:43
Belle2::ECLShower
Class to store ECL Showers.
Definition: ECLShower.h:42