X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONDataInterface.h;h=183075d17453a3991b44cce7939c25ddbe4a08d9;hb=1d2b6a8b0492c2a8955973e87d3ab121892040db;hp=0768793b926a46175a5c0b5ef8530f7d80b51280;hpb=6d149c9e4e40adc691d5ce333d3ad967e84e439f;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONDataInterface.h b/MUON/AliMUONDataInterface.h index 0768793b926..183075d1745 100644 --- a/MUON/AliMUONDataInterface.h +++ b/MUON/AliMUONDataInterface.h @@ -1,152 +1,136 @@ -#ifndef ALI_MUON_DATA_INTERFACE_H -#define ALI_MUON_DATA_INTERFACE_H +#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 -// email: artur@alice.phy.uct.ac.za +// Author: Artur Szostak (University of Cape Town) +// email: artursz@iafrica.com +// +// Updated to MUON module w/o MUONData by Laurent Aphecetche, Subatech +// #include #include -#include "AliMUONData.h" - -class TParticle; - -class AliRunLoader; +class TIterator; class AliLoader; -class AliMUONRawCluster; +class AliMUONVStore; +class AliMUONVDigitStore; +class AliMUONVClusterStore; +class AliMUONVTriggerStore; +class AliMUONVDigit; +class AliMUONVCluster; class AliMUONLocalTrigger; -class AliMUONHit; -class AliMUONDigit; +class AliMUONRegionalTrigger; +class AliMUONGlobalTrigger; -// An easy to use interface to the MUON module data stored in TreeK, TreeH, TreeS, TreeD and TreeR -// One can fetch any of the data objects with all the calls to runloader, muon loader and AliMUONData -// done behind the scenes and automatically. -// This interface in not necessarily the fastest way to fetch the data but it is the easiest. -// Note: If independant calls to the run loader, muon loader or AliMUONData objects are interspersed -// with calls to the AliMUONDataInterface to fetch data, one might need to call the Reset method -// between these method calls at some point to prevent AliMUONDataInterface from getting confused. -// This is necessary since this object assumes the state of runloader, muon loader nor AliMUONData -// has not changed between calls. If the state has changes then one must call Reset so that -// AliMUONDataInterface refreshes what it knows about the state of the loader and AliMUONData objects. -// class AliMUONDataInterface : public TObject { public: - - AliMUONDataInterface(); - ~AliMUONDataInterface(); - - // Sets all internal pointers to NULL without releasing the current runloader. - void Reset(); - - Bool_t UseCurrentRunLoader(); - - Int_t NumberOfEvents(TString filename, TString foldername); - - Int_t NumberOfParticles(TString filename, TString foldername, Int_t event); - TParticle* Particle(TString filename, TString foldername, Int_t event, Int_t particle); - - Int_t NumberOfTracks(TString filename, TString foldername, Int_t event); - Int_t NumberOfHits(TString filename, TString foldername, Int_t event, Int_t track); - AliMUONHit* Hit(TString filename, TString foldername, Int_t event, Int_t track, Int_t hit); - - Int_t NumberOfSDigits(TString filename, TString foldername, Int_t event, Int_t chamber, Int_t cathode); - AliMUONDigit* SDigit(TString filename, TString foldername, Int_t event, Int_t chamber, Int_t cathode, Int_t sdigit); - - Int_t NumberOfDigits(TString filename, TString foldername, Int_t event, Int_t chamber, Int_t cathode); - AliMUONDigit* Digit(TString filename, TString foldername, Int_t event, Int_t chamber, Int_t cathode, Int_t digit); - - Int_t NumberOfRawClusters(TString filename, TString foldername, Int_t event, Int_t chamber); - AliMUONRawCluster* RawCluster(TString filename, TString foldername, Int_t event, Int_t chamber, Int_t cluster); - - Int_t NumberOfLocalTriggers(TString filename, TString foldername, Int_t event); - AliMUONLocalTrigger* LocalTrigger(TString filename, TString foldername, Int_t event, Int_t trigger); - - Bool_t SetFile(TString filename = "galice.root", TString foldername = "MUONFolder"); - Bool_t GetEvent(Int_t event = 0); - - Int_t NumberOfEvents(); - - Int_t NumberOfParticles(); - TParticle* Particle(Int_t particle); - - Int_t NumberOfTracks(); - Int_t NumberOfHits(Int_t track); - AliMUONHit* Hit(Int_t track, Int_t hit); - - Int_t NumberOfSDigits(Int_t chamber, Int_t cathode); - AliMUONDigit* SDigit(Int_t chamber, Int_t cathode, Int_t sdigit); - - Int_t NumberOfDigits(Int_t chamber, Int_t cathode); - AliMUONDigit* Digit(Int_t chamber, Int_t cathode, Int_t digit); - - Int_t NumberOfRawClusters(Int_t chamber); - AliMUONRawCluster* RawCluster(Int_t chamber, Int_t cluster); - - Int_t NumberOfLocalTriggers(); - AliMUONLocalTrigger* LocalTrigger(Int_t trigger); - - - // Returns the name of the currently selected file. - TString CurrentFile() const { return fFilename; }; - - // Returns the name of the currently selected folder. - TString CurrentFolder() const { return fFoldername; }; - - // Returns the number of the currently selected event. - Int_t CurrentEvent() const { return fEventnumber; }; - - // Returns the currently selected track. - Int_t CurrentTrack() const { return fTrack; }; - - // Returns the currently selected cathode in TreeS. - Int_t CurrentSCathode() const { return fSCathode; }; - - // Returns the currently selected cathode in TreeD. - Int_t CurrentDCathode() const { return fCathode; }; - -protected: - AliMUONDataInterface(const AliMUONDataInterface& rhs); - AliMUONDataInterface& operator=(const AliMUONDataInterface& rhs); - + + 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: - Bool_t FetchMuonLoader(TString filename, TString foldername); - Bool_t LoadLoaders(TString filename, TString foldername); - Bool_t FetchLoaders(TString filename, TString foldername); - Bool_t FetchEvent(Int_t event); - Bool_t FetchTreeK(); - Bool_t FetchTreeH(); - Bool_t FetchTreeS(); - Bool_t FetchTreeD(); - Bool_t FetchTreeR(); - - Bool_t fCreatedRunLoader; //! If this object created the fRunloader then this flag is set. - - Bool_t fHitAddressSet; //! Flag specifying if the TTree address for the hit tree was set. - Bool_t fSDigitAddressSet; //! Flag specifying if the TTree address for the s-digit tree was set. - Bool_t fDigitAddressSet; //! Flag specifying if the TTree address for the digit tree was set. - Bool_t fClusterAddressSet; //! Flag specifying if the TTree address for the cluster tree was set. - Bool_t fTriggerAddressSet; //! Flag specifying if the TTree address for the trigger tree was set. - - AliRunLoader* fRunloader; //! Pointer to the runloader object used. - AliLoader* fMuonloader; //! Pointer to the muon loader object used. - AliMUONData fData; //! Pointer to the muon raw data interface. - TString fFilename; //! The file name from which we are fetching data. - TString fFoldername; //! The folder name from which we are fetching data. - Int_t fEventnumber; //! The currently selected event. - Int_t fTrack; //! The currently selected track. - Int_t fSCathode; //! The currently selected cathode in TreeS. - Int_t fCathode; //! The currently selected cathode in TreeD. - - ClassDef(AliMUONDataInterface, 0) // A easy to use interface to data in the MUON module. + /// 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 // ALI_MUON_DATA_INTERFACE_H +#endif // ALIMUONDATAINTERFACE_H