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

// --- ROOT system ---
#include <Riostream.h>
#include <TMath.h>

// --- AliRoot header files ---
#include "AliEMCALRawDigit.h"
#include "AliLog.h"

ClassImp(AliEMCALRawDigit)

//____________________________________________________________________________
AliEMCALRawDigit::AliEMCALRawDigit() : TObject(),
fId(-1),
fNSamples(0),
fSamples(0x0),
fAmplitude(0),
fTime(0)
{
	// default ctor 
}

//____________________________________________________________________________
AliEMCALRawDigit::AliEMCALRawDigit(Int_t id, Int_t timeSamples[], Int_t nSamples) : TObject(),
fId(id),
fNSamples(nSamples),
fSamples(0x0),
fAmplitude(0),
fTime(0)
{
	//
	fSamples = new Int_t[fNSamples];
	for (Int_t i = 0; i < fNSamples; i++) fSamples[i] = timeSamples[i];
}

//____________________________________________________________________________
AliEMCALRawDigit::~AliEMCALRawDigit() 
{
  //dtor, delete array of time samples
  if(fSamples) delete [] fSamples;
}

//____________________________________________________________________________
void AliEMCALRawDigit::Clear(Option_t *) 
{
  // clear, delete array of time samples
  if(fSamples) delete [] fSamples;
}


//____________________________________________________________________________
Bool_t AliEMCALRawDigit::GetTimeSample(const Int_t iSample, Int_t& timeBin, Int_t& amp) const
{
	// returns the time and amplitude of a given time sample and if the sample was ok
  
	if (iSample > fNSamples || iSample < 0) return kFALSE;
	
  amp     = (Short_t)(fSamples[iSample] & 0xFFFF);
  timeBin = (Short_t)(fSamples[iSample] >> 16 );

	return kTRUE;
}

//____________________________________________________________________________
void AliEMCALRawDigit::SetTimeSamples(const Int_t timeSamples[], const Int_t nSamples) 
{
  // Sets the time samples
  
	if (fSamples) 
	{
		AliDebug(1,"Samples already filled: delete first!");
		fNSamples = 0;
		delete [] fSamples;
	}
	
	fNSamples = nSamples;
	fSamples = new Int_t[fNSamples];
	for (Int_t i = 0; i < fNSamples; i++) fSamples[i] = timeSamples[i];
}

//____________________________________________________________________________
Bool_t AliEMCALRawDigit::GetMaximum(Int_t& amplitude, Int_t& time) const
{
	// Checks the maximum amplitude in the time sample
  
	if (!fNSamples)
	{
		AliDebug(1,"Digit has no time sample");
		return kFALSE;
	}
		
	amplitude = 0;
	for (Int_t i = 0; i < fNSamples; i++)
	{
		Int_t t, a;
		if (GetTimeSample(i, t, a))
		{
			if (a > amplitude)
			{
				amplitude = a;
				time      = t;
			}
		}
	}
	
	return kTRUE;
}

//____________________________________________________________________________
Int_t AliEMCALRawDigit::Compare(const TObject * obj) const
{
	// Compares two digits with respect to its Id
	// to sort according increasing Id
	
	Int_t rv=0;
	
	AliEMCALRawDigit* digit = (AliEMCALRawDigit*)obj; 
	
	Int_t iddiff = fId - digit->GetId();
	
	if (iddiff > 0) 
		rv =  1;
	else if (iddiff < 0)
		rv = -1; 
	else
		rv =  0;
	
	return rv; 
}

