Merging of AliESDV0MI and AliESDv0 classes (Yu.Belikov)
authorhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Sep 2006 08:38:13 +0000 (08:38 +0000)
committerhristov <hristov@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Sep 2006 08:38:13 +0000 (08:38 +0000)
25 files changed:
ANALYSIS/AliAOD.cxx
ANALYSIS/AliAODv0.cxx
ANALYSIS/AliAODv0.h
EVE/Alieve/VSDCreator.cxx
ITS/AliITStrackerMI.cxx
STEER/AliCascadeVertexer.cxx
STEER/AliESD.cxx
STEER/AliESD.h
STEER/AliESDComparisonMI.C
STEER/AliESDComparisonMI.h
STEER/AliESDV0MI.cxx [deleted file]
STEER/AliESDV0MI.h [deleted file]
STEER/AliESDV0Params.cxx [moved from STEER/AliESDV0MIParams.cxx with 90% similarity]
STEER/AliESDV0Params.h [moved from STEER/AliESDV0MIParams.h with 88% similarity]
STEER/AliESDcascade.cxx
STEER/AliESDcascade.h
STEER/AliESDv0.cxx
STEER/AliESDv0.h
STEER/AliV0.cxx
STEER/AliV0.h
STEER/AliV0Comparison.C
STEER/CheckESD.C
STEER/ESDLinkDef.h
STEER/libESD.pkg
TPC/AliTPCtrackerMI.cxx

