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