BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
BmnSRCTriggersCheck.cxx
Go to the documentation of this file.
2
3#include "BmnTrigWaveDigit.h"
5{
6 fIsExp = isExp;
7
8 fT0Branch = "T0";
9 fVetoBranch = "VETO";
10 // fBC2Branch = "BC2";
11 fBC1Branch = "TQDC_BC1";
12 fBC2Branch = "TQDC_BC2";
13 fBC3Branch = "TQDC_BC3";
14 fX1LBranch = "TQDC_X1_Left";
15 fX2LBranch = "TQDC_X2_Left";
16 fX1RBranch = "TQDC_X1_Right";
17 fX2RBranch = "TQDC_X2_Right";
18 fY1LBranch = "TQDC_Y1_Left";
19 fY2LBranch = "TQDC_Y2_Left";
20 fY1RBranch = "TQDC_Y1_Right";
21 fY2RBranch = "TQDC_Y2_Right";
22 fBDBranch = "BD";
23 fBmnEventHeaderBranchName = "EventHeader";
24 fBmnEvQualityBranchName = "srcTriggers";
25}
26
28{
29 FairRootManager* ioman = FairRootManager::Instance();
30
32 fT0Array = (TClonesArray*)ioman->GetObject(fT0Branch.Data());
33 fVetoArray = (TClonesArray*)ioman->GetObject(fVetoBranch.Data());
34 fBC1Array = (TClonesArray*)ioman->GetObject(fBC2Branch.Data());
35 fBC2Array = (TClonesArray*)ioman->GetObject(fBC2Branch.Data());
36 fBC3Array = (TClonesArray*)ioman->GetObject(fBC3Branch.Data());
37 fX1RArray = (TClonesArray*)ioman->GetObject(fX1RBranch.Data());
38 fX1LArray = (TClonesArray*)ioman->GetObject(fX1LBranch.Data());
39 fX2RArray = (TClonesArray*)ioman->GetObject(fX2RBranch.Data());
40 fX2LArray = (TClonesArray*)ioman->GetObject(fX2LBranch.Data());
41 fY1RArray = (TClonesArray*)ioman->GetObject(fY1RBranch.Data());
42 fY1LArray = (TClonesArray*)ioman->GetObject(fY1LBranch.Data());
43 fY2RArray = (TClonesArray*)ioman->GetObject(fY2RBranch.Data());
44 fY2LArray = (TClonesArray*)ioman->GetObject(fY2LBranch.Data());
45 fBDArray = (TClonesArray*)ioman->GetObject(fBDBranch.Data());
46
48 ioman->Register(fBmnEvQualityBranchName, "QUALITY", fBmnEvQuality, true);
49}
50
52{
53 if (!fIsExp)
54 return;
55
56 fBmnEvQuality->Delete();
57
58 BmnEventQuality* evQual = new ((*fBmnEvQuality)[fBmnEvQuality->GetEntriesFast()]) BmnEventQuality("GOOD");
59
60 const Int_t kEnergies = 4;
61 const Int_t kTargets = 5;
62 Double_t energies[kEnergies] = {3.5, 4., 4.5, 5.14};
63 TString targets[kTargets] = {"C", "Al", "Cu", "Pb", "C2H4"};
64
65 BmnEventHeader* evHeader = (BmnEventHeader*)fBmnEventHeader->UncheckedAt(0);
66 if (!evHeader)
67 return;
68
69 UniRun* runInfo = UniRun::GetRun(6, evHeader->GetRunId());
70
71 BmnTriggerType trigType = evHeader->GetTrig();
72 if (trigType == kBMNMINBIAS) {
73 // Setup BD-threshold
74 // To be read subsequently from the UniDB directly when processing RUN7, FIXME
75 TString target = *runInfo->GetTargetParticle();
76 Double_t energy = *runInfo->GetEnergy();
77 Int_t bdThresh;
78 if (Abs(energy - energies[0]) < FLT_EPSILON) // 3.5 GeV/n, all targets
79 bdThresh = 2;
80 else if (Abs(energy - energies[1]) < FLT_EPSILON
81 && (target == targets[0] || target == targets[4])) // 4 GeV/n, C, C2H4
82 bdThresh = 2;
83 else if (Abs(energy - energies[1]) < FLT_EPSILON && target != targets[0]
84 && target != targets[4]) // 4 GeV/n, Al, Cu, Pb
85 bdThresh = 3;
86 else if (Abs(energy - energies[2]) < FLT_EPSILON
87 && (target == targets[0] || target == targets[4])) // 4.5 GeV/n, C, C2H4
88 bdThresh = 2;
89 else if (Abs(energy - energies[2]) < FLT_EPSILON && target != targets[0]
90 && target != targets[4]) // 4 GeV/n, Al, Cu, Pb
91 bdThresh = 3;
92 else if (Abs(energy - energies[3]) < FLT_EPSILON) // 5.14 GeV/n, all targets
93 bdThresh = 2;
94 else
95 bdThresh = 0;
96
97 if (fT0Array->GetEntriesFast() != 1 || fBC2Array->GetEntriesFast() != 1 || fVetoArray->GetEntriesFast() != 0
98 || fBDArray->GetEntriesFast() < bdThresh)
99 evQual->SetIsGoodEvent("BAD");
100 }
101
102 else if (trigType == kBMNBEAM)
103 {
104 if (fVetoArray->GetEntriesFast() > 1 || fBDArray->GetEntriesFast() > 0)
105 evQual->SetIsGoodEvent("BAD");
106 }
107
108 else
109 evQual->SetIsGoodEvent("BAD");
110
111 vector<int> eloss;
112 for (Int_t iDig = 0; iDig < fBC1Array->GetEntriesFast(); ++iDig) {
114 eloss.push_back(dig->GetIntegral());
115 }
116 evQual->SetElossBC1(eloss);
117
118 eloss.clear();
119 for (Int_t iDig = 0; iDig < fBC2Array->GetEntriesFast(); ++iDig) {
121 eloss.push_back(dig->GetIntegral());
122 }
123 evQual->SetElossBC2(eloss);
124
125 eloss.clear();
126 for (Int_t iDig = 0; iDig < fBC3Array->GetEntriesFast(); ++iDig) {
128 eloss.push_back(dig->GetIntegral());
129 }
130 evQual->SetElossBC3(eloss);
131
132 eloss.clear();
133 for (Int_t iDig = 0; iDig < fX1RArray->GetEntriesFast(); ++iDig) {
135 eloss.push_back(dig->GetIntegral());
136 }
137 evQual->SetElossX1R(eloss);
138
139 eloss.clear();
140 for (Int_t iDig = 0; iDig < fX1LArray->GetEntriesFast(); ++iDig) {
142 eloss.push_back(dig->GetIntegral());
143 }
144 evQual->SetElossX1L(eloss);
145
146 eloss.clear();
147 for (Int_t iDig = 0; iDig < fY1RArray->GetEntriesFast(); ++iDig) {
149 eloss.push_back(dig->GetIntegral());
150 }
151 evQual->SetElossY1R(eloss);
152
153 eloss.clear();
154 for (Int_t iDig = 0; iDig < fY1LArray->GetEntriesFast(); ++iDig) {
156 eloss.push_back(dig->GetIntegral());
157 }
158 evQual->SetElossY1L(eloss);
159
160 eloss.clear();
161 for (Int_t iDig = 0; iDig < fX2RArray->GetEntriesFast(); ++iDig) {
163 eloss.push_back(dig->GetIntegral());
164 }
165 evQual->SetElossX2R(eloss);
166
167 eloss.clear();
168 for (Int_t iDig = 0; iDig < fX2LArray->GetEntriesFast(); ++iDig) {
170 eloss.push_back(dig->GetIntegral());
171 }
172 evQual->SetElossX2L(eloss);
173
174 eloss.clear();
175 for (Int_t iDig = 0; iDig < fY2RArray->GetEntriesFast(); ++iDig) {
177 eloss.push_back(dig->GetIntegral());
178 }
179 evQual->SetElossY2R(eloss);
180
181 eloss.clear();
182 for (Int_t iDig = 0; iDig < fY2LArray->GetEntriesFast(); ++iDig) {
184 eloss.push_back(dig->GetIntegral());
185 }
186 evQual->SetElossY2L(eloss);
187}
188
bool Bool_t
int Int_t
double Double_t
const char Option_t
@ kBMNMINBIAS
"min.bias" BC1 + BC2 + T0 + VC + FD
Definition BmnEnums.h:136
@ kBMNBEAM
"beam" BC1 + BC2 + T0 + VC
Definition BmnEnums.h:135
void SetIsGoodEvent(TString str)
TClonesArray * fBmnEvQuality
virtual void Exec(Option_t *opt)
virtual InitStatus Init()
TClonesArray * fBmnEventHeader
class for TQDC data including waveform can be initialized both from an std::vector and raw pointer to...
int32_t GetIntegral(size_t start=0, size_t stop=SIZE_MAX) const
UniRun.h Class for the table: run_.
Definition UniRun.h:21
double * GetEnergy()
get energy of the current run
Definition UniRun.h:113
static UniRun * GetRun(int period_number, int run_number)
get run from the database
Definition UniRun.cxx:161
TString GetTargetParticle()
get target particle of the current run
Definition UniRun.h:111
Double_t Abs(Double_t d)