#include "AliAnalysisTaskSE.h"
#include <vector>
#include "AliV0Reader.h"
+#include "AliGammaConversionBGHandler.h"
+#include "TRandom3.h"
+#include "TF1.h"
+#include "AliMultiplicity.h"
//#include "AliCFManager.h" // for CF
//#include "AliCFContainer.h" // for CF
+#include "AliAODConversionMother.h"
-class AliGammaConversionAODObject;
+
+class AliAODPWG4Particle;
+class AliAODConversionPhoton;
+class AliAODConversionMother;
+class AliKFConversionPhoton;
+class AliKFConversionMother;
class TNtuple;
class AliGammaConversionHistograms;
class AliESDv0;
class TList;
class AliStack;
class AliESDtrackCuts;
+class AliTriggerAnalysis;
class AliCFManager; // for CF
class AliCFContainer; // for CF
+class TRandom3;
+class TF1;
class AliAnalysisTaskGammaConversion : public AliAnalysisTaskSE
{
public:
+ typedef enum { kProcSD, kProcDD, kProcND, kProcUnknown, kNProcs } ProcType_t;
AliAnalysisTaskGammaConversion();
AliAnalysisTaskGammaConversion(const char* name);
virtual ~AliAnalysisTaskGammaConversion() ;// virtual destructor
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *option);
//virtual void ConnectInputData(Option_t * option);
-
+ void CheckMesonProcessTypeEventQuality(Int_t evtQ);
+ Int_t GetProcessType(const AliMCEvent * mcEvt) ;
void ProcessMCData();
void ProcessV0sNoCut();
void ProcessV0s();
void ProcessGammasForNeutralMesonAnalysis();
void ProcessGammasForOmegaMesonAnalysis();
- void ProcessConvPHOSGammasForNeutralMesonAnalysis();
- void RecalculateV0ForGamma();
+ // void ProcessConvPHOSGammasForNeutralMesonAnalysis();
+// void RecalculateV0ForGamma();
// for CF
void SetCFManager(AliCFManager * const io) {fCFManager = io;};
AliCFManager *GetCFManager() const {return fCFManager;}
void SetAODBranchName(TString name) {fAODBranchName = name ;}
void SetForceAOD(Bool_t forceAOD ) { fKFForceAOD = forceAOD; }
void FillAODWithConversionGammas();
+ void AddGammaToAOD(AliKFConversionPhoton * kfParticle);
+ // void AddPionToAOD(AliKFConversionMother * kfParticle);
+ // void AddOmegaToAOD(AliKFParticle * kfParticle, Int_t daughter1, Int_t daughter2);
+ void TagDaughter(Int_t gammaIndex);
+
// end AOD
- static Bool_t IsGoodImpPar(AliESDtrack *const track);
+ static Bool_t IsGoodImpPar(const AliESDtrack *const track);
// for GammaJetAnalysis
void ProcessGammasForGammaJetAnalysis();
void CalculateBackground();
void SetWriteNtuple(Bool_t writeNtuple){fWriteNtuple = writeNtuple;}
void FillNtuple();
- Double_t GetMCOpeningAngle(TParticle* const daughter0, TParticle* const daughter1) const;
+ Double_t GetMCOpeningAngle(const TParticle* const daughter0,const TParticle* const daughter1) const;
void CheckV0Efficiency();
void SetDeltaAODFileName(TString fn) { fKFDeltaAODFileName = fn; };
-
+ void SetCreateAOD(Bool_t doAod) { fKFCreateAOD = doAod; };
+ TString GetDeltaAODFileName() const { return fKFDeltaAODFileName; };
//////////////////Chi_c Analysis////////////////////////////
- void GetPID(AliESDtrack *track, Stat_t &pid, Stat_t &weight);
- double GetSigmaToVertex(AliESDtrack* t);
+ void GetPID(const AliESDtrack *track, Stat_t &pid, Stat_t &weight);
+ double GetSigmaToVertex(const AliESDtrack* t);
void ElectronBackground(TString hBg, TClonesArray e);
void FillAngle(TString histoName,TClonesArray const tlVeNeg, TClonesArray const tlVePos);
void FillElectronInvMass(TString histoName, TClonesArray const negativeElectron, TClonesArray const positiveElectron);
///////////////////////////////////////////////////////////////
void SetDoCF(Bool_t flag){fDoCF = flag;}
-
+
+ void SetUseChargedTracksMultiplicityForBG(Bool_t flag){fUseTrackMultiplicityForBG = flag;}
+
+ void SetMoveParticleAccordingToVertex(Bool_t flag){fMoveParticleAccordingToVertex = flag;}
+
+ void MoveParticleAccordingToVertex(AliKFParticle * particle,const AliGammaConversionBGHandler::GammaConversionVertex *vertex);
+
+ void SetApplyChi2Cut(Bool_t flag){fApplyChi2Cut = flag;}
+
+ void SetDoRotation(Bool_t flag){fDoRotation = flag;}
+
+ void SetPMDegreesBG(Int_t deg){fNDegreesPMBackground=deg;}
+
+ void SetNumberOfRotationsBG(Int_t nRot){fNRandomEventsForBG=nRot;}
+
+ void RotateKFParticle(AliKFParticle * kfParticle,Double_t angle);
+
+ void SetCheckBGProbability(Bool_t flag){fCheckBGProbability = flag;}
+
+ void SetRemovePileUp(Bool_t removePileUp) { fRemovePileUp = removePileUp; }
+
+ void SetSelectV0AND(Bool_t selectV0AND) { fSelectV0AND = selectV0AND; }
+ void SetUseMultiplicity(Int_t useMultiplicity) {fUseMultiplicity=useMultiplicity;}
+ void SetUseMultiplicityBin(Int_t useMultiplicityBin) {fUseMultiplicityBin=useMultiplicityBin;}
+ void SetUseHBTMultiplicity(Int_t useHBTMultiplicity) {fUseHBTMultiplicity=useHBTMultiplicity;}
+ void SetUseHBTMultiplicityBin(Int_t useHBTMultiplicityBin) {fUseHBTMultiplicityBin=useHBTMultiplicityBin;}
+
+ Int_t CalculateMultiplicityBin();
+ void SetUseCentrality(Int_t useCentrality) {fUseCentrality=useCentrality;}
+ void SetUseCentralityBin(Int_t useCentralityBin) {fUseCentralityBin=useCentralityBin;}
+
+
+
+
private:
AliAnalysisTaskGammaConversion(const AliAnalysisTaskGammaConversion&); // Not implemented
AliAnalysisTaskGammaConversion& operator=(const AliAnalysisTaskGammaConversion&); // Not implemented
- /// Add reconstructed pions to aod
- void AddPionToAOD(AliKFParticle * pionkf, Double_t mass, Int_t daughter1, Int_t daughter2);
- void AddOmegaToAOD(AliKFParticle * pionkf, Double_t mass, Int_t daughter1, Int_t daughter2);
// for CF
enum{
kStepLikeSign = 3,
kStepTPCRefit = 4,
kStepKinks = 5,
- kStepdEdx_electronselection = 6,
- kStepdEdx_pionrejection = 7,
+ kStepdEdxElectronSelection = 6,
+ kStepdEdxPpionRejection = 7,
kStepNContributors = 8,
kStepTPCPID = 9,
kStepR = 10,
TClonesArray * fPreviousEventTLVPosElectronTClone; //! transient
// vector<AliKFParticle> fKFReconstructedGammas; // vector containing all reconstructed gammas
- vector<Int_t> fElectronv1; // vector containing index of electron 1
- vector<Int_t> fElectronv2; // vector containing index of electron 2
-
- vector<Int_t> fGammav1; // vector containing index of gamma 1
- vector<Int_t> fGammav2; // vector containing index of gamma 2
-
- vector<Int_t> fElectronRecalculatedv1; // vector containing index of electron 1
- vector<Int_t> fElectronRecalculatedv2; // vector containing index of electron 2
// AliESDpid * fESDpid; // esd pid
Bool_t fDoCF; //! transient
TClonesArray * fAODGamma; //TClonesArray for gammas to put in AOD
- TClonesArray * fAODPi0; //TTClonesArray for Pi0s to put in AOD
- TClonesArray * fAODOmega; //TTClonesArray for omegas to put in AOD
+ //TClonesArray * fAODPi0; //TTClonesArray for Pi0s to put in AOD
+ //TClonesArray * fAODOmega; //TTClonesArray for omegas to put in AOD
TString fAODBranchName; // New AOD branch name
+ Bool_t fKFCreateAOD; //Create the AOD tclones? (regardless if storing or not)
+
Bool_t fKFForceAOD; //Set the Analysis Manager FillAOD variable to true every event
TString fKFDeltaAODFileName; //! File name for delta AOD (if any)
Bool_t fDoNeutralMesonV0MCCheck; //flag
-
- vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
-
- ClassDef(AliAnalysisTaskGammaConversion, 9); // Analysis task for gamma conversions
+ Bool_t fUseTrackMultiplicityForBG; //flag
+ Bool_t fMoveParticleAccordingToVertex; //flag
+ Bool_t fApplyChi2Cut; //flag
+ Int_t fNRandomEventsForBG; //number of random events to use in rotation method
+ Int_t fNDegreesPMBackground; // number of degree window to rotate particles for rotation method
+ Bool_t fDoRotation; //flag
+ Bool_t fCheckBGProbability; //flag
+// vector<Int_t>fKFReconstructedGammasV0Index; // index of the reconstructed v0s
+ Bool_t fRemovePileUp; // Remove Pile Up
+ Bool_t fSelectV0AND; // Select V0AND
+ AliTriggerAnalysis *fTriggerAnalysis; //! Trigger Analysis for Normalisation
+ Int_t fMultiplicity;
+ Int_t fUseMultiplicity;
+ Int_t fUseMultiplicityBin;
+ Int_t fUseHBTMultiplicity;
+ Int_t fUseHBTMultiplicityBin;
+ Int_t fUseCentrality;
+ Int_t fUseCentralityBin;
+ TRandom3 fRandom;
+ ClassDef(AliAnalysisTaskGammaConversion, 20); // Analysis task for gamma conversions
};
#endif //ALIANALYSISTASKGAMMA_H