index c8d0baf..18a6a63 100644 (file)
@@ -1,4 +1,3 @@
-#include "AliAOD.h"
 /**************************************************************************
  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  *                                                                        *
@@ -26,6 +25,8 @@
 #include <TParticle.h>
 #include <TClass.h>
 #include <TString.h>
+
+#include "AliAOD.h"
 #include "AliAODParticle.h"
 #include "AliTrackPoints.h"
 
index 42eae45..6cd6288 100644 (file)
@@ -55,9 +55,6 @@ AliAODv0::AliAODv0(AliESDv0* rV0Vertex ,AliESD* rEvent){
   this->Fill(rV0Vertex,rEvent);
 }
 
-AliAODv0::AliAODv0(AliESDV0MI* rV0Vertex ,AliESD* rEvent){
-  this->Fill(rV0Vertex,rEvent);
-}
 
 AliAODv0::AliAODv0(const AliAODv0& rAliAODv0) : TObject(rAliAODv0) {
   //--------------------------------------------------------------------
@@ -154,49 +151,6 @@ void AliAODv0::Fill(AliESDv0* rV0Vertex ,AliESD* rEvent){
   fDcaNegToPrimVertex = TMath::Sqrt(tDcaNegToPrimVertex[0]*tDcaNegToPrimVertex[0]+tDcaNegToPrimVertex[1]*tDcaNegToPrimVertex[1]);
 }
 
-void AliAODv0::Fill(AliESDV0MI* rV0Vertex ,AliESD* rEvent){
-  // Fills the data members of the AOD
-  Double_t tDecayVertexV0[3]; rV0Vertex->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]); 
-  fDecayVertexV0X = tDecayVertexV0[0];
-  fDecayVertexV0Y = tDecayVertexV0[1];
-  fDecayVertexV0Z = tDecayVertexV0[2];
-
-  fDcaV0Daughters = rV0Vertex->GetDcaV0Daughters();
-
-  fDcaV0ToPrimVertex = rV0Vertex->GetD();
-
-
-  Double_t tMomPos[3]; rV0Vertex->GetPPxPyPz(tMomPos[0],tMomPos[1],tMomPos[2]); 
-  fMomPosX = tMomPos[0];
-  fMomPosY = tMomPos[1];
-  fMomPosZ = tMomPos[2];
-
-  Double_t tMomNeg[3]; rV0Vertex->GetNPxPyPz(tMomNeg[0],tMomNeg[1],tMomNeg[2]); 
-  fMomNegX = tMomNeg[0];
-  fMomNegY = tMomNeg[1];
-  fMomNegZ = tMomNeg[2];
-
-  fKeyPos = (UInt_t)TMath::Abs(rV0Vertex->GetPindex());// need to check why Abs
-  fKeyNeg = (UInt_t)TMath::Abs(rV0Vertex->GetNindex());
-
-  AliESDtrack *pTrack=rEvent->GetTrack(fKeyPos);
-  AliESDtrack *nTrack=rEvent->GetTrack(fKeyNeg);
-
-  Float_t tDcaPosToPrimVertex[2];
-  if(pTrack) pTrack->GetImpactParameters(tDcaPosToPrimVertex[0],tDcaPosToPrimVertex[1]);
-  else { tDcaPosToPrimVertex[0]=999.;  tDcaPosToPrimVertex[1]=999.;}
-
-  fDcaPosToPrimVertex = TMath::Sqrt(tDcaPosToPrimVertex[0]*tDcaPosToPrimVertex[0]+tDcaPosToPrimVertex[1]*tDcaPosToPrimVertex[1]);
-
-  Float_t tDcaNegToPrimVertex[2];
-  if(nTrack) nTrack->GetImpactParameters(tDcaNegToPrimVertex[0],tDcaNegToPrimVertex[1]);
-  else { tDcaNegToPrimVertex[0]=999.;  tDcaNegToPrimVertex[1]=999.;}
-
-  fDcaNegToPrimVertex = TMath::Sqrt(tDcaNegToPrimVertex[0]*tDcaNegToPrimVertex[0]+tDcaNegToPrimVertex[1]*tDcaNegToPrimVertex[1]);
-
-  fChi2  = rV0Vertex->GetChi2V0();
-}
-
 void AliAODv0::ResetV0(){
   // Sets the default values of the AOD data members
   fDecayVertexV0X     = 999;
index 230cd1f..6257c07 100644 (file)
@@ -20,7 +20,6 @@
 class AliESD;
 class AliESDVertex;
 class AliESDv0;
-class AliESDV0MI;
 class AliESDtrack;
 
 
@@ -29,14 +28,12 @@ class AliAODv0 : public TObject {
 public:
   AliAODv0();
   AliAODv0(AliESDv0 *rV0Vertex, AliESD *rEvent);
-  AliAODv0(AliESDV0MI *rV0Vertex, AliESD *rEvent);
   AliAODv0(const AliAODv0& rAliAODv0);
   virtual ~AliAODv0();
 
   AliAODv0& operator=(const AliAODv0& rAliAODv0);
 
   void     Fill(AliESDv0 *rV0Vertex, AliESD *rEvent);
-  void     Fill(AliESDV0MI *rV0Vertex, AliESD *rEvent);
   void     ResetV0();
 
   Double_t DecayVertexV0X() const;
index d253c3b..83941b5 100644 (file)
@@ -12,7 +12,7 @@
 #include <AliSimDigits.h>
 #include <AliKalmanTrack.h>
 #include <AliESD.h>
-#include <AliESDV0MI.h>
+#include <AliESDv0.h>
 #include <AliTPCclusterMI.h>
 #include <AliTPCClustersRow.h>
 #include <AliITS.h>
@@ -691,8 +691,8 @@ void VSDCreator::ConvertV0()
   tree->SetBranchAddress("ESD", &fEvent);
   tree->GetEntry(mEvent); 
 
-  for (Int_t n =0; n< fEvent->GetNumberOfV0MIs(); n++) {
-    AliESDV0MI* av = fEvent->GetV0MI(n);
+  for (Int_t n =0; n< fEvent->GetNumberOfV0s(); n++) {
+    AliESDv0* av = fEvent->GetV0(n);
     Double_t pos[3];
 
     mV0.status = av->GetStatus();
index 795fd87..9486bdd 100644 (file)
@@ -583,7 +583,7 @@ void AliITStrackerMI::FollowProlongationTree(AliITStrackMI * otrack, Int_t esdin
     for (Int_t i=0;i<3;i++){
       Int_t  index = esd->GetV0Index(i);
       if (index==0) break;
-      AliESDV0MI * vertex = fEsd->GetV0MI(index);
+      AliESDv0 * vertex = fEsd->GetV0(index);
       if (vertex->GetStatus()<0) continue;     // rejected V0
       //
       if (esd->GetSign()>0) {
@@ -889,7 +889,7 @@ void AliITStrackerMI::FollowProlongationTree(AliITStrackMI * otrack, Int_t esdin
     for (Int_t i=0;i<3;i++){
       Int_t  index = otrack->fESDtrack->GetV0Index(i); 
       if (index==0) break;
-      AliV0 * vertex = (AliV0*)fEsd->GetV0MI(index);
+      AliV0 * vertex = (AliV0*)fEsd->GetV0(index);
       if (vertex->GetStatus()<0) continue;     // rejected V0
       //
       if (otrack->GetSign()>0) {
@@ -3386,11 +3386,11 @@ void AliITStrackerMI::UpdateTPCV0(AliESD *event){
   //
   //try to update, or reject TPC  V0s
   //
-  Int_t nv0s = event->GetNumberOfV0MIs();
+  Int_t nv0s = event->GetNumberOfV0s();
   Int_t nitstracks = fTrackHypothesys.GetEntriesFast();
 
   for (Int_t i=0;i<nv0s;i++){
-    AliESDV0MI * vertex = event->GetV0MI(i);
+    AliESDv0 * vertex = event->GetV0(i);
     Int_t ip = vertex->GetIndex(0);
     Int_t im = vertex->GetIndex(1);
     //
@@ -4085,7 +4085,8 @@ void  AliITStrackerMI::FindV02(AliESD *event)
          //      event->AddV0(&vertexjuri);
          pvertex->SetStatus(100);
        }
-       event->AddV0MI(pvertex);
+        pvertex->SetOnFlyStatus(kTRUE);
+       event->AddV0(pvertex);
       }
     }
   }
@@ -4114,11 +4115,11 @@ void AliITStrackerMI::RefitV02(AliESD *event)
   //
   TTreeSRedirector &cstream = *fDebugStreamer;
   //
-  Int_t  nv0s = event->GetNumberOfV0MIs();
+  Int_t  nv0s = event->GetNumberOfV0s();
   Float_t primvertex[3]={GetX(),GetY(),GetZ()};
   AliV0 v0temp;
   for (Int_t iv0 = 0; iv0<nv0s;iv0++){
-    AliV0 * v0mi = (AliV0*)event->GetV0MI(iv0);
+    AliV0 * v0mi = (AliV0*)event->GetV0(iv0);
     if (!v0mi) continue;
     Int_t     itrack0   = v0mi->GetIndex(0);
     Int_t     itrack1   = v0mi->GetIndex(1);
index 1ddb012..f27d88a 100644 (file)
@@ -47,6 +47,7 @@ Int_t AliCascadeVertexer::V0sTracks2CascadeVertices(AliESD *event) {
    Int_t i;
    for (i=0; i<nV0; i++) {
        AliESDv0 *v=event->GetV0(i);
+       if (v->GetOnFlyStatus()) continue;
        if (v->GetD(fX,fY,fZ)<fDV0min) continue;
        vtcs.AddLast(v);
    }
index 2466749..b24e193 100644 (file)
@@ -55,7 +55,6 @@ AliESD::AliESD():
   fV0s("AliESDv0",200),  
   fCascades("AliESDcascade",20),
   fKinks("AliESDkink",4000),
-  fV0MIs("AliESDV0MI",4000),
   fCaloClusters("AliESDCaloCluster",10000),
   fEMCALClusters(0), 
   fFirstEMCALCluster(-1),
@@ -97,7 +96,6 @@ AliESD::AliESD(const AliESD& esd):
   fV0s(*((TClonesArray*)esd.fV0s.Clone())),  
   fCascades(*((TClonesArray*)esd.fCascades.Clone())),
   fKinks(*((TClonesArray*)esd.fKinks.Clone())),
-  fV0MIs(*((TClonesArray*)esd.fV0MIs.Clone())),
   fCaloClusters(*((TClonesArray*)esd.fCaloClusters.Clone())),
   fEMCALClusters(esd.fEMCALClusters), 
   fFirstEMCALCluster(esd.fFirstEMCALCluster),
@@ -144,7 +142,6 @@ AliESD & AliESD::operator=(const AliESD& source) {
   fV0s = *((TClonesArray*)source.fV0s.Clone());
   fCascades = *((TClonesArray*)source.fCascades.Clone());
   fKinks = *((TClonesArray*)source.fKinks.Clone());
-  fV0MIs = *((TClonesArray*)source.fV0MIs.Clone());
   fCaloClusters = *((TClonesArray*)source.fCaloClusters.Clone());
   fEMCALClusters = source.fEMCALClusters;
   fFirstEMCALCluster = source.fFirstEMCALCluster;
@@ -177,31 +174,10 @@ AliESD::~AliESD()
   fV0s.Delete();
   fCascades.Delete();
   fKinks.Delete();
-  fV0MIs.Delete();
   fCaloClusters.Delete();
   delete fESDFMD;
 }
 
-void AliESD::UpdateV0PIDs()
-{
-  //
-  //
-  //
-  Int_t nV0 = GetNumberOfV0MIs();
-  for (Int_t i=0;i<nV0;i++){
-    AliESDV0MI * v0 = GetV0MI(i);
-    AliESDtrack* tp = GetTrack(v0->GetIndex(0));
-    AliESDtrack* tm = GetTrack(v0->GetIndex(1));
-    if (!tm || !tp){
-      printf("BBBUUUUUUUGGGG\n");
-    }
-    Double_t pp[5],pm[5];
-    tp->GetESDpid(pp);
-    tm->GetESDpid(pm);
-    v0->UpdatePID(pp,pm);    
-  }
-}
-
 //______________________________________________________________________________
 void AliESD::Reset()
 {
@@ -238,6 +214,16 @@ void AliESD::Reset()
   if (fESDFMD) fESDFMD->Clear();
 }
 
+Int_t AliESD::AddV0(const AliESDv0 *v) {
+  //
+  // Add V0
+  //
+    Int_t idx=fV0s.GetEntriesFast();
+    AliESDv0 *v0=new(fV0s[idx]) AliESDv0(*v);
+    v0->SetID(idx);
+    return idx;
+}  
+
 //______________________________________________________________________________
 void AliESD::Print(Option_t *) const 
 {
@@ -267,7 +253,6 @@ void AliESD::Print(Option_t *) const
   printf("                 v0        %d\n", GetNumberOfV0s());
   printf("                 cascades  %d\n", GetNumberOfCascades());
   printf("                 kinks     %d\n", GetNumberOfKinks());
-  printf("                 V0MIs     %d\n", GetNumberOfV0MIs());
   printf("                 CaloClusters %d\n", GetNumberOfCaloClusters());
   printf("                 phos      %d\n", GetNumberOfPHOSClusters());
   printf("                 emcal     %d\n", GetNumberOfEMCALClusters());
index 1e6c075..7fc2198 100644 (file)
@@ -27,7 +27,6 @@
 #include "AliESDHLTtrack.h"
 #include "AliESDCaloCluster.h"
 #include "AliESDv0.h"
-#include "AliESDV0MI.h"
 #include "AliESDFMD.h"
 #include "AliMultiplicity.h"
 
@@ -92,10 +91,7 @@ public:
   AliESDv0 *GetV0(Int_t i) const {
     return (AliESDv0 *)fV0s.UncheckedAt(i);
   }
-  void AddV0(const AliESDv0 *v) {
-    new(fV0s[fV0s.GetEntriesFast()]) AliESDv0(*v);
-  }
-  void UpdateV0PIDs();
+  Int_t AddV0(const AliESDv0 *v);
 
   AliESDcascade *GetCascade(Int_t i) const {
     return (AliESDcascade *)fCascades.UncheckedAt(i);
@@ -113,15 +109,6 @@ public:
     return fKinks.GetEntriesFast()-1;
   }
 
-  AliESDV0MI *GetV0MI(Int_t i) const {
-    return (AliESDV0MI *)fV0MIs.UncheckedAt(i);
-  }
-  Int_t AddV0MI(const AliESDV0MI *c) {
-    AliESDV0MI * v0 = new(fV0MIs[fV0MIs.GetEntriesFast()]) AliESDV0MI(*c);
-    v0->SetID(fV0MIs.GetEntriesFast()-1);
-    return fV0MIs.GetEntriesFast()-1;
-  }
-
   AliESDCaloCluster *GetCaloCluster(Int_t i) const {
     return (AliESDCaloCluster *)fCaloClusters.UncheckedAt(i);
   }
@@ -160,7 +147,6 @@ public:
   Int_t GetNumberOfV0s()      const {return fV0s.GetEntriesFast();}
   Int_t GetNumberOfCascades() const {return fCascades.GetEntriesFast();}
   Int_t GetNumberOfKinks() const {return fKinks.GetEntriesFast();}
-  Int_t GetNumberOfV0MIs() const {return fV0MIs.GetEntriesFast();}
   Int_t GetNumberOfCaloClusters() const {return fCaloClusters.GetEntriesFast();}
 
   Int_t GetNumberOfEMCALClusters() const {return fEMCALClusters;}
@@ -246,7 +232,6 @@ protected:
   TClonesArray fV0s;             // V0 vertices
   TClonesArray fCascades;        // Cascade vertices
   TClonesArray fKinks;           // Kinks
-  TClonesArray fV0MIs;           // V0MI
   TClonesArray fCaloClusters;    // Calorimeter clusters for PHOS/EMCAL
   Int_t        fEMCALClusters;   // Number of EMCAL clusters (subset of caloclusters)
   Int_t        fFirstEMCALCluster; // First EMCAL cluster in the fCaloClusters list 
@@ -256,7 +241,7 @@ protected:
  
   AliESDFMD *  fESDFMD; // FMD object containing rough multiplicity
 
-  ClassDef(AliESD,13)  //ESD class 
+  ClassDef(AliESD,14)  //ESD class 
 };
 #endif 
 
index 7725be0..c17d21d 100644 (file)
@@ -178,7 +178,7 @@ TProfile prof("prof","prof",10,0.5,5);
 #include "AliESDVertex.h"
 #include "AliExternalTrackParam.h"
 #include "AliESDkink.h"
-#include "AliESDV0MI.h"
+#include "AliESDv0.h"
 
 #endif
 #include "AliGenInfo.h"
@@ -1144,7 +1144,7 @@ Int_t ESDCmpTr::TreeTLoop()
   //  
   Int_t nEntries = (Int_t)fEvent->GetNumberOfTracks();  
   Int_t nKinks = (Int_t) fEvent->GetNumberOfKinks();
-  Int_t nV0MIs = (Int_t) fEvent->GetNumberOfV0MIs();
+  Int_t nV0MIs = (Int_t) fEvent->GetNumberOfV0s();
   fSignedKinks = new Short_t[nKinks];
   fSignedV0    = new Short_t[nV0MIs];
   //
@@ -1156,7 +1156,7 @@ Int_t ESDCmpTr::TreeTLoop()
   }
   //
   for (Int_t i=0; i<nV0MIs;i++){
-    AliESDV0MI * v0MI =fEvent->GetV0MI(i);
+    AliESDv0 * v0MI =fEvent->GetV0(i);
     fSignedV0[i]=0;
     if (v0MI->fStatus<0) continue;
   }
@@ -1204,9 +1204,9 @@ Int_t ESDCmpTr::TreeTLoop()
   }  
   // --sort reconstructed V0
   //
-  AliESDV0MI * v0MI=0;
+  AliESDv0 * v0MI=0;
   for (Int_t iEntry=0; iEntry<nV0MIs;iEntry++){
-    v0MI = fEvent->GetV0MI(iEntry);
+    v0MI = fEvent->GetV0(iEntry);
     if (!v0MI) continue;
     //
     //    Int_t label0 = TMath::Abs(v0MI->fLab[0]);
@@ -1624,7 +1624,7 @@ Int_t ESDCmpTr::BuildV0Info(Int_t eventNr)
  
     Int_t label =  TMath::Min(fGenV0Info->fMCm.fLabel,fGenV0Info->fMCd.fLabel);
     Int_t label2 = TMath::Max(fGenV0Info->fMCm.fLabel,fGenV0Info->fMCd.fLabel);    
-    AliESDV0MI *v0MI=0;
+    AliESDv0 *v0MI=0;
     fRecV0Info->fRecStatus   =0;
     fRecV0Info->fMultiple    = fMultiRecV0[label];
     fRecV0Info->fV0Multiple=0;
@@ -1635,7 +1635,7 @@ Int_t ESDCmpTr::BuildV0Info(Int_t eventNr)
       for (Int_t j=TMath::Min(fMultiRecV0[label],Short_t(20))-1;j>=0;j--){
        Int_t index = fIndexRecV0[label*20+j];
        if (index<0) continue;
-       AliESDV0MI *v0MI2  = fEvent->GetV0MI(index);
+       AliESDv0 *v0MI2  = fEvent->GetV0(index);
        if (TMath::Abs(v0MI2->fLab[0])==label &&TMath::Abs(v0MI2->fLab[1])==label2) {
          v0MI =v0MI2;
          fRecV0Info->fV0Multiple++;
@@ -1658,10 +1658,10 @@ Int_t ESDCmpTr::BuildV0Info(Int_t eventNr)
   //
   // write fake v0s
 
-  Int_t nV0MIs = fEvent->GetNumberOfV0MIs();
+  Int_t nV0MIs = fEvent->GetNumberOfV0s();
   for (Int_t i=0;i<nV0MIs;i++){
     if (fSignedV0[i]==0){
-      AliESDV0MI *v0MI  = fEvent->GetV0MI(i);
+      AliESDv0 *v0MI  = fEvent->GetV0(i);
       if (!v0MI) continue;
       //
       fRecV0Info->fV0rec = *v0MI;
index 83a4441..24ef276 100644 (file)
@@ -88,13 +88,13 @@ public:
   Float_t        fPointAngleTh; //point angle theta
   Float_t        fPointAngle;   //point angle full
   Int_t          fV0Status;       // status of the kink
-  AliESDV0MI     fV0tpc;           // Vo information from reconsturction according TPC
-  AliESDV0MI     fV0its;           // Vo information from reconsturction according ITS
-  AliESDV0MI     fV0rec;           // V0 information form the reconstruction
+  AliESDV0       fV0tpc;           // Vo information from reconsturction according TPC
+  AliESDV0       fV0its;           // Vo information from reconsturction according ITS
+  AliESDV0       fV0rec;           // V0 information form the reconstruction
   Int_t          fMultiple;
   Int_t          fV0Multiple;
   Int_t          fRecStatus;    // status form the reconstuction
-  ClassDef(AliESDRecV0Info,1)   // container for  
+  ClassDef(AliESDRecV0Info,2)   // container for  
 };
 
 ClassImp(AliESDRecV0Info)
diff --git a/STEER/AliESDV0MI.cxx b/STEER/AliESDV0MI.cxx
deleted file mode 100644 (file)
index 6230b9a..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-/**************************************************************************
- * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- *                                                                        *
- * Author: The ALICE Off-line Project.                                    *
- * Contributors are mentioned in the code where appropriate.              *
- *                                                                        *
- * Permission to use, copy, modify and distribute this software and its   *
- * documentation strictly for non-commercial purposes is hereby granted   *
- * without fee, provided that the above copyright notice appears in all   *
- * copies and that both the copyright notice and this permission notice   *
- * appear in the supporting documentation. The authors make no claims     *
- * about the suitability of this software for any purpose. It is          *
- * provided "as is" without express or implied warranty.                  *
- **************************************************************************/
-
-/* $Id$ */
-
-//-------------------------------------------------------------------------
-//
-//    Implementation of the ESD V0MI vertex class
-//            This class is part of the Event Data Summary
-//            set of classes and contains information about
-//            V0 kind vertexes generated by a neutral particle
-//    Numerical part - AliHelix functionality used             
-//    
-//    Likelihoods for Point angle, DCA and Causality defined => can be used as cut parameters
-//    HIGHLY recomended
-//                                 
-//    Quality information can be used as additional cut variables
-//
-//    Origin: Marian Ivanov marian.ivanov@cern.ch
-//-------------------------------------------------------------------------
-
-#include <Riostream.h>
-#include <TMath.h>
-
-#include "AliESDV0MI.h"
-
-ClassImp(AliESDV0MI)
-
-AliESDV0MIParams  AliESDV0MI::fgkParams;
-
-
-AliESDV0MI::AliESDV0MI() :
-  AliESDv0(),
-  fParamP(),
-  fParamM(),
-  fID(0),
-  fDist1(-1),
-  fDist2(-1),
-  fRr(-1),
-  fStatus(0),
-  fRow0(-1),
-  fDistNorm(0),
-  fDistSigma(0),
-  fChi2Before(0),
-  fNBefore(0),
-  fChi2After(0),
-  fNAfter(0),
-  fPointAngleFi(0),
-  fPointAngleTh(0),
-  fPointAngle(0)
-{
-  //
-  //Dafault constructor
-  //
-  for (Int_t i=0;i<5;i++){
-    fRP[i]=fRM[i]=0;
-  }
-  fLab[0]=fLab[1]=-1;
-  fIndex[0]=fIndex[1]=-1;
-  for (Int_t i=0;i<6;i++){fClusters[0][i]=0; fClusters[1][i]=0;}
-  fNormDCAPrim[0]=fNormDCAPrim[1]=0;
-  for (Int_t i=0;i<3;i++){fPP[i]=fPM[i]=fXr[i]=fAngle[i]=0;}
-  for (Int_t i=0;i<3;i++){fOrder[i]=0;}
-  for (Int_t i=0;i<4;i++){fCausality[i]=0;}
-}
-
-Double_t AliESDV0MI::GetSigmaY(){
-  //
-  // return sigmay in y  at vertex position  using covariance matrix 
-  //
-  const Double_t * cp  = fParamP.GetCovariance();
-  const Double_t * cm  = fParamM.GetCovariance();
-  Double_t sigmay = cp[0]+cm[0]+ cp[5]*(fParamP.GetX()-fRr)*(fParamP.GetX()-fRr)+ cm[5]*(fParamM.GetX()-fRr)*(fParamM.GetX()-fRr);
-  return (sigmay>0) ? TMath::Sqrt(sigmay):100;
-}
-
-Double_t AliESDV0MI::GetSigmaZ(){
-  //
-  // return sigmay in y  at vertex position  using covariance matrix 
-  //
-  const Double_t * cp  = fParamP.GetCovariance();
-  const Double_t * cm  = fParamM.GetCovariance();
-  Double_t sigmaz = cp[2]+cm[2]+ cp[9]*(fParamP.GetX()-fRr)*(fParamP.GetX()-fRr)+ cm[9]*(fParamM.GetX()-fRr)*(fParamM.GetX()-fRr);
-  return (sigmaz>0) ? TMath::Sqrt(sigmaz):100;
-}
-
-Double_t AliESDV0MI::GetSigmaD0(){
-  //
-  // Sigma parameterization using covariance matrix
-  //
-  // sigma of distance between two tracks in vertex position 
-  // sigma of DCA is proportianal to sigmaD0
-  // factor 2 difference is explained by the fact that the DCA is calculated at the position 
-  // where the tracks as closest together ( not exact position of the vertex)
-  //
-  const Double_t * cp      = fParamP.GetCovariance();
-  const Double_t * cm      = fParamM.GetCovariance();
-  Double_t sigmaD0   = cp[0]+cm[0]+cp[2]+cm[2]+fgkParams.fPSigmaOffsetD0*fgkParams.fPSigmaOffsetD0;
-  sigmaD0           += ((fParamP.GetX()-fRr)*(fParamP.GetX()-fRr))*(cp[5]+cp[9]);
-  sigmaD0           += ((fParamM.GetX()-fRr)*(fParamM.GetX()-fRr))*(cm[5]+cm[9]);
-  return (sigmaD0>0)? TMath::Sqrt(sigmaD0):100;
-}
-
-
-Double_t AliESDV0MI::GetSigmaAP0(){
-  //
-  //Sigma parameterization using covariance matrices
-  //
-  Double_t prec  = TMath::Sqrt((fPM[0]+fPP[0])*(fPM[0]+fPP[0])
-                              +(fPM[1]+fPP[1])*(fPM[1]+fPP[1])
-                              +(fPM[2]+fPP[2])*(fPM[2]+fPP[2]));
-  Double_t normp = TMath::Sqrt(fPP[0]*fPP[0]+fPP[1]*fPP[1]+fPP[2]*fPP[2])/prec;  // fraction of the momenta
-  Double_t normm = TMath::Sqrt(fPM[0]*fPM[0]+fPM[1]*fPM[1]+fPM[2]*fPM[2])/prec;  
-  const Double_t * cp      = fParamP.GetCovariance();
-  const Double_t * cm      = fParamM.GetCovariance();
-  Double_t sigmaAP0 = fgkParams.fPSigmaOffsetAP0*fgkParams.fPSigmaOffsetAP0;                           // minimal part
-  sigmaAP0 +=  (cp[5]+cp[9])*(normp*normp)+(cm[5]+cm[9])*(normm*normm);          // angular resolution part
-  Double_t sigmaAP1 = GetSigmaD0()/(TMath::Abs(fRr)+0.01);                       // vertex position part
-  sigmaAP0 +=  0.5*sigmaAP1*sigmaAP1;                              
-  return (sigmaAP0>0)? TMath::Sqrt(sigmaAP0):100;
-}
-
-Double_t AliESDV0MI::GetEffectiveSigmaD0(){
-  //
-  // minimax - effective Sigma parameterization 
-  // p12 effective curvature and v0 radius postion used as parameters  
-  //  
-  Double_t p12 = TMath::Sqrt(fParamP.GetParameter()[4]*fParamP.GetParameter()[4]+
-                            fParamM.GetParameter()[4]*fParamM.GetParameter()[4]);
-  Double_t sigmaED0= TMath::Max(TMath::Sqrt(fRr)-fgkParams.fPSigmaRminDE,0.0)*fgkParams.fPSigmaCoefDE*p12*p12;
-  sigmaED0*= sigmaED0;
-  sigmaED0*= sigmaED0;
-  sigmaED0 = TMath::Sqrt(sigmaED0+fgkParams.fPSigmaOffsetDE*fgkParams.fPSigmaOffsetDE);
-  return (sigmaED0<fgkParams.fPSigmaMaxDE) ? sigmaED0: fgkParams.fPSigmaMaxDE;
-}
-
-
-Double_t AliESDV0MI::GetEffectiveSigmaAP0(){
-  //
-  // effective Sigma parameterization of point angle resolution 
-  //
-  Double_t p12 = TMath::Sqrt(fParamP.GetParameter()[4]*fParamP.GetParameter()[4]+
-                            fParamM.GetParameter()[4]*fParamM.GetParameter()[4]);
-  Double_t sigmaAPE= fgkParams.fPSigmaBase0APE;
-  sigmaAPE+= fgkParams.fPSigmaR0APE/(fgkParams.fPSigmaR1APE+fRr);
-  sigmaAPE*= (fgkParams.fPSigmaP0APE+fgkParams.fPSigmaP1APE*p12);
-  sigmaAPE = TMath::Min(sigmaAPE,fgkParams.fPSigmaMaxAPE);
-  return sigmaAPE;
-}
-
-
-Double_t  AliESDV0MI::GetMinimaxSigmaAP0(){
-  //
-  // calculate mini-max effective sigma of point angle resolution
-  //
-  //compv0->fTree->SetAlias("SigmaAP2","max(min((SigmaAP0+SigmaAPE0)*0.5,1.5*SigmaAPE0),0.5*SigmaAPE0+0.003)");
-  Double_t    effectiveSigma = GetEffectiveSigmaAP0();
-  Double_t    sigmaMMAP = 0.5*(GetSigmaAP0()+effectiveSigma);
-  sigmaMMAP  = TMath::Min(sigmaMMAP, fgkParams.fPMaxFractionAP0*effectiveSigma);
-  sigmaMMAP  = TMath::Max(sigmaMMAP, fgkParams.fPMinFractionAP0*effectiveSigma+fgkParams.fPMinAP0);
-  return sigmaMMAP;
-}
-Double_t  AliESDV0MI::GetMinimaxSigmaD0(){
-  //
-  // calculate mini-max sigma of dca resolution
-  // 
-  //compv0->fTree->SetAlias("SigmaD2","max(min((SigmaD0+SigmaDE0)*0.5,1.5*SigmaDE0),0.5*SigmaDE0)");
-  Double_t    effectiveSigma = GetEffectiveSigmaD0();
-  Double_t    sigmaMMD0 = 0.5*(GetSigmaD0()+effectiveSigma);
-  sigmaMMD0  = TMath::Min(sigmaMMD0, fgkParams.fPMaxFractionD0*effectiveSigma);
-  sigmaMMD0  = TMath::Max(sigmaMMD0, fgkParams.fPMinFractionD0*effectiveSigma+fgkParams.fPMinD0);
-  return sigmaMMD0;
-}
-
-
-Double_t AliESDV0MI::GetLikelihoodAP(Int_t mode0, Int_t mode1){
-  //
-  // get likelihood for point angle
-  //
-  Double_t sigmaAP = 0.007;            //default sigma
-  switch (mode0){
-  case 0:
-    sigmaAP = GetSigmaAP0();           // mode 0  - covariance matrix estimates used 
-    break;
-  case 1:
-    sigmaAP = GetEffectiveSigmaAP0();  // mode 1 - effective sigma used
-    break;
-  case 2:
-    sigmaAP = GetMinimaxSigmaAP0();    // mode 2 - minimax sigma
-    break;
-  }
-  Double_t apNorm = TMath::Min(TMath::ACos(fPointAngle)/sigmaAP,50.);  
-  //normalized point angle, restricted - because of overflow problems in Exp
-  Double_t likelihood = 0;
-  switch(mode1){
-  case 0:
-    likelihood = TMath::Exp(-0.5*apNorm*apNorm);   
-    // one component
-    break;
-  case 1:
-    likelihood = (TMath::Exp(-0.5*apNorm*apNorm)+0.5* TMath::Exp(-0.25*apNorm*apNorm))/1.5;
-    // two components
-    break;
-  case 2:
-    likelihood = (TMath::Exp(-0.5*apNorm*apNorm)+0.5* TMath::Exp(-0.25*apNorm*apNorm)+0.25*TMath::Exp(-0.125*apNorm*apNorm))/1.75;
-    // three components
-    break;
-  }
-  return likelihood;
-}
-
-Double_t AliESDV0MI::GetLikelihoodD(Int_t mode0, Int_t mode1){
-  //
-  // get likelihood for DCA
-  //
-  Double_t sigmaD = 0.03;            //default sigma
-  switch (mode0){
-  case 0:
-    sigmaD = GetSigmaD0();           // mode 0  - covariance matrix estimates used 
-    break;
-  case 1:
-    sigmaD = GetEffectiveSigmaD0();  // mode 1 - effective sigma used
-    break;
-  case 2:
-    sigmaD = GetMinimaxSigmaD0();    // mode 2 - minimax sigma
-    break;
-  }
-  Double_t dNorm = TMath::Min(fDist2/sigmaD,50.);  
-  //normalized point angle, restricted - because of overflow problems in Exp
-  Double_t likelihood = 0;
-  switch(mode1){
-  case 0:
-    likelihood = TMath::Exp(-2.*dNorm);   
-    // one component
-    break;
-  case 1:
-    likelihood = (TMath::Exp(-2.*dNorm)+0.5* TMath::Exp(-dNorm))/1.5;
-    // two components
-    break;
-  case 2:
-    likelihood = (TMath::Exp(-2.*dNorm)+0.5* TMath::Exp(-dNorm)+0.25*TMath::Exp(-0.5*dNorm))/1.75;
-    // three components
-    break;
-  }
-  return likelihood;
-
-}
-
-Double_t AliESDV0MI::GetLikelihoodC(Int_t mode0, Int_t /*mode1*/){
-  //
-  // get likelihood for Causality
-  // !!!  Causality variables defined in AliITStrackerMI !!! 
-  //      when more information was available
-  //  
-  Double_t likelihood = 0.5;
-  Double_t minCausal  = TMath::Min(fCausality[0],fCausality[1]);
-  Double_t maxCausal  = TMath::Max(fCausality[0],fCausality[1]);
-  //  minCausal           = TMath::Max(minCausal,0.5*maxCausal);
-  //compv0->fTree->SetAlias("LCausal","(1.05-(2*(0.8-exp(-max(RC.fV0rec.fCausality[0],RC.fV0rec.fCausality[1])))+2*(0.8-exp(-min(RC.fV0rec.fCausality[0],RC.fV0rec.fCausality[1]))))/2)**4");
-  
-  switch(mode0){
-  case 0:
-    //normalization 
-    likelihood = TMath::Power((1.05-2*(0.8-TMath::Exp(-maxCausal))),4.);
-    break;
-  case 1:
-    likelihood = TMath::Power(1.05-(2*(0.8-TMath::Exp(-maxCausal))+(2*(0.8-TMath::Exp(-minCausal))))*0.5,4.);
-    break;
-  }
-  return likelihood;
-  
-}
-
-void AliESDV0MI::SetCausality(Float_t pb0, Float_t pb1, Float_t pa0, Float_t pa1)
-{
-  //
-  // set probabilities
-  //
-  fCausality[0] = pb0;     // probability - track 0 exist before vertex
-  fCausality[1] = pb1;     // probability - track 1 exist before vertex
-  fCausality[2] = pa0;     // probability - track 0 exist close after vertex
-  fCausality[3] = pa1;     // probability - track 1 exist close after vertex
-}
-void  AliESDV0MI::SetClusters(Int_t *clp, Int_t *clm)
-{
-  //
-  // Set its clusters indexes
-  //
-  for (Int_t i=0;i<6;i++) fClusters[0][i] = clp[i]; 
-  for (Int_t i=0;i<6;i++) fClusters[1][i] = clm[i]; 
-}
-
-
-void AliESDV0MI::SetP(const AliExternalTrackParam & paramp)  {
-  //
-  // set track +
-  //
-  fParamP   = paramp;
-}
-
-void AliESDV0MI::SetM(const AliExternalTrackParam & paramm){
-  //
-  //set track -
-  //
-  fParamM = paramm;
-}
-  
-void AliESDV0MI::SetRp(const Double_t *rp){
-  //
-  // set pid +
-  //
-  for (Int_t i=0;i<5;i++) fRP[i]=rp[i];
-}
-
-void AliESDV0MI::SetRm(const Double_t *rm){
-  //
-  // set pid -
-  //
-  for (Int_t i=0;i<5;i++) fRM[i]=rm[i];
-}
-
-
-void  AliESDV0MI::UpdatePID(Double_t pidp[5], Double_t pidm[5])
-{
-  //
-  // set PID hypothesy
-  //
-  // norm PID to 1
-  Float_t sump =0;
-  Float_t summ =0;
-  for (Int_t i=0;i<5;i++){
-    fRP[i]=pidp[i];
-    sump+=fRP[i];
-    fRM[i]=pidm[i];
-    summ+=fRM[i];
-  }
-  for (Int_t i=0;i<5;i++){
-    fRP[i]/=sump;
-    fRM[i]/=summ;
-  }
-}
-
-Float_t AliESDV0MI::GetProb(UInt_t p1, UInt_t p2){
-  //
-  //
-  //
-  //
-  return TMath::Max(fRP[p1]+fRM[p2], fRP[p2]+fRM[p1]);
-}
-
-Float_t AliESDV0MI::GetEffMass(UInt_t p1, UInt_t p2){
-  //
-  // calculate effective mass
-  //
-  const Float_t kpmass[5] = {5.10000000000000037e-04,1.05660000000000004e-01,1.39570000000000000e-01,
-                     4.93599999999999983e-01, 9.38270000000000048e-01};
-  if (p1>4) return -1;
-  if (p2>4) return -1;
-  Float_t mass1 = kpmass[p1]; 
-  Float_t mass2 = kpmass[p2];   
-  Double_t *m1 = fPP;
-  Double_t *m2 = fPM;
-  //
-  //if (fRP[p1]+fRM[p2]<fRP[p2]+fRM[p1]){
-  //  m1 = fPM;
-  //  m2 = fPP;
-  //}
-  //
-  Float_t e1    = TMath::Sqrt(mass1*mass1+
-                              m1[0]*m1[0]+
-                              m1[1]*m1[1]+
-                              m1[2]*m1[2]);
-  Float_t e2    = TMath::Sqrt(mass2*mass2+
-                              m2[0]*m2[0]+
-                              m2[1]*m2[1]+
-                              m2[2]*m2[2]);  
-  Float_t mass =  
-    (m2[0]+m1[0])*(m2[0]+m1[0])+
-    (m2[1]+m1[1])*(m2[1]+m1[1])+
-    (m2[2]+m1[2])*(m2[2]+m1[2]);
-  
-  mass = TMath::Sqrt((e1+e2)*(e1+e2)-mass);
-  return mass;
-}
-
diff --git a/STEER/AliESDV0MI.h b/STEER/AliESDV0MI.h
deleted file mode 100644 (file)
index 74b1fd5..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-#ifndef ALIESDV0MI_H
-#define ALIESDV0MI_H
-
-/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice                               */
-
-/* $Id$ */
-
-//-------------------------------------------------------------------------
-//                          ESD V0 Vertex Class
-//          This class is part of the Event Summary Data set of classes
-//    Origin: Marian Ivanov marian.ivanov@cern.ch
-//-------------------------------------------------------------------------
-
-#include "AliESDv0.h"
-#include "AliESDV0MIParams.h"
-#include "AliExternalTrackParam.h"
-
-class AliESDtrack;
-
-
-class AliESDV0MI :  public AliESDv0 {
-public:
-  //  friend class AliITStrackerMI;
-  AliESDV0MI();             //constructor
-  Double_t GetSigmaY();     // sigma of y coordinate at vertex posistion
-  Double_t GetSigmaZ();     // sigma of z coordinate at vertex posistion
-  Double_t GetSigmaAP0();   // calculate sigma of Point angle resolution at vertex pos.
-  Double_t GetSigmaD0();    // calculate sigma of position resolution at vertex pos.
-  Double_t GetEffectiveSigmaAP0();   // calculate sigma of point angle resolution at vertex pos. effecive parameterization
-  Double_t GetEffectiveSigmaD0();    // calculate sigma of position resolution at vertex pos.
-  Double_t GetMinimaxSigmaAP0();    // calculate mini-max sigma of point angle resolution
-  Double_t GetMinimaxSigmaD0();     // calculate mini-max sigma of dca resolution
-  Double_t GetLikelihoodAP(Int_t mode0, Int_t mode1);   // get likelihood for point angle
-  Double_t GetLikelihoodD(Int_t mode0, Int_t mode1);    // get likelihood for DCA
-  Double_t GetLikelihoodC(Int_t mode0, Int_t mode1);    // get likelihood for Causality
-  //
-  //
-  const AliExternalTrackParam *GetParamP() const {return &fParamP;}
-  const AliExternalTrackParam *GetParamM() const {return &fParamM;}
-  static const AliESDV0MIParams & GetParameterization(){return fgkParams;}
-  void SetP(const AliExternalTrackParam & paramp); 
-  void SetM(const AliExternalTrackParam & paramd);
-  void SetRp(const Double_t *rp);
-  void SetRm(const Double_t *rm);
-  void UpdatePID(Double_t pidp[5], Double_t pidm[5]);
-  void SetStatus(Int_t status){fStatus=status;}
-  Int_t  GetStatus() const {return fStatus;}
-  Float_t GetEffMass(UInt_t p1, UInt_t p2);
-  Float_t GetProb(UInt_t p1, UInt_t p2);
-  void SetID(Int_t id){fID =id;}
-  Int_t GetID() const { return fID;}
-  Int_t GetIndex(Int_t i) const {return fIndex[i];}
-  void SetIndex(Int_t i, Int_t ind) {fIndex[i]=ind;}
-  void SetDist1(Double_t d1) {fDist1=d1;}
-  void SetDist2(Double_t d2) {fDist2=d2;}
-  Double_t GetDist1() const {return fDist1;}
-  Double_t GetDist2() const {return fDist2;}
-  Double_t *GetAnglep() {return fAngle;}
-  Double_t GetRr() const {return fRr;}
-  void SetRr(Double_t rr) {fRr=rr;}
-  Double_t *GetPMp() {return fPM;}
-  Double_t *GetPPp() {return fPP;}
-  Double_t *GetXrp() {return fXr;}
-  Double_t GetXr(Int_t i) const {return fXr[i];}
-  Double_t GetDistSigma() const {return fDistSigma;}
-  void SetDistSigma(Double_t ds) {fDistSigma=ds;}
-  Double_t GetDistNorm() const {return fDistNorm;}
-  void SetDistNorm(Double_t ds) {fDistNorm=ds;}
-  Float_t GetChi2Before() const {return fChi2Before;}
-  void SetChi2Before(Float_t cb) {fChi2Before=cb;}
-  Float_t GetChi2After() const {return fChi2After;}
-  void SetChi2After(Float_t ca) {fChi2After=ca;}
-  Float_t GetPointAngle() const {return fPointAngle;}
-  void SetOrder(Int_t i, Int_t ord) {fOrder[i]=ord;}
-  Float_t GetNAfter() const {return fNAfter;}
-  void SetNAfter(Float_t na) {fNAfter=na;}
-  Float_t GetNBefore() const {return fNBefore;}
-  void SetNBefore(Float_t nb) {fNBefore=nb;}  
-  Int_t GetLab(Int_t i) const {return fLab[i];}
-  void  SetLab(Int_t i, Int_t lab) {fLab[i]=lab;}
-  void SetCausality(Float_t pb0, Float_t pb1, Float_t pa0, Float_t pa1);
-  const Float_t * GetCausalityP() const {return fCausality;}
-  void SetClusters(Int_t *clp, Int_t *clm);
-  const Int_t * GetClusters(Int_t i) const {return fClusters[i];}
-  void SetNormDCAPrim(Float_t nd0, Float_t nd1){fNormDCAPrim[0] = nd0; fNormDCAPrim[1]=nd1;}
-  const Float_t  *GetNormDCAPrimP() const {return fNormDCAPrim;}
-protected:
-  AliExternalTrackParam fParamP;  // external parameters of positive particle
-  AliExternalTrackParam fParamM;  // external parameters of negative particle
-  Float_t        fRP[5];         // combined pid positive
-  Float_t        fRM[5];         // combined pid positive
-  Int_t          fID;            // ID number of the V0 in the ESDV0 container
-  Int_t          fLab[2];         // MC label of the particle
-  Int_t          fIndex[2];       // reconstructed labels of the tracks
-  Int_t          fClusters[2][6]; //! its clusters 
-  //
-  //  
-  Float_t        fNormDCAPrim[2];  // normalize distance to the priary vertex
-  Double_t       fDist1;    //info about closest distance according closest MC - linear DCA
-  Double_t       fDist2;    //info about closest distance parabolic DCA
-  //
-  Double_t       fPP[3];    //momentum  positive   - according approx at DCA
-  Double_t       fPM[3];    //momentum negative
-  //
-  Double_t       fXr[3];      //rec. position according helix
-  Double_t       fAngle[3];   //three angles
-  Double_t       fRr;         //rec position of the vertex 
-  Int_t          fStatus;       //status
-  Int_t          fRow0;         // critical layer
-  Int_t          fOrder[3]; //order of the vertex 
-  //  quality information
-  Double_t       fDistNorm; //normalized  DCA
-  Double_t       fDistSigma; //sigma of distance
-  Float_t        fCausality[4];  // causality information - see comments in SetCausality
-  Float_t        fChi2Before;   //chi2 of the tracks before V0
-  Float_t        fNBefore;      // number of possible points before V0
-  Float_t        fChi2After;   // chi2 of the tracks after V0
-  Float_t        fNAfter;      // number of possible points after V0
-  Float_t        fPointAngleFi; //point angle fi
-  Float_t        fPointAngleTh; //point angle theta
-  Double_t       fPointAngle;   //point angle full
-  //
-  // parameterization coefficients
-  static AliESDV0MIParams fgkParams;  // resolution and likelihood parameterization  
-  ClassDef(AliESDV0MI,4)      // ESD V0 vertex
-};
-
-
-#endif
similarity index 90%
rename from STEER/AliESDV0MIParams.cxx
rename to STEER/AliESDV0Params.cxx
index 237bfd2..aa748a1 100644 (file)
 
 
 //-------------------------------------------------------------------------
