#include "TF1.h"
#include "TArrayD.h"
#include "TObjArray.h"
+#include "AliSplineFit.h"
class TH1F;
class TH3F;
class TH2F;
class THnSparse;
class TList;
+class TGraphErrors;
class AliESDEvent;
class AliESDtrack;
class AliTPCcalibLaser;
+class AliTPCseed;
#include "TTreeStream.h"
-
+
class AliTPCcalibTimeGain:public AliTPCcalibBase {
public:
AliTPCcalibTimeGain();
//
virtual void Process(AliESDEvent *event);
virtual Long64_t Merge(TCollection *li);
- virtual void Analyze();
+ virtual void AnalyzeRun(Int_t minEntries);
+ //
+ void ProcessCosmicEvent(AliESDEvent *event);
+ void ProcessBeamEvent(AliESDEvent *event);
//
void CalculateBetheAlephParams(TH2F *hist, Double_t * ini);
static void BinLogX(THnSparse *h, Int_t axisDim);
static void BinLogX(TH1 *h);
- static TGraph * FitSlices(THnSparse *h, Int_t axisDim1, Int_t axisDim2, Int_t minEntries);
//
- THnSparse * GetHistGainTime(){return (THnSparse*) fHistGainTime;};
- TGraph * GetGraphGainVsTime(){return fGainVsTime;};
- TH2F * GetHistDeDxTotal(){return (TH2F*) fHistDeDxTotal;};
+ THnSparse * GetHistGainTime() const {return (THnSparse*) fHistGainTime;};
+ TH2F * GetHistDeDxTotal() const {return (TH2F*) fHistDeDxTotal;};
//
- void SetMIP(Float_t MIP){fMIP = MIP;};
+ TGraphErrors * GetGraphGainVsTime(Int_t runNumber = 0, Int_t minEntries = 2000);
+ static AliSplineFit * MakeSplineFit(TGraphErrors * graph);
+ TGraphErrors * GetGraphAttachment(Int_t minEntries, Int_t nmaxBin, Float_t fracLow=0.1, Float_t fracUp=0.9);
+ //
+ void SetMIP(Float_t MIP){fMIP = MIP;};
+ void SetUseMax(Bool_t UseMax){fUseMax = UseMax;};
void SetLowerTrunc(Float_t LowerTrunc){fLowerTrunc = LowerTrunc;};
void SetUpperTrunc(Float_t UpperTrunc){fUpperTrunc = UpperTrunc;};
void SetUseShapeNorm(Bool_t UseShapeNorm){fUseShapeNorm = UseShapeNorm;};
void SetUsePosNorm(Bool_t UsePosNorm){fUsePosNorm = UsePosNorm;};
void SetUsePadNorm(Int_t UsePadNorm){fUsePadNorm = UsePadNorm;};
void SetIsCosmic(Bool_t IsCosmic){fIsCosmic = IsCosmic;};
+ void SetLowMemoryConsumption(Bool_t LowMemoryConsumption){fLowMemoryConsumption = LowMemoryConsumption;};
+ void SetUseCookAnalytical(Bool_t UseCookAnalytical){fUseCookAnalytical = UseCookAnalytical;};
private:
//
- THnSparse * fHistGainTime; // dEdx vs. time, type, Driftlength, momentum P
- TGraph * fGainVsTime; // multiplication factor vs. time
- TH2F * fHistDeDxTotal; // dEdx vs. momentum for quality assurance
+ Float_t GetTPCdEdx(AliTPCseed * seed); // wrapper for CookdEdxNorm or analytical
+ //
+ THnSparse * fHistGainTime; // dEdx vs. time, type, Driftlength, momentum P
+ TGraphErrors * fGainVsTime; // multiplication factor vs. time
+ TH2F * fHistDeDxTotal; // dEdx vs. momentum for quality assurance
//
Float_t fIntegrationTimeDeDx; // required statistics for each dEdx time bin
//
- Float_t fMIP; // rough MIP position in order to have scalable histograms
+ Float_t fMIP; // rough MIP position in order to have scaleable histograms
//
+ Bool_t fUseMax; // true: use max charge for dE/dx calculation, false: use total charge for dE/dx calculation
Float_t fLowerTrunc; // lower truncation of dE/dx ; at most 5%
Float_t fUpperTrunc; // upper truncation of dE/dx ; ca. 70%
Bool_t fUseShapeNorm; // use empirical correction of dependencies
Bool_t fUsePosNorm; // charge correction (analytical?)
Int_t fUsePadNorm; // normalization of pad geometries
+ Bool_t fUseCookAnalytical; // true if CookdEdxAnalytical should be used
//
- Bool_t fIsCosmic; // kTRUE if the analyzed runs are contain cosmic events
+ Bool_t fIsCosmic; // kTRUE if the analyzed runs contain cosmic events
+ Bool_t fLowMemoryConsumption; // set this option kTRUE if the momenta information should not be stored in order to save memory
//
AliTPCcalibTimeGain(const AliTPCcalibTimeGain&);
AliTPCcalibTimeGain& operator=(const AliTPCcalibTimeGain&);