1 /**************************************************************************
2 * Copyright(c) 2004, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
17 @author Christian Holm Christensen <cholm@nbi.dk>
18 @date Sun Mar 26 18:26:12 2006
19 @brief Concrete implementation of AliFMDDetector for FMD3
21 //____________________________________________________________________
23 // Concrete implementation of AliFMDDetector
25 // This implements the geometry for FMD3.
27 // The support of the FMD3 is a carbon-fibre cone, attached to the ITS
28 // support via flanges. The cone also supports the beam-pipe.
29 // The support is a special cone of carbon-fibre made by a Danish
32 #include "AliFMD3.h" // ALIFMD3_H
33 #include "AliLog.h" // ALILOG_H
34 #include "AliFMDRing.h" // ALIFMDRING_H
35 // #include <TMath.h> // ROOT_TMath
37 //====================================================================
40 ; // This is here to keep Emacs for indenting the next line
43 //____________________________________________________________________
44 AliFMD3::AliFMD3(AliFMDRing* inner, AliFMDRing* outer)
45 : AliFMDDetector(3, inner, outer),
80 //____________________________________________________________________
85 AliFMDDetector::Init();
86 SetInnerHoneyHighR(GetOuterHoneyHighR());
87 Double_t zdist = fConeLength - fBackLength - fNoseLength;
88 Double_t tdist = fBackHighR - fNoseHighR;
89 Double_t innerZh = fInnerZ - fInner->GetRingDepth() - fHoneycombThickness;
90 Double_t outerZh = fOuterZ - fOuter->GetRingDepth() - fHoneycombThickness;
91 Double_t minZ = TMath::Min(fNoseZ - fConeLength, outerZh);
92 fAlpha = tdist / zdist;
93 fZ = fNoseZ + (minZ - fNoseZ) / 2;
94 fInnerHoneyHighR = ConeR(innerZh + fHoneycombThickness,"O") - 1;
95 fOuterHoneyHighR = GetBackLowR();
98 //____________________________________________________________________
100 AliFMD3::ConeR(Double_t z, Option_t* opt) const
102 // Calculate the cone radius at Z
104 AliWarning(Form("alpha not set: %lf", fAlpha));
108 AliWarning(Form("z=%lf is before start of cone %lf", z, fNoseZ));
111 if (z < fOuterZ - fOuter->GetRingDepth() - fHoneycombThickness) {
112 AliWarning(Form("z=%lf is after end of cone %lf", z,
113 fOuterZ - fOuter->GetRingDepth() - fHoneycombThickness));
116 Double_t e = fBeamThickness / TMath::Cos(TMath::ATan(fAlpha));
117 if (opt[0] == 'I' || opt[1] == 'i') e *= -1;
118 if (z > fNoseZ - fNoseLength) return fNoseHighR + e;
119 if (z < fNoseZ - fConeLength + fBackLength) return fBackHighR + e;
120 Double_t r = fNoseHighR + fAlpha * TMath::Abs(z - fNoseZ + fNoseLength) + e;
125 //____________________________________________________________________