]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronHelper.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronHelper.cxx
index cb7719d2cc1307de3eee14c1e537c7a6981460e5..a4a6f500578f2c48796bbe0bb8228f255d7602de 100644 (file)
@@ -20,7 +20,7 @@
 // Authors: 
 //   Jens Wiechula <Jens.Wiechula@cern.ch> 
 //   Frederick Kramer <Frederick.Kramer@cern.ch> 
-// 
+//   Julian Book <Julian.Book@cern.ch>
 
 
 
@@ -170,6 +170,7 @@ Int_t AliDielectronHelper::GetNaccTrcklts(const AliVEvent *ev, Double_t etaRange
   
   if (ev->IsA() == AliAODEvent::Class()) {
     AliAODTracklets *tracklets = ((AliAODEvent*)ev)->GetTracklets();
+    if (!tracklets) return -1;
     nTracklets = tracklets->GetNumberOfTracklets();
     for (Int_t nn = 0; nn < nTracklets; nn++) {
       Double_t theta = tracklets->GetTheta(nn);
@@ -236,38 +237,78 @@ Int_t AliDielectronHelper::GetNacc(const AliVEvent *ev){
   // put a robust Nacc definition here
 
   if (!ev) return -1;
-  
-  AliDielectronVarCuts *varCuts = new AliDielectronVarCuts("VarCuts","VarCuts");
-  varCuts->AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
-  varCuts->AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
-  varCuts->AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
-  varCuts->AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
-  varCuts->AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
-  varCuts->AddCut(AliDielectronVarManager::kKinkIndex0,  -0.5,   0.5);   //noKinks
-    
-  AliDielectronTrackCuts *trkCuts = new AliDielectronTrackCuts("TrkCuts","TrkCuts");
-  trkCuts->SetClusterRequirementITS(AliDielectronTrackCuts::kSPD, AliDielectronTrackCuts::kAny);
-  trkCuts->SetRequireITSRefit(kTRUE);
-  trkCuts->SetRequireTPCRefit(kTRUE);
+
+  AliDielectronVarCuts varCuts;
+  varCuts.AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
+  varCuts.AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
+  varCuts.AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
+  varCuts.AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
+  varCuts.AddCut(AliDielectronVarManager::kNclsTPC,     70.0, 160.0);
+  varCuts.AddCut(AliDielectronVarManager::kKinkIndex0,  -0.5,   0.5);   //noKinks
+
+  AliDielectronTrackCuts trkCuts;
+  trkCuts.SetClusterRequirementITS(AliDielectronTrackCuts::kSPD, AliDielectronTrackCuts::kAny);
+  trkCuts.SetRequireITSRefit(kTRUE);
+  trkCuts.SetRequireTPCRefit(kTRUE);
 
   Int_t nRecoTracks = ev->GetNumberOfTracks();
   Int_t nAcc = 0;
-  
+
   for (Int_t iTrack = 0; iTrack < nRecoTracks; iTrack++) {
-    AliVParticle* candidate = ev->GetTrack(iTrack);
-    if (!candidate) continue;
-    AliVTrack *track        = static_cast<AliVTrack*>(candidate);
+    AliVTrack *track        = static_cast<AliVTrack*>(ev->GetTrack(iTrack));
     if (!track) continue;
-    if (varCuts->IsSelected(track) && trkCuts->IsSelected(track)) 
-      nAcc++;
+    if (!trkCuts.IsSelected(track)) continue;
+    if (!varCuts.IsSelected(track)) continue;
+    nAcc++;
   }
-  
-  delete varCuts;
-  delete trkCuts;
 
   return nAcc;
 }
 
+//_____________________________________________________________________________
+Double_t AliDielectronHelper::GetITSTPCMatchEff(const AliVEvent *ev){
+  // recalulate the its-tpc matching efficiecy
+
+  if (!ev) return -1;
+
+  AliDielectronVarCuts varCutsTPC;
+  varCutsTPC.AddCut(AliDielectronVarManager::kImpactParXY, -1.0,   1.0);
+  varCutsTPC.AddCut(AliDielectronVarManager::kImpactParZ,  -3.0,   3.0);
+  varCutsTPC.AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
+  varCutsTPC.AddCut(AliDielectronVarManager::kTPCchi2Cl,    0.0,   4.0);
+  varCutsTPC.AddCut(AliDielectronVarManager::kNclsTPC,     50.0, 160.0);
+  AliDielectronTrackCuts trkCutsTPC;
+  trkCutsTPC.SetRequireTPCRefit(kTRUE);
+
+  AliDielectronVarCuts varCutsITS;
+  varCutsITS.AddCut(AliDielectronVarManager::kEta,         -0.9,   0.9);
+  AliDielectronTrackCuts trkCutsITS;
+  trkCutsITS.SetClusterRequirementITS(AliDielectronTrackCuts::kSPD, AliDielectronTrackCuts::kAny);
+  trkCutsITS.SetRequireITSRefit(kTRUE);
+
+
+  Int_t nRecoTracks = ev->GetNumberOfTracks();
+  Double_t nTPC = 0, nITS = 0;
+
+  for (Int_t iTrack = 0; iTrack < nRecoTracks; iTrack++) {
+    AliVTrack *track        = static_cast<AliVTrack*>(ev->GetTrack(iTrack));
+    if (!track) continue;
+
+    if(!trkCutsITS.IsSelected(track)) continue;
+    if(!varCutsITS.IsSelected(track)) continue;
+    nITS+=1.;
+
+    if(!trkCutsTPC.IsSelected(track)) continue;
+    if(!varCutsTPC.IsSelected(track)) continue;
+    nTPC+=1.;
+
+  }
+
+  //  printf(" tracks TPC %.3e ITS %.3e = %.5f \n",nTPC,nITS,(nITS>0. ? nTPC/nITS : -1));
+  return (nITS>0. ? nTPC/nITS : -1);
+}
+
+
 //_____________________________________________________________________________
 void AliDielectronHelper::RotateKFParticle(AliKFParticle * kfParticle,Double_t angle, const AliVEvent * const ev){
   // Before rotate needs to be moved to position 0,0,0, ; move back after rotation