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

/* $Id$ */
// Includes revised 07/05/2004
//
/// \ingroup evaluation
/// \class AliMUONDataInterface
/// \brief An easy to use interface to MUON data

// Author: Artur Szostak (University of Cape Town)
//  email: artursz@iafrica.com
//
// Updated to MUON module w/o MUONData by Laurent Aphecetche, Subatech
//

#include <TObject.h>
#include <TString.h>

class TIterator;
class AliLoader;
class AliMUONVStore;
class AliMUONVDigitStore;
class AliMUONVClusterStore;
class AliMUONVTriggerStore;
class AliMUONVDigit;
class AliMUONVCluster;
class AliMUONLocalTrigger;
class AliMUONRegionalTrigger;
class AliMUONGlobalTrigger;


class AliMUONDataInterface : public TObject
{
public:
  
  AliMUONDataInterface(const char* filename="galice.root");
  virtual ~AliMUONDataInterface();
  
  /// Returns true if the data interface was able to open the root file correctly.
  Bool_t IsValid() const { return fIsValid; };

  void Open(const char* filename);

  Int_t NumberOfEvents() const;
  
  /// Returns the index number of the current event loaded.
  /// This is the event number as was used in the last calls to DigitStore(Int_t),
  /// ClusterStore(Int_t), TriggerStore(Int_t) or GetEvent(Int_t).
  Int_t   CurrentEvent() const { return fCurrentEvent; }

  AliMUONVDigitStore* DigitStore(Int_t event);  
  AliMUONVClusterStore* ClusterStore(Int_t event);
  AliMUONVTriggerStore* TriggerStore(Int_t event, const char* treeLetter="R");

  /// Dump the clusters for a given event, sorted if so required
  void DumpClusters(Int_t event, Bool_t sorted=kTRUE)  { return DumpRecPoints(event,sorted); }
  void DumpRecPoints(Int_t event, Bool_t sorted=kTRUE);
  void DumpDigits(Int_t event, Bool_t sorted=kTRUE);
  void DumpTrigger(Int_t event, const char* treeLetter="R");  
  
  Bool_t GetEvent(Int_t event = 0);
  
  // Note the following methods can be extremely slow. Remember they are only
  // here for end user convenience for his/her small tests and macros.
  // If you want speed then don't use these methods. If you really want peak
  // performance then you should be talking to the AliRunLoader and Store
  // objects directly.
  Int_t NumberOfDigits(Int_t detElemId);
  AliMUONVDigit* Digit(Int_t detElemId, Int_t index);
  Int_t NumberOfDigits(Int_t chamber, Int_t cathode);
  AliMUONVDigit* Digit(Int_t chamber, Int_t cathode, Int_t index);
  Int_t NumberOfRawClusters(Int_t chamber);
  AliMUONVCluster* RawCluster(Int_t chamber, Int_t index);
  Int_t NumberOfLocalTriggers();
  AliMUONLocalTrigger* LocalTrigger(Int_t index);
  Int_t NumberOfRegionalTriggers();
  AliMUONRegionalTrigger* RegionalTrigger(Int_t index);
  AliMUONGlobalTrigger* GlobalTrigger();
  
private:

  /// The various identifiers for the type of iterator constructed.
  enum IteratorType
  {
    kNoIterator,  ///< No iterator was constructed.
    kDigitIteratorByDetectorElement,  ///< A digit iterator for iterating over detector elements.
    kDigitIteratorByChamberAndCathode,  ///< A digit iterator for iterating over chambers and cathodes.
    kRawClusterIterator,  ///< A raw cluster iterator.
    kLocalTriggerIterator,  ///< An iterator for iterating over reconstructed local triggers.
    kRegionalTriggerIterator  ///< An iterator for iterating over reconstructed regional triggers.
  };
    
  void DumpSorted(const AliMUONVStore& store) const;

  Bool_t LoadEvent(Int_t event);

  void NtupleTrigger(const char* treeLetter);
  
  void ResetStores();
  
  TIterator* GetIterator(IteratorType type, Int_t x = 0, Int_t y = 0);
  void ResetIterator();
  
  Int_t CountObjects(TIterator* iter);
  TObject* FetchObject(TIterator* iter, Int_t index);
  
  /// Not implemented
  AliMUONDataInterface(const AliMUONDataInterface& rhs);
  /// Not implemented
  AliMUONDataInterface& operator=(const AliMUONDataInterface& rhs);
  
  
  AliLoader* fLoader; //!< Tree accessor
  AliMUONVDigitStore* fDigitStore; //!< current digit store (owner)
  AliMUONVTriggerStore* fTriggerStore; //!< current trigger store (owner)
  AliMUONVClusterStore* fClusterStore; //!< current cluster store (owner)
  Int_t fCurrentEvent; //!< Current event we've read in
  TString fTreeLetter; //!< The tree letter used in the last call to TriggerStore().
  Bool_t fIsValid; //!< whether we were initialized properly or not
  
  IteratorType fCurrentIteratorType;  //!< The type of iterator that is currently set.
  Int_t fCurrentIndex;  //!< A current index number maintained for certain iteration operations.
  Int_t fDataX; //!< Extra data parameter about the iterator, can be the chamber number or detector element.
  Int_t fDataY; //!< Extra data parameter about the iterator, can be the cathode number.
  TIterator* fIterator; //!< Iterator for various iteration operations.
  
  static Int_t fgInstanceCounter; //!< To build unique folder name for each instance
  
  ClassDef(AliMUONDataInterface, 0)  // An easy to use interface to MUON reconstructed data
};
    

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