ROOT logo
/**************************************************************************
 * Copyright(c) 2004, 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$ */
/** @file    AliFMDRing.cxx
    @author  Christian Holm Christensen <cholm@nbi.dk>
    @date    Mon Mar 27 12:47:43 2006
    @brief   FMD ring geometry parameters 
*/
//__________________________________________________________________
//
// Utility class to help implement collection of FMD modules into
// rings.  This is used by AliFMDDetector and AliFMDGeometry.
// The AliFMDGeometry object owns the AliFMDRing objects, and the
// AliFMDDetector objects reference these.  That is, the AliFMDRing
// objects are share amoung the AliFMDDetector objects.
//
// Latest changes by Christian Holm Christensen
//

#include <TMath.h>		// ROOT_TMath
#include <TVector2.h>		// ROOT_TVector2

// #include <AliLog.h>		// ALILOG_H
#include "AliFMDRing.h"		// ALIFMDRING_H

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

//____________________________________________________________________
AliFMDRing::AliFMDRing(Char_t id) 
  : TNamed(Form("FMD%c", id), "Forward multiplicity ring"), 
    fId(id), 
    fBondingWidth(0),
    fWaferRadius(0),
    fSiThickness(0),
    fLowR(0),
    fHighR(0),
    fMinR(0),
    fMaxR(0),
    fTheta(0),
    fNStrips(0),
    fRingDepth(0),
    fLegRadius(0),
    fLegLength(0),
    fLegOffset(0),
    fModuleSpacing(0),
    fPrintboardThickness(0),
    fCopperThickness(0),
    fChipThickness(0),
    fSpacing(0),
    fHoneycombThickness(0.),
    fAlThickness(0.),
    fVerticies(0), 
    fSensorVerticies(0),
    fHybridVerticies(0),
    fFeetPositions(0)
{
  // Constructor 
  // 
  // Parameters: 
  //    id      Type of ring (either 'I' or 'O') 
  // 
  SetBondingWidth();
  SetWaferRadius();
  SetSiThickness();
  SetLegRadius();
  SetLegLength();
  SetLegOffset();
  SetModuleSpacing();
  SetPrintboardThickness();
  SetCopperThickness();
  SetChipThickness();
  SetSpacing();
  SetHoneycombThickness();
  SetAlThickness();
  
  if (fId == 'I' || fId == 'i') {
    SetLowR(4.3);
    SetHighR(17.2);
    SetTheta(36/2);
    SetNStrips(512);
    Double_t base = 0; // 4.1915;
    fFeetPositions.Add(new TVector2( 0.0551687, 8.0534-base));
    fFeetPositions.Add(new TVector2( 2.9993,   12.9457-base));
    fFeetPositions.Add(new TVector2(-2.9062,   12.9508-base));
    
    fHybridVerticies.Add(new TVector2(0.0000,  4.1700));
    fHybridVerticies.Add(new TVector2(1.0574,  4.1700));
    fHybridVerticies.Add(new TVector2(4.6614, 15.2622));
    fHybridVerticies.Add(new TVector2(0.9643, 17.4000));
    fHybridVerticies.Add(new TVector2(0.0000, 17.4000));

    fSensorVerticies.Add(new TVector2(0.0000,  4.1915));
    fSensorVerticies.Add(new TVector2(1.5793,  4.1915));
    fSensorVerticies.Add(new TVector2(5.2293, 15.4251));
    fSensorVerticies.Add(new TVector2(1.9807, 17.3035));
    fSensorVerticies.Add(new TVector2(0.0000, 17.3035));

    fVerticies.Add(new TVector2(0.0000,  4.3000));
    fVerticies.Add(new TVector2(1.3972,  4.3000));
    fVerticies.Add(new TVector2(4.9895, 15.3560));
    fVerticies.Add(new TVector2(1.8007, 17.2000));
    fVerticies.Add(new TVector2(0.0000, 17.2000));
  }
  else if (fId == 'O' || fId == 'o') {
    SetLowR(15.6);
    SetHighR(28.0);
    SetTheta(18/2);
    SetNStrips(256);
    Double_t base = 0; // 14.9104;
    fFeetPositions.Add(new TVector2(-1.72540000, 20.6267-base));
    fFeetPositions.Add(new TVector2( 1.72900000, 20.6267-base));
    fFeetPositions.Add(new TVector2( 0.00177616, 26.6007-base));

    fHybridVerticies.Add(new TVector2(0.0000, 14.9104));
    fHybridVerticies.Add(new TVector2(2.0783, 14.9104));
    fHybridVerticies.Add(new TVector2(3.9202, 26.5395));
    fHybridVerticies.Add(new TVector2(0.6784, 28.2500));
    fHybridVerticies.Add(new TVector2(0.0000, 28.2500));

    fSensorVerticies.Add(new TVector2(0.0000, 15.0104));
    fSensorVerticies.Add(new TVector2(2.5799, 15.0104));
    fSensorVerticies.Add(new TVector2(4.4439, 26.7766));
    fSensorVerticies.Add(new TVector2(1.8350, 28.1500));
    fSensorVerticies.Add(new TVector2(0.0000, 28.1500));

    fVerticies.Add(new TVector2(0.0000, 15.2104));
    fVerticies.Add(new TVector2(2.4091, 15.2104));
    fVerticies.Add(new TVector2(4.2231, 26.6638));
    fVerticies.Add(new TVector2(1.8357, 27.9500));
    fVerticies.Add(new TVector2(0.0000, 27.9500));
  }
}

