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){
72 fCutExclude[i]=kFALSE;
76 //________________________________________________________________________
77 AliDielectronVarCuts::~AliDielectronVarCuts()
84 //________________________________________________________________________
85 Bool_t AliDielectronVarCuts::IsSelected(TObject* track)
95 if (!track) return kFALSE;
97 //If MC cut, get MC truth
99 AliVParticle *part=static_cast<AliVParticle*>(track);
100 track=AliDielectronMC::Instance()->GetMCTrackFromMCEvent(part->GetLabel());
101 if (!track) return kFALSE;
105 Double_t values[AliDielectronVarManager::kNMaxValues];
106 AliDielectronVarManager::Fill(track,values);
108 for (Int_t iCut=0; iCut<fNActiveCuts; ++iCut){
109 Int_t cut=fActiveCuts[iCut];
110 SETBIT(fSelectedCutsMask,iCut);
111 if ( ((values[cut]<fCutMin[iCut]) || (values[cut]>fCutMax[iCut]))^fCutExclude[iCut] ) CLRBIT(fSelectedCutsMask,iCut);
112 if ( fCutType==kAll && !TESTBIT(fSelectedCutsMask,iCut) ) return kFALSE; // option to (minor) speed improvement
115 Bool_t isSelected=(fSelectedCutsMask==fActiveCutsMask);
116 if ( fCutType==kAny ) isSelected=(fSelectedCutsMask>0);
117 SetSelected(isSelected);
121 //________________________________________________________________________
122 void AliDielectronVarCuts::AddCut(AliDielectronVarManager::ValueTypes type, Double_t min, Double_t max, Bool_t excludeRange)
125 // Set cut range and activate it
132 fCutMin[fNActiveCuts]=min;
133 fCutMax[fNActiveCuts]=max;
134 fCutExclude[fNActiveCuts]=excludeRange;
135 SETBIT(fActiveCutsMask,fNActiveCuts);
136 fActiveCuts[fNActiveCuts]=(UShort_t)type;
140 //________________________________________________________________________
141 void AliDielectronVarCuts::Print(const Option_t* /*option*/) const
144 // Print cuts and the range
146 printf("cut ranges for '%s'\n",GetTitle());
148 printf("All Cuts have to be fulfilled\n");
150 printf("Any Cut has to be fulfilled\n");
152 for (Int_t iCut=0; iCut<fNActiveCuts; ++iCut){
153 Int_t cut=(Int_t)fActiveCuts[iCut];
154 Bool_t inverse=fCutExclude[iCut];
157 printf("Cut %02d: %f < %s < %f\n", iCut,
158 fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), fCutMax[iCut]);
160 printf("Cut %02d: !(%f < %s < %f)\n", iCut,
161 fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), fCutMax[iCut]);