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

//____________________________________________________________________
//                                                                          
// Base class for caches of per-strip information.
// This is used to index a strip. 
// Data stored depends on derived class. 
// This class provides some common infra-structure.
// Derived classes sould define Reset, and operator(). 
//
#include "AliFMDMap.h"		// ALIFMDMAP_H
#include "AliLog.h"
//#include <TClass.h>
//#include <TBuffer.h>
#include <TFile.h>
#include <TList.h>
#include <TStreamerInfo.h>

//____________________________________________________________________
ClassImp(AliFMDMap)
#if 0
  ; // This is here to keep Emacs for indenting the next line
#endif

//____________________________________________________________________
AliFMDMap::AliFMDMap(UShort_t maxDet, 
		     UShort_t maxRing, 
		     UShort_t maxSec, 
		     UShort_t maxStr)
  : fMaxDetectors(maxDet), 
    fMaxRings(maxRing), 
    fMaxSectors(maxSec), 
    fMaxStrips(maxStr)
{
  // Construct a map
  //
  // Parameters:
  //     maxDet       Maximum # of detectors
  //     maxRinf      Maximum # of rings
  //     maxSec       Maximum # of sectors
  //     maxStr       Maximum # of strips
  SetBit(kNeedUShort, kFALSE);
}

//____________________________________________________________________
AliFMDMap::AliFMDMap(const AliFMDMap& other)
  : TObject(other), 
    fMaxDetectors(other.fMaxDetectors), 
    fMaxRings(other.fMaxRings),
    fMaxSectors(other.fMaxSectors),
    fMaxStrips(other.fMaxStrips)
{
  SetBit(kNeedUShort, other.TestBit(kNeedUShort));
}

//____________________________________________________________________
void
AliFMDMap::CheckNeedUShort(TFile* file) 
{
  if (!file) return;
  TObject* o = file->GetStreamerInfoList()->FindObject("AliFMDMap");
  if (!o) return;
  TStreamerInfo* info = static_cast<TStreamerInfo*>(o);
  if (info->GetClassVersion() == 2) SetBit(kNeedUShort);
}
//____________________________________________________________________
void
AliFMDMap::Index2CoordsOld(Int_t     idx, 
			   UShort_t& det, 
			   Char_t&   ring, 
			   UShort_t& sec, 
			   UShort_t& str) const
{
  UShort_t rng;
  str  = idx % fMaxStrips;
  sec  = (idx / fMaxStrips) % fMaxSectors;
  rng  = (idx / fMaxStrips / fMaxSectors) % fMaxRings;
  det  = (idx / fMaxStrips / fMaxSectors / fMaxRings) % fMaxDetectors + 1;
  ring = (rng == 0 ? 'I' : 'O');
}

//____________________________________________________________________
void
AliFMDMap::Index2Coords(Int_t     idx, 
			UShort_t& det, 
			Char_t&   ring, 
			UShort_t& sec, 
			UShort_t& str) const
{
  UShort_t nStr;
  Int_t    i   = idx;
  if      (i >= kFMD3Base)  { det  = 3;  i -= kFMD3Base; }
  else if (i >= kFMD2Base)  { det  = 2;  i -= kFMD2Base; }
  else                      { det  = 1;  i -= kFMD1Base; } 
  if      (i >= kBaseOuter) { ring = 'O';i -= kBaseOuter; nStr = kNStripOuter; }
  else                      { ring = 'I';                 nStr = kNStripInner; }
  sec  = i / nStr;
  str  = i % nStr;
}

//____________________________________________________________________
void
AliFMDMap::CalcCoords(Int_t     idx, 
		      UShort_t& det, 
		      Char_t&   ring, 
		      UShort_t& sec, 
		      UShort_t& str) const
{
  if (fMaxDetectors == 0) {
    Index2Coords(idx, det, ring, sec, str);
  }
  else {
    Index2CoordsOld(idx, det, ring, sec, str);
  }
}

