#include "AliPIDResponse.h"
#include "TFile.h"
#include "AliESDtrackCuts.h"
+#include "AliAODMCParticle.h"
+#include "AliAODMCHeader.h"
+
class iostream;
ClassImp(AliAnalysisTaskConversionQA)
//________________________________________________________________________
+AliAnalysisTaskConversionQA::AliAnalysisTaskConversionQA() : AliAnalysisTaskSE(),
+ fV0Reader(NULL),
+ fConversionGammas(NULL),
+ fConversionCuts(NULL),
+ fEventCuts(NULL),
+ fInputEvent(NULL),
+ fNumberOfESDTracks(0),
+ fMCEvent(NULL),
+ fMCStack(NULL),
+ fTreeQA(NULL),
+ fIsHeavyIon(kFALSE),
+ ffillTree(kFALSE),
+ ffillHistograms(kFALSE),
+ fOutputList(NULL),
+ fTreeList(NULL),
+ fESDList(NULL),
+ hVertexZ(NULL),
+ hNGoodESDTracks(NULL),
+ hNV0Tracks(NULL),
+ hNContributorsVertex(NULL),
+ hITSClusterPhi(NULL),
+ hGammaPt(NULL),
+ hGammaPhi(NULL),
+ hGammaPhi_Pos(NULL),
+ hGammaPhi_Neg(NULL),
+ hGammaEta(NULL),
+ hGammaChi2perNDF(NULL),
+ hGammaPsiPair(NULL),
+ hGammaArmenteros(NULL),
+ hGammaCosinePointingAngle(NULL),
+ hGammaInvMass(NULL),
+ hElecPt(NULL),
+ hElecEta(NULL),
+ hElecPhi(NULL),
+ hElecNfindableClsTPC(NULL),
+ hPosiNfindableClsTPC(NULL),
+ hElecClsTPC(NULL),
+ hPosiClsTPC(NULL),
+ hElectrondEdxP(NULL),
+ hElectronITSdEdxP(NULL),
+ hElectronTOFP(NULL),
+ hElectronNSigmadEdxP(NULL),
+ hElectronNSigmadEdxEta(NULL),
+ hElectronNSigmaPiondEdxP(NULL),
+ hElectronNSigmaITSP(NULL),
+ hElectronNSigmaTOFP(NULL),
+ hPositrondEdxP(NULL),
+ hPositronITSdEdxP(NULL),
+ hPositronTOFP(NULL),
+ hPositronNSigmadEdxP(NULL),
+ hPositronNSigmadEdxEta(NULL),
+ hPositronNSigmaPiondEdxP(NULL),
+ hPositronNSigmaITSP(NULL),
+ hPositronNSigmaTOFP(NULL),
+ // hElecAsymP(NULL),
+ // fTrueList(NULL),
+ // hTrueResolutionR(NULL),
+ // hTrueResolutionZ(NULL),
+ // hTrueResolutionPhi(NULL),
+ // hTrueGammaPt(NULL),
+ // hTrueGammaPhi(NULL),
+ // hTrueGammaEta(NULL),
+ // hTrueGammaMass(NULL),
+ // hTrueGammaChi2perNDF(NULL),
+ // hTrueGammaPsiPair(NULL),
+ // hTrueGammaQt(NULL),
+ // hTrueGammaCosinePointingAngle(NULL),
+ // hTrueGammaXY(NULL),
+ // hTrueGammaZR(NULL),
+ // hTrueElecPt(NULL),
+ // hTrueElecEta(NULL),
+ // hTrueElecPhi(NULL),
+ // hTrueElecNfindableClsTPC(NULL),
+ // hTruePosiNfindableClsTPC(NULL),
+ // hTrueElecAsymP(NULL),
+ fGammaPt(0),
+ fGammaTheta(0),
+ fGammaChi2NDF(0),
+ fGammaPhotonProp(5),
+ fGammaConvCoord(5),
+ fDaughterProp(24),
+ fKind(0),
+ fIsMC(kFALSE),
+ fnGammaCandidates(1),
+ fMCStackPos(NULL),
+ fMCStackNeg(NULL)
+{
+
+}
+
AliAnalysisTaskConversionQA::AliAnalysisTaskConversionQA(const char *name) : AliAnalysisTaskSE(name),
- fV0Reader(NULL),
- fConversionGammas(NULL),
- fConversionCuts(NULL),
- fInputEvent(NULL),
- fNumberOfESDTracks(0),
- fMCEvent(NULL),
- fMCStack(NULL),
- fStreamQA(NULL),
- fIsHeavyIon(kFALSE),
- ffillTree(kFALSE),
- ffillHistograms(kFALSE),
- fOutputList(NULL),
- fESDList(NULL),
- hVertexZ(NULL),
- hNGoodESDTracks(NULL),
- hNV0Tracks(NULL),
- hNContributorsVertex(NULL),
- hITSClusterPhi(NULL),
- hGammaPt(NULL),
- hGammaPhi(NULL),
- hGammaEta(NULL),
- hGammaChi2perNDF(NULL),
- hGammaPsiPair(NULL),
- hGammaQt(NULL),
- hGammaCosinePointingAngle(NULL),
- hGammaXY(NULL),
- hGammaZR(NULL),
- hElecPt(NULL),
- hElecEta(NULL),
- hElecPhi(NULL),
- hElecNfindableClsTPC(NULL),
- hPosiNfindableClsTPC(NULL),
- fTrueList(NULL),
- hTrueResoulutionR(NULL),
- hTrueResoulutionZ(NULL),
- hTrueResoulutionPhi(NULL),
- hTrueGammaPt(NULL),
- hTrueGammaPhi(NULL),
- hTrueGammaEta(NULL),
- hTrueGammaMass(NULL),
- hTrueGammaChi2perNDF(NULL),
- hTrueGammaPsiPair(NULL),
- hTrueGammaQt(NULL),
- hTrueGammaCosinePointingAngle(NULL),
- hTrueGammaXY(NULL),
- hTrueGammaZR(NULL),
- hTrueElecPt(NULL),
- hTrueElecEta(NULL),
- hTrueElecPhi(NULL),
- hTrueElecNfindableClsTPC(NULL),
- hTruePosiNfindableClsTPC(NULL)
+ fV0Reader(NULL),
+ fConversionGammas(NULL),
+ fConversionCuts(NULL),
+ fEventCuts(NULL),
+ fInputEvent(NULL),
+ fNumberOfESDTracks(0),
+ fMCEvent(NULL),
+ fMCStack(NULL),
+ fTreeQA(NULL),
+ fIsHeavyIon(kFALSE),
+ ffillTree(kFALSE),
+ ffillHistograms(kFALSE),
+ fOutputList(NULL),
+ fTreeList(NULL),
+ fESDList(NULL),
+ hVertexZ(NULL),
+ hNGoodESDTracks(NULL),
+ hNV0Tracks(NULL),
+ hNContributorsVertex(NULL),
+ hITSClusterPhi(NULL),
+ hGammaPt(NULL),
+ hGammaPhi(NULL),
+ hGammaPhi_Pos(NULL),
+ hGammaPhi_Neg(NULL),
+ hGammaEta(NULL),
+ hGammaChi2perNDF(NULL),
+ hGammaPsiPair(NULL),
+ hGammaArmenteros(NULL),
+ hGammaCosinePointingAngle(NULL),
+ hGammaInvMass(NULL),
+ hElecPt(NULL),
+ hElecEta(NULL),
+ hElecPhi(NULL),
+ hElecNfindableClsTPC(NULL),
+ hPosiNfindableClsTPC(NULL),
+ hElecClsTPC(NULL),
+ hPosiClsTPC(NULL),
+ hElectrondEdxP(NULL),
+ hElectronITSdEdxP(NULL),
+ hElectronTOFP(NULL),
+ hElectronNSigmadEdxP(NULL),
+ hElectronNSigmadEdxEta(NULL),
+ hElectronNSigmaPiondEdxP(NULL),
+ hElectronNSigmaITSP(NULL),
+ hElectronNSigmaTOFP(NULL),
+ hPositrondEdxP(NULL),
+ hPositronITSdEdxP(NULL),
+ hPositronTOFP(NULL),
+ hPositronNSigmadEdxP(NULL),
+ hPositronNSigmadEdxEta(NULL),
+ hPositronNSigmaPiondEdxP(NULL),
+ hPositronNSigmaITSP(NULL),
+ hPositronNSigmaTOFP(NULL),
+ // hGammaXY(NULL),
+ // hGammaZR(NULL),
+ // hElecAsymP(NULL),
+ // fTrueList(NULL),
+ // hTrueResolutionR(NULL),
+ // hTrueResolutionZ(NULL),
+ // hTrueResolutionPhi(NULL),
+ // hTrueGammaPt(NULL),
+ // hTrueGammaPhi(NULL),
+ // hTrueGammaEta(NULL),
+ // hTrueGammaMass(NULL),
+ // hTrueGammaChi2perNDF(NULL),
+ // hTrueGammaPsiPair(NULL),
+ // hTrueGammaQt(NULL),
+ // hTrueGammaCosinePointingAngle(NULL),
+ // hTrueGammaXY(NULL),
+ // hTrueGammaZR(NULL),
+ // hTrueElecPt(NULL),
+ // hTrueElecEta(NULL),
+ // hTrueElecPhi(NULL),
+ // hTrueElecNfindableClsTPC(NULL),
+ // hTruePosiNfindableClsTPC(NULL),
+ // hTrueElecAsymP(NULL),
+ fGammaPt(0),
+ fGammaTheta(0),
+ fGammaChi2NDF(0),
+ fGammaPhotonProp(5),
+ fGammaConvCoord(5),
+ fDaughterProp(24),
+ fKind(0),
+ fIsMC(kFALSE),
+ fnGammaCandidates(1),
+ fMCStackPos(NULL),
+ fMCStackNeg(NULL)
{
- // Default constructor
+ // Default constructor
- DefineInput(0, TChain::Class());
- DefineOutput(1, TList::Class());
+ DefineInput(0, TChain::Class());
+ DefineOutput(1, TList::Class());
}
//________________________________________________________________________
AliAnalysisTaskConversionQA::~AliAnalysisTaskConversionQA()
{
- // default deconstructor
- if(fStreamQA){
- delete fStreamQA;
- fStreamQA = 0x0;
- }
+ // default deconstructor
+
}
//________________________________________________________________________
void AliAnalysisTaskConversionQA::UserCreateOutputObjects()
{
- // Create User Output Objects
-
- if(fOutputList != NULL){
- delete fOutputList;
- fOutputList = NULL;
- }
- if(fOutputList == NULL){
- fOutputList = new TList();
- fOutputList->SetOwner(kTRUE);
- }
-
-
- if(ffillHistograms){
- TH1::SetDefaultSumw2(kTRUE);
-
- fESDList = new TList();
- fESDList->SetOwner(kTRUE);
- fESDList->SetName("ESD QA");
- fOutputList->Add(fESDList);
-
- hVertexZ = new TH1F("Vertex_Z","Vertex_Z",300,-15,15);
- fESDList->Add(hVertexZ);
- hNContributorsVertex = new TH1I("ContrVertex_Z","ContrVertex_Z",3000,0,3000);
- fESDList->Add(hNContributorsVertex);
- if(fIsHeavyIon) hNGoodESDTracks = new TH1I("GoodESDTracks","GoodESDTracks",3000,0,3000);
- else hNGoodESDTracks = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
- fESDList->Add(hNGoodESDTracks);
- if(fIsHeavyIon) hNV0Tracks = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
- else hNV0Tracks = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
- fESDList->Add(hNV0Tracks);
-
- hITSClusterPhi = new TH2F("ITSClusterPhi","hITSClusterPhi",72,0,2*TMath::Pi(),7,0,7);
- fESDList->Add(hITSClusterPhi);
- hGammaPt = new TH1F("Gamma_Pt","Gamma_Pt",250,0,25);
- fESDList->Add(hGammaPt);
- hGammaPhi = new TH1F("Gamma_Phi","Gamma_Phi",360,0,2*TMath::Pi());
- fESDList->Add(hGammaPhi);
- hGammaEta = new TH1F("Gamma_Eta","Gamma_Eta",400,-1.2,1.2);
- fESDList->Add(hGammaEta);
- hGammaChi2perNDF = new TH1F("Gamma_Chi2perNDF","Gamma_Chi2perNDF",500,0,100);
- fESDList->Add(hGammaChi2perNDF);
- hGammaPsiPair = new TH1F("Gamma_PsiPair","Gamma_PsiPair",500,0,2);
- fESDList->Add(hGammaPsiPair);
- hGammaQt = new TH1F("Gamma_Qt","Gamma_Qt",400,0,0.1);
- fESDList->Add(hGammaQt);
- hGammaCosinePointingAngle = new TH1F("Gamma_CosinePointingAngle","Gamma_CosinePointingAngle",900,0.7,1.);
- fESDList->Add(hGammaCosinePointingAngle);
- hGammaXY = new TH2F("Gamma_ConversionPoint_XY","Gamma_ConversionPoint_XY",960,-120,120,960,-120,120);
- fESDList->Add(hGammaXY);
- hGammaZR= new TH2F("Gamma_ConversionPoint_ZR","Gamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
- fESDList->Add(hGammaZR);
-
- hElecPt = new TH2F("Electron_Positron_Pt","Electron_Positron_Pt",250,0,25,250,0,25);
- fESDList->Add(hElecPt);
- hElecEta = new TH2F("Electron_Positron_Eta","Electron_Positron_Eta",400,-1.2,1.2,400,-1.2,1.2);
- fESDList->Add(hElecEta);
- hElecPhi = new TH2F("Electron_Positron_Phi","Electron_Positron_Phi",360,0,2*TMath::Pi(),360,0,2*TMath::Pi());
- fESDList->Add(hElecPhi);
- hElecNfindableClsTPC = new TH1F("Electron_findableClusterTPC","Electron_findableClusterTPC",100,0,1);
- fESDList->Add(hElecNfindableClsTPC);
- hPosiNfindableClsTPC = new TH1F("Positron_findableClusterTPC","Positron_findableClusterTPC",100,0,1);
- fESDList->Add(hPosiNfindableClsTPC);
-
- if(MCEvent()){
- fTrueList = new TList();
- fTrueList->SetOwner(kTRUE);
- fTrueList->SetName("True QA");
- fOutputList->Add(fTrueList);
-
- hTrueResoulutionR = new TH2F("True_ConversionPointResolution_R","True_ConversionPointResolution_R",240,0,120,200,-20,20);
- fTrueList->Add(hTrueResoulutionR);
- hTrueResoulutionZ = new TH2F("True_ConversionPointResolution_Z","True_ConversionPointResolution_Z",480,-120,120,200,-20,20);
- fTrueList->Add(hTrueResoulutionZ);
- hTrueResoulutionPhi = new TH2F("True_ConversionPointResolution_Phi","True_ConversionPointResolution_Phi",360,0,2*TMath::Pi(),200,-20,20);
- fTrueList->Add(hTrueResoulutionPhi);
-
- hTrueGammaPt = new TH1F("True_Gamma_Pt","True_Gamma_Pt",250,0,25);
- fTrueList->Add(hTrueGammaPt);
- hTrueGammaPhi = new TH1F("True_Gamma_Phi","True_Gamma_Phi",360,0,2*TMath::Pi());
- fTrueList->Add(hTrueGammaPhi);
- hTrueGammaEta = new TH1F("True_Gamma_Eta","True_Gamma_Eta",400,-1.2,1.2);
- fTrueList->Add(hTrueGammaEta);
- hTrueGammaMass = new TH1F("True_Gamma_Mass","True_Gamma_Mass",1000,0,0.3);
- fTrueList->Add(hTrueGammaMass);
- hTrueGammaChi2perNDF = new TH1F("True_Gamma_Chi2perNDF","True_Gamma_Chi2perNDF",500,0,100);
- fTrueList->Add(hTrueGammaChi2perNDF);
- hTrueGammaPsiPair = new TH1F("True_Gamma_PsiPair","True_Gamma_PsiPair",500,0,2);
- fTrueList->Add(hTrueGammaPsiPair);
- hTrueGammaQt = new TH1F("True_Gamma_Qt","True_Gamma_Qt",400,0,0.1);
- fTrueList->Add(hTrueGammaQt);
- hTrueGammaCosinePointingAngle = new TH1F("True_Gamma_CosinePointingAngle","True_Gamma_CosinePointingAngle",900,0.7,1.);
- fTrueList->Add(hTrueGammaCosinePointingAngle);
- hTrueGammaXY = new TH2F("True_Gamma_ConversionPoint_XY","True_Gamma_ConversionPoint_XY",960,-120,120,960,-120,120);
- fTrueList->Add(hTrueGammaXY);
- hTrueGammaZR= new TH2F("TrueGamma_ConversionPoint_ZR","TrueGamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
- fTrueList->Add(hTrueGammaZR);
-
- hTrueElecPt = new TH2F("True_Electron_Positron_Pt","True_Electron_Positron_Pt",250,0,25,250,0,25);
- fTrueList->Add(hTrueElecPt);
- hTrueElecEta = new TH2F("True_Electron_Positron_Eta","True_Electron_Positron_Eta",400,-1.2,1.2,400,-1.2,1.2);
- fTrueList->Add(hTrueElecEta);
- hTrueElecPhi = new TH2F("True_Electron_Positron_Phi","True_Electron_Positron_Phi",360,0,2*TMath::Pi(),360,0,2*TMath::Pi());
- fTrueList->Add(hTrueElecPhi);
- hTrueElecNfindableClsTPC = new TH1F("True_Electron_findableClusterTPC","True_Electron_findableClusterTPC",100,0,1);
- fTrueList->Add(hTrueElecNfindableClsTPC);
- hTruePosiNfindableClsTPC = new TH1F("True_Positron_findableClusterTPC","True_Positron_findableClusterTPC",100,0,1);
- fTrueList->Add(hTruePosiNfindableClsTPC);
- }
- if(fConversionCuts->GetCutHistograms()){
- fOutputList->Add(fConversionCuts->GetCutHistograms());
- }
- TH1::SetDefaultSumw2(kFALSE);
- }
-
- if(ffillTree){
- TString cutnumber = fConversionCuts->GetCutNumber();
- fStreamQA = new TTreeSRedirector(Form("GammaConvV1_QATree_%s.root",cutnumber.Data()),"recreate");
- }
-
- PostData(1, fOutputList);
+ // Create User Output Objects
+
+ if(fOutputList != NULL){
+ delete fOutputList;
+ fOutputList = NULL;
+ }
+ if(fOutputList == NULL){
+ fOutputList = new TList();
+ fOutputList->SetOwner(kTRUE);
+ }
+
+ if(ffillHistograms){
+ fESDList = new TList();
+ fESDList->SetOwner(kTRUE);
+ fESDList->SetName("ESD QA");
+ fOutputList->Add(fESDList);
+
+ hVertexZ = new TH1F("Vertex_Z","Vertex_Z",300,-15,15);
+ fESDList->Add(hVertexZ);
+ hNContributorsVertex = new TH1I("ContrVertex_Z","ContrVertex_Z",3000,0,3000);
+ fESDList->Add(hNContributorsVertex);
+ if(fIsHeavyIon) hNGoodESDTracks = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
+ else hNGoodESDTracks = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
+ fESDList->Add(hNGoodESDTracks);
+ if(fIsHeavyIon) hNV0Tracks = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
+ else hNV0Tracks = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
+ fESDList->Add(hNV0Tracks);
+
+ hITSClusterPhi = new TH2F("ITSClusterPhi","hITSClusterPhi",72,0,2*TMath::Pi(),7,0,7);
+ fESDList->Add(hITSClusterPhi);
+ hGammaPt = new TH1F("Gamma_Pt","Gamma_Pt",250,0,25);
+ fESDList->Add(hGammaPt);
+ hGammaPhi = new TH1F("Gamma_Phi","Gamma_Phi",360,0,2*TMath::Pi());
+ fESDList->Add(hGammaPhi);
+ hGammaPhi_Pos = new TH1F("GammaPhi_EtaPos","GammaPhi_EtaPos",360,0,2*TMath::Pi());
+ fESDList->Add(hGammaPhi_Pos);
+ hGammaPhi_Neg = new TH1F("GammaPhi_EtaNeg","GammaPhi_EtaNeg",360,0,2*TMath::Pi());
+ fESDList->Add(hGammaPhi_Neg);
+
+ hGammaEta = new TH1F("Gamma_Eta","Gamma_Eta",600,-1.5,1.5);
+ fESDList->Add(hGammaEta);
+ hGammaChi2perNDF = new TH1F("Gamma_Chi2perNDF","Gamma_Chi2perNDF",500,0,100);
+ fESDList->Add(hGammaChi2perNDF);
+ hGammaPsiPair = new TH1F("Gamma_PsiPair","Gamma_PsiPair",500,0,2);
+ fESDList->Add(hGammaPsiPair);
+ hGammaArmenteros = new TH2F("Gamma_Armenteros","Gamma_Armenteros",200,-1,1,400,0,0.1);
+ fESDList->Add(hGammaArmenteros);
+ hGammaCosinePointingAngle = new TH1F("Gamma_CosinePointingAngle","Gamma_CosinePointingAngle",1000,-1.,1.);
+ fESDList->Add(hGammaCosinePointingAngle);
+ hGammaInvMass = new TH1F( "Gamma_InvMass","",200, 0, 0.2);
+ fESDList->Add(hGammaInvMass);
+ hElecPt = new TH2F("Electron_Positron_Pt","Electron_Positron_Pt",250,0,25,250,0,25);
+ fESDList->Add(hElecPt);
+ hElecEta = new TH2F("Electron_Positron_Eta","Electron_Positron_Eta",600,-1.5,1.5,600,-1.5,1.5);
+ fESDList->Add(hElecEta);
+ hElecPhi = new TH2F("Electron_Positron_Phi","Electron_Positron_Phi",360,0,2*TMath::Pi(),360,0,2*TMath::Pi());
+ fESDList->Add(hElecPhi);
+ hElecClsTPC = new TH1F("Electron_ClusterTPC","Electron_ClusterTPC",200,0,200);
+ fESDList->Add(hElecClsTPC);
+ hPosiClsTPC = new TH1F("Positron_ClusterTPC","Positron_ClusterTPC",200,0,200);
+ fESDList->Add(hPosiClsTPC);
+
+ hElecNfindableClsTPC = new TH1F("Electron_findableClusterTPC","Electron_findableClusterTPC",100,0,1);
+ fESDList->Add(hElecNfindableClsTPC);
+ hPosiNfindableClsTPC = new TH1F("Positron_findableClusterTPC","Positron_findableClusterTPC",100,0,1);
+ fESDList->Add(hPosiNfindableClsTPC);
+
+ hElectrondEdxP = new TH2F("Electron_dEdx_P","Electron_dEdx_P",100, 0.05, 20, 200, 0, 200);
+ SetLogBinningXTH2(hElectrondEdxP);
+ fESDList->Add(hElectrondEdxP);
+ hPositrondEdxP = new TH2F("Positron_dEdx_P","Positron_dEdx_P",100, 0.05, 20, 200, 0, 200);
+ SetLogBinningXTH2(hPositrondEdxP);
+ fESDList->Add(hPositrondEdxP);
+ hElectronNSigmadEdxP = new TH2F("Electron_NSigmadEdx_P","Electron_NSigmadEdx_P",100, 0.05, 20, 200, -10, 10);
+ SetLogBinningXTH2(hElectronNSigmadEdxP);
+ fESDList->Add(hElectronNSigmadEdxP);
+ hElectronNSigmadEdxEta = new TH2F("Electron_NSigmadEdx_Eta","Electron_NSigmadEdx_Eta",140, -1.4, 1.4, 200, -10, 10);
+ fESDList->Add(hElectronNSigmadEdxEta);
+ hPositronNSigmadEdxP = new TH2F("Positron_NSigmadEdx_P","Positron_NSigmadEdx_P",100, 0.05, 20, 200, -10, 10);
+ SetLogBinningXTH2(hPositronNSigmadEdxP);
+ fESDList->Add(hPositronNSigmadEdxP);
+ hPositronNSigmadEdxEta = new TH2F("Positron_NSigmadEdx_Eta","Positron_NSigmadEdx_Eta",140, -1.4, 1.4, 200, -10, 10);
+ fESDList->Add(hPositronNSigmadEdxEta);
+ hElectronNSigmaPiondEdxP = new TH2F("Electron_NSigmaPiondEdx_P","Electron_NSigmaPiondEdx_P",100, 0.05, 20, 200, -10, 10);
+ SetLogBinningXTH2(hElectronNSigmaPiondEdxP);
+ fESDList->Add(hElectronNSigmaPiondEdxP);
+ hPositronNSigmaPiondEdxP = new TH2F("Positron_NSigmaPiondEdx_P","Positron_NSigmaPiondEdx_P",100, 0.05, 20, 200, -10, 10);
+ SetLogBinningXTH2(hPositronNSigmaPiondEdxP);
+ fESDList->Add(hPositronNSigmaPiondEdxP);
+
+ hElectronTOFP = new TH2F("Electron_TOF_P","Electron_TOF_P",100, 0.05, 20, 600, -1000, 29000);
+ SetLogBinningXTH2(hElectronTOFP);
+ fESDList->Add(hElectronTOFP);
+ hPositronTOFP = new TH2F("Positron_TOF_P","Positron_TOF_P",100, 0.05, 20, 600, -1000, 29000);
+ SetLogBinningXTH2(hPositronTOFP);
+ fESDList->Add(hPositronTOFP);
+ hElectronNSigmaTOFP = new TH2F("Electron_NSigmaTOF_P","Electron_NSigmaTOF_P",100, 0.05, 20, 200, -10, 10);
+ SetLogBinningXTH2(hElectronNSigmaTOFP);
+ fESDList->Add(hElectronNSigmaTOFP);
+ hPositronNSigmaTOFP = new TH2F("Positron_NSigmaTOF_P","Positron_NSigmaTOF_P",100, 0.05, 20, 200, -10, 10);
+ SetLogBinningXTH2(hPositronNSigmaTOFP);
+ fESDList->Add(hPositronNSigmaTOFP);
+
+ hElectronITSdEdxP = new TH2F("Electron_ITSdEdx_P","Electron_ITSdEdx_P",100, 0.05, 20, 200, 0, 200);
+ SetLogBinningXTH2(hElectronITSdEdxP);
+ fESDList->Add(hElectronITSdEdxP);
+ hPositronITSdEdxP = new TH2F("Positron_ITSdEdx_P","Positron_ITSdEdx_P",100, 0.05, 20, 200, 0, 200);
+ SetLogBinningXTH2(hPositronITSdEdxP);
+ fESDList->Add(hPositronITSdEdxP);
+ hElectronNSigmaITSP = new TH2F("Electron_NSigmaITS_P","Electron_NSigmaITS_P",100, 0.05, 20, 200, -10, 10);
+ SetLogBinningXTH2(hElectronNSigmaITSP);
+ fESDList->Add(hElectronNSigmaITSP);
+ hPositronNSigmaITSP = new TH2F("Positron_NSigmaITS_P","Positron_NSigmaITS_P",100, 0.05, 20, 200, -10, 10);
+ SetLogBinningXTH2(hPositronNSigmaITSP);
+ fESDList->Add(hPositronNSigmaITSP);
+
+ // hGammaXY = new TH2F("Gamma_ConversionPoint_XY","Gamma_ConversionPoint_XY",960,-120,120,960,-120,120);
+ // fESDList->Add(hGammaXY);
+ // hGammaZR= new TH2F("Gamma_ConversionPoint_ZR","Gamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
+ // fESDList->Add(hGammaZR);
+
+
+ // hElecAsymP = new TH2F("Electron_Asym_vs_P", "Electron_Asym_vs_P",200,0.,20.,200,0.,1.);
+ // fESDList->Add(hElecAsymP);
+
+ // if(fIsMC){
+ // fTrueList = new TList();
+ // fTrueList->SetOwner(kTRUE);
+ // fTrueList->SetName("True QA");
+ // fOutputList->Add(fTrueList);
+ //
+ // hTrueResolutionR = new TH2F("True_ConversionPointResolution_R","True_ConversionPointResolution_R",240,0,120,200,-20,20);
+ // fTrueList->Add(hTrueResolutionR);
+ // hTrueResolutionZ = new TH2F("True_ConversionPointResolution_Z","True_ConversionPointResolution_Z",480,-120,120,200,-20,20);
+ // fTrueList->Add(hTrueResolutionZ);
+ // hTrueResolutionPhi = new TH2F("True_ConversionPointResolution_Phi","True_ConversionPointResolution_Phi",360,0,2*TMath::Pi(),200,-TMath::Pi()/30., TMath::Pi()/30.);
+ // fTrueList->Add(hTrueResolutionPhi);
+ //
+ // hTrueGammaPt = new TH1F("True_Gamma_Pt","True_Gamma_Pt",250,0,25);
+ // fTrueList->Add(hTrueGammaPt);
+ // hTrueGammaPhi = new TH1F("True_Gamma_Phi","True_Gamma_Phi",360,0,2*TMath::Pi());
+ // fTrueList->Add(hTrueGammaPhi);
+ // hTrueGammaEta = new TH1F("True_Gamma_Eta","True_Gamma_Eta",600,-1.5,1.5);
+ // fTrueList->Add(hTrueGammaEta);
+ // hTrueGammaMass = new TH1F("True_Gamma_Mass","True_Gamma_Mass",1000,0,0.3);
+ // fTrueList->Add(hTrueGammaMass);
+ // hTrueGammaChi2perNDF = new TH1F("True_Gamma_Chi2perNDF","True_Gamma_Chi2perNDF",500,0,100);
+ // fTrueList->Add(hTrueGammaChi2perNDF);
+ // hTrueGammaPsiPair = new TH1F("True_Gamma_PsiPair","True_Gamma_PsiPair",500,0,2);
+ // fTrueList->Add(hTrueGammaPsiPair);
+ // hTrueGammaQt = new TH1F("True_Gamma_Qt","True_Gamma_Qt",400,0,0.1);
+ // fTrueList->Add(hTrueGammaQt);
+ // hTrueGammaCosinePointingAngle = new TH1F("True_Gamma_CosinePointingAngle","True_Gamma_CosinePointingAngle",900,0.7,1.);
+ // fTrueList->Add(hTrueGammaCosinePointingAngle);
+ // hTrueGammaXY = new TH2F("True_Gamma_ConversionPoint_XY","True_Gamma_ConversionPoint_XY",960,-120,120,960,-120,120);
+ // fTrueList->Add(hTrueGammaXY);
+ // hTrueGammaZR= new TH2F("TrueGamma_ConversionPoint_ZR","TrueGamma_ConversionPoint_ZR",1200,-150,150,480,0,120);
+ // fTrueList->Add(hTrueGammaZR);
+ //
+ // hTrueElecPt = new TH2F("True_Electron_Positron_Pt","True_Electron_Positron_Pt",250,0,25,250,0,25);
+ // fTrueList->Add(hTrueElecPt);
+ // hTrueElecEta = new TH2F("True_Electron_Positron_Eta","True_Electron_Positron_Eta",600,-1.5,1.5,600,-1.5,1.5);
+ // fTrueList->Add(hTrueElecEta);
+ // hTrueElecPhi = new TH2F("True_Electron_Positron_Phi","True_Electron_Positron_Phi",360,0,2*TMath::Pi(),360,0,2*TMath::Pi());
+ // fTrueList->Add(hTrueElecPhi);
+ // hTrueElecNfindableClsTPC = new TH1F("True_Electron_findableClusterTPC","True_Electron_findableClusterTPC",100,0,1);
+ // fTrueList->Add(hTrueElecNfindableClsTPC);
+ // hTruePosiNfindableClsTPC = new TH1F("True_Positron_findableClusterTPC","True_Positron_findableClusterTPC",100,0,1);
+ // fTrueList->Add(hTruePosiNfindableClsTPC);
+ // hTrueElecAsymP = new TH2F("True_Electron_Asym_vs_P", "True_Electron_Asym_vs_P",200,0.,20.,200,0.,1.);
+ // fTrueList->Add(hTrueElecAsymP);
+ // }
+ if(fConversionCuts->GetCutHistograms()){
+ fOutputList->Add(fConversionCuts->GetCutHistograms());
+ }
+ }
+
+ if(ffillTree){
+ fTreeList = new TList();
+ fTreeList->SetOwner(kTRUE);
+ fTreeList->SetName("TreeList");
+ fOutputList->Add(fTreeList);
+
+ fTreeQA = new TTree("PhotonQA","PhotonQA");
+
+ fTreeQA->Branch("daughterProp",&fDaughterProp);
+ fTreeQA->Branch("recCords",&fGammaConvCoord);
+ fTreeQA->Branch("photonProp",&fGammaPhotonProp);
+ fTreeQA->Branch("pt",&fGammaPt,"fGammaPt/F");
+ fTreeQA->Branch("theta",&fGammaTheta,"fGammaTheta/F");
+ fTreeQA->Branch("chi2ndf",&fGammaChi2NDF,"fGammaChi2NDF/F");
+ if (fIsMC) {
+ fTreeQA->Branch("kind",&fKind,"fKind/b");
+ }
+ fTreeList->Add(fTreeQA);
+ }
+
+ fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
+
+ PostData(1, fOutputList);
+}
+//_____________________________________________________________________________
+Bool_t AliAnalysisTaskConversionQA::Notify()
+{
+ if(!fEventCuts->GetDoEtaShift()) return kTRUE;; // No Eta Shift requested, continue
+
+ if(fEventCuts->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
+ fEventCuts->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
+ fEventCuts->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
+ return kTRUE;
+ }
+ else{
+ printf(" Gamma Conversion QA Task %s :: Eta Shift Manually Set to %f \n\n",
+ (fEventCuts->GetCutNumber()).Data(),fEventCuts->GetEtaShift());
+ fEventCuts->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
+ }
+
+ return kTRUE;
}
-
//________________________________________________________________________
void AliAnalysisTaskConversionQA::UserExec(Option_t *){
- fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
-
- Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
- if(eventQuality != 0){// Event Not Accepted
- return;
- }
- fInputEvent = InputEvent();
- fMCEvent = MCEvent();
- if(fMCEvent) fMCStack = fMCEvent->Stack();
-
- Int_t eventNotAccepted =
- fConversionCuts->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
- if(eventNotAccepted) return; // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
-
- fConversionGammas=fV0Reader->GetReconstructedGammas();
-
- if(fMCEvent){
- if(fConversionCuts->GetSignalRejection() != 0){
- fConversionCuts->GetNotRejectedParticles(fConversionCuts->GetSignalRejection(),
- fConversionCuts->GetAcceptedHeader(),
- fMCEvent);
- }
- }
-
- if(ffillHistograms){
- CountESDTracks();
- hVertexZ->Fill(fInputEvent->GetPrimaryVertex()->GetZ());
- hNContributorsVertex->Fill(fConversionCuts->GetNumberOfContributorsVtx(fInputEvent));
- hNGoodESDTracks->Fill(fNumberOfESDTracks);
- hNV0Tracks->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
- }
-
- for(Int_t firstGammaIndex=0;firstGammaIndex<fConversionGammas->GetEntriesFast();firstGammaIndex++){
- AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fConversionGammas->At(firstGammaIndex));
- if(fMCEvent && fConversionCuts->GetSignalRejection() != 0){
- if(!fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelPositive(), fMCStack))
- continue;
- if(!fConversionCuts->IsParticleFromBGEvent(gamma->GetMCLabelNegative(), fMCStack))
- continue;
- }
- if(!fConversionCuts->PhotonIsSelected(gamma,fInputEvent)){
- continue;
- }
-
- if(ffillTree) ProcessQATree(gamma);
- if(ffillHistograms) ProcessQA(gamma);
- }
-
- PostData(1, fOutputList);
+ Int_t eventQuality = ((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetEventQuality();
+ if(eventQuality != 0){// Event Not Accepted
+ return;
+ }
+ fInputEvent = InputEvent();
+ if(fIsMC) fMCEvent = MCEvent();
+ if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){ fMCStack = fMCEvent->Stack(); }
+
+ Int_t eventNotAccepted =
+ fEventCuts->IsEventAcceptedByCut(fV0Reader->GetEventCuts(),fInputEvent,fMCEvent,fIsHeavyIon,kFALSE);
+ if(eventNotAccepted) return; // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
+
+ fConversionGammas=fV0Reader->GetReconstructedGammas();
+
+ if(fMCEvent){
+ if(fEventCuts->GetSignalRejection() != 0){
+ if(fInputEvent->IsA()==AliESDEvent::Class()){
+ fEventCuts->GetNotRejectedParticles(fEventCuts->GetSignalRejection(),
+ fEventCuts->GetAcceptedHeader(),
+ fMCEvent);
+ }
+ else if(fInputEvent->IsA()==AliAODEvent::Class()){
+ fEventCuts->GetNotRejectedParticles(fEventCuts->GetSignalRejection(),
+ fEventCuts->GetAcceptedHeader(),
+ fInputEvent);
+ }
+ }
+ }
+
+ if(ffillHistograms){
+ CountTracks();
+ hVertexZ->Fill(fInputEvent->GetPrimaryVertex()->GetZ());
+ hNContributorsVertex->Fill(fEventCuts->GetNumberOfContributorsVtx(fInputEvent));
+ hNGoodESDTracks->Fill(fNumberOfESDTracks);
+ hNV0Tracks->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
+ }
+
+ if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
+ RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
+ fV0Reader->RelabelAODs(kTRUE);
+ }
+
+
+ for(Int_t firstGammaIndex=0;firstGammaIndex<fConversionGammas->GetEntriesFast();firstGammaIndex++){
+ AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fConversionGammas->At(firstGammaIndex));
+ if (gamma==NULL) continue;
+ if(fMCEvent && fEventCuts->GetSignalRejection() != 0){
+ if(!fEventCuts->IsParticleFromBGEvent(gamma->GetMCLabelPositive(), fMCStack, fInputEvent))
+ continue;
+ if(!fEventCuts->IsParticleFromBGEvent(gamma->GetMCLabelNegative(), fMCStack, fInputEvent))
+ continue;
+ }
+ if(!fConversionCuts->PhotonIsSelected(gamma,fInputEvent)){
+ continue;
+ }
+
+ if(ffillTree) ProcessQATree(gamma);
+ if(ffillHistograms) ProcessQA(gamma);
+ }
+
+ if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
+ RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
+ fV0Reader->RelabelAODs(kFALSE);
+ }
+
+ PostData(1, fOutputList);
}
///________________________________________________________________________
void AliAnalysisTaskConversionQA::ProcessQATree(AliAODConversionPhoton *gamma){
- // Fill Histograms for QA and MC
- AliESDEvent* event = (AliESDEvent*) InputEvent();
- AliPIDResponse* pidResonse = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetPIDResponse();
-
- Float_t gammaPt = gamma->GetPhotonPt();
- Float_t gammaPhi = gamma->GetPhotonPhi();
- Float_t gammaTheta = gamma->Theta();
- Float_t gammaChi2NDF = gamma->GetChi2perNDF();
- Float_t gammaQt = gamma->GetArmenterosQt();
- Float_t gammaAlpha = gamma->GetArmenterosAlpha();
- Float_t gammaPsiPair = gamma->GetPsiPair();
- Float_t gammaCosPointing = fConversionCuts->GetCosineOfPointingAngle(gamma,event);
- TVectorF conversionPoint(3);
- conversionPoint(0) = gamma->GetConversionX();
- conversionPoint(1) = gamma->GetConversionY();
- conversionPoint(2) = gamma->GetConversionZ();
- TVectorF daughterProp(18);
- AliESDtrack * negTrack = fConversionCuts->GetESDTrack(event, gamma->GetTrackLabelNegative());
- AliESDtrack * posTrack = fConversionCuts->GetESDTrack(event, gamma->GetTrackLabelPositive());
-
- if(!negTrack||!posTrack)return;
-
- Bool_t isTruePhoton = kFALSE;
- if(fMCEvent){
- if(IsTruePhoton(gamma)) isTruePhoton = kTRUE;
- }
-
- daughterProp(0) = posTrack->Pt();
- daughterProp(7) = negTrack->Pt();
- daughterProp(1) = posTrack->Theta();
- daughterProp(8) = negTrack->Theta();
- Double32_t signalPos[4] = {0,0,0,0};
- Char_t nclPos[3];
- Char_t nrowsPos[3];
- if (posTrack->GetTPCdEdxInfo()) {
- posTrack->GetTPCdEdxInfo()->GetTPCSignalRegionInfo(signalPos,nclPos,nrowsPos);
- daughterProp(2) = signalPos[0];
- daughterProp(14) = signalPos[1];
- daughterProp(16) = signalPos[2];
- } else {
- daughterProp(2) = posTrack->GetTPCsignal();
- daughterProp(14) = 0;
- daughterProp(16) = 0;
- }
- Double32_t signalNeg[4] = {0,0,0,0};
- Char_t nclNeg[3];
- Char_t nrowsNeg[3];
- if (negTrack->GetTPCdEdxInfo()) {
- negTrack->GetTPCdEdxInfo()->GetTPCSignalRegionInfo(signalNeg,nclNeg,nrowsNeg);
- daughterProp(9) = signalNeg[0];
- daughterProp(15) = signalNeg[1];
- daughterProp(17) = signalNeg[2];
- } else {
- daughterProp(9) = negTrack->GetTPCsignal();
- daughterProp(15) = 0;
- daughterProp(17) = 0;
- }
- daughterProp(3) = pidResonse->NumberOfSigmasTPC(posTrack,AliPID::kElectron);
- daughterProp(10) = pidResonse->NumberOfSigmasTPC(negTrack,AliPID::kElectron);
- if((posTrack->GetStatus() & AliESDtrack::kTOFpid) && !(posTrack->GetStatus() & AliESDtrack::kTOFmismatch)){
- Double_t t0pos = pidResonse->GetTOFResponse().GetStartTime(posTrack->P());
- Double_t timesPos[5];
- posTrack->GetIntegratedTimes(timesPos);
- Double_t TOFsignalPos = posTrack->GetTOFsignal();
- Double_t dTpos = TOFsignalPos - t0pos - timesPos[0];
- daughterProp(4) = dTpos;
- daughterProp(5) = pidResonse->NumberOfSigmasTOF(posTrack, AliPID::kElectron);
- } else {
- daughterProp(4) = 20000;
- daughterProp(5) = -20;
- }
- if((negTrack->GetStatus() & AliESDtrack::kTOFpid) && !(negTrack->GetStatus() & AliESDtrack::kTOFmismatch)){
- Double_t t0neg = pidResonse->GetTOFResponse().GetStartTime(negTrack->P());
- Double_t timesNeg[5];
- negTrack->GetIntegratedTimes(timesNeg);
- Double_t TOFsignalNeg = negTrack->GetTOFsignal();
- Double_t dTneg = TOFsignalNeg - t0neg - timesNeg[0];
- daughterProp(11) = dTneg;
- daughterProp(12) = pidResonse->NumberOfSigmasTOF(negTrack, AliPID::kElectron);
- } else {
- daughterProp(11) = 20000;
- daughterProp(12) = -20;
- }
-
- daughterProp(6) = (Float_t)posTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius()));
- //posTrack->GetNcls(1)/(Float_t)posTrack->GetTPCNclsF();
- daughterProp(13) = (Float_t)negTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius()));
- //negTrack->GetNcls(1)/(Float_t)negTrack->GetTPCNclsF();
-
- if (fStreamQA){
- if(fMCEvent){
- (*fStreamQA)<<"PhotonQA"
- << "pt=" << gammaPt
- << "phi=" << gammaPhi
- << "theta=" << gammaTheta
- << "chi2ndf=" << gammaChi2NDF
- << "qt="<< gammaQt
- << "alpha=" << gammaAlpha
- << "psipair=" << gammaPsiPair
- << "cosPoint=" << gammaCosPointing
- << "TruePhoton=" << isTruePhoton
- << "conversionPoint=" << &conversionPoint
- << "daugtherProp.=" << &daughterProp
- << "\n";
- }
- else{
- (*fStreamQA)<<"PhotonQA"
- << "pt=" << gammaPt
- << "phi=" << gammaPhi
- << "theta=" << gammaTheta
- << "chi2ndf=" << gammaChi2NDF
- << "qt="<< gammaQt
- << "alpha=" << gammaAlpha
- << "psipair=" << gammaPsiPair
- << "cosPoint=" << gammaCosPointing
- << "conversionPoint=" << &conversionPoint
- << "daugtherProp.=" << &daughterProp
- << "\n";
- }
- }
+ // Fill Histograms for QA and MC
+ AliVEvent* event = (AliVEvent*) InputEvent();
+
+ AliPIDResponse* pidResonse = ((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetPIDResponse();
+
+ fGammaPt = gamma->GetPhotonPt();
+
+ fGammaTheta = gamma->Theta();
+ fGammaChi2NDF = gamma->GetChi2perNDF();
+
+ fGammaPhotonProp(0) = gamma->GetArmenterosQt();
+ fGammaPhotonProp(1) = gamma->GetArmenterosAlpha();
+ fGammaPhotonProp(2) = gamma->GetPsiPair();
+ fGammaPhotonProp(3) = fConversionCuts->GetCosineOfPointingAngle(gamma,event);
+ fGammaPhotonProp(4) = gamma->GetMass();
+
+ fGammaConvCoord(0) = gamma->GetConversionX();
+ fGammaConvCoord(1) = gamma->GetConversionY();
+ fGammaConvCoord(2) = gamma->GetConversionZ();
+ fGammaConvCoord(3) = gamma->GetConversionRadius();
+ fGammaConvCoord(4) = gamma->GetPhotonPhi();
+
+ AliVTrack * negTrack = fConversionCuts->GetTrack(event, gamma->GetTrackLabelNegative());
+ AliVTrack * posTrack = fConversionCuts->GetTrack(event, gamma->GetTrackLabelPositive());
+
+
+ if(!negTrack||!posTrack)return;
+
+ fKind = 9;
+ if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){
+ fKind = IsTruePhotonESD(gamma);
+ } else if (fMCEvent && fInputEvent->IsA()==AliAODEvent::Class()){
+ // cout << "entering IsTruePhotonAOD" << endl;
+ fKind = IsTruePhotonAOD(gamma);
+ }
+
+ fDaughterProp(0) = posTrack->Pt();
+ fDaughterProp(7) = negTrack->Pt();
+ fDaughterProp(1) = posTrack->Theta();
+ fDaughterProp(8) = negTrack->Theta();
+ // dEdx TPC
+ fDaughterProp(2) = posTrack->GetTPCsignal();
+ fDaughterProp(3) = pidResonse->NumberOfSigmasTPC(posTrack,AliPID::kElectron);
+ fDaughterProp(22) = pidResonse->NumberOfSigmasTPC(posTrack,AliPID::kPion);
+ fDaughterProp(9) = negTrack->GetTPCsignal();
+ fDaughterProp(10) = pidResonse->NumberOfSigmasTPC(negTrack,AliPID::kElectron);
+ fDaughterProp(23) = pidResonse->NumberOfSigmasTPC(negTrack,AliPID::kPion);
+ Int_t nPosClusterITS = 0;
+ Int_t nNegClusterITS = 0;
+ for(Int_t itsLayer = 0; itsLayer<6;itsLayer++){
+ if(TESTBIT(negTrack->GetITSClusterMap(),itsLayer)){
+ nNegClusterITS++;
+ }
+ if(TESTBIT(posTrack->GetITSClusterMap(),itsLayer)){
+ nPosClusterITS++;
+ }
+ }
+
+ // ITS signal
+ fDaughterProp(14) = (Float_t)nPosClusterITS;
+ fDaughterProp(15) = (Float_t)nNegClusterITS;
+ if (nPosClusterITS > 0 ){
+ fDaughterProp(16) = posTrack->GetITSsignal();
+ fDaughterProp(20) = pidResonse->NumberOfSigmasITS(posTrack,AliPID::kElectron);
+ } else {
+ fDaughterProp(16) = 1000;
+ fDaughterProp(20) = 20;
+ }
+ if (nNegClusterITS > 0 ){
+ fDaughterProp(17) = negTrack->GetITSsignal();
+ fDaughterProp(21) = pidResonse->NumberOfSigmasITS(negTrack,AliPID::kElectron);
+ } else {
+ fDaughterProp(17) = 1000;
+ fDaughterProp(21) = 20;
+ }
+
+ // TOF
+ if((posTrack->GetStatus() & AliESDtrack::kTOFpid) && !(posTrack->GetStatus() & AliESDtrack::kTOFmismatch)){
+ Double_t t0pos = pidResonse->GetTOFResponse().GetStartTime(posTrack->P());
+ Double_t timesPos[9];
+ posTrack->GetIntegratedTimes(timesPos);
+ Double_t TOFsignalPos = posTrack->GetTOFsignal();
+ Double_t dTpos = TOFsignalPos - t0pos - timesPos[0];
+ fDaughterProp(4) = dTpos;
+ fDaughterProp(5) = pidResonse->NumberOfSigmasTOF(posTrack, AliPID::kElectron);
+ } else {
+ fDaughterProp(4) = 20000;
+ fDaughterProp(5) = -20;
+ }
+ if((negTrack->GetStatus() & AliESDtrack::kTOFpid) && !(negTrack->GetStatus() & AliESDtrack::kTOFmismatch)){
+ Double_t t0neg = pidResonse->GetTOFResponse().GetStartTime(negTrack->P());
+ Double_t timesNeg[9];
+ negTrack->GetIntegratedTimes(timesNeg);
+ Double_t TOFsignalNeg = negTrack->GetTOFsignal();
+ Double_t dTneg = TOFsignalNeg - t0neg - timesNeg[0];
+ fDaughterProp(11) = dTneg;
+ fDaughterProp(12) = pidResonse->NumberOfSigmasTOF(negTrack, AliPID::kElectron);
+ } else {
+ fDaughterProp(11) = 20000;
+ fDaughterProp(12) = -20;
+ }
+
+ fDaughterProp(6) = (Float_t)posTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius()));
+ fDaughterProp(18) = posTrack->GetNcls(1);
+ fDaughterProp(13) = (Float_t)negTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius()));
+ fDaughterProp(19) = negTrack->GetNcls(1);
+
+ if (fTreeQA){
+ fTreeQA->Fill();
+ }
}
//_____________________________________________________________________________________________________
void AliAnalysisTaskConversionQA::ProcessQA(AliAODConversionPhoton *gamma){
-
- // Fill Histograms for QA and MC
- hGammaPt->Fill(gamma->GetPhotonPt());
- hGammaPhi->Fill(gamma->GetPhotonPhi());
- hGammaEta->Fill(gamma->Eta());
- hGammaChi2perNDF->Fill(gamma->GetChi2perNDF());
- hGammaPsiPair->Fill(gamma->GetPsiPair());
- hGammaQt->Fill(gamma->GetArmenterosQt());
- hGammaCosinePointingAngle->Fill(fConversionCuts->GetCosineOfPointingAngle(gamma,fInputEvent));
- hGammaXY->Fill(gamma->GetConversionX(),gamma->GetConversionY());
- hGammaZR->Fill(gamma->GetConversionZ(),gamma->GetConversionRadius());
-
- AliESDtrack * negTrack = fConversionCuts->GetESDTrack((AliESDEvent*)fInputEvent, gamma->GetTrackLabelNegative());
- AliESDtrack * posTrack = fConversionCuts->GetESDTrack((AliESDEvent*)fInputEvent, gamma->GetTrackLabelPositive());
- if(!negTrack||!posTrack)return;
-
- Double_t negtrackPhi = negTrack->Phi();
- Double_t postrackPhi = posTrack->Phi();
- hITSClusterPhi->Fill(negtrackPhi,6);
- hITSClusterPhi->Fill(postrackPhi,6);
- for(Int_t itsLayer = 0; itsLayer<6;itsLayer++){
- if(TESTBIT(negTrack->GetITSClusterMap(),itsLayer)){
- hITSClusterPhi->Fill(negtrackPhi,itsLayer);
- }
- if(TESTBIT(posTrack->GetITSClusterMap(),itsLayer)){
- hITSClusterPhi->Fill(postrackPhi,itsLayer);
- }
- }
-
- hElecPt->Fill(negTrack->Pt(),posTrack->Pt());
- hElecEta->Fill(negTrack->Eta(),posTrack->Eta());
- hElecPhi->Fill(negTrack->Phi(),posTrack->Phi());
-
- hElecNfindableClsTPC->Fill((Float_t)posTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius())));
- hPosiNfindableClsTPC->Fill((Float_t)negTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius())));
-
- // hElecNfindableClsTPC->Fill((Float_t)negTrack->GetNcls(1)/(Float_t)negTrack->GetTPCNclsF());
- // hPosiNfindableClsTPC->Fill((Float_t)posTrack->GetNcls(1)/(Float_t)posTrack->GetTPCNclsF());
-
- if(fMCEvent) ProcessTrueQA(gamma,negTrack,posTrack);
+ AliPIDResponse* pidResonse = ((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetPIDResponse();
+
+ // Fill Histograms for QA and MC
+
+ hGammaPt->Fill(gamma->GetPhotonPt());
+ hGammaPhi->Fill(gamma->GetPhotonPhi());
+ if(gamma->Eta() >= 0.00001){hGammaPhi_Pos->Fill(gamma->Phi());}
+ if(gamma->Eta() <= 0.00001){hGammaPhi_Neg->Fill(gamma->Phi());}
+ hGammaEta->Fill(gamma->Eta());
+ hGammaChi2perNDF->Fill(gamma->GetChi2perNDF());
+ hGammaPsiPair->Fill(gamma->GetPsiPair());
+ hGammaArmenteros->Fill(gamma->GetArmenterosAlpha(),gamma->GetArmenterosQt());
+ hGammaCosinePointingAngle->Fill(fConversionCuts->GetCosineOfPointingAngle(gamma,fInputEvent));
+ hGammaInvMass->Fill(gamma->GetMass());
+ // hGammaXY->Fill(gamma->GetConversionX(),gamma->GetConversionY());
+ // hGammaZR->Fill(gamma->GetConversionZ(),gamma->GetConversionRadius());
+
+ AliVTrack * negTrack = fConversionCuts->GetTrack(fInputEvent, gamma->GetTrackLabelNegative());
+ AliVTrack * posTrack = fConversionCuts->GetTrack(fInputEvent, gamma->GetTrackLabelPositive());
+ if(!negTrack||!posTrack)return;
+
+
+ hElecPt->Fill(negTrack->Pt(),posTrack->Pt());
+ hElecEta->Fill(negTrack->Eta(),posTrack->Eta());
+ hElecPhi->Fill(negTrack->Phi(),posTrack->Phi());
+
+ hElecNfindableClsTPC->Fill((Float_t)posTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius())));
+ hPosiNfindableClsTPC->Fill((Float_t)negTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius())));
+ hElecClsTPC->Fill(negTrack->GetNcls(1));
+ hPosiClsTPC->Fill(posTrack->GetNcls(1));
+ //TPC dEdx
+ hElectrondEdxP->Fill(negTrack->P() ,negTrack->GetTPCsignal());
+ hElectronNSigmadEdxP->Fill(negTrack->P() ,pidResonse->NumberOfSigmasTPC(negTrack, AliPID::kElectron));
+ hElectronNSigmadEdxEta->Fill(negTrack->Eta() ,pidResonse->NumberOfSigmasTPC(negTrack, AliPID::kElectron));
+ hElectronNSigmaPiondEdxP->Fill(negTrack->P() ,pidResonse->NumberOfSigmasTPC(negTrack, AliPID::kPion));
+ hPositrondEdxP->Fill(posTrack->P() ,posTrack->GetTPCsignal());
+ hPositronNSigmadEdxP->Fill(posTrack->P() ,pidResonse->NumberOfSigmasTPC(posTrack, AliPID::kElectron));
+ hPositronNSigmadEdxEta->Fill(posTrack->Eta() ,pidResonse->NumberOfSigmasTPC(posTrack, AliPID::kElectron));
+ hPositronNSigmaPiondEdxP->Fill(posTrack->P() ,pidResonse->NumberOfSigmasTPC(posTrack, AliPID::kPion));
+
+ //TOF signal
+ if((negTrack->GetStatus() & AliESDtrack::kTOFpid) && !(negTrack->GetStatus() & AliESDtrack::kTOFmismatch)){
+ Double_t t0neg = pidResonse->GetTOFResponse().GetStartTime(negTrack->P());
+ Double_t timesNeg[9];
+ negTrack->GetIntegratedTimes(timesNeg);
+ Double_t TOFsignalNeg = negTrack->GetTOFsignal();
+ Double_t dTneg = TOFsignalNeg - t0neg - timesNeg[0];
+ hElectronTOFP->Fill(negTrack->P() ,dTneg);
+ hElectronNSigmaTOFP->Fill(negTrack->P() ,pidResonse->NumberOfSigmasTOF(negTrack, AliPID::kElectron));
+ }
+ if((posTrack->GetStatus() & AliESDtrack::kTOFpid) && !(posTrack->GetStatus() & AliESDtrack::kTOFmismatch)){
+ Double_t t0pos = pidResonse->GetTOFResponse().GetStartTime(posTrack->P());
+ Double_t timesPos[9];
+ posTrack->GetIntegratedTimes(timesPos);
+ Double_t TOFsignalPos = posTrack->GetTOFsignal();
+ Double_t dTpos = TOFsignalPos - t0pos - timesPos[0];
+ hPositronTOFP->Fill(posTrack->P() ,dTpos);
+ hPositronNSigmaTOFP->Fill(posTrack->P() ,pidResonse->NumberOfSigmasTOF(posTrack, AliPID::kElectron));
+ }
+
+ Int_t nPosClusterITS = 0;
+ Int_t nNegClusterITS = 0;
+ for(Int_t itsLayer = 0; itsLayer<6;itsLayer++){
+ if(TESTBIT(negTrack->GetITSClusterMap(),itsLayer)){
+ nNegClusterITS++;
+ }
+ if(TESTBIT(posTrack->GetITSClusterMap(),itsLayer)){
+ nPosClusterITS++;
+ }
+ }
+ Double_t negtrackPhi = negTrack->Phi();
+ Double_t postrackPhi = posTrack->Phi();
+ hITSClusterPhi->Fill(negtrackPhi,nNegClusterITS);
+ hITSClusterPhi->Fill(postrackPhi,nPosClusterITS);
+
+ // ITS signal
+ if (nPosClusterITS > 0 ){
+ hPositronITSdEdxP->Fill(posTrack->P() ,posTrack->GetITSsignal());
+ hPositronNSigmaITSP->Fill(posTrack->P() ,pidResonse->NumberOfSigmasITS(posTrack,AliPID::kElectron));
+ }
+ if (nNegClusterITS > 0 ){
+ hElectronITSdEdxP->Fill(negTrack->P() ,negTrack->GetITSsignal());
+ hElectronNSigmaITSP->Fill(negTrack->P() ,pidResonse->NumberOfSigmasITS(negTrack,AliPID::kElectron));
+ }
+
+
}
-//________________________________________________________________________
-void AliAnalysisTaskConversionQA::ProcessTrueQA(AliAODConversionPhoton *TruePhotonCandidate, AliESDtrack *elec, AliESDtrack *posi)
-{
-
- if(!IsTruePhoton(TruePhotonCandidate)) return;
-
- TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
- TParticle *mcPhoton = TruePhotonCandidate->GetMCParticle(fMCStack);
-
- // True Photon
- hTrueResoulutionR->Fill(TruePhotonCandidate->GetConversionRadius(),
- TruePhotonCandidate->GetConversionRadius()-negDaughter->R());
- hTrueResoulutionZ->Fill(TruePhotonCandidate->GetConversionZ(),
- TruePhotonCandidate->GetConversionZ()-negDaughter->Vz());
- hTrueResoulutionPhi->Fill(TruePhotonCandidate->Phi(),
- TruePhotonCandidate->Phi()-mcPhoton->Phi());
- hTrueGammaPt->Fill(TruePhotonCandidate->Pt());
- hTrueGammaPhi->Fill(TruePhotonCandidate->Phi());
- hTrueGammaEta->Fill(TruePhotonCandidate->Eta());
- hTrueGammaMass->Fill(TruePhotonCandidate->GetMass());
- hTrueGammaChi2perNDF->Fill(TruePhotonCandidate->GetChi2perNDF());
- hTrueGammaPsiPair->Fill(TruePhotonCandidate->GetPsiPair());
- hTrueGammaQt->Fill(TruePhotonCandidate->GetArmenterosQt());
- hTrueGammaCosinePointingAngle->Fill(fConversionCuts->GetCosineOfPointingAngle(TruePhotonCandidate,fInputEvent));
- hTrueGammaXY->Fill(TruePhotonCandidate->GetConversionX(),TruePhotonCandidate->GetConversionY());
- hTrueGammaZR->Fill(TruePhotonCandidate->GetConversionZ(),TruePhotonCandidate->GetConversionRadius());
-
- hTrueElecPt->Fill(elec->Pt(),posi->Pt());
- hTrueElecEta->Fill(elec->Eta(),posi->Eta());
- hTrueElecPhi->Fill(elec->Phi(),posi->Phi());
- hTrueElecNfindableClsTPC
- ->Fill((Float_t)elec->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(TruePhotonCandidate->GetConversionRadius())));
- hTruePosiNfindableClsTPC
- ->Fill((Float_t)posi->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(TruePhotonCandidate->GetConversionRadius())));
- // hTrueElecNfindableClsTPC->Fill((Float_t)elec->GetNcls(1)/(Float_t)elec->GetTPCNclsF());
- // hTruePosiNfindableClsTPC->Fill((Float_t)posi->GetNcls(1)/(Float_t)posi->GetTPCNclsF());
-}
//________________________________________________________________________
-void AliAnalysisTaskConversionQA::CountESDTracks(){
-
- AliESDtrackCuts *EsdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");
- // Using standard function for setting Cuts
- Bool_t selectPrimaries=kTRUE;
- EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
- EsdTrackCuts->SetMaxDCAToVertexZ(2);
- EsdTrackCuts->SetEtaRange(-0.8, 0.8);
- EsdTrackCuts->SetPtRange(0.15);
-
- fNumberOfESDTracks = 0;
- for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
- AliESDtrack* curTrack = (AliESDtrack*)fInputEvent->GetTrack(iTracks);
- if(!curTrack) continue;
- // if(fMCEvent && fConversionCuts->GetSignalRejection() != 0){
- // if(!fConversionCuts->IsParticleFromBGEvent(abs(curTrack->GetLabel()), fMCStack)) continue;
- // }
- if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
- }
- delete EsdTrackCuts;
- EsdTrackCuts=0x0;
-
- return;
+void AliAnalysisTaskConversionQA::CountTracks(){
+
+ if(fInputEvent->IsA()==AliESDEvent::Class()){
+ // Using standard function for setting Cuts
+ Bool_t selectPrimaries=kTRUE;
+ AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries);
+ EsdTrackCuts->SetMaxDCAToVertexZ(2);
+ EsdTrackCuts->SetEtaRange(-0.8, 0.8);
+ EsdTrackCuts->SetPtRange(0.15);
+ fNumberOfESDTracks = 0;
+ for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks);
+ if(!curTrack) continue;
+ if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++;
+ }
+ delete EsdTrackCuts;
+ EsdTrackCuts=0x0;
+ }
+ else if(fInputEvent->IsA()==AliAODEvent::Class()){
+ fNumberOfESDTracks = 0;
+ for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){
+ AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks);
+ if(curTrack->GetID()<0) continue; // Avoid double counting of tracks
+ if(!curTrack->IsHybridGlobalConstrainedGlobal()) continue;
+ if(abs(curTrack->Eta())>0.8) continue;
+ if(curTrack->Pt()<0.15) continue;
+ fNumberOfESDTracks++;
+ }
+ }
+ return;
}
-//________________________________________________________________________
-Bool_t AliAnalysisTaskConversionQA::IsTruePhoton(AliAODConversionPhoton *TruePhotonCandidate)
+
+UInt_t AliAnalysisTaskConversionQA::IsTruePhotonESD(AliAODConversionPhoton *TruePhotonCandidate)
{
- TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
- TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
+ UInt_t kind = 9;
+ TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
+ TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
+ Int_t motherLabelPhoton;
+ Int_t pdgCodePos = 0;
+ Int_t pdgCodeNeg = 0;
+ Int_t pdgCode = 0;
+
+ if(posDaughter == NULL || negDaughter == NULL) {
+ kind = 9;
+ // return kFALSE; // One particle does not exist
+
+ } else if( posDaughter->GetMother(0) != negDaughter->GetMother(0) || (posDaughter->GetMother(0) == negDaughter->GetMother(0) && posDaughter->GetMother(0) ==-1)) {
+ kind = 1;
+ // return 1;
+ pdgCodePos=TMath::Abs(posDaughter->GetPdgCode());
+ pdgCodeNeg=TMath::Abs(negDaughter->GetPdgCode());
+ if(pdgCodePos==11 && pdgCodeNeg==11) return 10; //Electron Combinatorial
+ if(pdgCodePos==11 && pdgCodeNeg==11 &&
+ (posDaughter->GetMother(0) == negDaughter->GetMother(0) && posDaughter->GetMother(0) ==-1)) return 15; //direct Electron Combinatorial
+
+ if(pdgCodePos==211 && pdgCodeNeg==211) return 11; //Pion Combinatorial
+ if((pdgCodePos==211 && pdgCodeNeg==2212) ||(pdgCodePos==2212 && pdgCodeNeg==211)) return 12; //Pion, Proton Combinatorics
+ if((pdgCodePos==211 && pdgCodeNeg==11) ||(pdgCodePos==11 && pdgCodeNeg==211)) return 13; //Pion, Electron Combinatorics
+ if(pdgCodePos==321 || pdgCodeNeg==321) return 14; //Kaon combinatorics
+ }else{
+ TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
+ pdgCodePos=posDaughter->GetPdgCode();
+ pdgCodeNeg=negDaughter->GetPdgCode();
+ motherLabelPhoton= Photon->GetMother(0);
+ if ( TruePhotonCandidate->GetMCParticle(fMCStack)->GetPdgCode()) pdgCode = TruePhotonCandidate->GetMCParticle(fMCStack)->GetPdgCode();
+
+ if(TMath::Abs(pdgCodePos)!=11 || TMath::Abs(pdgCodeNeg)!=11) return 2; // true from hadronic decays
+ else if ( !(pdgCodeNeg==pdgCodePos)){
+ if(pdgCode == 111) return 3; // pi0 Dalitz
+ else if (pdgCode == 221) return 4; // eta Dalitz
+ else if (!(negDaughter->GetUniqueID() != 5 || posDaughter->GetUniqueID() !=5)){
+ if(pdgCode == 22 && motherLabelPhoton < fMCStack->GetNprimary()){
+ return 0; // primary photons
+ } else if (pdgCode == 22){
+ return 5; //secondary photons
+ }
+ }
+ }
+ }
+
+ return kind;
+}
- if(posDaughter == NULL || negDaughter == NULL) return kFALSE; // One particle does not exist
- Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
- if(posDaughter->GetMother(0) != negDaughter->GetMother(0)) return kFALSE;
- else if(posDaughter->GetMother(0) == -1) return kFALSE;
+//________________________________________________________________________
+UInt_t AliAnalysisTaskConversionQA::IsTruePhotonAOD(AliAODConversionPhoton *TruePhotonCandidate)
+{
+
+ UInt_t kind = 9;
+ TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+ if (AODMCTrackArray!=NULL && TruePhotonCandidate!=NULL){
+ AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
+ AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
+ Int_t pdgCodePos = 0;
+ Int_t pdgCodeNeg = 0;
+ Int_t pdgCode = 0;
+ if(posDaughter == NULL || negDaughter == NULL) {
+ kind = 9;
+ } else if( posDaughter->GetMother() != negDaughter->GetMother() || (posDaughter->GetMother() == negDaughter->GetMother() && posDaughter->GetMother() ==-1)) {
+ kind = 1;
+ pdgCodePos=TMath::Abs(posDaughter->GetPdgCode());
+ pdgCodeNeg=TMath::Abs(negDaughter->GetPdgCode());
+ if(pdgCodePos==11 && pdgCodeNeg==11) kind = 10; //Electron Combinatorial
+ if(pdgCodePos==11 && pdgCodeNeg==11 &&
+ (posDaughter->GetMother() == negDaughter->GetMother() && posDaughter->GetMother() ==-1))kind = 15; //direct Electron Combinatorial
+
+ if(pdgCodePos==211 && pdgCodeNeg==211) kind = 11; //Pion Combinatorial
+ if((pdgCodePos==211 && pdgCodeNeg==2212) ||(pdgCodePos==2212 && pdgCodeNeg==211)) kind = 12; //Pion, Proton Combinatorics
+ if((pdgCodePos==211 && pdgCodeNeg==11) ||(pdgCodePos==11 && pdgCodeNeg==211)) kind = 13; //Pion, Electron Combinatorics
+ if(pdgCodePos==321 || pdgCodeNeg==321) kind = 14; //Kaon combinatorics
+ }else{
+ AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
+ pdgCodePos=posDaughter->GetPdgCode();
+ pdgCodeNeg=negDaughter->GetPdgCode();
+
+ if ( Photon->GetPdgCode())
+ pdgCode = Photon->GetPdgCode();
+ if(TMath::Abs(pdgCodePos)!=11 || TMath::Abs(pdgCodeNeg)!=11) kind = 2; // true from hadronic decays
+ else if ( !(pdgCodeNeg==pdgCodePos)){
+ if(pdgCode == 111) kind = 3; // pi0 Dalitz
+ else if (pdgCode == 221) kind = 4; // eta Dalitz
+ else if (!(negDaughter->GetMCProcessCode() != 5 || posDaughter->GetMCProcessCode() !=5)){
+ if(pdgCode == 22 && Photon->IsPrimary()){
+ kind = 0; // primary photons
+ } else if (pdgCode == 22){
+ kind = 5; //secondary photons
+ }
+ }
+ }
+ }
+
+ return kind;
+ }
+ return kind;
+}
- if(pdgCode[0]!=11 || pdgCode[1]!=11) return kFALSE; //One Particle is not electron
- if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return kFALSE; // Same Charge
- if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return kFALSE;// check if the daughters come from a conversion
+//________________________________________________________________________
+void AliAnalysisTaskConversionQA::RelabelAODPhotonCandidates(Bool_t mode){
+
+ // Relabeling For AOD Event
+ // ESDiD -> AODiD
+ // MCLabel -> AODMCLabel
+
+ if(mode){
+ fMCStackPos = new Int_t[fConversionGammas->GetEntries()];
+ fMCStackNeg = new Int_t[fConversionGammas->GetEntries()];
+ }
+
+ for(Int_t iGamma = 0;iGamma<fConversionGammas->GetEntries();iGamma++){
+ AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fConversionGammas->At(iGamma);
+ if(!PhotonCandidate) continue;
+ if(!mode){// Back to ESD Labels
+ PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
+ PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
+ //PhotonCandidate->IsAODMCLabel(kFALSE);
+ continue;
+ }
+ fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
+ fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
+
+ Bool_t AODLabelPos = kFALSE;
+ Bool_t AODLabelNeg = kFALSE;
+
+ for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
+ AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
+ if(!AODLabelPos){
+ if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
+ PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
+ AODLabelPos = kTRUE;
+ }
+ }
+ if(!AODLabelNeg){
+ if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
+ PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
+ AODLabelNeg = kTRUE;
+ }
+ }
+ if(AODLabelNeg && AODLabelPos){
+ break;
+ }
+ } // Both ESD Tracks have AOD Tracks with Positive IDs
+ if(!AODLabelPos || !AODLabelNeg){
+ for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
+ AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
+ if(tempDaughter->GetID()<0){
+ if(!AODLabelPos){
+ if( (abs(tempDaughter->GetID())-1) == PhotonCandidate->GetTrackLabelPositive()){
+ PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
+ AODLabelPos = kTRUE;
+ }
+ }
+ if(!AODLabelNeg){
+ if( (abs(tempDaughter->GetID())-1) == PhotonCandidate->GetTrackLabelNegative()){
+ PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
+ AODLabelNeg = kTRUE;
+ }
+ }
+ }
+ if(AODLabelNeg && AODLabelPos){
+ break;
+ }
+ }
+ if(!AODLabelPos || !AODLabelNeg){
+ cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
+ }
+ }
+ }
+
+ if(!mode){
+ delete[] fMCStackPos;
+ delete[] fMCStackNeg;
+ }
+}
- TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
- if(Photon->GetPdgCode() != 22) return kFALSE; // Mother is no Photon
+void AliAnalysisTaskConversionQA::SetLogBinningXTH2(TH2* histoRebin){
+ TAxis *axisafter = histoRebin->GetXaxis();
+ Int_t bins = axisafter->GetNbins();
+ Double_t from = axisafter->GetXmin();
+ Double_t to = axisafter->GetXmax();
+ Double_t *newbins = new Double_t[bins+1];
+ newbins[0] = from;
+ Double_t factor = TMath::Power(to/from, 1./bins);
+ for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
+ axisafter->Set(bins, newbins);
+ delete [] newbins;
- return kTRUE;
}
//________________________________________________________________________