-//            Helper -DATA  class ESD V0MI vertex class
+//            Helper -DATA  class ESD V0 vertex class
 //            contains effective errror parameterization 
 //            Effective parameterization of resolution in DCA and PA  as function of radii and momenta
 //            Mini-max coeficient    fPMinFraction... fPMaxFraction...
 //                                   as limits for Error parameterization using Covariance matrix             
-//            For detailes : see  AliESDV0MI class   
+//            For detailes : see  AliESDv0 class   
 //             
 //    Origin: Marian Ivanov marian.ivanov@cern.ch
 //-------------------------------------------------------------------------
 
 
-#include "AliESDV0MIParams.h"
+#include "AliESDV0Params.h"
 
 
-ClassImp(AliESDV0MIParams)
+ClassImp(AliESDV0Params)
 
 
-AliESDV0MIParams::AliESDV0MIParams() :
+AliESDV0Params::AliESDV0Params() :
   TObject(),
   // These constants are used in the error parameterization using covariance matrix
   // minimal sigma in AP and DCA 
@@ -70,7 +70,7 @@ AliESDV0MIParams::AliESDV0MIParams() :
 {
   //
   // Default constructor
-  // Consult AliESDV0MI to see actual error parameterization 
+  // Consult AliESDv0 to see actual error parameterization 
   //
 }
 