//____________________________________________________________________
Int_t 
AliFMDMap::Coords2IndexOld(UShort_t det, Char_t ring, UShort_t sec, 
			   UShort_t str) const
{
  // Check that the index supplied is OK.   Returns true index, or -1
  // on error. 
  if (det < 1) return -1;
  UShort_t ringi = (ring == 'I' ||  ring == 'i' ? 0 : 1);
  Int_t idx = 
    (str + fMaxStrips * (sec + fMaxSectors * (ringi + fMaxRings * (det-1))));
  if (TestBit(kNeedUShort)) idx = UShort_t(idx);
  if (idx < 0 || idx >= fMaxDetectors * fMaxRings * fMaxSectors * fMaxStrips) 
    return -1;
  return idx;
}

//____________________________________________________________________
Int_t 
AliFMDMap::Coords2Index(UShort_t det, Char_t ring, UShort_t sec, 
			UShort_t str) const
{
  // Check that the index supplied is OK.   Returns true index, or -1
  // on error. 
  UShort_t irg  = (ring == 'I' || ring == 'i' ? kInner : 
		   (ring == 'O' || ring == 'o' ? kOuter  : kOuter+1));
  if (irg > kOuter) return -1;
    
  Int_t idx = 0;
  switch (det) { 
  case 1: idx = kFMD1Base;  if (irg > 0) return -1; break;
  case 2: idx = kFMD2Base + irg * kBaseOuter; break;
  case 3: idx = kFMD3Base + irg * kBaseOuter; break;
  default: return -1;
  }
  UShort_t nSec = (irg == 0 ?  kNSectorInner :  kNSectorOuter);
  if (sec >= nSec) return -1;
  UShort_t nStr = (irg == 0 ? kNStripInner : kNStripOuter);
  if (str >= nStr) return -1;
  idx += nStr * sec + str;

  return idx;
}

//____________________________________________________________________
Int_t 
AliFMDMap::CheckIndex(UShort_t det, Char_t ring, UShort_t sec, 
		      UShort_t str) const
{
  // Check that the index supplied is OK.   Returns true index, or -1
  // on error. 
  if (fMaxDetectors == 0)
    return Coords2Index(det, ring, sec, str);
  return Coords2IndexOld(det, ring, sec, str);
}


    
//____________________________________________________________________
Int_t 
AliFMDMap::CalcIndex(UShort_t det, Char_t ring, UShort_t sec, UShort_t str) const
{
  // Calculate index into storage from arguments. 
  // 
  // Parameters: 
  //     det       Detector #
  //     ring      Ring ID
  //     sec       Sector # 
  //     str       Strip # 
  //
  // Returns appropriate index into storage 
  //
  Int_t idx = CheckIndex(det, ring, sec, str);
  if (idx < 0) {
    UShort_t ringi = (ring == 'I' ||  ring == 'i' ? 0 : 
		      (ring == 'O' || ring == 'o' ? 1 : 2));
    AliFatal(Form("Index FMD%d%c[%2d,%3d] out of bounds, "
		  "in particular the %s index ", 
		  det, ring, sec, str, 
		  (det > fMaxDetectors ? "Detector" : 
		   (ringi >= fMaxRings ? "Ring" : 
		    (sec >= fMaxSectors ? "Sector" : "Strip")))));
    return 0;
  }
  return idx;
}