//____________________________________________________________________________
void AliEMCALRawDigit::Print(const Option_t* /*opt*/) const
{
	// print
  
	printf("===\n| Digit id: %4d / %d Time Samples: \n",fId,fNSamples);
	for (Int_t i=0; i < fNSamples; i++) 
	{
		Int_t timeBin=-1, amp=0;
		GetTimeSample(i, timeBin, amp);
		printf("| (%d,%d) ",timeBin,amp);
	}
	
	printf("\n");
}
 AliEMCALRawDigit.cxx:1
 AliEMCALRawDigit.cxx:2
 AliEMCALRawDigit.cxx:3
 AliEMCALRawDigit.cxx:4
 AliEMCALRawDigit.cxx:5
 AliEMCALRawDigit.cxx:6
 AliEMCALRawDigit.cxx:7
 AliEMCALRawDigit.cxx:8
 AliEMCALRawDigit.cxx:9
 AliEMCALRawDigit.cxx:10
 AliEMCALRawDigit.cxx:11
 AliEMCALRawDigit.cxx:12
 AliEMCALRawDigit.cxx:13
 AliEMCALRawDigit.cxx:14
 AliEMCALRawDigit.cxx:15
 AliEMCALRawDigit.cxx:16
 AliEMCALRawDigit.cxx:17
 AliEMCALRawDigit.cxx:18
 AliEMCALRawDigit.cxx:19
 AliEMCALRawDigit.cxx:20
 AliEMCALRawDigit.cxx:21
 AliEMCALRawDigit.cxx:22
 AliEMCALRawDigit.cxx:23
 AliEMCALRawDigit.cxx:24
 AliEMCALRawDigit.cxx:25
 AliEMCALRawDigit.cxx:26
 AliEMCALRawDigit.cxx:27
 AliEMCALRawDigit.cxx:28
 AliEMCALRawDigit.cxx:29
 AliEMCALRawDigit.cxx:30
 AliEMCALRawDigit.cxx:31
 AliEMCALRawDigit.cxx:32
 AliEMCALRawDigit.cxx:33
 AliEMCALRawDigit.cxx:34
 AliEMCALRawDigit.cxx:35
 AliEMCALRawDigit.cxx:36
 AliEMCALRawDigit.cxx:37
 AliEMCALRawDigit.cxx:38
 AliEMCALRawDigit.cxx:39
 AliEMCALRawDigit.cxx:40
 AliEMCALRawDigit.cxx:41
 AliEMCALRawDigit.cxx:42
 AliEMCALRawDigit.cxx:43
 AliEMCALRawDigit.cxx:44
 AliEMCALRawDigit.cxx:45
 AliEMCALRawDigit.cxx:46
 AliEMCALRawDigit.cxx:47
 AliEMCALRawDigit.cxx:48
 AliEMCALRawDigit.cxx:49
 AliEMCALRawDigit.cxx:50
 AliEMCALRawDigit.cxx:51
 AliEMCALRawDigit.cxx:52
 AliEMCALRawDigit.cxx:53
 AliEMCALRawDigit.cxx:54
 AliEMCALRawDigit.cxx:55
 AliEMCALRawDigit.cxx:56
 AliEMCALRawDigit.cxx:57
 AliEMCALRawDigit.cxx:58
 AliEMCALRawDigit.cxx:59
 AliEMCALRawDigit.cxx:60
 AliEMCALRawDigit.cxx:61
 AliEMCALRawDigit.cxx:62
 AliEMCALRawDigit.cxx:63
 AliEMCALRawDigit.cxx:64
 AliEMCALRawDigit.cxx:65
 AliEMCALRawDigit.cxx:66
 AliEMCALRawDigit.cxx:67
 AliEMCALRawDigit.cxx:68
 AliEMCALRawDigit.cxx:69
 AliEMCALRawDigit.cxx:70
 AliEMCALRawDigit.cxx:71
 AliEMCALRawDigit.cxx:72
 AliEMCALRawDigit.cxx:73
 AliEMCALRawDigit.cxx:74
 AliEMCALRawDigit.cxx:75
 AliEMCALRawDigit.cxx:76
 AliEMCALRawDigit.cxx:77
 AliEMCALRawDigit.cxx:78
 AliEMCALRawDigit.cxx:79
 AliEMCALRawDigit.cxx:80
 AliEMCALRawDigit.cxx:81
 AliEMCALRawDigit.cxx:82
 AliEMCALRawDigit.cxx:83
 AliEMCALRawDigit.cxx:84
 AliEMCALRawDigit.cxx:85
 AliEMCALRawDigit.cxx:86
 AliEMCALRawDigit.cxx:87
 AliEMCALRawDigit.cxx:88
 AliEMCALRawDigit.cxx:89
 AliEMCALRawDigit.cxx:90
 AliEMCALRawDigit.cxx:91
 AliEMCALRawDigit.cxx:92
 AliEMCALRawDigit.cxx:93
 AliEMCALRawDigit.cxx:94
 AliEMCALRawDigit.cxx:95
 AliEMCALRawDigit.cxx:96
 AliEMCALRawDigit.cxx:97
 AliEMCALRawDigit.cxx:98
 AliEMCALRawDigit.cxx:99
 AliEMCALRawDigit.cxx:100
 AliEMCALRawDigit.cxx:101
 AliEMCALRawDigit.cxx:102
 AliEMCALRawDigit.cxx:103
 AliEMCALRawDigit.cxx:104
 AliEMCALRawDigit.cxx:105
 AliEMCALRawDigit.cxx:106
 AliEMCALRawDigit.cxx:107
 AliEMCALRawDigit.cxx:108
 AliEMCALRawDigit.cxx:109
 AliEMCALRawDigit.cxx:110
 AliEMCALRawDigit.cxx:111
 AliEMCALRawDigit.cxx:112
 AliEMCALRawDigit.cxx:113
 AliEMCALRawDigit.cxx:114
 AliEMCALRawDigit.cxx:115
 AliEMCALRawDigit.cxx:116
 AliEMCALRawDigit.cxx:117
 AliEMCALRawDigit.cxx:118
 AliEMCALRawDigit.cxx:119
 AliEMCALRawDigit.cxx:120
 AliEMCALRawDigit.cxx:121
 AliEMCALRawDigit.cxx:122
 AliEMCALRawDigit.cxx:123
 AliEMCALRawDigit.cxx:124
 AliEMCALRawDigit.cxx:125
 AliEMCALRawDigit.cxx:126
 AliEMCALRawDigit.cxx:127
 AliEMCALRawDigit.cxx:128
 AliEMCALRawDigit.cxx:129
 AliEMCALRawDigit.cxx:130
 AliEMCALRawDigit.cxx:131
 AliEMCALRawDigit.cxx:132
 AliEMCALRawDigit.cxx:133
 AliEMCALRawDigit.cxx:134
 AliEMCALRawDigit.cxx:135
 AliEMCALRawDigit.cxx:136
 AliEMCALRawDigit.cxx:137
 AliEMCALRawDigit.cxx:138
 AliEMCALRawDigit.cxx:139
 AliEMCALRawDigit.cxx:140
 AliEMCALRawDigit.cxx:141
 AliEMCALRawDigit.cxx:142
 AliEMCALRawDigit.cxx:143
 AliEMCALRawDigit.cxx:144
 AliEMCALRawDigit.cxx:145
 AliEMCALRawDigit.cxx:146
 AliEMCALRawDigit.cxx:147
 AliEMCALRawDigit.cxx:148
 AliEMCALRawDigit.cxx:149
 AliEMCALRawDigit.cxx:150
 AliEMCALRawDigit.cxx:151
 AliEMCALRawDigit.cxx:152
 AliEMCALRawDigit.cxx:153
 AliEMCALRawDigit.cxx:154
 AliEMCALRawDigit.cxx:155
 AliEMCALRawDigit.cxx:156
 AliEMCALRawDigit.cxx:157
 AliEMCALRawDigit.cxx:158
 AliEMCALRawDigit.cxx:159
 AliEMCALRawDigit.cxx:160
 AliEMCALRawDigit.cxx:161
 AliEMCALRawDigit.cxx:162
 AliEMCALRawDigit.cxx:163
 AliEMCALRawDigit.cxx:164
 AliEMCALRawDigit.cxx:165
 AliEMCALRawDigit.cxx:166