LCOV - code coverage report
Current view: top level - FMD/FMDsim - AliFMD.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 3 66.7 %
Date: 2016-06-14 17:26:59 Functions: 3 7 42.9 %

          Line data    Source code
       1             : #ifndef ALIFMD_H
       2             : #define ALIFMD_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    AliFMD.h
      11             :     @author  Christian Holm Christensen <cholm@nbi.dk>
      12             :     @date    Sun Mar 26 17:59:37 2006
      13             :     @brief   Declaration of AliFMD detector driver 
      14             : */
      15             : /** @mainpage ALICE FMD Off-line code 
      16             :     
      17             :     @b Contents 
      18             :     - @ref intro 
      19             :     - @ref structure 
      20             :       - @ref base     (see also @ref FMD_base)
      21             :       - @ref sim      (see also @ref FMD_sim)
      22             :       - @ref rec      (see also @ref FMD_rec)
      23             :       - @ref flow     (see also @ref FMD_flow)
      24             :       - @ref ana      (see also @ref FMD_ana)
      25             :       - @ref util     (see also @ref FMD_util)
      26             :     - @ref script     (see also @ref FMD_script)
      27             :     - @ref quick
      28             :     - @ref authors
      29             :     
      30             :     @section intro Introduction:
      31             : 
      32             :     This file contains a short overview of the FMD code.   It is by no 
      33             :     means authoritative  - only the code is good for that.  However,
      34             :     I'll try to explain things a bit here. 
      35             : 
      36             :     @section structure Structure:
      37             : 
      38             :     There are 4 libraries build for the FMD.  These are 
      39             : 
      40             :     - libFMDbase: This contains the basic stuff, like data classes and
      41             :       managers.
      42             :     - libFMDsim: This contains code used by the simulation only.  That
      43             :       includes the detector class AliFMD and it's derivatives.  It
      44             :       also contains the code for building the geometry, as well as the
      45             :       digitisers and raw data writer.
      46             :     - libFMDrec: Code needed for the reconstruction.  This include the
      47             :       reconstruction code itself, as well as a raw data reader.
      48             :     - libFMDutil: This is a special library that contains various
      49             :       utility classes for the FMD expert/developer/tester.  It
      50             :       includes code to read all data produced by the FMD, a simple
      51             :       event display, and code to make fake calibration and alignment
      52             :       data.  This library is @e not loaded by aliroot
      53             :       automatically. The user has to load it herself:
      54             :       @code 
      55             :       gSystem->Load("libFMDutil");
      56             :       @endcode
      57             :     The content of these libraries is detailed more below. 
      58             :     
      59             :     @subsection base libFMDbase:
      60             : 
      61             :     This currently (18th or March 2006) contains the classes 
      62             : 
      63             :     - AliFMDBaseDigit, AliFMDDigit, AliFMDSDigit: Base class for
      64             :       digits, real digits, and summable digits.  The are all data
      65             :       classes that holds the ADC value(s) for a single strip.
      66             :     - AliFMDBoolMap: A map of booleans, one for each strip.
      67             :     - AliFMDUShortMap: A map of unsigned short integers, one for each
      68             :       strip.
      69             :     - AliFMDDetector, AliFMD1, AliFMD2, AliFMD3: 3 classes that holds
      70             :       the parameters for each of the 3 FMD sub-detectors.  These
      71             :       derive from AliFMDDetector, and are managed by AliFMDGeometry.
      72             :       Each of these also contains the translation from sensor
      73             :       reference frame to global reference frame.
      74             :     - AliFMDRing: Parameters for the FMD rings (inner and outer type).
      75             :       These are managed by AliFMDGeometry.
      76             :     - AliFMDGeometry: Manager of FMD geometry data. All code queries
      77             :       this manager for geometry parameters, so that the data is always
      78             :       consistent.  
      79             :     - AliFMDParameters: Manager of FMD parameters, like calibration
      80             :       parameters.  This class fetches data from CDB if necessary.
      81             :       All code queries this manager for parameters, so that the data
      82             :       is always consistent. 
      83             :     - AliFMDCalibPedestal, AliFMDCalibGain, AliFMDCalibSampleRate,
      84             :       AliFMDAltroMapping: Containers of calibration parameters.  These
      85             :       correspond to the pedestal and its width, the gain of each
      86             :       strip, the oversampling rate used in read-out, and the map from
      87             :       hardware address to detector.
      88             :     - AliFMDAltroIO, AliFMDAltroReader, AliFMDAltroWriter: Low-level
      89             :       classes to do input/output on ALTRO formated buffers. 
      90             : 
      91             :   
      92             : 
      93             :     @subsection sim libFMDsim:
      94             : 
      95             :     This currently (18th or March 2006) contains the classes 
      96             : 
      97             :     - AliFMDEdepMap: Cache of energy deposited and total number of
      98             :       hits for each strip.  The digitiser AliFMDDigitizer uses this to
      99             :       store simulation data before making digits.
     100             :     - AliFMDHit: A hit in the FMD active elements, as described by the
     101             :       simulation back-end during transport.
     102             :     - AliFMD, AliFMDv0, AliFMDv1: Simulation drivers for the FMD.
     103             :       AliFMD is the base class. AliFMDv0 corresponds to a simulation
     104             :       where no hits are created, but the material distribution is
     105             :       right.  AliFMDv1 is like AliFMDv0, except that hits are
     106             :       produced.
     107             :     - AliFMDGeometryBuilder: Build the FMD geometry in terms of TGeo
     108             :       objects.  The information for building the geometry is retrieved
     109             :       from AliFMDGeometry.
     110             :     - AliFMDBaseDigitizer, AliFMDDigitizer, AliFMDSDigitizer: Base
     111             :       class for the digitisers.  AliFMDDigitizer makes `real' digits
     112             :       (AliFMDDigit) from hits, and AliFMDSDigitizer makes summable
     113             :       digits from hits.
     114             :     - AliFMDRawWriter: Writes a pseudo raw data file from the digits
     115             :       created by the digitisers.  It uses the AliFMDAltroMapping from
     116             :       AliFMDParameters to make the mapping from detector coordinates
     117             :       to hardware addresses.
     118             : 
     119             :     @subsection rec libFMDrec:
     120             : 
     121             :     This currently (18th or March 2006) contains the classes 
     122             : 
     123             :     - AliFMDReconstructor: Reconstruct (in a naiive way) the charged
     124             :       particle multiplicity in the FMD strips.  This also writes an
     125             :       AliESDFMD object to the ESD files (that class is in libESD).
     126             : 
     127             :     - AliFMDRecPoint: Reconstructed point in the FMD.  These objects
     128             :       are made AliFMDReconstructor. 
     129             : 
     130             :     - AliFMDRawReader: Classes to read raw data files. 
     131             : 
     132             :     @subsection flow libFMDflow:
     133             :     
     134             :     This library contains flow analysis code that works similar to 
     135             :     histograms. 
     136             : 
     137             :     @subsection ana libFMDanalysis:
     138             :     
     139             :     This library contains analysis code.
     140             : 
     141             : 
     142             :     @subsection util libFMDutil:
     143             : 
     144             :     This currently (18th or March 2006) contains the classes 
     145             : 
     146             :     - AliFMDInput, AliFMDInputHits, AliFMDInputDigits,
     147             :       AliFMDInputSDigits, AliFMDInputRecPoints: Base class, and
     148             :       concrete classes to read in FMD generated data.  These provide a
     149             :       simple and unified way of getting the data.  Hooks are defined
     150             :       to process hits, tracks, digits, and reconstructed points, as
     151             :       well as geometry and ESD data.   See for example the scripts
     152             :       @c DrawHits.C, @c DrawHitsDigits.C, @c DrawHitsRecs.C, @c
     153             :       DrawDigitsRecs.C in the @c FMD/scripts sub-directory.
     154             : 
     155             :     - AliFMDDisplay: Simple event display for FMD data, including
     156             :       hits, digits, reconstructed points and ESD data. 
     157             : 
     158             :     - AliFMDCalibFaker, AliFMDAlignFaker: Classes to write fake (or
     159             :       dummy) calibration and alignment  data. 
     160             : 
     161             : 
     162             :     @section script Scripts 
     163             :     
     164             :     Most scripts live in @c FMD/scripts.  The notiable exceptions are 
     165             :     @ref Simulate.C, @ref Reconstruct.C, and @ref Config.C 
     166             : 
     167             :     @section quick Quick start 
     168             : 
     169             :     First, install ROOT.  Then Install TGeant3: 
     170             :     @verbatim 
     171             :     > cd ~/
     172             :     > mkdir alice
     173             :     > cd alice
     174             :     > cvs -d :pserver:cvs@root.cern.ch:/user/cvs login 
     175             :     Password: cvs
     176             :     > cvs -d :pserver:cvs@root.cern.ch:/user/cvs co geant3
     177             :     > cd geant3
     178             :     > make 
     179             :     @endverbatim 
     180             : 
     181             :     Now you can install AliRoot 
     182             :     @verbatim 
     183             :     > cd ../
     184             :     > cvs -d :pserver:cvs@alisoft.cern.ch:/soft/cvsroot login
     185             :     Password: <empty>
     186             :     > cvs -d :pserver:cvs@alisoft.cern.ch:/soft/cvsroot co AliRoot
     187             :     > cd AliRoot
     188             :     > export ALICE_TARGET=`root-config --arch`
     189             :     > export ALICE=${HOME}/alice
     190             :     > export ALICE_ROOT=${ALICE}/AliRoot
     191             :     > export ALICE_LEVEL=new
     192             :     > export LD_LIBRARY_PATH=${ALICE_ROOT}/lib/tgt_${ALICE_TERGET}:${LD_LIBRARY_PATH}
     193             :     > export PATH=${ALICE_ROOT}/bin/tgt_${ALICE_TERGET}:${PATH}
     194             :     > export G3SYS=${ALICE}/geant3
     195             :     > make 
     196             :     @endverbatim 
     197             :     
     198             :     To simulate one event, do something like 
     199             : 
     200             :     @verbatim 
     201             :     > aliroot ${ALICE_ROOT}/FMD/Simulate.C
     202             :     @endverbatim 
     203             : 
     204             :     To reconstruct the generated event, do 
     205             :     @verbatim 
     206             :     > aliroot ${ALICE_ROOT}/FMD/Reconstruct.C
     207             :     @endverbatim 
     208             : 
     209             :     Now, open the file `AliESDs.root' in AliRoot, and browse through  that. 
     210             : 
     211             :     @section authors Authors:
     212             : 
     213             :     - Alla Maevskaya            <Alla.Maevskaia@cern.ch>  
     214             :     - Christian Holm Christensen        <cholm@nbi.dk>
     215             : */
     216             : /** @defgroup FMD_sim Simulation */
     217             : 
     218             : //____________________________________________________________________
     219             : //
     220             : //  Manager class for the FMD - Base class.
     221             : //  AliFMDv1, AliFMDv0, and AliFMDAlla 
     222             : //  provides concrete implementations. 
     223             : //  This class is sooooo crowded
     224             : //
     225             : #ifndef ALIDETECTOR_H  
     226             : # include <AliDetector.h>
     227             : #endif
     228             : #ifndef ROOT_TArrayI
     229             : # include <TArrayI.h>
     230             : #endif
     231             : class TBranch;
     232             : class TClonesArray;
     233             : class TBrowser;
     234             : class TMarker3DBox;
     235             : class TArrayI;
     236             : class AliDigitizer;
     237             : class AliFMDHit;
     238             : 
     239             : //____________________________________________________________________
     240             : /** @class AliFMD AliFMD.h <FMD/AliFMD.h>
     241             :     @brief Forward Multiplicity Detector based on Silicon wafers. 
     242             :     This class is the driver for especially simulation. 
     243             : 
     244             :     The Forward Multiplicity Detector consists of 3 sub-detectors FMD1,
     245             :     FMD2, and FMD3, each of which has 1 or 2 rings of silicon sensors. 
     246             :                                                           
     247             :     This is the base class for all FMD manager classes. 
     248             :                        
     249             :     The actual code is done by various separate classes.   Below is
     250             :     diagram showing the relationship between the various FMD classes
     251             :     that handles the simulation
     252             : 
     253             :     @verbatim
     254             :           +----------+   +----------+   
     255             :           | AliFMDv1 |   | AliFMDv0 |   
     256             :           +----------+   +----------+   
     257             :                |              |                    +-----------------+
     258             :           +----+--------------+                 +--| AliFMDDigitizer |
     259             :           |                                     |  +-----------------+
     260             :           |           +---------------------+   |
     261             :           |        +--| AliFMDBaseDigitizer |<--+
     262             :           V     1  |  +---------------------+   |
     263             :      +--------+<>--+                            |  +------------------+
     264             :      | AliFMD |                                 +--| AliFMDSDigitizer |    
     265             :      +--------+<>--+                               +------------------+       
     266             :                1  |  +---------------------+
     267             :                   +--| AliFMDReconstructor |
     268             :                      +---------------------+
     269             :     @endverbatim
     270             :                      
     271             :     -  AliFMD 
     272             :        This defines the interface for the various parts of AliROOT that
     273             :        uses the FMD, like AliFMDSimulator, AliFMDDigitizer, 
     274             :        AliFMDReconstructor, and so on. 
     275             :     -  AliFMDv0
     276             :        This is a concrete implementation of the AliFMD interface. 
     277             :        It is the responsibility of this class to create the FMD
     278             :        geometry.
     279             :     -  AliFMDv1 
     280             :        This is a concrete implementation of the AliFMD interface. 
     281             :        It is the responsibility of this class to create the FMD
     282             :        geometry, process hits in the FMD, and serve hits and digits to
     283             :        the various clients. 
     284             :     -  AliFMDSimulator
     285             :        This is the base class for the FMD simulation tasks.   The
     286             :        simulator tasks are responsible to implment the geoemtry, and
     287             :        process hits. 
     288             :     -  AliFMDReconstructor
     289             :        This is a concrete implementation of the AliReconstructor that
     290             :        reconstructs pseudo-inclusive-multiplicities from digits (raw or
     291             :        from simulation)
     292             : 
     293             :     Calibration and geometry parameters are managed by separate
     294             :     singleton managers.  These are AliFMDGeometry and
     295             :     AliFMDParameters.  Please refer to these classes for more
     296             :     information on these.    
     297             :  */
     298             : class AliFMD : public AliDetector 
     299             : {
     300             : public:
     301             :   /** Default constructor.  Do not use. */
     302             :   AliFMD();
     303             :   /** Normal constructor 
     304             :       @param name  Name of object.
     305             :       @param title Title of object. */
     306             :   AliFMD(const char *name, const char *title);
     307             :   /** Destructor */
     308             :   virtual ~AliFMD(); 
     309             :   /** Wheter to make a detailed geometry
     310             :       @param use If true, make detailed geometry  */
     311           0 :   void UseDetailed(Bool_t use=kTRUE) { fDetailed = use; }
     312             :   
     313             :   /** @{*/
     314             :   /** @name GEometry ANd Tracking (GEANT :-) */
     315             :   /** Define the geometry.  This is done by asking the manager
     316             :       AliFMDGeometry to construct the geometry.  This in turn calls
     317             :       AliFMDGeometryBuilder.   */
     318             :   virtual void   CreateGeometry();
     319             :   /** Create entries for alignable volumes associating the symbolic volume
     320             :       name with the corresponding volume path. Needs to be syncronized with
     321             :       eventual changes in the geometry.   */
     322             :   virtual void  AddAlignableVolumes() const;
     323             :   /** Create the tracking mediums used by the FMD.  This associates
     324             :       the tracking mediums defined with the FMD in the
     325             :       TVirtualMCApplication (AliMC). 
     326             :       
     327             :       The defined mediums are 
     328             :       - @c FMD @c Si$   Silicon (active medium in sensors)
     329             :       - @c FMD @c C$    Carbon fibre (support cone for FMD3 and vacuum pipe)
     330             :       - @c FMD @c Al$   Aluminium (honeycomb support plates)
     331             :       - @c FMD @c PCB$  Printed Circuit Board (FEE board with VA1_3)
     332             :       - @c FMD @c Chip$ Electronics chips (currently not used)
     333             :       - @c FMD @c Air$  Air (Air in the FMD)
     334             :       - @c FMD @c Plastic$ Plastic (Support legs for the hybrid cards)
     335             :   */
     336             :   virtual void   CreateMaterials(); 
     337             : #if 0
     338             :   /** 
     339             :    * Declare tracking parameters for a medium 
     340             :    * 
     341             :    * Cut offs are in GeV. 
     342             :    * @param imed                     Medium identifier
     343             :    * @param gamma                    Cut off for tracking photons
     344             :    * @param electron                 Cut off for tracking electrons
     345             :    * @param neutral_hadron           Cut off for tracking neutral hadrons
     346             :    * @param charged_hadron           Cut off for tracking charged hadrons
     347             :    * @param muon                     Cut off for tracking muons
     348             :    * @param electron_bremstrahlung   Cut off for tracking electron brehmstralung
     349             :    * @param muon__bremstrahlung      Cut off for tracking muon brehmstralung
     350             :    * @param electron_delta           Cut off for tracking delta electrons
     351             :    * @param muon_delta               Cut off for tracking delta muons
     352             :    * @param muon_pair                Cut off for muon->ee pair production
     353             :    * @param annihilation             Enable annihilation
     354             :    * @param bremstrahlung            Enable brehmstralung
     355             :    * @param compton_scattering       Enable Compton scattering
     356             :    * @param decay                    Enable decays
     357             :    * @param delta_ray                Enable delta rays
     358             :    * @param hadronic                 Enable hadronic interactions
     359             :    * @param energy_loss              Enable energy loss
     360             :    * @param multiple_scattering      Enable multiple scattering
     361             :    * @param pair_production          Enable pair production
     362             :    * @param photon_production        Enable cherenkov photon production
     363             :    * @param rayleigh_scattering      Enable rayleigh scattering
     364             :    */ 
     365             :   void SetTrackingParameters(Int_t imed, 
     366             :                              Float_t gamma,                 
     367             :                              Float_t electron, 
     368             :                              Float_t neutral_hadron, 
     369             :                              Float_t charged_hadron, 
     370             :                              Float_t muon,
     371             :                              Float_t electron_bremstrahlung, 
     372             :                              Float_t muon__bremstrahlung, 
     373             :                              Float_t electron_delta,
     374             :                              Float_t muon_delta,
     375             :                              Float_t muon_pair,
     376             :                              Int_t   annihilation, 
     377             :                              Int_t   bremstrahlung, 
     378             :                              Int_t   compton_scattering, 
     379             :                              Int_t   decay,
     380             :                              Int_t   delta_ray, 
     381             :                              Int_t   hadronic, 
     382             :                              Int_t   energy_loss, 
     383             :                              Int_t   multiple_scattering, 
     384             :                              Int_t   pair_production, 
     385             :                              Int_t   photon_production, 
     386             :                              Int_t   rayleigh_scattering);
     387             : #endif
     388             :   /** Initialize this detector */
     389             :   virtual void   Init();
     390             :   /** This member function is called when ever a track deposites
     391             :       energy (or similar) in an FMD tracking medium.  In this base
     392             :       class this member function is pure abstract.   In concrete
     393             :       sub-classes, the member function may make hits or other
     394             :       stuff. */ 
     395             :   virtual void   StepManager() = 0;
     396             :   /** Called at the end of each simulation event.  If the debug level
     397             :       is high enough a list of @e bad hits is printed. */
     398             :   virtual void   FinishEvent();
     399             :   /** @}*/
     400             :   
     401             :   /** @{ */
     402             :   /** @name Hit and digit management */
     403             :   /* Create Tree branches for the FMD.
     404             :      @param opt  One of 
     405             :      - @c H Make a branch of TClonesArray of AliFMDHit's
     406             :      - @c D Make a branch of TClonesArray of AliFMDDigit's
     407             :      - @c S Make a branch of TClonesArray of AliFMDSDigit's */
     408             :   virtual void          MakeBranch(Option_t *opt=" ");
     409             :   /** Set the TClonesArray to read hits into.
     410             :       @param b The branch to containn the hits */
     411             :   virtual void          SetHitsAddressBranch(TBranch *b);
     412             :   /** Set the TClonesArray to read sdigits into.
     413             :       @param b The branch to containn the sdigits */
     414             :   virtual void          SetSDigitsAddressBranch(TBranch *b);
     415             :   /** Set branch address for the Hits, Digits, and SDigits Tree. */
     416             :   virtual void          SetTreeAddress();
     417             :   /** Get the array of summable digits
     418             :       @return summable digits */
     419           8 :   virtual TClonesArray* SDigits() { return fSDigits; }        
     420             :   /** Reset the array of summable digits */
     421             :   virtual void          ResetSDigits();
     422             :   /** Add a hit to the hits tree 
     423             :       @param  track  Track #
     424             :       @param  vol Volume parameters, interpreted as 
     425             :       - ivol[0]  [UShort_t ] Detector # 
     426             :       - ivol[1]  [Char_t   ] Ring ID 
     427             :       - ivol[2]  [UShort_t ] Sector #
     428             :       - ivol[3]  [UShort_t ] Strip # 
     429             :       @param hits Hit information 
     430             :       - hits[0]  [Float_t  ] Track's X-coordinate at hit 
     431             :       - hits[1]  [Float_t  ] Track's Y-coordinate at hit
     432             :       - hits[3]  [Float_t  ] Track's Z-coordinate at hit
     433             :       - hits[4]  [Float_t  ] X-component of track's momentum             
     434             :       - hits[5]  [Float_t  ] Y-component of track's momentum             
     435             :       - hits[6]  [Float_t  ] Z-component of track's momentum            
     436             :       - hits[7]  [Float_t  ] Energy deposited by track                  
     437             :       - hits[8]  [Int_t    ] Track's particle Id # 
     438             :       - hits[9]  [Float_t  ] Time when the track hit */
     439             :   virtual void          AddHit(Int_t track, Int_t *vol, Float_t *hits);
     440             :   /** Add a hit to the list
     441             :       @param track     Track #
     442             :       @param detector  Detector # (1, 2, or 3)                      
     443             :       @param ring      Ring ID ('I' or 'O')
     444             :       @param sector    Sector # (For inner/outer rings: 0-19/0-39)
     445             :       @param strip     Strip # (For inner/outer rings: 0-511/0-255)
     446             :       @param x         Track's X-coordinate at hit
     447             :       @param y         Track's Y-coordinate at hit
     448             :       @param z         Track's Z-coordinate at hit
     449             :       @param px        X-component of track's momentum 
     450             :       @param py        Y-component of track's momentum
     451             :       @param pz        Z-component of track's momentum
     452             :       @param edep      Energy deposited by track
     453             :       @param pdg       Track's particle Id #
     454             :       @param t         Time when the track hit 
     455             :       @param len       Track length through the material. 
     456             :       @param stopped   Whether track was stopped or disappeared */
     457             :   virtual AliFMDHit*    AddHitByFields(Int_t    track, 
     458             :                                        UShort_t detector, 
     459             :                                        Char_t   ring, 
     460             :                                        UShort_t sector, 
     461             :                                        UShort_t strip, 
     462             :                                        Float_t  x=0,
     463             :                                        Float_t  y=0, 
     464             :                                        Float_t  z=0,
     465             :                                        Float_t  px=0, 
     466             :                                        Float_t  py=0, 
     467             :                                        Float_t  pz=0,
     468             :                                        Float_t  edep=0,
     469             :                                        Int_t    pdg=0,
     470             :                                        Float_t  t=0, 
     471             :                                        Float_t  len=0, 
     472             :                                        Bool_t   stopped=kFALSE);
     473             :   /** Add a digit to the Digit tree 
     474             :       @param digits
     475             :       - digits[0]  [UShort_t] Detector #
     476             :       - digits[1]  [Char_t]   Ring ID
     477             :       - digits[2]  [UShort_t] Sector #
     478             :       - digits[3]  [UShort_t] Strip #
     479             :       - digits[4]  [UShort_t] ADC Count 
     480             :       - digits[5]  [Short_t]  ADC Count, -1 if not used
     481             :       - digits[6]  [Short_t]  ADC Count, -1 if not used 
     482             :       @param notused Not used */
     483             :   virtual        void   AddDigit(Int_t *digits, Int_t* notused=0);
     484             :   /** add a real digit
     485             :       @param detector  Detector # (1, 2, or 3)                      
     486             :       @param ring         Ring ID ('I' or 'O')
     487             :       @param sector       Sector # (For inner/outer rings: 0-19/0-39)
     488             :       @param strip        Strip # (For inner/outer rings: 0-511/0-255)
     489             :       @param count1    ADC count (a 10-bit word)
     490             :       @param count2    ADC count (a 10-bit word), or -1 if not used
     491             :       @param count3    ADC count (a 10-bit word), or -1 if not used */
     492             :   virtual        void   AddDigitByFields(UShort_t       detector=0, 
     493             :                                          Char_t         ring='\0', 
     494             :                                          UShort_t       sector=0, 
     495             :                                          UShort_t       strip=0, 
     496             :                                          UShort_t       count1=0, 
     497             :                                          Short_t        count2=-1, 
     498             :                                          Short_t        count3=-1, 
     499             :                                          Short_t        count4=-1, 
     500             :                                          UShort_t       nrefs=0,
     501             :                                          Int_t*         refs=0);
     502             :   /** Add a digit to the Digit tree 
     503             :       @param digits
     504             :       - digits[0]  [UShort_t] Detector #
     505             :       - digits[1]  [Char_t]   Ring ID
     506             :       - digits[2]  [UShort_t] Sector #
     507             :       - digits[3]  [UShort_t] Strip #
     508             :       - digits[4]  [Float_t]  Edep
     509             :       - digits[5]  [UShort_t] ADC Count 
     510             :       - digits[6]  [Short_t]  ADC Count, -1 if not used
     511             :       - digits[7]  [Short_t]  ADC Count, -1 if not used  
     512             :       - digits[8]  [Short_t]  ADC Count, -1 if not used
     513             :       - digits[9]  [UShort_t] N total particles
     514             :       - digits[10] [UShort_t] N total primary particles
     515             :   */
     516             :   virtual        void   AddSDigit(Int_t *digits);
     517             :   /** add a summable digit - as coming from data
     518             :       @param detector  Detector # (1, 2, or 3)                      
     519             :       @param ring      Ring ID ('I' or 'O')
     520             :       @param sector    Sector # (For inner/outer rings: 0-19/0-39)
     521             :       @param strip     Strip # (For inner/outer rings: 0-511/0-255)
     522             :       @param edep      Energy deposited   
     523             :       @param count1    ADC count (a 10-bit word)
     524             :       @param count2    ADC count (a 10-bit word), or -1 if not used 
     525             :       @param count3    ADC count (a 10-bit word), or -1 if not used */
     526             :   virtual        void   AddSDigitByFields(UShort_t       detector=0, 
     527             :                                           Char_t         ring='\0', 
     528             :                                           UShort_t       sector=0, 
     529             :                                           UShort_t       strip=0, 
     530             :                                           Float_t        edep=0,
     531             :                                           UShort_t       count1=0, 
     532             :                                           Short_t        count2=-1, 
     533             :                                           Short_t        count3=-1,
     534             :                                           Short_t        count4=-1, 
     535             :                                           UShort_t       ntot=0, 
     536             :                                           UShort_t       nprim=0,
     537             :                                           Int_t*         refs=0);
     538             :   /** @}*/
     539             : 
     540             :   /** @{ */
     541             :   /** @name Digitisation */
     542             :   /** Create a digitizer object
     543             :       @param manager Digitization manager
     544             :       @return a newly allocated AliFMDDigitizer */
     545             :   virtual AliDigitizer* CreateDigitizer(AliDigitizationInput* digInput) const;
     546             :   /** Create AliFMDDigit's from AliFMDHit's.  This is done by creating
     547             :       an AliFMDDigitizer object, and executing it.  */
     548             :   virtual        void   Hits2Digits();
     549             :   /** Create AliFMDSDigit's from AliFMDHit's.  This is done by creating
     550             :       an AliFMDSDigitizer object, and executing it.  */
     551             :   virtual        void   Hits2SDigits();
     552             :   /** @}*/
     553             : 
     554             :   /** @{ */
     555             :   /** @name Raw data */
     556             :   /** 
     557             :    * Turn digits into raw data. This uses the class AliFMDRawWriter to
     558             :    * do the job.  Please refer to that class for more information.
     559             :    */
     560             :   virtual void   Digits2Raw();
     561             :   /** 
     562             :    * Convert raw data to sdigits
     563             :    * 
     564             :    * @param reader Raw reader
     565             :    * 
     566             :    * @return @c true on success
     567             :    */
     568             :   virtual Bool_t Raw2SDigits(AliRawReader* reader);
     569             :   /** @}*/
     570             : 
     571             :   /** @{ */
     572             :   /** 
     573             :    * @name Utility 
     574             :    */
     575             :   /** 
     576             :    * Browse this object 
     577             :    *
     578             :    * @param b Browser to show this object in 
     579             :    */
     580             :   void   Browse(TBrowser* b);
     581             :   /** @}*/
     582             : protected:
     583             :   /** Initialize hit array if not already done, and return pointert. 
     584             :       @return Hit array */
     585             :   TClonesArray*      HitsArray();
     586             :   /** Initialize digit array if not already done, and return pointert. 
     587             :       @return Digit array */
     588             :   TClonesArray*      DigitsArray();
     589             :   /** Initialize summable digit array if not already done, and return
     590             :       pointert.  
     591             :       @return Summable digit array */
     592             :   TClonesArray*      SDigitsArray();
     593             : 
     594             :   TClonesArray*      fSDigits;              // Summable digits
     595             :   Int_t              fNsdigits;             // Number of digits  
     596             :   Bool_t             fDetailed;             // Use detailed geometry
     597             :   Bool_t             fUseOld;               // Use old approx geometry
     598             :   Bool_t             fUseAssembly;          // Use divided volumes
     599             :   
     600             :   enum {
     601             :     kSiId,                 // ID index of Si medium
     602             :     kAirId,                // ID index of Air medium
     603             :     kPlasticId,            // ID index of Plastic medium
     604             :     kPcbId,                // ID index of PCB medium
     605             :     kSiChipId,             // ID index of Si Chip medium
     606             :     kAlId,                 // ID index of Al medium
     607             :     kCarbonId,             // ID index of Carbon medium
     608             :     kCopperId,             // ID index of Copper Medium
     609             :     kKaptonId,             // ID index of Kapton Medium
     610             :     kSteelId               // ID index of Steel medium
     611             :   };  
     612             : 
     613             :   TObjArray*         fBad;                  //! debugging - bad hits 
     614             : 
     615             : private:  
     616             :   /** Copy constructor 
     617             :       @param other Object to copy from */
     618             :   AliFMD(const AliFMD& other);
     619             :   /** Assignment operator 
     620             :       @param other Object to assign from
     621             :       @return Reference to this object  */
     622             :   AliFMD& operator=(const AliFMD& other);
     623             : 
     624          46 :   ClassDef(AliFMD,11)     // Base class FMD entry point
     625             : };
     626             : 
     627             : #endif
     628             : //____________________________________________________________________
     629             : //
     630             : // Local Variables:
     631             : //   mode: C++
     632             : // End:
     633             : //
     634             : // EOF
     635             : //

Generated by: LCOV version 1.11