ROOT logo
#ifndef ALIANALYSISTASKSELC2V0BACHELOR_H
#define ALIANALYSISTASKSELC2V0BACHELOR_H
/**************************************************************************
 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * 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.                  *
 **************************************************************************/

/* $Id$ */ 

#include "TROOT.h"
#include "TSystem.h"

#include "AliAnalysisTaskSE.h"
#include "AliAODEvent.h"
#include "AliPID.h"
#include "AliAODTrack.h"
#include "AliRDHFCutsLctoV0.h"
#include "AliNormalizationCounter.h"

class TH1F;
class TClonesArray;
class AliAODRecoCascade;

class AliAnalysisTaskSELc2V0bachelor : public AliAnalysisTaskSE 
{
  
 public:
  
  AliAnalysisTaskSELc2V0bachelor();
  AliAnalysisTaskSELc2V0bachelor(const Char_t* name, AliRDHFCutsLctoV0* cuts,
				 Bool_t useOnTheFly=kFALSE, Bool_t writeVariableTree=kTRUE, Bool_t additionalChecks=kFALSE, Bool_t trackRotation=kFALSE);
  virtual ~AliAnalysisTaskSELc2V0bachelor();

  // Implementation of interface methods  
  virtual void UserCreateOutputObjects();
  virtual void Init();
  virtual void LocalInit() {Init();}
  virtual void UserExec(Option_t *option);
  virtual void Terminate(Option_t *option);
 
  // histos
  void FillLc2pK0Sspectrum(AliAODRecoCascadeHF *part, Int_t isLc,
			   Int_t &nSelectedAnal, AliRDHFCutsLctoV0 *cutsAnal,
			   TClonesArray *mcArray);

  void MakeAnalysisForLc2prK0S(TClonesArray *arrayLctopK0S,
			       TClonesArray *mcArray,
			       Int_t &nSelectedAnal, AliRDHFCutsLctoV0 *cutsAnal);
 
  // set MC usage
  void SetMC(Bool_t theMCon) {fUseMCInfo = theMCon;}
  Bool_t GetMC() const {return fUseMCInfo;}

  // set flag for additional checks
  void SetAdditionalChecks(Bool_t additionalChecks) {fAdditionalChecks = additionalChecks;}
  Bool_t GetAdditionalChecks() const {return fAdditionalChecks;}

  void FillArmPodDistribution(AliAODRecoDecay *vZero,TString histoTitle, Bool_t isCandidateSelectedCuts, Bool_t isBachelorID);

  void SetK0SAnalysis(Bool_t a) {fIsK0SAnalysis=a;}
  Bool_t GetK0SAnalysis() const {return fIsK0SAnalysis;}

  void SetUseOnTheFlyV0(Bool_t a) { fUseOnTheFlyV0=a; }
  Bool_t GetUseOnTheFlyV0() { return fUseOnTheFlyV0; }

  Int_t MatchToMClabelC(AliAODRecoCascadeHF *candidate,TClonesArray *mcArray);


  void SetNRotations(Int_t nRot=9) { fNRotations=nRot; }
  Int_t GetNRotations() { return fNRotations; }

  void SetPtMinToFillTheTree(Double_t pTmin=  0.) { fPtMinToFillTheTree=pTmin; }
  void SetPtMaxToFillTheTree(Double_t pTmax=999.) { fPtMaxToFillTheTree=pTmax; }
  Double_t GetPtMinToFillTheTree() { return fPtMinToFillTheTree; }
  Double_t GetPtMaxToFillTheTree() { return fPtMaxToFillTheTree; }

  void SetMinAngleForRot(Double_t min=5.*TMath::Pi()/6.) { fMinAngleForRot=min; }
  void SetMaxAngleForRot(Double_t max=7.*TMath::Pi()/6.) { fMaxAngleForRot=max; }
  Double_t GetMinAngleForRot() { return fMinAngleForRot; }
  Double_t GetMaxAngleForRot() { return fMaxAngleForRot; }

 private:
  
  void CheckEventSelection(AliAODEvent *aodEvent);
  void CheckEventSelectionWithCandidates(AliAODEvent *aodEvent);
  void CheckCandidatesAtDifferentLevels(AliAODRecoCascadeHF *part,AliRDHFCutsLctoV0* cutsAnal);
  void FillTheTree(AliAODRecoCascadeHF *part, AliRDHFCutsLctoV0 *cutsAnal, TClonesArray *mcArray, Int_t isLc);
  void DefineTreeVariables();

  Int_t MatchToMC(AliAODRecoCascadeHF *lc2bacV0,
		  Int_t *pdgDgLc2bacV0, Int_t *pdgDgV0,
		  TClonesArray *mcArray);

  Int_t SearchLcDaughter(TClonesArray *arrayMC, Int_t iii);

