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

/* $Id$ */

////////////////////////////////////////////////////////////////////////
//           Container class for ITS rec points                       //
////////////////////////////////////////////////////////////////////////

#include <TClonesArray.h>
#include <TString.h>

class AliITSRecoParam;

class AliITSRecPointContainer : public TObject {

 public:

  virtual ~AliITSRecPointContainer();  //Destructor

  Bool_t IsSPDActive() const {return fDet.Contains("SPD");}
  Bool_t IsSDDActive() const {return fDet.Contains("SDD");}
  Bool_t IsSSDActive() const {return fDet.Contains("SSD");}
  Bool_t IsITSComplete() const {return fDet.Contains("ALL");}
  Bool_t GetStatusOK() const {return fStatusOK;}
  Int_t GetNumberOfModules() const {return fActualSize; }

  static AliITSRecPointContainer* Instance(const AliITSRecoParam *ptr=NULL);
  static void Destroy();
  void PrepareToRead(){if(fNextEvent<0){fNextEvent=0;} else {++fNextEvent;}}
  TClonesArray* FetchClusters(Int_t mod, TTree* tR);
  TClonesArray* FetchClusters(Int_t mod, TTree* tR,Int_t cureve);
  TClonesArray* UncheckedGetClusters(Int_t mod) const {return fArray[mod];}

  // In the following two methods: 1<=lay<=6  (i.e. layers numbered from 1) 
  UInt_t GetNClustersInLayer(Int_t lay, TTree* tR, Int_t eventN=-1);
  UInt_t GetNClustersInLayerFast(Int_t lay) const;
  void FullReset(){fCurrentEve=-1000; Reset();}
  void ResetSPD(); // clears only SPD parts - see implementation for usage
  void ResetSDD(); // clears only SPD parts - see implementation for usage
  void ResetSSD(); // clears only SPD parts - see implementation for usage

 private:
  // methods
  AliITSRecPointContainer(const AliITSRecoParam* krp=NULL);   // Default constructor
  AliITSRecPointContainer(const AliITSRecPointContainer& rec);
  AliITSRecPointContainer& operator=(const AliITSRecPointContainer &source);
  Bool_t CheckBoundaries(Int_t i)const { return (i>=0 && i<fgkNModules);}
  void CookEntries();
  void Reset();
  void ClearClus(Int_t first, Int_t lastpp){ // clears clusters for modules 
    // ranging from first to lastpp-1 included
    for(Int_t i=first;i<lastpp;i++)(fArray[i])->Clear();
  }
  //Data members
  static AliITSRecPointContainer* fgInstance; //! AliITSRecPointContainer 
                                              //  singleton
  static const Int_t fgkNModules=2198;  //! total number of ITS modules

  Int_t fSPDNModules; //! number of SPD modules
  Int_t fSDDNModules; //! number of SDD modules
  Int_t fSSDNModules; //! number of SDD modules
  TClonesArray* fArray[fgkNModules];  //! container - 1 TClonesArray per module
  Int_t fCurrentEve; //! event number
  Int_t fNextEvent; //! number of the next event to be read; used only when
                    //! the run loader is not available. It is just a counter.
  Int_t fActualSize; //! actual number of ITS modules in TTree R 
  TString fDet; //! ITS subdetectors active for the current run 
  Bool_t fStatusOK; //! kFALSE is RP branch is absent or if there are anomalies
                    //! in the number of active modules
  UInt_t fNClusters[6]; //! Number of clusters per layer

  ClassDef(AliITSRecPointContainer,0)
};

#endif
 AliITSRecPointContainer.h:1
 AliITSRecPointContainer.h:2
 AliITSRecPointContainer.h:3
 AliITSRecPointContainer.h:4
 AliITSRecPointContainer.h:5
 AliITSRecPointContainer.h:6
 AliITSRecPointContainer.h:7
 AliITSRecPointContainer.h:8
 AliITSRecPointContainer.h:9
 AliITSRecPointContainer.h:10
 AliITSRecPointContainer.h:11
 AliITSRecPointContainer.h:12
 AliITSRecPointContainer.h:13
 AliITSRecPointContainer.h:14
 AliITSRecPointContainer.h:15
 AliITSRecPointContainer.h:16
 AliITSRecPointContainer.h:17
 AliITSRecPointContainer.h:18
 AliITSRecPointContainer.h:19
 AliITSRecPointContainer.h:20
 AliITSRecPointContainer.h:21
 AliITSRecPointContainer.h:22
 AliITSRecPointContainer.h:23
 AliITSRecPointContainer.h:24
 AliITSRecPointContainer.h:25
 AliITSRecPointContainer.h:26
 AliITSRecPointContainer.h:27
 AliITSRecPointContainer.h:28
 AliITSRecPointContainer.h:29
 AliITSRecPointContainer.h:30
 AliITSRecPointContainer.h:31
 AliITSRecPointContainer.h:32
 AliITSRecPointContainer.h:33
 AliITSRecPointContainer.h:34
 AliITSRecPointContainer.h:35
 AliITSRecPointContainer.h:36
 AliITSRecPointContainer.h:37
 AliITSRecPointContainer.h:38
 AliITSRecPointContainer.h:39
 AliITSRecPointContainer.h:40
 AliITSRecPointContainer.h:41
 AliITSRecPointContainer.h:42
 AliITSRecPointContainer.h:43
 AliITSRecPointContainer.h:44
 AliITSRecPointContainer.h:45
 AliITSRecPointContainer.h:46
 AliITSRecPointContainer.h:47
 AliITSRecPointContainer.h:48
 AliITSRecPointContainer.h:49
 AliITSRecPointContainer.h:50
 AliITSRecPointContainer.h:51
 AliITSRecPointContainer.h:52
 AliITSRecPointContainer.h:53
 AliITSRecPointContainer.h:54
 AliITSRecPointContainer.h:55
 AliITSRecPointContainer.h:56
 AliITSRecPointContainer.h:57
 AliITSRecPointContainer.h:58
 AliITSRecPointContainer.h:59
 AliITSRecPointContainer.h:60
 AliITSRecPointContainer.h:61
 AliITSRecPointContainer.h:62
 AliITSRecPointContainer.h:63
 AliITSRecPointContainer.h:64
 AliITSRecPointContainer.h:65
 AliITSRecPointContainer.h:66
 AliITSRecPointContainer.h:67
 AliITSRecPointContainer.h:68
 AliITSRecPointContainer.h:69
 AliITSRecPointContainer.h:70
 AliITSRecPointContainer.h:71
 AliITSRecPointContainer.h:72
 AliITSRecPointContainer.h:73
 AliITSRecPointContainer.h:74
 AliITSRecPointContainer.h:75
 AliITSRecPointContainer.h:76
 AliITSRecPointContainer.h:77
 AliITSRecPointContainer.h:78