]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
modifications related to primary track selection
authorjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 29 Nov 2009 19:02:35 +0000 (19:02 +0000)
committerjotwinow <jotwinow@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 29 Nov 2009 19:02:35 +0000 (19:02 +0000)
PWG1/TPC/AliPerformanceDCA.cxx
PWG1/TPC/AliPerformanceDEdx.cxx
PWG1/TPC/AliPerformanceMatch.cxx
PWG1/TPC/AliPerformanceMatch.h
PWG1/TPC/AliPerformanceTPC.cxx
PWG1/TPC/AliPerformanceTPC.h

index e330ab9847ecc1f821a96152dabbd1bad62aff24..38ba5683b4c6c8a9b47126f747f3c14e69d2a228 100644 (file)
@@ -319,7 +319,7 @@ void AliPerformanceDCA::Analyse()
   char title[256];
 
   // set pt measurable range 
-  fDCAHisto->GetAxis(3)->SetRangeUser(0.10,10.);
+  //fDCAHisto->GetAxis(3)->SetRangeUser(0.10,10.);
 
   //
   h2D = fDCAHisto->Projection(0,1); // inverse projection convention
@@ -481,12 +481,6 @@ void AliPerformanceDCA::Analyse()
   aFolderObj->Add(h2D);
   */
 
-
-
-
-
-
-
   // export objects to analysis folder
   fAnalysisFolder = ExportToFolder(aFolderObj);
 
index 14ab052008170ec4c5f8b48978fc64d85938c6c4..c0b02f42b9b86af5dcf250249e07c27f6832e0b0 100644 (file)
@@ -187,26 +187,36 @@ void AliPerformanceDEdx::ProcessInnerTPC(AliStack* const stack, AliESDtrack *con
   esdTrack->GetImpactParametersTPC(dca,cov);
 
   if((esdTrack->GetStatus()&AliESDtrack::kTPCrefit)==0) return; // TPC refit
-  if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) 
-  { 
-    Float_t dedx = esdTrack->GetTPCsignal();
-    Int_t ncls = esdTrack->GetTPCNcls();
-
-    Double_t pt = innerParam->Pt();
-    Double_t lam = TMath::ATan2(innerParam->Pz(),innerParam->Pt());
-    Double_t p = pt/TMath::Cos(lam);
-    //Double_t alpha = innerParam->GetAlpha();
-    Double_t phi = TMath::ATan2(innerParam->Py(),innerParam->Px());
-    //if(phi<0.) phi += 2.*TMath::Phi();
-    Double_t y = innerParam->GetY();
-    Double_t z = innerParam->GetZ();
-    Double_t snp = innerParam->GetSnp();
-    Double_t tgl = innerParam->GetTgl();
-
-    //Double_t vDeDxHisto[8] = {dedx,alpha,y,z,snp,tgl,ncls,p};
-    Double_t vDeDxHisto[8] = {dedx,phi,y,z,snp,tgl,ncls,p};
-    fDeDxHisto->Fill(vDeDxHisto); 
+
+  //
+  // select primaries
+  //
+  Double_t dcaToVertex = -1;
+  if( fCutsRC->GetDCAToVertex2D() ) 
+  {
+      dcaToVertex = TMath::Sqrt(dca[0]*dca[0]/fCutsRC->GetMaxDCAToVertexXY()/fCutsRC->GetMaxDCAToVertexXY()                    + dca[1]*dca[1]/fCutsRC->GetMaxDCAToVertexZ()/fCutsRC->GetMaxDCAToVertexZ()); 
   }
+  if(fCutsRC->GetDCAToVertex2D() && dcaToVertex > 1) return;
+  if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[0]) > fCutsRC->GetMaxDCAToVertexXY()) return;
+  if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[1]) > fCutsRC->GetMaxDCAToVertexZ()) return;
+
+  Float_t dedx = esdTrack->GetTPCsignal();
+  Int_t ncls = esdTrack->GetTPCNcls();
+
+  Double_t pt = innerParam->Pt();
+  Double_t lam = TMath::ATan2(innerParam->Pz(),innerParam->Pt());
+  Double_t p = pt/TMath::Cos(lam);
+  //Double_t alpha = innerParam->GetAlpha();
+  Double_t phi = TMath::ATan2(innerParam->Py(),innerParam->Px());
+  //if(phi<0.) phi += 2.*TMath::Phi();
+  Double_t y = innerParam->GetY();
+  Double_t z = innerParam->GetZ();
+  Double_t snp = innerParam->GetSnp();
+  Double_t tgl = innerParam->GetTgl();
+
+  //Double_t vDeDxHisto[8] = {dedx,alpha,y,z,snp,tgl,ncls,p};
+  Double_t vDeDxHisto[8] = {dedx,phi,y,z,snp,tgl,ncls,p};
+  fDeDxHisto->Fill(vDeDxHisto); 
 
   if(!stack) return;
 }
@@ -358,11 +368,12 @@ void AliPerformanceDEdx::Analyse()
   }
 
   // resolution histograms for mips
