ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/*
 

EMCal trigger board super class
run the sliding window algorithm
Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
*/

#include "AliEMCALTriggerBoard.h"
#include "AliEMCALTriggerPatch.h"
#include "AliLog.h"

#include <TClonesArray.h>
#include <iostream>
#include <cstdlib>

using namespace std;

ClassImp(AliEMCALTriggerBoard)

//_______________
AliEMCALTriggerBoard::AliEMCALTriggerBoard() : TObject(),
fRegion(0x0),
fMap(0x0),
fRegionSize(0x0),
fSubRegionSize(0x0),
fPatchSize(0x0),
fPatches(0x0)
{
	
}	

//_______________
AliEMCALTriggerBoard::AliEMCALTriggerBoard(const TVector2& RS) : TObject(),
fRegion(0x0),
fMap(0x0),
fRegionSize(    new TVector2( RS ) ),
fSubRegionSize( new TVector2() ),
fPatchSize(     new TVector2() ),
fPatches( new TClonesArray("AliEMCALTriggerPatch",10) )
{
	// Ctor
	
  fRegion = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );  
  
  if (!fRegion) printf("Error: malloc could not allocate %d bytes for fRegion\n",
                       int(fRegionSize->X() * sizeof( int* )));
  
  fMap = (int**)malloc( (int)fRegionSize->X() * sizeof( int* ) );
  
  if (!fMap) printf("Error: malloc could not allocate %d bytes for fMap\n",
                    int(fRegionSize->X() * sizeof( int* )));
  
  for (Int_t i=0;i<fRegionSize->X();i++)
  {
    if(fRegion){
      fRegion[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
    
      if (!fRegion[i]) printf("Error: malloc could not allocate %d bytes for fRegion[%d]\n",
                            i,int(fRegionSize->Y() * sizeof( int )));
    }
    if(fMap){
      fMap[i] = (int*)malloc( (int)fRegionSize->Y() * sizeof( int ) );
    
      if (!fMap[i]) printf("Error: malloc could not allocate %d bytes for fMap[%d]\n",
                           i,int(fRegionSize->Y() * sizeof( int )));
    }
  }
  
	// Initialize region matrix
	ZeroRegion();
	if(fMap){
	for (int i=0; i<fRegionSize->X(); ++i)
		for (int j=0; j<fRegionSize->Y(); ++j) fMap[i][j] = 0;
  }
}

//_______________
AliEMCALTriggerBoard::~AliEMCALTriggerBoard()
{
	// Dtor
	
   for (Int_t i=0;i<fRegionSize->X();i++) 
   {
      if (fRegion[i]) {free(fRegion[i]); fRegion[i] = 0;}
      if (   fMap[i]) {free(fMap[i]);    fMap[i] = 0;}
   }
   
   free(fRegion); fRegion = 0x0;
   free(fMap);    fMap = 0x0;
   
   if(fPatches)fPatches->Delete();
   
   delete fPatches;
}

//_______________
void AliEMCALTriggerBoard::ZeroRegion()
{
	// Initilize fRegion
  
  if(fRegion){
    for (Int_t i=0;i<int(fRegionSize->X());i++) for (Int_t j=0;j<int(fRegionSize->Y());j++) fRegion[i][j] = 0;
  }
  else {
    AliFatal("fRegion was not previously initialized");
  }

}

