LCOV - code coverage report
Current view: top level - MUON/MUONrec - AliMUONCluster.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 8 13 61.5 %
Date: 2016-06-14 17:26:59 Functions: 8 17 47.1 %

          Line data    Source code
       1             : #ifndef ALIMUONCLUSTER_H
       2             : #define ALIMUONCLUSTER_H
       3             : 
       4             : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       5             : * See cxx source for full Copyright notice                               */
       6             : 
       7             : // $Id$
       8             : 
       9             : /// \ingroup rec
      10             : /// \class AliMUONCluster
      11             : /// \brief A group of adjacent pads
      12             : /// 
      13             : // Author Laurent Aphecetche
      14             : 
      15             : #ifndef ROOT_TObject
      16             : #  include "TObject.h"
      17             : #endif
      18             : #ifndef ROOT_TVector2
      19             : #  include "TVector2.h"
      20             : #endif
      21             : #ifndef ROOT_TString
      22             : #  include "TString.h"
      23             : #endif
      24             : #ifndef ALI_MP_AREA_H
      25             : #  include "AliMpArea.h"
      26             : #endif
      27             : #ifndef ALI_MP_DIRECTION_H
      28             : #  include "AliMpDirection.h"
      29             : #endif
      30             : #ifndef ALI_MP_ENCODE_PAIR_H
      31             : #  include "AliMpEncodePair.h"
      32             : #endif
      33             : 
      34             : #ifndef ROOT_TObjArray
      35             : #  include "TObjArray.h"
      36             : #endif
      37             : 
      38             : class AliMUONPad;
      39             : 
      40             : class AliMUONCluster : public TObject
      41             : {
      42             : public:
      43             :   AliMUONCluster();
      44             :   AliMUONCluster(const AliMUONCluster& rhs);
      45             :   AliMUONCluster& operator=(const AliMUONCluster& rhs);
      46             :   
      47             :   virtual ~AliMUONCluster();
      48             :   
      49             :   Bool_t Contains(const AliMUONPad& pad) const;
      50             :   
      51             :   TString AsString() const;
      52             :   
      53             :   static Bool_t AreOverlapping(const AliMUONCluster& c1, const AliMUONCluster& c2);
      54             :   
      55             :   AliMUONPad* AddPad(const AliMUONPad& pad);
      56             : 
      57             :   /// Area that contains all the pads (whatever the cathode)
      58             :   AliMpArea Area() const;
      59             : 
      60             :   /// Area that contains all the pads of a given cathode
      61             :   AliMpArea Area(Int_t cathode) const;
      62             : 
      63             :   Float_t Charge() const;
      64             :   Float_t Charge(Int_t cathode) const;
      65             : 
      66             :   /// Return the cathode's charges asymmetry
      67             :   Float_t ChargeAsymmetry() const;
      68             : 
      69             :   /// Return chi2 of the RawCharge fit (if any)
      70         328 :   Float_t Chi2() const { return fChi2; }
      71             : 
      72             :   virtual void Copy(TObject& obj) const;
      73             : 
      74             :   /// Return false for pre-cluster
      75           0 :   Bool_t HasPosition() const { return fHasPosition; }
      76             : 
      77             :   /// Whether we have at least one saturated pad in a given cathode 
      78         328 :   Bool_t IsSaturated(Int_t cathode) const { return fIsSaturated[cathode]; }
      79             :   
      80             :   /// Whether we have one saturated pad on *each* cathode
      81         492 :   Bool_t IsSaturated() const { return IsSaturated(0) && IsSaturated(1); }
      82             :   
      83             :   /// Return the max charge on the chathod
      84           0 :   Int_t MaxChargeCathode() const { return Charge(0) > Charge(1) ? 0:1; }
      85             : 
      86             :   /// Return the max raw charge on the chathod
      87           0 :   Int_t MaxRawChargeCathode() const { return RawCharge(0) > RawCharge(1) ? 0:1; }
      88             : 
      89             :   /// Return the biggest pad dimensions for a given cathode
      90             :   TVector2 MaxPadDimensions(Int_t cathode, Int_t statusMask, Bool_t matchMask) const;
      91             :   
      92             :   /// Return the biggest pad dimensions
      93             :   TVector2 MaxPadDimensions(Int_t statusMask, Bool_t matchMask) const;
      94             :   
      95             :   /// Return the smallest pad dimensions for a given cathode
      96             :   TVector2 MinPadDimensions(Int_t cathode, Int_t statusMask, Bool_t matchMask) const;
      97             :   
      98             :   /// Return the smallest pad dimensions
      99             :   TVector2 MinPadDimensions(Int_t statusMask, Bool_t matchMask) const;
     100             :   
     101             :   Int_t Multiplicity() const;
     102             :   Int_t Multiplicity(Int_t cathode) const;
     103             : 
     104             :   /// Compute number of pads in X and Y direction for a given cathode.  
     105             :   Long_t NofPads(Int_t cathode, Int_t statusMask, Bool_t matchMask) const;
     106             :   
     107             :   /// Number of pads in (X,Y) direction, whatever the cathode.
     108             :   Long_t NofPads(Int_t statusMask, Bool_t matchMask=kTRUE) const;
     109             :   
     110             :   /// Return true as the function Compare is implemented
     111           0 :   Bool_t IsSortable() const { return kTRUE; }
     112             :   
     113             : //  Bool_t IsEqual(const TObject* obj) const;
     114             :   
     115             :   virtual Int_t Compare(const TObject* obj) const;
     116             :   
     117             :   AliMUONPad* Pad(Int_t index) const;
     118             :   
     119             :   virtual void Paint(Option_t* opt="");
     120             :   
     121             :   /// Return (x,y) of that cluster
     122        1312 :   TVector2 Position() const { return fPosition; }
     123             :   /// Return errors on (x,y)
     124           0 :   TVector2 PositionError() const { return fPositionError; }
     125             : 
     126             :   virtual void Print(Option_t* opt="") const;
     127             :       
     128             :   /// By default, return the average of both cathode RawCharges.
     129             :   Float_t RawCharge() const;
     130             :   
     131             :   /// Returns the RawCharge on the given cathode.
     132             :   Float_t RawCharge(Int_t cathode) const;
     133             :     
     134             :   /// Return the cathode's raw charges asymmetry
     135             :   Float_t RawChargeAsymmetry() const;
     136             :   
     137             :   void RemovePad(AliMUONPad* pad);
     138             : 
     139             :   /// Set cathode (re)computed charges  
     140             :   void SetCharge(Float_t chargeCath0, Float_t chargeCath1)
     141         328 :   { fHasCharge = kTRUE; fCharge[0]=chargeCath0; fCharge[1]=chargeCath1; }
     142             : 
     143             :   /// Set chi2 of the RawCharge fit   
     144         328 :   void SetChi2(Float_t chi2) { fChi2 = chi2; }
     145             : 
     146             :   /// Set (x,y) of that cluster and errors   
     147             :   void SetPosition(const TVector2& pos, const TVector2& errorOnPos) 
     148         328 :   { fHasPosition = kTRUE; fPosition = pos; fPositionError = errorOnPos; }
     149             :   
     150             :   Int_t Cathode() const;
     151             :   
     152             :   void AddCluster(const AliMUONCluster& cluster);
     153             : 
     154             :   void Clear(Option_t* opt="");
     155             :   
     156             :   Bool_t IsMonoCathode() const;
     157             : 
     158             : //private:
     159             :     void DumpMe() const;
     160             :   
     161             : private:
     162             :   TObjArray fPads; ///< AliMUONPad(s) composing this cluster
     163             :   Bool_t fHasPosition; ///< false for pre-cluster (i.e. not yet computed)
     164             :   TVector2 fPosition; ///< (x,y) of that cluster (only valid if fHasPosition is kTRUE)
     165             :   TVector2 fPositionError; ///< errors on (x,y)
     166             :   Int_t fMultiplicity[2]; ///< number of pads in each cathode
     167             :   Float_t fRawCharge[2]; ///< cathode RawCharges
     168             :   Bool_t fHasCharge; ///< false if SetCharge has not been called
     169             :   Float_t fCharge[2]; ///< cathode (re)computed charges
     170             :   Float_t fChi2; ///< chi2 of the RawCharge fit (if any)
     171             :   Bool_t fIsSaturated[2]; ///< saturation status of cathodes
     172             :   
     173          18 :   ClassDef(AliMUONCluster,3) // A cluster of AliMUONPad
     174             : };
     175             : 
     176             : #endif

Generated by: LCOV version 1.11