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.                  *
 **************************************************************************/

/*
 

 

Author: R. GUERNANE LPSC Grenoble CNRS/IN2P3
*/

#include "AliAODCaloTrigger.h"
#include "AliLog.h"

#include "TArrayI.h"
#include "Riostream.h"
#include <cstdlib>

ClassImp(AliAODCaloTrigger)

//_______________
AliAODCaloTrigger::AliAODCaloTrigger() : AliVCaloTrigger(),
fNEntries(0),
fCurrent(-1),
fColumn(0x0),
fRow(0x0),
fAmplitude(0x0),
fTime(0x0),
fNL0Times(0x0),
fL0Times(new TArrayI()),
fL1TimeSum(0x0),
fTriggerBits(0x0),
fL1Threshold(),
fL1V0(),
fL1FrameMask(0)
{
	//
	for (int i = 0; i < 4; i++) fL1Threshold[i] = 0;
	fL1V0[0] = fL1V0[1] = 0;
}

//_______________
AliAODCaloTrigger::AliAODCaloTrigger(const char* name, const char* title) : AliVCaloTrigger(name, title),
	fNEntries(0),
	fCurrent(-1),
	fColumn(0x0),
	fRow(0x0),
	fAmplitude(0x0),
	fTime(0x0),
	fNL0Times(0x0),
	fL0Times(new TArrayI()),
	fL1TimeSum(0x0),
	fTriggerBits(0x0),
	fL1Threshold(),
	fL1V0(),
	fL1FrameMask(0)
{
	//
	fL1Threshold[0] = fL1Threshold[1] = 0;
	fL1V0[0] = fL1V0[1] = 0;	
}

//_______________
AliAODCaloTrigger::AliAODCaloTrigger(const AliAODCaloTrigger& src) : AliVCaloTrigger(src),
fNEntries(0),
fCurrent(-1),
fColumn(0x0),
fRow(0x0),
fAmplitude(0x0),
fTime(0x0),
fNL0Times(0x0),
fL0Times(new TArrayI()),
fL1TimeSum(0x0),
fTriggerBits(0x0),
fL1Threshold(),
fL1V0(),
fL1FrameMask(0)
{
	//
	src.Copy(*this);
}

//_______________
AliAODCaloTrigger::~AliAODCaloTrigger()
{
	//
	if (fNEntries) DeAllocate();
	
	delete fL0Times; fL0Times = 0x0;
}

//_______________
void AliAODCaloTrigger::DeAllocate()
{
	//
	delete [] fColumn;      fColumn    = 0x0;
	delete [] fRow;         fRow       = 0x0;     
	delete [] fAmplitude;   fAmplitude = 0x0;
	delete [] fTime;        fTime      = 0x0;   
	delete [] fNL0Times;    fNL0Times  = 0x0;
	delete [] fL1TimeSum;   fL1TimeSum = 0x0;
	delete [] fTriggerBits; fTriggerBits   = 0x0;

	fNEntries =  0;
	fCurrent  = -1;

	fL0Times->Reset();
}

//_______________
AliAODCaloTrigger& AliAODCaloTrigger::operator=(const AliAODCaloTrigger& src)
{
	//
	if (this != &src) src.Copy(*this);
	
	return *this;
}

//_______________
void AliAODCaloTrigger::Copy(TObject &obj) const 
{	
	//
	AliVCaloTrigger::Copy(obj);
	
	AliAODCaloTrigger& dest = static_cast<AliAODCaloTrigger&>(obj);

	if (dest.fNEntries) dest.DeAllocate();
	
	dest.Allocate(fNEntries);
	
	for (Int_t i = 0; i < fNEntries; i++)
	{
		Int_t times[10];
		for (Int_t j = 0; j < 10; j++) times[j] = fL0Times->At(10 * i + j);
	  
		dest.Add(fColumn[i], fRow[i], fAmplitude[i], fTime[i], times, fNL0Times[i], fL1TimeSum[i], fTriggerBits[i]);
	}	

	dest.SetL1Threshold(0, fL1Threshold[0]);
	dest.SetL1Threshold(1, fL1Threshold[1]);
	dest.SetL1V0(fL1V0);
	dest.SetL1FrameMask(fL1FrameMask);
}

