ROOT logo
#ifndef ALIVMULTIPLICITY_H
#define ALIVMULTIPLICITY_H

#include <TNamed.h>
#include <TMath.h>


//////////////////////////////////////////////////////////
//                                                      //
//     Base virtual class for multiplicity information  //
//                                                      //
//////////////////////////////////////////////////////////

class AliVMultiplicity : public TNamed {

 public:
  //
  enum {kMultTrackRefs  =BIT(14), // in new format (old is default for bwd.comp.) multiple cluster->track references are allowed
	kScaleDThtbySin2=BIT(15), // scale Dtheta by 1/sin^2(theta). Default is DON'T scale, for bwd.comp.
	kSPD2Sng        =BIT(16)  // are SPD2 singles stored?
  };   
  //
  AliVMultiplicity() {}
 AliVMultiplicity(const char* name, const char* title) : TNamed(name,title) {}
  AliVMultiplicity(const AliVMultiplicity& m) : TNamed(m) {}
  AliVMultiplicity& operator=(const AliVMultiplicity& m) {if (this!=&m) TNamed::operator=(m); return *this;}
  virtual ~AliVMultiplicity() {}
  //
  // methods to access tracklet information
  Bool_t  GetMultTrackRefs()                          const {return TestBit(kMultTrackRefs);}
  Bool_t  GetScaleDThetaBySin2T()                     const {return TestBit(kScaleDThtbySin2);}
  void    SetMultTrackRefs(Bool_t v)                        {SetBit(kMultTrackRefs,v);}
  void    SetScaleDThetaBySin2T(Bool_t v)                   {SetBit(kScaleDThtbySin2,v);}
  //
  virtual void Clear(Option_t* opt="");
  //
  virtual Int_t    GetNumberOfTracklets()             const = 0;
  virtual Double_t GetTheta(Int_t i)                  const = 0;
  virtual Double_t GetPhi(Int_t i)                    const = 0;
  virtual Double_t GetDeltaPhi(Int_t i)               const = 0;
  virtual Int_t    GetLabel(Int_t i, Int_t layer)     const = 0;
  virtual void     SetLabel(Int_t i, Int_t layer, Int_t label) = 0;
  Double_t         GetEta(Int_t i)                    const 
  { 
    if(i>=0 && i<GetNumberOfTracklets()) return -TMath::Log(TMath::Tan(GetTheta(i)/2.));
    Error("GetEta","Invalid track number %d",i); return -9999.;
  }
  //
  // array getters
  virtual Double_t* GetTheta()                        const = 0;
  virtual Double_t* GetPhi()                          const = 0;
  virtual Double_t* GetDeltPhi()                      const = 0;
  virtual Int_t*    GetLabels()                       const = 0;
  virtual Int_t*    GetLabels2()                      const = 0;
  //
  virtual void Print(Option_t *opt="")                const = 0;
  //
  ClassDef(AliVMultiplicity,1);
};


#endif
 AliVMultiplicity.h:1
 AliVMultiplicity.h:2
 AliVMultiplicity.h:3
 AliVMultiplicity.h:4
 AliVMultiplicity.h:5
 AliVMultiplicity.h:6
 AliVMultiplicity.h:7
 AliVMultiplicity.h:8
 AliVMultiplicity.h:9
 AliVMultiplicity.h:10
 AliVMultiplicity.h:11
 AliVMultiplicity.h:12
 AliVMultiplicity.h:13
 AliVMultiplicity.h:14
 AliVMultiplicity.h:15
 AliVMultiplicity.h:16
 AliVMultiplicity.h:17
 AliVMultiplicity.h:18
 AliVMultiplicity.h:19
 AliVMultiplicity.h:20
 AliVMultiplicity.h:21
 AliVMultiplicity.h:22
 AliVMultiplicity.h:23
 AliVMultiplicity.h:24
 AliVMultiplicity.h:25
 AliVMultiplicity.h:26
 AliVMultiplicity.h:27
 AliVMultiplicity.h:28
 AliVMultiplicity.h:29
 AliVMultiplicity.h:30
 AliVMultiplicity.h:31
 AliVMultiplicity.h:32
 AliVMultiplicity.h:33
 AliVMultiplicity.h:34
 AliVMultiplicity.h:35
 AliVMultiplicity.h:36
 AliVMultiplicity.h:37
 AliVMultiplicity.h:38
 AliVMultiplicity.h:39
 AliVMultiplicity.h:40
 AliVMultiplicity.h:41
 AliVMultiplicity.h:42
 AliVMultiplicity.h:43
 AliVMultiplicity.h:44
 AliVMultiplicity.h:45
 AliVMultiplicity.h:46
 AliVMultiplicity.h:47
 AliVMultiplicity.h:48
 AliVMultiplicity.h:49
 AliVMultiplicity.h:50
 AliVMultiplicity.h:51
 AliVMultiplicity.h:52
 AliVMultiplicity.h:53
 AliVMultiplicity.h:54
 AliVMultiplicity.h:55
 AliVMultiplicity.h:56
 AliVMultiplicity.h:57
 AliVMultiplicity.h:58
 AliVMultiplicity.h:59
 AliVMultiplicity.h:60
 AliVMultiplicity.h:61
 AliVMultiplicity.h:62