//_______________
void AliEMCALTriggerBoard::SlidingWindow(Int_t thres)
{
	// Sliding window	
	for (int i = 0; i <= int(fRegionSize->X() - fPatchSize->X() * fSubRegionSize->X()); i += int(fSubRegionSize->X())) {
		for (int j = 0; j <= int(fRegionSize->Y() - fPatchSize->Y() * fSubRegionSize->Y()); j += int(fSubRegionSize->Y())) {
			//
		        AliDebug(999, Form("--- Current window at (%2d,%2d) ---",i,j));
			int sum = 0;
			
			for (int k = 0; k < int(fPatchSize->X() * fSubRegionSize->X()); k++) {
				for (int l = 0; l < int(fPatchSize->Y() * fSubRegionSize->Y()); l++) {
					//
					sum += fRegion[i + k][j + l]; 
					AliDebug(999, Form("Adding fRegion[%2d + %2d][%2d + %2d]: %d and sum is %d",i,k,j,l,fRegion[i + k][j + l],sum));
				}
			}
			
			if (sum > thres) {
			  AliDebug(999, Form("Adding new patch at (%2d,%2d) w/ amplitude %d", i, j, sum));
				new((*fPatches)[fPatches->GetEntriesFast()]) AliEMCALTriggerPatch(i, j, sum);
			}
		}
	}
}

//__________
void AliEMCALTriggerBoard::Scan()
{
	// Dump
	
	cout << "     ";
	for (Int_t i=0; i<int(fRegionSize->X()); i++) printf("%8d ",i);
	cout << "\n";
	for (Int_t i=0; i<int(fRegionSize->X())-5; i++) printf("-------");
	cout << "\n";
	
	for (Int_t i=0; i<int(fRegionSize->Y()); i++)
	{
		if (i && !(i%12))
		{
			for (Int_t j=0; j<int(fRegionSize->X())-5; j++) printf("-------");
			cout << endl;
		}
		
		printf("%3d |",i);
		for (Int_t j=0; j<int(fRegionSize->X()); j++) 
		{
			printf("%2d/%5d ", fMap[j][i], fRegion[j][i]);
		}
		cout << endl;
	}
}

