HYDRA_development_version
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
hpiontrackertrackf.cc
Go to the documentation of this file.
1 //_HADES_CLASS_DESCRIPTION
2 ////////////////////////////////////////////////////////////////
3 //
4 // HPionTrackerTrackF:
5 //
6 // Track finder of the PionTracker
7 //
8 ////////////////////////////////////////////////////////////////
9 
10 #include "hpiontrackertrackf.h"
11 #include "hpiontrackerdef.h"
12 #include "hpiontrackerhit.h"
13 #include "hpiontrackertrack.h"
14 #include "hpiontrackerdetector.h"
15 #include "hpiontrackertrackfpar.h"
16 #include "hpiontrackermompar.h"
17 #include "hpiontrackermomrunpar.h"
18 #include "hpiontrackerbeampar.h"
19 #include "HBeam.h"
20 
21 #include "hades.h"
22 #include "hcategory.h"
23 #include "hdebug.h"
24 #include "hevent.h"
25 #include "hiterator.h"
26 #include "hruntimedb.h"
27 #include "hrun.h"
28 #include "hspectrometer.h"
29 
30 #include <iomanip>
31 #include <iostream>
32 #include <algorithm>
33 #include <vector>
34 #include <fstream>
35 #include <cmath>
36 #include <stdlib.h>
37 #include <string.h>
38 using namespace std;
39 
40 #define PR(x) std::cout << "++DEBUG: " << #x << " = |" << x << "| (" << __FILE__ << ", " << __LINE__ << ")\n";
41 #define PRh(x) std::cout << "++DEBUG: " << #x << " = hex |" << std::hex << x << std::dec << "| (" << __FILE__ << ", " << __LINE__ << ")\n";
42 
43 //typedef std::vector<int> test;
44 
46 
47 
48  //#define USE_FILE 1 // uncomment for using file input
49  //#define USE_FILE_SCAN 1 // uncomment for using file input
50 
51 
52 
53  //-------------------transport coefficent to the HADES target-------for angular variables-----------------/////////
54 
55 
56 
58 {
59  initVars();
60  correction.clear();
61  memset(corrs, 0, 2* sizeof(Double_t));
62 }
63 
64 HPionTrackerTrackF::HPionTrackerTrackF (const Text_t * name, const Text_t * title, Bool_t skip)
65 : HReconstructor (name, title)
66 {
67  // constructor
68  // the parameter "skip" (default; kFALSE) defines, if the event is skipted in case no hit can be reconstructed
69  initVars();
70  correction.clear();
71  memset(corrs, 0, 2* sizeof(Double_t));
72 }
73 
75 {
76  //destructor deletes the iterator on the raw category
77  if (NULL != iter)
78  {
79  delete iter;
80  iter = NULL;
81  }
82 }
83 
85 {
86  pHitCat = NULL;
87  pTrackCat = NULL;
88  iter = NULL;
89  pTrackfpar = NULL;
90  pTrackBeampar = NULL;
91  idet1 = 0;
92  idet2 = 1;
93 
94  id_det1 =16; // element detector_1
95  id_det2 =25; // element detector_2
96  id_outQ9=29; // element out_Q9
97  id_targ =32; // element target
98 
99  // Setting transport matrix elements for det1 position
100  // element ID 16 detector_1
101  T12[idet1] = -0.03919;
102  T14[idet1] = -0.00111;
103  T16[idet1] = -0.81235;
104  T32[idet1] = -0.01312;
105  T33[idet1] = -18.281;
106  T34[idet1] = -0.00298;
107  T36[idet1] = 0.3955;
108  T126[idet1] = 0.03095;
109  T146[idet1] = -0.0003049;
110  T166[idet1] = 0.005611;
111  T336[idet1] = 0.216;
112  T346[idet1] = 0.0263;
113  T366[idet1] = -0.003661;
114 
115  // Setting transport matrix elements for det2 position
116  // element ID 25 detector_2
117  T12[idet2] = -0.47448;
118  T14[idet2] = 0.00006;
119  T16[idet2] = -0.03413;
120  T32[idet2] = -0.06929;
121  T33[idet2] = -67.86523;
122  T34[idet2] = -0.08382;
123  T36[idet2] = 1.42422;
124  T126[idet2] = -0.0308;
125  T146[idet2] = 0.0008834;
126  T166[idet2] = -0.02265;
127  T336[idet2] = 0.8774;
128  T346[idet2] = 0.09678;
129  T366[idet2] = -0.01531;
130 
131 
132  //-------------------transport coefficent to the HADES target-------for angular variables-----------------/////////
133  // element ID 29 out_Q9
134  T12_t = -0.12828;
135  T14_t = 0.00014;
136  T16_t = 0.00700;
137  T126_t = -0.04456;
138  T146_t = 0.001482;
139  T166_t = -0.007186;
140  T32_t = -0.05304;
141  T33_t = -49.73210;
142  T34_t = -0.06448;
143  T36_t = 0.99967 ;
144  T326_t = -0.0009558;
145  T336_t = 0.08271;
146  T346_t = 0.07017;
147  T366_t = 0.0005012;
148  // element ID 32 target
149  T21_t = 3.76702;
150  T22_t = 0.57575;
151  T23_t = -1.16249;
152  T24_t = 0.00019;
153  T26_t = 0.07783;
154  T226_t = -0.04209;
155  T246_t = 0.001718;
156  T266_t = 0.02538;
157  T41_t = 1.00162;
158  T42_t = 0.26582;
159  T43_t = 263.23;
160  T44_t = 0.32118; // wrong from 25.4.2014 xls 0.32059;
161  T46_t = -5.58106;
162  T426_t = - 0.003304;
163  T436_t = - 8.291; //- 8.383; // xls changed 6.5.2014
164  T446_t = - 0.3796; //- 0.3817; // xls changed 6.5.2014
165  T466_t = 0.1623;
166 
167  nev = 0;
168 
169 #ifdef USE_FILE
170  inputpos.open("trackdetpos-g05x-g05y.txt");
171 #endif
172 
173 
174 
175 
176 }
177 
178 Bool_t HPionTrackerTrackF::momrec (Float_t x1, Float_t y1, Float_t x2, Float_t y2, Float_t momref, track & tr)
179 {
180  // Input: x and y position at det1 and det2 (in cm)
181  // reference beam momentum (GeV/c)
182  // Output: reconstructed momentum vector (GeV/c)
183  // theta and phi angle at hades point (rad)
184 
185  // Solve equation in delta: a_0+a_1*delta+a_2*delta^2+a_3*delta^3
186  // numerically starting from delta =3
187 
188  //--------MOMENTUM SELECTION PARAMETERS -----------------
189  Int_t yy_weight = pTrackerMompar->getYYWeight();
190  Float_t yy_slope = pTrackerMompar->getYYSlope();
191  Float_t yy_offset = pTrackerMompar->getYYOffset();
192  Int_t mom_weight = pTrackerMompar->getMomWeight();
193  //cout << "mom_weight: " << mom_weight << endl;
194  Float_t mom_maxt = corrs[0] - corrs[1];
195  Float_t mom_offset = - corrs[1];
196  //cout << "corr0: " << corrs[0] << endl;
197  //-------------------------------------------------------
198 
199  tr.fX1 = x1;
200  tr.fY1 = y1;
201  tr.fX2 = x2;
202  tr.fY2 = y2;
203 
204  Double_t a_3 = T126[idet2] * T166[idet1] - T126[idet1] * T166[idet2];
205  Double_t a_2 = T12[idet2] * T166[idet1] - T12[idet1]*T166[idet2] +
206  T16[idet1] * T126[idet2] - T16[idet2] * T126[idet1];
207  Double_t a_1 = T12[idet2] * T16[idet1] - T12[idet1] * T16[idet2] -
208  x1 * T126[idet2] + x2 * T126[idet1];
209  Double_t a_0 = x2 * T12[idet1] - x1 * T12[idet2];
210 
211  Double_t sol = 0.;
212  Double_t yyy1 = 0.;
213  Double_t yyp1 = 0.;
214 
215  for (Int_t isol = 1; isol < 4; ++isol)
216  {
217  yyy1 = a_3 *sol * sol * sol + a_2 * sol *sol + a_1 * sol + a_0;
218  yyp1 = 3.* a_3 * sol * sol + 2. * a_2 * sol + a_1;
219  sol = sol - yyy1 / yyp1;
220  }
221 
222  Double_t alfa = 0, beta = 0, gamma = 0, deter = 0, xdetc1 = 0, xdetc2 = 0,alfap = 0,betap = 0, gammap = 0, sol1 = 0,theta1 = 0, yci1 = 0, phi1 = 0, x_0 = 0;
223  Double_t theta,/* yci,*/ phi;
224 
225  // calculate the theta value from the theta(delta) system
226 
227  theta = (x1-T16[idet1]*sol-T166[idet1]*sol*sol);
228  theta = theta/(T12[idet1]+T126[idet1]*sol);
229 
230  // Solving the linear sytem :
231 
232  alfa = T33[idet1]+T336[idet1]*sol;
233  beta =T34[idet1]+T346[idet1]*sol;
234  gamma = y1-T32[idet1]*theta -T36[idet1]*sol-T366[idet1]*sol*sol;
235  alfap = T33[idet2]+T336[idet2]*sol;
236  betap = T34[idet2]+T346[idet2]*sol;
237  gammap = y2 -T32[idet2] * theta - T36[idet2] * sol - T366[idet2] * sol * sol;
238  deter = alfa*betap-alfap*beta;
239  //yci = (gamma*betap-beta*gammap)/deter;
240  phi = (alfa*gammap-gamma*alfap)/deter;
241 
242  xdetc1 = x1 - T14[idet1]*phi - T146[idet1]*phi*sol;
243  xdetc2 = x2 - T14[idet2]*phi - T146[idet2]*phi*sol;
244 
245  // Solve again equation in delta: a_0+a_1*delta+a_2*delta^2+a_3*delta^3
246  // using xdetc1 and xdetc2 and starting from last found delta value
247 
248  a_3 = T126[idet2] * T166[idet1] - T126[idet1] * T166[idet2];
249  a_2 = T12[idet2] * T166[idet1] - T12[idet1]*T166[idet2] +
250  T16[idet1] * T126[idet2] - T16[idet2] * T126[idet1];
251  a_1 = T12[idet2] * T16[idet1] - T12[idet1] * T16[idet2] -
252  xdetc1 * T126[idet2] + xdetc2 * T126[idet1];
253  a_0 = xdetc2 * T12[idet1] - xdetc1 * T12[idet2];
254 
255  sol1=sol;
256 
257  for (Int_t isol = 1; isol < 4; ++isol)
258  {
259  yyy1 = a_3 * sol1 * sol1 * sol1 + a_2 * sol1 * sol1 + a_1 * sol1 + a_0;
260  yyp1 = 3.* a_3 * sol1 * sol1 + 2. * a_2 * sol1 + a_1;
261  sol1 = sol1-yyy1/yyp1;
262  // cout << " step " << isol << "delta = " << sol1 << endl;
263  //std::cout<<"print 2"<<endl;
264  }
265  //cout << "parameters = " << a_3 << " " << a_2 << " " << a_1 << " " << a_0 << endl;
266  //cout << "positions (cm) = " << x1 << " " << y1 << " " << x2 << " " << y2 << endl;
267 
268  // calculate the theta value from the theta(delta) system for new delta value
269 
270  theta1 = (xdetc1-T16[idet1]*sol1-T166[idet1]*sol1*sol1) / (T12[idet1] + T126[idet1]*sol1);
271 
272  // Solving again the linear system with the new delta value:
273 
274  alfa = T33[idet1]+T336[idet1]*sol1;
275  beta = T34[idet1]+T346[idet1]*sol1;
276  gamma = y1-T32[idet1]*theta1 -T36[idet1]*sol1-T366[idet1]*sol1*sol1;
277  alfap = T33[idet2]+T336[idet2]*sol1;
278  betap = T34[idet2]+T346[idet2]*sol1;
279  gammap = y2-T32[idet2]*theta1 - T36[idet2]*sol1 - T366[idet2]*sol1*sol1;
280  deter = alfa * betap -alfap * beta;
281  yci1 = (gamma * betap - beta * gammap)/deter;
282  phi1 = (alfa * gammap - gamma * alfap)/deter;
283 
284  // at the production target
285  tr.fPhi0 = phi1/1000.;
286  tr.fTheta0 = theta1/1000.;
287  tr.fY0 = yci1;
288  //cout << "y0" << tr.fY0 << "" << yci1 <<endl;
289  // calculating the final theta and phi at hades position and converting them in rad (from mrad)
290 
291  Float_t Theta_hades = T21_t*x_0+T22_t*theta1+T23_t*yci1+T24_t*phi1+T26_t*sol1+T226_t*theta1*sol1+T246_t*phi1*sol1+T266_t*sol1*sol1;
292  Float_t Phi_hades = T41_t*x_0+T42_t*theta1+T43_t*yci1+T44_t*phi1+T46_t*sol1+T426_t*theta1*sol1+T436_t*yci1*sol1+T446_t*phi1*sol1+T466_t*sol1*sol1;
293 
294  Float_t x_hades = T12_t*theta1+T14_t*phi1+T16_t*sol1+T126_t*theta1*sol1+T146_t*phi1*sol1+T166_t*sol1*sol1;
295  Float_t y_hades = T32_t*theta1+T33_t*yci1+T34_t*phi1+T36_t*sol1+T336_t*yci1*sol1+T346_t*phi1*sol1+T366_t*sol1*sol1;
296 
297  // at the hades target
298  tr.fTheta = Theta_hades/1000.;
299  tr.fPhi = Phi_hades/1000.;
300  tr.fXh = x_hades;
301  tr.fYh = y_hades;
302 
303  // calculating the reconstructed momentum and its 3 components
304  tr.fP = momref * (1. + sol1/100. )+mom_offset;
305  /* cout << "mom: " << momref * (1. + sol1/100. ) << endl;
306  cout << "mom_offset: " << mom_offset << endl;
307  cout << "mom after corr: " << momref * (1. + sol1/100. )+mom_offset << endl;*/
308 
309  //--------------------------------------------
310  // DIST FOR MOMENTUM SELECTION
311  Float_t RecMom = momref * (1. + sol1/100. )+mom_offset;
312  Float_t MaxMom = mom_maxt;
313  //cout << "max transmission: " << mom_maxt << endl;
314  tr.fDist = sqrt(yy_weight*pow((-yy_slope * y1 + y2 - yy_offset)/sqrt(pow(yy_slope,2) + 1.0),2) + mom_weight * pow((MaxMom - RecMom),2));
315  //-------------------------------------------
316 
317 
318  // cout << "momentum = " << tr.fP << " for a nominal of " << momref << " (" << (momref-tr.fP)/tr.fP << ")" << endl;
319 
320  // this part is not needed, we get px, py, pz from p, theta, phi by TVector3
321  // Float_t denom = sqrt(1. + pow( TMath::Tan(theta_h),2.) + pow( TMath::Tan(phi_h),2.) );
322  // tr.fPx = ( tr.fP * TMath::Tan(theta_h))/denom;
323  // tr.fPy = ( tr.fP * TMath::Tan(phi_h))/denom;
324  // tr.fPz = ( tr.fP )/denom;
325 
326  return kTRUE;
327 }
328 
330 {
331  // gets the parameter containers
332  // gets the PionTrackerCal category and creates the PionTrackerTrack category
333  // creates an iterator which loops over all fired strips in PionTrackerCal
334 
335  HPionTrackerDetector * det = (HPionTrackerDetector *) gHades->getSetup()->getDetector ("PionTracker");
336 
337  if (!det)
338  {
339  Error ("init", "No PionTracker found.");
340  return kFALSE;
341  }
342 
343  pTrackfpar = (HPionTrackerTrackFPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerTrackFPar");
344  if (!pTrackfpar) return kFALSE;
345 
346  pTrackBeampar = (HPionTrackerBeamPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerBeamPar");
347  if (!pTrackBeampar) {
348  Error ("init", "Could not retrieve HPionTrackerBeamPar!");
349  return kFALSE;
350  }
351 
353 
354  if (!pHitCat)
355  {
356  Error ("init()", "HPionTrackerhit category not available!");
357  return kFALSE;
358  }
359 
360  //----------------------------------------------
361  // MOMENTUM SELECTION & CALIBRATION
362  pTrackerMompar = (HPionTrackerMomPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerMomPar");
363  if (!pTrackerMompar)
364  {
365  Error ("init", "Could not retrieve HPionTrackerMomPar!");
366  return kFALSE;
367  }
368  pTrackerMomRunpar = (HPionTrackerMomRunPar *) gHades->getRuntimeDb()->getContainer ("PionTrackerMomRunPar");
369  if (!pTrackerMomRunpar)
370  {
371  Error ("init", "Could not retrieve HPionTrackerBeamRunPar!");
372  return kFALSE;
373  }
374  //-----------------------------------------------
375 
376  iter = (HIterator *) pHitCat->MakeIterator();
377  lochit.set(2, 0, 0);
378 
380  if (!pTrackCat) return kFALSE;
381 
382  loc.set(0);
383 
384  fActive = kTRUE;
385 
386  return kTRUE;
387 }
389 {
390  if(pTrackBeampar) {
391 
396 
397  if(edet1&&edet2&&eoutQ9&&etarg){
398 
399  //------------------------------------------------------------
400  // Setting transport matrix elements for det1 position
401  // element ID 16 detector_1
402  T12[idet1] = edet1->Tij[0][1];
403  T14[idet1] = edet1->Tij[0][3];
404  T16[idet1] = edet1->Tij[0][4];
405 
406  T32[idet1] = edet1->Tij[2][1];
407  T33[idet1] = edet1->Tij[2][2];
408  T34[idet1] = edet1->Tij[2][3];
409  T36[idet1] = edet1->Tij[2][4];
410 
411  T126[idet1] = edet1->Tijk[0][1][4];
412  T146[idet1] = edet1->Tijk[0][3][4];
413  T166[idet1] = edet1->Tijk[0][4][4];
414 
415  T336[idet1] = edet1->Tijk[2][2][4];
416  T346[idet1] = edet1->Tijk[2][3][4];
417  T366[idet1] = edet1->Tijk[2][4][4];
418 
419  // Setting transport matrix elements for det2 position
420  // element ID 25 detector_2
421  T12[idet2] = edet2->Tij[0][1];
422  T14[idet2] = edet2->Tij[0][3];
423  T16[idet2] = edet2->Tij[0][4];
424 
425  T32[idet2] = edet2->Tij[2][1];
426  T33[idet2] = edet2->Tij[2][2];
427  T34[idet2] = edet2->Tij[2][3];
428  T36[idet2] = edet2->Tij[2][4];
429 
430  T126[idet2] = edet2->Tijk[0][1][4];
431  T146[idet2] = edet2->Tijk[0][3][4];
432  T166[idet2] = edet2->Tijk[0][4][4];
433 
434  T336[idet2] = edet2->Tijk[2][2][4];
435  T346[idet2] = edet2->Tijk[2][3][4];
436  T366[idet2] = edet2->Tijk[2][4][4];
437 
438  //-------------------transport coefficent to the HADES target-------for angular variables-----------------/////////
439  // element ID 29 out_Q9
440  T12_t = eoutQ9->Tij[0][1];
441  T14_t = eoutQ9->Tij[0][3];
442  T16_t = eoutQ9->Tij[0][4];
443  T32_t = eoutQ9->Tij[2][1];
444  T33_t = eoutQ9->Tij[2][2];
445  T34_t = eoutQ9->Tij[2][3];
446  T36_t = eoutQ9->Tij[2][4];
447  T126_t = eoutQ9->Tijk[0][1][4];
448  T146_t = eoutQ9->Tijk[0][3][4];
449  T166_t = eoutQ9->Tijk[0][4][4];
450  T326_t = eoutQ9->Tijk[2][1][4];
451  T336_t = eoutQ9->Tijk[2][2][4];
452  T346_t = eoutQ9->Tijk[2][3][4];
453  T366_t = eoutQ9->Tijk[2][4][4];
454  // element ID 32 target
455  T21_t = etarg->Tij[1][0];
456  T22_t = etarg->Tij[1][1];
457  T23_t = etarg->Tij[1][2];
458  T24_t = etarg->Tij[1][3];
459  T26_t = etarg->Tij[1][4];
460  T41_t = etarg->Tij[3][0];
461  T42_t = etarg->Tij[3][1];
462  T43_t = etarg->Tij[3][2];
463  T44_t = etarg->Tij[3][3];
464  T46_t = etarg->Tij[3][4];
465  T226_t = etarg->Tijk[1][1][4];
466  T246_t = etarg->Tijk[1][3][4];
467  T266_t = etarg->Tijk[1][4][4];
468  T426_t = etarg->Tijk[3][1][4];
469  T436_t = etarg->Tijk[3][2][4];
470  T446_t = etarg->Tijk[3][3][4];
471  T466_t = etarg->Tijk[3][4][4];
472 
473 
474  } else {
475  Error ("reinit", "Could not retrieve beam elements from HPionTrackerBeamPar!");
476  return kFALSE;
477  }
478 
479  } else return kFALSE;
480 
481  {// return kTRUE;
482  // ------------------------------------------------------------------------
483  // MOMENTUM CORRECTION PER RUN
484  // {
485  memset(corrs, 0, 2*sizeof(Double_t));
486 
487  if(!pTrackerMomRunpar)
488  {
489  Error ("reinit", "Could not retrieve params from HPionTrackerMomRunPar!");
490  return kFALSE;
491  }
492 
493  Int_t runID = gHades->getRuntimeDb()->getCurrentRun()->getRunId();
494  correction.clear();
496  for (Int_t i =0; i < correction.getNVals(); ++i)
497  {
498  corrs[i] = correction.getVal(i);
499  }
500  }
501 
502  return kTRUE;
503  // ------------------------------------------------------------------------
504 }
506 {
507  Float_t x1, x2, y1, y2, z1, z2; //, x_l,x_u,y_l,y_u;
508  // make hits
509  HPionTrackerHit *pHit0 = NULL, *pHit1 = NULL;
510 
511  //------------
512  // MOMENTUM SELECTION
513  std::vector<track> trackcan;
514  trackcan.clear();
515  //------------
516  track tr;
517 
518  Int_t cnt0 = 0;
519  while (true) // plane 0, det1
520  {
521 
522  Int_t cnt1 = 0;
523  lochit[0] = 0;
524  lochit[1] = cnt0++;
525 
526  pHit0 = (HPionTrackerHit*)pHitCat->getObject(lochit);
527  //PR(pHit0);
528 
529  if (!pHit0)
530  break;
531 
532  while (true) // plane 1, det2
533  {
534  lochit[0] = 1;
535  lochit[1] = cnt1++;
536 
537  pHit1 = (HPionTrackerHit*)pHitCat->getObject(lochit);
538  // PR(pHit1);
539  if (!pHit1)
540  break;
541 
542  // PR(cnt0);
543  // PR(cnt1);
544 
545  if (pTrackfpar->getTrackingFlag() == 0) // no tracking
546  {
547  tr.fP = pTrackfpar->getRefMom();
548  tr.fTheta = 0.;
549  tr.fPhi = 0.;
550  }
551  else
552  {
553 #ifdef USE_FILE
554  nev = nev + 1;
555  inputpos >> x1 >> y1 >> x2 >> y2 ;
556 #else
557  pHit0->getLabPos(x1,y1,z1);
558  pHit1->getLabPos(x2,y2,z2);
559 #endif
560 
561 
562 #ifdef USE_FILE_SCAN
563  scanpos.open("poscan.txt");
564  scanpos >> x_l >> x_u >> y_l >> y_u ;
565  // cout << x_l << " " << y_l << " " << x_u << " " << y_u <<endl ;
566  // cout << x1 << " " << y1 << " Present pos" << endl;
567  scanpos.close();
568  if(x1<x_l||x1>x_u||y1<y_l||y1>y_u) continue;
569 
570  // cout << x1 << " " << y1 << " Portion ACCEPTED" << endl;
571 #endif
572 
573 
574  Bool_t success = momrec(x1, y1, x2, y2, pTrackfpar->getRefMom() * 1e-3, tr);
575 #ifdef USE_FILE
576  if (nev > 10000) success = false;
577  cout << "Positions from file : " << endl;
578  cout << x1 << " " << x2 << " " << nev << endl;
579 #endif
580  if (!success) return 0; // set condition for input txt file number of events
581  }
582 
583  trackcan.push_back(tr);// insertTrack(tr);
584  }
585  }
586 
587  if (trackcan.size())
588  {
589  // Sorting minimal distance (Momentum selection)
590  std::sort(trackcan.begin(), trackcan.end(), HPionTrackerTrackF::sortfunction);
591 
592  Float_t eloss_corr = pTrackerMompar->getElossCorr();
593 
594  trackcan[0].fP = trackcan[0].fP + eloss_corr;
595 
596  for (UInt_t t = 0; t < trackcan.size(); ++t)
597  {
598  insertTrack(trackcan[t]);
599  }
600  }
601 
602  //------------------------------------------------------------END-----------------------------------------------------------------------------------
603 
604  // insertTrack(vector);
605  return 0;
606 }
607 
609 {
610  HPionTrackerTrack * pTrack = NULL;
611 
612  pTrack = static_cast<HPionTrackerTrack*>(pTrackCat->getNewSlot(loc));
613  if (pTrack != NULL)
614  {
615  pTrack = new(pTrack) HPionTrackerTrack;
616  pTrack->setPThetaPhi(tr.fP, tr.fTheta, tr.fPhi, tr.fMatch);
617  pTrack->setPosAll(tr.fX1, tr.fY1, tr.fX2, tr.fY2, tr.fXh, tr.fYh);
618  pTrack->setProdAngles(tr.fTheta0, tr.fPhi0);
619  pTrack->setProdY(tr.fY0);
620  }
621 }
Double_t Tijk[5][5][5]
Definition: HBeam.h:82
Float_t fMatch
Int_t getRunId(void)
Definition: hrun.h:61
Float_t fYh
HPionTrackerMomRunPar * pTrackerMomRunpar
Float_t fX1
HRuntimeDb * getRuntimeDb(void)
Definition: hades.h:111
HEvent *& getCurrentEvent(void)
Definition: hades.cc:422
Float_t fP
void getLabPos(Float_t &, Float_t &, Float_t &) const
Bool_t momrec(Float_t x1, Float_t y1, Float_t x2, Float_t y2, Float_t momref, track &tr)
HPionTrackerBeamPar * pTrackBeampar
Double_t phi1
Double_t Tij[5][5]
Definition: HBeam.h:81
Double_t theta
HRun * getCurrentRun(void)
Definition: hruntimedb.h:52
Float_t fY1
static bool sortfunction(const track tr1, const track tr2)
Bool_t getRun(Int_t runID, HPionTrackerMomRunPars *data)
HBeamElement * getBeamElement(UInt_t id)
HSpectrometer * getSetup(void)
Definition: hades.h:112
HDetector * getDetector(const Char_t *name)
Float_t getYYSlope() const
HPionTrackerTrackFPar * pTrackfpar
HPionTrackerMomRunPars correction
Float_t fTheta0
HPionTrackerMomPar * pTrackerMompar
Float_t fX2
Hades * gHades
Definition: hades.cc:1213
Float_t fPhi
Int_t getYYWeight() const
HParSet * getContainer(const Text_t *)
Definition: hruntimedb.cc:124
Int_t getMomWeight() const
Float_t getElossCorr() const
const Cat_t catPionTrackerHit
HCategory * buildCategory(Cat_t)
std::ifstream inputpos
EVENT COUNTER FOR FILE.
Float_t getYYOffset() const
void setProdY(Float_t)
ClassImp(HPionTrackerTrackF) HPionTrackerTrackF
Float_t fDist
Float_t fY2
Float_t phi
Definition: drawAccCuts.C:15
virtual HCategory * getCategory(Cat_t aCat)=0
const Cat_t catPionTrackerTrack
void setPosAll(Float_t, Float_t, Float_t, Float_t, Float_t, Float_t)
Float_t fXh
void setPThetaPhi(Float_t p, Float_t theta, Float_t phi, Float_t match)
void insertTrack(const track &tr)
Float_t fTheta
Float_t fPhi0
Float_t fY0
void setProdAngles(Float_t, Float_t)