ROOT logo
//
// Class AliRsnListOutput
//
// This class defines a base classe to implement a Output
// which uses the internal RSN package event format (AliRsnEvent).
// It contains some default flags which turn out to be useful:
//  - a flag to select only the "true" pairs (tracks from same resonance)
//  - a flag to know if the computation is done over two events (mixing)
//
// Any kind of analysis object should be implemented as inheriting from this
// because the AliRsnAnalyzer which executes the analysis will accept a collection
// of such objects, in order to have a unique format of processing method
//
// The user who implements a kind of computation type should inherit from
// this class and override the virtual Outputs defined in it, which
// initialize the final output histogram and define how to process data.
//
//
// author: A. Pulvirenti             (email: alberto.pulvirenti@ct.infn.it)
//

#include <Riostream.h>
#include <TList.h>
#include <TCollection.h>

#include "AliLog.h"
#include "AliCFContainer.h"

#include "AliRsnValue.h"
#include "AliRsnValueDaughter.h"
#include "AliRsnValueEvent.h"
#include "AliRsnLoop.h"

#include "AliRsnListOutput.h"

ClassImp(AliRsnListOutput)

//________________________________________________________________________________________
AliRsnListOutput::AliRsnListOutput(const char *name, AliRsnListOutput::EOut type) :
   TNamed(name, ""),
   fSkipFailed(kTRUE),
   fType(type),
   fSteps(0),
   fValues(0),
   fNValues(0),
   fList(0x0),
   fIndex(-1),
   fCheckHistRange(kTRUE),
   fArray(0)
{
//
// Constructor.
// Requires a name for this object (which will be used to name the output object)
// and the definition of the output type from the built-in enumeration.
//
}

//________________________________________________________________________________________
AliRsnListOutput::AliRsnListOutput(const AliRsnListOutput &copy) :
   TNamed(copy),
   fSkipFailed(copy.fSkipFailed),
   fType(copy.fType),
   fSteps(copy.fSteps),
   fValues(copy.fValues),
   fNValues(copy.fNValues),
   fList(copy.fList),
   fIndex(copy.fIndex),
   fCheckHistRange(copy.fCheckHistRange),
   fArray(0)
{
//
// Copy constructor.
// Since the pointer objects must be initialized in a second step,
// they are never copied, and then they are initialized to zero.
//
}

//________________________________________________________________________________________
AliRsnListOutput &AliRsnListOutput::operator=(const AliRsnListOutput &copy)
{
//
// Assignment operator.
// Same consideration as the copiy constructor. In this case, there is
// the possibility to have the output objects alreasy initialized, but
// they are anyway reset.
//

   TNamed::operator=(copy);
   if (this == &copy)
      return *this;
   fSkipFailed = copy.fSkipFailed;
   fType = copy.fType;
   fSteps = copy.fSteps;
   fValues = copy.fValues;
   fNValues = copy.fNValues;
   fList = copy.fList;
   fIndex = copy.fIndex;
   fCheckHistRange = copy.fCheckHistRange;
   fArray = copy.fArray;

   Reset();

   return (*this);
}

//__________________________________________________________________________________________________
AliRsnListOutput::~AliRsnListOutput()
{
//
// Destructor.
// Deletes the output objects.
//

   Reset();
}

//__________________________________________________________________________________________________
void AliRsnListOutput::Reset()
{
//
// Clear all output objects. In general, only one will be initialized at a time.
//

   fList = 0x0;
}

//_____________________________________________________________________________
void AliRsnListOutput::AddValue(AliRsnValue *value)
{
//
// Adds a value computation object to the list.
//

   fValues.AddLast(value);
}


