Added new class (new implementation) for V0 in the AOD. (Boris Hippolyte)
authormarkus <markus@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Aug 2007 13:33:50 +0000 (13:33 +0000)
committermarkus <markus@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 29 Aug 2007 13:33:50 +0000 (13:33 +0000)
STEER/AODLinkDef.h
STEER/AliAODv0.cxx [new file with mode: 0644]
STEER/AliAODv0.h [new file with mode: 0644]
STEER/libAOD.pkg

index e8492f7..8d4233d 100644 (file)
@@ -25,6 +25,7 @@
 #pragma link C++ class AliAODRedCov<4>+;
 #pragma link C++ class AliAODRedCov<6>+;
 #pragma link C++ class AliAODRecoDecay;
+#pragma link C++ class AliAODv0+;
 #pragma link C++ class AliAODHandler+;
 #pragma link C++ class AliAODTracklets+;
 #pragma link C++ class AliAODTagCreator+;
diff --git a/STEER/AliAODv0.cxx b/STEER/AliAODv0.cxx
new file mode 100644 (file)
index 0000000..f304991
--- /dev/null
@@ -0,0 +1,246 @@
+/**************************************************************************
+ * Copyright(c) 1998-2007, 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.                  *
+ **************************************************************************/
+
+//-------------------------------------------------------------------------
+//     Analysis Oriented Data (AOD) V0 vertex class
+//     Authors: B.Hippolyte, IReS, hippolyt@in2p3.fr 
+//              G.Van Buren, BNL,  gene@bnl.gov      (original STAR MuDsts)
+//-------------------------------------------------------------------------
+
+//#include "AliESDEvent.h"
+//#include "AliESDv0.h"
+
+#include "AliAODv0.h"
+
+//#include "AliAODTrack.h"
+
+ClassImp(AliAODv0)
+
+  AliAODv0::AliAODv0() : 
+    AliAODRecoDecay(),
+    fDcaV0ToPrimVertex(999)
+{
+  //--------------------------------------------------------------------
+  // Default constructor
+  //--------------------------------------------------------------------
+  fCharge  = 0;
+  fNProngs = 2;
+  fNDCA    = 1;
+  fNPID    = 2;
+
+  fDCA = new Float_t[fNDCA];
+  fDCA[0] = 999;
+
+  fPx = new Double_t[GetNProngs()];
+  fPy = new Double_t[GetNProngs()];
+  fPz = new Double_t[GetNProngs()];
+  fPx[0] = 999;
+  fPy[0] = 999;
+  fPz[0] = 999;
+
+  fPx[1] = 999;
+  fPy[1] = 999;
+  fPz[1] = 999;
+
+  fd0 = new Double_t[GetNProngs()];
+  fd0[0] = 999;
+  fd0[1] = 999;
+}
+
+//AliAODv0::AliAODv0(AliESDv0* rV0Vertex ,AliESDEvent* rEvent) :
+//  AliAODRecoDecay(),
+//  fDcaV0ToPrimVertex(999)
+//{
+  //--------------------------------------------------------------------
+  // Constructor via fill to be removed eventually
+  //--------------------------------------------------------------------
+//  fCharge  = 0;
+//  fNProngs = 2;
+//  fNDCA    = 1;
+//  fNPID    = 2;
+
+//  fDCA = new Float_t[fNDCA];
+
+//   fPx = new Double_t[GetNProngs()];
+//   fPy = new Double_t[GetNProngs()];
+//   fPz = new Double_t[GetNProngs()];
+
+//   fd0 = new Double_t[GetNProngs()];
+
+//   this->Fill(rV0Vertex,rEvent);
+// }
+
+AliAODv0::AliAODv0(AliAODVertex* rAODVertex, Double_t rDcaV0Daughters, Double_t rDcaV0ToPrimVertex,
+          Double_t *rMomPos, Double_t *rMomNeg, Double_t *rDcaDaughterToPrimVertex) :
+  AliAODRecoDecay(rAODVertex,2,0,rDcaDaughterToPrimVertex),
+  fDcaV0ToPrimVertex(rDcaV0ToPrimVertex)
+{
+  //--------------------------------------------------------------------
+  // Constructor via setting each data member
+  //--------------------------------------------------------------------
+  fCharge  = 0;
+  fNProngs = 2;
+  fNDCA    = 1;
+  fNPID    = 2;
+
+  fDCA = new Float_t[fNDCA];
+
+  fDCA[0] = rDcaV0Daughters;
+  fDcaV0ToPrimVertex = rDcaV0ToPrimVertex;
+
+  fPx = new Double_t[GetNProngs()];
+  fPy = new Double_t[GetNProngs()];
+  fPz = new Double_t[GetNProngs()];
+
+  fPx[0] = rMomPos[0] ;
+  fPy[0] = rMomPos[1];
+  fPz[0] = rMomPos[2];
+
+  fPx[1] = rMomNeg[0];
+  fPy[1] = rMomNeg[1];
+  fPz[1] = rMomNeg[2];
+}
+
+AliAODv0::AliAODv0(const AliAODv0& rAliAODv0) :
+  AliAODRecoDecay(rAliAODv0),
+  fDcaV0ToPrimVertex(rAliAODv0.fDcaV0ToPrimVertex)
+ {
+  //--------------------------------------------------------------------
+  // Copy constructor
+  //--------------------------------------------------------------------
+}
+
+AliAODv0& AliAODv0::operator=(const AliAODv0& rAliAODv0){
+  //--------------------------------------------------------------------
+  // Assignment overload
+  //--------------------------------------------------------------------
+  this->fDcaV0ToPrimVertex  = rAliAODv0.fDcaV0ToPrimVertex ;
+  return *this;
+}
+
+AliAODv0::~AliAODv0(){
+  //--------------------------------------------------------------------
+  // Empty destructor
+  //--------------------------------------------------------------------
+}
+
+
+// void AliAODv0::Fill(AliESDv0* rV0Vertex ,AliESDEvent* rEvent){
+
+//   Double_t tDecayVertexV0[3]; rV0Vertex->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]); 
+//   fSecondaryVtx->SetX(tDecayVertexV0[0]);
+//   fSecondaryVtx->SetY(tDecayVertexV0[1]);
+//   fSecondaryVtx->SetZ(tDecayVertexV0[2]);
+
+//   Double_t lCovVtx[6];
+//   rV0Vertex->GetPosCov(lCovVtx);
+//   fSecondaryVtx->SetCovMatrix(lCovVtx);
+
+//   fSecondaryVtx->SetChi2perNDF(rV0Vertex->GetChi2V0());
+//   fSecondaryVtx->SetType(AliAODVertex::kV0);
+
+//   UInt_t lKeyPos = (UInt_t)TMath::Abs(rV0Vertex->GetPindex());// need to ask why Abs
+//   UInt_t lKeyNeg = (UInt_t)TMath::Abs(rV0Vertex->GetNindex());
+//   fSecondaryVtx->AddDaughter(rEvent->GetTrack(lKeyPos));
+//   fSecondaryVtx->AddDaughter(rEvent->GetTrack(lKeyNeg));
+
+//   fDCA[0] = rV0Vertex->GetDcaV0Daughters();
+//   fDcaV0ToPrimVertex = rV0Vertex->GetD();
+
+//   Double_t tMomPos[3]; rV0Vertex->GetPPxPyPz(tMomPos[0],tMomPos[1],tMomPos[2]); 
+//   fPx[0] = tMomPos[0];
+//   fPy[0] = tMomPos[1];
+//   fPz[0] = tMomPos[2];
+
+//   Double_t tMomNeg[3]; rV0Vertex->GetNPxPyPz(tMomNeg[0],tMomNeg[1],tMomNeg[2]); 
+//   fPx[1] = tMomNeg[0];
+//   fPy[1] = tMomNeg[1];
+//   fPz[1] = tMomNeg[2];
+
+//   AliESDtrack *pTrack=rEvent->GetTrack(lKeyPos);
+//   AliESDtrack *nTrack=rEvent->GetTrack(lKeyNeg);
+
+//   Float_t tDcaPosToPrimVertex[2];
+//   if(pTrack) pTrack->GetImpactParameters(tDcaPosToPrimVertex[0],tDcaPosToPrimVertex[1]);
+//   else { tDcaPosToPrimVertex[0]=999.;  tDcaPosToPrimVertex[1]=999.;}
+//   fd0[0] = 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.;}
+
+//   fd0[1] = TMath::Sqrt(tDcaNegToPrimVertex[0]*tDcaNegToPrimVertex[0]+tDcaNegToPrimVertex[1]*tDcaNegToPrimVertex[1]);
+// }
+
+void AliAODv0::Fill(AliAODVertex *rAODVertex, Double_t rDcaV0Daughters, Double_t rDcaV0ToPrimVertex,
+                   Double_t *rMomPos, Double_t *rMomNeg, Double_t *rDcaDaughterToPrimVertex){
+
+  this->SetSecondaryVtx(rAODVertex);
+
+  fDCA[0] = rDcaV0Daughters;
+  fDcaV0ToPrimVertex = rDcaV0ToPrimVertex;
+
+  fPx[0] = rMomPos[0] ;
+  fPy[0] = rMomPos[1];
+  fPz[0] = rMomPos[2];
+
+  fPx[1] = rMomNeg[0];
+  fPy[1] = rMomNeg[1];
+  fPz[1] = rMomNeg[2];
+
+  fd0[0] = rDcaDaughterToPrimVertex[0];
+  fd0[1] = rDcaDaughterToPrimVertex[1];
+}
+
+void AliAODv0::ResetV0(){
+
+  fSecondaryVtx->SetX(999);
+  fSecondaryVtx->SetY(999);
+  fSecondaryVtx->SetZ(999);
+  fSecondaryVtx->SetChi2perNDF(999);
+  fSecondaryVtx->SetType(AliAODVertex::kUndef);
+
+  Int_t lNumDaughters = fSecondaryVtx->GetNDaughters();
+  for(Int_t iDaughterIndex = 0; iDaughterIndex<lNumDaughters;iDaughterIndex++)
+    fSecondaryVtx->RemoveDaughter(fSecondaryVtx->GetDaughter(iDaughterIndex));
+
+  fDCA[0] = 999;
+  fDcaV0ToPrimVertex  = 999;
+
+  fPx[0] = 999;
+  fPy[0] = 999;
+  fPz[0] = 999;
+
+  fPx[1] = 999;
+  fPy[1] = 999;
+  fPz[1] = 999;
+
+  fd0[0] = 999;
+  fd0[1] = 999;
+}
+
+void AliAODv0::Print(Option_t* /*option*/) const {
+  //
+  // Print some information
+  //
+  AliAODRecoDecay::Print();
+  printf("AliAODv0: invariant mass (k0s %.6f, lambda %.6f, anti-lambda %.6f) \n",MassK0Short(),MassLambda(),MassAntiLambda());
+  printf("AliAODv0: dca (v0d %.6f, v0tpv %.6f, postpv %.6f, negtpv %.6f ) \n",DcaV0Daughters(),DcaV0ToPrimVertex(),DcaPosToPrimVertex(),DcaNegToPrimVertex());
+  printf("AliAODv0: mom (ptot2 %.6f, pt2 %.6f, rapk0 %.6f, rapla %.6f ) \n",Ptot2V0(),Pt2V0(),RapK0Short(),RapLambda());
+  printf("AliAODv0: cin (mpav0 %.6f, mnav0 %.6f, alpha %.6f, ptarm %.6f ) \n",MomPosAlongV0(),MomNegAlongV0(),AlphaV0(),PtArmV0());
+  printf("AliAODv0: nrg (eppro %.6f, enpro %.6f, eppio %.6f, enpio %.6f ) \n",EPosProton(),ENegProton(),EPosPion(),ENegPion());
+
+  return;
+}
diff --git a/STEER/AliAODv0.h b/STEER/AliAODv0.h
new file mode 100644 (file)
index 0000000..76b013d
--- /dev/null
@@ -0,0 +1,229 @@
+#ifndef AliAODv0_H
+#define AliAODv0_H
+/* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+//-------------------------------------------------------------------------
+//     Analysis Oriented Data (AOD) V0 vertex class
+//     Authors: B.Hippolyte, IPHC, hippolyt@in2p3.fr 
+//              G.Van Buren, BNL,  gene@bnl.gov      (original STAR MuDsts)
+//-------------------------------------------------------------------------
+
+#include "AliAODRecoDecay.h"
+
+//class AliESDEvent;
+//class AliESDv0;
+
+class AliAODv0 : public AliAODRecoDecay {
+
+public:
+
+  AliAODv0();
+  //  AliAODv0(AliESDv0 *rV0Vertex, AliESDEvent *rEvent);
+  AliAODv0(AliAODVertex *rAODVertex, Double_t rDcaV0Daughters, Double_t rDcaV0ToPrimVertex,
+          Double_t *rMomPos, Double_t *rMomNeg, Double_t *rDcaDaughterToPrimVertex);
+  virtual ~AliAODv0();
+
+  AliAODv0(const AliAODv0& rAliAODv0);
+  AliAODv0& operator=(const AliAODv0& rAliAODv0);
+
+  //  void     Fill(AliESDv0 *rV0Vertex, AliESDEvent *rEvent);
+  void     Fill(AliAODVertex *rAODVertex, Double_t rDcaV0Daughters, Double_t rDcaV0ToPrimVertex,
+               Double_t *rMomPos, Double_t *rMomNeg, Double_t *rDcaDaughterToPrimVertex);
+  void     ResetV0();
+  void     Print(Option_t* option = "") const;
+
+  Double_t DecayVertexV0X() const;
+  Double_t DecayVertexV0Y() const;
+  Double_t DecayVertexV0Z() const;
+
+  Double_t DecayLengthV0(double*) const;
+                     
+  Double_t DcaV0Daughters() const;
+  Double_t DcaV0ToPrimVertex() const;
+  Double_t DcaPosToPrimVertex() const; 
+  Double_t DcaNegToPrimVertex() const; 
+  Double_t RadiusV0()           const;
+  Double_t OpenAngleV0()        const;
+
+  Double_t MomPosX() const;
+  Double_t MomPosY() const;
+  Double_t MomPosZ() const;
+  Double_t MomNegX() const;
+  Double_t MomNegY() const;
+  Double_t MomNegZ() const;
+
+  //  Int_t    KeyPos()  const;
+  //  Int_t    KeyNeg()  const;
+
+  Double_t Chi2V0()  const;
+
+  Double_t MomV0X()  const;
+  Double_t MomV0Y()  const;
+  Double_t MomV0Z()  const;
+
+  Double_t Ptot2Pos() const;
+  Double_t Ptot2Neg() const;
+  Double_t Ptot2V0()  const;
+  Double_t Pt2V0()    const;
+  Double_t MomPosAlongV0() const;
+  Double_t MomNegAlongV0() const;
+  Double_t AlphaV0() const;
+  Double_t PtArmV0() const;
+  Double_t EPosProton() const;
+  Double_t ENegProton() const;
+  Double_t EPosPion() const;
+  Double_t ENegPion() const;
+  Double_t ELambda() const;
+  Double_t EK0Short() const;
+  Double_t MassLambda() const;
+  Double_t MassAntiLambda() const;
+  Double_t MassK0Short() const;
+  Double_t RapK0Short() const;
+  Double_t RapLambda() const;
+  Double_t PseudoRapV0()    const;
+  Double_t PseudoRapPos()   const;
+  Double_t PseudoRapNeg()   const;
+
+
+protected:
+  Double32_t fDcaV0ToPrimVertex;    // dca of V0 to primary vertex 
+  ClassDef(AliAODv0,1)
+};
+
+inline Double_t AliAODv0::DecayVertexV0X() const {return this->GetSecVtxX();}
+inline Double_t AliAODv0::DecayVertexV0Y() const {return this->GetSecVtxY();}
+inline Double_t AliAODv0::DecayVertexV0Z() const {return this->GetSecVtxZ();}
+
+inline Double_t AliAODv0::DecayLengthV0(double *tParentVertexPosition) const {
+  return ::sqrt(::pow(DecayVertexV0X() - tParentVertexPosition[0],2) +
+               ::pow(DecayVertexV0Y() - tParentVertexPosition[1],2) +
+               ::pow(DecayVertexV0Z() - tParentVertexPosition[2],2));
+}
+
+inline Double_t AliAODv0::DcaV0Daughters() const {return fDCA[0];}
+inline Double_t AliAODv0::DcaV0ToPrimVertex() const {return fDcaV0ToPrimVertex;}
+inline Double_t AliAODv0::DcaPosToPrimVertex() const {return fd0[0];}
+inline Double_t AliAODv0::DcaNegToPrimVertex() const {return fd0[1];}
+
+inline Double_t AliAODv0::RadiusV0() const {
+  return RadiusSecVtx();
+}
+
+inline Double_t AliAODv0::OpenAngleV0() const {
+  Double_t lPtot1xPtot2 = PxProng(0)*PxProng(1)+PyProng(0)*PyProng(1)+PzProng(0)*PzProng(1);
+  Double_t lPtot1Ptot2_2 = Ptot2Pos()*Ptot2Neg();
+  return ::acos(lPtot1xPtot2/::sqrt(lPtot1Ptot2_2) );
+}
+
+inline Double_t AliAODv0::MomPosX() const {return fPx[0];}
+inline Double_t AliAODv0::MomPosY() const {return fPy[0];}
+inline Double_t AliAODv0::MomPosZ() const {return fPz[0];}
+inline Double_t AliAODv0::MomNegX() const {return fPx[1];}
+inline Double_t AliAODv0::MomNegY() const {return fPy[1];}
+inline Double_t AliAODv0::MomNegZ() const {return fPz[1];}
+
+// inline Int_t AliAODv0::KeyPos() const {return fKeyPos;}
+// inline Int_t AliAODv0::KeyNeg() const {return fKeyNeg;}
+
+inline Double_t AliAODv0::Chi2V0() const {return fSecondaryVtx->GetChi2perNDF();}
+
+// Compare eventually AliAODv0::MomV0X() and AliAODRecoDecay::Px()
+inline Double_t AliAODv0::MomV0X() const {return MomPosX()+MomNegX();}
+inline Double_t AliAODv0::MomV0Y() const {return MomPosY()+MomNegY();}
+inline Double_t AliAODv0::MomV0Z() const {return MomPosZ()+MomNegZ();}
+
+inline Double_t AliAODv0::Ptot2Pos() const {
+  return (::pow(MomPosX(),2) + ::pow(MomPosY(),2) + ::pow(MomPosZ(),2) );
+}
+inline Double_t AliAODv0::Ptot2Neg() const {
+  return (::pow(MomNegX(),2) + ::pow(MomNegY(),2) + ::pow(MomNegZ(),2) );
+}
+inline Double_t AliAODv0::Ptot2V0() const {return ( Pt2V0() + ::pow(MomV0Z(),2) );}
+inline Double_t AliAODv0::Pt2V0() const {
+  return (::pow(MomV0X(),2) + ::pow(MomV0Y(),2) );
+}
+
+inline Double_t AliAODv0::MomPosAlongV0() const {
+  Double_t lPtot2V0 = Ptot2V0();
+  if (lPtot2V0)
+    return (MomPosX()*MomV0X() +
+           MomPosY()*MomV0Y() +
+           MomPosZ()*MomV0Z()) / ::sqrt(lPtot2V0);
+  return 0.;
+}
+
+inline Double_t AliAODv0::MomNegAlongV0() const {
+  Double_t lPtot2V0 = Ptot2V0();
+  if (lPtot2V0)
+    return (MomNegX()*MomV0X() +
+           MomNegY()*MomV0Y() +
+           MomNegZ()*MomV0Z()) / ::sqrt(lPtot2V0);
+  return 0.;
+}
+
+inline Double_t AliAODv0::AlphaV0() const {
+  return Alpha();
+}
+inline Double_t AliAODv0::PtArmV0() const {
+  return QtProng(0);
+}
+
+inline Double_t AliAODv0::EPosProton() const {
+  return EProng(0,2212);
+}
+
+inline Double_t AliAODv0::ENegProton() const {
+  return EProng(1,2212);
+}
+
+inline Double_t AliAODv0::EPosPion() const {
+  return EProng(0,211);
+}
+
+inline Double_t AliAODv0::ENegPion() const {
+  return EProng(1,211);
+}
+
+inline Double_t AliAODv0::ELambda() const {
+  return E(3122);
+}
+
+inline Double_t AliAODv0::EK0Short() const {
+  return E(310);
+}
+
+inline Double_t AliAODv0::MassLambda() const {
+  return InvMass2Prongs(0,1,2212,211);
+}
+
+inline Double_t AliAODv0::MassAntiLambda() const {
+  return InvMass2Prongs(0,1,211,2212);
+}
+
+inline Double_t AliAODv0::MassK0Short() const {
+  return InvMass2Prongs(0,1,211,211);
+}
+
+inline Double_t AliAODv0::RapK0Short() const {
+  return Y(310);
+}
+
+inline Double_t AliAODv0::RapLambda() const {
+  return Y(3122);
+}
+
+inline Double_t AliAODv0::PseudoRapV0() const {
+  return Eta();
+}
+
+inline Double_t AliAODv0::PseudoRapPos()   const {
+  return EtaProng(0);
+}
+
+inline Double_t AliAODv0::PseudoRapNeg()   const {
+  return EtaProng(1);
+}
+//----------------------------------------------------------------------------
+
+#endif
index 356485f..5350068 100644 (file)
@@ -1,7 +1,8 @@
 SRCS = AliAODEvent.cxx AliAODHeader.cxx \
        AliAODTrack.cxx AliAODVertex.cxx AliAODCluster.cxx \
        AliAODJet.cxx AliAODPhoton.cxx AliAODRedCov.cxx AliAODRecoDecay.cxx \
-       AliAODHandler.cxx AliAODTracklets.cxx AliAODTagCreator.cxx
+       AliAODHandler.cxx AliAODTracklets.cxx AliAODTagCreator.cxx \
+       AliAODv0.cxx
 
 HDRS:= $(SRCS:.cxx=.h)