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#include "KFParticle/KFParticle.h"
17#include "LmvmKinePar.h"
18#include "TH2D.h"
19
20#include <TClonesArray.h>
21
23
24using namespace std;
25
27
28public:
29 //***** brief Standard constructor.
31 //***** brief Standard destructor.
33
34
35 void Init();
36 void InitHistograms();
37 void Finish();
38
39 void Exec(int fEventNumDP, double OpeningAngleCut, double GammaInvMassCut, int RealPID);
40
41 void SaveOutsideTracks(CbmMCTrack* mcTrack1, CbmStsTrack* stsTrack, double charge, int stsInd, int richInd,
42 int stsMcTrackId, CbmRichRing* RING);
43
44 void SaveTargetTracks(CbmMCTrack* mcTrack1, CbmStsTrack* stsTrack, TVector3 refmom, double charge, int stsInd,
45 int richInd, int stsMcTrackId, CbmRichRing* RING);
46
47 int FindInRich(int richInd, int stsMcTrackId);
48
49 int CheckIfElectron(CbmRichRing* ring, double momentum);
50
51 std::vector<TVector3> SaveAllHits(CbmStsTrack* track);
52
53 void FindGammasTarget(int EventNumMan, double AngleCut, double InvMassCut, int RealPID,
54 vector<CbmMCTrack*> MCtracks_minus, vector<CbmMCTrack*> MCtracks_plus,
55 vector<CbmStsTrack*> StsTrack_minus, vector<CbmStsTrack*> StsTrack_plus,
56 vector<TVector3> Momenta_minus, vector<TVector3> Momenta_plus, std::vector<int> Rings_minus,
57 std::vector<int> Rings_plus, std::vector<int> stsIndex_minus, std::vector<int> stsIndex_plus,
58 vector<CbmRichRing*> richRing_minus, vector<CbmRichRing*> richRing_plus);
59
60 void FindGammasOutside(int EventNumMan, double AngleCut, double InvMassCut, int RealPID,
61 vector<CbmMCTrack*> MCtracks_minus_Outside, vector<CbmMCTrack*> MCtracks_plus_Outside,
62 vector<CbmStsTrack*> StsTrack_minus_Outside, vector<CbmStsTrack*> StsTrack_plus_Outside,
63 std::vector<int> Rings_minus_Outside, std::vector<int> Rings_plus_Outside,
64 std::vector<int> stsIndex_minus_Outside, std::vector<int> stsIndex_plus_Outside,
65 vector<CbmRichRing*> richRing_minus_Outside, vector<CbmRichRing*> richRing_plus_Outside);
66
67 void FindGammasBoth();
68
69 double CalculatePlaneAngle_last_fromHits(std::vector<TVector3> track_1, std::vector<TVector3> track_2);
70
72
74
75 void DP_likesign_Mixing_Target(double AngleCut, double InvMassCut);
76
77 void DP_likesign_Mixing_Outside(double AngleCut, double InvMassCut);
78
79 void DP_Mixing_Target(double AngleCut, double InvMassCut);
80
81 void DP_Mixing_Outside(double AngleCut, double InvMassCut);
82
83
84private:
89
90
91 TClonesArray* fMcTracks;
92 TClonesArray* fGlobalTracks;
93 TClonesArray* fStsTracks;
94 TClonesArray* fStsTrackMatches;
95 TClonesArray* fRichProjections;
96 TClonesArray* fRichRings;
97 TClonesArray* fRichRingMatches;
98 TClonesArray* fRichHits;
99 TClonesArray* fArrayMvdHit;
100 TClonesArray* fArrayStsHit;
101
104
106
107 // charged tracks from outside
108 vector<CbmStsTrack*> VStsTrack_minus_Outside;
109 vector<CbmMCTrack*> VMCtracks_minus_Outside;
110 std::vector<int> VRings_minus_Outside;
111 std::vector<int> VStsIndex_minus_Outside;
112 vector<CbmRichRing*> VRichRing_minus_Outside;
113
114 vector<CbmStsTrack*> VStsTrack_plus_Outside;
115 vector<CbmMCTrack*> VMCtracks_plus_Outside;
116 std::vector<int> VRings_plus_Outside;
117 std::vector<int> VStsIndex_plus_Outside;
118 vector<CbmRichRing*> VRichRing_plus_Outside;
119
120
121 // charged tracks from the target
122 vector<CbmMCTrack*> VMCtracks_minus_Target;
123 vector<CbmStsTrack*> VStsTrack_minus_Target;
124 vector<TVector3> VMomenta_minus_Target;
125 std::vector<int> VRings_minus_Target;
126 std::vector<int> VStsIndex_minus_Target;
127 vector<CbmRichRing*> VRichRing_minus_Target;
128
129 vector<CbmMCTrack*> VMCtracks_plus_Target;
130 vector<CbmStsTrack*> VStsTrack_plus_Target;
131 vector<TVector3> VMomenta_plus_Target;
132 std::vector<int> VRings_plus_Target;
133 std::vector<int> VStsIndex_plus_Target;
134 vector<CbmRichRing*> VRichRing_plus_Target;
135
136
137 vector<TVector3> frefmomenta;
138 std::vector<int> frefId;
139 std::vector<CbmMCTrack*> fMCtracks;
140
141 // DP_LK_EMT Target
142 std::vector<TVector3> DP_LK_EMT_momenta_minus_Target;
144 std::vector<CbmStsTrack*> DP_LK_EMT_STS_minus_Target;
146
147 std::vector<TVector3> DP_LK_EMT_momenta_plus_Target;
149 std::vector<CbmStsTrack*> DP_LK_EMT_STS_plus_Target;
151
152 // DP_LK_EMT Outside
154 std::vector<CbmStsTrack*> DP_LK_EMT_STS_minus_Outside;
156
158 std::vector<CbmStsTrack*> DP_LK_EMT_STS_plus_Outside;
160
161
162 // DP_EMT Target
164 std::vector<TVector3> DP_EMT_momenta_minus_Target;
166 std::vector<std::vector<TVector3>> DP_EMT_Hits_minus_Target;
167
168 std::vector<int> DP_EMT_Event_plus_Target;
169 std::vector<TVector3> DP_EMT_momenta_plus_Target;
171 std::vector<std::vector<TVector3>> DP_EMT_Hits_plus_Target;
172
173 // DP_EMT Outside
175 std::vector<CbmStsTrack*> DP_EMT_STS_minus_Outside;
176 std::vector<KFParticle> DP_EMT_KFTrack_minus_Outside;
178 std::vector<std::vector<TVector3>> DP_EMT_Hits_minus_Outside;
179
181 std::vector<CbmStsTrack*> DP_EMT_STS_plus_Outside;
182 std::vector<KFParticle> DP_EMT_KFTrack_plus_Outside;
184 std::vector<std::vector<TVector3>> DP_EMT_Hits_plus_Outside;
185
186
187 // combined gammas from the target
188 std::vector<std::vector<TVector3>> Gammas_all_Target;
189 std::vector<std::vector<TVector3>> Gammas_zero_Target;
190 std::vector<std::vector<TVector3>> Gammas_one_Target;
191 std::vector<std::vector<TVector3>> Gammas_two_Target;
192 std::vector<std::vector<TVector3>> Gammas_onetwo_Target;
193
194 std::vector<std::vector<int>> Gammas_stsIndex_all_Target;
195 std::vector<std::vector<int>> Gammas_stsIndex_zero_Target;
196 std::vector<std::vector<int>> Gammas_stsIndex_one_Target;
197 std::vector<std::vector<int>> Gammas_stsIndex_two_Target;
198 std::vector<std::vector<int>> Gammas_stsIndex_onetwo_Target;
199
200 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_all_Target;
201 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_zero_Target;
202 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_one_Target;
203 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_two_Target;
204 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_onetwo_Target;
205
206
207 // combined gammas from outside
208 std::vector<std::vector<TVector3>> Gammas_all_Outside;
209 std::vector<std::vector<TVector3>> Gammas_zero_Outside;
210 std::vector<std::vector<TVector3>> Gammas_one_Outside;
211 std::vector<std::vector<TVector3>> Gammas_two_Outside;
212 std::vector<std::vector<TVector3>> Gammas_onetwo_Outside;
213
214 std::vector<std::vector<int>> Gammas_stsIndex_all_Outside;
215 std::vector<std::vector<int>> Gammas_stsIndex_zero_Outside;
216 std::vector<std::vector<int>> Gammas_stsIndex_one_Outside;
217 std::vector<std::vector<int>> Gammas_stsIndex_two_Outside;
218 std::vector<std::vector<int>> Gammas_stsIndex_onetwo_Outside;
219
220 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_all_Outside;
221 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_zero_Outside;
222 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_one_Outside;
223 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_two_Outside;
224 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_onetwo_Outside;
225
226
227 // combined gammas from the target and outside together
228 std::vector<std::vector<TVector3>> Gammas_all_Both;
229 std::vector<std::vector<TVector3>> Gammas_zero_Both;
230 std::vector<std::vector<TVector3>> Gammas_one_Both;
231 std::vector<std::vector<TVector3>> Gammas_two_Both;
232 std::vector<std::vector<TVector3>> Gammas_onetwo_Both;
233
234 std::vector<std::vector<int>> Gammas_stsIndex_all_Both;
235 std::vector<std::vector<int>> Gammas_stsIndex_zero_Both;
236 std::vector<std::vector<int>> Gammas_stsIndex_one_Both;
237 std::vector<std::vector<int>> Gammas_stsIndex_two_Both;
238 std::vector<std::vector<int>> Gammas_stsIndex_onetwo_Both;
239
240 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_all_Both;
241 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_zero_Both;
242 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_one_Both;
243 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_two_Both;
244 std::vector<std::vector<CbmMCTrack*>> Gammas_MC_onetwo_Both;
245
246
247 // histograms
248 // Target
252
253 // Outside
257
258 // Both
259 vector<TH1*> fHistoList_dp_Both;
266
267
281
294
307
308
309 // Target => all
320
321 // Target => zero
332
333 // Target => one
344
345 // Target => two
361
376
377
378 // Target => onetwo
394
409
410
411 // Outside => all
422
423 // Outside => zero
434
435 // Outside => one
446
447 // Outside => two
477
478 // Outside => onetwo
508
509
510 // Both => all
522
523 // Both => zero
535
536 // Both => one
548
549 // Both => two
564
565 // Both => onetwo
580
581
582 // EMT DP target
588
589 // EMT DP Outside
595
596 // EMT DP Both
602
609
615
622
629
635
642
643
644 //***** brief Copy constructor.
646
647 //***** brief Assignment operator.
649
650
651 ClassDef(CbmKresConversionPhotons, 1)
652};
653
654#endif
Here the ring is fitted with Taubin algorithm from A. Ayriyan, G. Ososkov, N. Chernov.
Data class for STS tracks.
int Int_t
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.