//____________________________________________________________________
void
AliFMDRing::Init()
{
  // Initialize 
  // 
  // All derived quantities are calculated here. 
  // 
#if 0
  Double_t tanTheta  = TMath::Tan(fTheta * TMath::Pi() / 180.);
  Double_t tanTheta2 = TMath::Power(tanTheta,2);
  Double_t r2        = TMath::Power(fWaferRadius,2);
  Double_t yA        = tanTheta * fLowR;
  Double_t lr2       = TMath::Power(fLowR, 2);
  Double_t hr2       = TMath::Power(fHighR,2);
  Double_t xD        = fLowR + TMath::Sqrt(r2 - tanTheta2 * lr2);
  Double_t xD2       = TMath::Power(xD,2);
  Double_t yB        = TMath::Sqrt(r2 - hr2 + 2 * fHighR * xD - xD2);
  Double_t xC        = ((xD + TMath::Sqrt(-tanTheta2 * xD2 + r2
					  + r2 * tanTheta2)) 
			/ (1 + tanTheta2));
  Double_t yC        = tanTheta * xC;
  
  fVerticies.Expand(6);
  fVerticies.AddAt(new TVector2(fLowR,  -yA), 0);
  fVerticies.AddAt(new TVector2(xC,     -yC), 1);
  fVerticies.AddAt(new TVector2(fHighR, -yB), 2);
  fVerticies.AddAt(new TVector2(fHighR,  yB), 3);
  fVerticies.AddAt(new TVector2(xC,      yC), 4);
  fVerticies.AddAt(new TVector2(fLowR,   yA), 5);  
#endif

  // A's length. Corresponds to distance from nominal beam line to the
  // cornor of the active silicon element. 
  fMinR = GetVertex(1)->Mod(); // GetVertex(5)->Mod();
  // A's length. Corresponds to distance from nominal beam line to the
  // cornor of the active silicon element. 
  fMaxR = fHighR;

  fRingDepth = (fSiThickness + fPrintboardThickness 
		+ fCopperThickness + fChipThickness 
		+ fLegLength + fModuleSpacing + fSpacing);
}

//____________________________________________________________________
TVector2*
AliFMDRing::GetVertex(Int_t i) const
{
  // Get the i'th vertex of polygon shape
  // 
  // the polygon shape describes the shape of the rings' sensors
  // 
  // Parameters: 
  //     i    The vertex number to get (from 0 to 5)
  return static_cast<TVector2*>(fVerticies.At(i));
}

//____________________________________________________________________
TVector2*
AliFMDRing::GetSensorVertex(Int_t i) const
{
  // Get the i'th vertex of polygon shape
  // 
  // the polygon shape describes the shape of the rings' sensors
  // 
  // Parameters: 
  //     i    The vertex number to get (from 0 to 5)
  return static_cast<TVector2*>(fSensorVerticies.At(i));
}

//____________________________________________________________________
TVector2*
AliFMDRing::GetHybridVertex(Int_t i) const
{
  // Get the i'th vertex of polygon shape
  // 
  // the polygon shape describes the shape of the rings' hybrid cards
  // 
  // Parameters: 
  //     i    The vertex number to get (from 0 to 5)
  return static_cast<TVector2*>(fHybridVerticies.At(i));
}

//____________________________________________________________________
TVector2*
AliFMDRing::GetFootPosition(Int_t i) const
{
  // Get the i'th vertex of polygon shape
  // 
  // The feet are attached to the hybrid cards
  // 
  // Parameters: 
  //     i    The foot number to get (from 0 to 2)
  return static_cast<TVector2*>(fFeetPositions.At(i));
}

