X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGCF%2FCorrelations%2FDPhi%2FAliAnalysisTaskContMC.cxx;h=b31745535346f63255918adb52fb65a74d2659ed;hb=a65a7e704a90d2ca4e682c82d8a708900dda04ca;hp=18cfbb137608a9c3f1070e0dbf1679aa3321703b;hpb=1ea19f39c1537bbc6a2eb0d0485c7d846a4ec49b;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx b/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx index 18cfbb13760..b3174553534 100644 --- a/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx +++ b/PWGCF/Correlations/DPhi/AliAnalysisTaskContMC.cxx @@ -1,193 +1,193 @@ -/************************************************************************** - * 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 - -#include - -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(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;ipartFill(IDMC,IDTPCTOF,track->Pt()); - } // end loop on tracks - - PostData(1,fOutput); - -} - -//_________________________________________________________________ -void AliAnalysisTaskContMC::Terminate(Option_t *) -{ - // Terminate analysis - // - fOutput = dynamic_cast(GetOutputData(1)); - if (!fOutput) { - printf("ERROR: fOutput not available\n"); - return; - } - fHistID = dynamic_cast(fOutput->FindObject("fHistID")); - fNSigmaPID = dynamic_cast(fOutput->FindObject("fNSigmaPID")); -} +/************************************************************************** + * 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 + +#include + +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(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;ipartFill(IDMC,IDTPCTOF,track->Pt()); + } // end loop on tracks + + PostData(1,fOutput); + +} + +//_________________________________________________________________ +void AliAnalysisTaskContMC::Terminate(Option_t *) +{ + // Terminate analysis + // + fOutput = dynamic_cast(GetOutputData(1)); + if (!fOutput) { + printf("ERROR: fOutput not available\n"); + return; + } + fHistID = dynamic_cast(fOutput->FindObject("fHistID")); + fNSigmaPID = dynamic_cast(fOutput->FindObject("fNSigmaPID")); +}