]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx
end-of-line normalization
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / AliAnalysisTaskContMC.cxx
index 18cfbb137608a9c3f1070e0dbf1679aa3321703b..b31745535346f63255918adb52fb65a74d2659ed 100644 (file)
-/**************************************************************************\r
- * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *\r
- *                                                                        *\r
- * Author: The ALICE Off-line Project.                                    *\r
- * Contributors are mentioned in the code where appropriate.              *\r
- *                                                                        *\r
- * Permission to use, copy, modify and distribute this software and its   *\r
- * documentation strictly for non-commercial purposes is hereby granted   *\r
- * without fee, provided that the above copyright notice appears in all   *\r
- * copies and that both the copyright notice and this permission notice   *\r
- * appear in the supporting documentation. The authors make no claims     *\r
- * about the suitability of this software for any purpose. It is          *\r
- * provided "as is" without express or implied warranty.                  *\r
- **************************************************************************/\r
-\r
-//-----------------------------------------------------------------\r
-//         AliAnalysisTaskContMC class\r
-//-----------------------------------------------------------------\r
-\r
-#include "TChain.h"\r
-#include "TTree.h"\r
-#include "TLegend.h"\r
-#include "TH1F.h"\r
-#include "TH2F.h"\r
-#include "TH3F.h"\r
-#include "TCanvas.h"\r
-#include "AliAnalysisTask.h"\r
-#include "AliAnalysisManager.h"\r
-#include "AliVTrack.h"\r
-#include "AliAODMCParticle.h"\r
-#include "AliVParticle.h"\r
-#include "AliAODEvent.h"\r
-#include "AliAODInputHandler.h"\r
-#include "AliAnalysisTaskContMC.h"\r
-#include "AliAnalysisTaskESDfilter.h"\r
-#include "AliAnalysisDataContainer.h"\r
-#include "AliHelperPID.h"\r
-#include "AliCentrality.h"\r
-#include "TProof.h"\r
-#include "AliPID.h"\r
-#include "AliVEvent.h"\r
-#include "AliPIDResponse.h"\r
-#include "AliStack.h"\r
-#include <TMCProcess.h>\r
-\r
-#include <iostream>\r
-\r
-using namespace std;\r
-\r
-ClassImp(AliAnalysisTaskContMC) \r
-\r
-//________________________________________________________________________\r
-AliAnalysisTaskContMC::AliAnalysisTaskContMC(const char *name) : AliAnalysisTaskSE(name), fAOD(0), fNSigmaPID(0), fIsMC(0), fOutput(0), fHistID(0)\r
-{\r
-  // Default constructor\r
-  \r
-\r
-  DefineInput(0, TChain::Class());\r
-  //DefineOutput(1, AliHelperPID::Class());\r
-  DefineOutput(1, TList::Class());\r
-  \r
-}\r
-//________________________________________________________________________\r
-//________________________________________________________________________\r
-void AliAnalysisTaskContMC::UserCreateOutputObjects()\r
-{\r
-  Printf("\n\n\n\n\n\n In CreateOutput Object:");\r
-  \r
-  //create output objects\r
-  Printf("NSigma: %.1f",fNSigmaPID->GetNSigmaCut());\r
-  Printf("IsMC: %d",fNSigmaPID->GetisMC());\r
-  fOutput = new TList();\r
-  fOutput->SetOwner();\r
-  fOutput->SetName("list");\r
-  \r
-  fHistID = new TH3F("fHistID","fHistID",6,-1.5,4.5,4,-1.5,2.5,38,0.2,4);\r
-  fOutput->Add(fHistID);\r
-  \r
-  if(!fNSigmaPID)AliFatal("PID object should be set in the steering macro");\r
-  fOutput->Add(fNSigmaPID);\r
-  \r
-  //PostData(1, fNSigmaPID  );\r
-  PostData(1, fOutput  );\r
-  \r
-}\r
-\r
-//________________________________________________________________________\r
-void AliAnalysisTaskContMC::UserExec(Option_t *)\r
-{\r
-  const Int_t npart=4;\r
-  const Int_t pdgcode[npart+2]={-1,211,321,2212,11,13};\r
-  const Int_t partid[npart+2]={-1,0,1,2,3,4};\r
-  // main event loop\r
-  fAOD = dynamic_cast<AliAODEvent*>(fInputEvent);\r
-  if (!fAOD) {\r
-    AliWarning("ERROR: AliAODEvent not available \n");\r
-    return;\r
-  }\r
-  \r
-  if (strcmp(fAOD->ClassName(), "AliAODEvent"))\r
-    {\r
-      AliFatal("Not processing AODs");\r
-    }\r
-  //MC Loop\r
-  TClonesArray *arrayMC = 0;\r
-  Printf("fIsMC: %d",fIsMC);\r
-  if (fIsMC)\r
-    {\r
-      arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());\r
-      if (!arrayMC) {\r
-       AliFatal("Error: MC particles branch not found!\n");\r
-      }\r
-    }\r
-  Double_t centrality = 0;\r
-\r
-  AliCentrality *centralityObj = fAOD->GetHeader()->GetCentralityP();\r
-  if (centralityObj)\r
-    {\r
-      centrality = centralityObj->GetCentralityPercentileUnchecked("V0M");\r
-      AliInfo(Form("Centrality is %f", centrality));\r
-    }\r
-  else\r
-    {\r
-      Printf("WARNING: Centrality object is 0");\r
-      centrality = -1;\r
-    }\r
-  if (centrality < 0)\r
-    return;\r
-  \r
-\r
-  //vertex selection\r
-  Int_t nVertex = ((AliAODEvent*)fAOD)->GetNumberOfVertices();\r
-  if( nVertex > 0 ) { \r
-    AliAODVertex* vertex = (AliAODVertex*)((AliAODEvent*)fAOD)->GetPrimaryVertex();\r
-    //Int_t nTracksPrim = vertex->GetNContributors();\r
-    Double_t zVertex = vertex->GetZ();\r
-    //10 cm cut\r
-    if(TMath::Abs(zVertex)>10) return;\r
-    //AliInfo(Form(" Vertex in = %f with %d particles by  %s data ...",zVertex,nTracksPrim,vertex->GetName()));\r
-    // Reject TPC only vertex\r
-    TString name(vertex->GetName());\r
-    if (name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex"))return;\r
-  }  \r
-\r
-  //Int_t count=0;  \r
-  //track loop\r
-  for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {\r
-    AliAODTrack* track = fAOD->GetTrack(iTracks);\r
-    if(!(track->TestFilterBit(32)))continue;\r
-    if (TMath::Abs(track->Eta()) > .8 || track->Pt() < .2) continue;\r
-    \r
-    Int_t pdg=-999;\r
-    Int_t isph=-999;\r
-    if (fIsMC && arrayMC) {\r
-      AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel()));\r
-      if (!partMC) { \r
-       AliError("Cannot get MC particle");\r
-       continue; \r
-      }\r
-      pdg=TMath::Abs(partMC->GetPdgCode());\r
-      isph=partMC->IsPhysicalPrimary();\r
-    }\r
-    if(!isph)continue;\r
-    //step 1, TOF Matching\r
-    UInt_t status;\r
-    status=track->GetStatus();\r
-    if((status&AliVTrack::kTOFout)==0 || (status&AliVTrack::kTIME)==0)continue;\r
-    \r
-    //step 2, combined PID\r
-    Int_t IDTPCTOF=fNSigmaPID->GetParticleSpecies(track,1);\r
-    if(IDTPCTOF==999)IDTPCTOF=-1;\r
-    Int_t IDMC=-1;\r
-    for(Int_t ipart=0;ipart<npart+2;ipart++)if(TMath::Abs(pdg)==pdgcode[ipart])IDMC=partid[ipart];  \r
-    fHistID->Fill(IDMC,IDTPCTOF,track->Pt());\r
-  } // end loop on tracks\r
-  \r
-  PostData(1,fOutput);\r
-  \r
-}\r
-\r
-//_________________________________________________________________\r
-void   AliAnalysisTaskContMC::Terminate(Option_t *)\r
-{\r
-  // Terminate analysis\r
-  //\r
-  fOutput = dynamic_cast<TList*>(GetOutputData(1));\r
-  if (!fOutput) {\r
-    printf("ERROR: fOutput not available\n");\r
-    return;\r
-  } \r
-  fHistID = dynamic_cast<TH3F*>(fOutput->FindObject("fHistID"));\r
-  fNSigmaPID = dynamic_cast<AliHelperPID*>(fOutput->FindObject("fNSigmaPID"));\r
-}\r
+/**************************************************************************
+ * 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.                  *
+ **************************************************************************/
+
+//-----------------------------------------------------------------
+//         AliAnalysisTaskContMC class
+//-----------------------------------------------------------------
+
+#include "TChain.h"
+#include "TTree.h"
+#include "TLegend.h"
+#include "TH1F.h"
+#include "TH2F.h"
+#include "TH3F.h"
+#include "TCanvas.h"
+#include "AliAnalysisTask.h"
+#include "AliAnalysisManager.h"
+#include "AliVTrack.h"
+#include "AliAODMCParticle.h"
+#include "AliVParticle.h"
+#include "AliAODEvent.h"
+#include "AliAODInputHandler.h"
+#include "AliAnalysisTaskContMC.h"
+#include "AliAnalysisTaskESDfilter.h"
+#include "AliAnalysisDataContainer.h"
+#include "AliHelperPID.h"
+#include "AliCentrality.h"
+#include "TProof.h"
+#include "AliPID.h"
+#include "AliVEvent.h"
+#include "AliPIDResponse.h"
+#include "AliStack.h"
+#include <TMCProcess.h>
+
+#include <iostream>
+
+using namespace std;
+
+ClassImp(AliAnalysisTaskContMC) 
+
+//________________________________________________________________________
+AliAnalysisTaskContMC::AliAnalysisTaskContMC(const char *name) : AliAnalysisTaskSE(name), fAOD(0), fNSigmaPID(0), fIsMC(0), fOutput(0), fHistID(0)
+{
+  // Default constructor
+  
+
+  DefineInput(0, TChain::Class());
+  //DefineOutput(1, AliHelperPID::Class());
+  DefineOutput(1, TList::Class());
+  
+}
+//________________________________________________________________________
+//________________________________________________________________________
+void AliAnalysisTaskContMC::UserCreateOutputObjects()
+{
+  Printf("\n\n\n\n\n\n In CreateOutput Object:");
+  
+  //create output objects
+  Printf("NSigma: %.1f",fNSigmaPID->GetNSigmaCut());
+  Printf("IsMC: %d",fNSigmaPID->GetisMC());
+  fOutput = new TList();
+  fOutput->SetOwner();
+  fOutput->SetName("list");
+  
+  fHistID = new TH3F("fHistID","fHistID",6,-1.5,4.5,4,-1.5,2.5,38,0.2,4);
+  fOutput->Add(fHistID);
+  
+  if(!fNSigmaPID)AliFatal("PID object should be set in the steering macro");
+  fOutput->Add(fNSigmaPID);
+  
+  //PostData(1, fNSigmaPID  );
+  PostData(1, fOutput  );
+  
+}
+
+//________________________________________________________________________
+void AliAnalysisTaskContMC::UserExec(Option_t *)
+{
+  const Int_t npart=4;
+  const Int_t pdgcode[npart+2]={-1,211,321,2212,11,13};
+  const Int_t partid[npart+2]={-1,0,1,2,3,4};
+  // main event loop
+  fAOD = dynamic_cast<AliAODEvent*>(fInputEvent);
+  if (!fAOD) {
+    AliWarning("ERROR: AliAODEvent not available \n");
+    return;
+  }
+  
+  if (strcmp(fAOD->ClassName(), "AliAODEvent"))
+    {
+      AliFatal("Not processing AODs");
+    }
+  //MC Loop
+  TClonesArray *arrayMC = 0;
+  Printf("fIsMC: %d",fIsMC);
+  if (fIsMC)
+    {
+      arrayMC = (TClonesArray*) fAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
+      if (!arrayMC) {
+       AliFatal("Error: MC particles branch not found!\n");
+      }
+    }
+  Double_t centrality = 0;
+
+  AliCentrality *centralityObj = fAOD->GetHeader()->GetCentralityP();
+  if (centralityObj)
+    {
+      centrality = centralityObj->GetCentralityPercentileUnchecked("V0M");
+      AliInfo(Form("Centrality is %f", centrality));
+    }
+  else
+    {
+      Printf("WARNING: Centrality object is 0");
+      centrality = -1;
+    }
+  if (centrality < 0)
+    return;
+  
+
+  //vertex selection
+  Int_t nVertex = ((AliAODEvent*)fAOD)->GetNumberOfVertices();
+  if( nVertex > 0 ) { 
+    AliAODVertex* vertex = (AliAODVertex*)((AliAODEvent*)fAOD)->GetPrimaryVertex();
+    //Int_t nTracksPrim = vertex->GetNContributors();
+    Double_t zVertex = vertex->GetZ();
+    //10 cm cut
+    if(TMath::Abs(zVertex)>10) return;
+    //AliInfo(Form(" Vertex in = %f with %d particles by  %s data ...",zVertex,nTracksPrim,vertex->GetName()));
+    // Reject TPC only vertex
+    TString name(vertex->GetName());
+    if (name.CompareTo("PrimaryVertex") && name.CompareTo("SPDVertex"))return;
+  }  
+
+  //Int_t count=0;  
+  //track loop
+  for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
+    AliAODTrack* track = fAOD->GetTrack(iTracks);
+    if(!(track->TestFilterBit(32)))continue;
+    if (TMath::Abs(track->Eta()) > .8 || track->Pt() < .2) continue;
+    
+    Int_t pdg=-999;
+    Int_t isph=-999;
+    if (fIsMC && arrayMC) {
+      AliAODMCParticle *partMC = (AliAODMCParticle*) arrayMC->At(TMath::Abs(track->GetLabel()));
+      if (!partMC) { 
+       AliError("Cannot get MC particle");
+       continue; 
+      }
+      pdg=TMath::Abs(partMC->GetPdgCode());
+      isph=partMC->IsPhysicalPrimary();
+    }
+    if(!isph)continue;
+    //step 1, TOF Matching
+    UInt_t status;
+    status=track->GetStatus();
+    if((status&AliVTrack::kTOFout)==0 || (status&AliVTrack::kTIME)==0)continue;
+    
+    //step 2, combined PID
+    Int_t IDTPCTOF=fNSigmaPID->GetParticleSpecies(track,1);
+    if(IDTPCTOF==999)IDTPCTOF=-1;
+    Int_t IDMC=-1;
+    for(Int_t ipart=0;ipart<npart+2;ipart++)if(TMath::Abs(pdg)==pdgcode[ipart])IDMC=partid[ipart];  
+    fHistID->Fill(IDMC,IDTPCTOF,track->Pt());
+  } // end loop on tracks
+  
+  PostData(1,fOutput);
+  
+}
+
+//_________________________________________________________________
+void   AliAnalysisTaskContMC::Terminate(Option_t *)
+{
+  // Terminate analysis
+  //
+  fOutput = dynamic_cast<TList*>(GetOutputData(1));
+  if (!fOutput) {
+    printf("ERROR: fOutput not available\n");
+    return;
+  } 
+  fHistID = dynamic_cast<TH3F*>(fOutput->FindObject("fHistID"));
+  fNSigmaPID = dynamic_cast<AliHelperPID*>(fOutput->FindObject("fNSigmaPID"));
+}