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

// 
// Class to hold variable size arrays of Float_t
//

#include <TObject.h>
#include <TArrayF.h>
#include <TCollection.h>
#include "AliTOFArray.h"
//#include "AliLog.h"

ClassImp(AliTOFArray)

//-------------------------------------------------------------------
AliTOFArray::AliTOFArray(Int_t size):
	TObject(),
	fSize(size),
	fArray(new TArrayF*[size]){

	// constructor

	for (Int_t i=0;i<size;i++){
		fArray[i] = NULL;
	}
}
//-------------------------------------------------------------------
AliTOFArray::AliTOFArray(const AliTOFArray & source):
	TObject(),fSize(0),fArray(0x0){ 

	//
	// copy constructor
	//

	this->fSize= source.fSize;
	fArray = new TArrayF*[fSize];
	for (Int_t ich = 0; ich<fSize; ich ++){
		fArray[ich] = new TArrayF();
		fArray[ich]->Set(source.fArray[ich]->GetSize());
		for (Int_t j = 0; j < fArray[ich]->GetSize(); j++){
			fArray[ich]->AddAt(fArray[ich]->GetAt(j),j);
		}
	}
}

//-------------------------------------------------------------------
AliTOFArray& AliTOFArray::operator=(const AliTOFArray & source) { 

	//
	// assignment operator
	//

	if (this != &source){
		this->fSize= source.fSize;
		delete [] fArray;
		fArray = new TArrayF*[fSize];
		for (Int_t ich = 0; ich<fSize; ich ++){
			fArray[ich] = new TArrayF();
			fArray[ich]->Set(source.fArray[ich]->GetSize());
			for (Int_t j = 0; j < fArray[ich]->GetSize(); j++){
				fArray[ich]->AddAt(fArray[ich]->GetAt(j),j);
			}
		}
	}
	return *this;
}

//------------------------------------------------------------------
AliTOFArray::~AliTOFArray(){

	//
	// Destructor
	//

	delete [] fArray;
}

//-------------------------------------------------------------------
void AliTOFArray::SetArray(Int_t pos, Int_t size) {

	//
	// adding an array of Float_t with size=size
	//
	
	if (pos>-1 && pos < fSize){
		if (!fArray[pos]) {
			//			printf("Creating array\n");
			fArray[pos] = new TArrayF();			
		}
		fArray[pos]->Reset();
		fArray[pos]->Set(size);
	}
	else printf("Position out of bounds, returning\n");
	return;
}

//-------------------------------------------------------------------
void AliTOFArray::SetAt(Int_t pos, Int_t nelements, Float_t* content) {

	// pos = index of the array to be modified
	// nelements = n. of elements to be modified in array 
	// content = values to be set in array

	if (pos>-1 && pos < fSize){
		if (fArray[pos]){
			Int_t size = fArray[pos]->GetSize();
			if (nelements <= size){
				for (Int_t i=0;i<nelements;i++){
					fArray[pos]->AddAt(content[i],i);
				}
			}
			else printf("Too many elements to be added, returning without adding any\n");
		}
		else printf("Non-existing array, returning\n");
	}
	else printf("Position out of bounds, returning\n");
	return;
}

//-------------------------------------------------------------------
void AliTOFArray::SetAt(Int_t pos, Int_t ielement, Float_t content) {

	// pos = index of the array to be modified
	// ielement = index of the element to be modified in array 
	// content = value to be set in array

	if (pos>-1 && pos < fSize){
		if (fArray[pos]){
			Int_t size = fArray[pos]->GetSize();
			if (ielement < size){
				//printf("Adding %f content in position %d to array %d \n",content, ielement, pos);
				fArray[pos]->AddAt(content,ielement);
			}
			else if (ielement == size) {
				printf ("Increasing the size by 1 and adding a new element to the array\n");
				fArray[pos]->Set(size+1);
				fArray[pos]->AddAt(content,ielement);
			}
			else printf("Not possible to add element %d, size of the array too small, and this would not be the next entry!\n",ielement);
		}
		else printf("Non-existing array, returning\n");
	}	
	else printf("Position out of bounds, returning\n");
	return;
}

//-------------------------------------------------------------------
void AliTOFArray::RemoveArray(Int_t pos) {

	//
	// removing the array at position pos
	//

	if (fArray[pos]) fArray[pos]->Reset();
	else printf("Not possible to remove array, array does not exist\n");
	return;
}

