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

///////////////////////////////////////////////////////////////////////////
//                Dielectron TrackCuts                                  //
//                                                                       //
//                                                                       //
/*
Detailed description


*/
//                                                                       //
///////////////////////////////////////////////////////////////////////////


#include <TMath.h>

#include "AliDielectronTrackCuts.h"
#include "AliVTrack.h"
#include "AliAODTrack.h"

ClassImp(AliDielectronTrackCuts)

AliDielectronTrackCuts::AliDielectronTrackCuts() :
  AliAnalysisCuts(),
  fV0DaughterCut(0),
  fNegateV0DauterCut(kFALSE),
  fITSclusterBitMap(0),
  fITSclusterCutType(kOneOf),
  fRequireITSRefit(kFALSE),
  fRequireTPCRefit(kFALSE),
  fTPCNclRobustCut(-1),
  fTPCcrossedOverFindable(-1.),
  fAODFilterBit(kSwitchOff),
  fWaiveITSNcls(-1)
{
  //
  // Default Constructor
  //

  for (Int_t i = 0; i < 3; i++)
    fCutClusterRequirementITS[i] = kOff;
  
}

//______________________________________________
AliDielectronTrackCuts::AliDielectronTrackCuts(const char* name, const char* title) :
  AliAnalysisCuts(name, title),
  fV0DaughterCut(0),
  fNegateV0DauterCut(kFALSE),
  fITSclusterBitMap(0),
  fITSclusterCutType(kOneOf),
  fRequireITSRefit(kFALSE),
  fRequireTPCRefit(kFALSE),
  fTPCNclRobustCut(-1),
  fTPCcrossedOverFindable(-1.),
  fAODFilterBit(kSwitchOff),
  fWaiveITSNcls(-1)
{
  //
  // Named Constructor
  //

  for (Int_t i = 0; i < 3; i++)
    fCutClusterRequirementITS[i] = kOff;
  
}

//______________________________________________
AliDielectronTrackCuts::~AliDielectronTrackCuts()
{
  //
  // Default Destructor
  //
  
}

//______________________________________________
Bool_t AliDielectronTrackCuts::IsSelected(TObject* track)
{
  //
  // Apply configured cuts
  //

  AliVTrack *vtrack=dynamic_cast<AliVTrack*>(track);
  if (!vtrack) return kFALSE;
  
  Bool_t accept=kTRUE;
  if (fV0DaughterCut) {
    Bool_t isV0=track->TestBit(BIT(fV0DaughterCut));
    if (fNegateV0DauterCut) isV0=!isV0;
    accept*=isV0;
  }

  //ESD track cut like ITS cluster cut
  for (Int_t i=0;i<3;++i){
    Bool_t layer1=TESTBIT(vtrack->GetITSClusterMap(),i*2);
    Bool_t layer2=TESTBIT(vtrack->GetITSClusterMap(),i*2+1);
    accept*=CheckITSClusterRequirement(fCutClusterRequirementITS[i], layer1, layer2);
  }

  //more flexible ITS cluster cut
  if (fITSclusterBitMap) accept*=CheckITSClusterCut(vtrack->GetITSClusterMap());

  //different its cluster cut
  if (fWaiveITSNcls > -1) {
    Int_t nITScls      = 0;
    Int_t requiredNcls = 7;
    for(Int_t i=5; i>=0; i--) {
      if(TESTBIT(vtrack->GetITSClusterMap(),i)) {
	nITScls++;
	requiredNcls=6-fWaiveITSNcls-i; 
      }
    }
    accept*=(requiredNcls<=nITScls);
  }

  //its and tpc refit
  if (fRequireITSRefit) accept*=(vtrack->GetStatus()&AliVTrack::kITSrefit)>0;
  if (fRequireTPCRefit) accept*=(vtrack->GetStatus()&AliVTrack::kTPCrefit)>0;

  Int_t nclr=0;
  if (fTPCNclRobustCut>0){
    nclr=TMath::Nint(vtrack->GetTPCClusterInfo(2,1));
    accept*=(nclr>fTPCNclRobustCut);
  }
  if (fTPCcrossedOverFindable > 0.) {
    if(fTPCNclRobustCut<=0) nclr=TMath::Nint(vtrack->GetTPCClusterInfo(2,1));
    Int_t tpcNclsF = vtrack->GetTPCNclsF();
    accept*=(tpcNclsF); //ESDtrackCut would return here true
    if (tpcNclsF != 0) {//'accept' already negated above in this case above
      accept*=(((Double_t)nclr/(Double_t)vtrack->GetTPCNclsF()) >= fTPCcrossedOverFindable);
    }
  }


  // use filter bit to speed up the AOD analysis (track pre-filter)
  // relevant filter bits are:
  // kTPCqual==1             -> TPC quality cuts
  // kTPCqualSPDany==4       -> + SPD any
  // kTPCqualSPDanyPIDele==8 -> + nSigmaTPCele +-3 (inclusion) 
  if (track->IsA()==AliAODTrack::Class() && fAODFilterBit!=kSwitchOff) {
    accept*=((AliAODTrack*)track)->TestFilterBit(fAODFilterBit);
  }

  return accept;
}

