]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
PerformanceStrange task: V0 multiplicity in terminate and AddTask macro (H.Ricaud)
authorbhippoly <bhippoly@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 2 Dec 2009 17:03:17 +0000 (17:03 +0000)
committerbhippoly <bhippoly@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 2 Dec 2009 17:03:17 +0000 (17:03 +0000)
PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.cxx
PWG2/SPECTRA/AliAnalysisTaskPerformanceStrange.h
PWG2/SPECTRA/macros/AddTaskPerformanceStrange.C [new file with mode: 0644]

index b4b53cc84a1c3679689b80bd3d225f7b006566e5..a5ecf27110ef31393cbc24b7ad3f48cf377360c1 100644 (file)
@@ -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<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistV0Multiplicity"));
+  if (!fHistV0Multiplicity) {
+    Printf("ERROR: fHistV0Multiplicity not available");
+    return;
+  }
+
+  fHistV0MultiplicityMI = dynamic_cast<TH1F*> (((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");
+  
+
+
   
 }
 
index 6c44901093daaf692d71255bb45ae58905f116b1..e9c904f68e59faf8950fe887330538d18bb31c11 100644 (file)
@@ -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 (file)
index 0000000..7effa31
--- /dev/null
@@ -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;
+}