Updates (N. Bastid)
[u/mrichter/AliRoot.git] / FMD / AliFMD3.cxx
CommitLineData
4347b38f 1/**************************************************************************
2 * Copyright(c) 2004, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
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 **************************************************************************/
4347b38f 15/* $Id$ */
c2fc1258 16/** @file AliFMD3.cxx
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
20*/
ba224443 21//____________________________________________________________________
4347b38f 22//
1a1fdef7 23// Concrete implementation of AliFMDDetector
4347b38f 24//
088f8e79 25// This implements the geometry for FMD3.
26// This has 2 rings.
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.
6169f936 29// The support is a special cone of carbon-fibre made by a Danish
30// Yacht company.
4347b38f 31//
e802be3e 32#include "AliFMD3.h" // ALIFMD3_H
33#include "AliLog.h" // ALILOG_H
34#include "AliFMDRing.h" // ALIFMDRING_H
02a27b50 35// #include <TMath.h> // ROOT_TMath
4347b38f 36
1a1fdef7 37//====================================================================
925e6570 38ClassImp(AliFMD3)
1a1fdef7 39#if 0
40 ; // This is here to keep Emacs for indenting the next line
41#endif
4347b38f 42
43//____________________________________________________________________
1a1fdef7 44AliFMD3::AliFMD3(AliFMDRing* inner, AliFMDRing* outer)
45 : AliFMDDetector(3, inner, outer)
4347b38f 46{
088f8e79 47 // Constructor.
1a1fdef7 48 SetInnerZ(-62.8);
49 SetOuterZ(-75.2);
50 SetNoseZ();
51 SetNoseLowR();
52 SetNoseHighR();
53 SetNoseLength();
54 SetBackLowR();
55 SetBackHighR();
56 SetBackLength();
57 SetBeamThickness();
58 SetBeamWidth();
59 SetConeLength();
60 SetFlangeR();
61 SetNBeam();
62 SetNFlange();
4347b38f 63}
64
65//____________________________________________________________________
1a1fdef7 66void
67AliFMD3::Init()
4347b38f 68{
088f8e79 69 // Initialize
1a1fdef7 70 AliFMDDetector::Init();
71 SetInnerHoneyHighR(GetOuterHoneyHighR());
72 Double_t zdist = fConeLength - fBackLength - fNoseLength;
73 Double_t tdist = fBackHighR - fNoseHighR;
74 Double_t innerZh = fInnerZ - fInner->GetRingDepth() - fHoneycombThickness;
75 Double_t outerZh = fOuterZ - fOuter->GetRingDepth() - fHoneycombThickness;
76 Double_t minZ = TMath::Min(fNoseZ - fConeLength, outerZh);
77 fAlpha = tdist / zdist;
78 fZ = fNoseZ + (minZ - fNoseZ) / 2;
79 fInnerHoneyHighR = ConeR(innerZh + fHoneycombThickness,"O") - 1;
80 fOuterHoneyHighR = GetBackLowR();
4347b38f 81}
82
ba224443 83//____________________________________________________________________
1a1fdef7 84Double_t
85AliFMD3::ConeR(Double_t z, Option_t* opt) const
ba224443 86{
1a1fdef7 87 // Calculate the cone radius at Z
88 if (fAlpha < 0) {
088f8e79 89 AliWarning(Form("alpha not set: %lf", fAlpha));
1a1fdef7 90 return -1;
ba224443 91 }
1a1fdef7 92 if (z > fNoseZ) {
088f8e79 93 AliWarning(Form("z=%lf is before start of cone %lf", z, fNoseZ));
1a1fdef7 94 return -1;
ba224443 95 }
1a1fdef7 96 if (z < fOuterZ - fOuter->GetRingDepth() - fHoneycombThickness) {
088f8e79 97 AliWarning(Form("z=%lf is after end of cone %lf", z,
98 fOuterZ - fOuter->GetRingDepth() - fHoneycombThickness));
1a1fdef7 99 return -1;
100 }
101 Double_t e = fBeamThickness / TMath::Cos(TMath::ATan(fAlpha));
102 if (opt[0] == 'I' || opt[1] == 'i') e *= -1;
103 if (z > fNoseZ - fNoseLength) return fNoseHighR + e;
104 if (z < fNoseZ - fConeLength + fBackLength) return fBackHighR + e;
105 Double_t r = fNoseHighR + fAlpha * TMath::Abs(z - fNoseZ + fNoseLength) + e;
106 return r;
ba224443 107}
108
4347b38f 109
110//____________________________________________________________________
111//
112// EOF
113//