LCOV - code coverage report
Current view: top level - FMD/FMDbase - AliFMD3.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 67 72 93.1 %
Date: 2016-06-14 17:26:59 Functions: 5 5 100.0 %

          Line data    Source code
       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             :  **************************************************************************/
      15             : /* $Id$ */
      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             : */
      21             : //____________________________________________________________________
      22             : //                                                                          
      23             : // Concrete implementation of AliFMDDetector 
      24             : //
      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.
      29             : // The support is a special cone of carbon-fibre made by a Danish
      30             : // Yacht company.
      31             : //
      32             : 
      33             : #include <TMath.h>                // ROOT_TMath
      34             : 
      35             : #include "AliFMD3.h"          // ALIFMD3_H 
      36             : #include "AliFMDDebug.h"              // ALIFMDDEBUG_H ALILOG_H
      37             : #include "AliFMDRing.h"               // ALIFMDRING_H 
      38             : #include <TVector3.h>
      39             : 
      40             : //====================================================================
      41          12 : ClassImp(AliFMD3)
      42             : #if 0
      43             :   ; // This is here to keep Emacs for indenting the next line
      44             : #endif
      45             : 
      46             : //____________________________________________________________________
      47             : AliFMD3::AliFMD3(AliFMDRing* inner, AliFMDRing* outer) 
      48           3 :   : AliFMDDetector(3, inner, outer),
      49             :     // fNoseZ(16.54667)
      50           6 :     fNoseZ(18.13 - inner->GetModuleDepth()-inner->GetModuleSpacing()/2),    // From drawing
      51           3 :     fFlangeDepth(0),
      52           3 :     fFlangeHighR(49.25), // From drawing 
      53           3 :     fFlangeLength(0),
      54           3 :     fFlangeWidth(6),     // From drawing 
      55           3 :     fFiducialRadius(.25),
      56           3 :     fConeInnerAngle(0),
      57           3 :     fConeOuterAngle(0),
      58           3 :     fHoleOffset(6.9),    // From drawing
      59           3 :     fHoleDepth(2),       // What's needed
      60           3 :     fHoleLength(31.2),   // From drawing
      61           3 :     fHoleLowWidth(3), // 4),    // What's needed
      62           3 :     fHoleHighWidth(18.5), // 17.5), // 18),  // What's needed
      63           3 :     fBoltLength(1),      // Guessed
      64           3 :     fBoltRadius(0.15),   // Estimate
      65           3 :     fConeRadii(6),    
      66           3 :     fFiducialHoles(4)
      67          15 : {
      68             :   // Constructor. 
      69             :   Double_t off = 0; // -0.39615-0.10185; // -0.25;
      70           3 :   if (off != 0) 
      71           0 :     AliWarning(Form("Z position of FMD3 rings may be off by %fcm!", off));
      72             : 
      73           3 :   SetInnerZ(-62.8+off);             // By design
      74           3 :   SetOuterZ(-75.2+off);             // By design
      75             : 
      76           3 :   SetInnerHoneyLowR(4.18207);   // From drawing
      77           3 :   SetInnerHoneyHighR(19.74922); // From drawing
      78           3 :   SetOuterHoneyLowR(13.4776);   // From drawing
      79           3 :   SetOuterHoneyHighR(31.01964); // From drawing
      80             :   
      81             :   // These are from the drawings
      82           9 :   fConeRadii.Add(new TVector3( 0,       5.55,  6.25));
      83           9 :   fConeRadii.Add(new TVector3( 2.35,    5.55,  6.25));
      84           9 :   fConeRadii.Add(new TVector3( 2.9935,  5.55,  6.88479));
      85           9 :   fConeRadii.Add(new TVector3(28.9435, 31.50, 32.75850));
      86           9 :   fConeRadii.Add(new TVector3(29.5,    31.50, 33.4));
      87           9 :   fConeRadii.Add(new TVector3(30.9,    31.50, 33.4));
      88             : 
      89             :   // These are from the drawings
      90           9 :   fFiducialHoles.Add(new TVector2(29.666, 32.495));
      91           9 :   fFiducialHoles.Add(new TVector2(31.082, 33.910));
      92           9 :   fFiducialHoles.Add(new TVector2(32.674, 35.503));
      93           9 :   fFiducialHoles.Add(new TVector2(33.403, 34.818));
      94           6 : }
      95             : 
      96             : //____________________________________________________________________
      97             : void
      98             : AliFMD3::Init() 
      99             : {
     100             :   // Initialize 
     101          22 :   AliFMDDetector::Init();
     102             :   // TVector3& v0 = *(static_cast<TVector3*>(fConeRadii.At(0)));
     103          11 :   TVector3& v1 = *(static_cast<TVector3*>(fConeRadii.At(1)));
     104          11 :   TVector3& v2 = *(static_cast<TVector3*>(fConeRadii.At(2)));
     105          11 :   TVector3& v3 = *(static_cast<TVector3*>(fConeRadii.At(3)));
     106          11 :   TVector3& v4 = *(static_cast<TVector3*>(fConeRadii.At(4)));
     107          11 :   TVector3& v5 = *(static_cast<TVector3*>(fConeRadii.At(5)));
     108             :   
     109          11 :   fFlangeDepth     = v5.X() - v4.X();
     110          11 :   fFlangeLength    = fFlangeHighR - v5.Y();
     111             :   
     112          11 :   fConeInnerAngle  = TMath::ATan2(v4.Z()-v1.Z(), v4.X()-v1.X());
     113          11 :   fConeOuterAngle  = TMath::ATan2(v3.Y()-v2.Y(), v3.X()-v2.X());
     114             :   
     115             : #if 0
     116             :   Double_t    hz1  = -fHoleOffset+fInnerZ+fNoseZ;
     117             :   fHoleLength      = TMath::Sqrt(TMath::Power(v4.Z()-ConeR(hz1),2) + 
     118             :                                  TMath::Power(v4.X()-fHoleOffset,2));  
     119             : #endif
     120          11 : }
     121             : 
     122             : //____________________________________________________________________
     123             : Double_t
     124             : AliFMD3::ConeR(Double_t z, Option_t* opt) const
     125             : {
     126             :   // Calculate the cone radius at Z
     127             :   // TVector3& v0 = *(static_cast<TVector3*>(fConeRadii.At(0)));
     128          10 :   TVector3& v1 = *(static_cast<TVector3*>(fConeRadii.At(1)));
     129           5 :   TVector3& v2 = *(static_cast<TVector3*>(fConeRadii.At(2)));
     130           5 :   TVector3& v3 = *(static_cast<TVector3*>(fConeRadii.At(3)));
     131           5 :   TVector3& v4 = *(static_cast<TVector3*>(fConeRadii.At(4)));
     132           5 :   TVector3& v5 = *(static_cast<TVector3*>(fConeRadii.At(5)));
     133             : 
     134           5 :   if (z > fInnerZ + fNoseZ) {
     135           0 :     AliWarning(Form("z=%lf is before start of cone %lf", z, fInnerZ + fNoseZ));
     136           0 :     return -1;
     137             :   }
     138           5 :   if (z < fInnerZ + fNoseZ - v5.Z()) {
     139           0 :     AliWarning(Form("z=%lf is after end of cone %lf", z, 
     140             :                     fInnerZ + fNoseZ - v5.Z()));
     141           0 :     return -1;
     142             :   }
     143           5 :   Double_t rz    = -(z-fInnerZ-fNoseZ);
     144          15 :   Bool_t   inner = opt[0] == 'I' || opt[1] == 'i';
     145           5 :   if (inner  && rz <= v2.X()) return v2.Y();
     146          11 :   if (!inner && rz <= v1.X()) return v1.Z();
     147           4 :   if (inner  && rz >  v3.X()) return v3.Y();
     148           8 :   if (!inner && rz >  v4.X()) return v4.Z();
     149             :   
     150          12 :   rz             -= (inner ? v2.X() : v1.X());
     151          12 :   Double_t sr    =  (inner ? v2.Y() : v1.Z());
     152          12 :   Double_t ang   =  (inner ? fConeInnerAngle : fConeOuterAngle);
     153           4 :   return sr + rz * TMath::Tan(ang);
     154           5 : }
     155             : 
     156             : 
     157             : //____________________________________________________________________
     158             : //
     159             : // EOF
     160             : //

Generated by: LCOV version 1.11