Avoid message E-TClonesArray::At: during digitization due to try to access non existi...
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALTriggerData.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpeateose. It is      *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17  
18  
19 EMCal trigger data container
20 for data (both raw & rec) persistency
21 Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
22 */
23
24 #include "AliEMCALTriggerData.h"
25 #include "AliEMCALTriggerPatch.h"
26 #include "AliLog.h"
27 #include "TIterator.h"
28 #include "Riostream.h"
29
30 ClassImp(AliEMCALTriggerData)
31
32 //_____________
33 AliEMCALTriggerData::AliEMCALTriggerData() : TObject(),
34 fMode(0),
35 fL0Patches(),
36 fL0Region(),
37 fL1GammaPatches(),
38 fL1JetPatches(),
39 fL1Region(),
40 fL1GammaThreshold(0),
41 fL1JetThreshold(0),
42 fL1V0(),
43 fL1FrameMask(0),
44 fL1TriggerType(),
45 fL1DataDecoded(0)
46 {  
47         //
48         for (Int_t i = 0; i < 2; i++)
49         {
50                        fL0Patches[i] = new TClonesArray("AliEMCALTriggerPatch");
51                   fL1GammaPatches[i] = new TClonesArray("AliEMCALTriggerPatch");
52                     fL1JetPatches[i] = new TClonesArray("AliEMCALTriggerPatch");
53         }
54         
55         for (Int_t i = 0; i < 32; i++) for (Int_t j = 0; j < 24; j++) for (Int_t k = 0; k <  4; k++) fL0Region[i][j][k] = 0;
56         for (Int_t i = 0; i <  2; i++) for (Int_t j = 0; j < 48; j++) for (Int_t k = 0; k < 64; k++) fL1Region[i][j][k] = 0;
57         
58         fL1V0[0] = fL1V0[1] = 0;
59         for (Int_t i = 0; i < 8; i++) fL1TriggerType[i] = 0;    
60 }
61
62 //_____________
63 AliEMCALTriggerData::~AliEMCALTriggerData()
64 {
65         //
66         for (Int_t i = 0; i < 2; i++)
67         {
68                 if (     fL0Patches[i])      fL0Patches[i]->Delete();
69                 if (fL1GammaPatches[i]) fL1GammaPatches[i]->Delete();
70                 if (  fL1JetPatches[i])   fL1JetPatches[i]->Delete();
71         }
72 }
73
74 //_____________
75 void AliEMCALTriggerData::SetL0Region(Int_t i, const Int_t**& region)
76 {
77         //
78         if (i < 0 || i > 31) 
79         {
80                 AliError("Bad index!");
81                 return;
82         }
83         
84         for (Int_t j=0;j<24;j++)
85                 for (Int_t k=0;k<4;k++) fL0Region[i][j][k] = region[j][k];
86 }
87
88 //_____________
89 void AliEMCALTriggerData::GetPatches(TriggerType_t type, Int_t i, TClonesArray& patches) const
90 {
91         //
92         if (i < 0 || i > 1) 
93         {
94                 AliError("Bad index!");
95                 return;
96         }
97         
98         switch (type)
99         {
100                 case kL0:
101                         patches =  *fL0Patches[i];
102                         break;
103                 case kL1Gamma:
104                         patches =  *fL1GammaPatches[i];
105                         break;
106                 case kL1Jet:
107                         patches =  *fL1JetPatches[i];
108                         break;
109                 default:
110                         AliError("Unknown trigger type!");
111                         break;
112         }
113 }
114
115 //_____________
116 TClonesArray* AliEMCALTriggerData::GetPatches(TriggerType_t type, Int_t i) const
117 {
118         //
119         if (i < 0 || i > 1) 
120         {
121                 AliError("Bad index!");
122                 return 0x0;
123         }
124         
125         switch (type)
126         {
127                 case kL0:
128                         return fL0Patches[i];
129                         break;
130                 case kL1Gamma:
131                         return fL1GammaPatches[i];
132                         break;
133                 case kL1Jet:
134                         return fL1JetPatches[i];
135                         break;
136                 default:
137                         AliError("Unknown trigger type!");
138                         break;
139         }
140
141         return 0x0;
142 }
143
144 //_____________
145 void AliEMCALTriggerData::SetPatches(TriggerType_t type, Int_t i, const TClonesArray& patches)
146 {
147         //
148         if (i < 0 || i > 1) 
149         {
150                 AliError("Bad index!");
151                 return;
152         }
153         
154         if (patches.GetEntriesFast())
155         {
156                 TClonesArray* arr = 0x0;
157                 
158                 switch (type)
159                 {
160                         case kL0:
161                                 arr = fL0Patches[i];
162                                 break;
163                         case kL1Gamma:
164                                 arr = fL1GammaPatches[i];
165                                 break;
166                         case kL1Jet:
167                                 arr = fL1JetPatches[i];
168                                 break;
169                         default:
170                                 AliError("Unknown trigger type!");
171                                 return;
172                 }
173                 
174                 if (arr)
175                 {
176                         Int_t size = arr->GetSize() + patches.GetSize();
177                 
178                         arr->Expand(size);
179                 
180                         for (Int_t k = 0; k < patches.GetEntriesFast(); k++)
181                         {
182                                 AliEMCALTriggerPatch* p = static_cast<AliEMCALTriggerPatch*>(patches.At(k));
183                                 new((*arr)[arr->GetEntriesFast()]) AliEMCALTriggerPatch(*p);
184                         }
185                 }
186                 else
187                 {
188                         AliError("TClonesArray is NULL!");
189                 }
190         }
191 }
192
193 //_____________
194 void AliEMCALTriggerData::SetL1Region(Int_t i, Int_t**& region)
195 {
196         //
197         if (i < 0 || i > 1) 
198         {
199                 AliError("Bad index!");
200                 return;
201         }
202                 
203         for (Int_t j = 0; j < 48; j++)
204                 for (Int_t k = 0; k < 64; k++) fL1Region[i][j][k] = region[j][k];
205 }
206
207 //_____________
208 void AliEMCALTriggerData::GetL1Region(Int_t i, Int_t arr[][64]) const 
209
210         //
211         if (i < 0 || i > 1) 
212         {
213                 AliError("Bad index!");
214                 return;
215         }
216         
217         for (Int_t j = 0; j < 48; j++) for (Int_t k = 0; k < 64; k++) { arr[j][k] = fL1Region[i][j][k]; } 
218 }
219
220
221 //_____________
222 void AliEMCALTriggerData::Scan() const
223 {
224         //
225         TIterator* nP;
226
227         printf("L0:\n");
228         printf("\tFound (%2d,%2d) patches\n", fL0Patches[1]->GetEntriesFast(), fL0Patches[0]->GetEntriesFast());
229         printf("\tRAW:\n");
230         nP = fL0Patches[1]->MakeIterator();
231         while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)nP->Next()) {printf("\t"); p->Print("");}
232         printf("\tREC:\n");
233         nP = fL0Patches[0]->MakeIterator();
234         while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)nP->Next()) {printf("\t"); p->Print("");}
235         printf("L1:\n");
236         printf("\tFound (%4d,%4d) gamma patches\n",fL1GammaPatches[1]->GetEntriesFast(), fL1GammaPatches[0]->GetEntriesFast());
237         printf("\tRAW:\n");
238         nP = fL1GammaPatches[1]->MakeIterator();
239         while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)nP->Next()) {printf("\t"); p->Print("");}
240         printf("\tREC:\n");
241         nP = fL1GammaPatches[0]->MakeIterator();
242         while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)nP->Next()) {printf("\t"); p->Print("");}
243         printf("\tFound (%4d,%4d) jet patches\n",fL1JetPatches[1]->GetEntriesFast(), fL1JetPatches[0]->GetEntriesFast());
244         printf("\tRAW:\n");
245         nP = fL1JetPatches[1]->MakeIterator();
246         while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)nP->Next()) {printf("\t"); p->Print("");}
247         printf("\tREC:\n");
248         nP = fL1JetPatches[0]->MakeIterator();
249         while (AliEMCALTriggerPatch* p = (AliEMCALTriggerPatch*)nP->Next()) {printf("\t"); p->Print("");}
250 }
251
252 //_____________
253 void AliEMCALTriggerData::Reset()
254 {
255         //
256         for (Int_t i = 0; i < 2; i++)
257         {
258                 if (     fL0Patches[i])      fL0Patches[i]->Delete();
259                 if (fL1GammaPatches[i]) fL1GammaPatches[i]->Delete();
260                 if (  fL1JetPatches[i])   fL1JetPatches[i]->Delete();   
261         }
262                 
263         for (Int_t i = 0; i < 2; i++) for (Int_t j = 0; j < 48; j++) for (Int_t k = 0; k < 64; k++) fL1Region[i][j][k] = 0;
264         
265         fL1DataDecoded = 0;
266 }
267
268
269