Line data Source code
1 : #include "AliZDCTriggerProcessor.h"
2 : #include "AliCDBManager.h"
3 : #include "AliCDBEntry.h"
4 : #include "AliCDBMetaData.h"
5 : #include "AliLog.h"
6 : #include "AliZDCTriggerParameters.h"
7 :
8 : /////////////////////////////////////////////////////////////////////
9 : // //
10 : // Class implementing ZDC trigger processor. //
11 : // //
12 : /////////////////////////////////////////////////////////////////////
13 :
14 12 : ClassImp(AliZDCTriggerProcessor)
15 :
16 : //______________________________________________________________________________________________
17 0 : AliZDCTriggerProcessor::AliZDCTriggerProcessor() :
18 0 : fSignal(0x0),
19 0 : fTriggerParam(0x0)
20 0 : {
21 : // default constructor
22 0 : }
23 :
24 : //______________________________________________________________________________________________
25 0 : AliZDCTriggerProcessor::AliZDCTriggerProcessor(Float_t* signal) :
26 0 : fSignal(signal),
27 0 : fTriggerParam(GetTriggerParamFromOCDB())
28 0 : {
29 : // standard constructor I
30 : // gets the trigger parameters directly from OCDB
31 0 : }
32 :
33 : //______________________________________________________________________________________________
34 0 : AliZDCTriggerProcessor::AliZDCTriggerProcessor(Float_t* signal, AliZDCTriggerParameters* ocdbParam) :
35 0 : fSignal(signal),
36 0 : fTriggerParam(ocdbParam)
37 0 : {
38 : // standard constructor II
39 0 : }
40 :
41 : //_____________________________________________________________________________
42 : AliZDCTriggerProcessor &AliZDCTriggerProcessor::operator =(const AliZDCTriggerProcessor &trig)
43 : {
44 : // Equal operator.
45 0 : this->~AliZDCTriggerProcessor();
46 0 : new(this) AliZDCTriggerProcessor(trig);
47 0 : return *this;
48 :
49 0 : }
50 :
51 : //______________________________________________________________________________________________
52 : AliZDCTriggerProcessor::AliZDCTriggerProcessor(const AliZDCTriggerProcessor& trigg) :
53 0 : TObject(),
54 0 : fSignal(trigg.fSignal),
55 0 : fTriggerParam(trigg.fTriggerParam)
56 0 : {
57 : // copy constructor
58 0 : }
59 :
60 : //______________________________________________________________________________________________
61 : AliZDCTriggerProcessor::~AliZDCTriggerProcessor()
62 0 : {
63 : // destructor
64 0 : }
65 :
66 : //______________________________________________________________________________________________
67 : UInt_t AliZDCTriggerProcessor::ProcessEvent()
68 : {
69 : // process ZDC signals in order to determine the trigger output
70 : UInt_t ctpInput = 0;
71 : //
72 0 : Bool_t mbTriggered = MBTrigger();
73 0 : if(mbTriggered == kTRUE) ctpInput = 0x1;
74 0 : Bool_t cenTriggered = CentralTrigger();
75 0 : if(cenTriggered == kTRUE) ctpInput = 0x1 << 1;
76 0 : Bool_t semicenTriggered = SemicentralTrigger();
77 0 : if(semicenTriggered == kTRUE) ctpInput = 0x1 << 2;
78 0 : Bool_t emdTriggered = EMDTrigger();
79 0 : if(emdTriggered == kTRUE) ctpInput = 0x1 << 3;
80 :
81 0 : if((mbTriggered == kTRUE) || (cenTriggered == kTRUE) ||
82 0 : (semicenTriggered == kTRUE) || (emdTriggered == kTRUE)){
83 0 : return ctpInput;
84 : }
85 : else{
86 0 : return 0;
87 : }
88 0 : }
89 :
90 : //______________________________________________________________________________________________
91 : Bool_t AliZDCTriggerProcessor::MBTrigger()
92 : {
93 : // is the processed event a MB A-A event?
94 : Float_t mbTrheshold = 0.;
95 0 : if(fTriggerParam) mbTrheshold = fTriggerParam->GetADCMBThreshold();
96 : // check whether ZDC signal > mbTrheshold
97 0 : if((fSignal[0]+fSignal[1]+fSignal[3]+fSignal[4]) > mbTrheshold)
98 0 : return kTRUE;
99 0 : else return kFALSE;
100 :
101 0 : }
102 :
103 : //______________________________________________________________________________________________
104 : Bool_t AliZDCTriggerProcessor::CentralTrigger()
105 : {
106 : // is the processed event a central A-A event?
107 :
108 : Float_t zemThr = 0;
109 : Float_t centralWin[2] = {0,0};
110 0 : if(fTriggerParam){
111 0 : zemThr = fTriggerParam->GetADCZDCCentralityThr();
112 0 : const Float_t* cWin = fTriggerParam->GetADCCentralWindow();
113 0 : centralWin[0] = cWin[0];
114 0 : centralWin[1] = cWin[1];
115 0 : }
116 : //
117 0 : if((fSignal[0]+fSignal[1]+fSignal[3]+fSignal[4]) > centralWin[0]
118 0 : &&
119 0 : (fSignal[0]+fSignal[1]+fSignal[3]+fSignal[4]) < centralWin[1]
120 0 : &&
121 0 : fSignal[2] > zemThr)
122 0 : return kTRUE;
123 0 : else return kFALSE;
124 0 : }
125 :
126 : //______________________________________________________________________________________________
127 : Bool_t AliZDCTriggerProcessor::SemicentralTrigger()
128 : {
129 : // is the processed event a semicentral A-A event?
130 :
131 : Float_t zemThr = 0;
132 : Float_t semicentralWin[2] = {0,0};
133 0 : if(fTriggerParam){
134 0 : zemThr = fTriggerParam->GetADCZDCCentralityThr();
135 0 : const Float_t* cWin = fTriggerParam->GetADCSemicentralWindow();
136 0 : semicentralWin[0] = cWin[0];
137 0 : semicentralWin[1] = cWin[1];
138 0 : }
139 : //
140 0 : if((fSignal[0]+fSignal[1]+fSignal[3]+fSignal[4]) > semicentralWin[0]
141 0 : &&
142 0 : (fSignal[0]+fSignal[1]+fSignal[3]+fSignal[4]) < semicentralWin[1]
143 0 : &&
144 0 : fSignal[2] > zemThr)
145 0 : return kTRUE;
146 0 : else return kFALSE;
147 0 : }
148 :
149 : //______________________________________________________________________________________________
150 : Bool_t AliZDCTriggerProcessor::EMDTrigger()
151 : {
152 : // is the processed an EMD event?
153 :
154 : Float_t emdWin[4] = {0,0,0,0};
155 0 : if(fTriggerParam){
156 0 : const Float_t* eWin = fTriggerParam->GetADCEMDWindow();
157 0 : emdWin[0] = eWin[0];
158 0 : emdWin[1] = eWin[1];
159 0 : emdWin[2] = eWin[2];
160 0 : emdWin[3] = eWin[3];
161 0 : }
162 : // check whether ZNA AND ZNC signals fall into the
163 : // 2 distinct windows defined for EMD trigger
164 0 : if(fSignal[0] > emdWin[0] && fSignal[0] < emdWin[1]
165 0 : &&
166 0 : fSignal[3] > emdWin[2] && fSignal[3] < emdWin[3])
167 0 : return kTRUE;
168 0 : else return kFALSE;
169 0 : }
170 :
171 : //______________________________________________________________________________________________
172 : AliZDCTriggerParameters* AliZDCTriggerProcessor::GetTriggerParamFromOCDB() const
173 : {
174 : // retrieving trigger parameter configuration form OCDB
175 : AliZDCTriggerParameters *trigParam = 0x0;
176 0 : AliCDBEntry *entry = AliCDBManager::Instance()->Get("ZDC/Trigger/");
177 0 : if(!entry) AliFatal("No calibration data loaded!");
178 : else{
179 0 : trigParam = dynamic_cast<AliZDCTriggerParameters*> (entry->GetObject());
180 0 : if(!trigParam) AliFatal("Wrong calibration object in calibration file!");
181 : }
182 :
183 0 : return trigParam;
184 0 : }
|