CbmRoot
Loading...
Searching...
No Matches
HalCbmStsSepCut.cxx
Go to the documentation of this file.
1/* Copyright (C) 2023-2023 Warsaw University of Technology, Warsaw
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Daniel Wielanek [committer] */
4#include "HalCbmStsSepCut.h"
5
6#include "CbmHelix.h"
7#include "HalCbmHbtTrack.h"
8#include "HalCbmTrack.h"
9
10#include <TLorentzVector.h>
11#include <TVector3.h>
12
13#include <Hal/ExpEvent.h>
14#include <Hal/TwoTrack.h>
15
16
18{
19 SetUnitName("StsExitSep [cm]");
20 SetMinMax(0, 1E+5);
21}
22
24
25Bool_t HalCbmStsExitSepCut::PassHbt(Hal::TwoTrack* pair)
26{
27 HalCbmHbtTrack* tr1 = static_cast<HalCbmHbtTrack*>(pair->GetTrack1());
28 HalCbmHbtTrack* tr2 = static_cast<HalCbmHbtTrack*>(pair->GetTrack2());
29 Double_t dist = (tr1->GetPosAtStsExit() - tr2->GetPosAtStsExit()).Mag();
30 SetValue(dist);
31 return Validate();
32}
33
34Bool_t HalCbmStsExitSepCut::PassAnaTree(Hal::TwoTrack* pair)
35{
36 Double_t dist = 0;
37 TLorentzVector *Pos1 = nullptr, *Pos2 = nullptr;
38 HalCbmTrack* tr1 = static_cast<HalCbmTrack*>(pair->GetTrack1());
39 HalCbmTrack* tr2 = static_cast<HalCbmTrack*>(pair->GetTrack2());
40 Pos1 = static_cast<Hal::ExpEvent*>(tr1->GetEvent())->GetVertex();
41 Pos2 = static_cast<Hal::ExpEvent*>(tr2->GetEvent())->GetVertex();
42 CbmHelix& h1 = tr1->GetHelix();
43 CbmHelix& h2 = tr2->GetHelix();
44 TVector3 pos1 = h1.Eval(101.1 + Pos1->Z());
45 TVector3 pos2 = h2.Eval(101.1 + Pos2->Z());
46 pos1.SetX(pos1.X() - Pos1->X());
47 pos1.SetY(pos1.Y() - Pos1->Y());
48 pos2.SetX(pos2.X() - Pos2->X());
49 pos2.SetY(pos2.Y() - Pos2->Y());
50 dist = (pos1 - pos2).Mag();
51 SetValue(dist);
52 return Validate();
53}
54
55Bool_t HalCbmStsEntranceSepCut::PassHbt(Hal::TwoTrack* pair)
56{
57 HalCbmHbtTrack* tr1 = static_cast<HalCbmHbtTrack*>(pair->GetTrack1());
58 HalCbmHbtTrack* tr2 = static_cast<HalCbmHbtTrack*>(pair->GetTrack2());
59 Double_t dist = (tr1->GetPosAtStsEntrance() - tr2->GetPosAtStsEntrance()).Mag();
60 SetValue(dist);
61 return Validate();
62}
63
64Bool_t HalCbmStsEntranceSepCut::PassAnaTree(Hal::TwoTrack* pair)
65{
66 Double_t dist = 0;
67 TLorentzVector *Pos1 = nullptr, *Pos2 = nullptr;
68 HalCbmTrack* tr1 = static_cast<HalCbmTrack*>(pair->GetTrack1());
69 HalCbmTrack* tr2 = static_cast<HalCbmTrack*>(pair->GetTrack2());
70 Pos1 = static_cast<Hal::ExpEvent*>(tr1->GetEvent())->GetVertex();
71 Pos2 = static_cast<Hal::ExpEvent*>(tr2->GetEvent())->GetVertex();
72 CbmHelix& h1 = tr1->GetHelix();
73 CbmHelix& h2 = tr2->GetHelix();
74 TVector3 pos1 = h1.Eval(30 + Pos1->Z());
75 TVector3 pos2 = h2.Eval(30 + Pos2->Z());
76 pos1.SetX(pos1.X() - Pos1->X());
77 pos1.SetY(pos1.Y() - Pos1->Y());
78 pos2.SetX(pos2.X() - Pos2->X());
79 pos2.SetY(pos2.Y() - Pos2->Y());
80 dist = (pos1 - pos2).Mag();
81 SetValue(dist);
82 return Validate();
83}
84
86{
87 SetUnitName("StsEntranceSep [cm]");
88 SetMinMax(0, 1E+5);
89}
90
91Bool_t HalCbmStsSeparationCutLayers::PassHbt(Hal::TwoTrack* pair)
92{
93 HalCbmHbtTrack* tr1 = static_cast<HalCbmHbtTrack*>(pair->GetTrack1());
94 HalCbmHbtTrack* tr2 = static_cast<HalCbmHbtTrack*>(pair->GetTrack2());
95 TVector3 poz1, poz2, dif;
96 Double_t x_min = 9E+4, y_min = 9E+4, xy_min = 9E+4;
97 Double_t x_max = 0, y_max = 0, xy_max = 0;
98 for (int i = 0; i < 9; i++) {
99 poz1 = tr1->GetPosAtPlane(i);
100 poz2 = tr2->GetPosAtPlane(i);
101 dif = poz1 - poz2;
102 Double_t dx = dif.X();
103 Double_t dy = dif.Y();
104 Double_t adx = TMath::Abs(dif.X());
105 Double_t ady = TMath::Abs(dif.Y());
106 Double_t adxy = dif.Pt();
107 SetValue(dx, i * 3);
108 SetValue(dy, i * 3 + 1);
109 SetValue(adxy, i * 3 + 2);
110 if (adx < x_min) x_min = dx;
111 if (ady < y_min) y_min = dy;
112 if (adxy < xy_min) xy_min = adxy;
113 if (adx > x_max) x_max = dx;
114 if (ady > y_max) y_max = dy;
115 if (adxy > xy_max) xy_max = adxy;
116 }
117 SetValue(x_min, 27);
118 SetValue(y_min, 28);
119 SetValue(xy_min, 29);
120 SetValue(x_max, 30);
121 SetValue(y_max, 31);
122 SetValue(xy_max, 32);
123
124 Int_t passed = 0;
125 for (int i = 0; i < 33; i++) {
126 if (GetValue(i) > GetMin(i) && GetValue(i) < GetMax(i)) passed++;
127 }
128 if (passed != 0) return ForcedUpdate(kFALSE);
129 return ForcedUpdate(kTRUE);
130}
131
132Bool_t HalCbmStsSeparationCutLayers::PassAnaTree(Hal::TwoTrack* /*pair*/)
133{
134 LOG(warning) << "not implemented";
135 return kTRUE;
136}
137
139{
140 for (int i = 0; i < 9; i++) {
141 SetUnitName(Form("#Delta#X^{*}_{lay%i} [cm]", i), i * 3);
142 SetUnitName(Form("#Delta#Y^{*}_{lay%i} [cm]", i), i * 3 + 1);
143 SetUnitName(Form("#Delta#XY^{*}_{lay%i} [cm]", i), i * 3 + 2);
144 SetMinMax(1, -1, i * 3);
145 SetMinMax(1, -1, i * 3 + 1);
146 SetMinMax(1, -1, i * 3 + 2);
147 }
148 SetUnitName("#Delta#X^{*}_{min} [cm]", 27);
149 SetUnitName("#Delta#Y^{*}_{min} [cm]", 28);
150 SetUnitName("#Delta#XY^{*}_{min} [cm]", 29);
151 SetUnitName("#Delta#X^{*}_{max} [cm]", 30);
152 SetUnitName("#Delta#Y^{*}_{max} [cm]", 31);
153 SetUnitName("#Delta#XY^{*}_{max} [cm]", 32);
154 SetMinMax(1, -1, 27);
155 SetMinMax(1, -1, 28);
156 SetMinMax(1, -1, 29);
157 SetMinMax(1, -1, 30);
158 SetMinMax(1, -1, 31);
159 SetMinMax(1, -1, 32);
160}
161
TVector3 Eval(Double_t z)
Definition CbmHelix.cxx:31
const TVector3 & GetPosAtStsExit() const
const TVector3 & GetPosAtStsEntrance() const
const TVector3 & GetPosAtPlane(Int_t plane) const
Bool_t PassHbt(Hal::TwoTrack *pair)
Bool_t PassAnaTree(Hal::TwoTrack *pair)
Bool_t PassHbt(Hal::TwoTrack *pair)
Bool_t PassAnaTree(Hal::TwoTrack *pair)
Bool_t PassHbt(Hal::TwoTrack *pair)
Bool_t PassAnaTree(Hal::TwoTrack *pair)
CbmHelix & GetHelix()
Definition HalCbmTrack.h:38