From 91326969e8e2b0a305490ff50feb7d625a178b9b Mon Sep 17 00:00:00 2001 From: jotwinow Date: Fri, 24 Feb 2012 18:17:35 +0000 Subject: [PATCH 1/1] - V0s tree added M PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.h M PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx - modification related to new AliROOT structure M PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/LoadMyLibs.C M PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/ProofEnableAliRootGSI.C --- .../dNdPt/AlidNdPtTrackDumpTask.cxx | 319 +++++++++++++++++- .../dNdPt/AlidNdPtTrackDumpTask.h | 11 + .../ChargedHadrons/dNdPt/macros/LoadMyLibs.C | 8 +- .../dNdPt/macros/ProofEnableAliRootGSI.C | 8 +- 4 files changed, 327 insertions(+), 19 deletions(-) diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx index cf460ee941c..25d817b9156 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.cxx @@ -16,6 +16,7 @@ #include "iostream" #include +#include #include "TChain.h" #include "TTreeStream.h" @@ -25,7 +26,7 @@ #include "TList.h" #include "TFile.h" #include "TMatrixD.h" -#include "TRandom.h" +#include "TRandom3.h" #include "AliHeader.h" #include "AliGenEventHeader.h" @@ -55,6 +56,8 @@ #include "AlidNdPtAcceptanceCuts.h" #include "AlidNdPtTrackDumpTask.h" +#include "AliKFParticle.h" +#include "AliESDv0.h" using namespace std; @@ -78,6 +81,8 @@ AlidNdPtTrackDumpTask::AlidNdPtTrackDumpTask(const char *name) , fOutputSummary(0) , fTreeSRedirector(0) , fCentralityEstimator(0) + , fLowPtTrackDownscaligF(0) + , fLowPtV0DownscaligF(0) { // Constructor @@ -125,7 +130,7 @@ void AlidNdPtTrackDumpTask::UserCreateOutputObjects() // // create output tree // - fTreeSRedirector = new TTreeSRedirector("dNdPtOutliersAnalysisPbPb.root"); + fTreeSRedirector = new TTreeSRedirector("jotwinow_HighPt_TrackAndV0_Trees.root"); PostData(0, fOutputSummary); //PostData(1, fOutput); @@ -161,6 +166,7 @@ void AlidNdPtTrackDumpTask::UserExec(Option_t *) // Process(fESD,fMC,fESDfriend); + ProcessV0(fESD,fMC,fESDfriend); // Post output data. PostData(0, fOutputSummary); @@ -295,7 +301,7 @@ void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * co // check event cuts if(isEventOK && isEventTriggered) { - TRandom random; + TRandom3 random; for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) { @@ -306,7 +312,8 @@ void AlidNdPtTrackDumpTask::Process(AliESDEvent *const esdEvent, AliMCEvent * co if(!accCuts->AcceptTrack(track)) continue; // downscale low-pT tracks - if(TMath::Exp(2*track->Pt())<1000*random.Rndm()) continue; + Double_t scalempt= TMath::Min(track->Pt(),10.); + if(TMath::Exp(2*scalempt)GetInputEventHandler(); + if (!inputHandler) + { + Printf("ERROR: Could not receive input handler"); + return; + } + + // get file name + TTree *chain = (TChain*)GetInputData(0); + if(!chain) { + Printf("ERROR: Could not receive input chain"); + return; + } + TObjString fileName(chain->GetCurrentFile()->GetName()); + + // trigger + if(evtCuts->IsTriggerRequired()) + { + // always MB + isEventTriggered = inputHandler->IsEventSelected() & AliVEvent::kMB; + + physicsSelection = static_cast (inputHandler->GetEventSelection()); + if(!physicsSelection) return; + //SetPhysicsTriggerSelection(physicsSelection); + + if (isEventTriggered && (GetTrigger() == AliTriggerAnalysis::kV0AND)) { + // set trigger (V0AND) + triggerAnalysis = physicsSelection->GetTriggerAnalysis(); + if(!triggerAnalysis) return; + isEventTriggered = triggerAnalysis->IsOfflineTriggerFired(esdEvent, GetTrigger()); + } + } + + // centrality determination + Float_t centralityF = -1; + AliCentrality *esdCentrality = esdEvent->GetCentrality(); + centralityF = esdCentrality->GetCentralityPercentile(fCentralityEstimator.Data()); + + + // get reconstructed vertex + //const AliESDVertex* vtxESD = 0; + const AliESDVertex* vtxESD = 0; + if(GetAnalysisMode() == AlidNdPtHelper::kTPC) { + vtxESD = esdEvent->GetPrimaryVertexTPC(); + } + else if(GetAnalysisMode() == AlidNdPtHelper::kTPCITS) { + vtxESD = esdEvent->GetPrimaryVertexTracks(); + } + else { + return; + } + + if(!vtxESD) return; + + Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD); + //printf("isEventOK %d, isEventTriggered %d \n",isEventOK, isEventTriggered); + //printf("GetAnalysisMode() %d \n",GetAnalysisMode()); + + // check event cuts + if(isEventOK && isEventTriggered) { + // + // Dump the pt downscaled V0 into the tree + // + // + Int_t ntracks = esdEvent->GetNumberOfTracks(); + Int_t nV0s = esdEvent->GetNumberOfV0s(); + Int_t run = esdEvent->GetRunNumber(); + Int_t time= esdEvent->GetTimeStamp(); + Int_t evNr=esdEvent->GetEventNumberInFile(); + + for (Int_t iv0=0; iv0GetV0(iv0); + if (!v0) continue; + AliESDtrack * track0 = esdEvent->GetTrack(v0->GetIndex(0)); + AliESDtrack * track1 = esdEvent->GetTrack(v0->GetIndex(1)); + if (!track0) continue; + if (!track1) continue; + if (track0->GetSign()<0) { + track1 = esdEvent->GetTrack(v0->GetIndex(0)); + track0 = esdEvent->GetTrack(v0->GetIndex(1)); + } + // + Bool_t isDownscaled = IsV0Downscaled(v0); + if (isDownscaled) continue; + AliKFParticle kfparticle; // + Int_t type=GetKFParticle(v0,esdEvent,kfparticle); + if (type==0) continue; + + if(!fTreeSRedirector) return; + (*fTreeSRedirector)<<"V0s"<< + "isDownscaled="<GetOnFlyStatus() ==kFALSE) return 0; + // + // 1.) track cut + // + AliESDtrack * track0 = event->GetTrack(v0->GetIndex(0)); + AliESDtrack * track1 = event->GetTrack(v0->GetIndex(1)); + /* + TCut cutD="abs(track0.fD/sqrt(track0.fCdd))>2&&abs(track1.fD/sqrt(track1.fCdd))>2"; + TCut cutTheta="abs(track0.fP[3])<1&&abs(track1.fP[3])<1"; + TCut cutNcl="track0.GetTPCClusterInfo(2,1)>100&&track1.GetTPCClusterInfo(2,1)>100"; + */ + if (TMath::Abs(track0->GetTgl())>1) return 0; + if (TMath::Abs(track1->GetTgl())>1) return 0; + if ((track0->GetTPCClusterInfo(2,1))<100) return 0; + if ((track1->GetTPCClusterInfo(2,1))<100) return 0; + //if ((track0->GetITSclusters(0))<2) return 0; + //if ((track1->GetITSclusters(0))<2) return 0; + Float_t pos0[2]={0}, cov0[3]={0}; + Float_t pos1[2]={0}, cov1[3]={0}; + track0->GetImpactParameters(pos0,cov0); + track0->GetImpactParameters(pos1,cov1); + // + if (TMath::Abs(pos0[0])GetKFInfo(2,2,2); + if (chi2KF>25) return 0; + // + // 4.) Rough mass cut - 0.200 GeV + // + static Double_t masses[2]={-1}; + if (masses[0]<0){ + masses[0] = TDatabasePDG::Instance()->GetParticle("K_S0")->Mass(); + masses[1] = TDatabasePDG::Instance()->GetParticle("Lambda0")->Mass(); + } + Double_t mass00= v0->GetEffMass(0,0); + Double_t mass22= v0->GetEffMass(2,2); + Double_t mass42= v0->GetEffMass(4,2); + Double_t mass24= v0->GetEffMass(2,4); + Bool_t massOK=kFALSE; + Int_t type=0; + Int_t ptype=0; + Double_t dmass=1; + Int_t p1=0, p2=0; + if (TMath::Abs(mass00-0)GetParamP(); + const AliExternalTrackParam *paramN = v0->GetParamN(); + if (paramP->GetSign()<0){ + paramP=v0->GetParamP(); + paramN=v0->GetParamN(); + } + //Double_t *pparam1 = (Double_t*)paramP->GetParameter(); + //Double_t *pparam2 = (Double_t*)paramN->GetParameter(); + // + AliKFParticle kfp1( *paramP, spdg[p1] ); + AliKFParticle kfp2( *paramN, -1 *spdg[p2] ); + AliKFParticle V0KF; + (V0KF)+=kfp1; + (V0KF)+=kfp2; + kfparticle=V0KF; + // + // Pointing angle + // + Double_t errPhi = V0KF.GetErrPhi(); + Double_t pointAngle= TMath::ACos(v0->GetV0CosineOfPointingAngle()); + if (pointAngle/errPhi>10) return 0; + // + return ptype; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtTrackDumpTask::IsV0Downscaled(AliESDv0 *const v0) +{ + // + // Downscale randomly low pt V0 + // + //return kFALSE; + Double_t maxPt= TMath::Max(v0->GetParamP()->Pt(), v0->GetParamN()->Pt()); + Double_t scalempt= TMath::Min(maxPt,10.); + if (TMath::Exp(2*scalempt)Rndm()) return kTRUE; + return kFALSE; + /* + + TH1F his1("his1","his1",100,0,10); + TH1F his2("his2","his2",100,0,10); + {for (Int_t i=0; i<10000; i++){ + Double_t rnd=gRandom->Exp(1); + Bool_t isDownscaled =TMath::Exp(rnd)<100*gRandom->Rndm(); + his1->Fill(rnd); + if (!isDownscaled) his2->Fill(rnd); + }} + + */ + +} + + + + + + + + //_____________________________________________________________________________ Bool_t AlidNdPtTrackDumpTask::ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3]) @@ -860,15 +1163,13 @@ void AlidNdPtTrackDumpTask::FinishTaskOutput() void AlidNdPtTrackDumpTask::Terminate(Option_t *) { // Called one at the end - - // check output data + if(fTreeSRedirector) delete fTreeSRedirector; fTreeSRedirector=0; fOutputSummary = dynamic_cast (GetOutputData(0)); if(fOutputSummary) delete fOutputSummary; fOutputSummary=0; - if(fTreeSRedirector) delete fTreeSRedirector; fTreeSRedirector=0; TChain* chain = new TChain("dNdPtTree"); if(!chain) return; - chain->Add("dNdPtOutliersAnalysisPbPb.root"); + chain->Add("jotwinow_HighPt_TrackAndV0_Trees.root"); TTree *tree = chain->CopyTree("1"); if (chain) { delete chain; chain=0; } if(!tree) return; @@ -879,8 +1180,6 @@ void AlidNdPtTrackDumpTask::Terminate(Option_t *) Printf("ERROR: AlidNdPtTrackDumpTask::Terminate(): Output data not avaiable GetOutputData(0)==0x0 ..." ); return; } - - PostData(0, fOutputSummary); //PostData(1, fOutput); diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.h b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.h index e1e84065fa8..87529288bfc 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.h +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/AlidNdPtTrackDumpTask.h @@ -20,6 +20,8 @@ class AlidNdPtCorrection; class AliMagFMaps; class AliESDEvent; class AliMCEvent; +class AliKFParticle; +class AliESDv0; class TList; class TTree; class TTreeSRedirector; @@ -45,6 +47,7 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE { // Process events virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0); + virtual void ProcessV0(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0, AliESDfriend *const esdFriend=0); void SetEventCuts(AlidNdPtEventCuts* const cuts) { fdNdPtEventCuts = cuts; } void SetAcceptanceCuts(AlidNdPtAcceptanceCuts* const cuts) { fdNdPtAcceptanceCuts = cuts; } @@ -71,6 +74,12 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE { Bool_t ConstrainTPCInner(AliExternalTrackParam *const tpcInnerC, const AliESDVertex* vtx, Double_t b[3]); Bool_t ConstrainTrackInner(AliExternalTrackParam *const trackInnerC, const AliESDVertex* vtx, Double_t mass, Double_t b[3]); + // v0s selection + Int_t GetKFParticle(AliESDv0 *const v0, AliESDEvent * const event, AliKFParticle & kfparticle); + Bool_t IsV0Downscaled(AliESDv0 *const v0); + + void SetLowPtTrackDownscaligF(Double_t fact) { fLowPtTrackDownscaligF = fact; } + void SetLowPtV0DownscaligF(Double_t fact) { fLowPtV0DownscaligF = fact; } private: @@ -94,6 +103,8 @@ class AlidNdPtTrackDumpTask : public AliAnalysisTaskSE { TString fCentralityEstimator; //! use centrality can be "VOM" (default), "FMD", "TRK", "TKL", "CL0", "CL1", "V0MvsFMD", "TKLvsV0M", "ZEMvsZDC" + Double_t fLowPtTrackDownscaligF; // low pT track downscaling factor + Double_t fLowPtV0DownscaligF; // low pT V0 downscaling factor AlidNdPtTrackDumpTask(const AlidNdPtTrackDumpTask&); // not implemented AlidNdPtTrackDumpTask& operator=(const AlidNdPtTrackDumpTask&); // not implemented diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/LoadMyLibs.C b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/LoadMyLibs.C index 6f6a5bebf41..e6e20afec70 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/LoadMyLibs.C +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/LoadMyLibs.C @@ -30,10 +30,10 @@ void LoadMyLibs() { //CheckLoadLibrary("libTRDrec"); CheckLoadLibrary("libITSbase"); CheckLoadLibrary("libITSrec"); - CheckLoadLibrary("libPWG0base"); - CheckLoadLibrary("libPWG0dep"); - CheckLoadLibrary("libPWG0selectors"); - //CheckLoadLibrary("libPWGPP"); + + CheckLoadLibrary("libPWGPP"); + CheckLoadLibrary("libPWGPPdep"); + CheckLoadLibrary("libPWGLFspectra"); } Int_t CheckLoadLibrary(const char* library) { diff --git a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/ProofEnableAliRootGSI.C b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/ProofEnableAliRootGSI.C index 04d5a4a3914..ab6bc569c43 100644 --- a/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/ProofEnableAliRootGSI.C +++ b/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/ProofEnableAliRootGSI.C @@ -8,14 +8,12 @@ void ProofEnableAliRootGSI(const char* location = "/usr/local/grid/AliRoot/v4-05 gProof->AddIncludePath(Form("%s/include", location)); gProof->AddIncludePath(Form("%s/TPC", location)); - gProof->AddIncludePath(Form("%s/PWG0", location)); - gProof->AddIncludePath(Form("%s/PWG0/dNdPt", location)); + gProof->AddIncludePath(Form("%s/PWGLF", location)); + gProof->AddIncludePath(Form("%s/PWGLF/SPECTRA/ChargedHadrons/dNdPt", location)); gProof->AddIncludePath(Form("%s/ANALYSIS", location)); gProof->AddDynamicPath(Form("%s/lib/tgt_linuxx8664gcc", location)); // load all libraries - gProof->Exec("gROOT->Macro(\"$ALICE_ROOT/PWG0/dNdPt/macros/LoadMyLibs.C\")",kTRUE); + gProof->Exec("gROOT->Macro(\"$ALICE_ROOT/PWGLF/SPECTRA/ChargedHadrons/dNdPt/macros/LoadMyLibs.C\")",kTRUE); } - - -- 2.39.3