ROOT logo
/**************************************************************************
 * 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.                  *
 **************************************************************************/


///////////////////////////////////////////////////////////////////////////
//          ----   CORRECTION FRAMEWORK   ----
// Class to cut on V0 topology
//   -> support for :
//                    DCA between V0 daughters
//                    V0 daughter impact parameters wrt primary vertex
//                    cosine of V0 pointing angle
//
///////////////////////////////////////////////////////////////////////////
// author : R. Vernet (renaud.vernet@cern.ch)
///////////////////////////////////////////////////////////////////////////

#include "AliCFV0TopoCuts.h"
#include "AliESDv0.h"
#include "AliESDtrack.h"
#include "AliCFPair.h"
#include "AliAODv0.h"
#include "AliVEvent.h"
#include "AliAODEvent.h"

ClassImp(AliCFV0TopoCuts)

//______________________________________________________________
AliCFV0TopoCuts::AliCFV0TopoCuts() : 
  AliCFCutBase(),
  fMaxDcaDaughters(1.e99),
  fMinDcaNeg(0),
  fMinDcaPos(0),
  fMinCosP(0),
  fEvent(0x0)
{
  //
  //default constructor
  //
}

//______________________________________________________________
AliCFV0TopoCuts::AliCFV0TopoCuts(const Char_t* name, const Char_t* title) : 
  AliCFCutBase(name,title),
  fMaxDcaDaughters(1.e99),
  fMinDcaNeg(0),
  fMinDcaPos(0),
  fMinCosP(0),
  fEvent(0x0)
{
  //
}

//______________________________________________________________
AliCFV0TopoCuts::AliCFV0TopoCuts(const AliCFV0TopoCuts& c) : 
  AliCFCutBase(c),
  fMaxDcaDaughters(c.fMaxDcaDaughters),
  fMinDcaNeg(c.fMinDcaNeg),
  fMinDcaPos(c.fMinDcaPos),
  fMinCosP(c.fMinCosP),
  fEvent(c.fEvent)
{
  //
  // copy constructor
  //
}

//______________________________________________________________
AliCFV0TopoCuts& AliCFV0TopoCuts::operator=(const AliCFV0TopoCuts& c) 
{
  //
  // assignment operator
  //

  if (this != &c) {
    AliCFCutBase::operator=(c) ;
    fMaxDcaDaughters = c.fMaxDcaDaughters ;
    fMinDcaNeg       = c.fMinDcaNeg ;
    fMinDcaPos       = c.fMinDcaPos ;
    fMinCosP         = c.fMinCosP ;
    fEvent           = c.fEvent ;
  }
  return *this ;
}

//______________________________________________________________
Bool_t AliCFV0TopoCuts::IsSelected(TObject *obj) {
  //
  // computes V0 topological variables to cut on and return true 
  // in case the V0 is accepted
  //


  AliCFPair* pair = dynamic_cast<AliCFPair*>(obj);
  if (!pair) return kFALSE ;

  TString className(pair->ClassName());
  if (className.CompareTo("AliCFPair") != 0) {
    Error("IsSelected","obj must point to an AliCFPair !");
    return kFALSE ;
  }

  AliESDv0     * esdV0       = pair->GetESDV0();
  AliAODv0     * aodV0       = pair->GetAODV0();
  AliVParticle * negDaughter = pair->GetNeg();
  AliVParticle * posDaughter = pair->GetPos();

  Double32_t dcaDaughters = 0. ;
  Double32_t cosP   = 0. ;
  Double32_t negDca = 0. ;
  Double32_t posDca = 0. ;

  if (esdV0) {
    dcaDaughters = esdV0->GetDcaV0Daughters() ;
    cosP         = esdV0->GetV0CosineOfPointingAngle() ;

    Float_t tDca[2];
    if (negDaughter) ((AliESDtrack*)negDaughter)->GetImpactParameters(tDca[0],tDca[1]);
    else { tDca[0]=1.e+09;  tDca[1]=1.e+09;}
    negDca = TMath::Sqrt(tDca[0]*tDca[0]+tDca[1]*tDca[1]);
    if (posDaughter) ((AliESDtrack*)posDaughter)->GetImpactParameters(tDca[0],tDca[1]);
    else { tDca[0]=1.e+09;  tDca[1]=1.e+09;}
    posDca = TMath::Sqrt(tDca[0]*tDca[0]+tDca[1]*tDca[1]);
  }
  else if (aodV0) {
    dcaDaughters = aodV0->DcaV0Daughters() ;
    negDca       = aodV0->DcaNegToPrimVertex() ;
    posDca       = aodV0->DcaPosToPrimVertex() ;
    cosP         = aodV0->CosPointingAngle(((AliAODEvent*)fEvent)->GetPrimaryVertex()) ;
  }
  else Error("IsSelected","No V0 pointer available");

  if (dcaDaughters > fMaxDcaDaughters) return kFALSE ;
  if (cosP         < fMinCosP        ) return kFALSE ;
  if (negDca       < fMinDcaNeg      ) return kFALSE ;
  if (posDca       < fMinDcaPos      ) return kFALSE ; 

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