LCOV - code coverage report
Current view: top level - FMD/FMDsim - AliFMDv1.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 12 13 92.3 %
Date: 2016-06-14 17:26:59 Functions: 9 13 69.2 %

          Line data    Source code
       1             : #ifndef ALIFMDV1_H
       2             : #define ALIFMDV1_H
       3             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights
       4             :  * reserved. 
       5             :  *
       6             :  * Latest changes by Christian Holm Christensen <cholm@nbi.dk>
       7             :  *
       8             :  * See cxx source for full Copyright notice                               
       9             :  */
      10             : /** @file    AliFMDv1.h
      11             :     @author  Christian Holm Christensen <cholm@nbi.dk>
      12             :     @date    Mon Mar 27 12:48:51 2006
      13             :     @brief   Concrete implementation of FMD detector driver - detailed
      14             :     version 
      15             : */
      16             : //____________________________________________________________________
      17             : //
      18             : //  Manager class for the FMD - Detailed version. 
      19             : //  Implements the full geometry, 
      20             : //  And does stepping
      21             : // 
      22             : #ifndef ALIFMD_H 
      23             : # include "AliFMD.h"
      24             : #endif
      25             : #ifndef ROOT_TLorentzVector
      26             : # include <TLorentzVector.h>
      27             : #endif
      28             :  
      29             : //____________________________________________________________________
      30             : /** @brief Forward Multiplicity Detector based on Silicon wafers. 
      31             : 
      32             :     This class contains the base procedures for the Forward
      33             :     Multiplicity detector Detector consists of 3 sub-detectors FMD1,
      34             :     FMD2, and FMD3, each of which has 1 or 2 rings of silicon sensors.
      35             :                                                            
      36             :     This class contains the detailed version of the FMD - that is,
      37             :     hits are produced during simulation. 
      38             :     @ingroup FMD_sim
      39             : */
      40             : class AliFMDv1 : public AliFMD 
      41             : {
      42             : public:
      43             :   /** CTOR */
      44             :   AliFMDv1()
      45          12 :     : AliFMD(),
      46          12 :       fCurrentDeltaE(0),
      47          12 :       fCurrentV(),
      48          12 :       fCurrentP(),
      49          72 :       fCurrentPdg(0) { fDetailed = kTRUE; }
      50             :   /** CTOR 
      51             :       @param name Name 
      52             :       @param title Title */
      53             :   AliFMDv1(const char *name, const char *title="Detailed geometry") 
      54           1 :     : AliFMD(name, title),
      55           1 :       fCurrentDeltaE(0),
      56           1 :       fCurrentV(),
      57           1 :       fCurrentP(),
      58           6 :       fCurrentPdg(0) { fDetailed = kTRUE; }
      59             :   /** DTOR */
      60          78 :   virtual ~AliFMDv1() {}
      61             : 
      62             :   // Required member functions 
      63             :   /** Get version number 
      64             :       @return always 1 */
      65           0 :   virtual Int_t  IsVersion() const {return 1;}
      66             :   /** Member function that is executed each time a hit is made in the 
      67             :       FMD.  None-charged particles are ignored.   Dead tracks  are
      68             :       ignored.  
      69             :       
      70             :       The procedure is as follows: 
      71             :       - IF NOT track is alive THEN RETURN ENDIF
      72             :       - IF NOT particle is charged THEN RETURN ENDIF
      73             :       - IF NOT volume name is "STRI" or "STRO" THEN RETURN ENDIF 
      74             :       - Get strip number (volume copy # minus 1)
      75             :       - Get phi division number (mother volume copy #)
      76             :       - Get module number (grand-mother volume copy #)
      77             :       - section # = 2 * module # + phi division # - 1
      78             :       - Get ring Id from volume name 
      79             :       - Get detector # from grand-grand-grand-mother volume name 
      80             :       - Get pointer to sub-detector object. 
      81             :       - Get track position 
      82             :       - IF track is entering volume AND track is inside real shape THEN
      83             :       -   Reset energy deposited 
      84             :       -   Get track momentum 
      85             :       -   Get particle ID # 
      86             :       - ENDIF
      87             :       - IF track is inside volume AND inside real shape THEN 
      88             :       -   Update energy deposited 
      89             :       - ENDIF 
      90             :       - IF track is inside real shape AND (track is leaving volume,
      91             :            or it died, or it is stopped  THEN
      92             :       -   Create a hit 
      93             :       - ENDIF 
      94             :   */
      95             :   virtual void   StepManager();
      96             : protected:
      97             :   /** Translate VMC coordinates to detector coordinates
      98             :       @param v        On output, Current position
      99             :       @param detector On output, detector #
     100             :       @param ring     On output, ring id
     101             :       @param sector   On output, sector #
     102             :       @param strip    On output, strip #
     103             :       @return @c true on success */
     104             :   Bool_t VMC2FMD(TLorentzVector& v, UShort_t& detector,
     105             :                  Char_t& ring, UShort_t& sector, UShort_t& strip) const;
     106             :   /** Translate VMC coordinates to detector coordinates
     107             :       @param copy     Volume copy number 
     108             :       @param v        On output, Current position
     109             :       @param detector On output, detector #
     110             :       @param ring     On output, ring id
     111             :       @param sector   On output, sector #
     112             :       @param strip    On output, strip #
     113             :       @return @c true on success */
     114             :   Bool_t VMC2FMD(Int_t copy, TLorentzVector& v,
     115             :                  UShort_t& detector, Char_t& ring,
     116             :                  UShort_t& sector, UShort_t& strip) const;
     117             :   /** Check if hit is bad.  A hit is bad if 
     118             :       @f[
     119             :       \Delta E > |Q|^2 p / m > 1 
     120             :       @f]
     121             :       holds, where @f$ \Delta E@f$ is the energy loss in this step, 
     122             :       @f$ Q@f$ is the particle charge, @f$ p@f$ is the track momentum,
     123             :       and @f$ m@f$ is the particle mass.   If a track is marked as
     124             :       bad, it's kept in a cache, and can be printed at the end of the
     125             :       event. 
     126             :       @param trackno Track number 
     127             :       @param pdg     PDG particle type ID
     128             :       @param absQ    Absolute value of particle charge
     129             :       @param p       Track momentum
     130             :       @param edep    Energy loss in this step.
     131             :       @return @c true if hit is `bad' */
     132             :   Bool_t CheckHit(Int_t trackno, Int_t pdg, Float_t absQ, 
     133             :                   const TLorentzVector& p, Float_t edep) const;
     134             : 
     135             :   Double_t       fCurrentDeltaE;    // The current accumulated energy loss
     136             :   TLorentzVector fCurrentV;         // Current production vertex 
     137             :   TLorentzVector fCurrentP;         // Current momentum vector 
     138             :   Int_t          fCurrentPdg;       // Current PDG code 
     139             :   
     140      423692 :   ClassDef(AliFMDv1,5)  // Detailed FMD geometry
     141             : };
     142             : 
     143             : #endif
     144             : //____________________________________________________________________
     145             : //
     146             : // Local Variables:
     147             : //   mode: C++
     148             : // End:
     149             : //
     150             : // EOF
     151             : //

Generated by: LCOV version 1.11