Belle II Software  release-06-00-14
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;
118  TVector3 m_tagV;
119  TMatrixDSym m_tagVErrMatrix;
120  TVector3 m_mcTagV;
122  int m_mcPDG;
123  TVector3 m_mcVertReco;
125  double m_deltaT;
126  double m_deltaTErr;
127  double m_mcDeltaTau;
128  double m_mcDeltaT;
129  TMatrixDSym m_constraintCov;
131  TVector3 m_BeamSpotCenter;
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  TLorentzVector m_tagMomentum;
153  bool doVertexFit(const Particle* Breco);
154 
156  Particle* doVertexFitForBTube(const Particle* mother, std::string fitType) const;
157 
159  std::pair<TVector3, TMatrixDSym> findConstraint(const Particle* Breco, double cut) const;
160 
162  std::pair<TVector3, TMatrixDSym> findConstraintBoost(double cut, double shiftAlongBoost = -2000.) const;
163 
166  std::pair<TVector3, 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 TVector3& 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 TVector3& vec);
239 
243  static std::string printMatrix(const TMatrixD& mat);
244 
248  static std::string printMatrix(const TMatrixDSym& mat);
249 
257 
261  static TVector3 getTruePoca(ParticleAndWeight const& paw);
262 
270 
274  TVector3 getRollBackPoca(ParticleAndWeight const& paw);
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:32
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
TVector3 m_tagV
tag side fit result
double m_truthTagVl
MC tagV component in the boost direction
bool m_useTruthInFit
Set to true if the tag fit is to be made with the TRUE tag track momentum and position.
std::vector< double > m_raveWeights
Store the weights used by Rave in the vtx fit so that they can be accessed later.
TMatrixDSym m_pvCov
covariance matrix of the PV (useful with tube and KFit)
double m_mcDeltaT
generated DeltaT with boost-direction approximation
std::string m_listName
Breco particle list name.
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
bool m_mcInfo
true if user wants to retrieve MC information out from the tracks used in the fit
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.
TVector3 m_BeamSpotCenter
Beam spot position.
double m_mcTagLifeTime
generated tag side life time of B-decay
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)
double m_mcDeltaTau
generated DeltaT
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.
std::vector< const Particle * > m_raveParticles
tracks given to rave for the track fit (after removing Kshorts
TVector3 m_mcVertReco
generated Breco decay vertex
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
TLorentzVector m_tagMomentum
B tag momentum computed from fully reconstructed B sig.
std::string m_constraintType
Choose constraint: noConstraint, IP, tube, boost, (breco)
StoreArray< MCParticle > m_mcParticles
StoreArray of MCParticles.
double m_mcLifeTimeReco
generated Breco life time
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
TVector3 m_constraintCenter
centre position of the constraint for the tag Vertex fit
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.
TVector3 m_mcTagV
generated tag side vertex
bool m_verbose
choose if you want to print extra infos
int m_FitType
fit algo used
std::vector< const MCParticle * > m_raveMCParticles
Store the MC particles corresponding to each track used by Rave in the vtx fit.
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.
TVector3 getRollBackPoca(ParticleAndWeight const &paw)
This shifts the position of tracks by the vector difference of mother B and production point of track...
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...
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...
std::pair< TVector3, TMatrixDSym > findConstraint(const Particle *Breco, double cut) const
calculate the constraint for the vertex fit on the tag side using Breco information
virtual void initialize() override
Initialize the Module.
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)
void BtagMCVertex(const Particle *Breco)
get the vertex of the MC B particle associated to Btag.
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.
void deltaT(const Particle *Breco)
calculate DeltaT and MC-DeltaT (rec - tag) in ps from Breco and Btag vertices DT = Dl / gamma beta c ...
void fillParticles(std::vector< ParticleAndWeight > &particleAndWeights)
Fill sorted list of particles into external variable.
TagVertexModule()
Constructor.
void resetReturnParams()
Reset all parameters that are computed in each event and then used to compute tuple variables.
static std::string printVector(const TVector3 &vec)
Print a TVector3 (useful for debugging)
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...
void fillTagVinfo(const TVector3 &tagVpos, const TMatrixDSym &tagVposErr)
Fill tagV vertex info.
static bool compBrecoBgen(const Particle *Breco, const MCParticle *Bgen)
compare Breco with the two MC B particles
std::pair< TVector3, TMatrixDSym > findConstraintBoost(double cut, double shiftAlongBoost=-2000.) const
calculate the standard constraint for the vertex fit on the tag side
std::pair< TVector3, 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...
static std::string printMatrix(const TMatrixD &mat)
Print a TMatrix (useful for debugging)
bool makeGeneralFitKFit()
make the vertex fit on the tag side: KFit tracks coming from Ks removed all other tracks used
static TVector3 getTruePoca(ParticleAndWeight const &paw)
This finds the point on the true particle trajectory closest to the measured track position.
Abstract base class for different kinds of events.
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