]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/EBYE/BalanceFunctions/AliAnalysisTaskTriggeredBF.h
end-of-line normalization
[u/mrichter/AliRoot.git] / PWGCF / EBYE / BalanceFunctions / AliAnalysisTaskTriggeredBF.h
index 1cb244a3ff70421e803190e8d57dd29802898928..490362ffd69c6fc8db976b7559f766c3ce594a6c 100755 (executable)
-#ifndef ALIANALYSISTASKTRIGGEREDBF_CXX\r
-#define ALIANALYSISTASKTRIGGEREDBF_CXX\r
-\r
-// Analysis task for the TriggeredBF code\r
-// Authors: Panos Cristakoglou@cern.ch, m.weber@cern.ch\r
-\r
-#include "AliLog.h"\r
-#include "AliAnalysisTaskSE.h"\r
-#include "AliBalanceTriggered.h"\r
-#include "AliPIDResponse.h"\r
-#include "AliPIDCombined.h"\r
-\r
-class TList;\r
-class TH1F;\r
-class TH2F;\r
-\r
-class AliBalanceTriggered;\r
-class AliEventPoolManager;\r
-\r
-\r
-class AliAnalysisTaskTriggeredBF : public AliAnalysisTaskSE {\r
- public:\r
-  AliAnalysisTaskTriggeredBF(const char *name = "AliAnalysisTaskTriggeredBF");\r
-  virtual ~AliAnalysisTaskTriggeredBF(); \r
-  \r
-  \r
-  virtual void   UserCreateOutputObjects();\r
-  virtual void   UserExec(Option_t *option);\r
-  virtual void   UserExecMix(Option_t*);\r
-  virtual void   FinishTaskOutput();\r
-  virtual void   Terminate(Option_t *);\r
-\r
-  void SetAnalysisObject(AliBalanceTriggered *const analysis) {\r
-    fBalance         = analysis;\r
-    }\r
-  void SetShufflingObject(AliBalanceTriggered *const analysisShuffled) {\r
-    fRunShuffling = kTRUE;\r
-    fShuffledBalance = analysisShuffled;\r
-  }\r
-  void SetMixingObject(AliBalanceTriggered *const analysisMixed) {\r
-    fRunMixing = kTRUE;\r
-    fMixedBalance = analysisMixed;\r
-  }\r
-  void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }\r
-\r
-  void SetRunV0(Bool_t runV0 = kTRUE) { fRunV0 = runV0; }\r
\r
-  void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {\r
-    fVxMax = vx;\r
-    fVyMax = vy;\r
-    fVzMax = vz;\r
-  }\r
-\r
-  //==============AOD analysis==============//\r
-  void SetAODtrackCutBit(Int_t bit){\r
-    nAODtrackCutBit = bit;\r
-  }\r
-\r
-  void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){\r
-    fPtMin  = ptmin;  fPtMax  = ptmax;\r
-    fEtaMin = etamin; fEtaMax = etamax;\r
-\r
-  }\r
-\r
-  void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){\r
-    fDCAxyCut  = DCAxy;\r
-    fDCAzCut = DCAz;\r
-  }\r
-\r
-   void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){\r
-    fTPCchi2Cut      = maxTPCchi2;\r
-    fNClustersTPCCut = minNClustersTPC;\r
-  }\r
-\r
-  //Centrality\r
-  void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}\r
-  const char* GetCentralityEstimator(void)  const              {return fCentralityEstimator;}\r
-  void SetCentralityPercentileRange(Double_t min, Double_t max) { \r
-    fUseCentrality = kTRUE;\r
-    fCentralityPercentileMin=min;\r
-    fCentralityPercentileMax=max;\r
-  }\r
-  void SetImpactParameterRange(Double_t min, Double_t max) { \r
-    fUseCentrality = kTRUE;\r
-    fImpactParameterMin=min;\r
-    fImpactParameterMax=max;\r
-  }\r
-\r
-  //multiplicity\r
-  void SetMultiplicityRange(Int_t min, Int_t max) {\r
-    fUseMultiplicity = kTRUE;\r
-    fNumberOfAcceptedTracksMin = min;\r
-    fNumberOfAcceptedTracksMax = max;}\r
-  \r
-  void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}\r
-  \r
-\r
- private:\r
-  Float_t    IsEventAccepted(AliVEvent* event);\r
-  TObjArray* GetAcceptedTracks(AliVEvent* event);\r
-  TObjArray* GetAcceptedV0s(AliVEvent* event);\r
-  TObjArray* GetShuffledTracks(TObjArray* tracks);\r
-\r
-  AliBalanceTriggered *fBalance; //TriggeredBF object\r
-  Bool_t fRunShuffling;//run shuffling or not\r
-  AliBalanceTriggered *fShuffledBalance; //TriggeredBF object (shuffled)\r
-  Bool_t fRunMixing;//run mixing or not\r
-  Int_t  fMixingTracks;//number of tracks to mix\r
-  AliBalanceTriggered *fMixedBalance; //TriggeredBF object (mixed)\r
-  AliEventPoolManager*     fPoolMgr;         //! event pool manager\r
-  Bool_t fRunV0;\r
-\r
-  AliPIDResponse       *fPIDResponse;     //! PID response object\r
-  AliPIDCombined       *fPIDCombined;     //! combined PID object\r
-\r
-  TList *fList; //fList object\r
-  TList *fListTriggeredBF; //fList object\r
-  TList *fListTriggeredBFS; //fList object (shuffling)\r
-  TList *fListTriggeredBFM; //fList object (mixing)\r
-  TList *fHistListPIDQA;  //! list of histograms\r
-  TList *fHistListV0; // list of V0 histograms\r
-\r
-  TH1F *fHistEventStats; //event stats\r
-  TH2F *fHistCentStats; //centrality stats\r
-  TH1F *fHistTriggerStats; //trigger stats\r
-  TH1F *fHistTrackStats; //Track filter bit stats\r
-  TH1F *fHistVx; //x coordinate of the primary vertex\r
-  TH1F *fHistVy; //y coordinate of the primary vertex\r
-  TH1F *fHistVz; //z coordinate of the primary vertex\r
-\r
-  TH2F *fHistClus;//number of clusters (QA histogram)\r
-  TH2F *fHistDCA;//DCA  (QA histogram)\r
-  TH1F *fHistChi2;//track chi2 (QA histogram)\r
-  TH1F *fHistPt;//transverse momentum (QA histogram)\r
-  TH1F *fHistEta;//pseudorapidity (QA histogram)\r
-  TH1F *fHistPhi;//phi (QA histogram)\r
-  TH1F *fHistPhiBefore;//phi before v2 afterburner (QA histogram)\r
-  TH1F *fHistPhiAfter;//phi after v2 afterburner (QA histogram)\r
-  TH2F *fHistV0M;//V0 multiplicities (QA histogram)\r
-  TH2F *fHistRefTracks;//reference track multiplicities (QA histogram)\r
-\r
-  // V0 histograms\r
-  TH1F    *fHistV0MultiplicityBeforeTrigSel;             //! V0 multiplicity distribution\r
-  TH1F    *fHistV0MultiplicityForTrigEvt;                //! V0 multiplicity distribution\r
-  TH1F    *fHistV0MultiplicityForSelEvt;                 //! V0 multiplicity distribution\r
-  TH1F    *fHistV0MultiplicityForSelEvtNoTPCOnly;        //! V0 multiplicity distribution\r
-  TH1F    *fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup;//! V0 multiplicity distribution\r
-  \r
-  TH1F    *fHistMultiplicityBeforeTrigSel;             //! multiplicity distribution    \r
-  TH1F    *fHistMultiplicityForTrigEvt;                //! multiplicity distribution\r
-  TH1F    *fHistMultiplicity;                          //! multiplicity distribution\r
-  TH1F    *fHistMultiplicityNoTPCOnly;                 //! multiplicity distribution\r
-  TH1F    *fHistMultiplicityNoTPCOnlyNoPileup;         //! multiplicity distribution\r
-\r
-  //before selection\r
-  TH1F* fHistV0InvMassK0;                           // Invariant mass K0\r
-  TH1F* fHistV0InvMassLambda;                       // Invariant mass Lambda\r
-  TH1F* fHistV0InvMassAntiLambda;                   // Invariant mass AntiLambda\r
-  TH2F* fHistV0Armenteros;                          // Armenteros plot\r
-\r
-  //after selection\r
-  TH1F* fHistV0SelInvMassK0;                           // Invariant mass K0\r
-  TH1F* fHistV0SelInvMassLambda;                       // Invariant mass Lambda\r
-  TH1F* fHistV0SelInvMassAntiLambda;                   // Invariant mass AntiLambda\r
-  TH2F* fHistV0SelArmenteros;                          // Armenteros plot\r
\r
-  TString fCentralityEstimator;      //"V0M","TRK","TKL","ZDC","FMD"\r
-  Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)\r
-  Double_t fCentralityPercentileMin;//centrality percentile min\r
-  Double_t fCentralityPercentileMax;//centrality percentile max\r
-  Double_t fImpactParameterMin;//impact parameter min (used for MC)\r
-  Double_t fImpactParameterMax;//impact parameter max (used for MC)\r
-\r
-  Bool_t fUseMultiplicity;//use the multiplicity cuts\r
-  Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
-  Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)\r
-  TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks\r
-\r
-  Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection\r
-\r
-  Double_t fVxMax;//vxmax\r
-  Double_t fVyMax;//vymax\r
-  Double_t fVzMax;//vzmax\r
-\r
-  Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs)\r
-\r
-  Double_t fPtMin;//only used for AODs\r
-  Double_t fPtMax;//only used for AODs\r
-  Double_t fEtaMin;//only used for AODs\r
-  Double_t fEtaMax;//only used for AODs\r
-\r
-  Double_t fDCAxyCut;//only used for AODs\r
-  Double_t fDCAzCut;//only used for AODs\r
-\r
-  Double_t fTPCchi2Cut;//only used for AODs\r
-  Int_t fNClustersTPCCut;//only used for AODs\r
-\r
\r
-  AliAnalysisTaskTriggeredBF(const AliAnalysisTaskTriggeredBF&); // not implemented\r
-  AliAnalysisTaskTriggeredBF& operator=(const AliAnalysisTaskTriggeredBF&); // not implemented\r
-  \r
-  ClassDef(AliAnalysisTaskTriggeredBF, 1); // example of analysis\r
-};\r
-\r
-// class used for io with AliBalance (taken from AliAnalysisTaskPhiCorrelations)\r
-class AliBFBasicParticle : public AliVParticle\r
-{ \r
-  public:\r
-  AliBFBasicParticle(Float_t eta, Float_t phi, Float_t pt, Short_t charge, Double_t correction)\r
-    : fEta(eta), fPhi(phi), fpT(pt), fCharge(charge), fCorrection(correction)\r
-    {\r
-    }\r
-    ~AliBFBasicParticle() {}\r
-    \r
-    // kinematics\r
-    virtual Double_t Px() const { AliFatal("Not implemented"); return 0; }\r
-    virtual Double_t Py() const { AliFatal("Not implemented"); return 0; }\r
-    virtual Double_t Pz() const { AliFatal("Not implemented"); return 0; }\r
-    virtual Double_t Pt() const { return fpT; }\r
-    virtual Double_t P() const { AliFatal("Not implemented"); return 0; }\r
-    virtual Bool_t   PxPyPz(Double_t[3]) const { AliFatal("Not implemented"); return 0; }\r
-\r
-    virtual Double_t Xv() const { AliFatal("Not implemented"); return 0; }\r
-    virtual Double_t Yv() const { AliFatal("Not implemented"); return 0; }\r
-    virtual Double_t Zv() const { AliFatal("Not implemented"); return 0; }\r
-    virtual Bool_t   XvYvZv(Double_t[3]) const { AliFatal("Not implemented"); return 0; }\r
-\r
-    virtual Double_t OneOverPt()  const { AliFatal("Not implemented"); return 0; }\r
-    virtual Double_t Phi()        const { return fPhi; }\r
-    virtual Double_t Theta()      const { AliFatal("Not implemented"); return 0; }\r
-\r
-\r
-    virtual Double_t E()          const { AliFatal("Not implemented"); return 0; }\r
-    virtual Double_t M()          const { AliFatal("Not implemented"); return 0; }\r
-    \r
-    virtual Double_t Eta()        const { return fEta; }\r
-    virtual Double_t Y()          const { AliFatal("Not implemented"); return 0; }\r
-    \r
-    virtual Short_t Charge()      const { return fCharge; }\r
-    virtual Int_t   GetLabel()    const { AliFatal("Not implemented"); return 0; }\r
-\r
-    virtual Double_t Correction()        const { return fCorrection; } //=============================correction\r
-    \r
-    // PID\r
-    virtual Int_t   PdgCode()     const { AliFatal("Not implemented"); return 0; }      \r
-    virtual const Double_t *PID() const { AliFatal("Not implemented"); return 0; }\r
-    \r
-  private:\r
-    Float_t fEta;      // eta\r
-    Float_t fPhi;      // phi\r
-    Float_t fpT;       // pT\r
-    Short_t fCharge;   // charge\r
-    Double_t fCorrection; //============================correction\r
-\r
-    ClassDef( AliBFBasicParticle, 1); // class which contains only quantities requires for this analysis to reduce memory consumption for event mixing\r
-};\r
-\r
-#endif\r
+#ifndef ALIANALYSISTASKTRIGGEREDBF_CXX
+#define ALIANALYSISTASKTRIGGEREDBF_CXX
+
+// Analysis task for the TriggeredBF code
+// Authors: Panos Cristakoglou@cern.ch, m.weber@cern.ch
+
+#include "AliLog.h"
+#include "AliAnalysisTaskSE.h"
+#include "AliBalanceTriggered.h"
+#include "AliPIDResponse.h"
+#include "AliPIDCombined.h"
+
+class TList;
+class TH1F;
+class TH2F;
+
+class AliBalanceTriggered;
+class AliEventPoolManager;
+
+
+class AliAnalysisTaskTriggeredBF : public AliAnalysisTaskSE {
+ public:
+  AliAnalysisTaskTriggeredBF(const char *name = "AliAnalysisTaskTriggeredBF");
+  virtual ~AliAnalysisTaskTriggeredBF(); 
+  
+  
+  virtual void   UserCreateOutputObjects();
+  virtual void   UserExec(Option_t *option);
+  virtual void   UserExecMix(Option_t*);
+  virtual void   FinishTaskOutput();
+  virtual void   Terminate(Option_t *);
+
+  void SetAnalysisObject(AliBalanceTriggered *const analysis) {
+    fBalance         = analysis;
+    }
+  void SetShufflingObject(AliBalanceTriggered *const analysisShuffled) {
+    fRunShuffling = kTRUE;
+    fShuffledBalance = analysisShuffled;
+  }
+  void SetMixingObject(AliBalanceTriggered *const analysisMixed) {
+    fRunMixing = kTRUE;
+    fMixedBalance = analysisMixed;
+  }
+  void SetMixingTracks(Int_t tracks) { fMixingTracks = tracks; }
+
+  void SetRunV0(Bool_t runV0 = kTRUE) { fRunV0 = runV0; }
+  void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {
+    fVxMax = vx;
+    fVyMax = vy;
+    fVzMax = vz;
+  }
+
+  //==============AOD analysis==============//
+  void SetAODtrackCutBit(Int_t bit){
+    nAODtrackCutBit = bit;
+  }
+
+  void SetKinematicsCutsAOD(Double_t ptmin, Double_t ptmax, Double_t etamin, Double_t etamax){
+    fPtMin  = ptmin;  fPtMax  = ptmax;
+    fEtaMin = etamin; fEtaMax = etamax;
+
+  }
+
+  void SetExtraDCACutsAOD(Double_t DCAxy, Double_t DCAz){
+    fDCAxyCut  = DCAxy;
+    fDCAzCut = DCAz;
+  }
+
+   void SetExtraTPCCutsAOD(Double_t maxTPCchi2, Int_t minNClustersTPC){
+    fTPCchi2Cut      = maxTPCchi2;
+    fNClustersTPCCut = minNClustersTPC;
+  }
+
+  //Centrality
+  void SetCentralityEstimator(const char* centralityEstimator) {fCentralityEstimator = centralityEstimator;}
+  const char* GetCentralityEstimator(void)  const              {return fCentralityEstimator;}
+  void SetCentralityPercentileRange(Double_t min, Double_t max) { 
+    fUseCentrality = kTRUE;
+    fCentralityPercentileMin=min;
+    fCentralityPercentileMax=max;
+  }
+  void SetImpactParameterRange(Double_t min, Double_t max) { 
+    fUseCentrality = kTRUE;
+    fImpactParameterMin=min;
+    fImpactParameterMax=max;
+  }
+
+  //multiplicity
+  void SetMultiplicityRange(Int_t min, Int_t max) {
+    fUseMultiplicity = kTRUE;
+    fNumberOfAcceptedTracksMin = min;
+    fNumberOfAcceptedTracksMax = max;}
+  
+  void UseOfflineTrigger() {fUseOfflineTrigger = kTRUE;}
+  
+
+ private:
+  Float_t    IsEventAccepted(AliVEvent* event);
+  TObjArray* GetAcceptedTracks(AliVEvent* event);
+  TObjArray* GetAcceptedV0s(AliVEvent* event);
+  TObjArray* GetShuffledTracks(TObjArray* tracks);
+
+  AliBalanceTriggered *fBalance; //TriggeredBF object
+  Bool_t fRunShuffling;//run shuffling or not
+  AliBalanceTriggered *fShuffledBalance; //TriggeredBF object (shuffled)
+  Bool_t fRunMixing;//run mixing or not
+  Int_t  fMixingTracks;//number of tracks to mix
+  AliBalanceTriggered *fMixedBalance; //TriggeredBF object (mixed)
+  AliEventPoolManager*     fPoolMgr;         //! event pool manager
+  Bool_t fRunV0;
+
+  AliPIDResponse       *fPIDResponse;     //! PID response object
+  AliPIDCombined       *fPIDCombined;     //! combined PID object
+
+  TList *fList; //fList object
+  TList *fListTriggeredBF; //fList object
+  TList *fListTriggeredBFS; //fList object (shuffling)
+  TList *fListTriggeredBFM; //fList object (mixing)
+  TList *fHistListPIDQA;  //! list of histograms
+  TList *fHistListV0; // list of V0 histograms
+
+  TH1F *fHistEventStats; //event stats
+  TH2F *fHistCentStats; //centrality stats
+  TH1F *fHistTriggerStats; //trigger stats
+  TH1F *fHistTrackStats; //Track filter bit stats
+  TH1F *fHistVx; //x coordinate of the primary vertex
+  TH1F *fHistVy; //y coordinate of the primary vertex
+  TH1F *fHistVz; //z coordinate of the primary vertex
+
+  TH2F *fHistClus;//number of clusters (QA histogram)
+  TH2F *fHistDCA;//DCA  (QA histogram)
+  TH1F *fHistChi2;//track chi2 (QA histogram)
+  TH1F *fHistPt;//transverse momentum (QA histogram)
+  TH1F *fHistEta;//pseudorapidity (QA histogram)
+  TH1F *fHistPhi;//phi (QA histogram)
+  TH1F *fHistPhiBefore;//phi before v2 afterburner (QA histogram)
+  TH1F *fHistPhiAfter;//phi after v2 afterburner (QA histogram)
+  TH2F *fHistV0M;//V0 multiplicities (QA histogram)
+  TH2F *fHistRefTracks;//reference track multiplicities (QA histogram)
+
+  // V0 histograms
+  TH1F    *fHistV0MultiplicityBeforeTrigSel;             //! V0 multiplicity distribution
+  TH1F    *fHistV0MultiplicityForTrigEvt;                //! V0 multiplicity distribution
+  TH1F    *fHistV0MultiplicityForSelEvt;                 //! V0 multiplicity distribution
+  TH1F    *fHistV0MultiplicityForSelEvtNoTPCOnly;        //! V0 multiplicity distribution
+  TH1F    *fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup;//! V0 multiplicity distribution
+  
+  TH1F    *fHistMultiplicityBeforeTrigSel;             //! multiplicity distribution    
+  TH1F    *fHistMultiplicityForTrigEvt;                //! multiplicity distribution
+  TH1F    *fHistMultiplicity;                          //! multiplicity distribution
+  TH1F    *fHistMultiplicityNoTPCOnly;                 //! multiplicity distribution
+  TH1F    *fHistMultiplicityNoTPCOnlyNoPileup;         //! multiplicity distribution
+
+  //before selection
+  TH1F* fHistV0InvMassK0;                           // Invariant mass K0
+  TH1F* fHistV0InvMassLambda;                       // Invariant mass Lambda
+  TH1F* fHistV0InvMassAntiLambda;                   // Invariant mass AntiLambda
+  TH2F* fHistV0Armenteros;                          // Armenteros plot
+
+  //after selection
+  TH1F* fHistV0SelInvMassK0;                           // Invariant mass K0
+  TH1F* fHistV0SelInvMassLambda;                       // Invariant mass Lambda
+  TH1F* fHistV0SelInvMassAntiLambda;                   // Invariant mass AntiLambda
+  TH2F* fHistV0SelArmenteros;                          // Armenteros plot
+  TString fCentralityEstimator;      //"V0M","TRK","TKL","ZDC","FMD"
+  Bool_t fUseCentrality;//use the centrality (PbPb) or not (pp)
+  Double_t fCentralityPercentileMin;//centrality percentile min
+  Double_t fCentralityPercentileMax;//centrality percentile max
+  Double_t fImpactParameterMin;//impact parameter min (used for MC)
+  Double_t fImpactParameterMax;//impact parameter max (used for MC)
+
+  Bool_t fUseMultiplicity;//use the multiplicity cuts
+  Int_t fNumberOfAcceptedTracksMin;//min. number of number of accepted tracks (used for the multiplicity dependence study - pp)
+  Int_t fNumberOfAcceptedTracksMax;//max. number of number of accepted tracks (used for the multiplicity dependence study - pp)
+  TH1F *fHistNumberOfAcceptedTracks;//hisot to store the number of accepted tracks
+
+  Bool_t fUseOfflineTrigger;//Usage of the offline trigger selection
+
+  Double_t fVxMax;//vxmax
+  Double_t fVyMax;//vymax
+  Double_t fVzMax;//vzmax
+
+  Int_t nAODtrackCutBit;//track cut bit from track selection (only used for AODs)
+
+  Double_t fPtMin;//only used for AODs
+  Double_t fPtMax;//only used for AODs
+  Double_t fEtaMin;//only used for AODs
+  Double_t fEtaMax;//only used for AODs
+
+  Double_t fDCAxyCut;//only used for AODs
+  Double_t fDCAzCut;//only used for AODs
+
+  Double_t fTPCchi2Cut;//only used for AODs
+  Int_t fNClustersTPCCut;//only used for AODs
+
+  AliAnalysisTaskTriggeredBF(const AliAnalysisTaskTriggeredBF&); // not implemented
+  AliAnalysisTaskTriggeredBF& operator=(const AliAnalysisTaskTriggeredBF&); // not implemented
+  
+  ClassDef(AliAnalysisTaskTriggeredBF, 1); // example of analysis
+};
+
+// class used for io with AliBalance (taken from AliAnalysisTaskPhiCorrelations)
+class AliBFBasicParticle : public AliVParticle
+{ 
+  public:
+  AliBFBasicParticle(Float_t eta, Float_t phi, Float_t pt, Short_t charge, Double_t correction)
+    : fEta(eta), fPhi(phi), fpT(pt), fCharge(charge), fCorrection(correction)
+    {
+    }
+    ~AliBFBasicParticle() {}
+    
+    // kinematics
+    virtual Double_t Px() const { AliFatal("Not implemented"); return 0; }
+    virtual Double_t Py() const { AliFatal("Not implemented"); return 0; }
+    virtual Double_t Pz() const { AliFatal("Not implemented"); return 0; }
+    virtual Double_t Pt() const { return fpT; }
+    virtual Double_t P() const { AliFatal("Not implemented"); return 0; }
+    virtual Bool_t   PxPyPz(Double_t[3]) const { AliFatal("Not implemented"); return 0; }
+
+    virtual Double_t Xv() const { AliFatal("Not implemented"); return 0; }
+    virtual Double_t Yv() const { AliFatal("Not implemented"); return 0; }
+    virtual Double_t Zv() const { AliFatal("Not implemented"); return 0; }
+    virtual Bool_t   XvYvZv(Double_t[3]) const { AliFatal("Not implemented"); return 0; }
+
+    virtual Double_t OneOverPt()  const { AliFatal("Not implemented"); return 0; }
+    virtual Double_t Phi()        const { return fPhi; }
+    virtual Double_t Theta()      const { AliFatal("Not implemented"); return 0; }
+
+
+    virtual Double_t E()          const { AliFatal("Not implemented"); return 0; }
+    virtual Double_t M()          const { AliFatal("Not implemented"); return 0; }
+    
+    virtual Double_t Eta()        const { return fEta; }
+    virtual Double_t Y()          const { AliFatal("Not implemented"); return 0; }
+    
+    virtual Short_t Charge()      const { return fCharge; }
+    virtual Int_t   GetLabel()    const { AliFatal("Not implemented"); return 0; }
+
+    virtual Double_t Correction()        const { return fCorrection; } //=============================correction
+    
+    // PID
+    virtual Int_t   PdgCode()     const { AliFatal("Not implemented"); return 0; }      
+    virtual const Double_t *PID() const { AliFatal("Not implemented"); return 0; }
+    
+  private:
+    Float_t fEta;      // eta
+    Float_t fPhi;      // phi
+    Float_t fpT;       // pT
+    Short_t fCharge;   // charge
+    Double_t fCorrection; //============================correction
+
+    ClassDef( AliBFBasicParticle, 1); // class which contains only quantities requires for this analysis to reduce memory consumption for event mixing
+};
+
+#endif