From e2e56010066a7a074e9185cd5da3d8f2446af18a Mon Sep 17 00:00:00 2001 From: bhippoly Date: Wed, 2 Dec 2009 17:03:17 +0000 Subject: [PATCH] PerformanceStrange task: V0 multiplicity in terminate and AddTask macro (H.Ricaud) --- .../AliAnalysisTaskPerformanceStrange.cxx | 72 +++++++++++++++++-- .../AliAnalysisTaskPerformanceStrange.h | 3 + .../macros/AddTaskPerformanceStrange.C | 45 ++++++++++++ 3 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 PWG2/SPECTRA/macros/AddTaskPerformanceStrange.C diff --git a/PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.cxx b/PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.cxx index b4b53cc84a1..a5ecf27110e 100644 --- a/PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.cxx +++ b/PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.cxx @@ -114,6 +114,8 @@ AliAnalysisTaskPerformanceStrange::AliAnalysisTaskPerformanceStrange() fHistCosPointAngleZoom(0), fHistProdRadius(0), fHistProdRadiusMI(0), + fHistV0Multiplicity(0), + fHistV0MultiplicityMI(0), fHistPtVsYK0s(0), fHistPtVsYK0sMI(0), fHistPtVsYLambda(0), @@ -338,6 +340,8 @@ AliAnalysisTaskPerformanceStrange::AliAnalysisTaskPerformanceStrange(const char fHistCosPointAngleZoom(0), fHistProdRadius(0), fHistProdRadiusMI(0), + fHistV0Multiplicity(0), + fHistV0MultiplicityMI(0), fHistPtVsYK0s(0), fHistPtVsYK0sMI(0), fHistPtVsYLambda(0), @@ -681,6 +685,23 @@ void AliAnalysisTaskPerformanceStrange::UserCreateOutputObjects() fHistProdRadiusMI = new TH2F("h2ProdRadiusMI", "Production position, V0s MI;x (cm);y (cm)", 100,-50,50,100,-50,50); fListHist->Add(fHistProdRadiusMI); + // V0 Multiplicity + if (!fHistV0Multiplicity) { + if (fCollidingSystems) + fHistV0Multiplicity = new TH1F("fHistV0Multiplicity", "Multiplicity distribution;Number of Offline V0s;Events", 200, 0, 40000); + else + fHistV0Multiplicity = new TH1F("fHistV0Multiplicity", "Multiplicity distribution;Number of Offline V0s;Events", 10, 0, 10); + fListHist->Add(fHistV0Multiplicity); + } + + if (!fHistV0MultiplicityMI) { + if (fCollidingSystems) + fHistV0MultiplicityMI = new TH1F("fHistV0MultiplicityMI", "Multiplicity distribution;Number of On-the-fly V0s;Events", 200, 0, 40000); + else + fHistV0MultiplicityMI = new TH1F("fHistV0MultiplicityMI", "Multiplicity distribution;Number of On-the-fly V0s;Events", 10, 0, 10); + fListHist->Add(fHistV0MultiplicityMI); + } + // Pt and rapidity distribution: fHistPtVsYK0s = new TH2F("h2PtVsYK0s", "K^{0} candidates;p_{t} (GeV/c);rapidity",150,0,15,30,-1.5,1.5); fListHist->Add(fHistPtVsYK0s); @@ -1136,8 +1157,8 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) // Main loop // Called for each event - TClonesArray *mcArray; - AliStack* stack; + AliStack* stack = 0; + TClonesArray *mcArray = 0; AliVEvent* lEvent = InputEvent(); @@ -1554,6 +1575,9 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) //************************************ Double_t lMagneticField = 999; + + //Multiplcity: + Int_t nv0sTot= 0, nv0s = 0, nv0sMI = 0; // Variables: @@ -1687,8 +1711,10 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) //************************* // V0 loop + + nv0sTot = lEvent->GetNumberOfV0s(); - for (Int_t iV0 = 0; iV0 < lEvent->GetNumberOfV0s(); iV0++) { + for (Int_t iV0 = 0; iV0 < nv0sTot; iV0++) { lIndexPosMother = 0; lIndexNegMother = 0; lIndexMotherOfMother = 0; @@ -1725,6 +1751,7 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) lLabelTrackPos = (UInt_t)TMath::Abs(myTrackPos->GetLabel()); lLabelTrackNeg = (UInt_t)TMath::Abs(myTrackNeg->GetLabel()); + // Tracks quality cuts if ( ( (myTrackPos->GetTPCNcls()) < 80 ) || ( (myTrackNeg->GetTPCNcls()) < 80 ) ) continue; @@ -1765,6 +1792,10 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) rcPosZ = lV0Position[2]; rcPosR = lV0Radius; + //Multiplicity: + if(!lOnFlyStatus) nv0s++; + else if(lOnFlyStatus) nv0sMI++; + // Invariant mass v0->ChangeMassHypothesis(310); lInvMassK0s = v0->GetEffMass(); @@ -1823,7 +1854,7 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) // Monte-Carlo particle associated to reconstructed particles: - if (lLabelTrackPos < 0 || lLabelTrackNeg < 0) continue; + //if (lLabelTrackPos < 0 || lLabelTrackNeg < 0) continue; TParticle *lMCESDPartPos = stack->Particle(lLabelTrackPos); if(!lMCESDPartPos) { Printf("no MC particle for positive and/or negative daughter\n"); @@ -1879,6 +1910,10 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) rcPosY = myAODv0->DecayVertexV0Y(); rcPosZ = myAODv0->DecayVertexV0Z(); + //Multiplicity: + if(!lOnFlyStatus) nv0s++; + else if(lOnFlyStatus) nv0sMI++; + lInvMassK0s = myAODv0->MassK0Short(); lInvMassLambda = myAODv0->MassLambda(); lInvMassAntiLambda = myAODv0->MassAntiLambda(); @@ -1915,6 +1950,7 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) lLabelTrackPos = TMath::Abs(lVPartPos->GetLabel()); lLabelTrackNeg = TMath::Abs(lVPartNeg->GetLabel()); + // Armenteros variables: lAlphaV0 = myAODv0->AlphaV0(); lPtArmV0 = myAODv0->PtArmV0(); @@ -2414,10 +2450,12 @@ void AliAnalysisTaskPerformanceStrange::UserExec(Option_t *) } // end V0 loop + fHistV0Multiplicity->Fill(nv0s); + fHistV0MultiplicityMI->Fill(nv0sMI); + if (fAnalysisType == "ESD") { if(myPrimaryVertex) delete myPrimaryVertex;} if (myPosAodTrack) delete myPosAodTrack; if (myNegAodTrack) delete myNegAodTrack; - //if (myAODVertex) delete myAODVertex; // Don't !! @@ -2431,6 +2469,30 @@ void AliAnalysisTaskPerformanceStrange::Terminate(Option_t *) { // Draw result to the screen // Called once at the end of the query + + fHistV0Multiplicity = dynamic_cast (((TList*)GetOutputData(1))->FindObject("fHistV0Multiplicity")); + if (!fHistV0Multiplicity) { + Printf("ERROR: fHistV0Multiplicity not available"); + return; + } + + fHistV0MultiplicityMI = dynamic_cast (((TList*)GetOutputData(1))->FindObject("fHistV0MultiplicityMI")); + if (!fHistV0MultiplicityMI) { + Printf("ERROR: fHistV0MultiplicityMI not available"); + return; + } + + TCanvas *canPerformanceStrange = new TCanvas("AliAnalysisTaskPerformanceStrange","Multiplicity",10,10,510,510); + canPerformanceStrange->Divide(2,1); + if (fHistV0Multiplicity->GetMaximum() > 0.) canPerformanceStrange->cd(1)->SetLogy(); + fHistV0Multiplicity->SetMarkerStyle(25); + fHistV0Multiplicity->DrawCopy("E"); + if (fHistV0MultiplicityMI->GetMaximum() > 0.) canPerformanceStrange->cd(2)->SetLogy(); + fHistV0MultiplicityMI->SetMarkerStyle(24); + fHistV0MultiplicityMI->DrawCopy("E"); + + + } diff --git a/PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.h b/PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.h index 6c44901093d..e9c904f68e5 100644 --- a/PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.h +++ b/PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.h @@ -103,6 +103,9 @@ class AliAnalysisTaskPerformanceStrange : public AliAnalysisTaskSE { TH2F *fHistProdRadius; //! Histo TH2F *fHistProdRadiusMI; //! Histo + TH1F *fHistV0Multiplicity; //! Histo + TH1F *fHistV0MultiplicityMI; //! Histo + TH2F *fHistPtVsYK0s; //! Histo TH2F *fHistPtVsYK0sMI; //! Histo TH2F *fHistPtVsYLambda; //! Histo diff --git a/PWG2/SPECTRA/macros/AddTaskPerformanceStrange.C b/PWG2/SPECTRA/macros/AddTaskPerformanceStrange.C new file mode 100644 index 00000000000..7effa310ff8 --- /dev/null +++ b/PWG2/SPECTRA/macros/AddTaskPerformanceStrange.C @@ -0,0 +1,45 @@ +AliAnalysisTaskPerformanceStrange *AddTaskPerformanceStrange(Short_t lCollidingSystems=0, /*0 = pp, 1 = AA*/ + TString lAnalysisCut="no" ) +{ +// Creates, configures and attaches to the train a strangeness task. + // Get the pointer to the existing analysis manager via the static access method. + //============================================================================== + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTaskPerformanceStrange", "No analysis manager to connect to."); + return NULL; + } + + // Check the analysis type using the event handlers connected to the analysis manager. + //============================================================================== + if (!mgr->GetInputEventHandler()) { + ::Error("AddTaskPerformanceStrange", "This task requires an input event handler"); + return NULL; + } + TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD" + + // Create and configure the task + AliAnalysisTaskPerformanceStrange *taskperformancestrange = new AliAnalysisTaskPerformanceStrange("TaskPerformanceStrange"); + taskperformancestrange->SetCollidingSystems(lCollidingSystems); + taskperformancestrange->SetAnalysisType(type); + taskperformancestrange->SetAnalysisCut(lAnalysisCut); + mgr->AddTask(taskperformancestrange); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + TString outputFileName = AliAnalysisManager::GetCommonFileName(); + outputFileName += ":PWG2Strange"; + if (lCollidingSystems) outputFileName += "_AA"; + else outputFileName += "_PP"; + if (mgr->GetMCtruthEventHandler()) outputFileName += "_MC"; + + AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clistPerformanceStrange", + TList::Class(), + AliAnalysisManager::kOutputContainer, + outputFileName ); + + mgr->ConnectInput(taskperformancestrange, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(taskperformancestrange, 1, coutput1); + return taskperformancestrange; +} -- 2.43.0