#define INCOMP_OP(self, other, OP) do {					\
  AliWarning("Incompatible sized AliFMDMap");				\
  UShort_t maxDet = TMath::Min(self->MaxDetectors(), other.MaxDetectors()); \
  UShort_t maxRng = TMath::Min(self->MaxRings(),     other.MaxRings());	\
  UShort_t maxSec = TMath::Min(self->MaxSectors(),   other.MaxSectors()); \
  UShort_t maxStr = TMath::Min(self->MaxStrips(),    other.MaxStrips()); \
  for (UShort_t d = 1; d <= maxDet; d++) {				\
    UShort_t nRng = TMath::Min(UShort_t(d == 1 ? 1 : 2), maxRng);	\
    for (UShort_t q = 0; q < nRng; q++) {                               \
      Char_t   r    = (q == 0 ? 'I' : 'O');                             \
      UShort_t nSec = TMath::Min(UShort_t(q == 0 ?  20 :  40), maxSec);	\
      UShort_t nStr = TMath::Min(UShort_t(q == 0 ? 512 : 256), maxStr);	\
      for (UShort_t s = 0; s < nSec; s++) {				\
        for (UShort_t t = 0; t < nStr; t++) {				\
	  Int_t idx1 = self->CalcIndex(d, r, s, t);			\
	  Int_t idx2 = other.CalcIndex(d, r, s, t);			\
	  if (idx1 < 0 || idx2 < 0) {					\
	    AliWarning("Index out of bounds");				\
	    continue;							\
	  }								\
	  if (self->IsFloat())						\
	    self->AtAsFloat(idx1) OP other.AtAsFloat(idx2);		\
	  else if (self->IsInt())					\
	    self->AtAsInt(idx1) OP other.AtAsInt(idx2);			\
	  else if (self->IsUShort())					\
	    self->AtAsUShort(idx1) OP other.AtAsUShort(idx2);		\
	  else if (self->IsBool())					\
	    self->AtAsBool(idx1) OP other.AtAsBool(idx2);		\
	}								\
      }									\
    }									\
  }									\
  } while (false)

#define COMP_OP(self,other,OP) do {					\
    for (Int_t i = 0; i < self->MaxIndex(); i++) {			\
      if (self->IsFloat())						\
	self->AtAsFloat(i) OP other.AtAsFloat(i);			\
      else if (self->IsInt())						\
	self->AtAsInt(i) OP other.AtAsInt(i);				\
      else if (self->IsUShort())					\
	self->AtAsUShort(i) OP other.AtAsUShort(i);			\
      else if (self->IsBool())						\
	self->AtAsBool(i) OP other.AtAsBool(i);				\
    } } while (false)

//__________________________________________________________
AliFMDMap&
AliFMDMap::operator*=(const AliFMDMap& other)
{
  // Right multiplication assignment operator 
  if(fMaxDetectors!= other.fMaxDetectors||
     fMaxRings    != other.fMaxRings    ||
     fMaxSectors  != other.fMaxSectors  ||
     fMaxStrips   != other.fMaxStrips   ||
     MaxIndex()   != other.MaxIndex()) {
    INCOMP_OP(this, other, *=);
    return *this;
  }
  COMP_OP(this, other, *=);
  return *this;
}

//__________________________________________________________
AliFMDMap&
AliFMDMap::operator/=(const AliFMDMap& other)
{
  // Right division assignment operator 
  if(fMaxDetectors!= other.fMaxDetectors||
     fMaxRings    != other.fMaxRings    ||
     fMaxSectors  != other.fMaxSectors  ||
     fMaxStrips   != other.fMaxStrips   ||
     MaxIndex()   != other.MaxIndex()) {
    INCOMP_OP(this, other, /=);
    return *this;
  }
  COMP_OP(this, other, /=);
  return *this;
}

//__________________________________________________________
AliFMDMap&
AliFMDMap::operator+=(const AliFMDMap& other)
{
  // Right addition assignment operator 
  if(fMaxDetectors!= other.fMaxDetectors||
     fMaxRings    != other.fMaxRings    ||
     fMaxSectors  != other.fMaxSectors  ||
     fMaxStrips   != other.fMaxStrips   ||
     MaxIndex()   != other.MaxIndex()) {
    INCOMP_OP(this, other, +=);
    return *this;
  }
  COMP_OP(this, other, +=);
  return *this;
}

//__________________________________________________________
AliFMDMap&
AliFMDMap::operator-=(const AliFMDMap& other)
{
  // Right subtraction assignment operator 
  if(fMaxDetectors!= other.fMaxDetectors||
     fMaxRings    != other.fMaxRings    ||
     fMaxSectors  != other.fMaxSectors  ||
     fMaxStrips   != other.fMaxStrips   ||
     MaxIndex()   != other.MaxIndex()) {
    INCOMP_OP(this, other, +=);
    return *this;
  }
  COMP_OP(this, other, +=);
  return *this;
}

