ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2006, 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$ */

/////////////////////////////////////////////////////////////
//
// Base class for AOD reconstructed heavy-flavour 2-prong decay
//
// Author: A.Dainese, andrea.dainese@lnl.infn.it
/////////////////////////////////////////////////////////////

#include <TDatabasePDG.h>
#include "AliAODRecoDecayHF.h"
#include "AliAODRecoDecayHF2Prong.h"

ClassImp(AliAODRecoDecayHF2Prong)

//--------------------------------------------------------------------------
AliAODRecoDecayHF2Prong::AliAODRecoDecayHF2Prong() :
  AliAODRecoDecayHF()
{
  //
  // Default Constructor
  //
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF2Prong::AliAODRecoDecayHF2Prong(AliAODVertex *vtx2,
						 Double_t *px,Double_t *py,Double_t *pz,
						 Double_t *d0,Double_t *d0err,Float_t dca) :
  AliAODRecoDecayHF(vtx2,2,0,px,py,pz,d0,d0err)
{
  //
  // Constructor with AliAODVertex for decay vertex
  //
  SetDCA(dca);
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF2Prong::AliAODRecoDecayHF2Prong(AliAODVertex *vtx2,
						 Double_t *d0,Double_t *d0err,Float_t dca) :
  AliAODRecoDecayHF(vtx2,2,0,d0,d0err)
{
  //
  // Constructor with AliAODVertex for decay vertex and without prongs momenta
  //
  SetDCA(dca);
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF2Prong::AliAODRecoDecayHF2Prong(const AliAODRecoDecayHF2Prong &source) :
  AliAODRecoDecayHF(source)
{
  //
  // Copy constructor
  //
}
//--------------------------------------------------------------------------
AliAODRecoDecayHF2Prong &AliAODRecoDecayHF2Prong::operator=(const AliAODRecoDecayHF2Prong &source)
{
  //
  // assignment operator
  //
  if(&source == this) return *this;

  AliAODRecoDecayHF::operator=(source);

  return *this;
}
//--------------------------------------------------------------------------
Bool_t AliAODRecoDecayHF2Prong::SelectD0(const Double_t *cuts,Int_t &okD0,Int_t &okD0bar) 
  const {
//
// This function compares the D0 with a set of cuts:
//
// cuts[0] = inv. mass half width [GeV]   
// cuts[1] = dca [cm]
// cuts[2] = cosThetaStar 
// cuts[3] = pTK [GeV/c]
// cuts[4] = pTPi [GeV/c]
// cuts[5] = d0K [cm]   upper limit!
// cuts[6] = d0Pi [cm]  upper limit!
// cuts[7] = d0d0 [cm^2]
// cuts[8] = cosThetaPoint
//
// If the D0/D0bar doesn't pass the cuts it sets the weights to 0
// If neither D0 nor D0bar pass the cuts return kFALSE
//
  Double_t mD0,mD0bar,ctsD0,ctsD0bar;
  okD0=1; okD0bar=1;

  Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();

  if(PtProng(1) < cuts[3] || PtProng(0) < cuts[4]) okD0 = 0;
  if(PtProng(0) < cuts[3] || PtProng(1) < cuts[4]) okD0bar = 0;
  if(!okD0 && !okD0bar) return kFALSE;

  if(TMath::Abs(Getd0Prong(1)) > cuts[5] || 
     TMath::Abs(Getd0Prong(0)) > cuts[6]) okD0 = 0;
  if(TMath::Abs(Getd0Prong(0)) > cuts[6] ||
     TMath::Abs(Getd0Prong(1)) > cuts[5]) okD0bar = 0;
  if(!okD0 && !okD0bar) return kFALSE;

  if(GetDCA() > cuts[1]) { okD0 = okD0bar = 0; return kFALSE; }

  InvMassD0(mD0,mD0bar);
  if(TMath::Abs(mD0-mD0PDG)    > cuts[0]) okD0 = 0;
  if(TMath::Abs(mD0bar-mD0PDG) > cuts[0]) okD0bar = 0;
  if(!okD0 && !okD0bar) return kFALSE;

  CosThetaStarD0(ctsD0,ctsD0bar);
  if(TMath::Abs(ctsD0)    > cuts[2]) okD0 = 0;
  if(TMath::Abs(ctsD0bar) > cuts[2]) okD0bar = 0;
  if(!okD0 && !okD0bar) return kFALSE;

  if(Prodd0d0() > cuts[7]) { okD0 = okD0bar = 0; return kFALSE; }

  if(CosPointingAngle()   < cuts[8]) { okD0 = okD0bar = 0; return kFALSE; }

  return kTRUE;
}
//-----------------------------------------------------------------------------
Bool_t AliAODRecoDecayHF2Prong::SelectBtoJPSI(const Double_t *cuts,Int_t &okB)
  const {
//
// This function compares the Secondary JPSI candidates with a set of cuts:
//
// cuts[0] = inv. mass half width [GeV]
// cuts[1] = dca [cm]
// cuts[2] = cosThetaStar (negative electron)
// cuts[3] = pTP [GeV/c]
// cuts[4] = pTN [GeV/c]
// cuts[5] = d0P [cm]   upper limit!
// cuts[6] = d0N [cm]  upper limit!
// cuts[7] = d0d0 [cm^2]
// cuts[8] = cosThetaPoint
//
// If the candidate doesn't pass the cuts it sets the weight to 0
// and return kFALSE
//
  Double_t mJPsi,ctsJPsi;
  okB=1;

  Double_t mJPSIPDG = TDatabasePDG::Instance()->GetParticle(443)->Mass();

  if(PtProng(1) < cuts[3] || PtProng(0) < cuts[4]) okB = 0;
  if(!okB) return kFALSE;

  if(TMath::Abs(Getd0Prong(1)) > cuts[5] ||
     TMath::Abs(Getd0Prong(0)) > cuts[6]) okB = 0;
  if(!okB) return kFALSE;

  if(GetDCA() > cuts[1]) { okB = 0; return kFALSE; }

  mJPsi=InvMassJPSIee();
  if(TMath::Abs(mJPsi-mJPSIPDG)    > cuts[0]) okB = 0;
  if(!okB) return kFALSE;

  ctsJPsi=CosThetaStarJPSI();
  if(TMath::Abs(ctsJPsi)    > cuts[2]) okB = 0;
  if(!okB) return kFALSE;

  if(Prodd0d0() > cuts[7]) { okB = 0; return kFALSE; }

  if(CosPointingAngle()   < cuts[8]) { okB = 0; return kFALSE; }

  return kTRUE;
}
//-----------------------------------------------------------------------------
 AliAODRecoDecayHF2Prong.cxx:1
 AliAODRecoDecayHF2Prong.cxx:2
 AliAODRecoDecayHF2Prong.cxx:3
 AliAODRecoDecayHF2Prong.cxx:4
 AliAODRecoDecayHF2Prong.cxx:5
 AliAODRecoDecayHF2Prong.cxx:6
 AliAODRecoDecayHF2Prong.cxx:7
 AliAODRecoDecayHF2Prong.cxx:8
 AliAODRecoDecayHF2Prong.cxx:9
 AliAODRecoDecayHF2Prong.cxx:10
 AliAODRecoDecayHF2Prong.cxx:11
 AliAODRecoDecayHF2Prong.cxx:12
 AliAODRecoDecayHF2Prong.cxx:13
 AliAODRecoDecayHF2Prong.cxx:14
 AliAODRecoDecayHF2Prong.cxx:15
 AliAODRecoDecayHF2Prong.cxx:16
 AliAODRecoDecayHF2Prong.cxx:17
 AliAODRecoDecayHF2Prong.cxx:18
 AliAODRecoDecayHF2Prong.cxx:19
 AliAODRecoDecayHF2Prong.cxx:20
 AliAODRecoDecayHF2Prong.cxx:21
 AliAODRecoDecayHF2Prong.cxx:22
 AliAODRecoDecayHF2Prong.cxx:23
 AliAODRecoDecayHF2Prong.cxx:24
 AliAODRecoDecayHF2Prong.cxx:25
 AliAODRecoDecayHF2Prong.cxx:26
 AliAODRecoDecayHF2Prong.cxx:27
 AliAODRecoDecayHF2Prong.cxx:28
 AliAODRecoDecayHF2Prong.cxx:29
 AliAODRecoDecayHF2Prong.cxx:30
 AliAODRecoDecayHF2Prong.cxx:31
 AliAODRecoDecayHF2Prong.cxx:32
 AliAODRecoDecayHF2Prong.cxx:33
 AliAODRecoDecayHF2Prong.cxx:34
 AliAODRecoDecayHF2Prong.cxx:35
 AliAODRecoDecayHF2Prong.cxx:36
 AliAODRecoDecayHF2Prong.cxx:37
 AliAODRecoDecayHF2Prong.cxx:38
 AliAODRecoDecayHF2Prong.cxx:39
 AliAODRecoDecayHF2Prong.cxx:40
 AliAODRecoDecayHF2Prong.cxx:41
 AliAODRecoDecayHF2Prong.cxx:42
 AliAODRecoDecayHF2Prong.cxx:43
 AliAODRecoDecayHF2Prong.cxx:44
 AliAODRecoDecayHF2Prong.cxx:45
 AliAODRecoDecayHF2Prong.cxx:46
 AliAODRecoDecayHF2Prong.cxx:47
 AliAODRecoDecayHF2Prong.cxx:48
 AliAODRecoDecayHF2Prong.cxx:49
 AliAODRecoDecayHF2Prong.cxx:50
 AliAODRecoDecayHF2Prong.cxx:51
 AliAODRecoDecayHF2Prong.cxx:52
 AliAODRecoDecayHF2Prong.cxx:53
 AliAODRecoDecayHF2Prong.cxx:54
 AliAODRecoDecayHF2Prong.cxx:55
 AliAODRecoDecayHF2Prong.cxx:56
 AliAODRecoDecayHF2Prong.cxx:57
 AliAODRecoDecayHF2Prong.cxx:58
 AliAODRecoDecayHF2Prong.cxx:59
 AliAODRecoDecayHF2Prong.cxx:60
 AliAODRecoDecayHF2Prong.cxx:61
 AliAODRecoDecayHF2Prong.cxx:62
 AliAODRecoDecayHF2Prong.cxx:63
 AliAODRecoDecayHF2Prong.cxx:64
 AliAODRecoDecayHF2Prong.cxx:65
 AliAODRecoDecayHF2Prong.cxx:66
 AliAODRecoDecayHF2Prong.cxx:67
 AliAODRecoDecayHF2Prong.cxx:68
 AliAODRecoDecayHF2Prong.cxx:69
 AliAODRecoDecayHF2Prong.cxx:70
 AliAODRecoDecayHF2Prong.cxx:71
 AliAODRecoDecayHF2Prong.cxx:72
 AliAODRecoDecayHF2Prong.cxx:73
 AliAODRecoDecayHF2Prong.cxx:74
 AliAODRecoDecayHF2Prong.cxx:75
 AliAODRecoDecayHF2Prong.cxx:76
 AliAODRecoDecayHF2Prong.cxx:77
 AliAODRecoDecayHF2Prong.cxx:78
 AliAODRecoDecayHF2Prong.cxx:79
 AliAODRecoDecayHF2Prong.cxx:80
 AliAODRecoDecayHF2Prong.cxx:81
 AliAODRecoDecayHF2Prong.cxx:82
 AliAODRecoDecayHF2Prong.cxx:83
 AliAODRecoDecayHF2Prong.cxx:84
 AliAODRecoDecayHF2Prong.cxx:85
 AliAODRecoDecayHF2Prong.cxx:86
 AliAODRecoDecayHF2Prong.cxx:87
 AliAODRecoDecayHF2Prong.cxx:88
 AliAODRecoDecayHF2Prong.cxx:89
 AliAODRecoDecayHF2Prong.cxx:90
 AliAODRecoDecayHF2Prong.cxx:91
 AliAODRecoDecayHF2Prong.cxx:92
 AliAODRecoDecayHF2Prong.cxx:93
 AliAODRecoDecayHF2Prong.cxx:94
 AliAODRecoDecayHF2Prong.cxx:95
 AliAODRecoDecayHF2Prong.cxx:96
 AliAODRecoDecayHF2Prong.cxx:97
 AliAODRecoDecayHF2Prong.cxx:98
 AliAODRecoDecayHF2Prong.cxx:99
 AliAODRecoDecayHF2Prong.cxx:100
 AliAODRecoDecayHF2Prong.cxx:101
 AliAODRecoDecayHF2Prong.cxx:102
 AliAODRecoDecayHF2Prong.cxx:103
 AliAODRecoDecayHF2Prong.cxx:104
 AliAODRecoDecayHF2Prong.cxx:105
 AliAODRecoDecayHF2Prong.cxx:106
 AliAODRecoDecayHF2Prong.cxx:107
 AliAODRecoDecayHF2Prong.cxx:108
 AliAODRecoDecayHF2Prong.cxx:109
 AliAODRecoDecayHF2Prong.cxx:110
 AliAODRecoDecayHF2Prong.cxx:111
 AliAODRecoDecayHF2Prong.cxx:112
 AliAODRecoDecayHF2Prong.cxx:113
 AliAODRecoDecayHF2Prong.cxx:114
 AliAODRecoDecayHF2Prong.cxx:115
 AliAODRecoDecayHF2Prong.cxx:116
 AliAODRecoDecayHF2Prong.cxx:117
 AliAODRecoDecayHF2Prong.cxx:118
 AliAODRecoDecayHF2Prong.cxx:119
 AliAODRecoDecayHF2Prong.cxx:120
 AliAODRecoDecayHF2Prong.cxx:121
 AliAODRecoDecayHF2Prong.cxx:122
 AliAODRecoDecayHF2Prong.cxx:123
 AliAODRecoDecayHF2Prong.cxx:124
 AliAODRecoDecayHF2Prong.cxx:125
 AliAODRecoDecayHF2Prong.cxx:126
 AliAODRecoDecayHF2Prong.cxx:127
 AliAODRecoDecayHF2Prong.cxx:128
 AliAODRecoDecayHF2Prong.cxx:129
 AliAODRecoDecayHF2Prong.cxx:130
 AliAODRecoDecayHF2Prong.cxx:131
 AliAODRecoDecayHF2Prong.cxx:132
 AliAODRecoDecayHF2Prong.cxx:133
 AliAODRecoDecayHF2Prong.cxx:134
 AliAODRecoDecayHF2Prong.cxx:135
 AliAODRecoDecayHF2Prong.cxx:136
 AliAODRecoDecayHF2Prong.cxx:137
 AliAODRecoDecayHF2Prong.cxx:138
 AliAODRecoDecayHF2Prong.cxx:139
 AliAODRecoDecayHF2Prong.cxx:140
 AliAODRecoDecayHF2Prong.cxx:141
 AliAODRecoDecayHF2Prong.cxx:142
 AliAODRecoDecayHF2Prong.cxx:143
 AliAODRecoDecayHF2Prong.cxx:144
 AliAODRecoDecayHF2Prong.cxx:145
 AliAODRecoDecayHF2Prong.cxx:146
 AliAODRecoDecayHF2Prong.cxx:147
 AliAODRecoDecayHF2Prong.cxx:148
 AliAODRecoDecayHF2Prong.cxx:149
 AliAODRecoDecayHF2Prong.cxx:150
 AliAODRecoDecayHF2Prong.cxx:151
 AliAODRecoDecayHF2Prong.cxx:152
 AliAODRecoDecayHF2Prong.cxx:153
 AliAODRecoDecayHF2Prong.cxx:154
 AliAODRecoDecayHF2Prong.cxx:155
 AliAODRecoDecayHF2Prong.cxx:156
 AliAODRecoDecayHF2Prong.cxx:157
 AliAODRecoDecayHF2Prong.cxx:158
 AliAODRecoDecayHF2Prong.cxx:159
 AliAODRecoDecayHF2Prong.cxx:160
 AliAODRecoDecayHF2Prong.cxx:161
 AliAODRecoDecayHF2Prong.cxx:162
 AliAODRecoDecayHF2Prong.cxx:163
 AliAODRecoDecayHF2Prong.cxx:164
 AliAODRecoDecayHF2Prong.cxx:165
 AliAODRecoDecayHF2Prong.cxx:166
 AliAODRecoDecayHF2Prong.cxx:167
 AliAODRecoDecayHF2Prong.cxx:168
 AliAODRecoDecayHF2Prong.cxx:169
 AliAODRecoDecayHF2Prong.cxx:170
 AliAODRecoDecayHF2Prong.cxx:171
 AliAODRecoDecayHF2Prong.cxx:172
 AliAODRecoDecayHF2Prong.cxx:173
 AliAODRecoDecayHF2Prong.cxx:174
 AliAODRecoDecayHF2Prong.cxx:175
 AliAODRecoDecayHF2Prong.cxx:176
 AliAODRecoDecayHF2Prong.cxx:177
 AliAODRecoDecayHF2Prong.cxx:178
 AliAODRecoDecayHF2Prong.cxx:179