//________________________________________________________________________________________
Bool_t AliRsnListOutput::Init(const char *prefix, TList *list)
{
//
// Initializes the output for this object.
// What kind of output depends on the 'fType' data member,
// and in case it is a CF container, also on the 'fSteps'.
// The object is named with the following criterion:
// <prefix>_<name>_<type>_<varList>
//

   Int_t i;

   // all output objects are cleared
   Reset();

   // count values and set dimension of arrays
   // do also some checks for a good match between type and output
   fNValues = fValues.GetEntries();
   if (fNValues < 1) {
      AliError("Need at least 1 value");
      return kFALSE;
   }
   if (fType == kHistoDefault && fNValues > 3) {
      AliInfo(Form("NValues = %d > 3 --> cannot use a normal histogram, need to use a sparse", fNValues));
      fType = kHistoSparse;
   }

   // resize the output array
   fArray.Set(fNValues);


   Bool_t isPair=kFALSE;

   // create the name
   TString name(GetName());
   if (!name.CompareTo("pair")) isPair = kTRUE;
   if (isPair) name = "";
   else name.Prepend(".");
   name.Prepend(prefix);

//    TString name(Form("%s.%s", prefix, GetName()));
   AliRsnValue *val = 0x0;
   for (i = 0; i < fNValues; i++) {
      val = GetValue(i);
      if (!val) {
         AliError(Form("Slot %d in value list is NULL", i));
         return kFALSE;
      }
      if (!isPair) {
         name += '_';
         name += val->GetName();
      }
   }

   // allowed objects
   TObject *object = 0x0;

   // initialize appropriate output object
   // and, if successful, insert into the list
   switch (fType) {
      case kHistoDefault:
//          name.Append("_hist");
         object = CreateHistogram(name.Data());
         break;
      case kHistoSparse:
//          name.Append("_hsparse");
         object = CreateHistogramSparse(name.Data());
         break;
      case kCFContainer:
//          name.Append("_cf");
         object = CreateCFContainer(name.Data());
         break;
      default:
         AliWarning("Wrong type output or initialization failure");
   }

   if (object) {
      //AliInfo(Form("[%s]: initializing output '%s' (obj name = '%s') with %d values and format %d [%s]", GetName(), name.Data(), object->GetName(), fNValues, fType, object->ClassName()));
      fList = list;
      fList->Add(object);
      fIndex = fList->IndexOf(object);
      return kTRUE;
   }

   return kFALSE;
}

//________________________________________________________________________________________
TH1 *AliRsnListOutput::CreateHistogram(const char *name)
{
//
// Initialize the 'default' TH1 output object.
// In case one of the expected axes is NULL, the initialization fails.
//

   // we expect to have maximum 3 axes in this case
   Int_t i, nbins[3] = {0, 0, 0};
   TArrayD  array[3];
   for (i = 0; i < fNValues; i++) {
      AliRsnValue *val = GetValue(i);
      if (!val) {
         AliError(Form("Expected axis %d is NULL", i));
         return 0x0;
      }
      nbins[i] = GetValue(i)->GetArray().GetSize() - 1;
      array[i] = GetValue(i)->GetArray();
   }

   TH1 *hist = 0x0;

   // create histogram depending on the number of axes
   switch (fNValues) {
      case 1:
         hist = new TH1F(name, "", nbins[0], array[0].GetArray());
         break;
      case 2:
         hist = new TH2F(name, "", nbins[0], array[0].GetArray(), nbins[1], array[1].GetArray());
         break;
      case 3:
         hist = new TH3F(name, "", nbins[0], array[0].GetArray(), nbins[1], array[1].GetArray(), nbins[2], array[2].GetArray());
         break;
      default:
         //AliError(Form("Wrong number of dimensions: %d", fNValues))
         return 0x0;
   }

   if (hist) hist->Sumw2();
   return hist;
}

//________________________________________________________________________________________
THnSparseF *AliRsnListOutput::CreateHistogramSparse(const char *name)
{
//
// Initialize the THnSparse output object.
// In case one of the expected axes is NULL, the initialization fails.
//

   // retrieve binnings and sizes of all axes
   // since the check for null values is done in Init(),
   // we assume that here they must all be well defined
   Int_t i, *nbins = new Int_t[fNValues];
   TArrayD  *array = new TArrayD[fNValues];
   for (i = 0; i < fNValues; i++) {
      nbins[i] = GetValue(i)->GetArray().GetSize() - 1;
      array[i] = GetValue(i)->GetArray();
   }

   // create histogram
   THnSparseF *hist = new THnSparseF(name, "", fNValues, nbins);
   hist->Sumw2();

   // update the various axes using the definitions given in the array of axes here
   AliRsnValue *val = 0x0;
   for (i = 0; i < fNValues; i++) {
      val = GetValue(i);
      if (val) hist->GetAxis(i)->SetName(val->GetName());
      hist->GetAxis(i)->Set(nbins[i], array[i].GetArray());
   }

   // clear heap
   delete [] nbins;
   delete [] array;

   return hist;
}

