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

///////////////////////////////////////////////////////////////////////////
//   Cut class providing cuts for both legs in the AliDielectronPair     //
//                                                                       //
//                                                                       //
/*
Add any number of leg cuts using e.g. for leg 1
GetFilterLeg1().AddCuts(mycut)
where mycut has to inherit from AliAnalysisCuts

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

#include <TList.h>

#include "AliDielectronPair.h"
#include "AliVParticle.h"

#include "AliDielectronPairLegCuts.h"

ClassImp(AliDielectronPairLegCuts)


AliDielectronPairLegCuts::AliDielectronPairLegCuts() :
  AliAnalysisCuts(),
  fFilterLeg1("PairFilterLeg1","PairFilterLeg1"),
  fFilterLeg2("PairFilterLeg2","PairFilterLeg2"),
  fCutType(kBothLegs)
{
  //
  // Default contructor
  //
}

//________________________________________________________________________
AliDielectronPairLegCuts::AliDielectronPairLegCuts(const char* name, const char* title) :
  AliAnalysisCuts(name,title),
  fFilterLeg1("PairFilterLeg1","PairFilterLeg1"),
  fFilterLeg2("PairFilterLeg2","PairFilterLeg2"),
  fCutType(kBothLegs)
{
  //
  // Named contructor
  //
}

AliDielectronPairLegCuts::~AliDielectronPairLegCuts()
{
  //
  // Dtor
  //

  // remove all cuts in the leg2 filter which are also in the leg1 filter
  // to avoid doule deletion
  TIter nextCut(fFilterLeg1.GetCuts());
  TObject *o=0x0;
  while ( (o=nextCut()) ) fFilterLeg2.GetCuts()->Remove(o);
}

//________________________________________________________________________
Bool_t AliDielectronPairLegCuts::IsSelected(TObject* track)
{
  //
  // check if cuts are fulfilled
  //
  
  //check if we have a AliDielectronPair
  AliDielectronPair *pair=dynamic_cast<AliDielectronPair*>(track);
  if (!pair) return kFALSE;

  //get both legs
  AliVParticle *leg1=pair->GetFirstDaughterP();
  AliVParticle *leg2=pair->GetSecondDaughterP();

  //mask used to require that all cuts are fulfilled
  UInt_t selectedMaskLeg1=(1<<fFilterLeg1.GetCuts()->GetEntries())-1;
  UInt_t selectedMaskLeg2=(1<<fFilterLeg2.GetCuts()->GetEntries())-1;
  
  //test cuts
  Bool_t isLeg1selected=(fFilterLeg1.IsSelected(leg1)==selectedMaskLeg1);
  if(fCutType==kBothLegs && !isLeg1selected) {
    SetSelected(isLeg1selected);
    return isLeg1selected;
  }
  Bool_t isLeg2selected=(fFilterLeg2.IsSelected(leg2)==selectedMaskLeg2);
  
  Bool_t isLeg1selectedMirror=(fFilterLeg1.IsSelected(leg2)==selectedMaskLeg1);
  Bool_t isLeg2selectedMirror=(fFilterLeg2.IsSelected(leg1)==selectedMaskLeg2);
  
  Bool_t isSelected=isLeg1selected&&isLeg2selected;
  if (fCutType==kAnyLeg)
    isSelected=isLeg1selected||isLeg2selected;
  
  if (fCutType==kMixLegs)
    isSelected=(isLeg1selected&&isLeg2selected)||(isLeg1selectedMirror&&isLeg2selectedMirror);
  
  SetSelected(isSelected);
  return isSelected;
}



 AliDielectronPairLegCuts.cxx:1
 AliDielectronPairLegCuts.cxx:2
 AliDielectronPairLegCuts.cxx:3
 AliDielectronPairLegCuts.cxx:4
 AliDielectronPairLegCuts.cxx:5
 AliDielectronPairLegCuts.cxx:6
 AliDielectronPairLegCuts.cxx:7
 AliDielectronPairLegCuts.cxx:8
 AliDielectronPairLegCuts.cxx:9
 AliDielectronPairLegCuts.cxx:10
 AliDielectronPairLegCuts.cxx:11
 AliDielectronPairLegCuts.cxx:12
 AliDielectronPairLegCuts.cxx:13
 AliDielectronPairLegCuts.cxx:14
 AliDielectronPairLegCuts.cxx:15
 AliDielectronPairLegCuts.cxx:16
 AliDielectronPairLegCuts.cxx:17
 AliDielectronPairLegCuts.cxx:18
 AliDielectronPairLegCuts.cxx:19
 AliDielectronPairLegCuts.cxx:20
 AliDielectronPairLegCuts.cxx:21
 AliDielectronPairLegCuts.cxx:22
 AliDielectronPairLegCuts.cxx:23
 AliDielectronPairLegCuts.cxx:24
 AliDielectronPairLegCuts.cxx:25
 AliDielectronPairLegCuts.cxx:26
 AliDielectronPairLegCuts.cxx:27
 AliDielectronPairLegCuts.cxx:28
 AliDielectronPairLegCuts.cxx:29
 AliDielectronPairLegCuts.cxx:30
 AliDielectronPairLegCuts.cxx:31
 AliDielectronPairLegCuts.cxx:32
 AliDielectronPairLegCuts.cxx:33
 AliDielectronPairLegCuts.cxx:34
 AliDielectronPairLegCuts.cxx:35
 AliDielectronPairLegCuts.cxx:36
 AliDielectronPairLegCuts.cxx:37
 AliDielectronPairLegCuts.cxx:38
 AliDielectronPairLegCuts.cxx:39
 AliDielectronPairLegCuts.cxx:40
 AliDielectronPairLegCuts.cxx:41
 AliDielectronPairLegCuts.cxx:42
 AliDielectronPairLegCuts.cxx:43
 AliDielectronPairLegCuts.cxx:44
 AliDielectronPairLegCuts.cxx:45
 AliDielectronPairLegCuts.cxx:46
 AliDielectronPairLegCuts.cxx:47
 AliDielectronPairLegCuts.cxx:48
 AliDielectronPairLegCuts.cxx:49
 AliDielectronPairLegCuts.cxx:50
 AliDielectronPairLegCuts.cxx:51
 AliDielectronPairLegCuts.cxx:52
 AliDielectronPairLegCuts.cxx:53
 AliDielectronPairLegCuts.cxx:54
 AliDielectronPairLegCuts.cxx:55
 AliDielectronPairLegCuts.cxx:56
 AliDielectronPairLegCuts.cxx:57
 AliDielectronPairLegCuts.cxx:58
 AliDielectronPairLegCuts.cxx:59
 AliDielectronPairLegCuts.cxx:60
 AliDielectronPairLegCuts.cxx:61
 AliDielectronPairLegCuts.cxx:62
 AliDielectronPairLegCuts.cxx:63
 AliDielectronPairLegCuts.cxx:64
 AliDielectronPairLegCuts.cxx:65
 AliDielectronPairLegCuts.cxx:66
 AliDielectronPairLegCuts.cxx:67
 AliDielectronPairLegCuts.cxx:68
 AliDielectronPairLegCuts.cxx:69
 AliDielectronPairLegCuts.cxx:70
 AliDielectronPairLegCuts.cxx:71
 AliDielectronPairLegCuts.cxx:72
 AliDielectronPairLegCuts.cxx:73
 AliDielectronPairLegCuts.cxx:74
 AliDielectronPairLegCuts.cxx:75
 AliDielectronPairLegCuts.cxx:76
 AliDielectronPairLegCuts.cxx:77
 AliDielectronPairLegCuts.cxx:78
 AliDielectronPairLegCuts.cxx:79
 AliDielectronPairLegCuts.cxx:80
 AliDielectronPairLegCuts.cxx:81
 AliDielectronPairLegCuts.cxx:82
 AliDielectronPairLegCuts.cxx:83
 AliDielectronPairLegCuts.cxx:84
 AliDielectronPairLegCuts.cxx:85
 AliDielectronPairLegCuts.cxx:86
 AliDielectronPairLegCuts.cxx:87
 AliDielectronPairLegCuts.cxx:88
 AliDielectronPairLegCuts.cxx:89
 AliDielectronPairLegCuts.cxx:90
 AliDielectronPairLegCuts.cxx:91
 AliDielectronPairLegCuts.cxx:92
 AliDielectronPairLegCuts.cxx:93
 AliDielectronPairLegCuts.cxx:94
 AliDielectronPairLegCuts.cxx:95
 AliDielectronPairLegCuts.cxx:96
 AliDielectronPairLegCuts.cxx:97
 AliDielectronPairLegCuts.cxx:98
 AliDielectronPairLegCuts.cxx:99
 AliDielectronPairLegCuts.cxx:100
 AliDielectronPairLegCuts.cxx:101
 AliDielectronPairLegCuts.cxx:102
 AliDielectronPairLegCuts.cxx:103
 AliDielectronPairLegCuts.cxx:104
 AliDielectronPairLegCuts.cxx:105
 AliDielectronPairLegCuts.cxx:106
 AliDielectronPairLegCuts.cxx:107
 AliDielectronPairLegCuts.cxx:108
 AliDielectronPairLegCuts.cxx:109
 AliDielectronPairLegCuts.cxx:110
 AliDielectronPairLegCuts.cxx:111
 AliDielectronPairLegCuts.cxx:112
 AliDielectronPairLegCuts.cxx:113
 AliDielectronPairLegCuts.cxx:114
 AliDielectronPairLegCuts.cxx:115
 AliDielectronPairLegCuts.cxx:116
 AliDielectronPairLegCuts.cxx:117