ROOT logo
// $Id$

//**************************************************************************
//* This file is property of and copyright by the ALICE HLT Project        * 
//* ALICE Experiment at CERN, All rights reserved.                         *
//*                                                                        *
//* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
//*                  for The ALICE HLT Project.                            *
//*                                                                        *
//* 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.                  *
//**************************************************************************

/// @file   AliHLTSpacePointContainer.cxx
/// @author Matthias Richter
/// @date   2011-04-29
/// @brief  Base helper class for handling of HLT space point data blocks
///

#include "AliHLTSpacePointContainer.h"
#include "AliHLTComponent.h"
#include "TFile.h"
#include "TString.h"
#include "TArrayC.h"
#include "TObjArray.h"
#include "TH2F.h"
#include "TMath.h"
#include "TMarker.h"
#include "TTree.h"
#include <memory>
#include <algorithm>
#include <iostream>
#include <iomanip>

/** ROOT macro for the implementation of ROOT specific class methods */
ClassImp(AliHLTSpacePointContainer)

AliHLTSpacePointContainer::AliHLTSpacePointContainer()
  : TObject(), AliHLTLogging()
  , fBuffers()
{
  // see header file for class documentation
  // or
  // refer to README to build package
  // or
  // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
}

AliHLTSpacePointContainer::AliHLTSpacePointContainer(const AliHLTSpacePointContainer& c)
  : TObject(c), AliHLTLogging()
  , fBuffers()
{
  /// copy constructor

  // currently no need to copy or allocate, the fBuffers of the source object are expected
  // to be persistent throughout the lifetime of the new object. Only pointers are copied.
}

AliHLTSpacePointContainer& AliHLTSpacePointContainer::operator=(const AliHLTSpacePointContainer& c)
{
  /// assignment operator
  if (&c==this) return *this;

  // currently no need to copy or allocate
  return *this;
}

AliHLTSpacePointContainer::~AliHLTSpacePointContainer()
{
  // destructor
  Clear();
}

void AliHLTSpacePointContainer::Clear(Option_t * /*option*/)
{
  // internal cleanup
  vector<TArrayC*>::iterator element=fBuffers.begin();
  while (element!=fBuffers.end()) {
    TArrayC* pBuffer=*element;
    element=fBuffers.erase(element);
    delete pBuffer;
  }
}

void AliHLTSpacePointContainer::Print(Option_t *option) const
{
  // print info
  Print(cout, option);
}

void AliHLTSpacePointContainer::Print(ostream& out, Option_t */*option*/) const
{
  // print to stream
  out << "AliHLTSpacePointContainer::Print" << endl;
}

int AliHLTSpacePointContainer::AddInputBlock(const char* filename, AliHLTComponentDataType dt, unsigned specification)
{
  // open block from file and add to collection
  if (!filename) return -EINVAL;
  
  TString input=filename;
  input+="?filetype=raw";
  std::auto_ptr<TFile> pFile(new TFile(input));
  if (!pFile.get()) return -ENOMEM;
  if (pFile->IsZombie()) return -ENOENT;

  int iResult=0;
  pFile->Seek(0);
  std::auto_ptr<TArrayC> buffer(new TArrayC);
  if (!buffer.get()) return -ENOMEM;

  buffer->Set(pFile->GetSize());
  if (pFile->ReadBuffer(buffer->GetArray(), buffer->GetSize())==0) {
    AliHLTComponentBlockData bd;
    AliHLTComponent::FillBlockData(bd);
    bd.fPtr=buffer->GetArray();
    bd.fSize=buffer->GetSize();
    bd.fDataType=dt;
    bd.fSpecification=specification;
    HLTDebug("adding data block %d byte(s) from file %s", pFile->GetSize(), filename);
    iResult=AddInputBlock(&bd);
  } else {
    HLTError("failed reading %d byte(s) from file %s", pFile->GetSize(), filename);
    iResult=-ENODATA;
  }

  fBuffers.push_back(buffer.release());
  return iResult;
}