//_______________
void AliAODCaloTrigger::Allocate(Int_t size)
{
	//
	if (!size) return;
	
	fNEntries = size;
	
	fColumn      = new   Int_t[fNEntries];
	fRow         = new   Int_t[fNEntries];
	fAmplitude   = new Float_t[fNEntries];
	fTime        = new Float_t[fNEntries];
	fNL0Times    = new   Int_t[fNEntries];
	fL1TimeSum   = new   Int_t[fNEntries];
	fTriggerBits = new   Int_t[fNEntries];

	for (Int_t i = 0; i < fNEntries; i++) 
	{
	  fColumn[i]      = 0;
	  fRow[i]         = 0;
	  fAmplitude[i]   = 0;
	  fTime[i]        = 0;
	  fNL0Times[i]    = 0;
	  fL1TimeSum[i]   = 0;
	  fTriggerBits[i] = 0;
	}
	
	fL0Times->Set(fNEntries * 10);
}

//_______________
Bool_t AliAODCaloTrigger::Add(Int_t col, Int_t row, Float_t amp, Float_t time, Int_t trgtimes[], Int_t ntrgtimes, Int_t trgts, Int_t trgbits)
{
	//
	fCurrent++;
	
	     fColumn[fCurrent] = col;
	        fRow[fCurrent] = row;
	  fAmplitude[fCurrent] = amp;
	       fTime[fCurrent] = time;
	   fNL0Times[fCurrent] = ntrgtimes;
	  fL1TimeSum[fCurrent] = trgts;	
	fTriggerBits[fCurrent] = trgbits;
	
	if (ntrgtimes > 9) 
	{
		AliError("Should not have more than 10 L0 times");
		return kFALSE;
	}
	
	for (Int_t i = 0; i < fNL0Times[fCurrent]; i++) fL0Times->AddAt(trgtimes[i], 10 * fCurrent + i);

	return kTRUE;
}

//_______________
Bool_t AliAODCaloTrigger::Next()
{
	//
	if (fCurrent >= fNEntries - 1 || !fNEntries) return kFALSE;
	
	fCurrent++;
	
	return kTRUE;
}

//_______________
void AliAODCaloTrigger::GetPosition(Int_t& col, Int_t& row) const
{
	//
	if (fCurrent == -1) return;
	
	col = fColumn[fCurrent];
	row =    fRow[fCurrent];
}

//_______________
void AliAODCaloTrigger::GetAmplitude(Float_t& amp) const
{
	//
	if (fCurrent == -1) return;

	amp = fAmplitude[fCurrent];
}

//_______________
void AliAODCaloTrigger::GetTime(Float_t& time) const
{
	//
	if (fCurrent == -1) return;

	time = fTime[fCurrent];
}

//_______________
void AliAODCaloTrigger::GetL1TimeSum(Int_t& amp) const
{
	//	
	if (fCurrent == -1) return;

	amp = fL1TimeSum[fCurrent];
}

//_______________
void AliAODCaloTrigger::GetNL0Times(Int_t& ntimes) const
{
	//
	if (fCurrent == -1) return;

	ntimes = fNL0Times[fCurrent];
}

//_______________
void AliAODCaloTrigger::GetTriggerBits(Int_t& bits) const
{
	//
	if (fCurrent == -1) return;

	bits = fTriggerBits[fCurrent];
}

//_______________
void AliAODCaloTrigger::GetL0Times(Int_t times[]) const
{
	//
	if (fCurrent == -1) return;

	for (Int_t i = 0; i < fNL0Times[fCurrent]; i++) times[i] = fL0Times->At(10 * fCurrent + i);
}

