BmnRoot
Loading...
Searching...
No Matches
BmnTriggersCheck.cxx
Go to the documentation of this file.
1#include "BmnTriggersCheck.h"
2#include "BmnTrigDigit.h"
3
4BmnTriggersCheck::BmnTriggersCheck(Bool_t isExp, Int_t runP, Int_t runN) {
5 fIsExp = isExp;
6 fRunPeriod = runP;
7 fRunNumber = runN;
8
9 fT0Branch = "T0";
10 fVetoBranch = "VC";
11 fBC2Branch = "BC2";
12 fBC1Branch = "BC1";
13 fBC3Branch = "BC3";
14 fBDBranch = "BD";
15 fBmnEventHeaderBranchName = "EventHeader";
16 fBmnEvQualityBranchName = "BmnEventQuality";
17}
18
20 FairRootManager* ioman = FairRootManager::Instance();
21
22 fBmnEventHeader = (TClonesArray*) ioman->GetObject(fBmnEventHeaderBranchName);
23 fT0Array = (TClonesArray*) ioman->GetObject(fT0Branch.Data());
24 fVetoArray = (TClonesArray*) ioman->GetObject(fVetoBranch.Data());
25 fBC2Array = (TClonesArray*) ioman->GetObject(fBC2Branch.Data());
26 fBDArray = (TClonesArray*) ioman->GetObject(fBDBranch.Data());
27 fBC1Array = (TClonesArray*) ioman->GetObject(fBC1Branch.Data());
28 fBC3Array = (TClonesArray*) ioman->GetObject(fBC3Branch.Data());
29
30 fBmnEvQuality = new TClonesArray(fBmnEvQualityBranchName);
31 ioman->Register(fBmnEvQualityBranchName, "QUALITY", fBmnEvQuality, true);
32
33 return kSUCCESS;
34}
35
36void BmnTriggersCheck::Exec(Option_t* opt) {
37 if (!fIsExp)
38 return;
39
40 fBmnEvQuality->Delete();
41
42 BmnEventQuality* evQual = new ((*fBmnEvQuality)[fBmnEvQuality->GetEntriesFast()]) BmnEventQuality("GOOD");
43
44 Int_t cntr2 = 0; Bool_t time2 = 0;
45 for (Int_t iDig = 0; iDig < fBC2Array->GetEntriesFast(); ++iDig) {
46 BmnTrigDigit *dig = (BmnTrigDigit*) fBC2Array->At(iDig);
47 if (dig->GetMod() == 0 ) {
48 cntr2++;
49 // if (dig->GetTime() < 420 || dig->GetTime() > 600) time2 =1;
50 // cout<<" time BC2 "<<dig->GetTime()<<" time2 "<<time2<<endl;
51 }
52 }
53 if (cntr2 > 2 || time2 == 1)
54 evQual->SetIsGoodEvent("BAD");
55
56 Int_t cntr1 = 0; Bool_t time1 = 0;
57 for (Int_t iDig = 0; iDig < fBC1Array->GetEntriesFast(); ++iDig) {
58 BmnTrigDigit *dig = (BmnTrigDigit*) fBC1Array->At(iDig);
59 if (dig->GetMod() == 0){
60 cntr1++;
61 // if (dig->GetTime() < 460 || dig->GetTime() > 600) time1 =1;
62 // cout<<" time BC1 "<<dig->GetTime()<<" time1 "<<time1<<endl;
63 }
64 }
65 if (cntr1 >2 || time1 == 1)
66 evQual->SetIsGoodEvent("BAD");
67
68 Int_t cntr3 = 0; Bool_t time3 = 0;
69 for (Int_t iDig = 0; iDig < fBC3Array->GetEntriesFast(); ++iDig) {
70 BmnTrigDigit *dig = (BmnTrigDigit*) fBC3Array->At(iDig);
71 if (dig->GetMod() == 0 ){
72 cntr1++;
73 // if (dig->GetTime() < 470 || dig->GetTime() > 620) time3 =1;
74 // cout<<" time BC3 "<<dig->GetTime()<<" time3 "<<time3<<endl;
75 }
76 }
77 if (cntr3 > 2 || time3 == 1)
78 evQual->SetIsGoodEvent("BAD");
79
80 // if (fVetoArray != NULL){
81 Int_t cntrv = 0;
82 for (Int_t iDig = 0; iDig < fVetoArray->GetEntriesFast(); ++iDig) {
83 BmnTrigDigit *dig = (BmnTrigDigit*) fVetoArray->At(iDig);
84 if (dig->GetMod() == 0)
85 cntrv++;
86 }
87 if (cntrv >= 1)
88 evQual->SetIsGoodEvent("BAD");
89
90 // } else cout<<" fVetoArray not found "<<endl;
91
92 // BmnEventQuality* evQual = new ((*fBmnEvQuality)[fBmnEvQuality->GetEntriesFast()]) BmnEventQuality("GOOD");
93
94// const Int_t kEnergies = 4;
95// const Int_t kTargets = 5;
96// Double_t energies[kEnergies] = {3.5, 4., 4.5, 5.14};
97// TString targets[kTargets] = {"C", "Al", "Cu", "Pb", "C2H4"};
98
99// BmnEventHeader* evHeader = (BmnEventHeader*) fBmnEventHeader->UncheckedAt(0);
100// if (!evHeader)
101// return;
102
103// UniRun* runInfo = UniRun::GetRun(fRunPeriod, fRunNumber);
104
105// BmnTriggerType trigType = evHeader->GetTrig();
106// if (trigType == kBMNMINBIAS) {
107// // Setup BD-threshold
108// // To be read subsequently from the UniDB directly when processing RUN7, FIXME
109// TString target = *runInfo->GetTargetParticle();
110// Double_t energy = *runInfo->GetEnergy();
111// Int_t bdThresh;
112// if (Abs(energy - energies[0]) < FLT_EPSILON) // 3.5 GeV/n, all targets
113// bdThresh = 2;
114// else if (Abs(energy - energies[1]) < FLT_EPSILON && (target == targets[0] || target == targets[4])) // 4 GeV/n, C, C2H4
115// bdThresh = 2;
116// else if (Abs(energy - energies[1]) < FLT_EPSILON && target != targets[0] && target != targets[4]) // 4 GeV/n, Al, Cu, Pb
117// bdThresh = 3;
118// else if (Abs(energy - energies[2]) < FLT_EPSILON && (target == targets[0] || target == targets[4])) // 4.5 GeV/n, C, C2H4
119// bdThresh = 2;
120// else if (Abs(energy - energies[2]) < FLT_EPSILON && target != targets[0] && target != targets[4]) // 4 GeV/n, Al, Cu, Pb
121// bdThresh = 3;
122// else if (Abs(energy - energies[3]) < FLT_EPSILON) // 5.14 GeV/n, all targets
123// bdThresh = 2;
124// else
125// bdThresh = 0;
126
127// if (fT0Array->GetEntriesFast() != 1 || fBC2Array->GetEntriesFast() != 1 || fVetoArray->GetEntriesFast() != 0 || fBDArray->GetEntriesFast() < bdThresh)
128// evQual->SetIsGoodEvent("BAD");
129// }
130
131// else if (trigType == kBMNBEAM) {
132// if (fVetoArray->GetEntriesFast() > 1 || fBDArray->GetEntriesFast() > 0)
133// evQual->SetIsGoodEvent("BAD");
134// }
135
136// else
137// evQual->SetIsGoodEvent("BAD");
138}
139
void SetIsGoodEvent(TString str)
Short_t GetMod() const
virtual void Finish()
virtual InitStatus Init()
virtual void Exec(Option_t *opt)