Belle II Software  light-2205-abys
TagVertexModule.h
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 
9 #pragma once
10 
11 #include <framework/core/Module.h>
12 
13 // framework - DataStore
14 #include <framework/database/DBObjPtr.h>
15 #include <framework/datastore/StoreArray.h>
16 #include <framework/datastore/StoreObjPtr.h>
17 
18 // Rave
19 #include <analysis/VertexFitting/RaveInterface/RaveSetup.h>
20 #include <analysis/VertexFitting/RaveInterface/RaveVertexFitter.h>
21 #include <analysis/VertexFitting/RaveInterface/RaveKinematicVertexFitter.h>
22 
23 // KFit
24 #include <CLHEP/Geometry/Point3D.h>
25 #include <CLHEP/Matrix/SymMatrix.h>
26 #include <CLHEP/Vector/LorentzVector.h>
27 
28 // DataObjects
29 #include <analysis/dataobjects/Particle.h>
30 #include <analysis/dataobjects/ParticleList.h>
31 #include <analysis/dataobjects/TagVertex.h>
32 #include <mdst/dataobjects/Track.h>
33 #include <mdst/dataobjects/TrackFitResult.h>
34 #include <mdst/dbobjects/BeamSpot.h>
35 #include <mdst/dataobjects/MCParticle.h>
36 
37 #include <string>
38 #include <vector>
39 
40 
41 namespace Belle2 {
47  class Particle;
48  struct ParticleAndWeight;
49 
55  class TagVertexModule : public Module {
56 
57  public:
58 
63 
68  virtual void initialize() override;
69 
74  virtual void beginRun() override;
75 
79  virtual void event() override;
80 
84  const BeamSpot& getBeamSpot() const { return *m_beamSpotDB; }
85 
86 
87  private:
88 
92  //std::string m_EventType; /**< Btag decay type */
93  std::string m_listName;
95  std::string m_useMCassociation;
96  //std::string m_useFitAlgorithm; /**< Choose constraint: from Breco or tube in the boost direction w/wo cut */
97  std::string m_constraintType;
98  std::string m_trackFindingType;
100  std::string m_roeMaskName;
101  double m_Bfield;
102  std::vector<const Particle*> m_tagParticles;
103  std::vector<const Particle*> m_raveParticles;
104  std::vector<double> m_raveWeights;
105  std::vector<const MCParticle*>
117  double m_fitPval;
119  TMatrixDSym m_tagVErrMatrix;
122  int m_mcPDG;
125  double m_deltaT;
126  double m_deltaTErr;
127  double m_mcDeltaTau;
128  double m_mcDeltaT;
129  TMatrixDSym m_constraintCov;
132  TMatrixDSym m_BeamSpotCov;
133  bool m_mcInfo;
134  double m_shiftZ;
136  int m_FitType;
137  double m_tagVl;
138  double m_truthTagVl;
139  double m_tagVlErr;
140  double m_tagVol;
141  double m_truthTagVol;
142  double m_tagVolErr;
143  double m_tagVNDF;
144  double m_tagVChi2;
145  double m_tagVChi2IP;
146  std::string m_fitAlgo;
147  bool m_verbose;
148  TMatrixDSym m_pvCov;
149  ROOT::Math::PxPyPzEVector m_tagMomentum;
153  bool doVertexFit(const Particle* Breco);
154 
156  Particle* doVertexFitForBTube(const Particle* mother, std::string fitType) const;
157 
159  std::pair<B2Vector3D, TMatrixDSym> findConstraint(const Particle* Breco, double cut) const;
160 
162  std::pair<B2Vector3D, TMatrixDSym> findConstraintBoost(double cut, double shiftAlongBoost = -2000.) const;
163 
166  std::pair<B2Vector3D, TMatrixDSym> findConstraintBTube(const Particle* Breco, double cut);
167 
169  void BtagMCVertex(const Particle* Breco);
170 
172  static bool compBrecoBgen(const Particle* Breco, const MCParticle* Bgen);
173 
176  std::vector<const Particle*> getTagTracks_standardAlgorithm(const Particle* Breco, int nPXDHits) const;
177 
183  std::vector<ParticleAndWeight> getParticlesWithoutKS(const std::vector<const Particle*>& tagParticles,
184  double massWindowWidth = 0.01) const;
185 
187  //bool makeSemileptonicFit(Particle *Breco);
188 
189 
193  bool makeGeneralFit();
194 
201  bool makeGeneralFitRave();
202 
206  void fillParticles(std::vector<ParticleAndWeight>& particleAndWeights);
207 
208 
212  void fillTagVinfo(const B2Vector3D& tagVpos, const TMatrixDSym& tagVposErr);
213 
220  bool makeGeneralFitKFit();
221 
222 
227  void deltaT(const Particle* Breco);
228 
233  void resetReturnParams();
234 
238  static std::string printVector(const ROOT::Math::XYZVector& vec);
239 
243  static std::string printMatrix(const TMatrixD& mat);
244 
248  static std::string printMatrix(const TMatrixDSym& mat);
249 
257 
261  static B2Vector3D getTruePoca(ParticleAndWeight const& paw);
262 
270 
275  };
276 
281  double weight;
284  };
285 
287 }
This class contains the beam spot position and size modeled as a gaussian distribution in space.
Definition: BeamSpot.h:22
Class for accessing objects in the database.
Definition: DBObjPtr.h:21
A Class to store the Monte Carlo particle information.
Definition: MCParticle.h:34
Base class for Modules.
Definition: Module.h:72
Class to store reconstructed particles.
Definition: Particle.h:74
Accessor to arrays stored in the data store.
Definition: StoreArray.h:113
Type-safe access to single objects in the data store.
Definition: StoreObjPtr.h:95
Tag side Vertex Fitter module for modular analysis.
int m_fitTruthStatus
Store info about whether the fit was performed with the truth info 0 fit performed with measured para...
TMatrixDSym m_constraintCov
constraint to be used in the tag vertex fit
double m_truthTagVol
MC tagV component in the direction orthogonal to the boost.
std::vector< const Particle * > m_tagParticles
tracks of the rest of the event
const BeamSpot & getBeamSpot() const
returns the BeamSpot object
double m_shiftZ
parameter for testing the systematic error from the IP measurement
double m_tagVl
tagV component in the boost direction
bool doVertexFit(const Particle *Breco)
central method for the tag side vertex fit
std::vector< const Particle * > getTagTracks_standardAlgorithm(const Particle *Breco, int nPXDHits) const
performs the fit using the standard algorithm - using all tracks in RoE The user can specify a reques...
double m_truthTagVl
MC tagV component in the boost direction
B2Vector3D getRollBackPoca(ParticleAndWeight const &paw)
This shifts the position of tracks by the vector difference of mother B and production point of track...
bool m_useTruthInFit
Set to true if the tag fit is to be made with the TRUE tag track momentum and position.
void fillTagVinfo(const B2Vector3D &tagVpos, const TMatrixDSym &tagVposErr)
Fill tagV vertex info.
std::vector< double > m_raveWeights
Store the weights used by Rave in the vtx fit so that they can be accessed later.
TrackFitResult getTrackWithRollBackCoordinates(ParticleAndWeight const &paw)
If the fit has to be done with the rolled back tracks, Rave or KFit is fed with a track where the pos...
virtual void initialize() override
Initialize the Module.
TMatrixDSym m_pvCov
covariance matrix of the PV (useful with tube and KFit)
double m_mcDeltaT
generated DeltaT with boost-direction approximation
static std::string printVector(const ROOT::Math::XYZVector &vec)
Print a XYZVector (useful for debugging)
static B2Vector3D getTruePoca(ParticleAndWeight const &paw)
This finds the point on the true particle trajectory closest to the measured track position.
std::vector< ParticleAndWeight > getParticlesWithoutKS(const std::vector< const Particle * > &tagParticles, double massWindowWidth=0.01) const
Get a list of pions from a list of pions removing the Kshorts Warning: this assumes all the particles...
virtual void event() override
Event processor.
Particle * doVertexFitForBTube(const Particle *mother, std::string fitType) const
it returns an intersection between B rec and beam spot (= origin of BTube)
std::string m_listName
Breco particle list name.
std::pair< B2Vector3D, TMatrixDSym > findConstraint(const Particle *Breco, double cut) const
calculate the constraint for the vertex fit on the tag side using Breco information
bool m_useRollBack
Set to true if the tag fit is to be made with the tag track position rolled back to mother B.
double m_tagVlErr
Error of the tagV component in the boost direction
std::string m_roeMaskName
ROE particles from this mask will be used for vertex fitting.
double m_tagVChi2
chi^2 value of the tag vertex fit result
void BtagMCVertex(const Particle *Breco)
get the vertex of the MC B particle associated to Btag.
bool m_mcInfo
true if user wants to retrieve MC information out from the tracks used in the fit
B2Vector3D m_tagV
tag side fit result
std::string m_useMCassociation
No MC association or standard Breco particle or internal MCparticle association.
double m_tagVolErr
Error of the tagV component in the direction orthogonal to the boost.
double m_mcTagLifeTime
generated tag side life time of B-decay
B2Vector3D m_BeamSpotCenter
Beam spot position.
double m_tagVNDF
Number of degrees of freedom in the tag vertex fit.
double m_deltaTErr
reconstructed DeltaT error
std::string m_fitAlgo
Algorithm used for the tag fit (Rave or KFit)
bool makeGeneralFit()
TO DO: tag side vertex fit in the case of semileptonic tag side decay.
virtual void beginRun() override
Called when entering a new run.
B2Vector3D m_constraintCenter
centre position of the constraint for the tag Vertex fit
double m_mcDeltaTau
generated DeltaT
std::pair< B2Vector3D, TMatrixDSym > findConstraintBoost(double cut, double shiftAlongBoost=-2000.) const
calculate the standard constraint for the vertex fit on the tag side
double m_fitPval
P value of the tag side fit result.
StoreArray< TagVertex > m_verArray
StoreArray of TagVertexes.
DBObjPtr< BeamSpot > m_beamSpotDB
Beam spot database object.
B2Vector3D m_mcTagV
generated tag side vertex
void deltaT(const Particle *Breco)
calculate DeltaT and MC-DeltaT (rec - tag) in ps from Breco and Btag vertices DT = Dl / gamma beta c ...
std::vector< const Particle * > m_raveParticles
tracks given to rave for the track fit (after removing Kshorts
void fillParticles(std::vector< ParticleAndWeight > &particleAndWeights)
Fill sorted list of particles into external variable.
TagVertexModule()
Constructor.
int m_reqPXDHits
N of PXD hits for a track to be used.
double m_confidenceLevel
required fit confidence level
double m_tagVChi2IP
IP component of the chi^2 of the tag vertex fit result.
double m_tagVol
tagV component in the direction orthogonal to the boost
std::string m_constraintType
Choose constraint: noConstraint, IP, tube, boost, (breco)
void resetReturnParams()
Reset all parameters that are computed in each event and then used to compute tuple variables.
ROOT::Math::PxPyPzEVector m_tagMomentum
B tag momentum computed from fully reconstructed B sig.
bool makeGeneralFitRave()
make the vertex fit on the tag side: RAVE AVF tracks coming from Ks removed all other tracks used
TrackFitResult getTrackWithTrueCoordinates(ParticleAndWeight const &paw) const
If the fit has to be done with the truth info, Rave is fed with a track where the momentum is replace...
std::pair< B2Vector3D, TMatrixDSym > findConstraintBTube(const Particle *Breco, double cut)
calculate constraint for the vertex fit on the tag side using the B tube (cylinder along the expected...
StoreArray< MCParticle > m_mcParticles
StoreArray of MCParticles.
double m_mcLifeTimeReco
generated Breco life time
static bool compBrecoBgen(const Particle *Breco, const MCParticle *Bgen)
compare Breco with the two MC B particles
double m_Bfield
magnetic field from data base
TMatrixDSym m_tagVErrMatrix
Error matrix of the tag side fit result.
int m_mcPDG
generated tag side B flavor
StoreObjPtr< ParticleList > m_plist
input particle list
static std::string printMatrix(const TMatrixD &mat)
Print a TMatrix (useful for debugging)
int m_rollbackStatus
Store info about whether the fit was performed with the rolled back tracks 0 fit performed with measu...
std::string m_trackFindingType
Choose how to find the tag tracks: standard, standard_PXD.
bool m_verbose
choose if you want to print extra infos
int m_FitType
fit algo used
bool makeGeneralFitKFit()
make the vertex fit on the tag side: KFit tracks coming from Ks removed all other tracks used
std::vector< const MCParticle * > m_raveMCParticles
Store the MC particles corresponding to each track used by Rave in the vtx fit.
B2Vector3D m_mcVertReco
generated Breco decay vertex
TMatrixDSym m_BeamSpotCov
size of the beam spot == covariance matrix on the beam spot position
double m_deltaT
reconstructed DeltaT
Values of the result of a track fit with a given particle hypothesis.
Abstract base class for different kinds of events.
Definition: ClusterUtils.h:23
this struct is used to store and sort the tag tracks
const Particle * particle
tag track fit result with pion mass hypo, for sorting purposes
const MCParticle * mcParticle
mc particle matched to the tag track, for sorting purposes
double weight
rave weight associated to the track, for sorting purposes