//____________________________________________________________________
Double_t
AliFMDRing::GetStripRadius(UShort_t strip) const
{
  // Return the nominal strip radius 
  // 
  // Parameter 
  //   strip    Strip number (0-511 for inners, 0-255 for outers)
  Double_t rmax     = GetMaxR();
  Double_t stripoff = GetMinR();
  Double_t dstrip   = (rmax - stripoff) / GetNStrips();
  return (strip + .5) * dstrip + stripoff; // fLowR
}
 
//____________________________________________________________________
Double_t
AliFMDRing::GetModuleDepth() const
{
  // Get the total depth of a module (sensor + hybrid card) 
  // 
  // The depth is the sum of 
  // 
  //   The silicon thickness 
  //   The thickness of spacers between the silicon and hybrid
  //   The thickness of the hybrid PCB
  //   The thickness of the copper layer in the PCB
  //   The thickness of the chip layer in the PCB
  //   The height of the legs
  return (GetSiThickness() 
	  + GetSpacing() 
	  + GetPrintboardThickness()
	  + GetCopperThickness()
	  + GetChipThickness()
	  + GetLegLength());
  
}

//____________________________________________________________________
Double_t
AliFMDRing::GetFullDepth() const
{
  // Get the full depth of this ring, including the honeycomb, 
  // digitizer and card. 
  return (GetModuleDepth() 
	  + GetModuleSpacing()
	  + GetHoneycombThickness()
	  + GetFMDDPrintboardThickness()
	  + GetFMDDCopperThickness()
	  + GetFMDDChipThickness() 
	  + 0.5);
}

//____________________________________________________________________
void
AliFMDRing::Detector2XYZ(UShort_t sector,
			 UShort_t strip, 
			 Double_t& x, 
			 Double_t& y, 
			 Double_t& z) const
{
  // Translate detector coordinates (this,sector,strip) to global
  // coordinates (x,y,z)
  // 
  // Parameters 
  //    sector        Sector number in this ring 
  //    strip         Strip number in this ring 
  //    x             On return, the global X coordinate
  //    y             On return, the global Y coordinate 
  //    z             On return, the z coordinate in the ring plane 
  //
  // The ring plane is the plane half way between the two sensor
  // layers. 
  if (sector >= GetNSectors()) {
    Error("Detector2XYZ", "Invalid sector number %d (>=%d) in ring %c", 
	  sector, GetNSectors(), fId);
    return;
  }
  if (strip >= GetNStrips()) {
    Error("Detector2XYZ", "Invalid strip number %d (>=%d) for ring type '%c'", 
	  strip, GetNStrips(), fId);
    return;
  }
  Double_t phi = Float_t(sector + .5) / GetNSectors() * 2 * TMath::Pi();
  Double_t r   = Float_t(strip + .5) / GetNStrips() * (fHighR - fLowR) + fLowR;
  x = r * TMath::Cos(phi);
  y = r * TMath::Sin(phi);
  if (((sector / 2) % 2) == 1) 
    z += TMath::Sign(fModuleSpacing, z);
}

//____________________________________________________________________
Bool_t
AliFMDRing::XYZ2Detector(Double_t  x, 
			 Double_t  y, 
			 Double_t  z,
			 UShort_t& sector,
			 UShort_t& strip) const
{
  // Translate global coordinates (x,y,z) to detector coordinates
  // (this,sector,strip)
  // 
  //  Parameters: 
  //     x       Global x coordinate 
  //     y       Global y coordinate
  //     z       Global y coordinate
  //     sector  On return, the sector number in this ring
  //     strip   On return, the strip number in this ring
  // 
  sector = strip = 0;
  Double_t r = TMath::Sqrt(x * x + y * y);
  Int_t str = Int_t((r - fMinR) / GetPitch());
  if (str < 0 || str >= GetNStrips()) return kFALSE;

  Double_t phi = TMath::ATan2(y, x) * 180. / TMath::Pi();
  if (phi < 0) phi = 360. + phi;
  Int_t sec = Int_t(phi / fTheta);
  if (sec < 0 || sec >= GetNSectors()) return kFALSE;
  if ((sec / 2) % 2 == 1) {
    if (TMath::Abs(z - TMath::Sign(fModuleSpacing, z)) >= 0.01)
      return kFALSE;
  }
  else if (TMath::Abs(z) >= 0.01) return kFALSE;

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