similarity index 88%
rename from STEER/AliESDV0MIParams.h
rename to STEER/AliESDV0Params.h
index 29d1c19..cd9f48d 100644 (file)
@@ -1,11 +1,9 @@
-#ifndef ALIESDV0MIPARAMS_H
-#define ALIESDV0MIPARAMS_H
+#ifndef ALIESDV0PARAMS_H
+#define ALIESDV0PARAMS_H
 
 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  * See cxx source for full Copyright notice                               */
 
-/* $Id$ */
-
 //-------------------------------------------------------------------------
 //                          ESD V0 Vertex Class - parameterization 
 //          This class is part of the Event Summary Data set of classes
 
 #include "TObject.h"
 
-class AliESDV0MIParams : public TObject{
-  friend class AliESDV0MI;
+class AliESDV0Params : public TObject{
+  friend class AliESDv0;
  public:
-  AliESDV0MIParams();
+  AliESDV0Params();
  private:
   Double_t  fPSigmaOffsetD0;        // sigma offset DCA
   Double_t  fPSigmaOffsetAP0;       // sigma offset AP
@@ -42,7 +40,7 @@ class AliESDV0MIParams : public TObject{
   Double_t fPMaxFractionD0;         // maximal allowed fraction of effective params - DCA
   Double_t fPMinD0;                 // minimal minimax - DCA sigma
   //
-  ClassDef(AliESDV0MIParams,1)      // ESD V0 vertex - error and likelihood parameterization constant
+  ClassDef(AliESDV0Params,1)      // ESD V0 vertex - error and likelihood parameterization constant
 };
 
 
index 5518b66..1a01046 100644 (file)
@@ -152,27 +152,6 @@ AliESDcascade::AliESDcascade(const AliESDcascade& cas) :
   }
 }
 
