ROOT logo
#ifndef ALIMUONDIGIT_H
#define ALIMUONDIGIT_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */
// Revision of includes 07/05/2004

/// \ingroup base
/// \class AliMUONDigit
/// \brief MUON digit

#ifndef ALIMUONVDIGIT_H
#  include "AliMUONVDigit.h"
#endif

class AliMUONDigit : public AliMUONVDigit 
{
 public:
  AliMUONDigit();
  AliMUONDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel, Int_t cathode);
  
    AliMUONDigit(const AliMUONDigit& rhs);
    virtual ~AliMUONDigit();

    AliMUONDigit& operator=(const AliMUONDigit& rhs);
    
    /// Own clone methods (as the default TObject::Clone turned out to be pretty slow !)
    virtual TObject* Clone(const char* /*newname*/ = "") const { return new AliMUONDigit(*this); }
    
    virtual Bool_t HasMCInformation() const { return kTRUE; }
    
    virtual Int_t DetElemId()const     {return fDetElemId;}  ///< Return detection element ID  
    virtual Int_t PadX() const         {return fPadX;}       ///< Return pad number along x
    virtual Int_t PadY() const         {return fPadY;}       ///< Return pad number along y
    virtual Int_t Cathode() const      {return fCathode;}    ///< Return cathode number
    
    virtual Float_t Charge() const     {return fSignal;}     ///< Return signal amplitude
    
    virtual Int_t Hit() const          {return fHit;}        ///< Return MC hit number
    
    virtual Float_t Time() const       {return fTime;}       /// Return MC hit age

    virtual Int_t Ntracks() const { return fNtracks; }       ///< Return MC tracks making to this digit
    virtual void AddTrack(Int_t trackNumber, Float_t trackCharge);
    virtual Int_t Track(Int_t i) const;
    virtual Float_t TrackCharge(Int_t i) const;
    
    virtual Int_t ADC() const { return fADC; }                 ///< Return ADC value
    virtual Int_t ManuId() const { return fManuId; }           ///< Return Id of the MANU chip
    virtual Int_t ManuChannel() const { return fManuChannel; } ///< Return Channel within the MANU chip
    virtual Bool_t IsSaturated() const;
    virtual Bool_t IsNoiseOnly() const;
    virtual Bool_t IsEfficiencyApplied() const;
    virtual Bool_t IsConverted() const;
    virtual Bool_t IsChargeInFC() const;
    virtual UInt_t StatusMap() const { return fStatusMap; }    ///< Return Neighbouring pad status
    
    virtual void NoiseOnly(Bool_t value=kTRUE);
    virtual void Saturated(Bool_t saturated=kTRUE);
    virtual void EfficiencyApplied(Bool_t value=kTRUE);
    virtual void Converted(Bool_t value=kTRUE);
    virtual void ChargeInFC(Bool_t value=kTRUE);
  
    virtual void SetADC(Int_t adc)         {fADC=adc; }        ///< Set ADC value
    virtual void SetPadXY(Int_t padx, Int_t pady)        {fPadX = padx; fPadY=pady; }      ///< Set pad number along x
    virtual void SetCharge(Float_t q)        {fSignal = q;}    ///< Set charge
    virtual void SetHit(Int_t n)           {fHit = n;}         ///< Set MC hit number
    virtual void SetTime(Float_t t) {fTime = t;}               ///< Set MC hit age
    virtual void SetStatusMap(UInt_t statusMap) { fStatusMap = statusMap; } ///< Set status map
    
    virtual void Copy(TObject& digit) const;
    
    /** Delete the internal track arrays (which are dynamically allocated).
      * This is to insure we can put those digits in e.g. TClonesArray
      * w/o leaking memory.
      */
    virtual void Clear(Option_t*);
    
    // Add mask to the track numbers.
    virtual void PatchTracks(Int_t mask);
    
    virtual Bool_t MergeWith(const AliMUONVDigit& other);

    virtual Bool_t IsUsed() const;
    virtual void Used(Bool_t value);
    
    virtual Bool_t IsCalibrated() const;
    virtual void Calibrated(Bool_t value);
    
    virtual UInt_t GetUniqueID() const;
    
private:
    Int_t fDetElemId;     ///< Detection element ID
    Int_t fManuId;        ///< Id of the MANU chip.
    Int_t fManuChannel;   ///< Channel within the MANU chip.
    Float_t fSignal;        ///< Signal amplitude    
      
    Int_t fPadX;          ///< Pad number along x
    Int_t fPadY;          ///< Pad number along y
    Int_t fCathode;       ///< Cathode number
    Int_t fADC;           ///< ADC value
    UInt_t fFlags;        ///< Special flags (e.g. is the signal an overflow ?)
    
    Int_t fNtracks;       ///< MC tracks making to this digit.
    
    /// charges of MC track making this digit
    Float_t* fTcharges;     //[fNtracks]  charges of MC track making this digit

    /// primary MC tracks making this digit
    Int_t* fTracks;       //[fNtracks]  primary MC tracks making this digit

    Int_t fHit;           ///< MC hit number - temporary solution
    Float_t fTime;        ///< MC hit age
  
    UInt_t fStatusMap; ///< Neighbouring pad status (whether ped, gains, hv were ok or not)
    
    static const UInt_t fgkSaturatedMask = 0x1; ///< the mask (part of fFlags) to indicate this digit is saturated
    static const UInt_t fgkUsedMask = 0x10; ///< whether this digit is used by whatever other object (typically a cluster, though)
    static const UInt_t fgkCalibratedMask = 0x100; ///< whether this digits has been calibrated
    static const UInt_t fgkNoiseOnlyMask = 0x1000; ///< indicate a simulated digit due to noise only
    static const UInt_t fgkEfficiencyMask = 0x2000; ///< indicate chamber efficiency has been applied to a simulated digit
    static const UInt_t fgkConverted       = 0x4000; ///< has been converted from a real digit
    static const UInt_t fgkChargeInFC      = 0x8000; ///< charge unit are femto coulomb
  
    ClassDef(AliMUONDigit,12)  //Digits for MUON
};