int AliHLTSpacePointContainer::AddInputBlocks(const char* listfile, AliHLTComponentDataType dt)
{
  // open blank separated list of files and add data
  ifstream list(listfile);
  if (!list.good()) return -ENOENT;

  int count=0;
  TString file;
  while (file.ReadLine(list)) {
    HLTInfo("adding data from file %s", file.Data());
    int iResult=AddInputBlock(file.Data(), dt, kAliHLTVoidDataSpec);
    if (iResult<0) {
      HLTInfo("failed to add data from file %s: error %d", file.Data(), iResult);
      return iResult;
    }
    count+=iResult;
  }

  // std::auto_ptr<TObjArray> tokens(files.Tokenize(" "));
  // if (!tokens.get()) return 0;
  // for (int i=0; i<tokens->GetEntriesFast(); i++) {
  //   if (!tokens->At(i)) continue;
  //   cout << "adding data from file " << tokens->At(i)->GetName() << endl;
  //   AddInputBlock(tokens->At(i)->GetName(), dt, kAliHLTVoidDataSpec);
  // }

  return count;
}

AliHLTUInt8_t* AliHLTSpacePointContainer::Alloc(int size)
{
  /// alloc memory for a space point data block
  TArrayC* buffer=new TArrayC;
  if (!buffer) return NULL;

  buffer->Set(size);
  fBuffers.push_back(buffer);
  return reinterpret_cast<AliHLTUInt8_t*>(buffer->GetArray());
}

AliHLTSpacePointContainer* AliHLTSpacePointContainer::SelectByMask(AliHLTUInt32_t /*mask*/, bool /*bAlloc*/) const
{
  /// create a collection of clusters for a space point mask
  /// default implementation, nothing to do
  return NULL;
}

AliHLTSpacePointContainer* AliHLTSpacePointContainer::SelectByTrack(int /*trackId*/, bool /*bAlloc*/) const
{
  /// create a collection of clusters for a specific track
  /// default implementation, nothing to do
  return NULL;
}

AliHLTSpacePointContainer* AliHLTSpacePointContainer::SelectByMC(int /*mcId*/, bool /*bAlloc*/) const
{
  /// create a collection of clusters for a specific MC track
  /// default implementation, nothing to do
  return NULL;
}

AliHLTSpacePointContainer* AliHLTSpacePointContainer::UsedClusters(bool /*bAlloc*/) const
{
  /// create a collection of all used clusters
  /// default implementation, nothing to do
  return NULL;
}

AliHLTSpacePointContainer* AliHLTSpacePointContainer::UnusedClusters(bool /*bAlloc*/) const
{
  /// create a collection of all unused clusters
  /// default implementation, nothing to do
  return NULL;
}

int AliHLTSpacePointContainer::MarkUsed(const AliHLTUInt32_t* /*clusterIDs*/, int /*arraySize*/)
{
  /// default implementation, nothing to do
  return -ENOSYS;
}

int AliHLTSpacePointContainer::SetTrackID(int /*trackID*/, const AliHLTUInt32_t* /*clusterIDs*/, int /*arraySize*/)
{
  /// default implementation, nothing to do
  return -ENOSYS;
}

int AliHLTSpacePointContainer::SetMCID(int /*mcID*/, const AliHLTUInt32_t* /*clusterIDs*/, int /*arraySize*/)
{
  /// default implementation, nothing to do
  return -ENOSYS;
}

int AliHLTSpacePointContainer::GetNumberOfSpacePoints() const
{
  // get number of space points
  vector<AliHLTUInt32_t> clusterIDs;
  if (GetClusterIDs(clusterIDs)<0) return 0;
  return clusterIDs.size();
}

bool AliHLTSpacePointContainer::Check(AliHLTUInt32_t id) const
{
  // check if space point exists
  vector<AliHLTUInt32_t> clusterIDs;
  if (GetClusterIDs(clusterIDs)<0) return false;
  return find(clusterIDs.begin(), clusterIDs.end(), id)!=clusterIDs.end();
}

