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);
114 Bool_t isSelected=(fSelectedCutsMask==fActiveCutsMask);
115 if ( fCutType==kAny ) isSelected=(fSelectedCutsMask>0);
116 SetSelected(isSelected);
120 //________________________________________________________________________
121 void AliDielectronVarCuts::AddCut(AliDielectronVarManager::ValueTypes type, Double_t min, Double_t max, Bool_t excludeRange)
124 // Set cut range and activate it
131 fCutMin[fNActiveCuts]=min;
132 fCutMax[fNActiveCuts]=max;
133 fCutExclude[fNActiveCuts]=excludeRange;
134 SETBIT(fActiveCutsMask,fNActiveCuts);
135 fActiveCuts[fNActiveCuts]=(UShort_t)type;
139 //________________________________________________________________________
140 void AliDielectronVarCuts::Print(const Option_t* /*option*/) const
143 // Print cuts and the range
145 printf("cut ranges for '%s'\n",GetTitle());
147 printf("All Cuts have to be fulfilled\n");
149 printf("Any Cut has to be fulfilled\n");
151 for (Int_t iCut=0; iCut<fNActiveCuts; ++iCut){
152 Int_t cut=(Int_t)fActiveCuts[iCut];
153 Bool_t inverse=fCutExclude[iCut];
156 printf("Cut %02d: %f < %s < %f\n", iCut,
157 fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), fCutMax[iCut]);
159 printf("Cut %02d: !(%f < %s < %f)\n", iCut,
160 fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), fCutMax[iCut]);