//________________________________________________________________________________________
AliCFContainer *AliRsnListOutput::CreateCFContainer(const char *name)
{
//
// Initialize the AliCFContainer output object.
// In case one of the expected axes is NULL, the initialization fails.
//

   // retrieve binnings and sizes of all axes
   // since the check for null values is done in Init(),
   // we assume that here they must all be well defined
   Int_t i, *nbins = new Int_t[fNValues];
   TArrayD  *array = new TArrayD[fNValues];
   for (i = 0; i < fNValues; i++) {
      nbins[i] = GetValue(i)->GetArray().GetSize() - 1;
      array[i] = GetValue(i)->GetArray();
   }

   // create object
   AliCFContainer *cont = new AliCFContainer(name, "", fSteps, fNValues, nbins);

   // set the bin limits for each axis
   for (i = 0; i < fNValues; i++) {
      cont->SetBinLimits(i, array[i].GetArray());
   }

   // clear heap
   delete [] nbins;
   delete [] array;

   return cont;
}

//________________________________________________________________________________________
Bool_t AliRsnListOutput::Fill(TObject *target, Int_t step)
{
//
// Uses the passed argument to compute all values.
// If all computations were successful, fill the output
// Second argument (step) is needed only in case of CF containers.
// Return value is the AND of all computation successes.
//

   Int_t  i;

   // do computations
   Bool_t globalOK = kTRUE;
   AliRsnValue *val = 0x0;
   for (i = 0; i < fNValues; i++) {
      val = GetValue(i);
      if (!val) {
         AliError("NULL value found");
         return kFALSE;
      }
      globalOK = globalOK && val->Eval(target);
      fArray[i] = (Double_t)val->GetComputedValue();
   }
   if (!globalOK && fSkipFailed) return kFALSE;

   // retrieve object
   if (!fList || fIndex < 0) {
      AliError("List not initialized");
      return kFALSE;
   }
   TObject *obj = fList->At(fIndex);
   if (!obj) {
      AliError("Null pointer");
      return kFALSE;
   }

   // check
   //AliInfo(Form("[%s] Object index, name, type = %d, %s (%s)", GetName(), fIndex, obj->GetName(), obj->ClassName()));

   // fill output
   if (obj->IsA() == TH1F::Class()) {
      TH1F *h = (TH1F *)obj;
      h->Fill(fArray[0]);
      return kTRUE;
   } else if (obj->IsA() == TH2F::Class()) {
      TH2F *h = (TH2F *)obj;
      h->Fill(fArray[0], fArray[1]);
      return kTRUE;
   } else if (obj->IsA() == TH3F::Class()) {
      TH3F *h = (TH3F *)obj;
      h->Fill(fArray[0], fArray[1], fArray[2]);
      return kTRUE;
   } else if (obj->InheritsFrom(THnSparse::Class())) {
      THnSparseF *h = (THnSparseF *)obj;
      if (fCheckHistRange) {
         for (Int_t iAxis = 0; iAxis<h->GetNdimensions(); iAxis++) {
            if (fArray.At(iAxis)>h->GetAxis(iAxis)->GetXmax() || fArray.At(iAxis)<h->GetAxis(iAxis)->GetXmin()) return kFALSE;
         }
      }
      h->Fill(fArray.GetArray());
      return kTRUE;
   } else if (obj->InheritsFrom(AliCFContainer::Class())) {
      AliCFContainer *c = (AliCFContainer *)obj;
      c->Fill(fArray.GetArray(), step);
      return kTRUE;
   } else {
      AliError(Form("Not handled class '%s'", obj->ClassName()));
      return kFALSE;
   }
}

