From 7f7dd416164e9335d2ed96e06048a8705b6b8d9f Mon Sep 17 00:00:00 2001 From: jotwinow Date: Tue, 2 Mar 2010 08:06:23 +0000 Subject: [PATCH] new functionality and new class added --- PWG0/PWG0depLinkDef.h | 2 + PWG0/dNdPt/AlidNdPt.cxx | 4 + PWG0/dNdPt/AlidNdPt.h | 4 + PWG0/dNdPt/AlidNdPtAnalysis.cxx | 187 ++++++++++++++----- PWG0/dNdPt/AlidNdPtAnalysis.h | 4 +- PWG0/dNdPt/AlidNdPtBackgroundCuts.cxx | 225 +++++++++++++++++++++++ PWG0/dNdPt/AlidNdPtBackgroundCuts.h | 79 ++++++++ PWG0/dNdPt/AlidNdPtCutAnalysis.cxx | 115 +++++++++--- PWG0/dNdPt/AlidNdPtTask.cxx | 6 +- PWG0/dNdPt/macros/CreatedNdPtTrackCuts.C | 66 ++++++- PWG0/libPWG0dep.pkg | 3 +- 11 files changed, 612 insertions(+), 83 deletions(-) create mode 100644 PWG0/dNdPt/AlidNdPtBackgroundCuts.cxx create mode 100644 PWG0/dNdPt/AlidNdPtBackgroundCuts.h diff --git a/PWG0/PWG0depLinkDef.h b/PWG0/PWG0depLinkDef.h index 85f23fb34f9..74cb52ac943 100644 --- a/PWG0/PWG0depLinkDef.h +++ b/PWG0/PWG0depLinkDef.h @@ -21,4 +21,6 @@ #pragma link C++ class AlidNdPt+; #pragma link C++ class AlidNdPtCutAnalysis+; +#pragma link C++ class AlidNdPtBackgroundCuts+; + #endif diff --git a/PWG0/dNdPt/AlidNdPt.cxx b/PWG0/dNdPt/AlidNdPt.cxx index 8fe4399049b..e0feef22a3d 100644 --- a/PWG0/dNdPt/AlidNdPt.cxx +++ b/PWG0/dNdPt/AlidNdPt.cxx @@ -17,6 +17,7 @@ #include "AlidNdPtEventCuts.h" #include "AlidNdPtAcceptanceCuts.h" #include "AliPhysicsSelection.h" +#include "AlidNdPtBackgroundCuts.h" #include "AlidNdPt.h" using namespace std; @@ -34,6 +35,7 @@ AlidNdPt::AlidNdPt(): TNamed() , fTriggerClass(0) , fParticleMode(AlidNdPtHelper::kAllPart) , fPhysicsSelection(0) +, fdNdPtBackgroundCuts(0) { // default constructor } @@ -49,6 +51,7 @@ AlidNdPt::AlidNdPt(Char_t* name, Char_t* title): TNamed(name,title) , fTriggerClass(0) , fParticleMode(AlidNdPtHelper::kAllPart) , fPhysicsSelection(0) +, fdNdPtBackgroundCuts(0) { // constructor } @@ -60,4 +63,5 @@ AlidNdPt::~AlidNdPt() { if(fdNdPtAcceptanceCuts) delete fdNdPtAcceptanceCuts; fdNdPtAcceptanceCuts=NULL; if(fEsdTrackCuts) delete fEsdTrackCuts; fEsdTrackCuts=NULL; if(fPhysicsSelection) delete fPhysicsSelection; fPhysicsSelection=NULL; + if(fdNdPtBackgroundCuts) delete fdNdPtBackgroundCuts; fdNdPtBackgroundCuts=NULL; } diff --git a/PWG0/dNdPt/AlidNdPt.h b/PWG0/dNdPt/AlidNdPt.h index 341ee6b8923..acbec06e3f2 100644 --- a/PWG0/dNdPt/AlidNdPt.h +++ b/PWG0/dNdPt/AlidNdPt.h @@ -13,6 +13,7 @@ class AliESDtrackCuts; class AlidNdPtEventCuts; class AlidNdPtAcceptanceCuts; class AliPhysicsSelection; +class AlidNdPtBackgroundCuts; #include "TNamed.h" #include "TFolder.h" @@ -54,6 +55,7 @@ public: void SetTriggerClass(const Char_t *triggerClass) { fTriggerClass = triggerClass; } void SetParticleMode(const AlidNdPtHelper::ParticleMode mode) { fParticleMode = mode; } void SetPhysicsTriggerSelection(AliPhysicsSelection* const selection) { fPhysicsSelection = selection; } + void SetBackgroundCuts(AlidNdPtBackgroundCuts* const cuts) { fdNdPtBackgroundCuts = cuts; } AlidNdPtEventCuts* GetEventCuts() const { return fdNdPtEventCuts; } AlidNdPtAcceptanceCuts* GetAcceptanceCuts() const { return fdNdPtAcceptanceCuts; } @@ -64,6 +66,7 @@ public: const Char_t* GetTriggerClass() const { return fTriggerClass; } AlidNdPtHelper::ParticleMode GetParticleMode() const { return fParticleMode; } AliPhysicsSelection* GetPhysicsTriggerSelection() const { return fPhysicsSelection; } + AlidNdPtBackgroundCuts* GetBackgroundCuts() const { return fdNdPtBackgroundCuts; } private: @@ -78,6 +81,7 @@ private: AlidNdPtHelper::ParticleMode fParticleMode; // selected particle (pion, kaon, ...) AliPhysicsSelection* fPhysicsSelection; // physics trigger selection class + AlidNdPtBackgroundCuts *fdNdPtBackgroundCuts; // background cuts (cosmics and splitted tracks) ClassDef(AlidNdPt,1); }; diff --git a/PWG0/dNdPt/AlidNdPtAnalysis.cxx b/PWG0/dNdPt/AlidNdPtAnalysis.cxx index 4297b2ecfad..08a1c15c20a 100644 --- a/PWG0/dNdPt/AlidNdPtAnalysis.cxx +++ b/PWG0/dNdPt/AlidNdPtAnalysis.cxx @@ -39,6 +39,8 @@ #include "AliMCEvent.h" #include "AliESDtrackCuts.h" #include "AliLog.h" +#include "AliMultiplicity.h" +#include "AliTracker.h" #include "AlidNdPtEventCuts.h" #include "AlidNdPtAcceptanceCuts.h" @@ -136,6 +138,7 @@ ClassImp(AlidNdPtAnalysis) for(Int_t i=0; iGetAxis(0)->SetTitle("track multiplicity"); - fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("multiplicity"); + fEventMultCorrelationMatrix->GetAxis(1)->SetTitle("true multiplicity"); fEventMultCorrelationMatrix->Sumw2(); Int_t binsTrackPtCorrelationMatrix[3]={ptNbins,ptNbins,etaNbins}; @@ -745,13 +750,13 @@ void AlidNdPtAnalysis::Init(){ fMCTrackHist1[i]->GetAxis(2)->SetTitle("mcPhi (rad)"); fMCTrackHist1[i]->Sumw2(); - Int_t binsMCPrimTrackHist2[5]= {ptNbins,etaNbins,6,20,4000}; - Double_t minMCPrimTrackHist2[5]={0.,-1.,0.,0.,0.}; - Double_t maxMCPrimTrackHist2[5]={10.,1.,6.,20.,4000.}; + Int_t binsMCPrimTrackHist1[5]= {ptNbins,etaNbins,6,20,4000}; + Double_t minMCPrimTrackHist1[5]={0.,-1.,0.,0.,0.}; + Double_t maxMCPrimTrackHist1[5]={10.,1.,6.,20.,4000.}; sprintf(name,"fMCPrimTrackHist1_%d",i); sprintf(title,"mcPt:mcEta:pid:mech:mother"); - fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2); + fMCPrimTrackHist1[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist1,minMCPrimTrackHist1,maxMCPrimTrackHist1); fMCPrimTrackHist1[i]->SetBinEdges(0,binsPt); fMCPrimTrackHist1[i]->SetBinEdges(1,binsEta); fMCPrimTrackHist1[i]->GetAxis(0)->SetTitle("mcPt (GeV/c)"); @@ -761,6 +766,18 @@ void AlidNdPtAnalysis::Init(){ fMCPrimTrackHist1[i]->GetAxis(4)->SetTitle("mother"); fMCPrimTrackHist1[i]->Sumw2(); + Int_t binsMCPrimTrackHist2[5]= {4000,20,4000}; + Double_t minMCPrimTrackHist2[5]={0.,0.,0.}; + Double_t maxMCPrimTrackHist2[5]={4000.,20.,4000.}; + sprintf(name,"fMCPrimTrackHist2_%d",i); + sprintf(title,"pdg:mech:mother"); + + fMCPrimTrackHist2[i] = new THnSparseF(name,title,5,binsMCPrimTrackHist2,minMCPrimTrackHist2,maxMCPrimTrackHist2); + fMCPrimTrackHist2[i]->GetAxis(0)->SetTitle("pdg"); + fMCPrimTrackHist2[i]->GetAxis(1)->SetTitle("mech"); + fMCPrimTrackHist2[i]->GetAxis(2)->SetTitle("mother"); + fMCPrimTrackHist2[i]->Sumw2(); + Int_t binsMCSecTrackHist1[5]= {ptNbins,etaNbins,6,20,4000}; Double_t minMCSecTrackHist1[5]={0.,-1.,0.,0.,0.}; Double_t maxMCSecTrackHist1[5]={10.,1.,6.,20.,4000.}; @@ -872,16 +889,16 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc return; } - // get physics trigger selection - AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); - if(!trigSel) { - AliDebug(AliLog::kError, "cannot get trigSel"); - return; - } - // trigger selection Bool_t isEventTriggered = kTRUE; - if(evtCuts->IsTriggerRequired()) { + if(evtCuts->IsTriggerRequired()) + { + AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); + if(!trigSel) { + AliDebug(AliLog::kError, "cannot get trigSel"); + return; + } + if(IsUseMCInfo()) { //static AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis; //isEventTriggered = triggerAnalysis->IsTriggerFired(esdEvent, GetTrigger()); @@ -889,7 +906,6 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); } else { - //isEventTriggered = esdEvent->IsTriggerClassFired(GetTriggerClass()); isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); } } @@ -968,11 +984,37 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc { multMBTracks = AlidNdPtHelper::GetTPCMBTrackMult(esdEvent,evtCuts,accCuts,esdTrackCuts); } - else if(GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate) + else if( GetAnalysisMode() == AlidNdPtHelper::kTPCITS || GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtx || + GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate || GetAnalysisMode()==AlidNdPtHelper::kTPCITSHybrid ) { - //multMBTracks = AlidNdPtHelper::GetSPDMBTrackMult(esdEvent,0.0); - if(vtxESD->GetStatus()) - multMBTracks = vtxESD->GetNContributors(); + //if(vtxESD->GetStatus()) + // multMBTracks = vtxESD->GetNContributors(); + + // origin Jan Fiete GO + const AliMultiplicity* mult = esdEvent->GetMultiplicity(); + if (mult) { + Int_t trackletCount = 0; + for(Int_t i=0; iGetNumberOfTracklets(); ++i) { + Float_t deltaPhi = mult->GetDeltaPhi(i); + // prevent values to be shifted by 2 Pi() + if (deltaPhi < -TMath::Pi()) + deltaPhi += TMath::Pi() * 2; + if (deltaPhi > TMath::Pi()) + deltaPhi -= TMath::Pi() * 2; + + //if (fDeltaPhiCut > 0 && TMath::Abs(deltaPhi) > fDeltaPhiCut) + // continue; + + trackletCount++; + } + //multMBTracks = mult->GetNumberOfTracklets(); + multMBTracks = trackletCount; + //printf("trackletCount %d \n", trackletCount); + } + else { + AliDebug(AliLog::kError, Form("Multiplicty %p", mult)); + return; + } } else { AliDebug(AliLog::kError, Form("Found analysis type %s", GetAnalysisMode())); @@ -983,17 +1025,20 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc Int_t multAll=0, multAcc=0, multRec=0; Int_t *labelsAll=0, *labelsAcc=0, *labelsRec=0; + // cosmics analysis + Int_t cosmicCount = 0; + // high-pt tracks + Int_t highPtCount = 0; + // check event cuts if(isEventOK && isEventTriggered) { // get all charged tracks - //allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,vtxESD,GetAnalysisMode()); allChargedTracks = AlidNdPtHelper::GetAllChargedTracks(esdEvent,GetAnalysisMode()); if(!allChargedTracks) return; Int_t entries = allChargedTracks->GetEntries(); //printf("entries %d \n",entries); - Bool_t isCosmic = kFALSE; labelsAll = new Int_t[entries]; labelsAcc = new Int_t[entries]; @@ -1016,6 +1061,29 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc if(!esdTrackCuts->AcceptTrack(track)) continue; + // + Bool_t isOK = kFALSE; + Double_t x[3]; track->GetXYZ(x); + Double_t b[3]; AliTracker::GetBxByBz(x,b); + + // + // if TPC-ITS hybrid tracking (kTPCITSHybrid) + // replace track parameters with TPC-ony track parameters + // + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid ) + { + // Relate TPC-only tracks to SPD vertex + isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig); + if(!isOK) continue; + + // replace esd track parameters with TPCinner + AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); + if (!tpcTrack) return; + track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); + + if(tpcTrack) delete tpcTrack; + } + FillHistograms(track,stack,AlidNdPtHelper::kAllTracks); labelsAll[multAll] = TMath::Abs(track->GetLabel()); multAll++; @@ -1023,13 +1091,18 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc //FillHistograms(track,stack,AlidNdPtHelper::kAccTracks); //labelsAcc[multAcc] = TMath::Abs(track->GetLabel()); //multAcc++; + + // check high-pt tracks + if(accCuts->AcceptTrack(track) && track->Pt() > 6.) + { + //printf(" high pt: pt %f \n",track->Pt()); + highPtCount++; + } - // cosmics analysis - isCosmic = kFALSE; - if( GetParticleMode()==AlidNdPtHelper::kCosmics ) + // check cosmics tracks + if( GetParticleMode()==AlidNdPtHelper::kCosmic ) { - Int_t mult = 0; - if(accCuts->AcceptTrack(track) ) + if(accCuts->AcceptTrack(track)) { for(Int_t j=0; jAcceptTrack(track1) && accCuts->AcceptTrack(track1) ) { - mult++; - isCosmic = AlidNdPtHelper::IsCosmicTrack(track,track1); + if ( AlidNdPtHelper::IsCosmicTrack(track,track1) ) { + cosmicCount++; + break; + } } } } - if(isCosmic) - printf("evt. number %d , mult %d \n", esdEvent->GetEventNumberInFile(), mult); - - if(!isCosmic) continue; + // if(!isCosmic) continue; } + // update track parameters using vertex point if(GetAnalysisMode() == AlidNdPtHelper::kTPCSPDvtxUpdate) { // update track parameters AliExternalTrackParam cParam; - track->RelateToVertexTPC(esdEvent->GetPrimaryVertexSPD(),esdEvent->GetMagneticField(),kVeryBig,&cParam); + isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig, &cParam); + if(!isOK) continue; track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); if(accCuts->AcceptTrack(track)) { @@ -1068,8 +1142,16 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc labelsRec[multRec] = TMath::Abs(track->GetLabel()); multRec++; } - } - } + } + } + if(cosmicCount) + printf("COSMIC EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec); + + if(highPtCount) + printf("HIGH PT EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec); + + if(multRec > 30) + printf("HIGH MULT EVENT: number %d , mult %d \n", esdEvent->GetEventNumberInFile(), multRec); // fill track multiplicity histograms FillHistograms(allChargedTracks,labelsAll,multAll,labelsAcc,multAcc,labelsRec,multRec); @@ -1090,7 +1172,7 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc // multiplicity correlation matrix // Double_t vMultTrueEventMatrix[2] = {multRec,multMCTrueTracks}; - fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix); + if(isEventOK && isEventTriggered) fEventMultCorrelationMatrix->Fill(vMultTrueEventMatrix); // // event level corrections (zv,N_MB) @@ -1247,7 +1329,7 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc // only charged particles Double_t charge = particle->GetPDG()->Charge()/3.; - if (charge == 0.0) + if (TMath::Abs(charge) < 0.001) continue; // only postive charged @@ -1265,7 +1347,8 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc if(accCuts->AcceptTrack(particle)) { - if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) fGenPrimTrackMatrix->Fill(vTrackMatrix); + if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) + fGenPrimTrackMatrix->Fill(vTrackMatrix); // fill control histograms if(fHistogramsOn) @@ -1298,7 +1381,10 @@ void AlidNdPtAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent *const mc if(iMc == labelsRec[iRec]) { fRecTrackMatrix->Fill(vTrackMatrix); - if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) fRecPrimTrackMatrix->Fill(vTrackMatrix); + + if( AlidNdPtHelper::IsPrimaryParticle(stack, iMc, GetParticleMode()) ) + fRecPrimTrackMatrix->Fill(vTrackMatrix); + if(!prim) fRecSecTrackMatrix->Fill(vTrackMatrix); // fill control histograms @@ -1388,12 +1474,14 @@ void AlidNdPtAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack *con Double_t values[3] = {pt,eta,phi}; fRecTrackHist1[trackObj]->Fill(values); + /* Double_t values1[5] = {nClust,chi2PerCluster,pt,eta,phi}; if(trackObj == AlidNdPtHelper::kRecTracks) { if(fHistogramsOn) fRecTrackHist2->Fill(values1); } + */ // // Fill rec vs MC information @@ -1461,6 +1549,7 @@ void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNd Double_t gq = particle->GetPDG()->Charge()/3.0; // Charge units |e|/3 if(TMath::Abs(gq) < 0.001) return; + Float_t gpt = particle->Pt(); //Float_t qgpt = particle->Pt() * gq; Float_t geta = particle->Eta(); @@ -1482,10 +1571,16 @@ void AlidNdPtAnalysis::FillHistograms(AliStack *const stack, Int_t label, AlidNd fMCTrackHist1[trackObj]->Fill(vMCTrackHist1); Double_t vMCPrimTrackHist1[5] = {gpt,geta,pid,mech,motherPdg}; - if(prim) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); - else { - fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + Double_t vMCPrimTrackHist2[5] = {TMath::Abs(particle->GetPdgCode()),mech,motherPdg}; + //if(prim && AliPWG0Helper::IsPrimaryCharged(particle, label)) fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + if(prim) { + fMCPrimTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + if(pid == 5) fMCPrimTrackHist2[trackObj]->Fill(vMCPrimTrackHist2); } + else { + fMCSecTrackHist1[trackObj]->Fill(vMCPrimTrackHist1); + } + } //_____________________________________________________________________________ @@ -1575,6 +1670,7 @@ Long64_t AlidNdPtAnalysis::Merge(TCollection* const list) fMCTrackHist1[i]->Add(entry->fMCTrackHist1[i]); fMCPrimTrackHist1[i]->Add(entry->fMCPrimTrackHist1[i]); + fMCPrimTrackHist2[i]->Add(entry->fMCPrimTrackHist2[i]); fMCSecTrackHist1[i]->Add(entry->fMCSecTrackHist1[i]); fRecTrackHist1[i]->Add(entry->fRecTrackHist1[i]); @@ -2105,6 +2201,15 @@ void AlidNdPtAnalysis::Analyse() h2c->SetName("eff_pt_protons"); aFolderObj->Add(h2c); + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,5); + fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,5); + h1 = fMCPrimTrackHist1[1]->Projection(0); + h2 = fMCPrimTrackHist1[2]->Projection(0); + h2c = (TH1D *)h2->Clone(); + h2c->Divide(h1); + h2c->SetName("eff_pt_selected"); + aFolderObj->Add(h2c); + fMCPrimTrackHist1[1]->GetAxis(2)->SetRange(1,6); fMCPrimTrackHist1[2]->GetAxis(2)->SetRange(1,6); h1 = fMCPrimTrackHist1[1]->Projection(0); diff --git a/PWG0/dNdPt/AlidNdPtAnalysis.h b/PWG0/dNdPt/AlidNdPtAnalysis.h index 26fbb39e53a..abaf5a1589a 100644 --- a/PWG0/dNdPt/AlidNdPtAnalysis.h +++ b/PWG0/dNdPt/AlidNdPtAnalysis.h @@ -125,6 +125,7 @@ public : THnSparseF *GetMCTrackHist1(Int_t i) const {return fMCTrackHist1[i];} THnSparseF *GetMCPrimTrackHist1(Int_t i) const {return fMCPrimTrackHist1[i];} + THnSparseF *GetMCPrimTrackHist2(Int_t i) const {return fMCPrimTrackHist2[i];} THnSparseF *GetMCSecTrackHist1(Int_t i) const {return fMCSecTrackHist1[i];} THnSparseF *GetRecTrackHist1(Int_t i) const {return fRecTrackHist1[i];} @@ -233,6 +234,7 @@ private: THnSparseF *fMCTrackHist1[AlidNdPtHelper::kCutSteps]; //-> mcPt:mcEta:mcPhi THnSparseF *fMCPrimTrackHist1[AlidNdPtHelper::kCutSteps]; //-> mcPt:mcEta:pid:mech:mother + THnSparseF *fMCPrimTrackHist2[AlidNdPtHelper::kCutSteps]; //-> pdg:mech:mother THnSparseF *fMCSecTrackHist1[AlidNdPtHelper::kCutSteps]; //-> mcPt:mcEta:pid:mech:mother THnSparseF *fRecTrackHist1[AlidNdPtHelper::kCutSteps]; //-> Pt:Eta:Phi @@ -249,7 +251,7 @@ private: AlidNdPtAnalysis(const AlidNdPtAnalysis&); // not implemented AlidNdPtAnalysis& operator=(const AlidNdPtAnalysis&); // not implemented - ClassDef(AlidNdPtAnalysis,1); + ClassDef(AlidNdPtAnalysis,2); }; #endif diff --git a/PWG0/dNdPt/AlidNdPtBackgroundCuts.cxx b/PWG0/dNdPt/AlidNdPtBackgroundCuts.cxx new file mode 100644 index 00000000000..63f96da97b8 --- /dev/null +++ b/PWG0/dNdPt/AlidNdPtBackgroundCuts.cxx @@ -0,0 +1,225 @@ +/************************************************************************** +* Copyright(c) 1998-1999, 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. * +**************************************************************************/ + +#include +#include +#include +#include + +#include "AliLog.h" +#include "AliESDtrack.h" +#include "AliExternalTrackParam.h" +#include "TParticle.h" + +#include "AlidNdPtBackgroundCuts.h" + +using namespace std; + +ClassImp(AlidNdPtBackgroundCuts) + +//_____________________________________________________________________________ +AlidNdPtBackgroundCuts::AlidNdPtBackgroundCuts(const Char_t* name,const Char_t *title) : +AliAnalysisCuts(name, title) +, fMinEta(0) +, fMaxEta(0) +, fMinPhi(0) +, fMaxPhi(0) +, fMinPt(0) +, fMaxPt(0) +, fMaxFracSharedClust(0) +, fFillControlHisto(kFALSE) +, fControlHisto(0) +{ + // default constructor + + // init data members with defaults + Init(); +} + +//_____________________________________________________________________________ +AlidNdPtBackgroundCuts::~AlidNdPtBackgroundCuts() +{ + // destructor + if(fControlHisto) delete fControlHisto; +} + +//_____________________________________________________________________________ +void AlidNdPtBackgroundCuts::Init() +{ + // set default values + SetEtaWindow(); + SetPhiWindow(); + SetPtWindow(); + SetMaxFracSharedClust(); + + const Int_t ptNbins = 56; + Double_t binsPt[ptNbins+1] = {0.,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0,2.2,2.4,2.6,2.8,3.0,3.2,3.4,3.6,3.8,4.0,4.5,5.0,5.5,6.0,6.5,7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0}; + + //etasum:dphi:dpt:eta1:eta2:pt1:fracSharedClust1:qsum + Int_t binsControlHisto[8]= { 201, 401, 101, 30, 30, ptNbins, 101, 3 }; + Double_t minControlHisto[8]={-3.0, -2.*TMath::Pi(), -10, -1.5, -1.5, 0., 0., 0.}; + Double_t maxControlHisto[8]={ 3.0, 2.*TMath::Pi(), 10, 1.5, 1.5, 16., 1., 3.}; + + fControlHisto = new THnSparseF("fControlHisto","etasum:dphi:dpt:eta1:eta2:pt1:fracSharedClust1:qsum",8,binsControlHisto,minControlHisto,maxControlHisto); + fControlHisto->SetBinEdges(5,binsPt); + fControlHisto->GetAxis(0)->SetTitle("#eta1+#eta2"); + fControlHisto->GetAxis(1)->SetTitle("#phi1-#phi2 (rad)"); + fControlHisto->GetAxis(2)->SetTitle("pt1-pt2 (GeV/c)"); + fControlHisto->GetAxis(3)->SetTitle("#eta1"); + fControlHisto->GetAxis(4)->SetTitle("#eta2"); + fControlHisto->GetAxis(5)->SetTitle("pt1 (GeV/c)"); + fControlHisto->GetAxis(6)->SetTitle("fracSharedClust1"); + fControlHisto->GetAxis(7)->SetTitle("q1+q2"); + fControlHisto->Sumw2(); +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtBackgroundCuts::IsBackgroundTrack(AliESDtrack *track1, AliESDtrack *track2) +{ + // + // check whether track is cosmic or splitted one + // + if(!track1) return kFALSE; + if(!track2) return kFALSE; + const AliExternalTrackParam *tpcTrack1 = track1->GetTPCInnerParam(); + const AliExternalTrackParam *tpcTrack2 = track2->GetTPCInnerParam(); + if(!tpcTrack1) return kFALSE; + if(!tpcTrack2) return kFALSE; + + if( IsHistogramsOn() ) + { + Float_t etasum = tpcTrack1->Eta() + tpcTrack2->Eta(); + Float_t dphi = tpcTrack1->Phi() - tpcTrack2->Phi(); + Float_t dpt = tpcTrack1->Pt() - tpcTrack2->Pt(); + Float_t pt1 = tpcTrack1->Pt(); + Float_t qsum = track1->Charge() + track2->Charge(); + if(qsum == -2) qsum = 1; + + Float_t nclust1 = track1->GetTPCNclsIter1() ; // first tracking pass + Float_t nclust2 = track2->GetTPCNclsIter1() ; // first tracking pass + Float_t fracSharedClust1 = 0.0; + if(nclust1) fracSharedClust1 = track1->GetTPCnclsS()/Float_t(nclust1); + + //Float_t dsphi = (tpcTrack1->GetSnp()-tpcTrack2->GetSnp()) / TMath::Sqrt(tpcTrack1->GetSigmaSnp2()+tpcTrack2->GetSigmaSnp2()); + //Float_t dtanl = (tpcTrack1->GetTgl()-tpcTrack2->GetTgl()) / TMath::Sqrt(tpcTrack1->GetSigmaTgl2()+tpcTrack2->GetSigmaTgl2()); + //Float_t dsphi = tpcTrack1->GetSnp()-tpcTrack2->GetSnp(); + //Float_t dtanl = tpcTrack1->GetTgl()-tpcTrack2->GetTgl(); + // + + + /* + printf("tpcTrack1->GetSnp() %e, track1->Pt() %f, track1->Theta() %f, track1->Eta() %f, track1->Phi() %f, track1->Charge() %d \n", tpcTrack1->GetSnp(), track1->Pt(), track1->Theta(), track1->Eta(), track1->Phi(), track1->Charge()); + + printf("tpcTrack2->GetSnp() %e, track2->Pt() %f, track2->Theta() %f, track2->Eta() %f, track2->Phi() %f, track2->Charge() %d \n", tpcTrack2->GetSnp(), track2->Pt(), track2->Theta(), track2->Eta(), track2->Phi(), track2->Charge()); + */ + + Double_t vControlHisto[8] = {etasum, dphi, dpt, tpcTrack1->Eta(), tpcTrack2->Eta(), pt1, fracSharedClust1,qsum}; + if(nclust1 > 70 && nclust2 > 70) + fControlHisto->Fill(vControlHisto); + } + + if ( IsCosmicTrack(track1,track2) || IsSplittedTrack(track1,track2) ) return kTRUE; + else return kFALSE; + +return kFALSE; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtBackgroundCuts::IsCosmicTrack(AliESDtrack *track1, AliESDtrack *track2) +{ + // + // check whether track is cosmic + // + if(!track1) return kFALSE; + if(!track2) return kFALSE; + const AliExternalTrackParam *tpcTrack1 = track1->GetTPCInnerParam(); + const AliExternalTrackParam *tpcTrack2 = track2->GetTPCInnerParam(); + if(!tpcTrack1) return kFALSE; + if(!tpcTrack2) return kFALSE; + + /* + Float_t etasum = tpcTrack1->Eta() + tpcTrack2->Eta(); + Float_t dphi = tpcTrack1->Phi() - tpcTrack2->Phi(); + Float_t dpt = tpcTrack1->Pt() - tpcTrack2->Pt(); + Float_t pt1 = tpcTrack1->Pt(); + */ + Float_t qsum = track1->Charge() + track2->Charge(); + + Float_t nclust = track1->GetTPCNclsIter1() ; // first tracking pass + Float_t fracSharedClust = 0.0; + if(nclust) fracSharedClust = track1->GetTPCnclsS()/Float_t(nclust); + + if( qsum != 0) return kFALSE; + +return kFALSE; +} + +//_____________________________________________________________________________ +Bool_t AlidNdPtBackgroundCuts::IsSplittedTrack(AliESDtrack *track1, AliESDtrack *track2) +{ + // + // check whether track is cosmic + // + if(!track1) return kFALSE; + if(!track2) return kFALSE; + const AliExternalTrackParam *tpcTrack1 = track1->GetTPCInnerParam(); + const AliExternalTrackParam *tpcTrack2 = track2->GetTPCInnerParam(); + if(!tpcTrack1) return kFALSE; + if(!tpcTrack2) return kFALSE; + + /* + Float_t etasum = tpcTrack1->Eta() + tpcTrack2->Eta(); + Float_t dphi = tpcTrack1->Phi() - tpcTrack2->Phi(); + Float_t dpt = tpcTrack1->Pt() - tpcTrack2->Pt(); + Float_t pt1 = tpcTrack1->Pt(); + Float_t qsum = track1->Charge() + track2->Charge(); + + Float_t nclust = track1->GetTPCNclsIter1() ; // first tracking pass + Float_t fracSharedClust = 0.0; + if(nclust) fracSharedClust = track1->GetTPCnclsS()/Float_t(nclust); + */ + +return kFALSE; +} + + + +//_____________________________________________________________________________ +Long64_t AlidNdPtBackgroundCuts::Merge(TCollection* list) +{ + // Merge list of objects (needed by PROOF) + if (!list) + return 0; + + if (list->IsEmpty()) + return 1; + + TIterator* iter = list->MakeIterator(); + TObject* obj = 0; + + Int_t count=0; + while((obj = iter->Next()) != 0) + { + AlidNdPtBackgroundCuts* entry = dynamic_cast(obj); + if (entry == 0) + continue; + + fControlHisto->Add(entry->fControlHisto); + + count++; + } + +return count; +} diff --git a/PWG0/dNdPt/AlidNdPtBackgroundCuts.h b/PWG0/dNdPt/AlidNdPtBackgroundCuts.h new file mode 100644 index 00000000000..493a2d2dc94 --- /dev/null +++ b/PWG0/dNdPt/AlidNdPtBackgroundCuts.h @@ -0,0 +1,79 @@ +#ifndef ALIDNDPTBACKGROUNDCUTS_H +#define ALIDNDPTBACKGROUNDCUTS_H + +//------------------------------------------------------------------------------ +// Class to keep selection cuts for +// cosmic and kinks and splitted tracks. +// +// Author: J.Otwinowski 25/01/2010 +//------------------------------------------------------------------------------ + +class TParticle; +class AliESDtrack; +class AliExternalTrackParam; + +#include "AliAnalysisCuts.h" + +class AlidNdPtBackgroundCuts : public AliAnalysisCuts +{ +public: + AlidNdPtBackgroundCuts(const Char_t* name ="AlidNdPtBackgroundCuts", const Char_t *title =""); + virtual ~AlidNdPtBackgroundCuts(); + + // setters + void SetEtaWindow(const Float_t min=-10., const Float_t max=10.) { fMinEta=min; fMaxEta=max; } + void SetPhiWindow(const Float_t min=0., const Float_t max=1e99) { fMinPhi=min; fMaxPhi=max;} + void SetPtWindow(const Float_t min=0., const Float_t max=1e99) { fMinPt=min; fMaxPt=max;} + void SetMaxFracSharedClust(const Float_t max=1.) {fMaxFracSharedClust=max;} + + // getters + Float_t GetMinEta() const {return fMinEta;} + Float_t GetMaxEta() const {return fMaxEta;} + Float_t GetMinPhi() const {return fMinPhi;} + Float_t GetMaxPhi() const {return fMaxPhi;} + Float_t GetMinPt() const {return fMinPt;} + Float_t GetMaxPt() const {return fMaxPt;} + + Float_t GetMaxFracSharedClust() const {return fMaxFracSharedClust;} + + // Get control histo + THnSparseF *GetControlHisto() const {return fControlHisto;} + + // cuts init function + void Init(); + + // check MC tracks + virtual Bool_t IsSelected(TObject *) {return kTRUE;} + virtual Bool_t IsSelected(TList *) {return kTRUE;} + + // + Bool_t IsBackgroundTrack(AliESDtrack *track1, AliESDtrack *track2); + Bool_t IsCosmicTrack(AliESDtrack *track1, AliESDtrack *track2); + Bool_t IsSplittedTrack(AliESDtrack *track1, AliESDtrack *track2); + + // Merge output objects (needed by PROOF) + virtual Long64_t Merge(TCollection* list); + + // fill control histograms + void SetHistogramsOn(Bool_t fill=kTRUE) {fFillControlHisto = fill; } + Bool_t IsHistogramsOn() const {return fFillControlHisto; } + +private: + Float_t fMinEta; // min pseudorapidity limit + Float_t fMaxEta; // max pseudorapidity limit + Float_t fMinPhi; // min azimuthal angle (rad) limit + Float_t fMaxPhi; // max azimuthal angle (rad) limit + Float_t fMinPt; // min pt limit + Float_t fMaxPt; // max pt limit + Float_t fMaxFracSharedClust; // max fraction of track shared clusters + + Bool_t fFillControlHisto; // flag to fill control histograms + THnSparseF *fControlHisto; //-> etasum:dphi:dpt:pt1:fracSharedClust1:qsum + + AlidNdPtBackgroundCuts(const AlidNdPtBackgroundCuts&); // not implemented + AlidNdPtBackgroundCuts& operator=(const AlidNdPtBackgroundCuts&); // not implemented + + ClassDef(AlidNdPtBackgroundCuts, 1) +}; + +#endif // diff --git a/PWG0/dNdPt/AlidNdPtCutAnalysis.cxx b/PWG0/dNdPt/AlidNdPtCutAnalysis.cxx index 57e2ab9c238..20582a531b4 100644 --- a/PWG0/dNdPt/AlidNdPtCutAnalysis.cxx +++ b/PWG0/dNdPt/AlidNdPtCutAnalysis.cxx @@ -35,9 +35,11 @@ #include "AliMCEvent.h" #include "AliESDtrackCuts.h" #include "AliLog.h" +#include "AliTracker.h" #include "AlidNdPtEventCuts.h" #include "AlidNdPtAcceptanceCuts.h" +#include "AlidNdPtBackgroundCuts.h" #include "AliPhysicsSelection.h" #include "AliPWG0Helper.h" @@ -134,10 +136,10 @@ void AlidNdPtCutAnalysis::Init(){ Int_t binsRecMCEventHist[4]={100,100,100,150}; Double_t minRecMCEventHist[4]={-1.0*kFact,-1.0*kFact,-1.0*kFact,0.}; Double_t maxRecMCEventHist[4]={1.0*kFact,1.0*kFact,1.0*kFact,150.}; - fRecMCEventHist = new THnSparseF("fRecMCEventHist","mcXv-Xv:mcYv-Yv:mcZv-Zv:Mult",4,binsRecMCEventHist,minRecMCEventHist,maxRecMCEventHist); - fRecMCEventHist->GetAxis(0)->SetTitle("mcXv-Xv (cm)"); - fRecMCEventHist->GetAxis(1)->SetTitle("mcYv-Yv (cm)"); - fRecMCEventHist->GetAxis(2)->SetTitle("mcZv-Zv (cm)"); + fRecMCEventHist = new THnSparseF("fRecMCEventHist","Xv-mcXv:Yv-mcYv:Zv-mcZv:Mult",4,binsRecMCEventHist,minRecMCEventHist,maxRecMCEventHist); + fRecMCEventHist->GetAxis(0)->SetTitle("Xv-mcXv (cm)"); + fRecMCEventHist->GetAxis(1)->SetTitle("Yv-mcYv (cm)"); + fRecMCEventHist->GetAxis(2)->SetTitle("Zv-mcZv (cm)"); fRecMCEventHist->GetAxis(3)->SetTitle("Mult"); fRecMCEventHist->Sumw2(); @@ -192,16 +194,16 @@ void AlidNdPtCutAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent * cons return; } - // get physics trigger selection - AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); - if(!trigSel) { - AliDebug(AliLog::kError, "cannot get trigSel"); - return; - } - // trigger selection Bool_t isEventTriggered = kTRUE; - if(evtCuts->IsTriggerRequired()) { + if(evtCuts->IsTriggerRequired()) + { + AliPhysicsSelection *trigSel = GetPhysicsTriggerSelection(); + if(!trigSel) { + AliDebug(AliLog::kError, "cannot get trigSel"); + return; + } + if(IsUseMCInfo()) { //static AliTriggerAnalysis* triggerAnalysis = new AliTriggerAnalysis; //isEventTriggered = triggerAnalysis->IsTriggerFired(esdEvent, GetTrigger()); @@ -209,7 +211,6 @@ void AlidNdPtCutAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent * cons isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); } else { - //isEventTriggered = esdEvent->IsTriggerClassFired(GetTriggerClass()); isEventTriggered = trigSel->IsCollisionCandidate(esdEvent); } } @@ -265,8 +266,6 @@ void AlidNdPtCutAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent * cons Bool_t bRedoTPCVertex = evtCuts->IsRedoTPCVertex(); Bool_t bUseConstraints = evtCuts->IsUseBeamSpotConstraint(); const AliESDVertex* vtxESD = AlidNdPtHelper::GetVertex(esdEvent,evtCuts,accCuts,esdTrackCuts,GetAnalysisMode(),kFALSE,bRedoTPCVertex,bUseConstraints); - if(!vtxESD) return; - Bool_t isRecVertex = AlidNdPtHelper::TestRecVertex(vtxESD, GetAnalysisMode(), kFALSE); Bool_t isEventOK = evtCuts->AcceptEvent(esdEvent,mcEvent,vtxESD) && isRecVertex; @@ -282,6 +281,33 @@ void AlidNdPtCutAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent * cons Double_t vEventCount[2] = { isEventTriggered, isTrigAndVertex}; fEventCount->Fill(vEventCount); + // + // cosmic background and splitted tracks + // + if(GetParticleMode() == AlidNdPtHelper::kBackgroundTrack) + { + AlidNdPtBackgroundCuts *backCuts = GetBackgroundCuts(); + if(!backCuts) return; + + for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) + { + AliESDtrack *track1 = esdEvent->GetTrack(iTrack); + if(!track1) continue; + if(track1->Charge()==0) continue; + + for (Int_t jTrack = iTrack+1; jTrack < esdEvent->GetNumberOfTracks(); jTrack++) + { + AliESDtrack *track2 = esdEvent->GetTrack(jTrack); + if(!track2) continue; + if(track2->Charge()==0) continue; + + //printf("track2->Charge() %d\n",track2->Charge()); + + backCuts->IsBackgroundTrack(track1, track2); + } + } + } + // check event cuts if(isEventOK && isEventTriggered) { @@ -295,28 +321,53 @@ void AlidNdPtCutAnalysis::Process(AliESDEvent *const esdEvent, AliMCEvent * cons AliESDtrack *track = (AliESDtrack*)allChargedTracks->At(i); if(!track) continue; + // + Bool_t isOK = kFALSE; + Double_t x[3]; track->GetXYZ(x); + Double_t b[3]; AliTracker::GetBxByBz(x,b); + + // + // if TPC-ITS hybrid tracking (kTPCITSHybrid) + // replace track parameters with TPC-ony track parameters + // + if( GetAnalysisMode() == AlidNdPtHelper::kTPCITSHybrid ) + { + // Relate TPC-only tracks to SPD vertex + isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig); + if(!isOK) continue; + + // replace esd track parameters with TPCinner + AliExternalTrackParam *tpcTrack = new AliExternalTrackParam(*(track->GetTPCInnerParam())); + if (!tpcTrack) return; + track->Set(tpcTrack->GetX(),tpcTrack->GetAlpha(),tpcTrack->GetParameter(),tpcTrack->GetCovariance()); + + if(tpcTrack) delete tpcTrack; + } + // if (GetAnalysisMode()==AlidNdPtHelper::kTPCSPDvtxUpdate) { // // update track parameters // - AliExternalTrackParam cParam; - track->RelateToVertexTPC(esdEvent->GetPrimaryVertexSPD(),esdEvent->GetMagneticField(),kVeryBig,&cParam); - track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); + AliExternalTrackParam cParam; + isOK = track->RelateToVertexTPCBxByBz(esdEvent->GetPrimaryVertexSPD(), b, kVeryBig, &cParam); + if(!isOK) continue; + + track->Set(cParam.GetX(),cParam.GetAlpha(),cParam.GetParameter(),cParam.GetCovariance()); } FillHistograms(track, stack); multAll++; } - Double_t vRecEventHist[5] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),vtxESD->GetZRes(),multAll}; - fRecEventHist->Fill(vRecEventHist); + Double_t vRecEventHist[5] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),vtxESD->GetZRes(),multAll}; + fRecEventHist->Fill(vRecEventHist); - if(IsUseMCInfo()) { - Double_t vRecMCEventHist[5] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2],multAll}; - fRecMCEventHist->Fill(vRecMCEventHist); - } + if(IsUseMCInfo()) { + Double_t vRecMCEventHist[5] = {vtxESD->GetXv()-vtxMC[0],vtxESD->GetYv()-vtxMC[1],vtxESD->GetZv()-vtxMC[2],multAll}; + fRecMCEventHist->Fill(vRecMCEventHist); + } } if(allChargedTracks) delete allChargedTracks; allChargedTracks = 0; @@ -335,11 +386,13 @@ void AlidNdPtCutAnalysis::FillHistograms(AliESDtrack *const esdTrack, AliStack * Float_t pt = esdTrack->Pt(); Float_t eta = esdTrack->Eta(); Float_t phi = esdTrack->Phi(); - Int_t nClust = esdTrack->GetTPCclusters(0); + //Int_t nClust = esdTrack->GetTPCclusters(0); + Int_t nClust = esdTrack->GetTPCNclsIter1(); Int_t nFindableClust = esdTrack->GetTPCNclsF(); Float_t chi2PerCluster = 0.; - if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); + //if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2()/Float_t(nClust); + if(nClust>0.) chi2PerCluster = esdTrack->GetTPCchi2Iter1()/Float_t(nClust); Float_t clustPerFindClust = 0.; if(nFindableClust>0.) clustPerFindClust = Float_t(nClust)/nFindableClust; @@ -388,6 +441,8 @@ Long64_t AlidNdPtCutAnalysis::Merge(TCollection* const list) TIterator* iter = list->MakeIterator(); TObject* obj = 0; + //TList *collPhysSelection = new TList; + // collection of generated histograms Int_t count=0; while((obj = iter->Next()) != 0) { @@ -402,10 +457,18 @@ Long64_t AlidNdPtCutAnalysis::Merge(TCollection* const list) // track histo fRecMCTrackHist->Add(entry->fRecMCTrackHist); + + // physics selection + //collPhysSelection->Add(entry->GetPhysicsTriggerSelection()); count++; } + //AliPhysicsSelection *trigSelection = GetPhysicsTriggerSelection(); + //trigSelection->Merge(collPhysSelection); + + //if(collPhysSelection) delete collPhysSelection; + return count; } diff --git a/PWG0/dNdPt/AlidNdPtTask.cxx b/PWG0/dNdPt/AlidNdPtTask.cxx index 7c482113e05..e48f6de9d3f 100644 --- a/PWG0/dNdPt/AlidNdPtTask.cxx +++ b/PWG0/dNdPt/AlidNdPtTask.cxx @@ -71,7 +71,6 @@ AlidNdPtTask::~AlidNdPtTask() //____________________________________________________________________________ Bool_t AlidNdPtTask::Notify() { - /* static Int_t count = 0; count++; Printf("Processing %d. file", count); @@ -82,12 +81,9 @@ Bool_t AlidNdPtTask::Notify() Printf("ERROR: Could not get ESDInputHandler"); return kFALSE; } else { - //Printf("esdH->Notify() %s", esdH->Notify()); - //Printf("fTree->GetCurrentFile()->GetName() %s", fTree->GetCurrentFile()->GetName()); if(chain) - Printf("chain->GetCurrentFile()->GetName() %s %s", chain->GetCurrentFile()->GetName(), ); + Printf("chain->GetCurrentFile()->GetName() %s", chain->GetCurrentFile()->GetName()); } - */ return kTRUE; } diff --git a/PWG0/dNdPt/macros/CreatedNdPtTrackCuts.C b/PWG0/dNdPt/macros/CreatedNdPtTrackCuts.C index 71d8bf612a1..91f2ce5755b 100644 --- a/PWG0/dNdPt/macros/CreatedNdPtTrackCuts.C +++ b/PWG0/dNdPt/macros/CreatedNdPtTrackCuts.C @@ -74,7 +74,8 @@ AliESDtrackCuts* CreatedNdPtTrackCuts(Int_t cutMode=1, Bool_t fieldOn = kTRUE, B maxChi2PerClusterTPC = 3.5; esdTrackCuts->SetRequireSigmaToVertex(kFALSE); - esdTrackCuts->SetMaxDCAToVertex(maxDCAtoVertex); + esdTrackCuts->SetMaxDCAToVertexXY(maxDCAtoVertex); + esdTrackCuts->SetMaxDCAToVertexZ(maxDCAtoVertex); esdTrackCuts->SetRequireTPCRefit(kFALSE); esdTrackCuts->SetAcceptKinkDaughters(kFALSE); esdTrackCuts->SetMinNClustersTPC(minNClustersTPC); @@ -167,7 +168,8 @@ AliESDtrackCuts* CreatedNdPtTrackCuts(Int_t cutMode=1, Bool_t fieldOn = kTRUE, B maxDCAtoVertex = 3.0; // cm esdTrackCuts->SetRequireSigmaToVertex(kFALSE); - esdTrackCuts->SetMaxDCAToVertex(maxDCAtoVertex); + esdTrackCuts->SetMaxDCAToVertexXY(maxDCAtoVertex); + esdTrackCuts->SetMaxDCAToVertexZ(maxDCAtoVertex); esdTrackCuts->SetRequireTPCRefit(kFALSE); esdTrackCuts->SetAcceptKinkDaughters(kTRUE); //esdTrackCuts->SetMinNClustersTPC(minNClustersTPC); @@ -185,7 +187,8 @@ AliESDtrackCuts* CreatedNdPtTrackCuts(Int_t cutMode=1, Bool_t fieldOn = kTRUE, B maxDCAtoVertex = 3.0; // cm esdTrackCuts->SetRequireSigmaToVertex(kFALSE); - esdTrackCuts->SetMaxDCAToVertex(maxDCAtoVertex); + esdTrackCuts->SetMaxDCAToVertexXY(maxDCAtoVertex); + esdTrackCuts->SetMaxDCAToVertexZ(maxDCAtoVertex); esdTrackCuts->SetRequireTPCRefit(kFALSE); esdTrackCuts->SetAcceptKinkDaughters(kTRUE); //esdTrackCuts->SetMinNClustersTPC(minNClustersTPC); @@ -209,7 +212,8 @@ AliESDtrackCuts* CreatedNdPtTrackCuts(Int_t cutMode=1, Bool_t fieldOn = kTRUE, B esdTrackCuts->SetAcceptKinkDaughters(kTRUE); esdTrackCuts->SetMinNClustersTPC(minNClustersTPC); esdTrackCuts->SetMaxChi2PerClusterTPC(maxChi2PerClusterTPC); - esdTrackCuts->SetMaxDCAToVertex(maxDCAtoVertex); + esdTrackCuts->SetMaxDCAToVertexXY(maxDCAtoVertex); + esdTrackCuts->SetMaxDCAToVertexZ(maxDCAtoVertex); esdTrackCuts->SetPtRange(minPt,maxPt); TString tag = "TPC-only tracking"; @@ -509,20 +513,18 @@ AliESDtrackCuts* CreatedNdPtTrackCuts(Int_t cutMode=1, Bool_t fieldOn = kTRUE, B TString tag = "TPC-only tracking"; } - // TPC-only + pt cut + eta cut + // TPC-only if (cutMode == 23) { // beta cuts (still under investigation) - //minNClustersTPC = 50; minNClustersTPC = 70; maxChi2PerClusterTPC = 4.0; maxDCAtoVertexXY = 2.4; // cm maxDCAtoVertexZ = 3.2; // cm - //minPt=0.15; - //maxPt=1.e10; esdTrackCuts->SetRequireSigmaToVertex(kFALSE); esdTrackCuts->SetRequireTPCRefit(kFALSE); + esdTrackCuts->SetRequireTPCStandAlone(kTRUE); esdTrackCuts->SetAcceptKinkDaughters(kFALSE); esdTrackCuts->SetMinNClustersTPC(minNClustersTPC); esdTrackCuts->SetMaxChi2PerClusterTPC(maxChi2PerClusterTPC); @@ -1036,10 +1038,56 @@ AliESDtrackCuts* CreatedNdPtTrackCuts(Int_t cutMode=1, Bool_t fieldOn = kTRUE, B TString tag = "TPC-only tracking"; } + // TPC-tracks + SPD point + ITS refit + if (cutMode == 50) + { + Int_t minclsTPC=70; + Double_t maxchi2perTPCcl=4.; + //Double_t maxEtaInAcc=0.8; + Double_t maxdcaxyITSTPC=0.2; + Double_t maxdcazITSTPC=1.e9; + + esdTrackCuts->SetMaxDCAToVertexXY(maxdcaxyITSTPC); + esdTrackCuts->SetMaxDCAToVertexZ(maxdcazITSTPC); + esdTrackCuts->SetDCAToVertex2D(kFALSE); + esdTrackCuts->SetRequireSigmaToVertex(kFALSE); + esdTrackCuts->SetRequireITSRefit(kTRUE); + esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); + esdTrackCuts->SetRequireTPCStandAlone(kTRUE); + esdTrackCuts->SetAcceptKinkDaughters(kFALSE); + esdTrackCuts->SetMinNClustersTPC(minclsTPC); + esdTrackCuts->SetMaxChi2PerClusterTPC(maxchi2perTPCcl); + //esdTrackCuts->SetEtaRange(-maxEtaInAcc,maxEtaInAcc); + TString tag = "TPC-tracks + ITS refit + >1 SPD cluster"; + } + // TPC-tracks + SPD point + ITS refit + if (cutMode == 60) + { + Int_t minclsITS=4; + Int_t minclsTPC=70; + Double_t maxchi2perTPCcl=4.; + //Double_t maxEtaInAcc=0.8; + Double_t maxdcaxyITSTPC=0.2; + Double_t maxdcazITSTPC=1.e9; + + esdTrackCuts->SetMaxDCAToVertexXY(maxdcaxyITSTPC); + esdTrackCuts->SetMaxDCAToVertexZ(maxdcazITSTPC); + esdTrackCuts->SetDCAToVertex2D(kFALSE); + esdTrackCuts->SetRequireSigmaToVertex(kFALSE); + esdTrackCuts->SetRequireITSRefit(kTRUE); + esdTrackCuts->SetMinNClustersITS(minclsITS); + esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); + //esdTrackCuts->SetRequireTPCStandAlone(kTRUE); + esdTrackCuts->SetRequireTPCRefit(kTRUE); + esdTrackCuts->SetAcceptKinkDaughters(kFALSE); + esdTrackCuts->SetMinNClustersTPC(minclsTPC); + esdTrackCuts->SetMaxChi2PerClusterTPC(maxchi2perTPCcl); + //esdTrackCuts->SetEtaRange(-maxEtaInAcc,maxEtaInAcc); - + TString tag = "Global tracking: TPC refit + ITS refit + >3 ITS clusters + >=1 SPD cluster"; + } // cuts for data without field if (!fieldOn) diff --git a/PWG0/libPWG0dep.pkg b/PWG0/libPWG0dep.pkg index 05e864843f8..feb3ffbbccc 100644 --- a/PWG0/libPWG0dep.pkg +++ b/PWG0/libPWG0dep.pkg @@ -13,7 +13,8 @@ SRCS = TPC/AliTPCClusterHistograms.cxx \ dNdPt/AlidNdPtEventCuts.cxx \ dNdPt/AlidNdPt.cxx \ dNdPt/AlidNdPtCutAnalysis.cxx \ - dNdPt/AlidNdPtTask.cxx + dNdPt/AlidNdPtTask.cxx \ + dNdPt/AlidNdPtBackgroundCuts.cxx HDRS = $(SRCS:.cxx=.h) -- 2.43.0