TH1* AliHLTSpacePointContainer::DrawProjection(const char* plane, const vector<AliHLTUInt32_t>& selection) const
{
  // draw the projection of space points in a specified plane
  // "xy", "xz", "yz"
  
  int mode=0;
  if (strcmp(plane, "xy")==0) mode=0;
  else if (strcmp(plane, "xz")==0) mode=1;
  else if (strcmp(plane, "yz")==0) mode=2;
  else {
    HLTError("invalid plane specification %s, allowed 'xy', 'xz', 'yz'", plane);
    return NULL;
  }
  
  float maxXAxis=100.0;
  float maxYAxis=100.0;
  vector<AliHLTUInt32_t> clusterIDs;
  GetClusterIDs(clusterIDs);
  vector<AliHLTUInt32_t>::iterator clusterID=clusterIDs.begin();
  while (clusterID!=clusterIDs.end()) {
    vector<AliHLTUInt32_t>::const_iterator element=selection.begin();
    for (; element!=selection.end(); element++) {
      if (((*element)&0xffff0000)==((*clusterID)&0xffff0000)) break;
    }
    if (element==selection.end() && selection.size()>0) {
      clusterID=clusterIDs.erase(clusterID);
      continue;
    }
    float XValue=0.0;
    float YValue=0.0;
    if (mode==0) {
      XValue=GetX(*clusterID);
      YValue=GetY(*clusterID);
    } else if (mode==1) {
      XValue=GetX(*clusterID);
      YValue=GetZ(*clusterID);
    } else if (mode==2) {
      XValue=GetY(*clusterID);
      YValue=GetZ(*clusterID);
    }
    if (maxXAxis<XValue) maxXAxis=XValue;
    if (maxYAxis<YValue) maxYAxis=YValue;
    clusterID++;
  }
  if (maxXAxis<maxYAxis) maxXAxis=maxYAxis;
  else maxYAxis=maxXAxis;

  TH2F* histogram=new TH2F(plane, plane, 1000, -maxXAxis, maxXAxis, 1000, -maxYAxis, maxYAxis);
  if (!histogram) return NULL;
    if (mode==0) {
      histogram->GetXaxis()->SetTitle("X [cm]");
      histogram->GetYaxis()->SetTitle("Y [cm]");
    } else if (mode==1) {
      histogram->GetXaxis()->SetTitle("Z [cm]");
      histogram->GetYaxis()->SetTitle("X [cm]");
    } else if (mode==2) {
      histogram->GetXaxis()->SetTitle("Z [cm]");
      histogram->GetYaxis()->SetTitle("Y [cm]");
    }

  for (clusterID=clusterIDs.begin(); clusterID!=clusterIDs.end(); clusterID++) {
    float XValue=GetX(*clusterID);
    float YValue=GetY(*clusterID);
    float ZValue=GetZ(*clusterID);
    Float_t phi     = GetPhi(*clusterID);
    Float_t cos     = TMath::Cos( phi );
    Float_t sin     = TMath::Sin( phi );
    if (mode==0) {
      histogram->SetTitle("XY projection");
      histogram->Fill(cos*XValue - sin*YValue, sin*XValue + cos*YValue);
    } else if (mode==1) {
      // should be maybe 'ZX' but somehow 'XZ' is more 'lingual convenient'
      histogram->SetTitle("XZ projection");
      histogram->Fill(ZValue, cos*XValue - sin*YValue);
    } else if (mode==2) {
      // same comment
      histogram->SetTitle("YZ projection");
      histogram->Fill(ZValue, sin*XValue + cos*YValue);
    }
  }

  return histogram;
}

