]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EMCAL/AliEMCALTriggerBoard.cxx
changes to warn when delete on global object is called, and init variables
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALTriggerBoard.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 purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17  
18
19 EMCal trigger board super class
20 run the sliding window algorithm
21 Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
22 */
23
24 #include "AliEMCALTriggerBoard.h"
25 #include "AliEMCALTriggerPatch.h"
26 #include "AliLog.h"
27
28 #include <TClonesArray.h>
29 #include <iostream>
30 #include <cstdlib>
31
32 using namespace std;
33
34 ClassImp(AliEMCALTriggerBoard)
35
36 //_______________
37 AliEMCALTriggerBoard::AliEMCALTriggerBoard() : TObject(),
38 fRegion(0x0),
39 fMap(0x0),
40 fRegionSize(0x0),
41 fSubRegionSize(0x0),
42 fPatchSize(0x0),
43 fPatches( new TClonesArray("AliEMCALTriggerPatch",10) )
44 {
45         
46 }       
47
48 //_______________
49 AliEMCALTriggerBoard::AliEMCALTriggerBoard(const TVector2& RS) : TObject(),
50 fRegion(0x0),
51 fMap(0x0),
52 fRegionSize(    new TVector2( RS ) ),
53 fSubRegionSize( new TVector2() ),
54 fPatchSize(     new TVector2() ),
55 fPatches( new TClonesArray("AliEMCALTriggerPatch",10) )
56 {
57   fRegion = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );  
58   
59   if (!fRegion) printf("Error: malloc could not allocate %d bytes for fRegion\n",
60                        int(fRegionSize->X() * sizeof( int* )));
61   
62   fMap = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );
63   
64   if (!fMap) printf("Error: malloc could not allocate %d bytes for fMap\n",
65                     int(fRegionSize->X() * sizeof( int* )));
66   
67   for (Int_t i=0;i<fRegionSize->X();i++)
68   {
69     if(fRegion){
70       fRegion[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
71     
72       if (!fRegion[i]) printf("Error: malloc could not allocate %d bytes for fRegion[%d]\n",
73                             i,int(fRegionSize->Y() * sizeof( int )));
74     }
75     if(fMap){
76       fMap[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
77     
78       if (!fMap[i]) printf("Error: malloc could not allocate %d bytes for fMap[%d]\n",
79                            i,int(fRegionSize->Y() * sizeof( int )));
80     }
81   }
82   
83         // Initialize region matrix
84         ZeroRegion();
85         if(fMap){
86         for (int i=0; i<fRegionSize->X(); ++i)
87                 for (int j=0; j<fRegionSize->Y(); ++j) fMap[i][j] = 0;
88   }
89 }
90
91 //_______________
92 AliEMCALTriggerBoard::~AliEMCALTriggerBoard()
93 {
94    for (Int_t i=0;i<fRegionSize->X();i++) 
95    {
96       if (fRegion[i]) {free(fRegion[i]); fRegion[i] = 0;}
97       if (   fMap[i]) {free(fMap[i]);    fMap[i] = 0;}
98    }
99    
100    free(fRegion); fRegion = 0x0;
101    free(fMap);    fMap = 0x0;
102    
103    if(fPatches)fPatches->Delete();
104    
105    delete fPatches;
106 }
107
108 //_______________
109 void AliEMCALTriggerBoard::ZeroRegion()
110 {
111         // Initilize fRegion
112   
113   if(fRegion){
114     for (Int_t i=0;i<int(fRegionSize->X());i++) for (Int_t j=0;j<int(fRegionSize->Y());j++) fRegion[i][j] = 0;
115   }
116   else {
117     AliFatal("fRegion was not previously initialized");
118   }
119
120 }
121
122 //_______________
123 void AliEMCALTriggerBoard::SlidingWindow(TriggerType_t type, Int_t thres, Int_t time)
124 {
125         //
126         Int_t ipatch = 0;
127         
128         for (Int_t i=0; i<=int(fRegionSize->X()-fPatchSize->X()*fSubRegionSize->X()); i+=int(fSubRegionSize->X()))
129         {
130                 for (Int_t j=0; j<=int(fRegionSize->Y()-fPatchSize->Y()*fSubRegionSize->Y()); j+=int(fSubRegionSize->Y()))
131                 {
132                         ipatch++;
133                         
134                         Int_t sum = 0;
135                         
136                         for (Int_t k=0; k<int(fPatchSize->X()*fSubRegionSize->X()); k++)
137                         {
138                                 for (Int_t l=0; l<int(fPatchSize->Y()*fSubRegionSize->Y()); l++)
139                                 {
140                                         sum += fRegion[i+k][j+l];
141                                 }
142                         }
143
144                         if ( type == kL1Jet ) sum /= 4; // truncate patch sum for jet case
145
146                         if ( sum > thres ) 
147                         {
148                                 new((*fPatches)[fPatches->GetLast()+1]) 
149                                                 AliEMCALTriggerPatch(int(i/fSubRegionSize->X()), int(j/fSubRegionSize->Y()), int(sum), time);
150                         }
151                 }
152         }
153 }
154
155 //__________
156 void AliEMCALTriggerBoard::Scan()
157 {
158         //
159         cout << "     ";
160         for (Int_t i=0; i<int(fRegionSize->X()); i++) printf("%8d ",i);
161         cout << "\n";
162         for (Int_t i=0; i<int(fRegionSize->X())-5; i++) printf("-------");
163         cout << "\n";
164         
165         for (Int_t i=0; i<int(fRegionSize->Y()); i++)
166         {
167                 if (i && !(i%12))
168                 {
169                         for (Int_t j=0; j<int(fRegionSize->X())-5; j++) printf("-------");
170                         cout << endl;
171                 }
172                 
173                 printf("%3d |",i);
174                 for (Int_t j=0; j<int(fRegionSize->X()); j++) 
175                 {
176                         printf("%2d/%5d ", fMap[j][i], fRegion[j][i]);
177                 }
178                 cout << endl;
179         }
180 }
181
182 //__________
183 void AliEMCALTriggerBoard::Reset()
184 {
185         //
186         fPatches->Delete();
187         ZeroRegion();
188 }
189