fMCPt(0),
fZvPtEtaCent(0),
fPhiPtEtaCent(0),
+fPtResptCent(0),
fMCRecPrimZvPtEtaCent(0),
fMCGenZvPtEtaCent(0),
fMCRecSecZvPtEtaCent(0),
fCutEtaMin(-0.8),
fCutEtaMax(0.8),
// track quality cut variables
+fFilterBit(AliAODTrack::kTrkGlobal),
fUseRelativeCuts(kFALSE),
fCutRequireTPCRefit(kTRUE),
+fCutRequireITSRefit(kTRUE),
fCutMinNumberOfClusters(60),
fCutPercMinNumberOfClusters(0.2),
fCutMinNumberOfCrossedRows(120.),
fCutMaxFractionSharedTPCClusters(0.4),
fCutMaxDCAToVertexZ(3.0),
fCutMaxDCAToVertexXY(3.0),
-fCutRequireITSRefit(kTRUE),
fCutMaxChi2PerClusterITS(36.),
fCutDCAToVertex2D(kFALSE),
fCutRequireSigmaToVertex(kFALSE),
Int_t binsPhiPtEtaCent[4]={fPhiNbins-1,fPtNbins-1,fEtaNbins-1,fCentralityNbins-1};
Int_t binsZvMultCent[3]={fZvNbins-1,fMultNbins-1,fCentralityNbins-1};
+ Int_t binsOneOverPtPtResCent[3]={400,300,11};
+ Double_t minbinsOneOverPtPtResCent[3]={0,0,0};
+ Double_t maxbinsOneOverPtPtResCent[3]={1,0.015,100};
+
// define Histograms
fZvPtEtaCent = new THnSparseF("fZvPtEtaCent","Zv:Pt:Eta:Centrality",4,binsZvPtEtaCent);
fZvPtEtaCent->SetBinEdges(0,fBinsZv);
fPhiPtEtaCent->GetAxis(3)->SetTitle("Centrality");
fPhiPtEtaCent->Sumw2();
-
+ fPtResptCent = new THnSparseF("fPtResptCent","OneOverPt:PtRes:Centrality",3,binsOneOverPtPtResCent, minbinsOneOverPtPtResCent, maxbinsOneOverPtPtResCent);
+ fPtResptCent->SetBinEdges(2, fBinsCentrality);
+ fPtResptCent->GetAxis(0)->SetTitle("1/pT (GeV/c)^{-1}");
+ fPtResptCent->GetAxis(1)->SetTitle("#sigma(1/pT)");
+ fPtResptCent->GetAxis(2)->SetTitle("centrality");
+ fPtResptCent->Sumw2();
+
fMCRecPrimZvPtEtaCent = new THnSparseF("fMCRecPrimZvPtEtaCent","mcZv:mcPt:mcEta:Centrality",4,binsZvPtEtaCent);
fMCRecPrimZvPtEtaCent->SetBinEdges(0,fBinsZv);
}
Int_t binsCheckPtEtaPhi[5] = { iNbin, fPtCheckNbins-1, fEtaCheckNbins-1, 18, fCentralityNbins-1};
-// Int_t binsCheckPtEtaPhi[5] = { iNbin, fPtNbins-1, fEtaCheckNbins-1, 18, fCentralityNbins-1};
+ // Int_t binsCheckPtEtaPhi[5] = { iNbin, fPtNbins-1, fEtaCheckNbins-1, 18, fCentralityNbins-1};
Double_t minCheckPtEtaPhi[5] = { dBinMin, 0, -1.5, 0., 0, };
Double_t maxCheckPtEtaPhi[5] = { dBinMax, 100, 1.5, 2.*TMath::Pi(), 100};
// Add Histos, Profiles etc to List
fOutputList->Add(fZvPtEtaCent);
fOutputList->Add(fPhiPtEtaCent);
+ fOutputList->Add(fPtResptCent);
fOutputList->Add(fPt);
fOutputList->Add(fMCRecPrimZvPtEtaCent);
fOutputList->Add(fMCGenZvPtEtaCent);
dMCTrackZvPtEtaCent[3] = dCentrality;
dMCTrackPhiPtEtaCent[0] = mcPart->Phi();
- dMCTrackPhiPtEtaCent[1] = mcPart->Pt();
- dMCTrackPhiPtEtaCent[2] = mcPart->Eta();
- dMCTrackPhiPtEtaCent[3] = dCentrality;
+ dMCTrackPhiPtEtaCent[1] = mcPart->Pt();
+ dMCTrackPhiPtEtaCent[2] = mcPart->Eta();
+ dMCTrackPhiPtEtaCent[3] = dCentrality;
if(bIsPrimary && bIsHijingParticle)
{
Short_t sign = tr->Charge();
Double_t xyz[50];
Double_t pxpypz[50];
- Double_t cv[100];
+ Double_t cv[21];
- for(Int_t i = 0; i < 100; i++) cv[i] = 0;
+ for(Int_t i = 0; i < 21; i++) cv[i] = 0;
for(Int_t i = 0; i < 50; i++) xyz[i] = 0;
for(Int_t i = 0; i < 50; i++) pxpypz[i] = 0;
-
+
tr->GetXYZ(xyz);
tr->GetPxPyPz(pxpypz);
+ tr->GetCovarianceXYZPxPyPz(cv);
// similar error occured as this one:
// See https://savannah.cern.ch/bugs/?102721
// Andrea Dainese now first does the beam pipe
// check and then copies from the vtrack (was the other
// way around) to avoid the crash in the etp::Set()
-
-// if(xyz[0]*xyz[0]+xyz[1]*xyz[1] > 3.*3.) { return kFALSE; }
+
+ // if(xyz[0]*xyz[0]+xyz[1]*xyz[1] > 3.*3.) { return kFALSE; }
AliExternalTrackParam * par = new AliExternalTrackParam(xyz, pxpypz, cv, sign);
if(!par) { return kFALSE; }
AliESDtrack dummy;
-// Double_t dLength = dummy.GetLengthInActiveZone(par,3,236, -5 ,0,0);
-// Double_t dLengthInTPC = GetLengthInTPC(tr, 1.8, 220, bMagZ);
-
+ // Double_t dLength = dummy.GetLengthInActiveZone(par,3,236, -5 ,0,0);
+ // Double_t dLengthInTPC = GetLengthInTPC(tr, 1.8, 220, bMagZ);
+
Double_t dLengthInTPC = dummy.GetLengthInActiveZone(par,3,236, bMagZ ,0,0);
Double_t dNClustersTPC = tr->GetTPCNcls();
Double_t dCrossedRowsTPC = tr->GetTPCClusterInfo(2,1);
Double_t dFindableClustersTPC = tr->GetTPCNclsF();
Double_t dChi2PerClusterTPC = (dNClustersTPC>0)?tr->Chi2perNDF()*(dNClustersTPC-5)/dNClustersTPC:-1.; // see AliDielectronVarManager.h
+ Double_t dOneOverPt = tr->OneOverPt();
+ Double_t dSigmaOneOverPt = TMath::Sqrt(par->GetSigma1Pt2());
// hAllCrossedRowsTPC->Fill(dCrossedRowsTPC);
if( DoCutLengthInTPCPtDependent() && ( dLengthInTPC < GetPrefactorLengthInTPCPtDependent()*(130-5*TMath::Abs(1./tr->Pt())) ) ) { return kFALSE; }
// filter bit 5
- if(!(tr->TestFilterBit(AliAODTrack::kTrkGlobal)) ) { return kFALSE; }
+ // if(!(tr->TestFilterBit(AliAODTrack::kTrkGlobal)) ) { return kFALSE; }
+ if(!(tr->TestFilterBit(GetFilterBit())) ) { return kFALSE; }
// filter bit 4
// if(!(tr->TestFilterBit(AliAODTrack::kTrkGlobalNoDCA)) ) { return kFALSE; }
// hFilterCrossedRowsTPC->Fill(dCrossedRowsTPC);
- if(dFindableClustersTPC == 0) {return kFALSE; }
- if(dCrossedRowsTPC < GetCutMinNCrossedRowsTPC()) { return kFALSE; }
- if( (dCrossedRowsTPC/dFindableClustersTPC) < GetCutMinRatioCrossedRowsOverFindableClustersTPC() ) { return kFALSE; }
- if(dNClustersTPC < GetCutMinNClustersTPC()) { return kFALSE; }
+ if(dFindableClustersTPC == 0) {return kFALSE; }
+ if(dCrossedRowsTPC < GetCutMinNCrossedRowsTPC()) { return kFALSE; }
+ if( (dCrossedRowsTPC/dFindableClustersTPC) < GetCutMinRatioCrossedRowsOverFindableClustersTPC() ) { return kFALSE; }
+ if(dNClustersTPC < GetCutMinNClustersTPC()) { return kFALSE; }
- if (!(tr->GetStatus() & AliVTrack::kITSrefit)) { return kFALSE; } // no ITS refit
-
- // do a relativ cut in Nclusters, both time at 80% of mean
- // if(fIsMonteCarlo)
- // {
- // if(dNClustersTPC < 88) { return kFALSE; }
- // }
- // else
- // {
- // if(dNClustersTPC < 76) { return kFALSE; }
+ if (IsITSRefitRequired() && !(tr->GetStatus() & AliVTrack::kITSrefit)) { return kFALSE; } // no ITS refit
+
+ // do a relativ cut in Nclusters, both time at 80% of mean
+ // if(fIsMonteCarlo)
+ // {
+ // if(dNClustersTPC < 88) { return kFALSE; }
// }
-
-
- FillDebugHisto(dCheck, dKine, dCentrality, kTRUE);
-
-
- // hAccNclsTPC->Fill(dNClustersTPC);
- // hAccCrossedRowsTPC->Fill(dCrossedRowsTPC);
- // Double_t dFindableClustersTPC = tr->GetTPCNclsF();
- // Double_t dChi2PerClusterTPC = (dNClustersTPC>0)?tr->Chi2perNDF()*(dNClustersTPC-5)/dNClustersTPC:-1.; // see AliDielectronVarManager.h
- //
- // Bool_t bIsFromKink = kFALSE;
- // if(tr->GetProdVertex()->GetType() == AliAODVertex::kKink) bIsFromKink = kTRUE;
- //
- // // from AliAnalysisTaskPIDqa.cxx
- // ULong_t uStatus = tr->GetStatus();
- // Bool_t bHasRefitTPC = kFALSE;
- // Bool_t bHasRefitITS = kFALSE;
- //
- // if ((uStatus & AliVTrack::kTPCrefit) == AliVTrack::kTPCrefit) bHasRefitTPC = kTRUE;
- // if ((uStatus & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) bHasRefitITS = kTRUE;
- //
- // // from AliDielectronVarManager.h
- // Bool_t bHasHitInSPD = kFALSE;
- // for (Int_t iC=0; iC<2; iC++)
+ // else
// {
- // if (((tr->GetITSClusterMap()) & (1<<(iC))) > 0) { bHasHitInSPD = kTRUE; }
+ // if(dNClustersTPC < 76) { return kFALSE; }
// }
- //
- // Double_t dNClustersITS = tr->GetITSNcls();
- // cuts to be done:
- // TPC
- // esdTrackCuts->SetMinNCrossedRowsTPC(70);
- // esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
- //
- // esdTrackCuts->SetMaxChi2PerClusterTPC(4);
- // esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
- // esdTrackCuts->SetRequireTPCRefit(kTRUE);
- // ITS
- // esdTrackCuts->SetRequireITSRefit(kTRUE);
- // esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
- //
- // esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1");
- // esdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
- //
- // esdTrackCuts->SetMaxDCAToVertexZ(2);
- // esdTrackCuts->SetDCAToVertex2D(kFALSE);
- // esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
- //
- // esdTrackCuts->SetMaxChi2PerClusterITS(36);
+ // fill histogram for pT resolution correction
+ Double_t dPtResolutionHisto[3] = { dOneOverPt, dSigmaOneOverPt, dCentrality };
+ fPtResptCent->Fill(dPtResolutionHisto);
- // delete [] dKine;
- // delete [] dCheck;
+ // fill debug histogram for all accepted tracks
+ FillDebugHisto(dCheck, dKine, dCentrality, kTRUE);
+
return kTRUE;
}
virtual void Terminate(Option_t *);
// Set binning for Histograms (if not set default binning is used)
- void SetBinsMult(Int_t nbins, Double_t* edges) { Printf("[I] Setting Mult Bins"); fMultNbins = nbins; fBinsMult = GetArrayClone(nbins,edges); }
- void SetBinsPt(Int_t nbins, Double_t* edges) { Printf("[I] Setting pT Bins"); fPtNbins = nbins; fBinsPt = GetArrayClone(nbins,edges); }
- void SetBinsPtCorr(Int_t nbins, Double_t* edges) { Printf("[I] Setting pTcorr Bins"); fPtCorrNbins = nbins; fBinsPtCorr = GetArrayClone(nbins,edges); }
- void SetBinsPtCheck(Int_t nbins, Double_t* edges) { Printf("[I] Setting pTcheck Bins"); fPtCheckNbins = nbins; fBinsPtCheck = GetArrayClone(nbins,edges); }
- void SetBinsEta(Int_t nbins, Double_t* edges) { Printf("[I] Setting Eta Bins"); fEtaNbins = nbins; fBinsEta = GetArrayClone(nbins,edges); }
- void SetBinsEtaCheck(Int_t nbins, Double_t* edges) { Printf("[I] Setting EtaCheck Bins"); fEtaCheckNbins = nbins; fBinsEtaCheck = GetArrayClone(nbins,edges); }
- void SetBinsZv(Int_t nbins, Double_t* edges) { Printf("[I] Setting Zv Bins"); fZvNbins = nbins; fBinsZv= GetArrayClone(nbins,edges); }
- void SetBinsCentrality(Int_t nbins, Double_t* edges) { Printf("[I] Setting Cent Bins"); fCentralityNbins = nbins; fBinsCentrality = GetArrayClone(nbins,edges); }
- void SetBinsPhi(Int_t nbins, Double_t* edges) { Printf("[I] Setting Phi Bins"); fPhiNbins = nbins; fBinsPhi = GetArrayClone(nbins,edges); }
+ void SetBinsMult(Int_t nbins, Double_t* edges) { Printf("[I] Setting Mult Bins"); fMultNbins = nbins; fBinsMult = GetArrayClone(nbins,edges); }
+ void SetBinsPt(Int_t nbins, Double_t* edges) { Printf("[I] Setting pT Bins"); fPtNbins = nbins; fBinsPt = GetArrayClone(nbins,edges); }
+ void SetBinsPtCorr(Int_t nbins, Double_t* edges) { Printf("[I] Setting pTcorr Bins"); fPtCorrNbins = nbins; fBinsPtCorr = GetArrayClone(nbins,edges); }
+ void SetBinsPtCheck(Int_t nbins, Double_t* edges) { Printf("[I] Setting pTcheck Bins"); fPtCheckNbins = nbins; fBinsPtCheck = GetArrayClone(nbins,edges); }
+ void SetBinsEta(Int_t nbins, Double_t* edges) { Printf("[I] Setting Eta Bins"); fEtaNbins = nbins; fBinsEta = GetArrayClone(nbins,edges); }
+ void SetBinsEtaCheck(Int_t nbins, Double_t* edges) { Printf("[I] Setting EtaCheck Bins"); fEtaCheckNbins = nbins; fBinsEtaCheck = GetArrayClone(nbins,edges); }
+ void SetBinsZv(Int_t nbins, Double_t* edges) { Printf("[I] Setting Zv Bins"); fZvNbins = nbins; fBinsZv= GetArrayClone(nbins,edges); }
+ void SetBinsCentrality(Int_t nbins, Double_t* edges) { Printf("[I] Setting Cent Bins"); fCentralityNbins = nbins; fBinsCentrality = GetArrayClone(nbins,edges); }
+ void SetBinsPhi(Int_t nbins, Double_t* edges) { Printf("[I] Setting Phi Bins"); fPhiNbins = nbins; fBinsPhi = GetArrayClone(nbins,edges); }
// set event cut variables
void SetCutMaxZVertex( Double_t d) { fCutMaxZVertex = d; }
Bool_t AreRelativeCutsEnabled() { return fUseRelativeCuts; }
// setter and getter track quality cut parameters
+ void SetFilterBit(Int_t b) { fFilterBit = b; };
+ Int_t GetFilterBit() { return fFilterBit; }
+
void SetCutRequireTPCRefit(Bool_t *b) { fCutRequireTPCRefit = b; }
Bool_t IsTPCRefitRequired() { return fCutRequireTPCRefit; }
+ void SetCutRequireITSRefit(Bool_t *b) { fCutRequireITSRefit = b; }
+ Bool_t IsITSRefitRequired() { return fCutRequireITSRefit; }
+
void SetCutMinNClustersTPC(Double_t d) { fCutMinNumberOfClusters = d; }
Double_t GetCutMinNClustersTPC() { return fCutMinNumberOfClusters; }
void SetCutMaxFractionSharedTPCClusters(Double_t d) { fCutMaxFractionSharedTPCClusters = d; }
void SetCutMaxDCAToVertexZ(Double_t d) { fCutMaxDCAToVertexZ = d; }
void SetCutMaxDCAToVertexXY(Double_t d) { fCutMaxDCAToVertexXY = d; }
- void SetCutRequireITSRefit(Bool_t *b) { fCutRequireITSRefit = b; }
void SetCutMaxChi2PerClusterITS(Double_t d) { fCutMaxChi2PerClusterITS = d; }
void SetCutDCAToVertex2D(Bool_t *b) { fCutDCAToVertex2D = b; }
void SetCutRequireSigmaToVertex(Bool_t *b) { fCutRequireSigmaToVertex = b; }
TH1F *fMCPt; // simple pT truth histogramm
THnSparseF *fZvPtEtaCent; //-> Zv:Pt:Eta:Cent
THnSparseF *fPhiPtEtaCent; //-> Phi:Pt:Eta:Cent
+ THnSparseF *fPtResptCent; //-> 1/pt:ResolutionPt:Cent
THnSparseF *fMCRecPrimZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent
THnSparseF *fMCGenZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent
THnSparseF *fMCRecSecZvPtEtaCent; //-> MC Zv:Pt:Eta:Cent, only secondaries
Double_t fCutEtaMax;
// track quality cut variables
+ Int_t fFilterBit;
Bool_t fUseRelativeCuts;
Bool_t fCutRequireTPCRefit;
+ Bool_t fCutRequireITSRefit;
Double_t fCutMinNumberOfClusters;
Double_t fCutPercMinNumberOfClusters;
Double_t fCutMinNumberOfCrossedRows;
Double_t fCutMaxFractionSharedTPCClusters;
Double_t fCutMaxDCAToVertexZ;
Double_t fCutMaxDCAToVertexXY;
- Bool_t fCutRequireITSRefit;
Double_t fCutMaxChi2PerClusterITS;
Bool_t fCutDCAToVertex2D;
Bool_t fCutRequireSigmaToVertex;
AlidNdPtAnalysisPbPbAOD *AddTask_dNdPt_PbPbAOD( UInt_t uTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral ,
Double_t dNCrossedRowsTPC = 100,
+ Int_t iFilterBit = AliAODTrack::kTrkGlobal,
char *contName = "dNdPtPbPbAOD")
{
Printf("===============BAUM================");
Double_t binsPhi[] = {0 ,0.10472 ,0.20944 ,0.314159 ,0.418879 ,0.523599 ,0.628319 ,0.733038 ,0.837758 ,0.942478 ,1.0472 ,1.15192 ,1.25664 ,1.36136 ,1.46608 ,1.5708 ,1.67552 ,1.78024 ,1.88496 ,1.98968 ,2.0944 ,2.19911 ,2.30383 ,2.40855 ,2.51327 ,2.61799 ,2.72271 ,2.82743 ,2.93215 ,3.03687 ,3.14159 ,3.24631 ,3.35103 ,3.45575 ,3.56047 ,3.66519 ,3.76991 ,3.87463 ,3.97935 ,4.08407 ,4.18879 ,4.29351 ,4.39823 ,4.50295 ,4.60767 ,4.71239 ,4.81711 ,4.92183 ,5.02655 ,5.13127 ,5.23599 ,5.34071 ,5.44543 ,5.55015 ,5.65487 ,5.75959 ,5.86431 ,5.96903 ,6.07375 ,6.17847 ,6.28319};
Int_t nBinPhi = sizeof(binsPhi)/sizeof(Double_t);
task->SetBinsPhi(nBinPhi, binsPhi);
+
+ task->SetFilterBit(iFilterBit);
::Info("AddTask_dNdPt_PbPbAOD",Form("CrossedRowCut set to %.0f", task->GetCutMinNCrossedRowsTPC()));
+ ::Info("AddTask_dNdPt_PbPbAOD",Form("FilterBit set to %d", task->GetFilterBit()));
mgr->AddTask(task);