//-------------------------------------------------------------------
Float_t* AliTOFArray::GetArray(Int_t pos) {

	//
	// Getting back array at position pos
	//

	if  (pos>-1 && pos < fSize){
		if (fArray[pos]){
			return fArray[pos]->GetArray();
		}
		else printf("Non-existing array, returning\n");
	}
	else printf("Position out of bounds, returning\n");
	return 0;
}

//-------------------------------------------------------------------
Float_t AliTOFArray::GetArrayAt(Int_t pos, Int_t ielement) {

	//
	// Getting back ielement of array at position pos
	//

	if  (pos>-1 && pos < fSize){
		if (fArray[pos]){
			if (ielement<fArray[pos]->GetSize()){
				return fArray[pos]->GetAt(ielement);
			}
			else printf("Element in array out of bounds, returning\n");
		}
		else printf("Non-existing array, returning\n");
	}
	else printf("Position out of bounds, returning\n");
	return 0;
}

//-------------------------------------------------------------------
void AliTOFArray::ReSetArraySize(Int_t pos, Int_t size) {

	//
	// Changing size of array at position pos, using TArrayF::Set method
	// (without loosing what is already there)
	//

	if  (pos>-1 && pos < fSize){
		if (fArray[pos]){
			fArray[pos]->Set(size);
		}
		else printf("Non-existing array, returning\n");
	}
	else printf("Position out of bounds, returning\n");
	return;
}

//-------------------------------------------------------------------
Int_t AliTOFArray::GetArraySize(Int_t pos) {

	//
	// Getting back size of array at position pos
	//

	if  (pos>-1 && pos < fSize){
		if (fArray[pos]){
			return fArray[pos]->GetSize();
		}
		else printf("Non-existing array, returning\n");
	}
	else printf("Position out of bounds, returning\n");
	return -1;
}

