]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Modified DCA getter (M Tangaro)
authormfloris <michele.floris@cern.ch>
Fri, 6 Jun 2014 13:27:24 +0000 (15:27 +0200)
committermfloris <michele.floris@cern.ch>
Fri, 6 Jun 2014 13:27:24 +0000 (15:27 +0200)
PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraAllChAOD.cxx
PWGLF/SPECTRA/PiKaPr/TestAOD/AliAnalysisTaskSpectraAllChAOD.h

index 62545d2d410efd69add23fb6e8b079d8385073de..3a5ffea8dc35a4fb3c8d52129a487bae502fc87d 100644 (file)
@@ -236,9 +236,6 @@ void AliAnalysisTaskSpectraAllChAOD::UserExec(Option_t *)
   
   //main loop on tracks
   
-  //Get Vertex for DCA
-  AliAODVertex * vertex = fAOD->GetPrimaryVertex();//FIXME vertex is recreated
-  
   Int_t Nch = 0.;
   
   for (Int_t iTracks = 0; iTracks < fAOD->GetNumberOfTracks(); iTracks++) {
@@ -271,18 +268,10 @@ void AliAnalysisTaskSpectraAllChAOD::UserExec(Option_t *)
       }
       
       /*** DCA ***/
-      
-      //AliAODTrack::DCA(): for newest AOD fTrack->DCA() always gives -999. This should fix.
-      //FIXME should update EventCuts?
-      //FIXME add track->GetXYZ(p) method
-      Double_t d[2], cov[2];
       Double_t dcaxy = -999.;
-      AliExternalTrackParam etp; etp.CopyFromVTrack(static_cast<AliAODTrack*>(track));
-      if(etp.PropagateToDCA(vertex, fAOD->GetMagneticField(),999,d,cov)) {
-//         printf("DCAr: %f DCAz: %f  Cov: rr%f rz:%f zz:%f",d[0],d[1],cov[0],cov[1],cov[2]);
-        dcaxy = d[0];
-      }
       
+      Double_t p[2]; 
+      if(GetDCA(track,p)){ dcaxy=p[0]; }
       
     //pt     cent    Q vec     IDrec     IDgen       isph      y
       Double_t varTrk[7];
@@ -332,6 +321,28 @@ void AliAnalysisTaskSpectraAllChAOD::UserExec(Option_t *)
   PostData(4, fHelperPID);
 }
 
+//_________________________________________________________________
+Bool_t  AliAnalysisTaskSpectraAllChAOD::GetDCA(const AliAODTrack* trk, Double_t * p){
+  
+  //AliAODTrack::DCA(): for newest AOD fTrack->DCA() always gives -999. This should fix.
+  //FIXME should update EventCuts?
+  //FIXME add track->GetXYZ(p) method
+  
+  double xyz[3],cov[3];
+  
+  if (!trk->GetXYZ(xyz)) { // dca is not stored
+    AliExternalTrackParam etp;
+    etp.CopyFromVTrack(trk);
+    AliVEvent* ev = (AliVEvent*)trk->GetEvent();
+    if (!ev) {/*printf("Event is not connected to the track\n");*/ return kFALSE;}
+    if (!etp.PropagateToDCA(ev->GetPrimaryVertex(), ev->GetMagneticField(),999,xyz,cov)) return kFALSE; // failed, track is too far from vertex
+  }
+  p[0] = xyz[0];
+  p[1] = xyz[1];
+  return kTRUE;
+
+}
+
 //_________________________________________________________________
 void   AliAnalysisTaskSpectraAllChAOD::Terminate(Option_t *)
 {
index 4b28e1d2e6166adb563cef125c3ca590a2513356..8ec8b7756146723418d0ae849ad6f95464f3377d 100644 (file)
@@ -86,7 +86,8 @@ class AliAnalysisTaskSpectraAllChAOD : public AliAnalysisTaskSE
   void SetnDCABin(Int_t val)                          { fnDCABins = val; } 
   void SetDCAmin(Double_t val)                        { fDCAmin = val; }
   void SetDCAmax(Double_t val)                        { fDCAmax = val; }
-  
+  Bool_t GetDCA(const AliAODTrack* trk, Double_t * p);
+
  private:
   
   AliAODEvent                   * fAOD;                         //! AOD object