//________________________________________________________________________________________
Bool_t AliRsnListOutput::Fill(AliRsnEvent *ev, AliRsnDaughter *d)
{
//
// Uses the passed argument to compute all values.
// If all computations were successful, fill the output
// Return value is the AND of all computation successes.
//

   // retrieve object
   if (!fList || fIndex < 0) {
      AliError("List not initialized");
      return kFALSE;
   }
   TObject *obj = fList->At(fIndex);
   if (!obj) {
      AliError("Null pointer");
      return kFALSE;
   }


   TIter next(&fValues);
   AliRsnValue *val;
   Int_t i=0;
   Bool_t globalOK = kTRUE;
   Double_t values[fValues.GetEntries()];
   while ((val = (AliRsnValue *)next())) {
      if (val->InheritsFrom(AliRsnValueDaughter::Class())) {
         if (!d && fSkipFailed) return kFALSE;
         globalOK = globalOK && val->Eval(d);
      } else if (val->InheritsFrom(AliRsnValueEvent::Class())) {
         if (!ev && fSkipFailed) return kFALSE;
         globalOK = globalOK && val->Eval(ev);
      }
      values[i] = (Double_t)val->GetComputedValue();
      if (!globalOK && fSkipFailed) return kFALSE;
      i++;
   }

   // fill output
   if (obj->IsA() == TH1F::Class()) {
      TH1F *h = (TH1F *)obj;
      h->Fill(values[0]);
      return kTRUE;
   } else if (obj->IsA() == TH2F::Class()) {
      TH2F *h = (TH2F *)obj;
      h->Fill(values[0], values[1]);
      return kTRUE;
   } else if (obj->IsA() == TH3F::Class()) {
      TH3F *h = (TH3F *)obj;
      h->Fill(values[0], values[1], values[2]);
      return kTRUE;
   } else if (obj->InheritsFrom(THnSparse::Class())) {
      THnSparseF *h = (THnSparseF *)obj;
      if (fCheckHistRange) {
         for (Int_t iAxis = 0; iAxis<h->GetNdimensions(); iAxis++) {
            if (values[iAxis]>h->GetAxis(iAxis)->GetXmax() || values[iAxis]<h->GetAxis(iAxis)->GetXmin()) return kFALSE;
         }
      }
      h->Fill(values);
      return kTRUE;
   } else {
      AliError(Form("Not handled class '%s'", obj->ClassName()));
      return kFALSE;
   }
}
 AliRsnListOutput.cxx:1
 AliRsnListOutput.cxx:2
 AliRsnListOutput.cxx:3
 AliRsnListOutput.cxx:4
 AliRsnListOutput.cxx:5
 AliRsnListOutput.cxx:6
 AliRsnListOutput.cxx:7
 AliRsnListOutput.cxx:8
 AliRsnListOutput.cxx:9
 AliRsnListOutput.cxx:10
 AliRsnListOutput.cxx:11
 AliRsnListOutput.cxx:12
 AliRsnListOutput.cxx:13
 AliRsnListOutput.cxx:14
 AliRsnListOutput.cxx:15
 AliRsnListOutput.cxx:16
 AliRsnListOutput.cxx:17
 AliRsnListOutput.cxx:18
 AliRsnListOutput.cxx:19
 AliRsnListOutput.cxx:20
 AliRsnListOutput.cxx:21
 AliRsnListOutput.cxx:22
 AliRsnListOutput.cxx:23
 AliRsnListOutput.cxx:24
 AliRsnListOutput.cxx:25
 AliRsnListOutput.cxx:26
 AliRsnListOutput.cxx:27
 AliRsnListOutput.cxx:28
 AliRsnListOutput.cxx:29
 AliRsnListOutput.cxx:30
 AliRsnListOutput.cxx:31
 AliRsnListOutput.cxx:32
 AliRsnListOutput.cxx:33
 AliRsnListOutput.cxx:34
 AliRsnListOutput.cxx:35
 AliRsnListOutput.cxx:36
 AliRsnListOutput.cxx:37
 AliRsnListOutput.cxx:38
 AliRsnListOutput.cxx:39
 AliRsnListOutput.cxx:40
 AliRsnListOutput.cxx:41
 AliRsnListOutput.cxx:42
 AliRsnListOutput.cxx:43
 AliRsnListOutput.cxx:44
 AliRsnListOutput.cxx:45
 AliRsnListOutput.cxx:46
 AliRsnListOutput.cxx:47
 AliRsnListOutput.cxx:48
 AliRsnListOutput.cxx:49
 AliRsnListOutput.cxx:50
 AliRsnListOutput.cxx:51
 AliRsnListOutput.cxx:52
 AliRsnListOutput.cxx:53
 AliRsnListOutput.cxx:54
 AliRsnListOutput.cxx:55
 AliRsnListOutput.cxx:56
 AliRsnListOutput.cxx:57
 AliRsnListOutput.cxx:58
 AliRsnListOutput.cxx:59
 AliRsnListOutput.cxx:60
 AliRsnListOutput.cxx:61
 AliRsnListOutput.cxx:62
 AliRsnListOutput.cxx:63
 AliRsnListOutput.cxx:64
 AliRsnListOutput.cxx:65
 AliRsnListOutput.cxx:66
 AliRsnListOutput.cxx:67
 AliRsnListOutput.cxx:68
 AliRsnListOutput.cxx:69
 AliRsnListOutput.cxx:70
 AliRsnListOutput.cxx:71
 AliRsnListOutput.cxx:72
 AliRsnListOutput.cxx:73
 AliRsnListOutput.cxx:74
 AliRsnListOutput.cxx:75
 AliRsnListOutput.cxx:76
 AliRsnListOutput.cxx:77
 AliRsnListOutput.cxx:78
 AliRsnListOutput.cxx:79
 AliRsnListOutput.cxx:80
 AliRsnListOutput.cxx:81
 AliRsnListOutput.cxx:82
 AliRsnListOutput.cxx:83
 AliRsnListOutput.cxx:84
 AliRsnListOutput.cxx:85
 AliRsnListOutput.cxx:86
 AliRsnListOutput.cxx:87
 AliRsnListOutput.cxx:88
 AliRsnListOutput.cxx:89
 AliRsnListOutput.cxx:90
 AliRsnListOutput.cxx:91
 AliRsnListOutput.cxx:92
 AliRsnListOutput.cxx:93
 AliRsnListOutput.cxx:94
 AliRsnListOutput.cxx:95
 AliRsnListOutput.cxx:96
 AliRsnListOutput.cxx:97
 AliRsnListOutput.cxx:98
 AliRsnListOutput.cxx:99
 AliRsnListOutput.cxx:100
 AliRsnListOutput.cxx:101
 AliRsnListOutput.cxx:102
 AliRsnListOutput.cxx:103
 AliRsnListOutput.cxx:104
 AliRsnListOutput.cxx:105
 AliRsnListOutput.cxx:106
 AliRsnListOutput.cxx:107
 AliRsnListOutput.cxx:108
 AliRsnListOutput.cxx:109
 AliRsnListOutput.cxx:110
 AliRsnListOutput.cxx:111
 AliRsnListOutput.cxx:112
 AliRsnListOutput.cxx:113
 AliRsnListOutput.cxx:114
 AliRsnListOutput.cxx:115
 AliRsnListOutput.cxx:116
 AliRsnListOutput.cxx:117
 AliRsnListOutput.cxx:118
 AliRsnListOutput.cxx:119
 AliRsnListOutput.cxx:120
 AliRsnListOutput.cxx:121
 AliRsnListOutput.cxx:122
 AliRsnListOutput.cxx:123
 AliRsnListOutput.cxx:124
 AliRsnListOutput.cxx:125
 AliRsnListOutput.cxx:126
 AliRsnListOutput.cxx:127
 AliRsnListOutput.cxx:128
 AliRsnListOutput.cxx:129
 AliRsnListOutput.cxx:130
 AliRsnListOutput.cxx:131
 AliRsnListOutput.cxx:132
 AliRsnListOutput.cxx:133
 AliRsnListOutput.cxx:134
 AliRsnListOutput.cxx:135
 AliRsnListOutput.cxx:136
 AliRsnListOutput.cxx:137
 AliRsnListOutput.cxx:138
 AliRsnListOutput.cxx:139
 AliRsnListOutput.cxx:140
 AliRsnListOutput.cxx:141
 AliRsnListOutput.cxx:142
 AliRsnListOutput.cxx:143
 AliRsnListOutput.cxx:144
 AliRsnListOutput.cxx:145
 AliRsnListOutput.cxx:146
 AliRsnListOutput.cxx:147
 AliRsnListOutput.cxx:148
 AliRsnListOutput.cxx:149
 AliRsnListOutput.cxx:150
 AliRsnListOutput.cxx:151
 AliRsnListOutput.cxx:152
 AliRsnListOutput.cxx:153
 AliRsnListOutput.cxx:154
 AliRsnListOutput.cxx:155
 AliRsnListOutput.cxx:156
 AliRsnListOutput.cxx:157
 AliRsnListOutput.cxx:158
 AliRsnListOutput.cxx:159
 AliRsnListOutput.cxx:160
 AliRsnListOutput.cxx:161
 AliRsnListOutput.cxx:162
 AliRsnListOutput.cxx:163
 AliRsnListOutput.cxx:164
 AliRsnListOutput.cxx:165
 AliRsnListOutput.cxx:166
 AliRsnListOutput.cxx:167
 AliRsnListOutput.cxx:168
 AliRsnListOutput.cxx:169
 AliRsnListOutput.cxx:170
 AliRsnListOutput.cxx:171
 AliRsnListOutput.cxx:172
 AliRsnListOutput.cxx:173
 AliRsnListOutput.cxx:174
 AliRsnListOutput.cxx:175
 AliRsnListOutput.cxx:176
 AliRsnListOutput.cxx:177
 AliRsnListOutput.cxx:178
 AliRsnListOutput.cxx:179
 AliRsnListOutput.cxx:180
 AliRsnListOutput.cxx:181
 AliRsnListOutput.cxx:182
 AliRsnListOutput.cxx:183
 AliRsnListOutput.cxx:184
 AliRsnListOutput.cxx:185
 AliRsnListOutput.cxx:186
 AliRsnListOutput.cxx:187
 AliRsnListOutput.cxx:188
 AliRsnListOutput.cxx:189
 AliRsnListOutput.cxx:190
 AliRsnListOutput.cxx:191
 AliRsnListOutput.cxx:192
 AliRsnListOutput.cxx:193
 AliRsnListOutput.cxx:194
 AliRsnListOutput.cxx:195
 AliRsnListOutput.cxx:196
 AliRsnListOutput.cxx:197
 AliRsnListOutput.cxx:198
 AliRsnListOutput.cxx:199
 AliRsnListOutput.cxx:200
 AliRsnListOutput.cxx:201
 AliRsnListOutput.cxx:202
 AliRsnListOutput.cxx:203
 AliRsnListOutput.cxx:204
 AliRsnListOutput.cxx:205
 AliRsnListOutput.cxx:206
 AliRsnListOutput.cxx:207
 AliRsnListOutput.cxx:208
 AliRsnListOutput.cxx:209
 AliRsnListOutput.cxx:210
 AliRsnListOutput.cxx:211
 AliRsnListOutput.cxx:212
 AliRsnListOutput.cxx:213
 AliRsnListOutput.cxx:214
 AliRsnListOutput.cxx:215
 AliRsnListOutput.cxx:216
 AliRsnListOutput.cxx:217
 AliRsnListOutput.cxx:218
 AliRsnListOutput.cxx:219
 AliRsnListOutput.cxx:220
 AliRsnListOutput.cxx:221
 AliRsnListOutput.cxx:222
 AliRsnListOutput.cxx:223
 AliRsnListOutput.cxx:224
 AliRsnListOutput.cxx:225
 AliRsnListOutput.cxx:226
 AliRsnListOutput.cxx:227
 AliRsnListOutput.cxx:228
 AliRsnListOutput.cxx:229
 AliRsnListOutput.cxx:230
 AliRsnListOutput.cxx:231
 AliRsnListOutput.cxx:232
 AliRsnListOutput.cxx:233
 AliRsnListOutput.cxx:234
 AliRsnListOutput.cxx:235
 AliRsnListOutput.cxx:236
 AliRsnListOutput.cxx:237
 AliRsnListOutput.cxx:238
 AliRsnListOutput.cxx:239
 AliRsnListOutput.cxx:240
 AliRsnListOutput.cxx:241
 AliRsnListOutput.cxx:242
 AliRsnListOutput.cxx:243
 AliRsnListOutput.cxx:244
 AliRsnListOutput.cxx:245
 AliRsnListOutput.cxx:246
 AliRsnListOutput.cxx:247
 AliRsnListOutput.cxx:248
 AliRsnListOutput.cxx:249
 AliRsnListOutput.cxx:250
 AliRsnListOutput.cxx:251
 AliRsnListOutput.cxx:252
 AliRsnListOutput.cxx:253
 AliRsnListOutput.cxx:254
 AliRsnListOutput.cxx:255
 AliRsnListOutput.cxx:256
 AliRsnListOutput.cxx:257
 AliRsnListOutput.cxx:258
 AliRsnListOutput.cxx:259
 AliRsnListOutput.cxx:260
 AliRsnListOutput.cxx:261
 AliRsnListOutput.cxx:262
 AliRsnListOutput.cxx:263
 AliRsnListOutput.cxx:264
 AliRsnListOutput.cxx:265
 AliRsnListOutput.cxx:266
 AliRsnListOutput.cxx:267
 AliRsnListOutput.cxx:268
 AliRsnListOutput.cxx:269
 AliRsnListOutput.cxx:270
 AliRsnListOutput.cxx:271
 AliRsnListOutput.cxx:272
 AliRsnListOutput.cxx:273
 AliRsnListOutput.cxx:274
 AliRsnListOutput.cxx:275
 AliRsnListOutput.cxx:276
 AliRsnListOutput.cxx:277
 AliRsnListOutput.cxx:278
 AliRsnListOutput.cxx:279
 AliRsnListOutput.cxx:280
 AliRsnListOutput.cxx:281
 AliRsnListOutput.cxx:282
 AliRsnListOutput.cxx:283
 AliRsnListOutput.cxx:284
 AliRsnListOutput.cxx:285
 AliRsnListOutput.cxx:286
 AliRsnListOutput.cxx:287
 AliRsnListOutput.cxx:288
 AliRsnListOutput.cxx:289
 AliRsnListOutput.cxx:290
 AliRsnListOutput.cxx:291
 AliRsnListOutput.cxx:292
 AliRsnListOutput.cxx:293
 AliRsnListOutput.cxx:294
 AliRsnListOutput.cxx:295
 AliRsnListOutput.cxx:296
 AliRsnListOutput.cxx:297
 AliRsnListOutput.cxx:298
 AliRsnListOutput.cxx:299
 AliRsnListOutput.cxx:300
 AliRsnListOutput.cxx:301
 AliRsnListOutput.cxx:302
 AliRsnListOutput.cxx:303
 AliRsnListOutput.cxx:304
 AliRsnListOutput.cxx:305
 AliRsnListOutput.cxx:306
 AliRsnListOutput.cxx:307
 AliRsnListOutput.cxx:308
 AliRsnListOutput.cxx:309
 AliRsnListOutput.cxx:310
 AliRsnListOutput.cxx:311
 AliRsnListOutput.cxx:312
 AliRsnListOutput.cxx:313
 AliRsnListOutput.cxx:314
 AliRsnListOutput.cxx:315
 AliRsnListOutput.cxx:316
 AliRsnListOutput.cxx:317
 AliRsnListOutput.cxx:318
 AliRsnListOutput.cxx:319
 AliRsnListOutput.cxx:320
 AliRsnListOutput.cxx:321
 AliRsnListOutput.cxx:322
 AliRsnListOutput.cxx:323
 AliRsnListOutput.cxx:324
 AliRsnListOutput.cxx:325
 AliRsnListOutput.cxx:326
 AliRsnListOutput.cxx:327
 AliRsnListOutput.cxx:328
 AliRsnListOutput.cxx:329
 AliRsnListOutput.cxx:330
 AliRsnListOutput.cxx:331
 AliRsnListOutput.cxx:332
 AliRsnListOutput.cxx:333
 AliRsnListOutput.cxx:334
 AliRsnListOutput.cxx:335
 AliRsnListOutput.cxx:336
 AliRsnListOutput.cxx:337
 AliRsnListOutput.cxx:338
 AliRsnListOutput.cxx:339
 AliRsnListOutput.cxx:340
 AliRsnListOutput.cxx:341
 AliRsnListOutput.cxx:342
 AliRsnListOutput.cxx:343
 AliRsnListOutput.cxx:344
 AliRsnListOutput.cxx:345
 AliRsnListOutput.cxx:346
 AliRsnListOutput.cxx:347
 AliRsnListOutput.cxx:348
 AliRsnListOutput.cxx:349
 AliRsnListOutput.cxx:350
 AliRsnListOutput.cxx:351
 AliRsnListOutput.cxx:352
 AliRsnListOutput.cxx:353
 AliRsnListOutput.cxx:354
 AliRsnListOutput.cxx:355
 AliRsnListOutput.cxx:356
 AliRsnListOutput.cxx:357
 AliRsnListOutput.cxx:358
 AliRsnListOutput.cxx:359
 AliRsnListOutput.cxx:360
 AliRsnListOutput.cxx:361
 AliRsnListOutput.cxx:362
 AliRsnListOutput.cxx:363
 AliRsnListOutput.cxx:364
 AliRsnListOutput.cxx:365
 AliRsnListOutput.cxx:366
 AliRsnListOutput.cxx:367
 AliRsnListOutput.cxx:368
 AliRsnListOutput.cxx:369
 AliRsnListOutput.cxx:370
 AliRsnListOutput.cxx:371
 AliRsnListOutput.cxx:372
 AliRsnListOutput.cxx:373
 AliRsnListOutput.cxx:374
 AliRsnListOutput.cxx:375
 AliRsnListOutput.cxx:376
 AliRsnListOutput.cxx:377
 AliRsnListOutput.cxx:378
 AliRsnListOutput.cxx:379
 AliRsnListOutput.cxx:380
 AliRsnListOutput.cxx:381
 AliRsnListOutput.cxx:382
 AliRsnListOutput.cxx:383
 AliRsnListOutput.cxx:384
 AliRsnListOutput.cxx:385
 AliRsnListOutput.cxx:386
 AliRsnListOutput.cxx:387
 AliRsnListOutput.cxx:388
 AliRsnListOutput.cxx:389
 AliRsnListOutput.cxx:390
 AliRsnListOutput.cxx:391
 AliRsnListOutput.cxx:392
 AliRsnListOutput.cxx:393
 AliRsnListOutput.cxx:394
 AliRsnListOutput.cxx:395
 AliRsnListOutput.cxx:396
 AliRsnListOutput.cxx:397
 AliRsnListOutput.cxx:398
 AliRsnListOutput.cxx:399
 AliRsnListOutput.cxx:400
 AliRsnListOutput.cxx:401
 AliRsnListOutput.cxx:402
 AliRsnListOutput.cxx:403
 AliRsnListOutput.cxx:404
 AliRsnListOutput.cxx:405
 AliRsnListOutput.cxx:406
 AliRsnListOutput.cxx:407
 AliRsnListOutput.cxx:408
 AliRsnListOutput.cxx:409
 AliRsnListOutput.cxx:410
 AliRsnListOutput.cxx:411
 AliRsnListOutput.cxx:412
 AliRsnListOutput.cxx:413
 AliRsnListOutput.cxx:414
 AliRsnListOutput.cxx:415
 AliRsnListOutput.cxx:416
 AliRsnListOutput.cxx:417
 AliRsnListOutput.cxx:418
 AliRsnListOutput.cxx:419
 AliRsnListOutput.cxx:420
 AliRsnListOutput.cxx:421
 AliRsnListOutput.cxx:422
 AliRsnListOutput.cxx:423
 AliRsnListOutput.cxx:424
 AliRsnListOutput.cxx:425
 AliRsnListOutput.cxx:426
 AliRsnListOutput.cxx:427
 AliRsnListOutput.cxx:428
 AliRsnListOutput.cxx:429
 AliRsnListOutput.cxx:430
 AliRsnListOutput.cxx:431
 AliRsnListOutput.cxx:432
 AliRsnListOutput.cxx:433
 AliRsnListOutput.cxx:434
 AliRsnListOutput.cxx:435
 AliRsnListOutput.cxx:436
 AliRsnListOutput.cxx:437
 AliRsnListOutput.cxx:438
 AliRsnListOutput.cxx:439
 AliRsnListOutput.cxx:440
 AliRsnListOutput.cxx:441
 AliRsnListOutput.cxx:442
 AliRsnListOutput.cxx:443
 AliRsnListOutput.cxx:444
 AliRsnListOutput.cxx:445
 AliRsnListOutput.cxx:446
 AliRsnListOutput.cxx:447
 AliRsnListOutput.cxx:448
 AliRsnListOutput.cxx:449
 AliRsnListOutput.cxx:450
 AliRsnListOutput.cxx:451
 AliRsnListOutput.cxx:452
 AliRsnListOutput.cxx:453
 AliRsnListOutput.cxx:454
 AliRsnListOutput.cxx:455
 AliRsnListOutput.cxx:456
 AliRsnListOutput.cxx:457
 AliRsnListOutput.cxx:458
 AliRsnListOutput.cxx:459
 AliRsnListOutput.cxx:460
 AliRsnListOutput.cxx:461
 AliRsnListOutput.cxx:462
 AliRsnListOutput.cxx:463
 AliRsnListOutput.cxx:464
 AliRsnListOutput.cxx:465
 AliRsnListOutput.cxx:466
 AliRsnListOutput.cxx:467
 AliRsnListOutput.cxx:468
 AliRsnListOutput.cxx:469
 AliRsnListOutput.cxx:470
 AliRsnListOutput.cxx:471
 AliRsnListOutput.cxx:472
 AliRsnListOutput.cxx:473
 AliRsnListOutput.cxx:474
 AliRsnListOutput.cxx:475
 AliRsnListOutput.cxx:476