-AliESDcascade& AliESDcascade::operator=(const AliESDcascade& cas) {
-  //assignment operator
-  if (this != &cas) {
-    AliESDv0::operator=(cas);
-    fPdgCode = cas.fPdgCode;
-    fEffMass = cas.fEffMass;
-    fChi2Xi  = cas.fChi2Xi;
-    fDcaXiDaughters = cas.fDcaXiDaughters;
-    fBachIdx = cas.fBachIdx;
-    for (int i=0; i<3; i++) {
-      fPosXi[i]   = cas.fPosXi[i];
-      fBachMom[i] = cas.fBachMom[i];
-    }
-    for (int i=0; i<6; i++) {
-      fPosCovXi[i]   = cas.fPosCovXi[i];
-      fBachMomCov[i] = cas.fBachMomCov[i];
-    }
-  }
-  return *this;
-}
-
 Double_t AliESDcascade::ChangeMassHypothesis(Double_t &v0q, Int_t code) {
   //--------------------------------------------------------------------
   // This function changes the mass hypothesis for this cascade
index 53e624e..4b2fada 100644 (file)
@@ -32,8 +32,6 @@ public:
                 const AliExternalTrackParam &t, Int_t i);
   ~AliESDcascade();
 
-  AliESDcascade& operator=(const AliESDcascade&);
-
   Double_t ChangeMassHypothesis(Double_t &v0q, Int_t code=kXiMinus); 
 
   Int_t    GetPdgCode() const {return fPdgCode;}
@@ -64,6 +62,9 @@ protected:
   Double_t fBachMom[3];     // bachelor momentum (global)
   Double_t fBachMomCov[6];  // covariance matrix of the bachelor momentum.
 
+private:
+  AliESDcascade& operator=(const AliESDcascade&);
+
   ClassDef(AliESDcascade,2) // reconstructed cascade vertex
 };
 
index 8c839f3..d344e10 100644 (file)
@@ -21,6 +21,8 @@
 //            set of classes and contains information about
 //            V0 kind vertexes generated by a neutral particle
 //     Origin: Iouri Belikov, IReS, Strasbourg, Jouri.Belikov@cern.ch
+//     Modified by: Marian Ivanov,  CERN, Marian.Ivanov@cern.ch
+//            and  Boris Hippolyte,IPHC, hippolyt@in2p3.fr 
 //-------------------------------------------------------------------------
 
 #include <Riostream.h>
 
 ClassImp(AliESDv0)
 
+AliESDV0Params  AliESDv0::fgkParams;
+
 AliESDv0::AliESDv0() :
   TObject(),
+  fOnFlyStatus(kFALSE),
   fPdgCode(kK0Short),
   fEffMass(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass()),
   fDcaV0Daughters(0),
   fChi2V0(1.e+33),
   fNidx(0),
-  fPidx(0)
+  fPidx(0),
+  fParamP(),
+  fParamN(),
+  fID(0),
+  fDist1(-1),
+  fDist2(-1),
+  fRr(-1),
+  fStatus(0),
+  fRow0(-1),
+  fDistNorm(0),
+  fDistSigma(0),
+  fChi2Before(0),
+  fNBefore(0),
+  fChi2After(0),
+  fNAfter(0),
+  fPointAngleFi(0),
+  fPointAngleTh(0),
+  fPointAngle(0)
 {
   //--------------------------------------------------------------------
   // Default constructor  (K0s)
@@ -59,65 +81,111 @@ AliESDv0::AliESDv0() :
     fNmomCov[i] = 0.;
     fPmomCov[i] = 0.;
   }
+
+  for (Int_t i=0;i<5;i++){
+    fRP[i]=fRM[i]=0;
+  }
+  fLab[0]=fLab[1]=-1;
+  fIndex[0]=fIndex[1]=-1;
+  for (Int_t i=0;i<6;i++){fClusters[0][i]=0; fClusters[1][i]=0;}
+  fNormDCAPrim[0]=fNormDCAPrim[1]=0;
+  for (Int_t i=0;i<3;i++){fPP[i]=fPM[i]=fXr[i]=fAngle[i]=0;}
+  for (Int_t i=0;i<3;i++){fOrder[i]=0;}
+  for (Int_t i=0;i<4;i++){fCausality[i]=0;}
 }
 
-AliESDv0::AliESDv0(const AliESDv0& rAliESDv0) :
-  TObject(rAliESDv0),
-  fPdgCode(rAliESDv0.fPdgCode),
-  fEffMass(rAliESDv0.fEffMass),
-  fDcaV0Daughters(rAliESDv0.fDcaV0Daughters),
-  fChi2V0(rAliESDv0.fChi2V0),
-  fNidx(rAliESDv0.fNidx),
-  fPidx(rAliESDv0.fPidx)
+AliESDv0::AliESDv0(const AliESDv0& v0) :
+  TObject(v0),
+  fOnFlyStatus(v0.fOnFlyStatus),
+  fPdgCode(v0.fPdgCode),
+  fEffMass(v0.fEffMass),
+  fDcaV0Daughters(v0.fDcaV0Daughters),
+  fChi2V0(v0.fChi2V0),
+  fNidx(v0.fNidx),
+  fPidx(v0.fPidx),
+  fParamP(v0.fParamP),
+  fParamN(v0.fParamN),
+  fID(v0.fID),
+  fDist1(v0.fDist1),
+  fDist2(v0.fDist2),
+  fRr(v0.fRr),
+  fStatus(v0.fStatus),
+  fRow0(v0.fRow0),
+  fDistNorm(v0.fDistNorm),
+  fDistSigma(v0.fDistSigma),
+  fChi2Before(v0.fChi2Before),
+  fNBefore(v0.fNBefore),
+  fChi2After(v0.fChi2After),
+  fNAfter(v0.fNAfter),
+  fPointAngleFi(v0.fPointAngleFi),
+  fPointAngleTh(v0.fPointAngleTh),
+  fPointAngle(v0.fPointAngle)
 {
+  //--------------------------------------------------------------------
+  // The copy constructor
+  //--------------------------------------------------------------------
 
   for (int i=0; i<3; i++) {
-    fPos[i]  = rAliESDv0.fPos[i];
-    fNmom[i] = rAliESDv0.fNmom[i];
-    fPmom[i] = rAliESDv0.fPmom[i];
+    fPos[i]  = v0.fPos[i];
+    fNmom[i] = v0.fNmom[i];
+    fPmom[i] = v0.fPmom[i];
   }
   for (int i=0; i<6; i++) {
-    fPosCov[i]  = rAliESDv0.fPosCov[i];
-    fNmomCov[i] = rAliESDv0.fNmomCov[i];
-    fPmomCov[i] = rAliESDv0.fPmomCov[i];
+    fPosCov[i]  = v0.fPosCov[i];
+    fNmomCov[i] = v0.fNmomCov[i];
+    fPmomCov[i] = v0.fPmomCov[i];
   }
-}
 