+  //dedx:phi:y:z:snp:tgl:ncls:p
   fDeDxHisto->GetAxis(2)->SetRangeUser(-15.,14.999);
   fDeDxHisto->GetAxis(3)->SetRangeUser(-120.,119.999);
   fDeDxHisto->GetAxis(4)->SetRangeUser(-0.4, 0.399);
-  fDeDxHisto->GetAxis(5)->SetRangeUser(-1.,0.999);
-  fDeDxHisto->GetAxis(6)->SetRangeUser(60.,140.);
+  fDeDxHisto->GetAxis(5)->SetRangeUser(-0.9,0.89);
+  fDeDxHisto->GetAxis(6)->SetRangeUser(60.,160.);
   fDeDxHisto->GetAxis(7)->SetRangeUser(0.4,0.499);
 
   h1D=(TH1F*)fDeDxHisto->Projection(0);
@@ -415,7 +426,7 @@ void AliPerformanceDEdx::Analyse()
   // export objects to analysis folder
   fAnalysisFolder = ExportToFolder(aFolderObj);
 
-  // delete only TObjrArray
+  // delete only TObjArray
   if(aFolderObj) delete aFolderObj;
 }
 
index c8243f00803581ea0196243795fc436ae5655088..59501e7b801423fda23a49342884f9ca568639b1 100644 (file)
@@ -181,19 +181,21 @@ void AliPerformanceMatch::Init(){
   fPullHisto->GetAxis(10)->SetTitle("isReconstructed");
   fPullHisto->Sumw2();
 
-  // -> has match:y:z:snp:tgl:pt:ITSclusters
-  Int_t binsTrackingEffHisto[7]    = { 2,    50,  250, 50, 50, 100,    7};
-  Double_t minTrackingEffHisto[7]  = {-0.5, -25, -250, -1, -2,   0, -0.5};
-  Double_t maxTrackingEffHisto[7]  = { 1.5,  25,  250,  1,  2,  20,  6.5};
+  // -> has match:y:z:snp:tgl:phi:pt:ITSclusters
+  Int_t binsTrackingEffHisto[8]    = { 2,    50, 100, 50, 50, 90,           100,  7   };
+  Double_t minTrackingEffHisto[8]  = {-0.5, -25, -50, -1, -2, 0.,            0,   -0.5 };
+  Double_t maxTrackingEffHisto[8]  = { 1.5,  25,  50,  1,  2, 2*TMath::Pi(), 20,   6.5 };
   
-  fTrackingEffHisto = new THnSparseF("fTrackingEffHisto","has match:y:z:snp:tgl:pt:ITSclusters",7,binsTrackingEffHisto,minTrackingEffHisto,maxTrackingEffHisto);
+  fTrackingEffHisto = new THnSparseF("fTrackingEffHisto","has match:y:z:snp:tgl:phi:pt:ITSclusters",8,binsTrackingEffHisto,minTrackingEffHisto,maxTrackingEffHisto);
   fTrackingEffHisto->GetAxis(0)->SetTitle("IsMatching");
   fTrackingEffHisto->GetAxis(1)->SetTitle("local y (cm)");
   fTrackingEffHisto->GetAxis(2)->SetTitle("z (cm)");
   fTrackingEffHisto->GetAxis(3)->SetTitle("sin(#phi)");
   fTrackingEffHisto->GetAxis(4)->SetTitle("tan(#lambda)");
-  fTrackingEffHisto->GetAxis(5)->SetTitle("p_{T}");
-  fTrackingEffHisto->GetAxis(6)->SetTitle("number of ITS clusters");
+  fTrackingEffHisto->GetAxis(5)->SetTitle("phi (rad)");
+  fTrackingEffHisto->GetAxis(6)->SetTitle("p_{T}");
+  fTrackingEffHisto->GetAxis(7)->SetTitle("number of ITS clusters");
+  fTrackingEffHisto->Sumw2();
 
   // Init cuts 
   if(!fCutsMC) 
@@ -202,7 +204,7 @@ void AliPerformanceMatch::Init(){
     AliDebug(AliLog::kError, "ERROR: Cannot find AliRecInfoCuts object");
 
   // init folder
-  fAnalysisFolder = CreateFolder("folderRes","Analysis Resolution Folder");
+  fAnalysisFolder = CreateFolder("folderMatch","Analysis Matching Folder");
 }
 
 //_____________________________________________________________________________
@@ -210,14 +212,14 @@ void AliPerformanceMatch::ProcessITSTPC(Int_t iTrack, AliESDEvent *const esdEven
 {
   //
   // addition to standard analysis - check if ITS stand-alone tracks have a match in the TPC
-  // Author: A. Kalwait
-  //
+  // Origin: A. Kalwait
+  // Modified: J. Otwinowski
   if(!esdTrack) return;
   if(!esdFriendTrack) return;
 
   //
   if (esdTrack->GetInnerParam()) return; // ITS stand-alone tracks have not TPC inner param
-  if (esdTrack->GetITSclusters(0) < 2) return;
+  if (esdTrack->GetITSclusters(0) < fCutsRC->GetMinNClustersITS()) return;
   //AliTracker::PropagateTrackToBxByBz(esdTrack,80.0,0.1056,1.0,kTRUE); // we propagate the ITS stand-alone to the inner TPC radius
   Bool_t hasMatch = kFALSE;
     for (Int_t jTrack = 0; jTrack < esdEvent->GetNumberOfTracks(); jTrack++) {
@@ -225,9 +227,11 @@ void AliPerformanceMatch::ProcessITSTPC(Int_t iTrack, AliESDEvent *const esdEven
       if (jTrack==iTrack) continue;
       AliESDtrack *trackTPC = esdEvent->GetTrack(jTrack);
       if (!trackTPC) continue;
-      if (!trackTPC->GetInnerParam()) continue;
+      if (!trackTPC->GetTPCInnerParam()) continue;
 
       AliExternalTrackParam *innerTPC = new AliExternalTrackParam(*(trackTPC->GetTPCInnerParam()));
+      if(!innerTPC) continue;
+
       AliTracker::PropagateTrackToBxByBz(innerTPC,2.8,trackTPC->GetMass(),1.0,kTRUE);
       Double_t x[3]; trackTPC->GetXYZ(x);
       Double_t b[3]; AliTracker::GetBxByBz(x,b);
@@ -243,21 +247,15 @@ void AliPerformanceMatch::ProcessITSTPC(Int_t iTrack, AliESDEvent *const esdEven
       printf("innerTPC->GetY() %f, innerTPC->GetSnp() %f, innerTPC->GetTgl() %f \n", 
               innerTPC->GetY() , innerTPC->GetSnp() , innerTPC->GetTgl());
       */
-
-      /*
-      if (TMath::Abs(esdTrack->GetY() - trackTPC->GetInnerParam()->GetY()) > 3) continue;
-      if (TMath::Abs(esdTrack->GetSnp() - trackTPC->GetInnerParam()->GetSnp()) > 0.2) continue;
-      if (TMath::Abs(esdTrack->GetTgl() - trackTPC->GetInnerParam()->GetTgl()) > 0.2) continue;
-      */
-      if (TMath::Abs(esdTrack->GetY() - innerTPC->GetY()) > 3) continue;
-      if (TMath::Abs(esdTrack->GetSnp() - innerTPC->GetSnp()) > 0.2) continue;
-      if (TMath::Abs(esdTrack->GetTgl() - innerTPC->GetTgl()) > 0.2) continue;
+      if (TMath::Abs(esdTrack->GetY() - innerTPC->GetY()) > 3) { delete innerTPC; continue; }
+      if (TMath::Abs(esdTrack->GetSnp() - innerTPC->GetSnp()) > 0.2) { delete innerTPC; continue; }
+      if (TMath::Abs(esdTrack->GetTgl() - innerTPC->GetTgl()) > 0.2) { delete innerTPC; continue; }
 
       hasMatch = kTRUE;
       if(innerTPC) delete innerTPC;
     }
-    //has match:y:z:snp:tgl:pt:ITSclusters
-    Double_t vecTrackingEff[7] = {hasMatch,esdTrack->GetY(),esdTrack->GetZ(),esdTrack->GetSnp(),esdTrack->GetTgl(),esdTrack->Pt(),esdTrack->GetITSclusters(0)};
+    //has match:y:z:snp:tgl:phi:pt:ITSclusters
+    Double_t vecTrackingEff[8] = { hasMatch,esdTrack->GetY(),esdTrack->GetZ(),esdTrack->GetSnp(),esdTrack->GetTgl(),esdTrack->Phi(), esdTrack->Pt(),esdTrack->GetITSclusters(0) };
     fTrackingEffHisto->Fill(vecTrackingEff);
     
 }
@@ -280,7 +278,6 @@ void AliPerformanceMatch::ProcessTPCITS(AliStack* /*const stack*/, AliESDtrack *
   Double_t mass = esdTrack->GetMass();
   Double_t step=1.0; // cm
 
-
   //
   // Propagate TPCinner (reference detector)
   //
@@ -290,8 +287,19 @@ void AliPerformanceMatch::ProcessTPCITS(AliStack* /*const stack*/, AliESDtrack *
   Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
   esdTrack->GetImpactParametersTPC(dca,cov);
 
+  //
+  // select primaries
+  //
+  Double_t dcaToVertex = -1;
+  if( fCutsRC->GetDCAToVertex2D() ) 
+  {
+      dcaToVertex = TMath::Sqrt(dca[0]*dca[0]/fCutsRC->GetMaxDCAToVertexXY()/fCutsRC->GetMaxDCAToVertexXY()                    + dca[1]*dca[1]/fCutsRC->GetMaxDCAToVertexZ()/fCutsRC->GetMaxDCAToVertexZ()); 
+  }
+  if(fCutsRC->GetDCAToVertex2D() && dcaToVertex > 1) return;
+  if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[0]) > fCutsRC->GetMaxDCAToVertexXY()) return;
+  if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[1]) > fCutsRC->GetMaxDCAToVertexZ()) return;
+
   if( (esdTrack->GetNcls(1)>fCutsRC->GetMinNClustersTPC()) && 
-      (TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) && 
       (esdTrack->GetTPCInnerParam()) &&
       (innerTPC=new AliExternalTrackParam(*(esdTrack->GetTPCInnerParam())))) 
   {
@@ -352,8 +360,19 @@ void AliPerformanceMatch::ProcessTPCTRD(AliStack* /*const stack*/, AliESDtrack *
   Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
   esdTrack->GetImpactParametersTPC(dca,cov);
 
+  //
+  // select primaries
+  //
+  Double_t dcaToVertex = -1;
+  if( fCutsRC->GetDCAToVertex2D() ) 
+  {
+      dcaToVertex = TMath::Sqrt(dca[0]*dca[0]/fCutsRC->GetMaxDCAToVertexXY()/fCutsRC->GetMaxDCAToVertexXY()                    + dca[1]*dca[1]/fCutsRC->GetMaxDCAToVertexZ()/fCutsRC->GetMaxDCAToVertexZ()); 
+  }
+  if(fCutsRC->GetDCAToVertex2D() && dcaToVertex > 1) return;
+  if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[0]) > fCutsRC->GetMaxDCAToVertexXY()) return;
+  if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[1]) > fCutsRC->GetMaxDCAToVertexZ()) return;
+
   if( (esdTrack->GetNcls(1)>fCutsRC->GetMinNClustersTPC()) && 
-      (TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) && 
       (esdFriendTrack->GetTPCOut()) &&
       (outerTPC=new AliExternalTrackParam(*(esdFriendTrack->GetTPCOut())))) 
   {
@@ -379,7 +398,6 @@ void AliPerformanceMatch::ProcessTPCTRD(AliStack* /*const stack*/, AliESDtrack *
     if(!(trdTrack = dynamic_cast<AliTRDtrackV1*>(calObject))) break;
   }
 
-  //if( (esdTrack->GetNcls(2)>fCutsRC->GetMinNClustersTRD()) &&
   if( (trdTrack) &&
       (trdTrack->GetNumberOfTracklets()>fCutsRC->GetMinNTrackletsTRD()) &&
       (trdTrack->GetTracklet(0)) &&
@@ -547,6 +565,8 @@ void AliPerformanceMatch::Analyse() {
   char name[256];
   char title[256];
 
+  if(GetAnalysisMode()==0 || GetAnalysisMode()==1) { 
+
   fResolHisto->GetAxis(10)->SetRangeUser(1.0,2.0); // only reconstructed
   fPullHisto->GetAxis(10)->SetRangeUser(1.0,2.0);  // only reconstructed
   for(Int_t i=0; i<5; i++) 
@@ -556,7 +576,7 @@ void AliPerformanceMatch::Analyse() {
       //if(j!=8) fResolHisto->GetAxis(8)->SetRangeUser(-0.9,0.89); // eta window
       if(j!=8) fResolHisto->GetAxis(8)->SetRangeUser(0.0,0.89); // eta window
       else fResolHisto->GetAxis(8)->SetRangeUser(-1.5,1.49);
-      fResolHisto->GetAxis(9)->SetRangeUser(0.16,100.); // pt threshold
+      fResolHisto->GetAxis(9)->SetRangeUser(0.1,100.); // pt threshold
 
       h2D = (TH2F*)fResolHisto->Projection(i,j);
 
@@ -570,7 +590,7 @@ void AliPerformanceMatch::Analyse() {
       sprintf(title,"%s vs %s",title,fResolHisto->GetAxis(j)->GetTitle());
       h->SetTitle(title);
 
-      if(j==9) h->SetBit(TH1::kLogX);    
+      //if(j==9) h->SetBit(TH1::kLogX);    
       aFolderObj->Add(h);
 
       h = AliPerformanceMatch::MakeResol(h2D,1,1,100);
@@ -589,10 +609,9 @@ void AliPerformanceMatch::Analyse() {
       aFolderObj->Add(h);
 
       //
-      //if(j!=8) fPullHisto->GetAxis(8)->SetRangeUser(-0.9,0.89); // eta window
       if(j!=8) fPullHisto->GetAxis(8)->SetRangeUser(0.0,0.89); // eta window
       else  fPullHisto->GetAxis(8)->SetRangeUser(-1.5,1.49); // eta window
-      fPullHisto->GetAxis(9)->SetRangeUser(0.16,100.);  // pt threshold
+      fPullHisto->GetAxis(9)->SetRangeUser(0.1,100.);  // pt threshold
 
       h2D = (TH2F*)fPullHisto->Projection(i,j);
 
@@ -606,7 +625,7 @@ void AliPerformanceMatch::Analyse() {
       sprintf(title,"%s vs %s",title,fPullHisto->GetAxis(j)->GetTitle());
       h->SetTitle(title);
 
-      //if(j==9) h->SetBit(TH1::kLogX);    
+      if(j==9) h->SetBit(TH1::kLogX);    
       aFolderObj->Add(h);
 
       h = AliPerformanceMatch::MakeResol(h2D,1,1,100);
@@ -631,16 +650,16 @@ void AliPerformanceMatch::Analyse() {
   {
     if(i!=8) fResolHisto->GetAxis(8)->SetRangeUser(-0.9,0.89); // eta window
     else fResolHisto->GetAxis(8)->SetRangeUser(-1.5,1.49);
-    fResolHisto->GetAxis(9)->SetRangeUser(0.16,100.); // pt threshold
+    fResolHisto->GetAxis(9)->SetRangeUser(0.1,100.); // pt threshold
 
     fResolHisto->GetAxis(10)->SetRange(1,fResolHisto->GetAxis(10)->GetNbins()); // all 
     h = (TH1F*)fResolHisto->Projection(i);
 
-    fResolHisto->GetAxis(10)->SetRangeUser(1.0,2.0); // only reconstructed
+    fResolHisto->GetAxis(10)->SetRange(2,2); // only reconstructed
     h2 = (TH1F*)fResolHisto->Projection(i);
 
     TH1F* h2c = (TH1F*)h2->Clone();
-    h2c->Divide(h2c,h,1,1,"B");
+    h2c->Divide(h2,h,1,1,"B");
  
     sprintf(name,"h_eff_%d",i);
     h2c->SetName(name);
@@ -651,6 +670,47 @@ void AliPerformanceMatch::Analyse() {
 
     aFolderObj->Add(h2c);
   }
+
+  }
+  
+  // 
+  // TPC efficiency wrt ITS
+  //
+  if(GetAnalysisMode()==2) { 
+
+    h = (TH1F*)fTrackingEffHisto->Projection(0);
+    aFolderObj->Add(h);
+
+    for(Int_t i=1; i<7; i++) 
+    {
+      //
+      // 
+      // calculate efficiency 
+      //
+
+      // all ITS standalone tracks
+      fTrackingEffHisto->GetAxis(0)->SetRange(1,fTrackingEffHisto->GetAxis(0)->GetNbins());
+      h = (TH1F*)fTrackingEffHisto->Projection(i);
+
+      // TPC tracks which has matching with TPC
+      fTrackingEffHisto->GetAxis(0)->SetRange(2,2);
+      h2 = (TH1F*)fTrackingEffHisto->Projection(i);
+
+      TH1F* h2c = (TH1F*)h2->Clone();
+      h2c->Divide(h2,h,1,1,"B");
+      sprintf(name,"h_TPC_eff_%d",i);
+      h2c->SetName(name);
+
+      h2c->GetXaxis()->SetTitle(h2c->GetXaxis()->GetTitle());
+      h2c->GetYaxis()->SetTitle("efficiency");
+      h2c->SetTitle("TPC effciency wrt ITS");
+
+      aFolderObj->Add(h2c);
+    }
+
+  }
+
   // export objects to analysis folder
   fAnalysisFolder = ExportToFolder(aFolderObj);
 
@@ -716,6 +776,7 @@ Long64_t AliPerformanceMatch::Merge(TCollection* const list)
 
   fResolHisto->Add(entry->fResolHisto);
   fPullHisto->Add(entry->fPullHisto);
+  fTrackingEffHisto->Add(entry->fTrackingEffHisto);
 
   count++;
   }
index 49dd774d777030ffbcb8abe317f04e352bfdf060..9a3c4bf665b8e078a8413757254e1993e38ad619 100644 (file)
@@ -95,7 +95,7 @@ private:
   THnSparseF *fPullHisto;  //-> pull_y:pull_z:pull_snp:pull_tgl:pull_1pt:y:z:snp:tgl:1pt:isRec
 
   // tracking efficiency using ITS stand-alone tracks histogram
-  THnSparseF *fTrackingEffHisto;  // -> has match:y:z:snp:tgl:pt:ITSclusters
+  THnSparseF *fTrackingEffHisto;  //-> has match:y:z:snp:tgl:phi:pt:ITSclusters
 
   // Global cuts objects
   AliRecInfoCuts*  fCutsRC;      // selection cuts for reconstructed tracks
index a53a7408f1d1d9c408d9d590e02b521e4c7b3e1f..7966e011f6e2b4e6149a974f28f39acf85a60a12 100644 (file)
@@ -60,7 +60,8 @@ ClassImp(AliPerformanceTPC)
 //_____________________________________________________________________________
 AliPerformanceTPC::AliPerformanceTPC():
   AliPerformanceObject("AliPerformanceTPC"),
-  fTPCHisto(0),
+  fTPCEventHisto(0),
+  fTPCTrackHisto(0),
 
   // Cuts 
   fCutsRC(0),  
@@ -75,7 +76,8 @@ AliPerformanceTPC::AliPerformanceTPC():
 //_____________________________________________________________________________
 AliPerformanceTPC::AliPerformanceTPC(Char_t* name="AliPerformanceTPC", Char_t* title="AliPerformanceTPC",Int_t analysisMode=0,Bool_t hptGenerator=kFALSE):
   AliPerformanceObject(name,title),
-  fTPCHisto(0),
+  fTPCEventHisto(0),
+  fTPCTrackHisto(0),
 
   // Cuts 
   fCutsRC(0),  
@@ -97,7 +99,8 @@ AliPerformanceTPC::~AliPerformanceTPC()
 {
   // destructor
    
-  if(fTPCHisto) delete fTPCHisto; fTPCHisto=0;     
+  if(fTPCEventHisto) delete fTPCEventHisto; fTPCEventHisto=0;     
+  if(fTPCTrackHisto) delete fTPCTrackHisto; fTPCTrackHisto=0;     
   if(fAnalysisFolder) delete fAnalysisFolder; fAnalysisFolder=0;
 }
 
@@ -130,21 +133,39 @@ void AliPerformanceTPC::Init(){
   }
   */
 
-  // nTPCClust:chi2PerTPCClust:nTPCClustFindRatio:eta:phi:pt
-  Int_t binsTPCHisto[6]={160,100,100,30,90,nPtBins};
-  Double_t minTPCHisto[6]={0., 0., 0., -1.5, 0., ptMin};
-  Double_t maxTPCHisto[6]={160.,10.,1.2, 1.5, 2.*TMath::Pi(), ptMax};
-
-  fTPCHisto = new THnSparseF("fTPCHisto","nClust:chi2PerClust:nClust/nFindableClust:eta:phi:pt",6,binsTPCHisto,minTPCHisto,maxTPCHisto);
-  fTPCHisto->SetBinEdges(5,binsPt);
-
-  fTPCHisto->GetAxis(0)->SetTitle("nClust");
-  fTPCHisto->GetAxis(1)->SetTitle("chi2PerClust");
-  fTPCHisto->GetAxis(2)->SetTitle("nClust/nFindableClust");
-  fTPCHisto->GetAxis(3)->SetTitle("#eta");
-  fTPCHisto->GetAxis(4)->SetTitle("#phi (rad)");
-  fTPCHisto->GetAxis(5)->SetTitle("p_{T} (GeV/c)");
-  fTPCHisto->Sumw2();
+  // Xv:Yv:Zv:mult:multP:multN
+  Int_t binsTPCEventHisto[6]=  {100,  100,   100,  101,   101,   101   };
+  Double_t minTPCEventHisto[6]={-10., -10., -30.,  -0.5,  -0.5,  -0.5  };
+  Double_t maxTPCEventHisto[6]={ 10.,  10.,  30.,  100.5, 100.5, 100.5 };
+
+  fTPCEventHisto = new THnSparseF("fTPCEventHisto","Xv:Yv:Zv:mult:multP:multN",6,binsTPCEventHisto,minTPCEventHisto,maxTPCEventHisto);
+  fTPCEventHisto->GetAxis(0)->SetTitle("Xv (cm)");
+  fTPCEventHisto->GetAxis(1)->SetTitle("Yv (cm)");
+  fTPCEventHisto->GetAxis(2)->SetTitle("Zv (cm)");
+  fTPCEventHisto->GetAxis(3)->SetTitle("mult");
+  fTPCEventHisto->GetAxis(4)->SetTitle("multP");
+  fTPCEventHisto->GetAxis(5)->SetTitle("multN");
+  fTPCEventHisto->Sumw2();
+
+
+  // nTPCClust:chi2PerTPCClust:nTPCClustFindRatio:DCAr:DCAz:eta:phi:pt:charge
+  Int_t binsTPCTrackHisto[9]=  { 160,  50,  60,  100, 100,  30,   90,             nPtBins,  3 };
+  Double_t minTPCTrackHisto[9]={ 0.,   0.,  0., -10,  -10., -1.5, 0.,             ptMin,   -1.5};
+  Double_t maxTPCTrackHisto[9]={ 160., 10., 1.2, 10,   10.,  1.5, 2.*TMath::Pi(), ptMax,    1.5};
+
+  fTPCTrackHisto = new THnSparseF("fTPCTrackHisto","nClust:chi2PerClust:nClust/nFindableClust:DCAr:DCAz:eta:phi:pt:charge",9,binsTPCTrackHisto,minTPCTrackHisto,maxTPCTrackHisto);
+  fTPCTrackHisto->SetBinEdges(7,binsPt);
+
+  fTPCTrackHisto->GetAxis(0)->SetTitle("nClust");
+  fTPCTrackHisto->GetAxis(1)->SetTitle("chi2PerClust");
+  fTPCTrackHisto->GetAxis(2)->SetTitle("nClust/nFindableClust");
+  fTPCTrackHisto->GetAxis(3)->SetTitle("DCAr (cm)");
+  fTPCTrackHisto->GetAxis(4)->SetTitle("DCAz (cm)");
+  fTPCTrackHisto->GetAxis(5)->SetTitle("#eta");
+  fTPCTrackHisto->GetAxis(6)->SetTitle("#phi (rad)");
+  fTPCTrackHisto->GetAxis(7)->SetTitle("p_{T} (GeV/c)");
+  fTPCTrackHisto->GetAxis(8)->SetTitle("charge");
+  fTPCTrackHisto->Sumw2();
 
   // Init cuts 
   if(!fCutsMC) 
@@ -168,7 +189,7 @@ void AliPerformanceTPC::ProcessTPC(AliStack* const stack, AliESDtrack *const esd
   Float_t dca[2], cov[3]; // dca_xy, dca_z, sigma_xy, sigma_xy_z, sigma_z
   esdTrack->GetImpactParametersTPC(dca,cov);
 
-  //Float_t q = esdTrack->Charge();
+  Float_t q = esdTrack->Charge();
   Float_t pt = track->Pt();
   Float_t eta = track->Eta();
   Float_t phi = track->Phi();
@@ -181,10 +202,20 @@ void AliPerformanceTPC::ProcessTPC(AliStack* const stack, AliESDtrack *const esd
   Float_t clustPerFindClust = 0.;
   if(nFindableClust>0.) clustPerFindClust = Float_t(nClust)/nFindableClust;
   
-  if(TMath::Abs(dca[0])<fCutsRC->GetMaxDCAToVertexXY() && TMath::Abs(dca[1])<fCutsRC->GetMaxDCAToVertexZ()) {
-    Double_t vTPCHisto[6] = {nClust,chi2PerCluster,clustPerFindClust,eta,phi,pt};
-    fTPCHisto->Fill(vTPCHisto); 
+  //
+  // select primaries
+  //
+  Double_t dcaToVertex = -1;
+  if( fCutsRC->GetDCAToVertex2D() ) 
+  {
+      dcaToVertex = TMath::Sqrt(dca[0]*dca[0]/fCutsRC->GetMaxDCAToVertexXY()/fCutsRC->GetMaxDCAToVertexXY()                    + dca[1]*dca[1]/fCutsRC->GetMaxDCAToVertexZ()/fCutsRC->GetMaxDCAToVertexZ()); 
   }
+  if(fCutsRC->GetDCAToVertex2D() && dcaToVertex > 1) return;
+  if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[0]) > fCutsRC->GetMaxDCAToVertexXY()) return;
+  if(!fCutsRC->GetDCAToVertex2D() && TMath::Abs(dca[1]) > fCutsRC->GetMaxDCAToVertexZ()) return;
+
+  Double_t vTPCTrackHisto[9] = {nClust,chi2PerCluster,clustPerFindClust,dca[0],dca[1],eta,phi,pt,q};
+  fTPCTrackHisto->Fill(vTPCTrackHisto); 
  
   //
   // Fill rec vs MC information
@@ -258,9 +289,10 @@ void AliPerformanceTPC::Exec(AliMCEvent* const mcEvent, AliESDEvent *const esdEv
   }
 
   //  Process events
+  Int_t mult=0; Int_t multP=0; Int_t multN=0;
   for (Int_t iTrack = 0; iTrack < esdEvent->GetNumberOfTracks(); iTrack++) 
   { 
-    AliESDtrack*track = esdEvent->GetTrack(iTrack);
+    AliESDtrack *track = esdEvent->GetTrack(iTrack);
     if(!track) continue;
 
     if(GetAnalysisMode() == 0) ProcessTPC(stack,track);
@@ -270,7 +302,24 @@ void AliPerformanceTPC::Exec(AliMCEvent* const mcEvent, AliESDEvent *const esdEv
       printf("ERROR: AnalysisMode %d \n",fAnalysisMode);
       return;
     }
+
+   // TPC only
+   AliESDtrack *tpcTrack = AliESDtrackCuts::GetTPCOnlyTrack(esdEvent,iTrack);
+   if(!tpcTrack) continue;
+
+   // track selection
+   if( fCutsRC->AcceptTrack(tpcTrack) ) { 
+     mult++;
+     if(tpcTrack->Charge()>0.) multP++;
+     if(tpcTrack->Charge()<0.) multN++;
+   }
+
+   if(tpcTrack) delete tpcTrack;
   }
+  //
+  const AliESDVertex *vtxESD = esdEvent->GetPrimaryVertexTPC();
+  Double_t vTPCEvent[6] = {vtxESD->GetXv(),vtxESD->GetYv(),vtxESD->GetZv(),mult,multP,multN};
+  fTPCEventHisto->Fill(vTPCEvent);
 }
 
 //_____________________________________________________________________________
@@ -280,26 +329,59 @@ void AliPerformanceTPC::Analyse() {
   // in the folder "folderTPC"
   //
   TH1::AddDirectory(kFALSE);
-  //TH1F *h=0;
+  TH1F *h=0;
   TH2F *h2D=0;
   TObjArray *aFolderObj = new TObjArray;
-
   char name[256];
   char title[256];
-  for(Int_t i=0; i<5; i++) 
+
+  //
+  // event histograms
+  //
+  for(Int_t i=0; i<6; i++) 
+  {
+      h = (TH1F*)fTPCEventHisto->Projection(i);
+      sprintf(name,"h_tpc_event_%d",i);
+      h->SetName(name);
+      h->GetXaxis()->SetTitle(fTPCEventHisto->GetAxis(i)->GetTitle());
+      h->GetYaxis()->SetTitle("events");
+      sprintf(title,"%s",fTPCEventHisto->GetAxis(i)->GetTitle());
+      h->SetTitle(title);
+
+      aFolderObj->Add(h);
+  }
+
+  //
+  // Track histograms
+  //
+  for(Int_t i=0; i<9; i++) 
+  {
+      h = (TH1F*)fTPCTrackHisto->Projection(i);
+      sprintf(name,"h_tpc_track_%d",i);
+      h->SetName(name);
+      h->GetXaxis()->SetTitle(fTPCTrackHisto->GetAxis(i)->GetTitle());
+      h->GetYaxis()->SetTitle("tracks");
+      sprintf(title,"%s",fTPCTrackHisto->GetAxis(i)->GetTitle());
+      h->SetTitle(title);
+
+      if(i==7) h->Scale(1,"width");
+      aFolderObj->Add(h);
+  }
+
+  //
+  for(Int_t i=0; i<8; i++) 
   {
-    for(Int_t j=i+1; j<6; j++) 
+    for(Int_t j=i+1; j<9; j++) 
     {
-      if(j==5) fTPCHisto->GetAxis(5)->SetRangeUser(0.1,10.);
-      h2D = (TH2F*)fTPCHisto->Projection(i,j);
-      sprintf(name,"h_tpc_%d_vs_%d",i,j);
+      h2D = (TH2F*)fTPCTrackHisto->Projection(i,j);
+      sprintf(name,"h_tpc_track_%d_vs_%d",i,j);
       h2D->SetName(name);
-      h2D->GetXaxis()->SetTitle(fTPCHisto->GetAxis(j)->GetTitle());
-      h2D->GetYaxis()->SetTitle(fTPCHisto->GetAxis(i)->GetTitle());
-      sprintf(title,"%s vs %s",fTPCHisto->GetAxis(j)->GetTitle(),fTPCHisto->GetAxis(i)->GetTitle());
+      h2D->GetXaxis()->SetTitle(fTPCTrackHisto->GetAxis(j)->GetTitle());
+      h2D->GetYaxis()->SetTitle(fTPCTrackHisto->GetAxis(i)->GetTitle());
+      sprintf(title,"%s vs %s",fTPCTrackHisto->GetAxis(j)->GetTitle(),fTPCTrackHisto->GetAxis(i)->GetTitle());
       h2D->SetTitle(title);
 
-      if(j==5) h2D->SetBit(TH1::kLogX);
+      if(j==7) h2D->SetBit(TH1::kLogX);
       aFolderObj->Add(h2D);
     }  
   }
@@ -364,12 +446,13 @@ Long64_t AliPerformanceTPC::Merge(TCollection* const list)
   Int_t count=0;
   while((obj = iter->Next()) != 0) 
   {
-  AliPerformanceTPC* entry = dynamic_cast<AliPerformanceTPC*>(obj);
-  if (entry == 0) continue; 
+    AliPerformanceTPC* entry = dynamic_cast<AliPerformanceTPC*>(obj);
+    if (entry == 0) continue; 
 
-  fTPCHisto->Add(entry->fTPCHisto);
+    fTPCEventHisto->Add(entry->fTPCEventHisto);
+    fTPCTrackHisto->Add(entry->fTPCTrackHisto);
 
-  count++;
+    count++;
   }
 
 return count;
index a2af12845350b804f627cc2ceb42aac9d76cdfaf..3a41dcd6da516e679a38509b304ca5a544cba283 100644 (file)
@@ -66,11 +66,13 @@ public :
 
   // getters
   //
-  THnSparse *GetTPCHisto() const  { return fTPCHisto; }
+  THnSparse *GetTPCEventHisto() const  { return fTPCEventHisto; }
+  THnSparse *GetTPCTrackHisto() const  { return fTPCTrackHisto; }
 private:
 
   // TPC histogram
-  THnSparseF *fTPCHisto; //-> nClust:chi2PerClust:nClust/nFindableClust:eta:phi:pt
+  THnSparseF *fTPCEventHisto; //-> Xv:Yv:Zv:mult:multP:multN
+  THnSparseF *fTPCTrackHisto; //-> nClust:chi2PerClust:nClust/nFindableClust:DCAr:DCAz:eta:phi:pt:charge
 
   // Global cuts objects
   AliRecInfoCuts* fCutsRC;  // selection cuts for reconstructed tracks