//______________________________________________
void AliDielectronTrackCuts::SetV0DaughterCut(AliPID::EParticleType type, Bool_t negate/*=kFALSE*/)
{
  //
  // Set V0 Daughter cut bit
  //
  const Int_t bitMap[5] = {14, -1, 15, -1, 16}; // convert the AliPID to bit positions
  fV0DaughterCut=bitMap[type];
  fNegateV0DauterCut=negate;
}

//____________________________________________________________________
Bool_t AliDielectronTrackCuts::CheckITSClusterRequirement(ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2) const
{
  // checks if the cluster requirement is fullfilled (in this case: return kTRUE)
  
  switch (req)
  {
  case kOff:        return kTRUE;
  case kNone:       return !clusterL1 && !clusterL2;
  case kAny:        return clusterL1 || clusterL2;
  case kFirst:      return clusterL1;
  case kOnlyFirst:  return clusterL1 && !clusterL2;
  case kSecond:     return clusterL2;
  case kOnlySecond: return clusterL2 && !clusterL1;
  case kBoth:       return clusterL1 && clusterL2;
  }
  
  return kFALSE;
}

//______________________________________________
Bool_t AliDielectronTrackCuts::CheckITSClusterCut(UChar_t itsBits) const
{
  // check the its cluster cut
  switch (fITSclusterCutType){
  case kOneOf:   return itsBits & fITSclusterBitMap;
  case kAtLeast: return (itsBits & fITSclusterBitMap)==fITSclusterBitMap;
  case kExact:   return (itsBits==fITSclusterBitMap);
  }
  return kTRUE;  
}
 AliDielectronTrackCuts.cxx:1
 AliDielectronTrackCuts.cxx:2
 AliDielectronTrackCuts.cxx:3
 AliDielectronTrackCuts.cxx:4
 AliDielectronTrackCuts.cxx:5
 AliDielectronTrackCuts.cxx:6
 AliDielectronTrackCuts.cxx:7
 AliDielectronTrackCuts.cxx:8
 AliDielectronTrackCuts.cxx:9
 AliDielectronTrackCuts.cxx:10
 AliDielectronTrackCuts.cxx:11
 AliDielectronTrackCuts.cxx:12
 AliDielectronTrackCuts.cxx:13
 AliDielectronTrackCuts.cxx:14
 AliDielectronTrackCuts.cxx:15
 AliDielectronTrackCuts.cxx:16
 AliDielectronTrackCuts.cxx:17
 AliDielectronTrackCuts.cxx:18
 AliDielectronTrackCuts.cxx:19
 AliDielectronTrackCuts.cxx:20
 AliDielectronTrackCuts.cxx:21
 AliDielectronTrackCuts.cxx:22
 AliDielectronTrackCuts.cxx:23
 AliDielectronTrackCuts.cxx:24
 AliDielectronTrackCuts.cxx:25
 AliDielectronTrackCuts.cxx:26
 AliDielectronTrackCuts.cxx:27
 AliDielectronTrackCuts.cxx:28
 AliDielectronTrackCuts.cxx:29
 AliDielectronTrackCuts.cxx:30
 AliDielectronTrackCuts.cxx:31
 AliDielectronTrackCuts.cxx:32
 AliDielectronTrackCuts.cxx:33
 AliDielectronTrackCuts.cxx:34
 AliDielectronTrackCuts.cxx:35
 AliDielectronTrackCuts.cxx:36
 AliDielectronTrackCuts.cxx:37
 AliDielectronTrackCuts.cxx:38
 AliDielectronTrackCuts.cxx:39
 AliDielectronTrackCuts.cxx:40
 AliDielectronTrackCuts.cxx:41
 AliDielectronTrackCuts.cxx:42
 AliDielectronTrackCuts.cxx:43
 AliDielectronTrackCuts.cxx:44
 AliDielectronTrackCuts.cxx:45
 AliDielectronTrackCuts.cxx:46
 AliDielectronTrackCuts.cxx:47
 AliDielectronTrackCuts.cxx:48
 AliDielectronTrackCuts.cxx:49
 AliDielectronTrackCuts.cxx:50
 AliDielectronTrackCuts.cxx:51
 AliDielectronTrackCuts.cxx:52
 AliDielectronTrackCuts.cxx:53
 AliDielectronTrackCuts.cxx:54
 AliDielectronTrackCuts.cxx:55
 AliDielectronTrackCuts.cxx:56
 AliDielectronTrackCuts.cxx:57
 AliDielectronTrackCuts.cxx:58
 AliDielectronTrackCuts.cxx:59
 AliDielectronTrackCuts.cxx:60
 AliDielectronTrackCuts.cxx:61
 AliDielectronTrackCuts.cxx:62
 AliDielectronTrackCuts.cxx:63
 AliDielectronTrackCuts.cxx:64
 AliDielectronTrackCuts.cxx:65
 AliDielectronTrackCuts.cxx:66
 AliDielectronTrackCuts.cxx:67
 AliDielectronTrackCuts.cxx:68
 AliDielectronTrackCuts.cxx:69
 AliDielectronTrackCuts.cxx:70
 AliDielectronTrackCuts.cxx:71
 AliDielectronTrackCuts.cxx:72
 AliDielectronTrackCuts.cxx:73
 AliDielectronTrackCuts.cxx:74
 AliDielectronTrackCuts.cxx:75
 AliDielectronTrackCuts.cxx:76
 AliDielectronTrackCuts.cxx:77
 AliDielectronTrackCuts.cxx:78
 AliDielectronTrackCuts.cxx:79
 AliDielectronTrackCuts.cxx:80
 AliDielectronTrackCuts.cxx:81
 AliDielectronTrackCuts.cxx:82
 AliDielectronTrackCuts.cxx:83
 AliDielectronTrackCuts.cxx:84
 AliDielectronTrackCuts.cxx:85
 AliDielectronTrackCuts.cxx:86
 AliDielectronTrackCuts.cxx:87
 AliDielectronTrackCuts.cxx:88
 AliDielectronTrackCuts.cxx:89
 AliDielectronTrackCuts.cxx:90
 AliDielectronTrackCuts.cxx:91
 AliDielectronTrackCuts.cxx:92
 AliDielectronTrackCuts.cxx:93
 AliDielectronTrackCuts.cxx:94
 AliDielectronTrackCuts.cxx:95
 AliDielectronTrackCuts.cxx:96
 AliDielectronTrackCuts.cxx:97
 AliDielectronTrackCuts.cxx:98
 AliDielectronTrackCuts.cxx:99
 AliDielectronTrackCuts.cxx:100
 AliDielectronTrackCuts.cxx:101
 AliDielectronTrackCuts.cxx:102
 AliDielectronTrackCuts.cxx:103
 AliDielectronTrackCuts.cxx:104
 AliDielectronTrackCuts.cxx:105
 AliDielectronTrackCuts.cxx:106
 AliDielectronTrackCuts.cxx:107
 AliDielectronTrackCuts.cxx:108
 AliDielectronTrackCuts.cxx:109
 AliDielectronTrackCuts.cxx:110
 AliDielectronTrackCuts.cxx:111
 AliDielectronTrackCuts.cxx:112
 AliDielectronTrackCuts.cxx:113
 AliDielectronTrackCuts.cxx:114
 AliDielectronTrackCuts.cxx:115
 AliDielectronTrackCuts.cxx:116
 AliDielectronTrackCuts.cxx:117
 AliDielectronTrackCuts.cxx:118
 AliDielectronTrackCuts.cxx:119
 AliDielectronTrackCuts.cxx:120
 AliDielectronTrackCuts.cxx:121
 AliDielectronTrackCuts.cxx:122
 AliDielectronTrackCuts.cxx:123
 AliDielectronTrackCuts.cxx:124
 AliDielectronTrackCuts.cxx:125
 AliDielectronTrackCuts.cxx:126
 AliDielectronTrackCuts.cxx:127
 AliDielectronTrackCuts.cxx:128
 AliDielectronTrackCuts.cxx:129
 AliDielectronTrackCuts.cxx:130
 AliDielectronTrackCuts.cxx:131
 AliDielectronTrackCuts.cxx:132
 AliDielectronTrackCuts.cxx:133
 AliDielectronTrackCuts.cxx:134
 AliDielectronTrackCuts.cxx:135
 AliDielectronTrackCuts.cxx:136
 AliDielectronTrackCuts.cxx:137
 AliDielectronTrackCuts.cxx:138
 AliDielectronTrackCuts.cxx:139
 AliDielectronTrackCuts.cxx:140
 AliDielectronTrackCuts.cxx:141
 AliDielectronTrackCuts.cxx:142
 AliDielectronTrackCuts.cxx:143
 AliDielectronTrackCuts.cxx:144
 AliDielectronTrackCuts.cxx:145
 AliDielectronTrackCuts.cxx:146
 AliDielectronTrackCuts.cxx:147
 AliDielectronTrackCuts.cxx:148
 AliDielectronTrackCuts.cxx:149
 AliDielectronTrackCuts.cxx:150
 AliDielectronTrackCuts.cxx:151
 AliDielectronTrackCuts.cxx:152
 AliDielectronTrackCuts.cxx:153
 AliDielectronTrackCuts.cxx:154
 AliDielectronTrackCuts.cxx:155
 AliDielectronTrackCuts.cxx:156
 AliDielectronTrackCuts.cxx:157
 AliDielectronTrackCuts.cxx:158
 AliDielectronTrackCuts.cxx:159
 AliDielectronTrackCuts.cxx:160
 AliDielectronTrackCuts.cxx:161
 AliDielectronTrackCuts.cxx:162
 AliDielectronTrackCuts.cxx:163
 AliDielectronTrackCuts.cxx:164
 AliDielectronTrackCuts.cxx:165
 AliDielectronTrackCuts.cxx:166
 AliDielectronTrackCuts.cxx:167
 AliDielectronTrackCuts.cxx:168
 AliDielectronTrackCuts.cxx:169
 AliDielectronTrackCuts.cxx:170
 AliDielectronTrackCuts.cxx:171
 AliDielectronTrackCuts.cxx:172
 AliDielectronTrackCuts.cxx:173
 AliDielectronTrackCuts.cxx:174
 AliDielectronTrackCuts.cxx:175
 AliDielectronTrackCuts.cxx:176
 AliDielectronTrackCuts.cxx:177
 AliDielectronTrackCuts.cxx:178
 AliDielectronTrackCuts.cxx:179
 AliDielectronTrackCuts.cxx:180
 AliDielectronTrackCuts.cxx:181
 AliDielectronTrackCuts.cxx:182
 AliDielectronTrackCuts.cxx:183
 AliDielectronTrackCuts.cxx:184
 AliDielectronTrackCuts.cxx:185
 AliDielectronTrackCuts.cxx:186
 AliDielectronTrackCuts.cxx:187
 AliDielectronTrackCuts.cxx:188
 AliDielectronTrackCuts.cxx:189
 AliDielectronTrackCuts.cxx:190
 AliDielectronTrackCuts.cxx:191
 AliDielectronTrackCuts.cxx:192
 AliDielectronTrackCuts.cxx:193
 AliDielectronTrackCuts.cxx:194
 AliDielectronTrackCuts.cxx:195
 AliDielectronTrackCuts.cxx:196
 AliDielectronTrackCuts.cxx:197
 AliDielectronTrackCuts.cxx:198
 AliDielectronTrackCuts.cxx:199
 AliDielectronTrackCuts.cxx:200
 AliDielectronTrackCuts.cxx:201
 AliDielectronTrackCuts.cxx:202
 AliDielectronTrackCuts.cxx:203