#ifndef ALIANALYSISTASKLAMBDANAOD_H #define ALIANALYSISTASKLAMBDANAOD_H /************************************************************************** * Author : Nicole Alice Martin (nicole.alice.martin@cern.ch) * * * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ //----------------------------------------------------------------- // AliAnalysisTaskLambdaNAOD class // task for the investigation of (anti-)lambda-n bound state // uses the V0 finders, based on AODs or ESDS //----------------------------------------------------------------- class TF1; class TH1F; class TH2F; class TH3F; class THnSparse; class TTree; class AliAODInputHandler; class AliAODEvent; class AliAODVertex; class AliAODv0; class AliESDtrackCuts; class AliESDInputHandler; class AliESDEvent; class AliESDVertex; class AliESDv0; #include #include "AliAnalysisTaskSE.h" #include "THnSparse.h" #include "AliStack.h" #include "AliVTrack.h" #define maxNofTracks 100000 class AliAnalysisTaskLambdaNAOD : public AliAnalysisTaskSE { public: AliAnalysisTaskLambdaNAOD(); AliAnalysisTaskLambdaNAOD(const char *name); virtual ~AliAnalysisTaskLambdaNAOD();// {} virtual void UserCreateOutputObjects(); virtual void UserExec(Option_t *option); virtual void Terminate(const Option_t*); Int_t Initialize(); Int_t SetupEvent(); void ResetEvent(); void SetAnalysisType (const char* analysisType = "ESD") { fAnalysisType = analysisType; } /** Types of pdgCode */ enum PdgCodeType_t { kPDGPionPlus, kPDGPionMinus, kPDGProton, kPDGAntiProton, kPDGDeuteron, kPDGAntiDeuteron, kPDGHelium3, kPDGAntiHelium3, kPDGLambda, kPDGAntiLambda, kPDGLambdaNeutron, kPDGAntiLambdaNeutron, kPDGHypertriton, kPDGAntiHypertriton, kPdgCodeMax // Number of enum entries }; /** Types of Mass */ enum MassType_t { kMassPion, kMassProton, kMassDeuteron, kMassTriton, kMassHelium3, kMassMax // Number of enum entries }; /** Array of types of pdgCodes */ static const Int_t fgkPdgCode[]; //! transient /** Array of types of pdgCodes */ static const Double_t fgkMass[]; //! transient private: TString fAnalysisType; // "ESD" or "AOD" analysis type AliInputEventHandler *fEventHandler; //for ESDs or AODs AliESDtrackCuts *fESDtrackCutsV0; // basic cut variables for v0's AliESDpid *fESDpid; // basic TPC object for n-sigma cuts AliPIDResponse *fPIDResponse; //! PID response object // TTree *fTreeV0; //! TH1F *fHistCentralityClass10; //! histo to look at the centrality distribution TH1F *fHistCentralityPercentile; //! histo to look at the centrality distribution TH1F *fHistTriggerStat; //! Trigger statistics TH1F *fHistTriggerStatAfterEventSelection; //! Trigger statistics TH1F *fHistLambdaNeutronPtGen; //! for MC TH1F *fHistLambdaNeutronPtGenMinBias; //! for MC TH1F *fHistLambdaNeutronPtGenCentral; //! for MC TH1F *fHistLambdaNeutronPtGenSemiCentral; //! for MC TH1F *fHistAntiLambdaNeutronPtGen; //! for MC TH1F *fHistAntiLambdaNeutronPtGenMinBias; //! for MC TH1F *fHistAntiLambdaNeutronPtGenCentral; //! for MC TH1F *fHistAntiLambdaNeutronPtGenSemiCentral; //! for MC TH1F *fHistLambdaNeutronInvaMassGen; //! for MC TH1F *fHistAntiLambdaNeutronInvaMassGen; //! for MC TH1F *fHistLambdaNeutronDecayLengthGen; //! for MC TH1F *fHistAntiLambdaNeutronDecayLengthGen; //! for MC TH1F *fHistLambdaNeutronPtAso; //! for MC TH1F *fHistLambdaNeutronPtAsoCuts; //! for MC TH1F *fHistAntiLambdaNeutronPtAso; //! for MC TH1F *fHistAntiLambdaNeutronPtAsoCuts; //! for MC TH1F *fHistLambdaNeutronInvaMassAso; //! for MC TH1F *fHistAntiLambdaNeutronInvaMassAso; //! for MC TH1F *fHistLambdaNeutronDecayLengthAso; //! for MC TH1F *fHistAntiLambdaNeutronDecayLengthAso; //! for MC TH2F *fof; //! debug histo for OnTheFlyStatus TH2F *fHistArmenterosPodolanskiDeuteronPion; //! TH2F *fHistArmenterosPodolanskiAntiDeuteronPion;//! TH3F *fHistDeDxQA; //! histo for a QA dE/dx Int_t fNTriggers; //! N Triggers used Bool_t fMCtrue; //! flag if real data or MC is processed Bool_t fOnlyQA; //! flag if only QA histograms should be filled Bool_t fTriggerFired[5]; //! TriggerFired 0: MB | 1: CE | 2: SC | 3: EJE | 4: EGA //Tree variables //AliAODv0 *fV0object; //! Tree variable Int_t fItrk; //! Tree variable Int_t fV0finder[maxNofTracks]; //! Tree variable Int_t fkMB[maxNofTracks]; //! Tree variable Int_t fkCentral[maxNofTracks]; //! Tree variable Int_t fkSemiCentral[maxNofTracks]; //! Tree variable Int_t fkEMCEJE[maxNofTracks]; //! Tree variable Int_t fkEMCEGA[maxNofTracks]; //! Tree variable Int_t fCentralityClass10[maxNofTracks]; //! Tree variable Int_t fCentralityPercentile[maxNofTracks]; //! Tree variable Int_t fMultiplicity[maxNofTracks]; //! Tree variable Int_t fRefMultiplicity[maxNofTracks]; //! Tree variable Double_t fPtotN[maxNofTracks]; //! Tree variable Double_t fPtotP[maxNofTracks]; //! Tree variable Double_t fMotherPt[maxNofTracks]; //! Tree variable Double_t fdEdxN[maxNofTracks]; //! Tree variable Double_t fdEdxP[maxNofTracks]; //! Tree variable Double_t fSignN[maxNofTracks]; //! Tree variable Double_t fSignP[maxNofTracks]; //! Tree variable Double_t fSigmadEdxPionPos[maxNofTracks]; //! Tree variable Double_t fSigmadEdxPionNeg[maxNofTracks]; //! Tree variable Float_t fDCAv0[maxNofTracks]; //! Tree variable Float_t fCosinePAv0[maxNofTracks]; //! Tree variable Float_t fDecayRadiusTree[maxNofTracks]; //! Tree variable Double_t fInvaMassDeuteronPionTree[maxNofTracks]; //! Tree variable Int_t fChargeComboDeuteronPionTree[maxNofTracks]; //! Tree variable Bool_t fIsCorrectlyAssociated[maxNofTracks]; //! Tree variable Double_t fAmenterosAlphaTree[maxNofTracks]; //! Tree variable Double_t fAmenterosQtTree[maxNofTracks]; //! Tree variable Int_t fRotationTree[maxNofTracks]; //! Tree variable Double_t fImpactParameterDeuteronPos[maxNofTracks]; //! Tree variablen Double_t fImpactParameterDeuteronNeg[maxNofTracks]; //! Tree variablen Double_t fImpactParameterPionPos[maxNofTracks]; //! Tree variable Double_t fImpactParameterPionNeg[maxNofTracks]; //! Tree variable Double_t fImpactParameterDeuteronPosAliKF[maxNofTracks]; //! Tree variablen Double_t fImpactParameterDeuteronNegAliKF[maxNofTracks]; //! Tree variablen Double_t fImpactParameterPionPosAliKF[maxNofTracks]; //! Tree variable Double_t fImpactParameterPionNegAliKF[maxNofTracks]; //! Tree variable UShort_t fMinNClustersTPCPos[maxNofTracks]; //! Tree variable UShort_t fMinNClustersTPCNeg[maxNofTracks]; //! Tree variable Double_t fMaxChi2PerClusterTPCPos[maxNofTracks]; //! Tree variable Double_t fMaxChi2PerClusterTPCNeg[maxNofTracks]; //! Tree variable TObjArray *fOutputContainer; //! output data container for the histogramms // void BinLogAxis(const THnSparse *h, Int_t axisNumber); //define function for log axis for search for Anti-Alpha candidates // /** Check if event is triggred */ Bool_t IsTriggered(); Bool_t DeuteronPID(AliVTrack *trackP, AliVTrack *trackN, Double_t ptotP, Double_t ptotN, Int_t runNumber, Bool_t isDeuteron[3]); Bool_t PionPID(AliVTrack *trackP, AliVTrack *trackN, Double_t ptotP, Double_t ptotN, Int_t runNumber, Bool_t isPion[2]); Bool_t TrackCuts(AliVTrack *track, Bool_t testTrackCuts); //Bool_t FilterBit(AliVTrack *track, Bool_t testFilterBit); Double_t MomentumInnerParam(AliVTrack *track, Double_t ptot); UShort_t TPCclusters(AliVTrack *track, UShort_t numberOfTPCclusters); Double_t TPCchi2(AliVTrack *track, Double_t numberOfChi2clustersTPC, UShort_t numberOfTPCclusters); Double_t ImpactParameter(AliVTrack *track, Double_t dcaToVertex); void MCGenerated(AliStack* stack, Int_t multiplicity); //! function to loop over the genrated particles void MCTwoBodyDecay (AliStack* stack, const TParticle *tparticleMother, Long_t PDGMother, Long_t PDGFirstDaughter, Long_t PDGSecondDaughter, Double_t massFirstDaughter, Double_t massSecondDaughter, Int_t multiplicity); //! function to calculate the invariant mass of two daughters and the pt of the mother //void RotateKFParticle(AliKFParticle * kfParticle,Double_t angle, const AliVEvent * const ev); AliAnalysisTaskLambdaNAOD(const AliAnalysisTaskLambdaNAOD&); // not implemented AliAnalysisTaskLambdaNAOD& operator=(const AliAnalysisTaskLambdaNAOD&); // not implemented // ClassDef(AliAnalysisTaskLambdaNAOD, 1); // example of analysis }; #endif