CbmRoot
Loading...
Searching...
No Matches
CbmKresConversionPhotons.h
Go to the documentation of this file.
1/* Copyright (C) 2020 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Florian Uhlig [committer] */
4
5#ifndef CBM_KRES_CONVERSION_PHOTONS
6#define CBM_KRES_CONVERSION_PHOTONS
7
8#include "CbmKFVertex.h"
11#include "CbmMCTrack.h"
12#include "CbmRichRing.h"
14#include "CbmStsTrack.h"
15#include "CbmVertex.h"
16
17#include "TH2D.h"
18#include <TClonesArray.h>
19
20#include "KFParticle.h"
21#include "LmvmKinePar.h"
22
24
25using namespace std;
26
28
29public:
30 //***** brief Standard constructor.
32 //***** brief Standard destructor.
34
35
36 void Init();
37 void InitHistograms();
38 void Finish();
39
40 void Exec(int fEventNumDP, double OpeningAngleCut, double GammaInvMassCut, int RealPID);
41
42 void SaveOutsideTracks(CbmMCTrack* mcTrack1, CbmStsTrack* stsTrack, double charge, int stsInd, int richInd,
43 int stsMcTrackId, CbmRichRing* RING);
44
45 void SaveTargetTracks(CbmMCTrack* mcTrack1, CbmStsTrack* stsTrack, TVector3 refmom, double charge, int stsInd,
46 int richInd, int stsMcTrackId, CbmRichRing* RING);
47
48 int FindInRich(int richInd, int stsMcTrackId);
49
50 int CheckIfElectron(CbmRichRing* ring, double momentum);
51
52 std::vector<TVector3> SaveAllHits(CbmStsTrack* track);
53
54 void FindGammasTarget(int EventNumMan, double AngleCut, double InvMassCut, int RealPID,
55 vector<CbmMCTrack*> MCtracks_minus, vector<CbmMCTrack*> MCtracks_plus,
56 vector<CbmStsTrack*> StsTrack_minus, vector<CbmStsTrack*> StsTrack_plus,
57 vector<TVector3> Momenta_minus, vector<TVector3> Momenta_plus, std::vector<int> Rings_minus,
58 std::vector<int> Rings_plus, std::vector<int> stsIndex_minus, std::vector<int> stsIndex_plus,
59 vector<CbmRichRing*> richRing_minus, vector<CbmRichRing*> richRing_plus);
60
61 void FindGammasOutside(int EventNumMan, double AngleCut, double InvMassCut, int RealPID,
62 vector<CbmMCTrack*> MCtracks_minus_Outside, vector<CbmMCTrack*> MCtracks_plus_Outside,
63 vector<CbmStsTrack*> StsTrack_minus_Outside, vector<CbmStsTrack*> StsTrack_plus_Outside,
64 std::vector<int> Rings_minus_Outside, std::vector<int> Rings_plus_Outside,
65 std::vector<int> stsIndex_minus_Outside, std::vector<int> stsIndex_plus_Outside,
66 vector<CbmRichRing*> richRing_minus_Outside, vector<CbmRichRing*> richRing_plus_Outside);
67
68 void FindGammasBoth();
69
70 double CalculatePlaneAngle_last_fromHits(std::vector<TVector3> track_1, std::vector<TVector3> track_2);
71
73
75
76 void DP_likesign_Mixing_Target(double AngleCut, double InvMassCut);
77
78 void DP_likesign_Mixing_Outside(double AngleCut, double InvMassCut);
79
80 void DP_Mixing_Target(double AngleCut, double InvMassCut);
81
82 void DP_Mixing_Outside(double AngleCut, double InvMassCut);
83
84
85private:
90
91
92 TClonesArray* fMcTracks;
93 TClonesArray* fGlobalTracks;
94 TClonesArray* fStsTracks;
95 TClonesArray* fStsTrackMatches;
96 TClonesArray* fRichProjections;
97 TClonesArray* fRichRings;
98 TClonesArray* fRichRingMatches;
99 TClonesArray* fRichHits;
100 TClonesArray* fArrayMvdHit;
101 TClonesArray* fArrayStsHit;
102
105
107
108 // charged tracks from outside
109 vector<CbmStsTrack*> VStsTrack_minus_Outside;
110 vector<CbmMCTrack*> VMCtracks_minus_Outside;
111 std::vector<int> VRings_minus_Outside;
112 std::vector<int> VStsIndex_minus_Outside;
113 vector<CbmRichRing*> VRichRing_minus_Outside;
114
115 vector<CbmStsTrack*> VStsTrack_plus_Outside;
116 vector<CbmMCTrack*> VMCtracks_plus_Outside;
117 std::vector<int> VRings_plus_Outside;
118 std::vector<int> VStsIndex_plus_Outside;
119 vector<CbmRichRing*> VRichRing_plus_Outside;
120
121
122 // charged tracks from the target
123 vector<CbmMCTrack*> VMCtracks_minus_Target;
124 vector<CbmStsTrack*> VStsTrack_minus_Target;
125 vector<TVector3> VMomenta_minus_Target;
126 std::vector<int> VRings_minus_Target;
127 std::vector<int> VStsIndex_minus_Target;
128 vector<CbmRichRing*> VRichRing_minus_Target;
129
130 vector<CbmMCTrack*> VMCtracks_plus_Target;
131 vector<CbmStsTrack*> VStsTrack_plus_Target;
132 vector<TVector3> VMomenta_plus_Target;
133 std::vector<int> VRings_plus_Target;
134 std::vector<int> VStsIndex_plus_Target;
135 vector<CbmRichRing*> VRichRing_plus_Target;
136
137
138 vector<TVector3> frefmomenta;
139 std::vector<int> frefId;
140 std::vector<CbmMCTrack*> fMCtracks;
141
142 // DP_LK_EMT Target
143 std::vector<TVector3> DP_LK_EMT_momenta_minus_Target;
145 std::vector<CbmStsTrack*> DP_LK_EMT_STS_minus_Target;
147
148 std::vector<TVector3> DP_LK_EMT_momenta_plus_Target;
150 std::vector<CbmStsTrack*> DP_LK_EMT_STS_plus_Target;
152
153 // DP_LK_EMT Outside
155 std::vector<CbmStsTrack*> DP_LK_EMT_STS_minus_Outside;
157
159 std::vector<CbmStsTrack*> DP_LK_EMT_STS_plus_Outside;
161
162
163 // DP_EMT Target
165 std::vector<TVector3> DP_EMT_momenta_minus_Target;
167 std::vector<std::vector<TVector3>> DP_EMT_Hits_minus_Target;
168
169 std::vector<int> DP_EMT_Event_plus_Target;
170 std::vector<TVector3> DP_EMT_momenta_plus_Target;
172 std::vector<std::vector<TVector3>> DP_EMT_Hits_plus_Target;
173
174 // DP_EMT Outside
176 std::vector<CbmStsTrack*> DP_EMT_STS_minus_Outside;
177 std::vector<KFParticle> DP_EMT_KFTrack_minus_Outside;
179 std::vector<std::vector<TVector3>> DP_EMT_Hits_minus_Outside;
180
182 std::vector<CbmStsTrack*> DP_EMT_STS_plus_Outside;
183 std::vector<KFParticle> DP_EMT_KFTrack_plus_Outside;
185 std::vector<std::vector<TVector3>> DP_EMT_Hits_plus_Outside;
186
187
188 // combined gammas from the target
189 std::vector<std::vector<TVector3>> Gammas_all_Target;
190 std::vector<std::vector<TVector3>> Gammas_zero_Target;
191 std::vector<std::vector<TVector3>> Gammas_one_Target;
192 std::vector<std::vector<TVector3>> Gammas_two_Target;
193 std::vector<std::vector<TVector3>> Gammas_onetwo_Target;
194
195 std::vector<std::vector<int>> Gammas_stsIndex_all_Target;
196 std::vector<std::vector<int>> Gammas_stsIndex_zero_Target;
197 std::vector<std::vector<int>> Gammas_stsIndex_one_Target;
198 std::vector<std::vector<int>> Gammas_stsIndex_two_Target;
199 std::vector<std::vector<int>> Gammas_stsIndex_onetwo_Target;
200
201 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_all_Target;
202 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_zero_Target;
203 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_one_Target;
204 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_two_Target;
205 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_onetwo_Target;
206
207
208 // combined gammas from outside
209 std::vector<std::vector<TVector3>> Gammas_all_Outside;
210 std::vector<std::vector<TVector3>> Gammas_zero_Outside;
211 std::vector<std::vector<TVector3>> Gammas_one_Outside;
212 std::vector<std::vector<TVector3>> Gammas_two_Outside;
213 std::vector<std::vector<TVector3>> Gammas_onetwo_Outside;
214
215 std::vector<std::vector<int>> Gammas_stsIndex_all_Outside;
216 std::vector<std::vector<int>> Gammas_stsIndex_zero_Outside;
217 std::vector<std::vector<int>> Gammas_stsIndex_one_Outside;
218 std::vector<std::vector<int>> Gammas_stsIndex_two_Outside;
219 std::vector<std::vector<int>> Gammas_stsIndex_onetwo_Outside;
220
221 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_all_Outside;
222 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_zero_Outside;
223 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_one_Outside;
224 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_two_Outside;
225 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_onetwo_Outside;
226
227
228 // combined gammas from the target and outside together
229 std::vector<std::vector<TVector3>> Gammas_all_Both;
230 std::vector<std::vector<TVector3>> Gammas_zero_Both;
231 std::vector<std::vector<TVector3>> Gammas_one_Both;
232 std::vector<std::vector<TVector3>> Gammas_two_Both;
233 std::vector<std::vector<TVector3>> Gammas_onetwo_Both;
234
235 std::vector<std::vector<int>> Gammas_stsIndex_all_Both;
236 std::vector<std::vector<int>> Gammas_stsIndex_zero_Both;
237 std::vector<std::vector<int>> Gammas_stsIndex_one_Both;
238 std::vector<std::vector<int>> Gammas_stsIndex_two_Both;
239 std::vector<std::vector<int>> Gammas_stsIndex_onetwo_Both;
240
241 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_all_Both;
242 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_zero_Both;
243 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_one_Both;
244 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_two_Both;
245 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_onetwo_Both;
246
247
248 // histograms
249 // Target
253
254 // Outside
258
259 // Both
260 vector<TH1*> fHistoList_dp_Both;
267
268
282
295
308
309
310 // Target => all
321
322 // Target => zero
333
334 // Target => one
345
346 // Target => two
362
377
378
379 // Target => onetwo
395
410
411
412 // Outside => all
423
424 // Outside => zero
435
436 // Outside => one
447
448 // Outside => two
478
479 // Outside => onetwo
509
510
511 // Both => all
523
524 // Both => zero
536
537 // Both => one
549
550 // Both => two
565
566 // Both => onetwo
581
582
583 // EMT DP target
589
590 // EMT DP Outside
596
597 // EMT DP Both
603
610
616
623
630
636
643
644
645 //***** brief Copy constructor.
647
648 //***** brief Assignment operator.
650
651
652 ClassDef(CbmKresConversionPhotons, 1)
653};
654
655#endif
Here the ring is fitted with Taubin algorithm from A. Ayriyan, G. Ososkov, N. Chernov.
Data class for STS tracks.
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_two_Both
void DP_Mixing_Outside(double AngleCut, double InvMassCut)
vector< CbmMCTrack * > VMCtracks_minus_Outside
std::vector< std::vector< int > > Gammas_stsIndex_onetwo_Both
std::vector< std::vector< int > > Gammas_stsIndex_zero_Both
vector< CbmStsTrack * > VStsTrack_minus_Outside
std::vector< CbmStsTrack * > DP_LK_EMT_STS_minus_Outside
double CalculatePlaneAngle_last_fromHits(std::vector< TVector3 > track_1, std::vector< TVector3 > track_2)
std::vector< std::vector< TVector3 > > Gammas_two_Outside
std::vector< std::vector< int > > Gammas_stsIndex_all_Outside
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_all_Both
std::vector< std::vector< int > > Gammas_stsIndex_all_Target
std::vector< std::vector< int > > Gammas_stsIndex_one_Outside
std::vector< std::vector< TVector3 > > Gammas_zero_Outside
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_onetwo_Both
std::vector< std::vector< TVector3 > > Gammas_one_Outside
std::vector< std::vector< int > > Gammas_stsIndex_one_Both
void DP_Mixing_Target(double AngleCut, double InvMassCut)
std::vector< TVector3 > DP_EMT_momenta_minus_Target
std::vector< int > DP_EMT_Event_plus_Target
std::vector< std::vector< TVector3 > > Gammas_all_Target
void Exec(int fEventNumDP, double OpeningAngleCut, double GammaInvMassCut, int RealPID)
int CheckIfElectron(CbmRichRing *ring, double momentum)
std::vector< std::vector< TVector3 > > Gammas_onetwo_Target
std::vector< std::vector< int > > Gammas_stsIndex_two_Target
double CalculatePlaneAngle_first(CbmStsTrack *Sts_1, CbmStsTrack *Sts_2)
void SaveTargetTracks(CbmMCTrack *mcTrack1, CbmStsTrack *stsTrack, TVector3 refmom, double charge, int stsInd, int richInd, int stsMcTrackId, CbmRichRing *RING)
std::vector< std::vector< TVector3 > > Gammas_zero_Target
vector< CbmRichRing * > VRichRing_minus_Outside
vector< CbmMCTrack * > VMCtracks_plus_Outside
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_zero_Target
CbmKresConversionPhotons(const CbmKresConversionPhotons &)
vector< CbmRichRing * > VRichRing_minus_Target
std::vector< std::vector< TVector3 > > DP_EMT_Hits_plus_Target
std::vector< std::vector< int > > Gammas_stsIndex_zero_Target
std::vector< std::vector< TVector3 > > DP_EMT_Hits_plus_Outside
std::vector< int > DP_EMT_Event_minus_Target
CbmKresTrainAnnDirectPhotons * fTrainPhotons
void FindGammasOutside(int EventNumMan, double AngleCut, double InvMassCut, int RealPID, vector< CbmMCTrack * > MCtracks_minus_Outside, vector< CbmMCTrack * > MCtracks_plus_Outside, vector< CbmStsTrack * > StsTrack_minus_Outside, vector< CbmStsTrack * > StsTrack_plus_Outside, std::vector< int > Rings_minus_Outside, std::vector< int > Rings_plus_Outside, std::vector< int > stsIndex_minus_Outside, std::vector< int > stsIndex_plus_Outside, vector< CbmRichRing * > richRing_minus_Outside, vector< CbmRichRing * > richRing_plus_Outside)
vector< CbmStsTrack * > VStsTrack_plus_Outside
std::vector< CbmStsTrack * > DP_LK_EMT_STS_plus_Target
std::vector< std::vector< int > > Gammas_stsIndex_all_Both
std::vector< CbmStsTrack * > DP_EMT_STS_plus_Outside
std::vector< std::vector< int > > Gammas_stsIndex_one_Target
std::vector< std::vector< TVector3 > > Gammas_two_Both
double CalculatePlaneAngle_last(CbmStsTrack *Sts_1, CbmStsTrack *Sts_2)
std::vector< std::vector< TVector3 > > Gammas_all_Both
void FindGammasTarget(int EventNumMan, double AngleCut, double InvMassCut, int RealPID, vector< CbmMCTrack * > MCtracks_minus, vector< CbmMCTrack * > MCtracks_plus, vector< CbmStsTrack * > StsTrack_minus, vector< CbmStsTrack * > StsTrack_plus, vector< TVector3 > Momenta_minus, vector< TVector3 > Momenta_plus, std::vector< int > Rings_minus, std::vector< int > Rings_plus, std::vector< int > stsIndex_minus, std::vector< int > stsIndex_plus, vector< CbmRichRing * > richRing_minus, vector< CbmRichRing * > richRing_plus)
std::vector< int > DP_LK_EMT_STS_plus_index_Target
std::vector< std::vector< int > > Gammas_stsIndex_two_Outside
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_one_Target
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_all_Target
std::vector< int > DP_EMT_NofRings_minus_Target
std::vector< std::vector< TVector3 > > Gammas_one_Both
std::vector< int > DP_EMT_Event_minus_Outside
vector< CbmMCTrack * > VMCtracks_plus_Target
std::vector< std::vector< TVector3 > > Gammas_one_Target
std::vector< int > DP_LK_EMT_NofRings_plus_Target
std::vector< TVector3 > DP_LK_EMT_momenta_minus_Target
vector< CbmStsTrack * > VStsTrack_minus_Target
std::vector< TVector3 > DP_EMT_momenta_plus_Target
std::vector< int > DP_EMT_NofRings_minus_Outside
std::vector< std::vector< TVector3 > > Gammas_onetwo_Both
std::vector< CbmStsTrack * > DP_LK_EMT_STS_minus_Target
std::vector< std::vector< TVector3 > > Gammas_zero_Both
std::vector< int > DP_LK_EMT_STS_minus_index_Target
std::vector< TVector3 > DP_LK_EMT_momenta_plus_Target
vector< CbmMCTrack * > VMCtracks_minus_Target
std::vector< int > DP_EMT_NofRings_plus_Target
std::vector< std::vector< TVector3 > > Gammas_onetwo_Outside
std::vector< int > DP_EMT_NofRings_plus_Outside
std::vector< TVector3 > SaveAllHits(CbmStsTrack *track)
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_zero_Both
std::vector< int > VStsIndex_minus_Target
vector< CbmRichRing * > VRichRing_plus_Target
CbmRichRingFitterEllipseTau * fTauFit
std::vector< int > VStsIndex_minus_Outside
std::vector< int > DP_LK_EMT_STS_minus_index_Outside
CbmKresSelectAnnPhotons * fAnnPhotonsSelection
std::vector< std::vector< TVector3 > > DP_EMT_Hits_minus_Target
std::vector< std::vector< int > > Gammas_stsIndex_onetwo_Outside
std::vector< std::vector< TVector3 > > Gammas_all_Outside
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_two_Target
void DP_likesign_Mixing_Outside(double AngleCut, double InvMassCut)
std::vector< int > VStsIndex_plus_Outside
vector< CbmStsTrack * > VStsTrack_plus_Target
std::vector< int > DP_EMT_Event_plus_Outside
vector< CbmRichRing * > VRichRing_plus_Outside
void DP_likesign_Mixing_Target(double AngleCut, double InvMassCut)
std::vector< CbmMCTrack * > fMCtracks
std::vector< std::vector< TVector3 > > Gammas_two_Target
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_one_Outside
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_onetwo_Target
std::vector< KFParticle > DP_EMT_KFTrack_minus_Outside
int FindInRich(int richInd, int stsMcTrackId)
std::vector< std::vector< TVector3 > > DP_EMT_Hits_minus_Outside
std::vector< int > DP_LK_EMT_NofRings_minus_Outside
void SaveOutsideTracks(CbmMCTrack *mcTrack1, CbmStsTrack *stsTrack, double charge, int stsInd, int richInd, int stsMcTrackId, CbmRichRing *RING)
std::vector< int > DP_LK_EMT_NofRings_plus_Outside
std::vector< std::vector< int > > Gammas_stsIndex_two_Both
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_onetwo_Outside
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_zero_Outside
std::vector< std::vector< int > > Gammas_stsIndex_onetwo_Target
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_one_Both
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_all_Outside
std::vector< int > DP_LK_EMT_STS_plus_index_Outside
std::vector< int > DP_LK_EMT_NofRings_minus_Target
std::vector< std::vector< CbmMCTrack * > > Gammas_MC_two_Outside
std::vector< CbmStsTrack * > DP_LK_EMT_STS_plus_Outside
std::vector< CbmStsTrack * > DP_EMT_STS_minus_Outside
CbmKresConversionPhotons operator=(const CbmKresConversionPhotons &)
std::vector< KFParticle > DP_EMT_KFTrack_plus_Outside
std::vector< std::vector< int > > Gammas_stsIndex_zero_Outside
Here the ring is fitted with Taubin algorithm from A. Ayriyan, G. Ososkov, N. Chernov.
Hash for CbmL1LinkKey.