void AliHLTSpacePointContainer::Draw(Option_t *option)
{
  /// Inherited from TObject, draw clusters
  float scale=250;
  float center[2]={0.5,0.5};
  int markersize=1;
  int markercolor=5;

  TString strOption(option);
  std::auto_ptr<TObjArray> tokens(strOption.Tokenize(" "));
  if (!tokens.get()) return;
  for (int i=0; i<tokens->GetEntriesFast(); i++) {
    if (!tokens->At(i)) continue;
    const char* key="";
    TString arg=tokens->At(i)->GetName();

    key="scale=";
    if (arg.BeginsWith(key)) {
      arg.ReplaceAll(key, "");
      scale=arg.Atof();
    }
    key="centerx=";
    if (arg.BeginsWith(key)) {
      arg.ReplaceAll(key, "");
      center[0]=arg.Atof();
    }
    key="centery=";
    if (arg.BeginsWith(key)) {
      arg.ReplaceAll(key, "");
      center[1]=arg.Atof();
    }
    key="markersize=";
    if (arg.BeginsWith(key)) {
      arg.ReplaceAll(key, "");
      markersize=arg.Atoi();
    }
    key="markercolor=";
    if (arg.BeginsWith(key)) {
      arg.ReplaceAll(key, "");
      markercolor=arg.Atoi();
    }
  }

  vector<AliHLTUInt32_t> clusterIDs;
  GetClusterIDs(clusterIDs);
  for (vector<AliHLTUInt32_t>::iterator clusterID=clusterIDs.begin();
       clusterID!=clusterIDs.end();
       clusterID++) {
    float clusterphi=GetPhi(*clusterID);
    float cosphi=TMath::Cos(clusterphi);
    float sinphi=TMath::Sin(clusterphi);
    float clusterx=GetX(*clusterID);
    float clustery=GetY(*clusterID);
    //cout << " " << *clusterID << " " << clusterx << " " << clustery << " " << clusterphi << endl;
    // rotate
    float pointx= clusterx*sinphi + clustery*cosphi;
    float pointy=-clusterx*cosphi + clustery*sinphi;

    TMarker* m=new TMarker(pointx/(2*scale)+center[0], pointy/(2*scale)+center[1], 3);
    m->SetMarkerSize(markersize);
    m->SetMarkerColor(markercolor);
    m->Draw("same");    
  }  
}

TTree* AliHLTSpacePointContainer::FillTree(const char* name, const char* title)
{
  // create tree and fill the space point coordinates
  TString treename=name;
  TString treetitle=title;
  if (treename.IsNull()) treename="spacepoints";
  if (treetitle.IsNull()) treetitle="HLT space point coordinates";
  std::auto_ptr<TTree> tree(new TTree(treename, treetitle));
  if (!tree.get()) return NULL;

  const unsigned dimension=8;
  float values[dimension];
  memset(values, 0, sizeof(values));
  const char* names[dimension]={
    "x", "y", "z", "sigmaY2", "sigmaZ2", "charge", "qmax", "alpha"
  };

  for (unsigned i=0; i<dimension; i++) {
    TString type=names[i]; type+="/F";
    tree->Branch(names[i], &values[i], type);
  }

  const vector<AliHLTUInt32_t>* clusterIDs=GetClusterIDs(0xffffffff);
  for (vector<AliHLTUInt32_t>::const_iterator clusterID=clusterIDs->begin();
       clusterID!=clusterIDs->end();
       clusterID++) {
    unsigned pos=0;
    values[pos++]=GetX(*clusterID);
    values[pos++]=GetY(*clusterID);
    values[pos++]=GetZ(*clusterID);
    values[pos++]=GetYWidth(*clusterID);
    values[pos++]=GetZWidth(*clusterID);
    values[pos++]=GetCharge(*clusterID);
    values[pos++]=GetMaxSignal(*clusterID);
    values[pos++]=GetPhi(*clusterID);

    tree->Fill();
  }

  return tree.release();
}

ostream& operator<<(ostream &out, const AliHLTSpacePointContainer& c)
{
  c.Print(out);
  return out;
}

ostream& operator<<(ostream &out, const AliHLTSpacePointContainer::AliHLTSpacePointProperties& p)
{
  // print
  cout << p.fId;
  return out;
}

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