fHybridVerticies(0),
fFeetPositions(0)
{
- // CTOR
+ // Constructor
+ //
+ // Parameters:
+ // id Type of ring (either 'I' or 'O')
+ //
SetBondingWidth();
SetWaferRadius();
SetSiThickness();
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);
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));
}
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));
}
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));
}
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));
}
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();
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()
Double_t
AliFMDRing::GetFullDepth() const
{
+ // Get the full depth of this ring, including the honeycomb,
+ // digitizer and card.
return (GetModuleDepth()
+ GetModuleSpacing()
+ GetHoneycombThickness()
{
// 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);
{
// 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());
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)",
strip, GetNStrips(), fId);
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 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 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 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()) {
- arclength = radius*theta; //One sector since theta is by definition half-hybrid
-
+ //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()); // One hybrid: 36 degrees inner, 18 outer
+ Float_t basearc = 2*TMath::Pi() / (0.5*GetNSectors());
Float_t radius = GetMinR() + strip*segment;
- Float_t basearclength = 0.5*basearc * radius; // One sector
+ Float_t basearclength = 0.5*basearc * radius;
return basearclength;
}