1 /*************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ///////////////////////////////////////////////////////////////////////////
17 // Cut class providing cuts to all infomation //
18 // available for the AliVParticle interface // //
21 // Jens Wiechula <Jens.Wiechula@cern.ch> //
28 ///////////////////////////////////////////////////////////////////////////
31 #include "AliDielectronVarCuts.h"
32 #include "AliDielectronMC.h"
34 ClassImp(AliDielectronVarCuts)
37 AliDielectronVarCuts::AliDielectronVarCuts() :
42 fCutOnMCtruth(kFALSE),
48 for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues; ++i){
52 fCutExclude[i]=kFALSE;
56 //________________________________________________________________________
57 AliDielectronVarCuts::AliDielectronVarCuts(const char* name, const char* title) :
58 AliAnalysisCuts(name,title),
62 fCutOnMCtruth(kFALSE),
68 for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues; ++i){
75 //________________________________________________________________________
76 AliDielectronVarCuts::~AliDielectronVarCuts()
83 //________________________________________________________________________
84 Bool_t AliDielectronVarCuts::IsSelected(TObject* track)
94 if (!track) return kFALSE;
96 //If MC cut, get MC truth
98 AliVParticle *part=static_cast<AliVParticle*>(track);
99 track=AliDielectronMC::Instance()->GetMCTrackFromMCEvent(part->GetLabel());
100 if (!track) return kFALSE;
104 Double_t values[AliDielectronVarManager::kNMaxValues];
105 AliDielectronVarManager::Fill(track,values);
107 for (Int_t iCut=0; iCut<fNActiveCuts; ++iCut){
108 Int_t cut=fActiveCuts[iCut];
109 SETBIT(fSelectedCutsMask,iCut);
110 if ( ((values[cut]<fCutMin[iCut]) || (values[cut]>fCutMax[iCut]))^fCutExclude[iCut] ) CLRBIT(fSelectedCutsMask,iCut);
113 Bool_t isSelected=(fSelectedCutsMask==fActiveCutsMask);
114 if ( fCutType==kAny ) isSelected=(fSelectedCutsMask>0);
115 SetSelected(isSelected);
119 //________________________________________________________________________
120 void AliDielectronVarCuts::AddCut(AliDielectronVarManager::ValueTypes type, Double_t min, Double_t max, Bool_t excludeRange)
123 // Set cut range and activate it
130 fCutMin[fNActiveCuts]=min;
131 fCutMax[fNActiveCuts]=max;
132 fCutExclude[fNActiveCuts]=excludeRange;
133 SETBIT(fActiveCutsMask,fNActiveCuts);
134 fActiveCuts[fNActiveCuts]=(UShort_t)type;
138 //________________________________________________________________________
139 void AliDielectronVarCuts::Print(const Option_t* /*option*/) const
142 // Print cuts and the range
144 printf("cut ranges for '%s'\n",GetTitle());
146 printf("All Cuts have to be fulfilled\n");
148 printf("Any Cut has to be fulfilled\n");
150 for (Int_t iCut=0; iCut<fNActiveCuts; ++iCut){
151 Int_t cut=(Int_t)fActiveCuts[iCut];
152 Bool_t inverse=fCutExclude[iCut];
155 printf("Cut %02d: %f < %s < %f\n", iCut,
156 fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), fCutMax[iCut]);
158 printf("Cut %02d: !(%f < %s < %f)\n", iCut,
159 fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), fCutMax[iCut]);