//__________
void AliEMCALTriggerBoard::Reset()
{
	//
	fPatches->Delete();
	ZeroRegion();
}

 AliEMCALTriggerBoard.cxx:1
 AliEMCALTriggerBoard.cxx:2
 AliEMCALTriggerBoard.cxx:3
 AliEMCALTriggerBoard.cxx:4
 AliEMCALTriggerBoard.cxx:5
 AliEMCALTriggerBoard.cxx:6
 AliEMCALTriggerBoard.cxx:7
 AliEMCALTriggerBoard.cxx:8
 AliEMCALTriggerBoard.cxx:9
 AliEMCALTriggerBoard.cxx:10
 AliEMCALTriggerBoard.cxx:11
 AliEMCALTriggerBoard.cxx:12
 AliEMCALTriggerBoard.cxx:13
 AliEMCALTriggerBoard.cxx:14
 AliEMCALTriggerBoard.cxx:15
 AliEMCALTriggerBoard.cxx:16
 AliEMCALTriggerBoard.cxx:17
 AliEMCALTriggerBoard.cxx:18
 AliEMCALTriggerBoard.cxx:19
 AliEMCALTriggerBoard.cxx:20
 AliEMCALTriggerBoard.cxx:21
 AliEMCALTriggerBoard.cxx:22
 AliEMCALTriggerBoard.cxx:23
 AliEMCALTriggerBoard.cxx:24
 AliEMCALTriggerBoard.cxx:25
 AliEMCALTriggerBoard.cxx:26
 AliEMCALTriggerBoard.cxx:27
 AliEMCALTriggerBoard.cxx:28
 AliEMCALTriggerBoard.cxx:29
 AliEMCALTriggerBoard.cxx:30
 AliEMCALTriggerBoard.cxx:31
 AliEMCALTriggerBoard.cxx:32
 AliEMCALTriggerBoard.cxx:33
 AliEMCALTriggerBoard.cxx:34
 AliEMCALTriggerBoard.cxx:35
 AliEMCALTriggerBoard.cxx:36
 AliEMCALTriggerBoard.cxx:37
 AliEMCALTriggerBoard.cxx:38
 AliEMCALTriggerBoard.cxx:39
 AliEMCALTriggerBoard.cxx:40
 AliEMCALTriggerBoard.cxx:41
 AliEMCALTriggerBoard.cxx:42
 AliEMCALTriggerBoard.cxx:43
 AliEMCALTriggerBoard.cxx:44
 AliEMCALTriggerBoard.cxx:45
 AliEMCALTriggerBoard.cxx:46
 AliEMCALTriggerBoard.cxx:47
 AliEMCALTriggerBoard.cxx:48
 AliEMCALTriggerBoard.cxx:49
 AliEMCALTriggerBoard.cxx:50
 AliEMCALTriggerBoard.cxx:51
 AliEMCALTriggerBoard.cxx:52
 AliEMCALTriggerBoard.cxx:53
 AliEMCALTriggerBoard.cxx:54
 AliEMCALTriggerBoard.cxx:55
 AliEMCALTriggerBoard.cxx:56
 AliEMCALTriggerBoard.cxx:57
 AliEMCALTriggerBoard.cxx:58
 AliEMCALTriggerBoard.cxx:59
 AliEMCALTriggerBoard.cxx:60
 AliEMCALTriggerBoard.cxx:61
 AliEMCALTriggerBoard.cxx:62
 AliEMCALTriggerBoard.cxx:63
 AliEMCALTriggerBoard.cxx:64
 AliEMCALTriggerBoard.cxx:65
 AliEMCALTriggerBoard.cxx:66
 AliEMCALTriggerBoard.cxx:67
 AliEMCALTriggerBoard.cxx:68
 AliEMCALTriggerBoard.cxx:69
 AliEMCALTriggerBoard.cxx:70
 AliEMCALTriggerBoard.cxx:71
 AliEMCALTriggerBoard.cxx:72
 AliEMCALTriggerBoard.cxx:73
 AliEMCALTriggerBoard.cxx:74
 AliEMCALTriggerBoard.cxx:75
 AliEMCALTriggerBoard.cxx:76
 AliEMCALTriggerBoard.cxx:77
 AliEMCALTriggerBoard.cxx:78
 AliEMCALTriggerBoard.cxx:79
 AliEMCALTriggerBoard.cxx:80
 AliEMCALTriggerBoard.cxx:81
 AliEMCALTriggerBoard.cxx:82
 AliEMCALTriggerBoard.cxx:83
 AliEMCALTriggerBoard.cxx:84
 AliEMCALTriggerBoard.cxx:85
 AliEMCALTriggerBoard.cxx:86
 AliEMCALTriggerBoard.cxx:87
 AliEMCALTriggerBoard.cxx:88
 AliEMCALTriggerBoard.cxx:89
 AliEMCALTriggerBoard.cxx:90
 AliEMCALTriggerBoard.cxx:91
 AliEMCALTriggerBoard.cxx:92
 AliEMCALTriggerBoard.cxx:93
 AliEMCALTriggerBoard.cxx:94
 AliEMCALTriggerBoard.cxx:95
 AliEMCALTriggerBoard.cxx:96
 AliEMCALTriggerBoard.cxx:97
 AliEMCALTriggerBoard.cxx:98
 AliEMCALTriggerBoard.cxx:99
 AliEMCALTriggerBoard.cxx:100
 AliEMCALTriggerBoard.cxx:101
 AliEMCALTriggerBoard.cxx:102
 AliEMCALTriggerBoard.cxx:103
 AliEMCALTriggerBoard.cxx:104
 AliEMCALTriggerBoard.cxx:105
 AliEMCALTriggerBoard.cxx:106
 AliEMCALTriggerBoard.cxx:107
 AliEMCALTriggerBoard.cxx:108
 AliEMCALTriggerBoard.cxx:109
 AliEMCALTriggerBoard.cxx:110
 AliEMCALTriggerBoard.cxx:111
 AliEMCALTriggerBoard.cxx:112
 AliEMCALTriggerBoard.cxx:113
 AliEMCALTriggerBoard.cxx:114
 AliEMCALTriggerBoard.cxx:115
 AliEMCALTriggerBoard.cxx:116
 AliEMCALTriggerBoard.cxx:117
 AliEMCALTriggerBoard.cxx:118
 AliEMCALTriggerBoard.cxx:119
 AliEMCALTriggerBoard.cxx:120
 AliEMCALTriggerBoard.cxx:121
 AliEMCALTriggerBoard.cxx:122
 AliEMCALTriggerBoard.cxx:123
 AliEMCALTriggerBoard.cxx:124
 AliEMCALTriggerBoard.cxx:125
 AliEMCALTriggerBoard.cxx:126
 AliEMCALTriggerBoard.cxx:127
 AliEMCALTriggerBoard.cxx:128
 AliEMCALTriggerBoard.cxx:129
 AliEMCALTriggerBoard.cxx:130
 AliEMCALTriggerBoard.cxx:131
 AliEMCALTriggerBoard.cxx:132
 AliEMCALTriggerBoard.cxx:133
 AliEMCALTriggerBoard.cxx:134
 AliEMCALTriggerBoard.cxx:135
 AliEMCALTriggerBoard.cxx:136
 AliEMCALTriggerBoard.cxx:137
 AliEMCALTriggerBoard.cxx:138
 AliEMCALTriggerBoard.cxx:139
 AliEMCALTriggerBoard.cxx:140
 AliEMCALTriggerBoard.cxx:141
 AliEMCALTriggerBoard.cxx:142
 AliEMCALTriggerBoard.cxx:143
 AliEMCALTriggerBoard.cxx:144
 AliEMCALTriggerBoard.cxx:145
 AliEMCALTriggerBoard.cxx:146
 AliEMCALTriggerBoard.cxx:147
 AliEMCALTriggerBoard.cxx:148
 AliEMCALTriggerBoard.cxx:149
 AliEMCALTriggerBoard.cxx:150
 AliEMCALTriggerBoard.cxx:151
 AliEMCALTriggerBoard.cxx:152
 AliEMCALTriggerBoard.cxx:153
 AliEMCALTriggerBoard.cxx:154
 AliEMCALTriggerBoard.cxx:155
 AliEMCALTriggerBoard.cxx:156
 AliEMCALTriggerBoard.cxx:157
 AliEMCALTriggerBoard.cxx:158
 AliEMCALTriggerBoard.cxx:159
 AliEMCALTriggerBoard.cxx:160
 AliEMCALTriggerBoard.cxx:161
 AliEMCALTriggerBoard.cxx:162
 AliEMCALTriggerBoard.cxx:163
 AliEMCALTriggerBoard.cxx:164
 AliEMCALTriggerBoard.cxx:165
 AliEMCALTriggerBoard.cxx:166
 AliEMCALTriggerBoard.cxx:167
 AliEMCALTriggerBoard.cxx:168
 AliEMCALTriggerBoard.cxx:169
 AliEMCALTriggerBoard.cxx:170
 AliEMCALTriggerBoard.cxx:171
 AliEMCALTriggerBoard.cxx:172
 AliEMCALTriggerBoard.cxx:173
 AliEMCALTriggerBoard.cxx:174
 AliEMCALTriggerBoard.cxx:175
 AliEMCALTriggerBoard.cxx:176
 AliEMCALTriggerBoard.cxx:177
 AliEMCALTriggerBoard.cxx:178
 AliEMCALTriggerBoard.cxx:179
 AliEMCALTriggerBoard.cxx:180
 AliEMCALTriggerBoard.cxx:181
 AliEMCALTriggerBoard.cxx:182
 AliEMCALTriggerBoard.cxx:183
 AliEMCALTriggerBoard.cxx:184
 AliEMCALTriggerBoard.cxx:185
 AliEMCALTriggerBoard.cxx:186
 AliEMCALTriggerBoard.cxx:187