#endif
 AliMUONDigit.h:1
 AliMUONDigit.h:2
 AliMUONDigit.h:3
 AliMUONDigit.h:4
 AliMUONDigit.h:5
 AliMUONDigit.h:6
 AliMUONDigit.h:7
 AliMUONDigit.h:8
 AliMUONDigit.h:9
 AliMUONDigit.h:10
 AliMUONDigit.h:11
 AliMUONDigit.h:12
 AliMUONDigit.h:13
 AliMUONDigit.h:14
 AliMUONDigit.h:15
 AliMUONDigit.h:16
 AliMUONDigit.h:17
 AliMUONDigit.h:18
 AliMUONDigit.h:19
 AliMUONDigit.h:20
 AliMUONDigit.h:21
 AliMUONDigit.h:22
 AliMUONDigit.h:23
 AliMUONDigit.h:24
 AliMUONDigit.h:25
 AliMUONDigit.h:26
 AliMUONDigit.h:27
 AliMUONDigit.h:28
 AliMUONDigit.h:29
 AliMUONDigit.h:30
 AliMUONDigit.h:31
 AliMUONDigit.h:32
 AliMUONDigit.h:33
 AliMUONDigit.h:34
 AliMUONDigit.h:35
 AliMUONDigit.h:36
 AliMUONDigit.h:37
 AliMUONDigit.h:38
 AliMUONDigit.h:39
 AliMUONDigit.h:40
 AliMUONDigit.h:41
 AliMUONDigit.h:42
 AliMUONDigit.h:43
 AliMUONDigit.h:44
 AliMUONDigit.h:45
 AliMUONDigit.h:46
 AliMUONDigit.h:47
 AliMUONDigit.h:48
 AliMUONDigit.h:49
 AliMUONDigit.h:50
 AliMUONDigit.h:51
 AliMUONDigit.h:52
 AliMUONDigit.h:53
 AliMUONDigit.h:54
 AliMUONDigit.h:55
 AliMUONDigit.h:56
 AliMUONDigit.h:57
 AliMUONDigit.h:58
 AliMUONDigit.h:59
 AliMUONDigit.h:60
 AliMUONDigit.h:61
 AliMUONDigit.h:62
 AliMUONDigit.h:63
 AliMUONDigit.h:64
 AliMUONDigit.h:65
 AliMUONDigit.h:66
 AliMUONDigit.h:67
 AliMUONDigit.h:68
 AliMUONDigit.h:69
 AliMUONDigit.h:70
 AliMUONDigit.h:71
 AliMUONDigit.h:72
 AliMUONDigit.h:73
 AliMUONDigit.h:74
 AliMUONDigit.h:75
 AliMUONDigit.h:76
 AliMUONDigit.h:77
 AliMUONDigit.h:78
 AliMUONDigit.h:79
 AliMUONDigit.h:80
 AliMUONDigit.h:81
 AliMUONDigit.h:82
 AliMUONDigit.h:83
 AliMUONDigit.h:84
 AliMUONDigit.h:85
 AliMUONDigit.h:86
 AliMUONDigit.h:87
 AliMUONDigit.h:88
 AliMUONDigit.h:89
 AliMUONDigit.h:90
 AliMUONDigit.h:91
 AliMUONDigit.h:92
 AliMUONDigit.h:93
 AliMUONDigit.h:94
 AliMUONDigit.h:95
 AliMUONDigit.h:96
 AliMUONDigit.h:97
 AliMUONDigit.h:98
 AliMUONDigit.h:99
 AliMUONDigit.h:100
 AliMUONDigit.h:101
 AliMUONDigit.h:102
 AliMUONDigit.h:103
 AliMUONDigit.h:104
 AliMUONDigit.h:105
 AliMUONDigit.h:106
 AliMUONDigit.h:107
 AliMUONDigit.h:108
 AliMUONDigit.h:109
 AliMUONDigit.h:110
 AliMUONDigit.h:111
 AliMUONDigit.h:112
 AliMUONDigit.h:113
 AliMUONDigit.h:114
 AliMUONDigit.h:115
 AliMUONDigit.h:116
 AliMUONDigit.h:117
 AliMUONDigit.h:118
 AliMUONDigit.h:119
 AliMUONDigit.h:120
 AliMUONDigit.h:121
 AliMUONDigit.h:122
 AliMUONDigit.h:123
 AliMUONDigit.h:124
 AliMUONDigit.h:125
 AliMUONDigit.h:126
 AliMUONDigit.h:127
 AliMUONDigit.h:128
 AliMUONDigit.h:129