1 /**************************************************************************
2 * Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 //-------------------------------------------------------------------------
19 // AOD class to store calorimeter cell data
20 // Author: Markus Oldenburg, CERN
21 //-------------------------------------------------------------------------
23 #include "AliAODCaloCells.h"
25 ClassImp(AliAODCaloCells)
27 AliAODCaloCells::AliAODCaloCells() : AliVCaloCells(), fNCells(0), fCellNumber(0), fAmplitude(0), fIsSorted(kTRUE), fType(kUndef)
29 // default constructor
32 AliAODCaloCells::AliAODCaloCells(const char* name, const char* title, VCells_t ttype) :
33 AliVCaloCells(name, title), fNCells(0), fCellNumber(0), fAmplitude(0), fIsSorted(kTRUE), fType(ttype)
38 AliAODCaloCells::AliAODCaloCells(const AliAODCaloCells& cells) :
40 fNCells(cells.fNCells),
43 fIsSorted(cells.fIsSorted),
47 fCellNumber = new Short_t[fNCells];
48 fAmplitude = new Double32_t[fNCells];
50 for (Int_t i = 0; i < fNCells; i++) {
51 fCellNumber[i] = cells.fCellNumber[i];
52 fAmplitude[i] = cells.fAmplitude[i];
56 AliAODCaloCells& AliAODCaloCells::operator=(const AliAODCaloCells& source)
58 // Assignment operator
60 AliVCaloCells::operator=(source);
62 if(fNCells != source.fNCells) {
63 delete [] fCellNumber;
65 fNCells = source.fNCells;
66 fCellNumber = new Short_t[fNCells];
67 fAmplitude = new Double32_t[fNCells];
69 memcpy(fCellNumber,source.fCellNumber, fNCells*sizeof(Short_t));
70 memcpy(fAmplitude, source.fAmplitude, fNCells*sizeof(Double32_t));
71 fIsSorted = source.fIsSorted;
79 AliAODCaloCells::~AliAODCaloCells()
86 void AliAODCaloCells::Clear(const Option_t*)
93 void AliAODCaloCells::Copy(TObject &obj) const {
95 // this overwrites the virtual TOBject::Copy()
96 // to allow run time copying without casting
100 AliAODCaloCells *robj = dynamic_cast<AliAODCaloCells*>(&obj);
101 if(!robj)return; // not an AliAODCaloCells
106 AliVCaloCells *AliAODCaloCells::CopyCaloCells(Bool_t all = kTRUE) const {
108 // copy the calo cells into a new object. If option all=FALSE, just the object type,
111 AliVCaloCells *obj = new AliAODCaloCells();
114 obj->SetName (GetName()) ;
115 obj->SetTitle(GetTitle()) ;
116 obj->SetType (GetType()) ;
118 obj->SetNumberOfCells(fNCells);
119 for (Short_t i = 0; i < fNCells; i++)
120 obj->SetCell(i,fCellNumber[i],fAmplitude[i],-1);
127 void AliAODCaloCells::CreateContainer(Short_t nCells)
129 // function that creates container to store calorimeter cell data
140 fCellNumber = new Short_t[fNCells];
141 fAmplitude = new Double32_t[fNCells];
144 for(int i = 0;i<fNCells;++i){
145 fAmplitude[i] = fCellNumber[i] = 0 ;
149 void AliAODCaloCells::DeleteContainer()
151 // deletes allocated memory
155 delete[] fCellNumber;
169 void AliAODCaloCells::Sort()
171 // sort the cell array by cell number
173 Int_t *idxArray = new Int_t[fNCells];
174 TMath::Sort(fNCells,fCellNumber,idxArray,kFALSE);
176 Short_t *newIndex = new Short_t[fNCells];
177 Double32_t *newAmplitude = new Double32_t[fNCells];
178 for (Int_t i=0; i < fNCells; i++) {
179 newIndex[i] = fCellNumber[idxArray[i]];
180 newAmplitude[i] = fAmplitude[idxArray[i]];
182 delete [] fCellNumber;
183 delete [] fAmplitude;
184 fCellNumber = newIndex;
185 fAmplitude = newAmplitude;
192 Bool_t AliAODCaloCells::SetCell(Short_t pos, Short_t cellNumber, Double32_t amplitude, Double32_t /*time*/)
194 // Sets a cell at the given position
196 if (pos>=0 && pos < fNCells) {
197 fCellNumber[pos] = cellNumber;
198 fAmplitude[pos] = amplitude;