-
-AliESDv0& AliESDv0::operator=(const AliESDv0& rAliESDv0)
-{
-  if (this!=&rAliESDv0) {
-    TObject::operator=(rAliESDv0);
-    fPdgCode        = rAliESDv0.fPdgCode;
-    fEffMass        = rAliESDv0.fEffMass;
-    fDcaV0Daughters = rAliESDv0.fDcaV0Daughters;
-    fChi2V0         = rAliESDv0.fChi2V0;
-    fNidx           = rAliESDv0.fNidx;
-    fPidx           = rAliESDv0.fPidx;
-
-    for (int i=0; i<3; i++) {
-      fPos[i]  = rAliESDv0.fPos[i];
-      fNmom[i] = rAliESDv0.fNmom[i];
-      fPmom[i] = rAliESDv0.fPmom[i];
-    }
-    for (int i=0; i<6; i++) {
-      fPosCov[i]  = rAliESDv0.fPosCov[i];
-      fNmomCov[i] = rAliESDv0.fNmomCov[i];
-      fPmomCov[i] = rAliESDv0.fPmomCov[i];
-    }
+  for (Int_t i=0;i<5;i++){
+    fRP[i]=v0.fRP[i];
+    fRM[i]=v0.fRM[i];
+  }
+  for (Int_t i=0; i<2; i++) {
+     fLab[i]=v0.fLab[i];
+     fIndex[i]=v0.fIndex[i];
+     fNormDCAPrim[i]=v0.fNormDCAPrim[i];
+  }
+  for (Int_t i=0;i<6;i++){
+      fClusters[0][i]=v0.fClusters[0][i]; 
+      fClusters[1][i]=v0.fClusters[1][i];
+  }
+  for (Int_t i=0;i<3;i++){
+      fPP[i]=v0.fPP[i];
+      fPM[i]=v0.fPM[i];
+      fXr[i]=v0.fXr[i];
+      fAngle[i]=v0.fAngle[i];
+      fOrder[i]=v0.fOrder[i];
   }
-  return *this;
+  for (Int_t i=0;i<4;i++){fCausality[i]=v0.fCausality[i];}
 }
 
 AliESDv0::AliESDv0(const AliExternalTrackParam &t1, Int_t i1,
                    const AliExternalTrackParam &t2, Int_t i2) :
   TObject(),
+  fOnFlyStatus(kFALSE),
   fPdgCode(kK0Short),
   fEffMass(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass()),
   fDcaV0Daughters(0),
   fChi2V0(1.e+33),
   fNidx(i1),
-  fPidx(i2)
+  fPidx(i2),
+  fParamP(),
+  fParamN(),
+  fID(0),
+  fDist1(-1),
+  fDist2(-1),
+  fRr(-1),
+  fStatus(0),
+  fRow0(-1),
+  fDistNorm(0),
+  fDistSigma(0),
+  fChi2Before(0),
+  fNBefore(0),
+  fChi2After(0),
+  fNAfter(0),
+  fPointAngleFi(0),
+  fPointAngleTh(0),
+  fPointAngle(0)
 {
   //--------------------------------------------------------------------
   // Main constructor  (K0s)
@@ -285,3 +353,326 @@ Double_t AliESDv0::GetV0CosineOfPointingAngle(Double_t& refPointX, Double_t& ref
   
   return cosinePointingAngle;
 }
+
+
+// **** The following functions need to be revised
+
+Double_t AliESDv0::GetSigmaY(){
+  //
+  // return sigmay in y  at vertex position  using covariance matrix 
+  //
+  const Double_t * cp  = fParamP.GetCovariance();
+  const Double_t * cm  = fParamN.GetCovariance();
+  Double_t sigmay = cp[0]+cm[0]+ cp[5]*(fParamP.GetX()-fRr)*(fParamP.GetX()-fRr)+ cm[5]*(fParamN.GetX()-fRr)*(fParamN.GetX()-fRr);
+  return (sigmay>0) ? TMath::Sqrt(sigmay):100;
+}
+
+Double_t AliESDv0::GetSigmaZ(){
+  //
+  // return sigmay in y  at vertex position  using covariance matrix 
+  //
+  const Double_t * cp  = fParamP.GetCovariance();
+  const Double_t * cm  = fParamN.GetCovariance();
+  Double_t sigmaz = cp[2]+cm[2]+ cp[9]*(fParamP.GetX()-fRr)*(fParamP.GetX()-fRr)+ cm[9]*(fParamN.GetX()-fRr)*(fParamN.GetX()-fRr);
+  return (sigmaz>0) ? TMath::Sqrt(sigmaz):100;
+}
+
+Double_t AliESDv0::GetSigmaD0(){
+  //
+  // Sigma parameterization using covariance matrix
+  //
+  // sigma of distance between two tracks in vertex position 
+  // sigma of DCA is proportianal to sigmaD0
+  // factor 2 difference is explained by the fact that the DCA is calculated at the position 
+  // where the tracks as closest together ( not exact position of the vertex)
+  //
+  const Double_t * cp      = fParamP.GetCovariance();
+  const Double_t * cm      = fParamN.GetCovariance();
+  Double_t sigmaD0   = cp[0]+cm[0]+cp[2]+cm[2]+fgkParams.fPSigmaOffsetD0*fgkParams.fPSigmaOffsetD0;
+  sigmaD0           += ((fParamP.GetX()-fRr)*(fParamP.GetX()-fRr))*(cp[5]+cp[9]);
+  sigmaD0           += ((fParamN.GetX()-fRr)*(fParamN.GetX()-fRr))*(cm[5]+cm[9]);
+  return (sigmaD0>0)? TMath::Sqrt(sigmaD0):100;
+}
+
+
+Double_t AliESDv0::GetSigmaAP0(){
+  //
+  //Sigma parameterization using covariance matrices
+  //
+  Double_t prec  = TMath::Sqrt((fPM[0]+fPP[0])*(fPM[0]+fPP[0])
+                              +(fPM[1]+fPP[1])*(fPM[1]+fPP[1])
+                              +(fPM[2]+fPP[2])*(fPM[2]+fPP[2]));
+  Double_t normp = TMath::Sqrt(fPP[0]*fPP[0]+fPP[1]*fPP[1]+fPP[2]*fPP[2])/prec;  // fraction of the momenta
+  Double_t normm = TMath::Sqrt(fPM[0]*fPM[0]+fPM[1]*fPM[1]+fPM[2]*fPM[2])/prec;  
+  const Double_t * cp      = fParamP.GetCovariance();
+  const Double_t * cm      = fParamN.GetCovariance();
+  Double_t sigmaAP0 = fgkParams.fPSigmaOffsetAP0*fgkParams.fPSigmaOffsetAP0;                           // minimal part
+  sigmaAP0 +=  (cp[5]+cp[9])*(normp*normp)+(cm[5]+cm[9])*(normm*normm);          // angular resolution part
+  Double_t sigmaAP1 = GetSigmaD0()/(TMath::Abs(fRr)+0.01);                       // vertex position part
+  sigmaAP0 +=  0.5*sigmaAP1*sigmaAP1;                              
+  return (sigmaAP0>0)? TMath::Sqrt(sigmaAP0):100;
+}
+
+Double_t AliESDv0::GetEffectiveSigmaD0(){
+  //
+  // minimax - effective Sigma parameterization 
+  // p12 effective curvature and v0 radius postion used as parameters  
+  //  
+  Double_t p12 = TMath::Sqrt(fParamP.GetParameter()[4]*fParamP.GetParameter()[4]+
+                            fParamN.GetParameter()[4]*fParamN.GetParameter()[4]);
+  Double_t sigmaED0= TMath::Max(TMath::Sqrt(fRr)-fgkParams.fPSigmaRminDE,0.0)*fgkParams.fPSigmaCoefDE*p12*p12;
+  sigmaED0*= sigmaED0;
+  sigmaED0*= sigmaED0;
+  sigmaED0 = TMath::Sqrt(sigmaED0+fgkParams.fPSigmaOffsetDE*fgkParams.fPSigmaOffsetDE);
+  return (sigmaED0<fgkParams.fPSigmaMaxDE) ? sigmaED0: fgkParams.fPSigmaMaxDE;
+}
+
+
+Double_t AliESDv0::GetEffectiveSigmaAP0(){
+  //
+  // effective Sigma parameterization of point angle resolution 
+  //
+  Double_t p12 = TMath::Sqrt(fParamP.GetParameter()[4]*fParamP.GetParameter()[4]+
+                            fParamN.GetParameter()[4]*fParamN.GetParameter()[4]);
+  Double_t sigmaAPE= fgkParams.fPSigmaBase0APE;
+  sigmaAPE+= fgkParams.fPSigmaR0APE/(fgkParams.fPSigmaR1APE+fRr);
+  sigmaAPE*= (fgkParams.fPSigmaP0APE+fgkParams.fPSigmaP1APE*p12);
+  sigmaAPE = TMath::Min(sigmaAPE,fgkParams.fPSigmaMaxAPE);
+  return sigmaAPE;
+}
+
+
+Double_t  AliESDv0::GetMinimaxSigmaAP0(){
+  //
+  // calculate mini-max effective sigma of point angle resolution
+  //
+  //compv0->fTree->SetAlias("SigmaAP2","max(min((SigmaAP0+SigmaAPE0)*0.5,1.5*SigmaAPE0),0.5*SigmaAPE0+0.003)");
+  Double_t    effectiveSigma = GetEffectiveSigmaAP0();
+  Double_t    sigmaMMAP = 0.5*(GetSigmaAP0()+effectiveSigma);
+  sigmaMMAP  = TMath::Min(sigmaMMAP, fgkParams.fPMaxFractionAP0*effectiveSigma);
+  sigmaMMAP  = TMath::Max(sigmaMMAP, fgkParams.fPMinFractionAP0*effectiveSigma+fgkParams.fPMinAP0);
+  return sigmaMMAP;
+}
+Double_t  AliESDv0::GetMinimaxSigmaD0(){
+  //
+  // calculate mini-max sigma of dca resolution
+  // 
+  //compv0->fTree->SetAlias("SigmaD2","max(min((SigmaD0+SigmaDE0)*0.5,1.5*SigmaDE0),0.5*SigmaDE0)");
+  Double_t    effectiveSigma = GetEffectiveSigmaD0();
+  Double_t    sigmaMMD0 = 0.5*(GetSigmaD0()+effectiveSigma);
+  sigmaMMD0  = TMath::Min(sigmaMMD0, fgkParams.fPMaxFractionD0*effectiveSigma);
+  sigmaMMD0  = TMath::Max(sigmaMMD0, fgkParams.fPMinFractionD0*effectiveSigma+fgkParams.fPMinD0);
+  return sigmaMMD0;
+}
+
+
+Double_t AliESDv0::GetLikelihoodAP(Int_t mode0, Int_t mode1){
+  //
+  // get likelihood for point angle
+  //
+  Double_t sigmaAP = 0.007;            //default sigma
+  switch (mode0){
+  case 0:
+    sigmaAP = GetSigmaAP0();           // mode 0  - covariance matrix estimates used 
+    break;
+  case 1:
+    sigmaAP = GetEffectiveSigmaAP0();  // mode 1 - effective sigma used
+    break;
+  case 2:
+    sigmaAP = GetMinimaxSigmaAP0();    // mode 2 - minimax sigma
+    break;
+  }
+  Double_t apNorm = TMath::Min(TMath::ACos(fPointAngle)/sigmaAP,50.);  
+  //normalized point angle, restricted - because of overflow problems in Exp
+  Double_t likelihood = 0;
+  switch(mode1){
+  case 0:
+    likelihood = TMath::Exp(-0.5*apNorm*apNorm);   
+    // one component
+    break;
+  case 1:
+    likelihood = (TMath::Exp(-0.5*apNorm*apNorm)+0.5* TMath::Exp(-0.25*apNorm*apNorm))/1.5;
+    // two components
+    break;
+  case 2:
+    likelihood = (TMath::Exp(-0.5*apNorm*apNorm)+0.5* TMath::Exp(-0.25*apNorm*apNorm)+0.25*TMath::Exp(-0.125*apNorm*apNorm))/1.75;
+    // three components
+    break;
+  }
+  return likelihood;
+}
+
+Double_t AliESDv0::GetLikelihoodD(Int_t mode0, Int_t mode1){
+  //
+  // get likelihood for DCA
+  //
+  Double_t sigmaD = 0.03;            //default sigma
+  switch (mode0){
+  case 0:
+    sigmaD = GetSigmaD0();           // mode 0  - covariance matrix estimates used 
+    break;
+  case 1:
+    sigmaD = GetEffectiveSigmaD0();  // mode 1 - effective sigma used
+    break;
+  case 2:
+    sigmaD = GetMinimaxSigmaD0();    // mode 2 - minimax sigma
+    break;
+  }
+  Double_t dNorm = TMath::Min(fDist2/sigmaD,50.);  
+  //normalized point angle, restricted - because of overflow problems in Exp
+  Double_t likelihood = 0;
+  switch(mode1){
+  case 0:
+    likelihood = TMath::Exp(-2.*dNorm);   
+    // one component
+    break;
+  case 1:
+    likelihood = (TMath::Exp(-2.*dNorm)+0.5* TMath::Exp(-dNorm))/1.5;
+    // two components
+    break;
+  case 2:
+    likelihood = (TMath::Exp(-2.*dNorm)+0.5* TMath::Exp(-dNorm)+0.25*TMath::Exp(-0.5*dNorm))/1.75;
+    // three components
+    break;
+  }
+  return likelihood;
+
+}
+
+Double_t AliESDv0::GetLikelihoodC(Int_t mode0, Int_t /*mode1*/){
+  //
+  // get likelihood for Causality
+  // !!!  Causality variables defined in AliITStrackerMI !!! 
+  //      when more information was available
+  //  
+  Double_t likelihood = 0.5;
+  Double_t minCausal  = TMath::Min(fCausality[0],fCausality[1]);
+  Double_t maxCausal  = TMath::Max(fCausality[0],fCausality[1]);
+  //  minCausal           = TMath::Max(minCausal,0.5*maxCausal);
+  //compv0->fTree->SetAlias("LCausal","(1.05-(2*(0.8-exp(-max(RC.fV0rec.fCausality[0],RC.fV0rec.fCausality[1])))+2*(0.8-exp(-min(RC.fV0rec.fCausality[0],RC.fV0rec.fCausality[1]))))/2)**4");
+  
+  switch(mode0){
+  case 0:
+    //normalization 
+    likelihood = TMath::Power((1.05-2*(0.8-TMath::Exp(-maxCausal))),4.);
+    break;
+  case 1:
+    likelihood = TMath::Power(1.05-(2*(0.8-TMath::Exp(-maxCausal))+(2*(0.8-TMath::Exp(-minCausal))))*0.5,4.);
+    break;
+  }
+  return likelihood;
+  
+}
+
+void AliESDv0::SetCausality(Float_t pb0, Float_t pb1, Float_t pa0, Float_t pa1)
+{
+  //
+  // set probabilities
+  //
+  fCausality[0] = pb0;     // probability - track 0 exist before vertex
+  fCausality[1] = pb1;     // probability - track 1 exist before vertex
+  fCausality[2] = pa0;     // probability - track 0 exist close after vertex
+  fCausality[3] = pa1;     // probability - track 1 exist close after vertex
+}
+void  AliESDv0::SetClusters(Int_t *clp, Int_t *clm)
+{
+  //
+  // Set its clusters indexes
+  //
+  for (Int_t i=0;i<6;i++) fClusters[0][i] = clp[i]; 
+  for (Int_t i=0;i<6;i++) fClusters[1][i] = clm[i]; 
+}
+
+
+void AliESDv0::SetP(const AliExternalTrackParam & paramp)  {
+  //
+  // set track +
+  //
+  fParamP   = paramp;
+}
+
+void AliESDv0::SetM(const AliExternalTrackParam & paramm){
+  //
+  //set track -
+  //
+  fParamN = paramm;
+}
+  
+void AliESDv0::SetRp(const Double_t *rp){
+  //
+  // set pid +
+  //
+  for (Int_t i=0;i<5;i++) fRP[i]=rp[i];
+}
+
+void AliESDv0::SetRm(const Double_t *rm){
+  //
+  // set pid -
+  //
+  for (Int_t i=0;i<5;i++) fRM[i]=rm[i];
+}
+
+
+void  AliESDv0::UpdatePID(Double_t pidp[5], Double_t pidm[5])
+{
+  //
+  // set PID hypothesy
+  //
+  // norm PID to 1
+  Float_t sump =0;
+  Float_t summ =0;
+  for (Int_t i=0;i<5;i++){
+    fRP[i]=pidp[i];
+    sump+=fRP[i];
+    fRM[i]=pidm[i];
+    summ+=fRM[i];
+  }
+  for (Int_t i=0;i<5;i++){
+    fRP[i]/=sump;
+    fRM[i]/=summ;
+  }
+}
+
+Float_t AliESDv0::GetProb(UInt_t p1, UInt_t p2){
+  //
+  //
+  //
+  //
+  return TMath::Max(fRP[p1]+fRM[p2], fRP[p2]+fRM[p1]);
+}
+
+Float_t AliESDv0::GetEffMass(UInt_t p1, UInt_t p2){
+  //
+  // calculate effective mass
+  //
+  const Float_t kpmass[5] = {5.10000000000000037e-04,1.05660000000000004e-01,1.39570000000000000e-01,
+                     4.93599999999999983e-01, 9.38270000000000048e-01};
+  if (p1>4) return -1;
+  if (p2>4) return -1;
+  Float_t mass1 = kpmass[p1]; 
+  Float_t mass2 = kpmass[p2];   
+  Double_t *m1 = fPP;
+  Double_t *m2 = fPM;
+  //
+  //if (fRP[p1]+fRM[p2]<fRP[p2]+fRM[p1]){
+  //  m1 = fPM;
+  //  m2 = fPP;
+  //}
+  //
+  Float_t e1    = TMath::Sqrt(mass1*mass1+
+                              m1[0]*m1[0]+
+                              m1[1]*m1[1]+
+                              m1[2]*m1[2]);
+  Float_t e2    = TMath::Sqrt(mass2*mass2+
+                              m2[0]*m2[0]+
+                              m2[1]*m2[1]+
+                              m2[2]*m2[2]);  
+  Float_t mass =  
+    (m2[0]+m1[0])*(m2[0]+m1[0])+
+    (m2[1]+m1[1])*(m2[1]+m1[1])+
+    (m2[2]+m1[2])*(m2[2]+m1[2]);
+  
+  mass = TMath::Sqrt((e1+e2)*(e1+e2)-mass);
+  return mass;
+}
+
index 6a5f41e..4ea6ae5 100644 (file)
@@ -9,13 +9,15 @@
 //-------------------------------------------------------------------------
 //                          ESD V0 Vertex Class
 //          This class is part of the Event Summary Data set of classes
-//    Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch 
+//    Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch
+//    Modified by: Marian Ivanov,  CERN, Marian.Ivanov@cern.ch
+//            and  Boris Hippolyte,IPHC, hippolyt@in2p3.fr 
 //-------------------------------------------------------------------------
 
 #include <TObject.h>
 #include <TPDGCode.h>
-
-class AliExternalTrackParam;
+#include "AliESDV0Params.h"
+#include "AliExternalTrackParam.h"
 
 class AliESDv0 : public TObject {
 public:
@@ -25,7 +27,6 @@ public:
 
   AliESDv0(const AliESDv0&);
   virtual ~AliESDv0();
-  AliESDv0& operator=(const AliESDv0&);
 
   Double_t ChangeMassHypothesis(Int_t code=kK0Short); 
 
@@ -43,8 +44,78 @@ public:
   void     SetDcaV0Daughters(Double_t rDcaV0Daughters=0.);
   Double_t GetDcaV0Daughters() {return fDcaV0Daughters;}
   Double_t GetV0CosineOfPointingAngle(Double_t&, Double_t&, Double_t&) const;
+  void SetOnFlyStatus(Bool_t status){fOnFlyStatus=status;}
+  Bool_t GetOnFlyStatus() const {return fOnFlyStatus;}
+
+  // **** The following member functions need to be revised ***
+
+  Double_t GetSigmaY();     // sigma of y coordinate at vertex posistion
+  Double_t GetSigmaZ();     // sigma of z coordinate at vertex posistion
+  Double_t GetSigmaAP0();   // calculate sigma of Point angle resolution at vertex pos.
+  Double_t GetSigmaD0();    // calculate sigma of position resolution at vertex pos.
+  Double_t GetEffectiveSigmaAP0();   // calculate sigma of point angle resolution at vertex pos. effecive parameterization
+  Double_t GetEffectiveSigmaD0();    // calculate sigma of position resolution at vertex pos.
+  Double_t GetMinimaxSigmaAP0();    // calculate mini-max sigma of point angle resolution
+  Double_t GetMinimaxSigmaD0();     // calculate mini-max sigma of dca resolution
+  Double_t GetLikelihoodAP(Int_t mode0, Int_t mode1);   // get likelihood for point angle
+  Double_t GetLikelihoodD(Int_t mode0, Int_t mode1);    // get likelihood for DCA
+  Double_t GetLikelihoodC(Int_t mode0, Int_t mode1);    // get likelihood for Causality
+  //
+  //
+  const AliExternalTrackParam *GetParamP() const {return &fParamP;}
+  const AliExternalTrackParam *GetParamM() const {return &fParamN;}
+  static const AliESDV0Params & GetParameterization(){return fgkParams;}
+  void SetP(const AliExternalTrackParam & paramp); 
+  void SetM(const AliExternalTrackParam & paramd);
+  void SetRp(const Double_t *rp);
+  void SetRm(const Double_t *rm);
+  void UpdatePID(Double_t pidp[5], Double_t pidm[5]);
+  void SetStatus(Int_t status){fStatus=status;}
+  Int_t GetStatus() const {return fStatus;}
+  Float_t GetEffMass(UInt_t p1, UInt_t p2);
+  Float_t GetProb(UInt_t p1, UInt_t p2);
+  void SetID(Int_t id){fID =id;}
+  Int_t GetID() const { return fID;}
+  Int_t GetIndex(Int_t i) const {return fIndex[i];}
+  void SetIndex(Int_t i, Int_t ind) {fIndex[i]=ind;}
+  void SetDist1(Double_t d1) {fDist1=d1;}
+  void SetDist2(Double_t d2) {fDist2=d2;}
+  Double_t GetDist1() const {return fDist1;}
+  Double_t GetDist2() const {return fDist2;}
+  Double_t *GetAnglep() {return fAngle;}
+  Double_t GetRr() const {return fRr;}
+  void SetRr(Double_t rr) {fRr=rr;}
+  Double_t *GetPMp() {return fPM;}
+  Double_t *GetPPp() {return fPP;}
+  Double_t *GetXrp() {return fXr;}
+  Double_t GetXr(Int_t i) const {return fXr[i];}
+  Double_t GetDistSigma() const {return fDistSigma;}
+  void SetDistSigma(Double_t ds) {fDistSigma=ds;}
+  Double_t GetDistNorm() const {return fDistNorm;}
+  void SetDistNorm(Double_t ds) {fDistNorm=ds;}
+  Float_t GetChi2Before() const {return fChi2Before;}
+  void SetChi2Before(Float_t cb) {fChi2Before=cb;}
+  Float_t GetChi2After() const {return fChi2After;}
+  void SetChi2After(Float_t ca) {fChi2After=ca;}
+  Float_t GetPointAngle() const {return fPointAngle;}
+  void SetOrder(Int_t i, Int_t ord) {fOrder[i]=ord;}
+  Float_t GetNAfter() const {return fNAfter;}
+  void SetNAfter(Float_t na) {fNAfter=na;}
+  Float_t GetNBefore() const {return fNBefore;}
+  void SetNBefore(Float_t nb) {fNBefore=nb;}  
+  Int_t GetLab(Int_t i) const {return fLab[i];}
+  void  SetLab(Int_t i, Int_t lab) {fLab[i]=lab;}
+  void SetCausality(Float_t pb0, Float_t pb1, Float_t pa0, Float_t pa1);
+  const Float_t * GetCausalityP() const {return fCausality;}
+  void SetClusters(Int_t *clp, Int_t *clm);
+  const Int_t * GetClusters(Int_t i) const {return fClusters[i];}
+  void SetNormDCAPrim(Float_t nd0, Float_t nd1){fNormDCAPrim[0] = nd0; fNormDCAPrim[1]=nd1;}
+  const Float_t  *GetNormDCAPrimP() const {return fNormDCAPrim;}
+
+protected:
+  Bool_t   fOnFlyStatus;    // if kTRUE, then this V0 is recontructed
+                            // "on fly" during the tracking
 
-protected: 
   Int_t    fPdgCode;        // reconstructed V0's type (PDG code)
   Double_t fEffMass;        // reconstructed V0's effective mass
   Double_t fDcaV0Daughters; // dca between V0's daughters
@@ -60,7 +131,50 @@ protected:
   Double_t fPmom[3];        // momentum of the positive daughter (global)
   Double_t fPmomCov[6];     // covariance matrix of the positive daughter mom.
 
-  ClassDef(AliESDv0,1)      // ESD V0 vertex
+  // **** The following data members need to be revised ***
+
+  AliExternalTrackParam fParamP;  // external parameters of positive particle
+  AliExternalTrackParam fParamN;  // external parameters of negative particle
+  Float_t        fRP[5];         // combined pid positive
+  Float_t        fRM[5];         // combined pid positive
+  Int_t          fID;            // ID number of the V0 in the ESDV0 container
+  Int_t          fLab[2];         // MC label of the particle
+  Int_t          fIndex[2];       // reconstructed labels of the tracks
+  Int_t          fClusters[2][6]; //! its clusters 
+  //
+  //  
+  Float_t        fNormDCAPrim[2];  // normalize distance to the priary vertex
+  Double_t       fDist1;    //info about closest distance according closest MC - linear DCA
+  Double_t       fDist2;    //info about closest distance parabolic DCA
+  //
+  Double_t       fPP[3];    //momentum  positive   - according approx at DCA
+  Double_t       fPM[3];    //momentum negative
+  //
+  Double_t       fXr[3];      //rec. position according helix
+  Double_t       fAngle[3];   //three angles
+  Double_t       fRr;         //rec position of the vertex 
+  Int_t          fStatus;       //status
+  Int_t          fRow0;         // critical layer
+  Int_t          fOrder[3]; //order of the vertex 
+  //  quality information
+  Double_t       fDistNorm; //normalized  DCA
+  Double_t       fDistSigma; //sigma of distance
+  Float_t        fCausality[4];  // causality information - see comments in SetCausality
+  Float_t        fChi2Before;   //chi2 of the tracks before V0
+  Float_t        fNBefore;      // number of possible points before V0
+  Float_t        fChi2After;   // chi2 of the tracks after V0
+  Float_t        fNAfter;      // number of possible points after V0
+  Float_t        fPointAngleFi; //point angle fi
+  Float_t        fPointAngleTh; //point angle theta
+  Double_t       fPointAngle;   //point angle full
+  //
+  // parameterization coefficients
+  static AliESDV0Params fgkParams;  // resolution and likelihood parameterization  
+
+private:
+  AliESDv0& operator=(const AliESDv0&);
+
+  ClassDef(AliESDv0,2)      // ESD V0 vertex
 };
 
 inline 
index 2a06aaf..139f0c1 100644 (file)
@@ -37,7 +37,7 @@ void  AliV0::Update(Float_t vertex[3])
   Float_t distance2;
   //
   AliHelix phelix(fParamP);
-  AliHelix mhelix(fParamM);    
+  AliHelix mhelix(fParamN);    
   //
   //find intersection linear
   //
@@ -69,13 +69,13 @@ void  AliV0::Update(Float_t vertex[3])
   if (points>0){
     phelix.ParabolicDCA(mhelix,phase[0][0],phase[0][1],radius[0],delta1);
     phelix.ParabolicDCA(mhelix,phase[0][0],phase[0][1],radius[0],delta1);
-    if (TMath::Abs(fParamP.GetX()-TMath::Sqrt(radius[0])<3) && TMath::Abs(fParamM.GetX()-TMath::Sqrt(radius[0])<3)){
+    if (TMath::Abs(fParamP.GetX()-TMath::Sqrt(radius[0])<3) && TMath::Abs(fParamN.GetX()-TMath::Sqrt(radius[0])<3)){
       // if we are close to vertex use error parama
       //
-      err[1] = fParamP.GetCovariance()[0]+fParamM.GetCovariance()[0]+0.05*0.05
-       +0.3*(fParamP.GetCovariance()[2]+fParamM.GetCovariance()[2]);
-      err[2] = fParamP.GetCovariance()[2]+fParamM.GetCovariance()[2]+0.05*0.05
-       +0.3*(fParamP.GetCovariance()[0]+fParamM.GetCovariance()[0]);
+      err[1] = fParamP.GetCovariance()[0]+fParamN.GetCovariance()[0]+0.05*0.05
+       +0.3*(fParamP.GetCovariance()[2]+fParamN.GetCovariance()[2]);
+      err[2] = fParamP.GetCovariance()[2]+fParamN.GetCovariance()[2]+0.05*0.05
+       +0.3*(fParamP.GetCovariance()[0]+fParamN.GetCovariance()[0]);
       
       phelix.GetAngle(phase[0][0],mhelix,phase[0][1],angles);
       Double_t tfi  = TMath::Abs(TMath::Tan(angles[0]));
@@ -92,13 +92,13 @@ void  AliV0::Update(Float_t vertex[3])
   if (points==2){    
     phelix.ParabolicDCA(mhelix,phase[1][0],phase[1][1],radius[1],delta2);
     phelix.ParabolicDCA(mhelix,phase[1][0],phase[1][1],radius[1],delta2);
-    if (TMath::Abs(fParamP.GetX()-TMath::Sqrt(radius[1])<3) && TMath::Abs(fParamM.GetX()-TMath::Sqrt(radius[1])<3)){
+    if (TMath::Abs(fParamP.GetX()-TMath::Sqrt(radius[1])<3) && TMath::Abs(fParamN.GetX()-TMath::Sqrt(radius[1])<3)){
       // if we are close to vertex use error paramatrization
       //
-      err[1] = fParamP.GetCovariance()[0]+fParamM.GetCovariance()[0]+0.05*0.05
-       +0.3*(fParamP.GetCovariance()[2]+fParamM.GetCovariance()[2]);
-      err[2] = fParamP.GetCovariance()[2]+fParamM.GetCovariance()[2]+0.05*0.05
-       +0.3*(fParamP.GetCovariance()[0]+fParamM.GetCovariance()[0]);
+      err[1] = fParamP.GetCovariance()[0]+fParamN.GetCovariance()[0]+0.05*0.05
+       +0.3*(fParamP.GetCovariance()[2]+fParamN.GetCovariance()[2]);
+      err[2] = fParamP.GetCovariance()[2]+fParamN.GetCovariance()[2]+0.05*0.05
+       +0.3*(fParamP.GetCovariance()[0]+fParamN.GetCovariance()[0]);
       
       phelix.GetAngle(phase[1][0],mhelix,phase[1][1],angles);
       Double_t tfi  = TMath::Abs(TMath::Tan(angles[0]));
@@ -123,8 +123,8 @@ void  AliV0::Update(Float_t vertex[3])
     fXr[1] = 0.5*(xd[1]+xm[1]);
     fXr[2] = 0.5*(xd[2]+xm[2]);
 
-    Float_t wy = fParamP.GetCovariance()[0]/(fParamP.GetCovariance()[0]+fParamM.GetCovariance()[0]);
-    Float_t wz = fParamP.GetCovariance()[2]/(fParamP.GetCovariance()[2]+fParamM.GetCovariance()[2]);
+    Float_t wy = fParamP.GetCovariance()[0]/(fParamP.GetCovariance()[0]+fParamN.GetCovariance()[0]);
+    Float_t wz = fParamP.GetCovariance()[2]/(fParamP.GetCovariance()[2]+fParamN.GetCovariance()[2]);
     fXr[0] = 0.5*( (1.-wy)*xd[0]+ wy*xm[0] + (1.-wz)*xd[0]+ wz*xm[0] );
     fXr[1] = (1.-wy)*xd[1]+ wy*xm[1];
     fXr[2] = (1.-wz)*xd[2]+ wz*xm[2];
@@ -141,8 +141,8 @@ void  AliV0::Update(Float_t vertex[3])
     fXr[0] = 0.5*(xd[0]+xm[0]);
     fXr[1] = 0.5*(xd[1]+xm[1]);
     fXr[2] = 0.5*(xd[2]+xm[2]);
-    Float_t wy = fParamP.GetCovariance()[0]/(fParamP.GetCovariance()[0]+fParamM.GetCovariance()[0]);
-    Float_t wz = fParamP.GetCovariance()[2]/(fParamP.GetCovariance()[2]+fParamM.GetCovariance()[2]);
+    Float_t wy = fParamP.GetCovariance()[0]/(fParamP.GetCovariance()[0]+fParamN.GetCovariance()[0]);
+    Float_t wz = fParamP.GetCovariance()[2]/(fParamP.GetCovariance()[2]+fParamN.GetCovariance()[2]);
     fXr[0] = 0.5*( (1.-wy)*xd[0]+ wy*xm[0] + (1.-wz)*xd[0]+ wz*xm[0] );
     fXr[1] = (1.-wy)*xd[1]+ wy*xm[1];
     fXr[2] = (1.-wz)*xd[2]+ wz*xm[2];
index aca70a0..6c6a335 100644 (file)
@@ -11,9 +11,9 @@
 //    Origin: Marian Ivanov marian.ivanov@cern.ch
 //-------------------------------------------------------------------------
 
-#include "AliESDV0MI.h"
+#include "AliESDv0.h"
 
-class AliV0 :  public AliESDV0MI {
+class AliV0 :  public AliESDv0 {
 public:
   AliV0(){;} 
   void Update(Float_t vertex[3]);            //update
index cb466dd..ad50ca3 100644 (file)
@@ -194,6 +194,8 @@ Int_t AliV0Comparison(Int_t code=310, const Char_t *dir=".") {
       for (i=0; i<nentr; i++) {
           AliESDv0 *vertex=event->GetV0(i);
 
+          if (vertex->GetOnFlyStatus()) continue;
+
           Int_t nidx=TMath::Abs(vertex->GetNindex());
           Int_t pidx=TMath::Abs(vertex->GetPindex());
 
index a918f27..ea1b8cc 100644 (file)
@@ -382,6 +382,7 @@ Bool_t CheckESD(const char* gAliceFileName = "galice.root",
     // loop over V0s
     for (Int_t iV0 = 0; iV0 < esd->GetNumberOfV0s(); iV0++) {
       AliESDv0* v0 = esd->GetV0(iV0);
+      if (v0->GetOnFlyStatus()) continue;
       v0->ChangeMassHypothesis(kK0Short);
       hMassK0->Fill(v0->GetEffMass());
       v0->ChangeMassHypothesis(kLambda0);
index 6606664..4d20002 100644 (file)
@@ -24,8 +24,7 @@
 #pragma link C++ class  AliESDVertex+;
 #pragma link C++ class  AliESDpid+;
 #pragma link C++ class  AliESDkink+;
-#pragma link C++ class  AliESDV0MI+;
-#pragma link C++ class  AliESDV0MIParams+;
+#pragma link C++ class  AliESDV0Params+;
 #pragma link C++ class  AliESDCaloCluster+;
 
 #pragma link C++ class  AliKalmanTrack+;
index 3005d00..4aa6159 100644 (file)
@@ -2,10 +2,10 @@ SRCS = AliESD.cxx AliESDfriend.cxx\
        AliESDtrack.cxx AliESDfriendTrack.cxx\
        AliESDMuonTrack.cxx AliESDPmdTrack.cxx AliESDTrdTrack.cxx AliESDHLTtrack.cxx \
        AliESDv0.cxx AliESDcascade.cxx AliVertex.cxx AliESDVertex.cxx \
-       AliESDpid.cxx AliESDkink.cxx AliESDV0MI.cxx \
+       AliESDpid.cxx AliESDkink.cxx \
        AliESDCaloCluster.cxx \
        AliKalmanTrack.cxx AliExternalTrackParam.cxx \
-       AliLog.cxx AliPID.cxx AliESDV0MIParams.cxx \
+       AliLog.cxx AliPID.cxx AliESDV0Params.cxx \
        AliRunTag.cxx AliLHCTag.cxx AliDetectorTag.cxx AliEventTag.cxx \
        AliTagCreator.cxx AliTagAnalysis.cxx AliEventTagCuts.cxx AliRunTagCuts.cxx\
        AliTrackPointArray.cxx \
index c30ae16..38386bd 100644 (file)
@@ -4901,7 +4901,7 @@ void  AliTPCtrackerMI::FindV0s(TObjArray * array, AliESD *esd)
       vertex.SetStatus(1); // TPC v0 candidate
       vertex.SetRp(track0->fTPCr);
       vertex.SetRm(track1->fTPCr);
-      tpcv0s->AddLast(new AliESDV0MI(vertex));      
+      tpcv0s->AddLast(new AliESDv0(vertex));      
       ncandidates++;
       {
        Int_t eventNr = esd->GetEventNumber();
@@ -4957,7 +4957,7 @@ void  AliTPCtrackerMI::FindV0s(TObjArray * array, AliESD *esd)
   Int_t naccepted =0;
   for (Int_t i=0;i<ncandidates;i++){
     quality[i]     = 0; 
-    AliESDV0MI *v0 = (AliESDV0MI*)tpcv0s->At(i);
+    AliESDv0 *v0 = (AliESDv0*)tpcv0s->At(i);
     quality[i]     = 1./(1.00001-v0->GetPointAngle());   //base point angle
     // quality[i]    /= (0.5+v0->GetDist2());  
     // quality[i]    *= v0->GetChi2After();               //density factor
@@ -4974,7 +4974,7 @@ void  AliTPCtrackerMI::FindV0s(TObjArray * array, AliESD *esd)
   //
   //
   for (Int_t i=0;i<ncandidates;i++){
-    AliESDV0MI * v0 = (AliESDV0MI*)tpcv0s->At(indexes[i]);
+    AliESDv0 * v0 = (AliESDv0*)tpcv0s->At(indexes[i]);
     if (!v0) continue;
     Int_t index0 = v0->GetIndex(0);
     Int_t index1 = v0->GetIndex(1);
@@ -4996,13 +4996,14 @@ void  AliTPCtrackerMI::FindV0s(TObjArray * array, AliESD *esd)
     if (v0indexes0[2]!=0) {order0=3; accept=kFALSE;}
     if (v0indexes0[2]!=0) {order1=3; accept=kFALSE;}
     //
-    AliESDV0MI * v02 = v0;
+    AliESDv0 * v02 = v0;
     if (accept){
       v0->SetOrder(0,order0);
       v0->SetOrder(1,order1);
       v0->SetOrder(1,order0+order1);     
-      Int_t index = esd->AddV0MI(v0);
-      v02 = esd->GetV0MI(index);
+      v0->SetOnFlyStatus(kTRUE);
+      Int_t index = esd->AddV0(v0);
+      v02 = esd->GetV0(index);
       v0indexes0[order0]=index;
       v0indexes1[order1]=index;
       naccepted++;