  void DefineGeneralHistograms();
  void DefineAnalysisHistograms();
  void DefineK0SHistos();
  void FillAnalysisHistograms(AliAODRecoCascadeHF *part, AliRDHFCutsLctoV0 *cutsAnal, TString appendthis);
  void TrackRotation(AliRDHFCutsLctoV0 *cutsAnal, AliAODRecoCascadeHF *part, TString appendthis);

  AliAnalysisTaskSELc2V0bachelor(const AliAnalysisTaskSELc2V0bachelor &source);
  AliAnalysisTaskSELc2V0bachelor& operator=(const AliAnalysisTaskSELc2V0bachelor& source); 
  
  Double_t Det(Double_t a00,Double_t a01,
	       Double_t a10,Double_t a11) const;
  Double_t Det(Double_t a00,Double_t a01,Double_t a02,
	       Double_t a10,Double_t a11,Double_t a12,
	       Double_t a20,Double_t a21,Double_t a22) const;
  Double_t PropagateToDCA(AliAODv0 *v, AliAODTrack *bachelor, Double_t b,
			  Double_t &xVtxLc, Double_t &yVtxLc, Double_t &zVtxLc,
			  Double_t &pxVtxLc, Double_t &pyVtxLc, Double_t &pzVtxLc);

  Double_t GetAlpha(Double_t xyz[3],Double_t pxpypz[3]);

  Int_t SearchForCommonMother(TClonesArray *mcArray,
			      Int_t dgLabels[10],Int_t ndg,
			      Int_t &ndgCk, Int_t *pdgDg, Int_t &labelMother, Int_t &nDauCand) const;

  Bool_t fUseMCInfo;          // Use MC info
  TList *fOutput;             // User output slot 1 // general histos
  TList *fOutputAll;          // User output slot 4 // histos without pid and cut on V0
  TList *fOutputPIDBach;      // User output slot 5 // histos with PID on Bachelor

  TH1F *fCEvents;                    // Histogram to check selected events
  Bool_t fIsK0SAnalysis;             // switch between Lpi and K0Sp
  AliNormalizationCounter *fCounter; // AliNormalizationCounter on output slot 2
  AliRDHFCutsLctoV0 *fAnalCuts;      // Cuts - sent to output slot 3
  //TList *fListCuts;                  // list of cuts
  Bool_t fUseOnTheFlyV0;             // flag to analyze also on-the-fly V0 candidates
  Bool_t fIsEventSelected;           // flag for event selected

  Bool_t    fWriteVariableTree;       // flag to decide whether to write the candidate variables on a tree variables
  TTree    *fVariablesTree;           //! tree of the candidate variables after track selection on output slot 4
  Float_t *fCandidateVariables;       //! variables to be written to the tree
  AliAODVertex *fVtx1;                // primary vertex
  Float_t fBzkG;                      // magnetic field value [kG]
  Bool_t fAdditionalChecks;           // flag to fill additional histograms

  Bool_t fTrackRotation;              // flag to check track rotation
  TList *fOutputPIDBachTR;            // User output slot 6 // histos with PID on Bachelor and track rotation

  Double_t fMinAngleForRot;//=5*TMath::Pi()/6;
  Double_t fMaxAngleForRot;//=7*TMath::Pi()/6;
  Double_t fMinMass;//=mLcPDG-0.250;
  Double_t fMaxMass;//=mLcPDG+0.250;
  Int_t fNRotations;//=9;
  Double_t fPtMinToFillTheTree;//0.
  Double_t fPtMaxToFillTheTree;//999.

  ClassDef(AliAnalysisTaskSELc2V0bachelor,7); // class for Lc->p K0
};

