]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronHelper.cxx
Update to FindFASTJET.cmake; now accepts also for -DFASTJET= option
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronHelper.cxx
index 7418b8002151059af44ebf8fa4437409472dd077..1dbd61c3eebb29ba776af9bc1452faf124a7e5e4 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>
 
 
 
@@ -129,6 +129,21 @@ TVectorD* AliDielectronHelper::MakeArbitraryBinning(const char* bins)
   return binLimits;
 }
 
+//_____________________________________________________________________________
+void AliDielectronHelper::GetMaxPtAndPhi(const AliVEvent *ev, Double_t &ptMax, Double_t &phiOfptMax){
+  //
+  // find the highest pt and its phi in the event
+  //
+  for(Int_t itrk=0; itrk<ev->GetNumberOfTracks(); itrk++) {
+    AliVParticle *part= ev->GetTrack(itrk);
+    if(part && part->Pt() > ptMax) {
+      ptMax      = part->Pt();
+      phiOfptMax = part->Phi();
+    }
+  }
+
+
+}
 
 //_____________________________________________________________________________
 Int_t AliDielectronHelper::GetNch(const AliMCEvent *ev, Double_t etaRange){
@@ -170,6 +185,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 +252,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
@@ -346,6 +402,7 @@ void AliDielectronHelper::RotateKFParticle(AliKFParticle * kfParticle,Double_t a
 
 //_____________________________________________________________________________
 Int_t AliDielectronHelper::GetNMothers(const AliMCEvent *ev, Double_t etaRange, Int_t pdgMother, Int_t pdgDaughter, Int_t prim){
+  // TODO: add AODs
   // counting number of mother particles generated in given eta range and 2 particle decay
   if (!ev || ev->IsA()!=AliMCEvent::Class()) return -1;