#ifndef ALIITSPLANEEFFSSD_H
#define ALIITSPLANEEFFSSD_H
#include <TH1F.h>
#include <TH2I.h>
#include "AliITSPlaneEff.h"
class AliCDBId;
class AliITSPlaneEffSSD : public AliITSPlaneEff {
public:
AliITSPlaneEffSSD();
virtual ~AliITSPlaneEffSSD();
AliITSPlaneEffSSD(const AliITSPlaneEffSSD &source);
AliITSPlaneEffSSD& operator=(const AliITSPlaneEffSSD &s);
AliITSPlaneEffSSD& operator +=( const AliITSPlaneEffSSD &add);
Double_t PlaneEff(const UInt_t mod) const;
Double_t ErrPlaneEff(const UInt_t mod) const;
Int_t GetFound(const UInt_t key) const;
Int_t GetTried(const UInt_t key) const;
Bool_t UpDatePlaneEff(const Bool_t Kfound, const UInt_t mod);
enum {kNModule = 1698};
enum {kNChip = 6};
enum {kNSide = 2};
enum {kNStrip = 128};
virtual Double_t LivePlaneEff(UInt_t mod) const;
virtual Double_t ErrLivePlaneEff(UInt_t mod) const;
virtual Double_t GetFracLive(const UInt_t mod) const;
virtual Double_t GetFracBad(const UInt_t mod) const;
virtual Bool_t WriteIntoCDB() const;
virtual Bool_t ReadFromCDB();
Bool_t AddFromCDB(AliCDBId *cdbId);
virtual Bool_t AddFromCDB() {AliCDBId *cdbId=0; return AddFromCDB(cdbId);}
UInt_t GetKeyFromDetLocCoord(Int_t ilay,Int_t idet, Float_t, Float_t locz) const;
UInt_t Nblock() const;
Bool_t GetBlockBoundaries(const UInt_t key,Float_t& xmn,Float_t& xmx,Float_t& zmn,Float_t& zmx) const;
virtual void SetCreateHistos(Bool_t his=kFALSE)
{fHis=his; if(fHis) {DeleteHistos(); InitHistos();} else DeleteHistos(); return; }
virtual Bool_t FillHistos(UInt_t key, Bool_t found, Float_t *track, Float_t *cluster, Int_t *ctype,Float_t*);
virtual Bool_t WriteHistosToFile(TString filename="PlaneEffSSDHistos.root",Option_t* option = "RECREATE");
virtual Bool_t ReadHistosFromFile(TString filename="PlaneEffSSDHistos.root");
UInt_t GetKey(const UInt_t mod) const;
protected:
virtual void Copy(TObject &obj) const;
Int_t GetMissingTracksForGivenEff(Double_t eff, Double_t RelErr, UInt_t im) const;
UInt_t GetModFromKey(const UInt_t key) const;
void GetBadInModule(const UInt_t mod, UInt_t& bad) const;
Int_t fFound[kNModule];
Int_t fTried[kNModule];
private:
enum {kNHisto = kNModule};
virtual void InitHistos();
virtual void DeleteHistos();
void CopyHistos(AliITSPlaneEffSSD& target) const;
TH1F **fHisResX;
TH1F **fHisResZ;
TH2F **fHisResXZ;
TH2I **fHisClusterSize;
TH1F **fHisTrackErrX;
TH1F **fHisTrackErrZ;
TH1F **fHisClusErrX;
TH1F **fHisClusErrZ;
ClassDef(AliITSPlaneEffSSD,3)
};
inline UInt_t AliITSPlaneEffSSD::Nblock() const {return kNModule;}
inline Bool_t AliITSPlaneEffSSD::GetBlockBoundaries(const UInt_t key,Float_t& xmn,Float_t& xmx,
Float_t& zmn,Float_t& zmx) const {
if(key>=kNModule)
{AliWarning("GetBlockBoundaries: you asked for a non existing key"); return kFALSE;}
const Float_t kDxDefault = 72960.;
const Float_t kDzDefault = 40000.;
const Float_t kconv = 1.0E-04;
xmn=-kconv*kDxDefault/2.; xmx=kconv*kDxDefault/2.;
zmn=-kconv*kDzDefault/2.; zmx=kconv*kDzDefault/2.;
return kTRUE;
}
inline Int_t AliITSPlaneEffSSD::GetFound(const UInt_t key) const {
if(key>=kNModule) {AliWarning("GetFound: you asked for a non existing key"); return -1;}
return fFound[key];
}
inline Int_t AliITSPlaneEffSSD::GetTried(const UInt_t key) const {
if(key>=kNModule) {AliWarning("GetTried: you asked for a non existing key"); return -1;}
return fTried[key];
}
#endif