#endif

 AliAnalysisTaskSELc2V0bachelor.h:1
 AliAnalysisTaskSELc2V0bachelor.h:2
 AliAnalysisTaskSELc2V0bachelor.h:3
 AliAnalysisTaskSELc2V0bachelor.h:4
 AliAnalysisTaskSELc2V0bachelor.h:5
 AliAnalysisTaskSELc2V0bachelor.h:6
 AliAnalysisTaskSELc2V0bachelor.h:7
 AliAnalysisTaskSELc2V0bachelor.h:8
 AliAnalysisTaskSELc2V0bachelor.h:9
 AliAnalysisTaskSELc2V0bachelor.h:10
 AliAnalysisTaskSELc2V0bachelor.h:11
 AliAnalysisTaskSELc2V0bachelor.h:12
 AliAnalysisTaskSELc2V0bachelor.h:13
 AliAnalysisTaskSELc2V0bachelor.h:14
 AliAnalysisTaskSELc2V0bachelor.h:15
 AliAnalysisTaskSELc2V0bachelor.h:16
 AliAnalysisTaskSELc2V0bachelor.h:17
 AliAnalysisTaskSELc2V0bachelor.h:18
 AliAnalysisTaskSELc2V0bachelor.h:19
 AliAnalysisTaskSELc2V0bachelor.h:20
 AliAnalysisTaskSELc2V0bachelor.h:21
 AliAnalysisTaskSELc2V0bachelor.h:22
 AliAnalysisTaskSELc2V0bachelor.h:23
 AliAnalysisTaskSELc2V0bachelor.h:24
 AliAnalysisTaskSELc2V0bachelor.h:25
 AliAnalysisTaskSELc2V0bachelor.h:26
 AliAnalysisTaskSELc2V0bachelor.h:27
 AliAnalysisTaskSELc2V0bachelor.h:28
 AliAnalysisTaskSELc2V0bachelor.h:29
 AliAnalysisTaskSELc2V0bachelor.h:30
 AliAnalysisTaskSELc2V0bachelor.h:31
 AliAnalysisTaskSELc2V0bachelor.h:32
 AliAnalysisTaskSELc2V0bachelor.h:33
 AliAnalysisTaskSELc2V0bachelor.h:34
 AliAnalysisTaskSELc2V0bachelor.h:35
 AliAnalysisTaskSELc2V0bachelor.h:36
 AliAnalysisTaskSELc2V0bachelor.h:37
 AliAnalysisTaskSELc2V0bachelor.h:38
 AliAnalysisTaskSELc2V0bachelor.h:39
 AliAnalysisTaskSELc2V0bachelor.h:40
 AliAnalysisTaskSELc2V0bachelor.h:41
 AliAnalysisTaskSELc2V0bachelor.h:42
 AliAnalysisTaskSELc2V0bachelor.h:43
 AliAnalysisTaskSELc2V0bachelor.h:44
 AliAnalysisTaskSELc2V0bachelor.h:45
 AliAnalysisTaskSELc2V0bachelor.h:46
 AliAnalysisTaskSELc2V0bachelor.h:47
 AliAnalysisTaskSELc2V0bachelor.h:48
 AliAnalysisTaskSELc2V0bachelor.h:49
 AliAnalysisTaskSELc2V0bachelor.h:50
 AliAnalysisTaskSELc2V0bachelor.h:51
 AliAnalysisTaskSELc2V0bachelor.h:52
 AliAnalysisTaskSELc2V0bachelor.h:53
 AliAnalysisTaskSELc2V0bachelor.h:54
 AliAnalysisTaskSELc2V0bachelor.h:55
 AliAnalysisTaskSELc2V0bachelor.h:56
 AliAnalysisTaskSELc2V0bachelor.h:57
 AliAnalysisTaskSELc2V0bachelor.h:58
 AliAnalysisTaskSELc2V0bachelor.h:59
 AliAnalysisTaskSELc2V0bachelor.h:60
 AliAnalysisTaskSELc2V0bachelor.h:61
 AliAnalysisTaskSELc2V0bachelor.h:62
 AliAnalysisTaskSELc2V0bachelor.h:63
 AliAnalysisTaskSELc2V0bachelor.h:64
 AliAnalysisTaskSELc2V0bachelor.h:65
 AliAnalysisTaskSELc2V0bachelor.h:66
 AliAnalysisTaskSELc2V0bachelor.h:67
 AliAnalysisTaskSELc2V0bachelor.h:68
 AliAnalysisTaskSELc2V0bachelor.h:69
 AliAnalysisTaskSELc2V0bachelor.h:70
 AliAnalysisTaskSELc2V0bachelor.h:71
 AliAnalysisTaskSELc2V0bachelor.h:72
 AliAnalysisTaskSELc2V0bachelor.h:73
 AliAnalysisTaskSELc2V0bachelor.h:74
 AliAnalysisTaskSELc2V0bachelor.h:75
 AliAnalysisTaskSELc2V0bachelor.h:76
 AliAnalysisTaskSELc2V0bachelor.h:77
 AliAnalysisTaskSELc2V0bachelor.h:78
 AliAnalysisTaskSELc2V0bachelor.h:79
 AliAnalysisTaskSELc2V0bachelor.h:80
 AliAnalysisTaskSELc2V0bachelor.h:81
 AliAnalysisTaskSELc2V0bachelor.h:82
 AliAnalysisTaskSELc2V0bachelor.h:83
 AliAnalysisTaskSELc2V0bachelor.h:84
 AliAnalysisTaskSELc2V0bachelor.h:85
 AliAnalysisTaskSELc2V0bachelor.h:86
 AliAnalysisTaskSELc2V0bachelor.h:87
 AliAnalysisTaskSELc2V0bachelor.h:88
 AliAnalysisTaskSELc2V0bachelor.h:89
 AliAnalysisTaskSELc2V0bachelor.h:90
 AliAnalysisTaskSELc2V0bachelor.h:91
 AliAnalysisTaskSELc2V0bachelor.h:92
 AliAnalysisTaskSELc2V0bachelor.h:93
 AliAnalysisTaskSELc2V0bachelor.h:94
 AliAnalysisTaskSELc2V0bachelor.h:95
 AliAnalysisTaskSELc2V0bachelor.h:96
 AliAnalysisTaskSELc2V0bachelor.h:97
 AliAnalysisTaskSELc2V0bachelor.h:98
 AliAnalysisTaskSELc2V0bachelor.h:99
 AliAnalysisTaskSELc2V0bachelor.h:100
 AliAnalysisTaskSELc2V0bachelor.h:101
 AliAnalysisTaskSELc2V0bachelor.h:102
 AliAnalysisTaskSELc2V0bachelor.h:103
 AliAnalysisTaskSELc2V0bachelor.h:104
 AliAnalysisTaskSELc2V0bachelor.h:105
 AliAnalysisTaskSELc2V0bachelor.h:106
 AliAnalysisTaskSELc2V0bachelor.h:107
 AliAnalysisTaskSELc2V0bachelor.h:108
 AliAnalysisTaskSELc2V0bachelor.h:109
 AliAnalysisTaskSELc2V0bachelor.h:110
 AliAnalysisTaskSELc2V0bachelor.h:111
 AliAnalysisTaskSELc2V0bachelor.h:112
 AliAnalysisTaskSELc2V0bachelor.h:113
 AliAnalysisTaskSELc2V0bachelor.h:114
 AliAnalysisTaskSELc2V0bachelor.h:115
 AliAnalysisTaskSELc2V0bachelor.h:116
 AliAnalysisTaskSELc2V0bachelor.h:117
 AliAnalysisTaskSELc2V0bachelor.h:118
 AliAnalysisTaskSELc2V0bachelor.h:119
 AliAnalysisTaskSELc2V0bachelor.h:120
 AliAnalysisTaskSELc2V0bachelor.h:121
 AliAnalysisTaskSELc2V0bachelor.h:122
 AliAnalysisTaskSELc2V0bachelor.h:123
 AliAnalysisTaskSELc2V0bachelor.h:124
 AliAnalysisTaskSELc2V0bachelor.h:125
 AliAnalysisTaskSELc2V0bachelor.h:126
 AliAnalysisTaskSELc2V0bachelor.h:127
 AliAnalysisTaskSELc2V0bachelor.h:128
 AliAnalysisTaskSELc2V0bachelor.h:129
 AliAnalysisTaskSELc2V0bachelor.h:130
 AliAnalysisTaskSELc2V0bachelor.h:131
 AliAnalysisTaskSELc2V0bachelor.h:132
 AliAnalysisTaskSELc2V0bachelor.h:133
 AliAnalysisTaskSELc2V0bachelor.h:134
 AliAnalysisTaskSELc2V0bachelor.h:135
 AliAnalysisTaskSELc2V0bachelor.h:136
 AliAnalysisTaskSELc2V0bachelor.h:137
 AliAnalysisTaskSELc2V0bachelor.h:138
 AliAnalysisTaskSELc2V0bachelor.h:139
 AliAnalysisTaskSELc2V0bachelor.h:140
 AliAnalysisTaskSELc2V0bachelor.h:141
 AliAnalysisTaskSELc2V0bachelor.h:142
 AliAnalysisTaskSELc2V0bachelor.h:143
 AliAnalysisTaskSELc2V0bachelor.h:144
 AliAnalysisTaskSELc2V0bachelor.h:145
 AliAnalysisTaskSELc2V0bachelor.h:146
 AliAnalysisTaskSELc2V0bachelor.h:147
 AliAnalysisTaskSELc2V0bachelor.h:148
 AliAnalysisTaskSELc2V0bachelor.h:149
 AliAnalysisTaskSELc2V0bachelor.h:150
 AliAnalysisTaskSELc2V0bachelor.h:151
 AliAnalysisTaskSELc2V0bachelor.h:152
 AliAnalysisTaskSELc2V0bachelor.h:153
 AliAnalysisTaskSELc2V0bachelor.h:154
 AliAnalysisTaskSELc2V0bachelor.h:155
 AliAnalysisTaskSELc2V0bachelor.h:156
 AliAnalysisTaskSELc2V0bachelor.h:157
 AliAnalysisTaskSELc2V0bachelor.h:158
 AliAnalysisTaskSELc2V0bachelor.h:159
 AliAnalysisTaskSELc2V0bachelor.h:160
 AliAnalysisTaskSELc2V0bachelor.h:161
 AliAnalysisTaskSELc2V0bachelor.h:162
 AliAnalysisTaskSELc2V0bachelor.h:163
 AliAnalysisTaskSELc2V0bachelor.h:164
 AliAnalysisTaskSELc2V0bachelor.h:165