CbmRoot
Loading...
Searching...
No Matches
CbmAnaJpsiUtils.h
Go to the documentation of this file.
1/* Copyright (C) 2015-2016 UGiessen, JINR-LIT
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Semen Lebedev [committer] */
4
5#ifndef CBM_ANA_JPSI_UTILS_H
6#define CBM_ANA_JPSI_UTILS_H
7
9#include "CbmKFVertex.h"
10#include "CbmL1PFFitter.h"
11#include "CbmMCTrack.h"
12#include "CbmStsTrack.h"
13
14#include "TClonesArray.h"
15#include "TDatabasePDG.h"
16#include "TMCProcess.h"
17
18#include <vector>
19
20
22public:
23 /*
24 * Calculates and set track parameters to CbmAnaJpsiCandidate.
25 * The following parameters are set: fChi2sts, fChi2Prim, fPosition, fMomentum, fMass, fCharge, fEnergy, fRapidity
26 */
28 CbmKFVertex& kfVertex)
29 {
30 CbmL1PFFitter fPFFitter;
31 std::vector<CbmStsTrack> stsTracks;
32 stsTracks.resize(1);
33 stsTracks[0] = *stsTrack;
34 std::vector<CbmL1PFFitter::PFFieldRegion> vField;
35 std::vector<float> chiPrim;
36 fPFFitter.GetChiToVertex(stsTracks, vField, chiPrim, kfVertex, 3e6);
37 cand->fChi2sts = stsTracks[0].GetChiSq() / stsTracks[0].GetNDF();
38 cand->fChi2Prim = chiPrim[0];
39
40 const FairTrackParam* vtxTrack = stsTracks[0].GetParamFirst();
41
42 vtxTrack->Position(cand->fPosition);
43 vtxTrack->Momentum(cand->fMomentum);
44
45 cand->fMass = TDatabasePDG::Instance()->GetParticle(11)->Mass();
46 cand->fCharge = (vtxTrack->GetQp() > 0) ? 1 : -1;
47 cand->fEnergy = sqrt(cand->fMomentum.Mag2() + cand->fMass * cand->fMass);
48 cand->fRapidity = 0.5 * TMath::Log((cand->fEnergy + cand->fMomentum.Z()) / (cand->fEnergy - cand->fMomentum.Z()));
49 }
50
51 /*
52 * \brief Return true if MC track is signal primary electron.
53 */
54 static Bool_t IsMcSignalElectron(CbmMCTrack* mctrack)
55 {
56 if (mctrack == NULL) return false;
57 Int_t pdg = TMath::Abs(mctrack->GetPdgCode());
58 if (mctrack->GetGeantProcessId() == kPPrimary && pdg == 11) return true;
59 return false;
60 }
61
62 /*
63 * \brief Return true if MC track is electron from gamma conversion.
64 */
65 static Bool_t IsMcGammaElectron(CbmMCTrack* mctrack, TClonesArray* mcTracks)
66 {
67 if (mctrack == NULL) return false;
68 Int_t pdg = TMath::Abs(mctrack->GetPdgCode());
69 if (pdg != 11) return false;
70 Int_t motherId = mctrack->GetMotherId();
71 if (motherId < 0) { return false; }
72 else {
73 CbmMCTrack* mct1 = static_cast<CbmMCTrack*>(mcTracks->At(motherId));
74 Int_t motherPdg = mct1->GetPdgCode();
75 if (mct1 != NULL && motherPdg == 22 && pdg == 11) { return true; }
76 }
77 return false;
78 }
79
80 /*
81 * \brief Return true if MC track is electron from Pi0 dalitz decay.
82 */
83 static Bool_t IsMcPi0Electron(CbmMCTrack* mctrack, TClonesArray* mcTracks)
84 {
85 if (mctrack == NULL) return false;
86 Int_t pdg = TMath::Abs(mctrack->GetPdgCode());
87 if (pdg != 11) return false;
88 Int_t motherId = mctrack->GetMotherId();
89 if (motherId < 0) { return false; }
90 else {
91 CbmMCTrack* mct1 = static_cast<CbmMCTrack*>(mcTracks->At(motherId));
92 Int_t motherPdg = mct1->GetPdgCode();
93 if (mct1 != NULL && motherPdg == 111 && pdg == 11) { return true; }
94 }
95 return false;
96 }
97};
98
99#endif
Data class for STS tracks.
static vector< vector< QAMCTrack > > mcTracks
friend fvec sqrt(const fvec &a)
static Bool_t IsMcSignalElectron(CbmMCTrack *mctrack)
static void CalculateAndSetTrackParamsToCandidate(CbmAnaJpsiCandidate *cand, CbmStsTrack *stsTrack, CbmKFVertex &kfVertex)
static Bool_t IsMcPi0Electron(CbmMCTrack *mctrack, TClonesArray *mcTracks)
static Bool_t IsMcGammaElectron(CbmMCTrack *mctrack, TClonesArray *mcTracks)
void GetChiToVertex(std::vector< CbmStsTrack > &Tracks, std::vector< PFFieldRegion > &field, std::vector< float > &chiToVtx, CbmKFVertex &primVtx, float chiPrim=-1)
uint32_t GetGeantProcessId() const
Definition CbmMCTrack.h:67
int32_t GetMotherId() const
Definition CbmMCTrack.h:69
int32_t GetPdgCode() const
Definition CbmMCTrack.h:68