PandaRoot
FTSCANPlets.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 //-*- Mode: C++ -*-
14 // *****************************************************************************
15 // *
16 // @Autors: I.Kulakov; M.Pugach; M.Zyzak; I.Kisel *
17 // @e-mail: I.Kulakov@gsi.de; M.Pugach@gsi.de; M.Zyzak@gsi.de; I.Kisel@compeng.uni-frankfurt.de *
18 // *
19 // *****************************************************************************
20 
21 #ifndef FTSCANPlets_H
22 #define FTSCANPlets_H
23 
24 #include <vector>
25 using std::pair;
26 using std::vector;
27 #include "PndFTSCATrackParam.h"
28 #include "FTSCAStationArray.h"
29 #include "FTSCANPletsV.h"
30 
31 class FTSCANPlet {
32 
33  //* Parameters of N-plet
34 
35  public:
36  FTSCANPlet() : fParam(), fLevel(-1), fChi2Level(0), fNeighbours() {}
37  FTSCANPlet(const vector<TESV> &ih, const int iV, const PndFTSCATrackParam &param) : fParam(param), fLevel(0), fChi2Level(0), fNeighbours()
38  {
39  fIHit.resize(ih.size());
40 
41  for (int i = 0; i < N(); i++)
42  fIHit[i] = ih[i][iV];
43  }
44 
45  int N() const { return fIHit.size(); }
46 
47  const TES &IHit(int IH) const { return fIHit[IH]; }
48  int ISta(int IH) const { return fIHit[IH].s; }
49 
50  const PndFTSCATrackParam &Param() const { return fParam; }
51  // PndFTSCATrackParam& Param() { return fParam; }
52 
53  float QMomentum() const { return fParam.QMomentum(); }
54  float QMomentumErr() const { return sqrt(fParam.Err2QMomentum()); } // qp err
55  float QMomentumErr2() const { return fParam.Err2QMomentum(); } // qp err^2
56 
57  char &Level() { return fLevel; };
58  const char &Level() const { return fLevel; };
59 
60  float &Chi2Level() { return fChi2Level; };
61  const float &Chi2Level() const { return fChi2Level; };
62 
63  const unsigned int &INeighbours(int i) const { return fNeighbours[i].second; };
64  const float &Chi2Neighbours(int i) const { return fNeighbours[i].first; };
65  unsigned int NNeighbours() const { return fNeighbours.size(); };
66  vector<pair<float, unsigned int>> &Neighbours() { return fNeighbours; }
67 
68  // check wether a is neighbour from the right to this
69  bool IsRightNeighbour(float /*pick*/, const FTSCANPlet &a, float &chi2)
70  { //[R.K. 9/2018] unused
71  int start = (N() - a.N() < 0) ? 0 : N() - a.N();
72  for (int i = start; i < N() - 1; i++)
73  if (IHit(i + 1) != a.IHit(i))
74  return false;
75  chi2 = fabs(QMomentum() - a.QMomentum()) / sqrt(QMomentumErr2() + a.QMomentumErr2());
76  /*if ( chi2 > pick )
77  return false; // neighbours must have same qp*/
78  chi2 *= chi2;
79  return true;
80  }
81 
82  static bool compare(const FTSCANPlet &i, const FTSCANPlet &j) { return (i.Level() > j.Level()) || (i.Level() == j.Level() && i.Chi2Level() < j.Chi2Level()); }
83 
84  private:
85  vector<TES> fIHit; // index of hit on station
86  PndFTSCATrackParam fParam;
87 
88  char fLevel;
89  float fChi2Level;
90  vector<pair<float, unsigned int>> fNeighbours; // index of neighbour triplets on their station
91 };
92 
93 class FTSCANPlets : public FTSCAStationArray<FTSCANPlet> {
94  public:
95  FTSCANPlets(int nSta, const FTSCAHits *hits) : FTSCAStationArray<FTSCANPlet>(nSta, hits){};
96 
97  FTSCANPlets(const FTSCANPletsV &p) : FTSCAStationArray<FTSCANPlet>(p.NStations(), p.OnStation(0).HitsRef())
98  {
99 
100  for (int i = 0; i < NStations(); ++i) {
101  FTSCAElementsOnStation<FTSCANPlet> &tOnSta = OnStation(i);
102 
104  int n = 0;
105  for (unsigned int iT = 0; iT < ts.size(); iT++) {
106  const FTSCANPletV &t = ts[iT];
107  n += t.IsValid().count();
108  }
109 
110  tOnSta.resize(n);
111  n = 0;
112  for (unsigned int iT = 0; iT < ts.size(); iT++) {
113  const FTSCANPletV &t = ts[iT];
114  foreach_bit(unsigned int iV, t.IsValid()) { tOnSta[n++] = FTSCANPlet(t.IHit(), iV, PndFTSCATrackParam(t.Param(), iV)); }
115  }
116  }
117  };
118 };
119 
120 #endif
bool IsRightNeighbour(float, const FTSCANPlet &a, float &chi2)
Definition: FTSCANPlets.h:69
const PndFTSCATrackParamVector & Param() const
Definition: FTSCANPletsV.h:65
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:40
float & Chi2Level()
Definition: FTSCANPlets.h:60
float Err2QMomentum() const
const unsigned int & INeighbours(int i) const
Definition: FTSCANPlets.h:63
const char & Level() const
Definition: FTSCANPlets.h:58
static bool compare(const FTSCANPlet &i, const FTSCANPlet &j)
Definition: FTSCANPlets.h:82
unsigned int i
Definition: P4_F32vec4.h:33
float QMomentum() const
Definition: FTSCANPlets.h:53
FTSCANPlet(const vector< TESV > &ih, const int iV, const PndFTSCATrackParam &param)
Definition: FTSCANPlets.h:37
float QMomentumErr2() const
Definition: FTSCANPlets.h:55
FTSCAElementsOnStation< T > & OnStation(char i)
int N() const
Definition: FTSCANPlets.h:45
friend F32vec4 fabs(const F32vec4 &a)
Definition: P4_F32vec4.h:58
const TESV & IHit(int IH) const
Definition: FTSCANPletsV.h:63
FTSCANPlets(int nSta, const FTSCAHits *hits)
Definition: FTSCANPlets.h:95
const float & Chi2Level() const
Definition: FTSCANPlets.h:61
float QMomentumErr() const
Definition: FTSCANPlets.h:54
float_m IsValid() const
Definition: FTSCANPletsV.h:69
FTSCANPlets(const FTSCANPletsV &p)
Definition: FTSCANPlets.h:97
int ISta(int IH) const
Definition: FTSCANPlets.h:48
const TES & IHit(int IH) const
Definition: FTSCANPlets.h:47
const float & Chi2Neighbours(int i) const
Definition: FTSCANPlets.h:64
vector< pair< float, unsigned int > > & Neighbours()
Definition: FTSCANPlets.h:66
unsigned int NNeighbours() const
Definition: FTSCANPlets.h:65
const PndFTSCATrackParam & Param() const
Definition: FTSCANPlets.h:50
char & Level()
Definition: FTSCANPlets.h:57
Definition: FTSCATES.h:24