Belle II Software  release-08-01-10
Bundle.cc
1 /**************************************************************************
2  * basf2 (Belle II Analysis Software Framework) *
3  * Author: The Belle II Collaboration *
4  * *
5  * See git log for contributors and copyright holders. *
6  * This file is licensed under LGPL-3.0, see LICENSE.md. *
7  **************************************************************************/
8 #include <analysis/modules/CurlTagger/Bundle.h>
9 
10 #include <analysis/variables/VertexVariables.h>
11 
12 #include <TMath.h>
13 
14 using namespace Belle2;
15 using namespace CurlTagger;
16 
17 Bundle::Bundle(bool isTruthBundle)
18 {
19  m_IsTruthBundle = isTruthBundle;
20  m_Gamma = 5; //From BN1079 - TODO check this gives best selection (what defines best?)
21 
22  if (m_IsTruthBundle) {
23  m_CurlLabel = "isTruthCurl";
24  m_SizeLabel = "truthBundleSize";
25  } else {
26  m_CurlLabel = "isCurl";
27  m_SizeLabel = "bundleSize";
28  }
29 }
30 
31 Bundle::~Bundle() = default;
32 
34 {
35  m_Particles.push_back(particle);
36 }
37 
38 Particle* Bundle::getParticle(unsigned int i)
39 {
40  return m_Particles[i];
41 }
42 
43 unsigned int Bundle::size()
44 {
45  return m_Particles.size();
46 }
47 
49 {
50  return TMath::Power(m_Gamma * Variable::particleDRho(particle), 2) + TMath::Power(Variable::particleDZ(particle), 2);
51 }
52 
54 {
55  return scaledImpactParam(iPart) < scaledImpactParam(jPart);
56 }
57 
59 {
60  //somewhat slow but should only be comparing 2-3 particles so shouldn't be a problem.
61  //std::sort (m_Particles.begin(), m_Particles.end(), compareParticles);
62  unsigned int bundleSize = size();
63  float lowestVal = 1e10;
64  unsigned int posLowestVal = 0;
65  for (unsigned int i = 0; i < bundleSize; i++) {
66  if (scaledImpactParam(m_Particles[i]) < lowestVal) {
67  lowestVal = scaledImpactParam(m_Particles[i]);
68  posLowestVal = i;
69  }
70  }
71 
72  for (unsigned int i = 0; i < bundleSize; i++) {
73  Particle* particle = m_Particles[i];
74  //std::cout << trackDist(particle) << std::endl;
75  if (i == posLowestVal) {continue;}
76  particle ->setExtraInfo(m_CurlLabel, 1);
77  }
78 }
79 
81 {
82  unsigned int bundleSize = size();
83  for (Particle* particle : m_Particles) {
84  particle -> setExtraInfo(m_SizeLabel, bundleSize);
85  }
86 }
87 
Bundle(bool isTruthBundle)
Constructor.
Definition: Bundle.cc:17
float scaledImpactParam(Particle *particle)
scaled impact parameter for selecting best track
Definition: Bundle.cc:48
void tagSizeInfo()
sets extraInfo with size of Bundle for particles in Bundle
Definition: Bundle.cc:80
std::string m_CurlLabel
label used to tag particles with curl info
Definition: Bundle.h:64
unsigned int size()
gets Bundle size
Definition: Bundle.cc:43
bool m_IsTruthBundle
flag for if the bundle is based on truth info, changes which labels are used
Definition: Bundle.h:61
bool compareParticles(Particle *iPart, Particle *jPart)
used to rank particles by scaledImpactParam - currently unused
Definition: Bundle.cc:53
Particle * getParticle(unsigned int i)
gets Particle from Bundle
Definition: Bundle.cc:38
std::vector< Particle * > m_Particles
particles in bundle
Definition: Bundle.h:70
std::string m_SizeLabel
label used to tag particles with Bundle size
Definition: Bundle.h:67
void addParticle(Particle *particle)
adds Particle to Bundle
Definition: Bundle.cc:33
double m_Gamma
dr scale factor
Definition: Bundle.h:55
void tagCurlInfo()
sets curl extra info for particles in Bundle
Definition: Bundle.cc:58
Class to store reconstructed particles.
Definition: Particle.h:75
Abstract base class for different kinds of events.