// This task is for QAing the V0s from ESD/AOD
// Origin: B.H. Nov2007, hippolyt@in2p3.fr
//-----------------------------------------------------------------
-#include "TChain.h"
-#include "TTree.h"
#include "TList.h"
#include "TH1F.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "AliAnalysisTaskSE.h"
-#include "AliAnalysisManager.h"
#include "AliESDEvent.h"
-#include "AliESDInputHandler.h"
+#include "AliESDVertex.h"
#include "AliAODEvent.h"
-#include "AliAODInputHandler.h"
+#include "AliAODVertex.h"
#include "AliESDv0.h"
ClassImp(AliAnalysisTaskCheckV0)
+//________________________________________________________________________
+AliAnalysisTaskCheckV0::AliAnalysisTaskCheckV0()
+ : AliAnalysisTaskSE(), fAnalysisType("ESD"), fCollidingSystems(0), fListHist(),
+ fHistPrimaryVertexPosX(0), fHistPrimaryVertexPosY(0), fHistPrimaryVertexPosZ(0),
+ fHistTrackMultiplicity(0), fHistV0Multiplicity(0), fHistV0OnFlyStatus(0),
+ fHistV0MultiplicityOff(0), fHistV0Chi2Off(0),
+ fHistDcaV0DaughtersOff(0), fHistV0CosineOfPointingAngleOff(0),
+ fHistV0RadiusOff(0),fHistDcaV0ToPrimVertexOff(0),
+ fHistDcaPosToPrimVertexOff(0),fHistDcaNegToPrimVertexOff(0),
+ fHistMassK0Off(0),fHistMassLambdaOff(0),fHistMassAntiLambdaOff(0),
+ fHistV0MultiplicityOn(0), fHistV0Chi2On(0),
+ fHistDcaV0DaughtersOn(0), fHistV0CosineOfPointingAngleOn(0),
+ fHistV0RadiusOn(0),fHistDcaV0ToPrimVertexOn(0),
+ fHistDcaPosToPrimVertexOn(0),fHistDcaNegToPrimVertexOn(0),
+ fHistMassK0On(0),fHistMassLambdaOn(0),fHistMassAntiLambdaOn(0)
+{
+ // Dummy constructor
+}
//________________________________________________________________________
AliAnalysisTaskCheckV0::AliAnalysisTaskCheckV0(const char *name)
- : AliAnalysisTaskSE(name), fESD(0), fAOD(0),
- fAnalysisType("ESD"), fCollidingSystems(0), fListHist(),
+ : AliAnalysisTaskSE(name), fAnalysisType("ESD"), fCollidingSystems(0), fListHist(),
+ fHistPrimaryVertexPosX(0), fHistPrimaryVertexPosY(0), fHistPrimaryVertexPosZ(0),
fHistTrackMultiplicity(0), fHistV0Multiplicity(0), fHistV0OnFlyStatus(0),
fHistV0MultiplicityOff(0), fHistV0Chi2Off(0),
fHistDcaV0DaughtersOff(0), fHistV0CosineOfPointingAngleOff(0),
fHistMassK0On(0),fHistMassLambdaOn(0),fHistMassAntiLambdaOn(0)
{
// Constructor
-
- // Define input and output slots here
- // Input slot #0 works with a TChain
- DefineInput(0, TChain::Class());
- // Output slot #0 writes into a TH1 container
- DefineOutput(0, TH1F::Class());
+ // Define output slots only here
// Output slot #1 writes into a TList container
DefineOutput(1, TList::Class());
}
//________________________________________________________________________
-void AliAnalysisTaskCheckV0::ConnectInputData(Option_t *)
-{
- // Connect ESD or AOD here
- // Called once
-
- TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
- if (!tree) {
- Printf("ERROR: Could not read chain from input slot 0");
- } else {
- // tree->Print();
- if(fAnalysisType == "ESD") {
- tree->SetBranchStatus("*", kFALSE);
- tree->SetBranchStatus("Tracks.*", kTRUE);
- tree->SetBranchStatus("V0s.*", kTRUE);
- // tree->SetBranchStatus("fTracks.*", kTRUE);
- // tree->SetBranchStatus("fV0s.*", kTRUE);
-
- AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-
- if (!esdH) {
- Printf("ERROR: Could not get ESDInputHandler");
- } else
- fESD = esdH->GetEvent();
- }
- else if(fAnalysisType == "AOD") {
- AliAODInputHandler *aodH = dynamic_cast<AliAODInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
-
- if (!aodH) {
- Printf("ERROR: Could not get AODInputHandler");
- } else
- fAOD = aodH->GetEvent();
- }
- else
- Printf("Wrong analysis type: Only ESD and AOD types are allowed! (actually only ESD types is supported for the moment!)");
- }
-
-}
-
-//________________________________________________________________________
-void AliAnalysisTaskCheckV0::CreateOutputObjects()
+void AliAnalysisTaskCheckV0::UserCreateOutputObjects()
{
// Create histograms
// Called once
// Distinguish Track and V0 Multiplicity !
fListHist = new TList();
+
+ if (!fHistPrimaryVertexPosX) {
+ fHistPrimaryVertexPosX = new TH1F("fHistPrimaryVertexPosX", "Primary vertex position in x;Position in x (cm);Events;",100,-1,1);
+ fListHist->Add(fHistPrimaryVertexPosX);
+ }
+ if (!fHistPrimaryVertexPosY) {
+ fHistPrimaryVertexPosY = new TH1F("fHistPrimaryVertexPosY", "Primary vertex position in y;Position in y (cm);Events;",100,-1,1);
+ fListHist->Add(fHistPrimaryVertexPosY);
+ }
+ if (!fHistPrimaryVertexPosZ) {
+ fHistPrimaryVertexPosZ = new TH1F("fHistPrimaryVertexPosZ", "Primary vertex position in z;Position in z (cm);Events;",100,-1,1);
+ fListHist->Add(fHistPrimaryVertexPosZ);
+ }
if (!fHistTrackMultiplicity) {
if (fCollidingSystems)
}
//________________________________________________________________________
-void AliAnalysisTaskCheckV0::Exec(Option_t *)
+void AliAnalysisTaskCheckV0::UserExec(Option_t *)
{
// Main loop
// Called for each event
+ AliVEvent* lEvent = InputEvent();
+ if (!lEvent) {
+ Printf("ERROR: Event not available");
+ return;
+ }
+ fHistTrackMultiplicity->Fill(lEvent->GetNumberOfTracks());
+
+ Double_t tPrimaryVtxPosition[3];
+ Int_t nv0s = 0;
+ nv0s = lEvent->GetNumberOfV0s();
+ Printf("CheckV0 analysis task: There are %d v0s in this event",nv0s);
+
+ Int_t lOnFlyStatus = 0, nv0sOn = 0, nv0sOff = 0;
+ Double_t lChi2V0 = 0;
+ Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
+ Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
+ Double_t lV0CosineOfPointingAngle = 0;
+ Double_t lV0Radius = 0;
+ Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
if(fAnalysisType == "ESD") {
- if (!fESD) {
- Printf("ERROR: fESD not available");
- return;
- }
- // Printf("There are %d tracks in this event", fESD->GetNumberOfTracks());
- fHistTrackMultiplicity->Fill(fESD->GetNumberOfTracks());
-
- Int_t nv0s = 0;
- nv0s = fESD->GetNumberOfV0s();
+ const AliESDVertex *primaryVtx = ((AliESDEvent*)lEvent)->GetPrimaryVertex();
+ tPrimaryVtxPosition[0] = primaryVtx->GetXv();
+ tPrimaryVtxPosition[1] = primaryVtx->GetYv();
+ tPrimaryVtxPosition[2] = primaryVtx->GetZv();
- Int_t lOnFlyStatus = 0, nv0sOn = 0, nv0sOff = 0;
- Double_t lChi2V0 = 0;
- Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
- Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
- Double_t lV0CosineOfPointingAngle = 0;
- Double_t lV0Radius = 0;
- Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
+ fHistPrimaryVertexPosX->Fill(tPrimaryVtxPosition[0]);
+ fHistPrimaryVertexPosY->Fill(tPrimaryVtxPosition[1]);
+ fHistPrimaryVertexPosZ->Fill(tPrimaryVtxPosition[2]);
for (Int_t iV0 = 0; iV0 < nv0s; iV0++)
{// This is the begining of the V0 loop
- AliESDv0 *v0 = fESD->GetV0(iV0);
+ AliESDv0 *v0 = ((AliESDEvent*)lEvent)->GetV0(iV0);
if (!v0) continue;
Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]);
Double_t lMomPos[3]; v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
Double_t lMomNeg[3]; v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
- AliESDtrack *pTrack=fESD->GetTrack(lKeyPos);
- AliESDtrack *nTrack=fESD->GetTrack(lKeyNeg);
+ AliESDtrack *pTrack=((AliESDEvent*)lEvent)->GetTrack(lKeyPos);
+ AliESDtrack *nTrack=((AliESDEvent*)lEvent)->GetTrack(lKeyNeg);
if (!pTrack || !nTrack) {
Printf("ERROR: Could not retreive one of the daughter track");
continue;
lOnFlyStatus = v0->GetOnFlyStatus();
lChi2V0 = v0->GetChi2V0();
lDcaV0Daughters = v0->GetDcaV0Daughters();
- lDcaV0ToPrimVertex = v0->GetD();
- lV0CosineOfPointingAngle = v0->GetV0CosineOfPointingAngle();
+ lDcaV0ToPrimVertex = v0->GetD(tPrimaryVtxPosition[0],tPrimaryVtxPosition[1],tPrimaryVtxPosition[2]);
+ lV0CosineOfPointingAngle = v0->GetV0CosineOfPointingAngle(tPrimaryVtxPosition[0],tPrimaryVtxPosition[1],tPrimaryVtxPosition[2]);
// Getting invariant mass infos directly from ESD
v0->ChangeMassHypothesis(310);
fHistMassAntiLambdaOn->Fill(lInvMassAntiLambda);
}
}// This is the end of the V0 loop
-
- fHistV0Multiplicity->Fill(nv0s);
- fHistV0MultiplicityOff->Fill(nv0sOff);
- fHistV0MultiplicityOn->Fill(nv0sOn);
} // end of "ESD" analysis
else if(fAnalysisType == "AOD") {
- if (!fAOD) {
- Printf("ERROR: fAOD not available");
- return;
- }
- Printf("Well: not fully implemented yet");
-
- // Printf("There are %d tracks in this event", fAOD->GetNumberOfTracks());
- fHistTrackMultiplicity->Fill(fAOD->GetNumberOfTracks());
-
- Int_t nv0s = 0;
- nv0s = fAOD->GetNV0s();
+ const AliAODVertex *primaryVtx = ((AliAODEvent*)lEvent)->GetPrimaryVertex();
+ tPrimaryVtxPosition[0] = primaryVtx->GetX();
+ tPrimaryVtxPosition[1] = primaryVtx->GetY();
+ tPrimaryVtxPosition[2] = primaryVtx->GetZ();
- Int_t lOnFlyStatus = 0, nv0sOn = 0, nv0sOff = 0;
- Double_t lChi2V0 = 0;
- Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
- Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
- Double_t lV0CosineOfPointingAngle = 0;
- Double_t lV0Radius = 0;
- Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
+ fHistPrimaryVertexPosX->Fill(tPrimaryVtxPosition[0]);
+ fHistPrimaryVertexPosY->Fill(tPrimaryVtxPosition[1]);
+ fHistPrimaryVertexPosZ->Fill(tPrimaryVtxPosition[2]);
for (Int_t iV0 = 0; iV0 < nv0s; iV0++)
{// This is the begining of the V0 loop
- AliAODv0 *v0 = fAOD->GetV0(iV0);
+ AliAODv0 *v0 = ((AliAODEvent*)lEvent)->GetV0(iV0);
if (!v0) continue;
lV0Radius = v0->RadiusV0();
lDcaNegToPrimVertex = v0->DcaNegToPrimVertex();
- lOnFlyStatus = 0; // v0->GetOnFlyStatus(); TBD
+ lOnFlyStatus = v0->GetOnFlyStatus();
lChi2V0 = v0->Chi2V0();
lDcaV0Daughters = v0->DcaV0Daughters();
lDcaV0ToPrimVertex = v0->DcaV0ToPrimVertex();
- lV0CosineOfPointingAngle = 0; // v0->GetV0CosineOfPointingAngle(); TBD
+ lV0CosineOfPointingAngle = v0->CosPointingAngle(tPrimaryVtxPosition);
lInvMassK0 = v0->MassK0Short();
lInvMassLambda = v0->MassLambda();
fHistMassAntiLambdaOn->Fill(lInvMassAntiLambda);
}
}// This is the end of the V0 loop
-
- fHistV0Multiplicity->Fill(nv0s);
- fHistV0MultiplicityOff->Fill(nv0sOff);
- fHistV0MultiplicityOn->Fill(nv0sOn);
} // end of "AOD" analysis
+ fHistV0Multiplicity->Fill(nv0s);
+ fHistV0MultiplicityOff->Fill(nv0sOff);
+ fHistV0MultiplicityOn->Fill(nv0sOn);
+
// Post output data.
- PostData(0, fHistTrackMultiplicity);
PostData(1, fListHist);
}
// Draw result to the screen
// Called once at the end of the query
- fHistTrackMultiplicity = dynamic_cast<TH1F*> (GetOutputData(0));
+ fHistTrackMultiplicity = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistTrackMultiplicity"));
if (!fHistTrackMultiplicity) {
Printf("ERROR: fHistTrackMultiplicity not available");
return;
TCanvas *canCheckV0 = new TCanvas("AliAnalysisTaskCheckV0","Multiplicity",10,10,510,510);
canCheckV0->Divide(2,2);
- canCheckV0->cd(1)->SetLogy();
- fHistTrackMultiplicity->SetMarkerStyle(22);
+ if (fHistTrackMultiplicity->GetMaximum() > 0.) canCheckV0->cd(1)->SetLogy();
+ fHistTrackMultiplicity->SetMarkerStyle(26);
fHistTrackMultiplicity->DrawCopy("E");
- fHistV0Multiplicity->SetMarkerStyle(26);
+ fHistV0Multiplicity->SetMarkerStyle(25);
fHistV0Multiplicity->DrawCopy("ESAME");
fHistV0MultiplicityOff->SetMarkerStyle(24);
fHistV0MultiplicityOff->DrawCopy("ESAME");
fHistV0MultiplicityOn->SetMarkerStyle(20);
fHistV0MultiplicityOn->DrawCopy("ESAME");
- TLegend *legendMultiplicity = new TLegend(0.4,0.4,0.65,0.6);
+ TLegend *legendMultiplicity = new TLegend(0.5,0.5,0.75,0.75);
legendMultiplicity->AddEntry(fHistTrackMultiplicity,"tracks");
legendMultiplicity->AddEntry(fHistV0Multiplicity,"all V^{0}");
legendMultiplicity->AddEntry(fHistV0MultiplicityOff,"offline V^{0}");
}
canCheckV0->cd(2);
- fHistMassK0Off->SetMarkerStyle(24);
- fHistMassK0Off->DrawCopy("E");
fHistMassK0On->SetMarkerStyle(20);
- fHistMassK0On->DrawCopy("ESAME");
+ fHistMassK0On->DrawCopy("E");
+ fHistMassK0Off->SetMarkerStyle(24);
+ fHistMassK0Off->DrawCopy("ESAME");
canCheckV0->cd(3);
- fHistMassLambdaOff->SetMarkerStyle(24);
- fHistMassLambdaOff->DrawCopy("E");
fHistMassLambdaOn->SetMarkerStyle(20);
- fHistMassLambdaOn->DrawCopy("ESAME");
+ fHistMassLambdaOn->DrawCopy("E");
+ fHistMassLambdaOff->SetMarkerStyle(24);
+ fHistMassLambdaOff->DrawCopy("ESAME");
canCheckV0->cd(4);
- fHistMassAntiLambdaOff->SetMarkerStyle(24);
- fHistMassAntiLambdaOff->DrawCopy("E");
fHistMassAntiLambdaOn->SetMarkerStyle(20);
- fHistMassAntiLambdaOn->DrawCopy("ESAME");
+ fHistMassAntiLambdaOn->DrawCopy("E");
+ fHistMassAntiLambdaOff->SetMarkerStyle(24);
+ fHistMassAntiLambdaOff->DrawCopy("ESAME");
+
}