CbmRoot
L1AlgoTBB.h
Go to the documentation of this file.
1 #ifndef L1AlgoTBB_h
2 #define L1AlgoTBB_h
3 
4 
5 #include "L1Algo.h"
6 
7 #ifdef TBB
8 
9 #include "tbb/blocked_range.h"
10 #include "tbb/parallel_for.h"
11 #include "tbb/task_scheduler_init.h"
12 using namespace tbb;
13 
14 class ParalleledDup {
15  // input
16  int isec;
17  L1Station* vStations;
18  int NStations;
19  Tindex* StsHitsStartIndex;
20  Tindex* StsHitsStopIndex;
21  vector<unsigned char>& vSFlag;
22  vector<unsigned char>& vSFlagB;
23  std::vector<L1HitPoint>& vStsHits;
24  double Pick_r;
25  double Pick_m;
26  double MaxInvMom;
27  fvec targX;
28  fvec targY;
29  fvec targZ;
30  L1FieldValue& targB;
31  L1XYMeasurementInfo& TargetXYInfo;
32 
33  Tindex* n_g1;
34  unsigned* portionStopIndex;
35  L1TrackPar* T_g1;
36  L1FieldRegion* fld_g1;
37  THitI* hitsl_g1;
38  // fvec *x_minusV_g1; fvec *x_plusV_g1; fvec *y_minusV_g1; fvec *y_plusV_g1;
39  // output
40  THitI* Duplets_start;
41  THitI* Duplets_hits;
42 
43  Tindex* n_g2;
44  THitI* i1_g2;
45  // L1TrackPar *T_g2;
46  // L1FieldRegion *fld_g2;
47  // fvec *u_front_g2; fvec *u_back_g2;
48  // THitI *hitsl_g2;
49  THitI* hitsm_g2;
50  // fvec *x_minusV_g2; fvec *x_plusV_g2; fvec *y_minusV_g2; fvec *y_plusV_g2;
51 
52 public:
53  void operator()(const blocked_range<size_t>& r) const;
54 
55  ParalleledDup(
56  // input
57  int isec_,
58  L1Station* vStations_,
59  int NStations_,
60  Tindex* StsHitsStartIndex_,
61  Tindex* StsHitsStopIndex_,
62  vector<unsigned char>& vSFlag_,
63  vector<unsigned char>& vSFlagB_,
64  std::vector<L1HitPoint>& vStsHits_,
65  double Pick_r_,
66  double Pick_m_,
67  double MaxInvMom_,
68  fvec targX_,
69  fvec targY_,
70  fvec targZ_,
71  L1FieldValue& targB_,
72  L1XYMeasurementInfo& TargetXYInfo_,
73 
74  Tindex* n_g1_,
75  unsigned* portionStopIndex_,
76  L1TrackPar* T_g1_,
77  L1FieldRegion* fld_g1_,
78  THitI* hitsl_g1_,
79  // fvec *x_minusV_g1_, fvec *x_plusV_g1_, fvec *y_minusV_g1_, fvec *y_plusV_g1_,
80  // output
81  THitI* Duplets_start_,
82  THitI* Duplets_hits_,
83 
84  Tindex* n_g2_,
85  THitI* i1_g2_,
86  // L1TrackPar *T_g2_,
87  // L1FieldRegion *fld_g2_,
88  // fvec *u_front_g2_, fvec *u_back_g2_,
89  // THitI *hitsl_g2_,
90  THitI* hitsm_g2_
91  // fvec *x_minusV_g2_, fvec *x_plusV_g2_, fvec *y_minusV_g2_, fvec *y_plusV_g2_
92  )
93  : isec(isec_)
94  , vStations(vStations_)
95  , NStations(NStations_)
96  , StsHitsStartIndex(StsHitsStartIndex_)
97  , StsHitsStopIndex(StsHitsStopIndex_)
98  , vSFlag(vSFlag_)
99  , vSFlagB(vSFlagB_)
100  , vStsHits(vStsHits_)
101  , Pick_r(Pick_r_)
102  , Pick_m(Pick_m_)
103  , MaxInvMom(MaxInvMom_)
104  , targX(targX_)
105  , targY(targY_)
106  , targZ(targZ_)
107  , targB(targB_)
108  , TargetXYInfo(TargetXYInfo_)
109  ,
110 
111  n_g1(n_g1_)
112  , portionStopIndex(portionStopIndex_)
113  , T_g1(T_g1_)
114  , fld_g1(fld_g1_)
115  , hitsl_g1(hitsl_g1_)
116  ,
117  // x_minusV_g1(x_minusV_g1_), x_plusV_g1(x_plusV_g1_), y_minusV_g1(y_minusV_g1_), y_plusV_g1(y_plusV_g1_),
118  // output
119  Duplets_start(Duplets_start_)
120  , Duplets_hits(Duplets_hits_)
121  ,
122 
123  n_g2(n_g2_)
124  , i1_g2(i1_g2_)
125  ,
126  // T_g2(T_g2_),
127  // fld_g2(fld_g2_),
128  // u_front_g2(u_front_g2_), u_back_g2(u_back_g2_),
129  // hitsl_g2(hitsl_g2_),
130  hitsm_g2(hitsm_g2_)
131  // x_minusV_g2(x_minusV_g2_), x_plusV_g2(x_plusV_g2_), y_minusV_g2(y_minusV_g2_), y_plusV_g2(y_plusV_g2_)
132  {};
133 
134  ~ParalleledDup() {};
135 };
136 
137 void ParalleledDup::operator()(const blocked_range<size_t>& r) const {
138 
139  for (Tindex istal = r.begin(); istal < (Tindex) r.end(); ++istal) {
140  // cout<< " ParalleledDup::operator(). Station: " << istal << endl;
141  DupletsStaPort( // input
142  isec,
143  istal,
144  vStsHits,
145  targX,
146  targY,
147  targZ,
148  targB,
149  TargetXYInfo,
150 
151  n_g1,
152  portionStopIndex,
153  T_g1,
154  fld_g1,
155  hitsl_g1,
156  // x_minusV_g1, x_plusV_g1, y_minusV_g1, y_plusV_g1,
157  // output
158  Duplets_start,
159  Duplets_hits,
160 
161  n_g2,
162  i1_g2,
163  // T_g2,
164  // fld_g2,
165  // u_front_g2, u_back_g2,
166  // hitsl_g2,
167  hitsm_g2
168  // x_minusV_g2, x_plusV_g2, y_minusV_g2, y_plusV_g2
169  );
170  }
171 }
172 
173 
174 class ParalleledTrip {
175  // input
176  int isec;
177  L1Station* vStations;
178  int NStations;
179  Tindex* StsHitsStartIndex;
180  Tindex* StsHitsStopIndex;
181  std::vector<L1HitPoint>& svStsHits;
182  double Pick_r;
183  double TRACK_CHI2_CUT;
184  double MaxInvMom;
185 
186  Tindex* n_g1;
187  L1TrackPar* T_g1;
188  L1FieldRegion* fld_g1;
189  THitI* hitsl_g1;
190 
191  Tindex* n_g2;
192  unsigned* portionStopIndex;
193  THitI* i1_g2;
194  /* L1FieldRegion *fld_g2;
195  fvec *u_front_g2; fvec *u_back_g2;
196  L1TrackPar *T_g2;*/
197  // THitI *hitsl_g2;
198  THitI* hitsm_g2;
199  // fvec *x_minusV_g2; fvec *x_plusV_g2; fvec *y_minusV_g2; fvec *y_plusV_g2;
200  // output
201  THitI* Duplets_start;
202  THitI* Duplets_hits;
203  std::vector<L1Triplet>* vTriplets_part;
204  unsigned* TripStartIndexH;
205  unsigned* TripStopIndexH;
206 
207 public:
208  void operator()(const blocked_range<size_t>& r) const;
209 
210  ParalleledTrip(
211  // input
212  int isec_,
213  L1Station* vStations_,
214  int NStations_,
215  Tindex* StsHitsStartIndex_,
216  Tindex* StsHitsStopIndex_,
217  std::vector<L1HitPoint>& vStsHits_,
218  double Pick_r_,
219  double TRACK_CHI2_CUT_,
220  double MaxInvMom_,
221 
222  Tindex* n_g1_,
223  L1TrackPar* T_g1_,
224  L1FieldRegion* fld_g1_,
225  THitI* hitsl_g1_,
226 
227  Tindex* n_g2_,
228  unsigned* portionStopIndex_,
229  THitI* i1_g2_,
230  /*L1FieldRegion *fld_g2_,
231  fvec *u_front_g2_, fvec *u_back_g2_,
232  L1TrackPar *T_g2_,*/
233  // THitI *hitsl_g2_,
234  THitI* hitsm_g2_,
235  // fvec *x_minusV_g2_, fvec *x_plusV_g2_, fvec *y_minusV_g2_, fvec *y_plusV_g2_,
236  // output
237  THitI* Duplets_start_,
238  THitI* Duplets_hits_,
239  std::vector<L1Triplet>* vTriplets_part_,
240  unsigned* TripStartIndexH_,
241  unsigned* TripStopIndexH_)
242  : // input
243  isec(isec_)
244  , vStations(vStations_)
245  , NStations(NStations_)
246  , StsHitsStartIndex(StsHitsStartIndex_)
247  , StsHitsStopIndex(StsHitsStopIndex_)
248  , svStsHits(vStsHits_)
249  , Pick_r(Pick_r_)
250  , TRACK_CHI2_CUT(TRACK_CHI2_CUT_)
251  , MaxInvMom(MaxInvMom_)
252  ,
253 
254  n_g1(n_g1_)
255  , T_g1(T_g1_)
256  , fld_g1(fld_g1_)
257  , hitsl_g1(hitsl_g1_)
258  ,
259 
260  n_g2(n_g2_)
261  , portionStopIndex(portionStopIndex_)
262  , i1_g2(i1_g2_)
263  ,
264  /* fld_g2(fld_g2_),
265  u_front_g2(u_front_g2_), u_back_g2(u_back_g2_),
266  T_g2(T_g2_),*/
267  // hitsl_g2(hitsl_g2_),
268  hitsm_g2(hitsm_g2_)
269  ,
270  // x_minusV_g2(x_minusV_g2_), x_plusV_g2(x_plusV_g2_), y_minusV_g2(y_minusV_g2_), y_plusV_g2(y_plusV_g2_),
271  // output
272  Duplets_start(Duplets_start_)
273  , Duplets_hits(Duplets_hits_)
274  , vTriplets_part(vTriplets_part_)
275  , TripStartIndexH(TripStartIndexH_)
276  , TripStopIndexH(TripStopIndexH_) {};
277 
278  ~ParalleledTrip() {};
279 };
280 
281 void ParalleledTrip::operator()(const blocked_range<size_t>& r) const {
282 
283  for (Tindex istal = r.begin(); istal < (Tindex) r.end(); ++istal) {
284  // cout<< " ParalleledTrip::operator(). Station: " << istal << endl;
285  TripletsStaPort( // input
286  isec,
287  istal,
288  svStsHits,
289  n_g1,
290  T_g1,
291  fld_g1,
292  hitsl_g1,
293 
294  n_g2,
295  portionStopIndex,
296  i1_g2,
297  /* fld_g2,
298  u_front_g2, u_back_g2,
299  T_g2,*/
300  // hitsl_g2,
301  hitsm_g2,
302  // x_minusV_g2, x_plusV_g2, y_minusV_g2, y_plusV_g2,
303  // output
304  Duplets_start,
305  Duplets_hits,
306  vTriplets_part,
307  TripStartIndexH,
308  TripStopIndexH);
309  }
310 }
311 #endif // TBB
312 
313 #endif
L1Algo.h
F32vec4
Definition: L1/vectors/P4_F32vec4.h:47
L1Station
Definition: L1Station.h:9
NStations
const int NStations
Definition: L1AlgoPulls.h:9
THitI
unsigned int THitI
Definition: L1StsHit.h:8
L1FieldRegion
Definition: L1Field.h:85
L1XYMeasurementInfo
Definition: L1XYMeasurementInfo.h:7
Tindex
int Tindex
Definition: L1Algo.h:76
L1TrackPar
Definition: L1TrackPar.h:6
L1FieldValue
Definition: L1Field.h:11