]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
add control histograms (Jacek Otwinowski)
authorjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Jun 2013 15:14:50 +0000 (15:14 +0000)
committerjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 6 Jun 2013 15:14:50 +0000 (15:14 +0000)
PWGPP/AliAnalysisTaskFilteredTree.cxx
PWGPP/AliAnalysisTaskFilteredTree.h
PWGPP/macros/AddTaskFilteredTree.C

index 678a394f4695e7f74fa85c7313b7dc2f70fb422e..fe90ad67d7df10d652018ad5793d810b769c952c 100644 (file)
@@ -22,6 +22,7 @@
 #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
@@ -75,6 +76,7 @@ AliAnalysisTaskFilteredTree::AliAnalysisTaskFilteredTree(const char *name)
   , fUseMCInfo(kFALSE)\r
   , fUseESDfriends(kFALSE)\r
   , fReducePileUp(kTRUE)\r
+  , fFillTree(kTRUE)\r
   , fFilteredTreeEventCuts(0)\r
   , fFilteredTreeAcceptanceCuts(0)\r
   , fFilteredTreeRecAcceptanceCuts(0)\r
@@ -93,6 +95,15 @@ AliAnalysisTaskFilteredTree::AliAnalysisTaskFilteredTree(const char *name)
   , 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
@@ -103,6 +114,7 @@ AliAnalysisTaskFilteredTree::AliAnalysisTaskFilteredTree(const char *name)
   DefineOutput(4, TTree::Class());\r
   DefineOutput(5, TTree::Class());\r
   DefineOutput(6, TTree::Class());\r
+  DefineOutput(7, TList::Class());\r
 }\r
 \r
 //_____________________________________________________________________________\r
@@ -158,12 +170,97 @@ void AliAnalysisTaskFilteredTree::UserCreateOutputObjects()
   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
@@ -352,6 +449,7 @@ void AliAnalysisTaskFilteredTree::ProcessCosmics(AliESDEvent *const event)
       //\r
       //fCosmicPairsTree->Fill();\r
 \r
+      if(!fFillTree) return;\r
       if(!fTreeSRedirector) return;\r
          (*fTreeSRedirector)<<"CosmicPairs"<<\r
            "fileName.="<<&fileName<<         // file name\r
