#include "TTreeStream.h"\r
#include "TTree.h"\r
#include "TH1F.h"\r
+#include "TH3.h"\r
#include "TCanvas.h"\r
#include "TList.h"\r
#include "TObjArray.h"\r
, fUseMCInfo(kFALSE)\r
, fUseESDfriends(kFALSE)\r
, fReducePileUp(kTRUE)\r
+ , fFillTree(kTRUE)\r
, fFilteredTreeEventCuts(0)\r
, fFilteredTreeAcceptanceCuts(0)\r
, fFilteredTreeRecAcceptanceCuts(0)\r
, fLaserTree(0)\r
, fMCEffTree(0)\r
, fCosmicPairsTree(0)\r
+ , fPtResPhiPtTPC(0)\r
+ , fPtResPhiPtTPCc(0)\r
+ , fPtResPhiPtTPCITS(0)\r
+ , fPtResEtaPtTPC(0)\r
+ , fPtResEtaPtTPCc(0)\r
+ , fPtResEtaPtTPCITS(0)\r
+ , fPtResCentPtTPC(0)\r
+ , fPtResCentPtTPCc(0)\r
+ , fPtResCentPtTPCITS(0)\r
{\r
// Constructor\r
\r
DefineOutput(4, TTree::Class());\r
DefineOutput(5, TTree::Class());\r
DefineOutput(6, TTree::Class());\r
+ DefineOutput(7, TList::Class());\r
}\r
\r
//_____________________________________________________________________________\r
fMCEffTree = ((*fTreeSRedirector)<<"MCEffTree").GetTree();\r
fCosmicPairsTree = ((*fTreeSRedirector)<<"CosmicPairs").GetTree();\r
\r
+\r
+\r
+\r
+ // histogram booking\r
+\r
+ Double_t minPt = 0.1; \r
+ Double_t maxPt = 100.; \r
+ Int_t nbinsPt = 30; \r
+\r
+ Double_t logminPt = TMath::Log10(minPt);\r
+ Double_t logmaxPt = TMath::Log10(maxPt);\r
+ Double_t binwidth = (logmaxPt-logminPt)/nbinsPt;\r
+ Double_t *binsPt = new Double_t[nbinsPt+1];\r
+ binsPt[0] = minPt;\r
+ for (Int_t i=1;i<=nbinsPt;i++) {\r
+ binsPt[i] = minPt + TMath::Power(10,logminPt+i*binwidth);\r
+ }\r
+\r
+ // 1pT resol cov matrix bins\r
+ Double_t min1PtRes = 0.; \r
+ Double_t max1PtRes = 0.3; \r
+ Int_t nbins1PtRes = 300; \r
+ Double_t bins1PtRes[301];\r
+ for (Int_t i=0;i<=nbins1PtRes;i++) {\r
+ bins1PtRes[i] = min1PtRes + i*(max1PtRes-min1PtRes)/nbins1PtRes;\r
+ }\r
+\r
+ // phi bins\r
+ Double_t minPhi = 0.; \r
+ Double_t maxPhi = 6.5; \r
+ Int_t nbinsPhi = 100; \r
+ Double_t binsPhi[101];\r
+ for (Int_t i=0;i<=nbinsPhi;i++) {\r
+ binsPhi[i] = minPhi + i*(maxPhi-minPhi)/nbinsPhi;\r
+ }\r
+\r
+ // eta bins\r
+ Double_t minEta = -1.;\r
+ Double_t maxEta = 1.;\r
+ Int_t nbinsEta = 20;\r
+ Double_t binsEta[21];\r
+ for (Int_t i=0;i<=nbinsEta;i++) {\r
+ binsEta[i] = minEta + i*(maxEta-minEta)/nbinsEta;\r
+ }\r
+\r
+ // mult bins\r
+ Double_t minCent = 0.;\r
+ Double_t maxCent = 100;\r
+ Int_t nbinsCent = 20;\r
+ Double_t binsCent[101];\r
+ for (Int_t i=0;i<=nbinsCent;i++) {\r
+ binsCent[i] = minCent + i*(maxCent-minCent)/nbinsCent;\r
+ }\r
+ \r
+ fPtResPhiPtTPC = new TH3D("fPtResPhiPtTPC","pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);\r
+ fPtResPhiPtTPCc = new TH3D("fPtResPhiPtTPCc","pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);\r
+ fPtResPhiPtTPCITS = new TH3D("fPtResPhiPtTPCITS","pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsPhi,binsPhi,nbins1PtRes,bins1PtRes);\r
+ \r
+fPtResEtaPtTPC = new TH3D("fPtResEtaPtTPC","pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);\r
+ fPtResEtaPtTPCc = new TH3D("fPtResEtaPtTPCc","pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);\r
+ fPtResEtaPtTPCITS = new TH3D("fPtResEtaPtTPCITS","pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsEta,binsEta,nbins1PtRes,bins1PtRes);\r
+ \r
+fPtResCentPtTPC = new TH3D("fPtResCentPtTPC","pt rel. resolution from cov. matrix TPC tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);\r
+ fPtResCentPtTPCc = new TH3D("fPtResCentPtTPCc","pt rel. resolution from cov. matrix TPC constrained tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);\r
+ fPtResCentPtTPCITS = new TH3D("fPtResCentPtTPCITS","pt rel. resolution from cov. matrix TPC+ITS tracks",nbinsPt,binsPt,nbinsCent,binsCent,nbins1PtRes,bins1PtRes);\r
+\r
+ \r
+ fOutput = new TList; \r
+ fOutput->SetOwner();\r
+ if(!fOutput) return;\r
+\r
+ fOutput->Add(fPtResPhiPtTPC);\r
+ fOutput->Add(fPtResPhiPtTPCc);\r
+ fOutput->Add(fPtResPhiPtTPCITS);\r
+ fOutput->Add(fPtResEtaPtTPC);\r
+ fOutput->Add(fPtResEtaPtTPCc);\r
+ fOutput->Add(fPtResEtaPtTPCITS);\r
+ fOutput->Add(fPtResCentPtTPC);\r
+ fOutput->Add(fPtResCentPtTPCc);\r
+ fOutput->Add(fPtResCentPtTPCITS);\r
+\r
+ // post data to outputs\r
+\r
PostData(1,fV0Tree);\r
PostData(2,fHighPtTree);\r
PostData(3,fdEdxTree);\r
PostData(4,fLaserTree);\r
PostData(5,fMCEffTree);\r
PostData(6,fCosmicPairsTree);\r
+\r
+ PostData(7,fOutput);\r
}\r
\r
//_____________________________________________________________________________\r
//\r
//fCosmicPairsTree->Fill();\r
\r
+ if(!fFillTree) return;\r
if(!fTreeSRedirector) return;\r
(*fTreeSRedirector)<<"CosmicPairs"<<\r
"fileName.="<<&fileName<< // file name\r
//Double_t vtxX=vtxESD->GetX();\r
//Double_t vtxY=vtxESD->GetY();\r
//Double_t vtxZ=vtxESD->GetZ();\r
+ if(!fFillTree) return;\r
if(!fTreeSRedirector) return;\r
(*fTreeSRedirector)<<"highPt"<<\r
"fileName.="<<&fileName<< \r
\r
//fLaserTree->Fill();\r
\r
+ if(!fFillTree) return;\r
if(!fTreeSRedirector) return;\r
(*fTreeSRedirector)<<"Laser"<<\r
"fileName.="<<&fileName<<\r
AliExternalTrackParam* ptrackInnerC3 = (AliExternalTrackParam*)trackInnerC3->Clone();\r
Int_t ntracks = esdEvent->GetNumberOfTracks();\r
\r
- if(fTreeSRedirector && dumpToTree) \r
+ // fill histograms\r
+ FillHistograms(ptrack, ptpcInnerC, mult, (Double_t)chi2(0,0));\r
+\r
+ if(fTreeSRedirector && dumpToTree && fFillTree) \r
{\r
\r
(*fTreeSRedirector)<<"highPt"<<\r
\r
\r
//\r
- if(fTreeSRedirector) {\r
+ if(fTreeSRedirector && fFillTree) {\r
(*fTreeSRedirector)<<"MCEffTree"<<\r
"fileName.="<<&fileName<<\r
"triggerClass.="<<&triggerClass<<\r
if (type==0) continue; \r
TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();\r
\r
+ if(!fFillTree) return;\r
if(!fTreeSRedirector) return;\r
(*fTreeSRedirector)<<"V0s"<<\r
"isDownscaled="<<isDownscaled<<\r
if(!IsHighDeDxParticle(track)) continue;\r
TObjString triggerClass = esdEvent->GetFiredTriggerClasses().Data();\r
\r
+ if(!fFillTree) return;\r
if(!fTreeSRedirector) return;\r
(*fTreeSRedirector)<<"dEdx"<<\r
"fileName.="<<&fileName<<\r
return mult; \r
}\r
\r
+//_____________________________________________________________________________\r
+void AliAnalysisTaskFilteredTree::FillHistograms(AliESDtrack* const ptrack, AliExternalTrackParam* const ptpcInnerC, const Double_t centralityF, const Double_t chi2TPCInnerC) \r
+{\r
+//\r
+// Fill pT relative resolution histograms for \r
+// TPC only, TPC only constrained to vertex and TPC+ITS tracking\r
+//\r
+ if(!ptrack) return; \r
+ if(!ptpcInnerC) return; \r
+\r
+ const AliExternalTrackParam * innerParam = (AliExternalTrackParam *) ptrack->GetInnerParam();\r
+ if(!innerParam) return;\r
+\r
+ Float_t dxy, dz;\r
+ ptrack->GetImpactParameters(dxy,dz);\r
+\r
+// TPC+ITS primary tracks \r
+if( abs(ptrack->Eta())<0.8 && \r
+ ptrack->GetTPCClusterInfo(3,1)>130 && \r
+ ptrack->IsOn(0x40) && \r
+ ptrack->GetTPCclusters(0)>0.0 && \r
+ ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.2 && \r
+ abs(innerParam->GetX())>0.0 && \r
+ abs(innerParam->GetY()/innerParam->GetX())<0.14 && \r
+ abs(innerParam->GetTgl())<0.85 && \r
+ ptrack->IsOn(0x0004) && \r
+ ptrack->GetNcls(0)>0 &&\r
+ ptrack->GetITSchi2()>0 && \r
+ sqrt(ptrack->GetITSchi2()/ptrack->GetNcls(0))<6 &&\r
+ sqrt(chi2TPCInnerC)<6 &&\r
+ abs(dz)<2.0 && \r
+ abs(dxy)<(0.018+0.035*abs(ptrack->GetSigned1Pt())) )\r
+ {\r
+ fPtResPhiPtTPCITS->Fill(ptrack->Pt(),ptrack->Phi(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));\r
+ fPtResEtaPtTPCITS->Fill(ptrack->Pt(),ptrack->Eta(),1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));\r
+ fPtResCentPtTPCITS->Fill(ptrack->Pt(),centralityF,1./abs(ptrack->GetSigned1Pt())*TMath::Sqrt(ptrack->GetSigma1Pt2()));\r
+ }\r
+\r
+// TPC primary tracks \r
+// and TPC constrained primary tracks \r
+\r
+ AliExternalTrackParam *ptpcInner = (AliExternalTrackParam *) ptrack->GetTPCInnerParam(); \r
+ if(!ptpcInner) return;\r
+\r
\r
+ Float_t dxyTPC, dzTPC;\r
+ ptrack->GetImpactParametersTPC(dxyTPC,dzTPC);\r
+\r
+if( abs(ptrack->Eta())<0.8 && \r
+ ptrack->GetTPCClusterInfo(3,1)>130 && \r
+ ptrack->IsOn(0x40)&& \r
+ ptrack->GetTPCclusters(0)>0.0 && \r
+ ptrack->GetTPCnclsS()/ptrack->GetTPCclusters(0)<0.2 && \r
+ abs(innerParam->GetX())>0.0 && \r
+ abs(innerParam->GetY()/innerParam->GetX())<0.14 && \r
+ abs(innerParam->GetTgl())<0.85 && \r
+ abs(dzTPC)<3.2 && \r
+ abs(dxyTPC)<2.4 )\r
+ {\r
+ // TPC only\r
+ fPtResPhiPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Phi(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));\r
+ fPtResEtaPtTPC->Fill(ptpcInner->Pt(),ptpcInner->Eta(),1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));\r
+ fPtResCentPtTPC->Fill(ptpcInner->Pt(),centralityF,1./abs(ptpcInner->GetSigned1Pt())*TMath::Sqrt(ptpcInner->GetSigma1Pt2()));\r
+\r
+ // TPC constrained to vertex \r
+ fPtResPhiPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Phi(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));\r
+ fPtResEtaPtTPCc->Fill(ptpcInnerC->Pt(),ptpcInnerC->Eta(),1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));\r
+ fPtResCentPtTPCc->Fill(ptpcInnerC->Pt(),centralityF,1./abs(ptpcInnerC->GetSigned1Pt())*TMath::Sqrt(ptpcInnerC->GetSigma1Pt2()));\r
+ }\r
+}\r