//-------------------------------------------------------------------
Long64_t AliTOFArray::Merge(TCollection *list){

	//
	// Merging method
	//
	
	if (!list) return 0;
	if (list->IsEmpty()) return 1;
	printf("Merging %d AliTOFArrays %s\n", list->GetSize()+1, GetName());
	
	// iterating over the entries in the TList
	TIter next(list);
	AliTOFArray *tofArray;
	Int_t count = 0; // object counter
	while ((tofArray=(AliTOFArray*)next())) {
		//		printf("Count = %d \n",count);
		//if (!tofArray) continue; // dead_code x coverity
		if (tofArray->GetSize() != fSize){
			printf("Merging with current entry in list not possible, AliTOFArray in the list has size different from the current one\n");
			continue;
		}
		for (Int_t i = 0; i<fSize; i++){
			Float_t* tempArray = tofArray->GetArray(i);
			Int_t tempSize = tofArray->GetArraySize(i);
			Int_t currentSize = GetArraySize(i);
			Int_t mergeSize = currentSize+tempSize;
			fArray[i]->Set(mergeSize);
			if (tempSize !=0){
				for (Int_t j = currentSize; j<mergeSize; j++){
					SetAt(i,j,tempArray[j-currentSize]);
				}
			}			
		}
		count++;
		printf("Count = %d \n",count);
		
	}
	return count+1;
	
}

 AliTOFArray.cxx:1
 AliTOFArray.cxx:2
 AliTOFArray.cxx:3
 AliTOFArray.cxx:4
 AliTOFArray.cxx:5
 AliTOFArray.cxx:6
 AliTOFArray.cxx:7
 AliTOFArray.cxx:8
 AliTOFArray.cxx:9
 AliTOFArray.cxx:10
 AliTOFArray.cxx:11
 AliTOFArray.cxx:12
 AliTOFArray.cxx:13
 AliTOFArray.cxx:14
 AliTOFArray.cxx:15
 AliTOFArray.cxx:16
 AliTOFArray.cxx:17
 AliTOFArray.cxx:18
 AliTOFArray.cxx:19
 AliTOFArray.cxx:20
 AliTOFArray.cxx:21
 AliTOFArray.cxx:22
 AliTOFArray.cxx:23
 AliTOFArray.cxx:24
 AliTOFArray.cxx:25
 AliTOFArray.cxx:26
 AliTOFArray.cxx:27
 AliTOFArray.cxx:28
 AliTOFArray.cxx:29
 AliTOFArray.cxx:30
 AliTOFArray.cxx:31
 AliTOFArray.cxx:32
 AliTOFArray.cxx:33
 AliTOFArray.cxx:34
 AliTOFArray.cxx:35
 AliTOFArray.cxx:36
 AliTOFArray.cxx:37
 AliTOFArray.cxx:38
 AliTOFArray.cxx:39
 AliTOFArray.cxx:40
 AliTOFArray.cxx:41
 AliTOFArray.cxx:42
 AliTOFArray.cxx:43
 AliTOFArray.cxx:44
 AliTOFArray.cxx:45
 AliTOFArray.cxx:46
 AliTOFArray.cxx:47
 AliTOFArray.cxx:48
 AliTOFArray.cxx:49
 AliTOFArray.cxx:50
 AliTOFArray.cxx:51
 AliTOFArray.cxx:52
 AliTOFArray.cxx:53
 AliTOFArray.cxx:54
 AliTOFArray.cxx:55
 AliTOFArray.cxx:56
 AliTOFArray.cxx:57
 AliTOFArray.cxx:58
 AliTOFArray.cxx:59
 AliTOFArray.cxx:60
 AliTOFArray.cxx:61
 AliTOFArray.cxx:62
 AliTOFArray.cxx:63
 AliTOFArray.cxx:64
 AliTOFArray.cxx:65
 AliTOFArray.cxx:66
 AliTOFArray.cxx:67
 AliTOFArray.cxx:68
 AliTOFArray.cxx:69
 AliTOFArray.cxx:70
 AliTOFArray.cxx:71
 AliTOFArray.cxx:72
 AliTOFArray.cxx:73
 AliTOFArray.cxx:74
 AliTOFArray.cxx:75
 AliTOFArray.cxx:76
 AliTOFArray.cxx:77
 AliTOFArray.cxx:78
 AliTOFArray.cxx:79
 AliTOFArray.cxx:80
 AliTOFArray.cxx:81
 AliTOFArray.cxx:82
 AliTOFArray.cxx:83
 AliTOFArray.cxx:84
 AliTOFArray.cxx:85
 AliTOFArray.cxx:86
 AliTOFArray.cxx:87
 AliTOFArray.cxx:88
 AliTOFArray.cxx:89
 AliTOFArray.cxx:90
 AliTOFArray.cxx:91
 AliTOFArray.cxx:92
 AliTOFArray.cxx:93
 AliTOFArray.cxx:94
 AliTOFArray.cxx:95
 AliTOFArray.cxx:96
 AliTOFArray.cxx:97
 AliTOFArray.cxx:98
 AliTOFArray.cxx:99
 AliTOFArray.cxx:100
 AliTOFArray.cxx:101
 AliTOFArray.cxx:102
 AliTOFArray.cxx:103
 AliTOFArray.cxx:104
 AliTOFArray.cxx:105
 AliTOFArray.cxx:106
 AliTOFArray.cxx:107
 AliTOFArray.cxx:108
 AliTOFArray.cxx:109
 AliTOFArray.cxx:110
 AliTOFArray.cxx:111
 AliTOFArray.cxx:112
 AliTOFArray.cxx:113
 AliTOFArray.cxx:114
 AliTOFArray.cxx:115
 AliTOFArray.cxx:116
 AliTOFArray.cxx:117
 AliTOFArray.cxx:118
 AliTOFArray.cxx:119
 AliTOFArray.cxx:120
 AliTOFArray.cxx:121
 AliTOFArray.cxx:122
 AliTOFArray.cxx:123
 AliTOFArray.cxx:124
 AliTOFArray.cxx:125
 AliTOFArray.cxx:126
 AliTOFArray.cxx:127
 AliTOFArray.cxx:128
 AliTOFArray.cxx:129
 AliTOFArray.cxx:130
 AliTOFArray.cxx:131
 AliTOFArray.cxx:132
 AliTOFArray.cxx:133
 AliTOFArray.cxx:134
 AliTOFArray.cxx:135
 AliTOFArray.cxx:136
 AliTOFArray.cxx:137
 AliTOFArray.cxx:138
 AliTOFArray.cxx:139
 AliTOFArray.cxx:140
 AliTOFArray.cxx:141
 AliTOFArray.cxx:142
 AliTOFArray.cxx:143
 AliTOFArray.cxx:144
 AliTOFArray.cxx:145
 AliTOFArray.cxx:146
 AliTOFArray.cxx:147
 AliTOFArray.cxx:148
 AliTOFArray.cxx:149
 AliTOFArray.cxx:150
 AliTOFArray.cxx:151
 AliTOFArray.cxx:152
 AliTOFArray.cxx:153
 AliTOFArray.cxx:154
 AliTOFArray.cxx:155
 AliTOFArray.cxx:156
 AliTOFArray.cxx:157
 AliTOFArray.cxx:158
 AliTOFArray.cxx:159
 AliTOFArray.cxx:160
 AliTOFArray.cxx:161
 AliTOFArray.cxx:162
 AliTOFArray.cxx:163
 AliTOFArray.cxx:164
 AliTOFArray.cxx:165
 AliTOFArray.cxx:166
 AliTOFArray.cxx:167
 AliTOFArray.cxx:168
 AliTOFArray.cxx:169
 AliTOFArray.cxx:170
 AliTOFArray.cxx:171
 AliTOFArray.cxx:172
 AliTOFArray.cxx:173
 AliTOFArray.cxx:174
 AliTOFArray.cxx:175
 AliTOFArray.cxx:176
 AliTOFArray.cxx:177
 AliTOFArray.cxx:178
 AliTOFArray.cxx:179
 AliTOFArray.cxx:180
 AliTOFArray.cxx:181
 AliTOFArray.cxx:182
 AliTOFArray.cxx:183
 AliTOFArray.cxx:184
 AliTOFArray.cxx:185
 AliTOFArray.cxx:186
 AliTOFArray.cxx:187
 AliTOFArray.cxx:188
 AliTOFArray.cxx:189
 AliTOFArray.cxx:190
 AliTOFArray.cxx:191
 AliTOFArray.cxx:192
 AliTOFArray.cxx:193
 AliTOFArray.cxx:194
 AliTOFArray.cxx:195
 AliTOFArray.cxx:196
 AliTOFArray.cxx:197
 AliTOFArray.cxx:198
 AliTOFArray.cxx:199
 AliTOFArray.cxx:200
 AliTOFArray.cxx:201
 AliTOFArray.cxx:202
 AliTOFArray.cxx:203
 AliTOFArray.cxx:204
 AliTOFArray.cxx:205
 AliTOFArray.cxx:206
 AliTOFArray.cxx:207
 AliTOFArray.cxx:208
 AliTOFArray.cxx:209
 AliTOFArray.cxx:210
 AliTOFArray.cxx:211
 AliTOFArray.cxx:212
 AliTOFArray.cxx:213
 AliTOFArray.cxx:214
 AliTOFArray.cxx:215
 AliTOFArray.cxx:216
 AliTOFArray.cxx:217
 AliTOFArray.cxx:218
 AliTOFArray.cxx:219
 AliTOFArray.cxx:220
 AliTOFArray.cxx:221
 AliTOFArray.cxx:222
 AliTOFArray.cxx:223
 AliTOFArray.cxx:224
 AliTOFArray.cxx:225
 AliTOFArray.cxx:226
 AliTOFArray.cxx:227
 AliTOFArray.cxx:228
 AliTOFArray.cxx:229
 AliTOFArray.cxx:230
 AliTOFArray.cxx:231
 AliTOFArray.cxx:232
 AliTOFArray.cxx:233
 AliTOFArray.cxx:234
 AliTOFArray.cxx:235
 AliTOFArray.cxx:236
 AliTOFArray.cxx:237
 AliTOFArray.cxx:238
 AliTOFArray.cxx:239
 AliTOFArray.cxx:240
 AliTOFArray.cxx:241
 AliTOFArray.cxx:242
 AliTOFArray.cxx:243
 AliTOFArray.cxx:244
 AliTOFArray.cxx:245
 AliTOFArray.cxx:246
 AliTOFArray.cxx:247
 AliTOFArray.cxx:248
 AliTOFArray.cxx:249
 AliTOFArray.cxx:250
 AliTOFArray.cxx:251
 AliTOFArray.cxx:252
 AliTOFArray.cxx:253
 AliTOFArray.cxx:254
 AliTOFArray.cxx:255
 AliTOFArray.cxx:256
 AliTOFArray.cxx:257
 AliTOFArray.cxx:258
 AliTOFArray.cxx:259
 AliTOFArray.cxx:260
 AliTOFArray.cxx:261
 AliTOFArray.cxx:262
 AliTOFArray.cxx:263
 AliTOFArray.cxx:264
 AliTOFArray.cxx:265
 AliTOFArray.cxx:266
 AliTOFArray.cxx:267
 AliTOFArray.cxx:268
 AliTOFArray.cxx:269
 AliTOFArray.cxx:270
 AliTOFArray.cxx:271
 AliTOFArray.cxx:272
 AliTOFArray.cxx:273
 AliTOFArray.cxx:274
 AliTOFArray.cxx:275
 AliTOFArray.cxx:276
 AliTOFArray.cxx:277
 AliTOFArray.cxx:278
 AliTOFArray.cxx:279
 AliTOFArray.cxx:280
 AliTOFArray.cxx:281
 AliTOFArray.cxx:282
 AliTOFArray.cxx:283
 AliTOFArray.cxx:284
 AliTOFArray.cxx:285
 AliTOFArray.cxx:286