@@ -570,6 +668,7 @@ void AliAnalysisTaskFilteredTree::Process(AliESDEvent *const esdEvent, AliMCEven
       //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
@@ -645,6 +744,7 @@ void AliAnalysisTaskFilteredTree::ProcessLaser(AliESDEvent *const esdEvent, AliM
 \r
       //fLaserTree->Fill();\r
 \r
+      if(!fFillTree) return;\r
       if(!fTreeSRedirector) return;\r
       (*fTreeSRedirector)<<"Laser"<<\r
         "fileName.="<<&fileName<<\r
@@ -1238,7 +1338,10 @@ void AliAnalysisTaskFilteredTree::ProcessAll(AliESDEvent *const esdEvent, AliMCE
       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
@@ -1572,7 +1675,7 @@ void AliAnalysisTaskFilteredTree::ProcessMCEff(AliESDEvent *const esdEvent, AliM
 \r
 \r
       //\r
-      if(fTreeSRedirector) {\r
+      if(fTreeSRedirector && fFillTree) {\r
         (*fTreeSRedirector)<<"MCEffTree"<<\r
           "fileName.="<<&fileName<<\r
           "triggerClass.="<<&triggerClass<<\r
@@ -1733,6 +1836,7 @@ void AliAnalysisTaskFilteredTree::ProcessV0(AliESDEvent *const esdEvent, AliMCEv
     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
@@ -1855,6 +1959,7 @@ void AliAnalysisTaskFilteredTree::ProcessdEdx(AliESDEvent *const esdEvent, AliMC
       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
@@ -2355,4 +2460,73 @@ Int_t AliAnalysisTaskFilteredTree::GetMCTrueTrackMult(AliMCEvent *const mcEvent,
 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
index 4530b3ea77c0817db0fdf34dc8110e8aa88060bb..5771e0ef2d28cf1fb1d72ecc0c4172949e9aca2f 100644 (file)
@@ -28,6 +28,7 @@ class TObjArray;
 class TTree;
 class TTreeSRedirector;
 class TParticle;
+class TH3;
 
 #include "AliTriggerAnalysis.h"
 #include "AliAnalysisTaskSE.h"
@@ -100,6 +101,11 @@ class AliAnalysisTaskFilteredTree : public AliAnalysisTaskSE {
   void SetProcessAll(Bool_t proc) { fProcessAll = proc; }
   static Int_t GetMCTrueTrackMult(AliMCEvent *const mcEvent, AliFilteredTreeEventCuts *const evtCuts, AliFilteredTreeAcceptanceCuts *const accCuts);
 
+  void SetFillTrees(Bool_t filltree) { fFillTree = filltree ;}
+  Bool_t GetFillTrees() { return fFillTree ;}
+
+  void FillHistograms(AliESDtrack* const ptrack, AliExternalTrackParam* const ptpcInnerC, const Double_t centralityF, const Double_t chi2TPCInnerC);
+
  private:
 
   AliESDEvent *fESD;    //! ESD event
@@ -109,8 +115,9 @@ class AliAnalysisTaskFilteredTree : public AliAnalysisTaskSE {
   TIterator *fPitList;  //! iterator over the output objetcs  
 
   Bool_t fUseMCInfo;        // use MC information
-  Bool_t fUseESDfriends;        // use esd friends
-  Bool_t fReducePileUp;        // downscale the information for the pile-up TPC tracks
+  Bool_t fUseESDfriends;    // use esd friends
+  Bool_t fReducePileUp;     // downscale the information for the pile-up TPC tracks
+  Bool_t fFillTree;         // do not fill trees
 
   AliFilteredTreeEventCuts      *fFilteredTreeEventCuts;      // event cuts
   AliFilteredTreeAcceptanceCuts *fFilteredTreeAcceptanceCuts; // acceptance cuts  
@@ -136,6 +143,18 @@ class AliAnalysisTaskFilteredTree : public AliAnalysisTaskSE {
   TTree* fMCEffTree;        //! list send on output slot 0
   TTree* fCosmicPairsTree;  //! list send on output slot 0
 
+  TH3D* fPtResPhiPtTPC;    //! sigma(pt)/pt vs Phi vs Pt for prim. TPC tracks
+  TH3D* fPtResPhiPtTPCc;   //! sigma(pt)/pt vs Phi vs Pt for prim. TPC contrained to vertex tracks
+  TH3D* fPtResPhiPtTPCITS; //! sigma(pt)/pt vs Phi vs Pt for prim. TPC+ITS tracks
+
+  TH3D* fPtResEtaPtTPC;    //! sigma(pt)/pt vs Eta vs Pt for prim. TPC tracks
+  TH3D* fPtResEtaPtTPCc;   //! sigma(pt)/pt vs Eta vs Pt for prim. TPC contrained to vertex tracks
+  TH3D* fPtResEtaPtTPCITS; //! sigma(pt)/pt vs Eta vs Pt for prim. TPC+ITS tracks
+
+  TH3D* fPtResCentPtTPC;    //! sigma(pt)/pt vs Cent vs Pt for prim. TPC tracks
+  TH3D* fPtResCentPtTPCc;   //! sigma(pt)/pt vs Cent vs Pt for prim. TPC contrained to vertex tracks
+  TH3D* fPtResCentPtTPCITS; //! sigma(pt)/pt vs Cent vs Pt for prim. TPC+ITS tracks
+
   AliAnalysisTaskFilteredTree(const AliAnalysisTaskFilteredTree&); // not implemented
   AliAnalysisTaskFilteredTree& operator=(const AliAnalysisTaskFilteredTree&); // not implemented
   
index 221803da5c5481028cf56681fab32398118f4fad..67cdd23452d4262cd23f0869c6d108be165da8bb 100644 (file)
@@ -80,6 +80,7 @@ AliAnalysisTask* AddTaskFilteredTree(TString outputFile="")
   task->SetProcessAll(kTRUE);
   task->SetProcessCosmics(kTRUE);
   //task->SetProcessAll(kFALSE);
+  //task->SetFillTrees(kFALSE); // only histograms are filled
 
   // trigger
   //task->SelectCollisionCandidates(AliVEvent::kMB); 
@@ -120,6 +121,14 @@ AliAnalysisTask* AddTaskFilteredTree(TString outputFile="")
   AliAnalysisDataContainer *coutput6 = mgr->CreateContainer("filtered6", TTree::Class(), AliAnalysisManager::kOutputContainer, outputFile.Data());
   mgr->ConnectOutput(task, 6, coutput6);
 
+
+ // store histograms in the separate file
+  TString outputFileHisto = "PtResHistograms.root";
+
+  AliAnalysisDataContainer *coutput7 = mgr->CreateContainer("histo7", TList::Class(), AliAnalysisManager::kOutputContainer, outputFileHisto.Data());
+  mgr->ConnectOutput(task, 7, coutput7);
+
+
   return task;
 }