//_______________
void AliAODCaloTrigger::Print(const Option_t* /*opt*/) const
{
	//
	if (fCurrent == -1) return;

	printf("============\n");
	printf("--L0:\n");
	printf("\tPOSITION (X: %2d Y: %2d) / FITTED F-ALTRO (AMP: %4f TIME: %3f)\n", 
		   fColumn[fCurrent], fRow[fCurrent], fAmplitude[fCurrent], fTime[fCurrent]);
	printf("\t%d L0 TIMES (", fNL0Times[fCurrent]); 
	for (Int_t i = 0; i < fNL0Times[fCurrent]; i++) printf("%2d ",fL0Times->At(10 * fCurrent + i));
	printf(")\n");
	printf("--L1:\n");
	printf("\tTIME SUM: %4d\n", fL1TimeSum[fCurrent]);
	printf("\tHIGH THRESHOLDS (GAMMA: %4d, JET: %4d)\n", fL1Threshold[0], fL1Threshold[1]);
	printf("\tLOW THRESHOLDS (GAMMA: %4d, JET: %4d)\n", fL1Threshold[2], fL1Threshold[3]);
	printf("--TRIGGER BITS: 0x%x\n", fTriggerBits[fCurrent]);
}	
 AliAODCaloTrigger.cxx:1
 AliAODCaloTrigger.cxx:2
 AliAODCaloTrigger.cxx:3
 AliAODCaloTrigger.cxx:4
 AliAODCaloTrigger.cxx:5
 AliAODCaloTrigger.cxx:6
 AliAODCaloTrigger.cxx:7
 AliAODCaloTrigger.cxx:8
 AliAODCaloTrigger.cxx:9
 AliAODCaloTrigger.cxx:10
 AliAODCaloTrigger.cxx:11
 AliAODCaloTrigger.cxx:12
 AliAODCaloTrigger.cxx:13
 AliAODCaloTrigger.cxx:14
 AliAODCaloTrigger.cxx:15
 AliAODCaloTrigger.cxx:16
 AliAODCaloTrigger.cxx:17
 AliAODCaloTrigger.cxx:18
 AliAODCaloTrigger.cxx:19
 AliAODCaloTrigger.cxx:20
 AliAODCaloTrigger.cxx:21
 AliAODCaloTrigger.cxx:22
 AliAODCaloTrigger.cxx:23
 AliAODCaloTrigger.cxx:24
 AliAODCaloTrigger.cxx:25
 AliAODCaloTrigger.cxx:26
 AliAODCaloTrigger.cxx:27
 AliAODCaloTrigger.cxx:28
 AliAODCaloTrigger.cxx:29
 AliAODCaloTrigger.cxx:30
 AliAODCaloTrigger.cxx:31
 AliAODCaloTrigger.cxx:32
 AliAODCaloTrigger.cxx:33
 AliAODCaloTrigger.cxx:34
 AliAODCaloTrigger.cxx:35
 AliAODCaloTrigger.cxx:36
 AliAODCaloTrigger.cxx:37
 AliAODCaloTrigger.cxx:38
 AliAODCaloTrigger.cxx:39
 AliAODCaloTrigger.cxx:40
 AliAODCaloTrigger.cxx:41
 AliAODCaloTrigger.cxx:42
 AliAODCaloTrigger.cxx:43
 AliAODCaloTrigger.cxx:44
 AliAODCaloTrigger.cxx:45
 AliAODCaloTrigger.cxx:46
 AliAODCaloTrigger.cxx:47
 AliAODCaloTrigger.cxx:48
 AliAODCaloTrigger.cxx:49
 AliAODCaloTrigger.cxx:50
 AliAODCaloTrigger.cxx:51
 AliAODCaloTrigger.cxx:52
 AliAODCaloTrigger.cxx:53
 AliAODCaloTrigger.cxx:54
 AliAODCaloTrigger.cxx:55
 AliAODCaloTrigger.cxx:56
 AliAODCaloTrigger.cxx:57
 AliAODCaloTrigger.cxx:58
 AliAODCaloTrigger.cxx:59
 AliAODCaloTrigger.cxx:60
 AliAODCaloTrigger.cxx:61
 AliAODCaloTrigger.cxx:62
 AliAODCaloTrigger.cxx:63
 AliAODCaloTrigger.cxx:64
 AliAODCaloTrigger.cxx:65
 AliAODCaloTrigger.cxx:66
 AliAODCaloTrigger.cxx:67
 AliAODCaloTrigger.cxx:68
 AliAODCaloTrigger.cxx:69
 AliAODCaloTrigger.cxx:70
 AliAODCaloTrigger.cxx:71
 AliAODCaloTrigger.cxx:72
 AliAODCaloTrigger.cxx:73
 AliAODCaloTrigger.cxx:74
 AliAODCaloTrigger.cxx:75
 AliAODCaloTrigger.cxx:76
 AliAODCaloTrigger.cxx:77
 AliAODCaloTrigger.cxx:78
 AliAODCaloTrigger.cxx:79
 AliAODCaloTrigger.cxx:80
 AliAODCaloTrigger.cxx:81
 AliAODCaloTrigger.cxx:82
 AliAODCaloTrigger.cxx:83
 AliAODCaloTrigger.cxx:84
 AliAODCaloTrigger.cxx:85
 AliAODCaloTrigger.cxx:86
 AliAODCaloTrigger.cxx:87
 AliAODCaloTrigger.cxx:88
 AliAODCaloTrigger.cxx:89
 AliAODCaloTrigger.cxx:90
 AliAODCaloTrigger.cxx:91
 AliAODCaloTrigger.cxx:92
 AliAODCaloTrigger.cxx:93
 AliAODCaloTrigger.cxx:94
 AliAODCaloTrigger.cxx:95
 AliAODCaloTrigger.cxx:96
 AliAODCaloTrigger.cxx:97
 AliAODCaloTrigger.cxx:98
 AliAODCaloTrigger.cxx:99
 AliAODCaloTrigger.cxx:100
 AliAODCaloTrigger.cxx:101
 AliAODCaloTrigger.cxx:102
 AliAODCaloTrigger.cxx:103
 AliAODCaloTrigger.cxx:104
 AliAODCaloTrigger.cxx:105
 AliAODCaloTrigger.cxx:106
 AliAODCaloTrigger.cxx:107
 AliAODCaloTrigger.cxx:108
 AliAODCaloTrigger.cxx:109
 AliAODCaloTrigger.cxx:110
 AliAODCaloTrigger.cxx:111
 AliAODCaloTrigger.cxx:112
 AliAODCaloTrigger.cxx:113
 AliAODCaloTrigger.cxx:114
 AliAODCaloTrigger.cxx:115
 AliAODCaloTrigger.cxx:116
 AliAODCaloTrigger.cxx:117
 AliAODCaloTrigger.cxx:118
 AliAODCaloTrigger.cxx:119
 AliAODCaloTrigger.cxx:120
 AliAODCaloTrigger.cxx:121
 AliAODCaloTrigger.cxx:122
 AliAODCaloTrigger.cxx:123
 AliAODCaloTrigger.cxx:124
 AliAODCaloTrigger.cxx:125
 AliAODCaloTrigger.cxx:126
 AliAODCaloTrigger.cxx:127
 AliAODCaloTrigger.cxx:128
 AliAODCaloTrigger.cxx:129
 AliAODCaloTrigger.cxx:130
 AliAODCaloTrigger.cxx:131
 AliAODCaloTrigger.cxx:132
 AliAODCaloTrigger.cxx:133
 AliAODCaloTrigger.cxx:134
 AliAODCaloTrigger.cxx:135
 AliAODCaloTrigger.cxx:136
 AliAODCaloTrigger.cxx:137
 AliAODCaloTrigger.cxx:138
 AliAODCaloTrigger.cxx:139
 AliAODCaloTrigger.cxx:140
 AliAODCaloTrigger.cxx:141
 AliAODCaloTrigger.cxx:142
 AliAODCaloTrigger.cxx:143
 AliAODCaloTrigger.cxx:144
 AliAODCaloTrigger.cxx:145
 AliAODCaloTrigger.cxx:146
 AliAODCaloTrigger.cxx:147
 AliAODCaloTrigger.cxx:148
 AliAODCaloTrigger.cxx:149
 AliAODCaloTrigger.cxx:150
 AliAODCaloTrigger.cxx:151
 AliAODCaloTrigger.cxx:152
 AliAODCaloTrigger.cxx:153
 AliAODCaloTrigger.cxx:154
 AliAODCaloTrigger.cxx:155
 AliAODCaloTrigger.cxx:156
 AliAODCaloTrigger.cxx:157
 AliAODCaloTrigger.cxx:158
 AliAODCaloTrigger.cxx:159
 AliAODCaloTrigger.cxx:160
 AliAODCaloTrigger.cxx:161
 AliAODCaloTrigger.cxx:162
 AliAODCaloTrigger.cxx:163
 AliAODCaloTrigger.cxx:164
 AliAODCaloTrigger.cxx:165
 AliAODCaloTrigger.cxx:166
 AliAODCaloTrigger.cxx:167
 AliAODCaloTrigger.cxx:168
 AliAODCaloTrigger.cxx:169
 AliAODCaloTrigger.cxx:170
 AliAODCaloTrigger.cxx:171
 AliAODCaloTrigger.cxx:172
 AliAODCaloTrigger.cxx:173
 AliAODCaloTrigger.cxx:174
 AliAODCaloTrigger.cxx:175
 AliAODCaloTrigger.cxx:176
 AliAODCaloTrigger.cxx:177
 AliAODCaloTrigger.cxx:178
 AliAODCaloTrigger.cxx:179
 AliAODCaloTrigger.cxx:180
 AliAODCaloTrigger.cxx:181
 AliAODCaloTrigger.cxx:182
 AliAODCaloTrigger.cxx:183
 AliAODCaloTrigger.cxx:184
 AliAODCaloTrigger.cxx:185
 AliAODCaloTrigger.cxx:186
 AliAODCaloTrigger.cxx:187
 AliAODCaloTrigger.cxx:188
 AliAODCaloTrigger.cxx:189
 AliAODCaloTrigger.cxx:190
 AliAODCaloTrigger.cxx:191
 AliAODCaloTrigger.cxx:192
 AliAODCaloTrigger.cxx:193
 AliAODCaloTrigger.cxx:194
 AliAODCaloTrigger.cxx:195
 AliAODCaloTrigger.cxx:196
 AliAODCaloTrigger.cxx:197
 AliAODCaloTrigger.cxx:198
 AliAODCaloTrigger.cxx:199
 AliAODCaloTrigger.cxx:200
 AliAODCaloTrigger.cxx:201
 AliAODCaloTrigger.cxx:202
 AliAODCaloTrigger.cxx:203
 AliAODCaloTrigger.cxx:204
 AliAODCaloTrigger.cxx:205
 AliAODCaloTrigger.cxx:206
 AliAODCaloTrigger.cxx:207
 AliAODCaloTrigger.cxx:208
 AliAODCaloTrigger.cxx:209
 AliAODCaloTrigger.cxx:210
 AliAODCaloTrigger.cxx:211
 AliAODCaloTrigger.cxx:212
 AliAODCaloTrigger.cxx:213
 AliAODCaloTrigger.cxx:214
 AliAODCaloTrigger.cxx:215
 AliAODCaloTrigger.cxx:216
 AliAODCaloTrigger.cxx:217
 AliAODCaloTrigger.cxx:218
 AliAODCaloTrigger.cxx:219
 AliAODCaloTrigger.cxx:220
 AliAODCaloTrigger.cxx:221
 AliAODCaloTrigger.cxx:222
 AliAODCaloTrigger.cxx:223
 AliAODCaloTrigger.cxx:224
 AliAODCaloTrigger.cxx:225
 AliAODCaloTrigger.cxx:226
 AliAODCaloTrigger.cxx:227
 AliAODCaloTrigger.cxx:228
 AliAODCaloTrigger.cxx:229
 AliAODCaloTrigger.cxx:230
 AliAODCaloTrigger.cxx:231
 AliAODCaloTrigger.cxx:232
 AliAODCaloTrigger.cxx:233
 AliAODCaloTrigger.cxx:234
 AliAODCaloTrigger.cxx:235
 AliAODCaloTrigger.cxx:236
 AliAODCaloTrigger.cxx:237
 AliAODCaloTrigger.cxx:238
 AliAODCaloTrigger.cxx:239
 AliAODCaloTrigger.cxx:240
 AliAODCaloTrigger.cxx:241
 AliAODCaloTrigger.cxx:242
 AliAODCaloTrigger.cxx:243
 AliAODCaloTrigger.cxx:244
 AliAODCaloTrigger.cxx:245
 AliAODCaloTrigger.cxx:246
 AliAODCaloTrigger.cxx:247
 AliAODCaloTrigger.cxx:248
 AliAODCaloTrigger.cxx:249
 AliAODCaloTrigger.cxx:250
 AliAODCaloTrigger.cxx:251
 AliAODCaloTrigger.cxx:252
 AliAODCaloTrigger.cxx:253
 AliAODCaloTrigger.cxx:254
 AliAODCaloTrigger.cxx:255
 AliAODCaloTrigger.cxx:256
 AliAODCaloTrigger.cxx:257
 AliAODCaloTrigger.cxx:258
 AliAODCaloTrigger.cxx:259
 AliAODCaloTrigger.cxx:260
 AliAODCaloTrigger.cxx:261
 AliAODCaloTrigger.cxx:262
 AliAODCaloTrigger.cxx:263
 AliAODCaloTrigger.cxx:264
 AliAODCaloTrigger.cxx:265
 AliAODCaloTrigger.cxx:266
 AliAODCaloTrigger.cxx:267
 AliAODCaloTrigger.cxx:268
 AliAODCaloTrigger.cxx:269
 AliAODCaloTrigger.cxx:270
 AliAODCaloTrigger.cxx:271
 AliAODCaloTrigger.cxx:272
 AliAODCaloTrigger.cxx:273
 AliAODCaloTrigger.cxx:274
 AliAODCaloTrigger.cxx:275
 AliAODCaloTrigger.cxx:276
 AliAODCaloTrigger.cxx:277
 AliAODCaloTrigger.cxx:278
 AliAODCaloTrigger.cxx:279
 AliAODCaloTrigger.cxx:280
 AliAODCaloTrigger.cxx:281
 AliAODCaloTrigger.cxx:282
 AliAODCaloTrigger.cxx:283
 AliAODCaloTrigger.cxx:284
 AliAODCaloTrigger.cxx:285
 AliAODCaloTrigger.cxx:286
 AliAODCaloTrigger.cxx:287
 AliAODCaloTrigger.cxx:288
 AliAODCaloTrigger.cxx:289
 AliAODCaloTrigger.cxx:290
 AliAODCaloTrigger.cxx:291
 AliAODCaloTrigger.cxx:292
 AliAODCaloTrigger.cxx:293
 AliAODCaloTrigger.cxx:294
 AliAODCaloTrigger.cxx:295
 AliAODCaloTrigger.cxx:296
 AliAODCaloTrigger.cxx:297
 AliAODCaloTrigger.cxx:298
 AliAODCaloTrigger.cxx:299
 AliAODCaloTrigger.cxx:300
 AliAODCaloTrigger.cxx:301
 AliAODCaloTrigger.cxx:302
 AliAODCaloTrigger.cxx:303
 AliAODCaloTrigger.cxx:304
 AliAODCaloTrigger.cxx:305