//__________________________________________________________
Bool_t
AliFMDMap::ForEach(ForOne& algo) const
{
  // Assignment operator 
  Bool_t ret = kTRUE;
  for (Int_t i = 0; i < this->MaxIndex(); i++) { 
    UShort_t d, s, t;
    Char_t r;
    CalcCoords(i, d, r, s, t);
    Bool_t rr = kTRUE;
    if (IsFloat()) 
      rr = algo.operator()(d, r, s, t, this->AtAsFloat(i));
    else if (IsInt()) 
      rr = algo.operator()(d, r, s, t, this->AtAsInt(i));
    else if (IsUShort()) 
      rr = algo.operator()(d, r, s, t, this->AtAsUShort(i));
    else if (IsBool()) 
      rr = algo.operator()(d, r, s, t, this->AtAsBool(i));
    if (!rr) {
      ret = kFALSE;
      break;
    }
  }
  return ret;
}

//__________________________________________________________
void
AliFMDMap::Print(Option_t* option) const
{
  // Print contents of map
  if (!option || option[0] == '\0') TObject::Print();
  Printer p(option);
  ForEach(p);
  printf("\n");
}

//===================================================================
AliFMDMap::Printer::Printer(const char* format)
  : fFormat(format), fOldD(0), fOldR('-'), fOldS(1024) 
{}

//___________________________________________________________________
AliFMDMap::Printer::Printer(const Printer& p) 
  : AliFMDMap::ForOne(p),
    fFormat(p.fFormat), 
    fOldD(p.fOldD), 
    fOldR(p.fOldR), 
    fOldS(p.fOldS) 
{}
//___________________________________________________________________
void
AliFMDMap::Printer::PrintHeadings(UShort_t d, Char_t r, UShort_t s, UShort_t t) 
{
  if (d != fOldD) { 
    fOldD = d;
    fOldR = '-';
    if (d != 0) printf("\n");
    printf("FMD%d", fOldD);
  }
  if (r != fOldR) {
    fOldR = r;
    fOldS = 1024;
    printf("\n %s ring", (r == 'I' ? "Inner" : "Outer"));
  }
  if (s != fOldS) { 
    fOldS = s;
    printf("\n  Sector %2d", fOldS);
  }
  if (t % 4 == 0) printf("\n   %3d-%3d ", t, t+3);
}
//___________________________________________________________________
Bool_t
AliFMDMap::Printer::operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
			       Float_t m)
{
  PrintHeadings(d, r, s, t);
  printf(fFormat, m);
  return kTRUE;
}
//___________________________________________________________________
Bool_t
AliFMDMap::Printer::operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
			       Int_t m)
{
  PrintHeadings(d, r, s, t);
  printf(fFormat, m);
  return kTRUE;
}
//___________________________________________________________________
Bool_t
AliFMDMap::Printer::operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
			       UShort_t m)
{
  PrintHeadings(d, r, s, t);
  printf(fFormat, m);
  return kTRUE;
}
//___________________________________________________________________
Bool_t
AliFMDMap::Printer::operator()(UShort_t d, Char_t r, UShort_t s, UShort_t t, 
			       Bool_t m)
{
  PrintHeadings(d, r, s, t);
  printf(fFormat, int(m));
  return kTRUE;
}

#if 0
//___________________________________________________________________
void AliFMDMap::Streamer(TBuffer &R__b)
{
  // Stream an object of class AliFMDMap.
  // This is overridden so that we can know the version of the object
  // that we are reading in.  In this way, we can fix problems that
  // might occur in the class. 
  if (R__b.IsReading()) {
    // read the class version from the buffer
    UInt_t R__s, R__c;
    Version_t version = R__b.ReadVersion(&R__s, &R__c, this->Class());
    TFile *file = (TFile*)R__b.GetParent();
    if (file && file->GetVersion() < 30000) version = -1; 
    AliFMDMap::Class()->ReadBuffer(R__b, this, version, R__s, R__c);
    if (version == 2) SetBit(kNeedUShort);
  } else {
    AliFMDMap::Class()->WriteBuffer(R__b, this);
  }
}
#endif

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