#ifndef ALIMUONTRACKERDATA_H
#define ALIMUONTRACKERDATA_H
#ifndef ALIMUONVTRACKERDATA_H
# include "AliMUONVTrackerData.h"
#endif
class AliMUONSparseHisto;
class AliMUONVCalibParam;
class AliMUONVStore;
class AliMpDetElement;
class AliMUONRejectList;
class AliMUONTrackerData : public AliMUONVTrackerData
{
public:
AliMUONTrackerData(const char* name="", const char* title="",
Int_t dimension=0,
Bool_t issingleevent=kFALSE);
AliMUONTrackerData(const char* name, const char* title,
const AliMUONVStore& manuValues);
AliMUONTrackerData(const char* name, const char* title,
const AliMUONVStore& deOrBpValues, Int_t val);
AliMUONTrackerData(const char* name, const char* title,
const AliMUONRejectList& rejectList);
virtual ~AliMUONTrackerData();
Bool_t Add(const AliMUONTrackerData& data);
virtual Bool_t Add(const AliMUONVStore& channelValues, TArrayI* nofEventsPerDDL=0x0);
virtual Bool_t Replace(const AliMUONVStore& channelValues);
virtual Double_t BusPatch(Int_t busPatchId, Int_t dim=0) const;
virtual Double_t Chamber(Int_t chamberId, Int_t dim=0) const;
virtual Double_t Channel(Int_t detElemId, Int_t manuId, Int_t manuChannel,
Int_t dim=0) const;
virtual void Clear(Option_t* opt="");
virtual Double_t Count(Int_t detElemId, Int_t manuId, Int_t manuChannel) const;
virtual Double_t DetectionElement(Int_t detElemId, Int_t dim=0) const;
virtual TString DimensionName(Int_t dim) const;
virtual TString ExternalDimensionName(Int_t dim) const;
virtual Bool_t HasChamber(Int_t chamberId) const;
virtual Bool_t HasBusPatch(Int_t busPatchId) const;
virtual Bool_t HasDetectionElement(Int_t detElemId) const;
virtual Bool_t HasManu(Int_t detElemId, Int_t manuId) const;
virtual Bool_t HasPCB(Int_t detElemId, Int_t pcbIndex) const;
virtual Bool_t IsSingleEvent() const { return fIsSingleEvent; }
virtual Double_t Manu(Int_t detElemId, Int_t manuId, Int_t dim=0) const;
virtual Int_t NumberOfDimensions() const;
virtual Int_t ExternalDimension() const { return fExternalDimension; }
virtual Int_t InternalToExternal(Int_t dim) const { return dim/2; }
virtual Int_t NumberOfEvents(Int_t ddlNumber) const;
virtual Double_t PCB(Int_t detElemId, Int_t pcbIndex, Int_t dim=0) const;
using TObject::Print;
virtual void Print(Option_t* wildcard, Option_t* opt) const;
virtual void SetDimensionName(Int_t index, const char* value);
Bool_t CanHistogram() const { return kTRUE; }
void MakeHistogramForDimension(Int_t index, Bool_t value, Double_t xmin=0.0, Double_t xmax=4096.0);
virtual void HistogramRange(Double_t& xmin, Double_t& xmax) const { xmin = fXmin; xmax = fXmax; }
AliMUONSparseHisto* GetManuSparseHisto(Int_t detElemId, Int_t manuId,
Int_t dim=0);
AliMUONSparseHisto* GetManuSparseHisto(Int_t detElemId, Int_t manuId,
Int_t dim=0) const;
AliMUONSparseHisto* GetChannelSparseHisto(Int_t detElemId, Int_t manuId,
Int_t manuChannel, Int_t dim=0);
virtual AliMUONSparseHisto* GetChannelSparseHisto(Int_t detElemId, Int_t manuId,
Int_t manuChannel, Int_t dim=0) const;
virtual void DisableChannelLevel();
virtual Bool_t IsChannelLevelEnabled() const { return fIsChannelLevelEnabled; }
virtual void DisableManuLevel();
virtual Bool_t IsManuLevelEnabled() const { return fIsManuLevelEnabled; }
virtual Bool_t IsBusPatchLevelEnabled() const { return fIsBustPatchLevelEnabled; }
virtual Bool_t IsPCBLevelEnabled() const { return fIsPCBLevelEnabled; }
virtual Long64_t Merge(TCollection* list);
Bool_t ExportAsASCIIOccupancyFile(const char* filename, Int_t runNumber) const;
private:
void BuildFromDEStore(const AliMUONVStore& deStore);
void BuildFromBPStore(const AliMUONVStore& bpStore);
void FillHisto(Int_t detElemId, Int_t manuId, Int_t manuChannel,
Int_t dim, Double_t value);
AliMUONVCalibParam* BusPatchParam(Int_t busPatch, Bool_t create=kFALSE) const;
AliMUONVCalibParam* CreateBusPatchParam(Int_t busPatch) const;
AliMUONVCalibParam* ChamberParam(Int_t chamberId, Bool_t create=kFALSE) const;
AliMUONVCalibParam* CreateChamberParam(Int_t chamberId) const;
AliMUONVCalibParam* ChannelParam(Int_t detElemId, Int_t manuId,
const AliMUONVCalibParam* external=0x0) const;
AliMUONVCalibParam* DetectionElementParam(Int_t detElemId, Bool_t create=kFALSE) const;
AliMUONVCalibParam* CreateDetectionElementParam(Int_t detElemId) const;
AliMUONVCalibParam* ManuParam(Int_t detElemId, Int_t manuId, Bool_t create=kFALSE) const;
AliMUONVCalibParam* CreateManuParam(Int_t detElemInd, Int_t manuId) const;
AliMUONVCalibParam* PCBParam(Int_t detElemId, Int_t pcbIndex, Bool_t create=kFALSE) const;
AliMUONVCalibParam* CreatePCBParam(Int_t detElemId, Int_t pcbIndex) const;
virtual Int_t IndexOfNumberDimension() const { return fDimension - 1; }
virtual Int_t IndexOfOccupancyDimension() const { return fDimension - 2; }
virtual Bool_t IsHistogrammed(Int_t dim) const { return ( fHistogramming[dim] > 0 ); }
Int_t DdlIdFromBusPatchId(Int_t buspatchid) const;
Int_t DdlIdFromDetElemId(Int_t detelemid) const;
Int_t DdlIdFromChamberId(Int_t chamberid) const;
AliMUONTrackerData(const AliMUONTrackerData& rhs);
AliMUONTrackerData& operator=(const AliMUONTrackerData& rhs);
AliMUONVCalibParam* CreateDouble(const AliMUONVCalibParam& param, Int_t detElemId, Int_t manuId) const;
Int_t GetParts(AliMUONVCalibParam* external,
AliMUONVCalibParam*& chamber,
AliMUONVCalibParam*& de,
AliMUONVCalibParam*& busPatch,
AliMUONVCalibParam*& pcb,
AliMUONVCalibParam*& manu,
AliMUONVCalibParam*& channel,
AliMpDetElement*& mpde);
Int_t External2Internal(Int_t index) const;
void SetInternalDimensionName(Int_t index, const char* value);
void SetExternalDimensionName(Int_t index, const char* value);
Double_t Value(const AliMUONVCalibParam& param, Int_t i, Int_t dim, Int_t ddlId) const;
Int_t Dimension() const { return fDimension; }
Bool_t InternalAdd(const AliMUONVStore& store, TArrayI* nevents, Bool_t replace);
void GetDEManu(const AliMUONVCalibParam& param,
Int_t& detElemId, Int_t& manuId) const;
void AddCalibParams(const AliMUONVCalibParam& src, AliMUONVCalibParam& dest) const;
void Add2D(const AliMUONVStore& src, AliMUONVStore& dest) const;
void Add1D(const AliMUONVStore& src, AliMUONVStore& dest) const;
void AssertStores();
Bool_t UpdateNumberOfEvents(TArrayI* nevents);
static void DispatchValue(AliMUONVCalibParam& param, Int_t index, Double_t y, Double_t ey, Int_t nchannels);
private:
Bool_t fIsSingleEvent;
AliMUONVStore* fChannelValues;
AliMUONVStore* fManuValues;
AliMUONVStore* fBusPatchValues;
AliMUONVStore* fDEValues;
AliMUONVStore* fChamberValues;
AliMUONVStore* fPCBValues;
Int_t fDimension;
Int_t fNevents;
TObjArray* fDimensionNames;
TObjArray* fExternalDimensionNames;
Int_t fExternalDimension;
Int_t* fHistogramming;
AliMUONVStore* fHistos;
Double_t fXmin;
Double_t fXmax;
static const Int_t fgkExtraDimension;
static const Int_t fgkVirtualExtraDimension;
Bool_t fIsChannelLevelEnabled;
Bool_t fIsManuLevelEnabled;
Bool_t fIsBustPatchLevelEnabled;
Bool_t fIsPCBLevelEnabled;
Int_t fNofDDLs;
Int_t* fNofEventsPerDDL;
ClassDef(AliMUONTrackerData,8)
};
#endif