#include <THnBase.h>
#include "AliDielectronVarCuts.h"
#include "AliDielectronMC.h"
ClassImp(AliDielectronVarCuts)
AliDielectronVarCuts::AliDielectronVarCuts() :
AliAnalysisCuts(),
fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
fNActiveCuts(0),
fActiveCutsMask(0),
fSelectedCutsMask(0),
fCutOnMCtruth(kFALSE),
fCutType(kAll)
{
for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues; ++i){
fActiveCuts[i]=0;
fCutMin[i]=0;
fCutMax[i]=0;
fCutExclude[i]=kFALSE;
fBitCut[i]=kFALSE;
fUpperCut[i]=0x0;
}
}
AliDielectronVarCuts::AliDielectronVarCuts(const char* name, const char* title) :
AliAnalysisCuts(name,title),
fUsedVars(new TBits(AliDielectronVarManager::kNMaxValues)),
fNActiveCuts(0),
fActiveCutsMask(0),
fSelectedCutsMask(0),
fCutOnMCtruth(kFALSE),
fCutType(kAll)
{
for (Int_t i=0; i<AliDielectronVarManager::kNMaxValues; ++i){
fActiveCuts[i]=0;
fCutMin[i]=0;
fCutMax[i]=0;
fCutExclude[i]=kFALSE;
fBitCut[i]=kFALSE;
fUpperCut[i]=0x0;
}
}
AliDielectronVarCuts::~AliDielectronVarCuts()
{
if (fUsedVars) delete fUsedVars;
}
Bool_t AliDielectronVarCuts::IsSelected(TObject* track)
{
fSelectedCutsMask=0;
SetSelected(kFALSE);
if (!track) return kFALSE;
if (fCutOnMCtruth){
AliVParticle *part=static_cast<AliVParticle*>(track);
track=AliDielectronMC::Instance()->GetMCTrackFromMCEvent(part->GetLabel());
if (!track) return kFALSE;
}
Double_t values[AliDielectronVarManager::kNMaxValues];
AliDielectronVarManager::SetFillMap(fUsedVars);
AliDielectronVarManager::Fill(track,values);
for (Int_t iCut=0; iCut<fNActiveCuts; ++iCut){
Int_t cut=fActiveCuts[iCut];
SETBIT(fSelectedCutsMask,iCut);
if(fBitCut[iCut]) {
if ( (TESTBIT((UInt_t)values[cut],(UInt_t)fCutMin[iCut]))^(!fCutExclude[iCut]) ) CLRBIT(fSelectedCutsMask,iCut);
}
else {
if ( !fUpperCut[iCut] && ((values[cut]<fCutMin[iCut]) || (values[cut]>fCutMax[iCut]))^fCutExclude[iCut] ) {
CLRBIT(fSelectedCutsMask,iCut);
}
else if ( fUpperCut[iCut]) {
Double_t *vals = new Double_t[fUpperCut[iCut]->GetNdimensions()];
for(Int_t idim=0; idim<fUpperCut[iCut]->GetNdimensions(); idim++) {
vals[idim] = values[AliDielectronVarManager::GetValueType(fUpperCut[iCut]->GetAxis(idim)->GetName())];
}
Long_t bin = fUpperCut[iCut]->GetBin(vals,kFALSE);
Double_t cutMax = (bin>0 ? fUpperCut[iCut]->GetBinContent(bin) : -999. );
if ( ((values[cut]<fCutMin[iCut]) || (values[cut]>cutMax))^fCutExclude[iCut] ) CLRBIT(fSelectedCutsMask,iCut);
delete [] vals;
}
}
if ( fCutType==kAll && !TESTBIT(fSelectedCutsMask,iCut) ) return kFALSE;
}
Bool_t isSelected=(fSelectedCutsMask==fActiveCutsMask);
if ( fCutType==kAny ) isSelected=(fSelectedCutsMask>0);
SetSelected(isSelected);
return isSelected;
}
void AliDielectronVarCuts::AddCut(AliDielectronVarManager::ValueTypes type, Double_t min, Double_t max, Bool_t excludeRange)
{
if (min>max){
Double_t tmp=min;
min=max;
max=tmp;
}
fCutMin[fNActiveCuts]=min;
fCutMax[fNActiveCuts]=max;
fCutExclude[fNActiveCuts]=excludeRange;
SETBIT(fActiveCutsMask,fNActiveCuts);
fActiveCuts[fNActiveCuts]=(UShort_t)type;
fUsedVars->SetBitNumber(type,kTRUE);
++fNActiveCuts;
}
void AliDielectronVarCuts::AddBitCut(AliDielectronVarManager::ValueTypes type, UInt_t bit, Bool_t excludeRange)
{
fCutMin[fNActiveCuts]=bit;
fCutExclude[fNActiveCuts]=excludeRange;
fBitCut[fNActiveCuts]=kTRUE;
SETBIT(fActiveCutsMask,fNActiveCuts);
fActiveCuts[fNActiveCuts]=(UShort_t)type;
fUsedVars->SetBitNumber(type,kTRUE);
++fNActiveCuts;
}
void AliDielectronVarCuts::AddCut(AliDielectronVarManager::ValueTypes type, Double_t min, THnBase * const max, Bool_t excludeRange)
{
fCutMin[fNActiveCuts]=min;
fCutMax[fNActiveCuts]=0.0;
fCutExclude[fNActiveCuts]=excludeRange;
SETBIT(fActiveCutsMask,fNActiveCuts);
fActiveCuts[fNActiveCuts]=(UShort_t)type;
fUsedVars->SetBitNumber(type,kTRUE);
fUpperCut[fNActiveCuts]=max;
for(Int_t idim=0; idim<fUpperCut[fNActiveCuts]->GetNdimensions(); idim++) {
TString var(fUpperCut[fNActiveCuts]->GetAxis(idim)->GetName());
fUsedVars->SetBitNumber(AliDielectronVarManager::GetValueType(var.Data()), kTRUE);
}
++fNActiveCuts;
}
void AliDielectronVarCuts::Print(const Option_t* ) const
{
printf("cut ranges for '%s'\n",GetTitle());
if (fCutType==kAll){
printf("All Cuts have to be fulfilled\n");
} else {
printf("Any Cut has to be fulfilled\n");
}
for (Int_t iCut=0; iCut<fNActiveCuts; ++iCut){
Int_t cut=(Int_t)fActiveCuts[iCut];
Bool_t inverse=fCutExclude[iCut];
Bool_t bitcut=fBitCut[iCut];
Bool_t objcut=fUpperCut[iCut];
if(!bitcut && !objcut) {
if (!inverse){
printf("Cut %02d: %f < %s < %f\n", iCut,
fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), fCutMax[iCut]);
} else {
printf("Cut %02d: !(%f < %s < %f)\n", iCut,
fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), fCutMax[iCut]);
}
}
else if(bitcut) {
if (!inverse){
printf("Cut %02d: %s & (1ULL<<%d) \n", iCut,
AliDielectronVarManager::GetValueName((Int_t)cut), (UInt_t)fCutMin[iCut]);
} else {
printf("Cut %02d: !(%s & (1ULL<<%d)) \n", iCut,
AliDielectronVarManager::GetValueName((Int_t)cut), (UInt_t)fCutMin[iCut]);
}
}
else if(objcut) {
TString dep="";
for(Int_t idim=0; idim<fUpperCut[iCut]->GetNdimensions(); idim++)
dep+=Form("%s%s",(idim?",":""),fUpperCut[iCut]->GetAxis(idim)->GetName());
if (!inverse){
printf("Cut %02d: %f < %s < obj(%s)\n", iCut,
fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), dep.Data());
} else {
printf("Cut %02d: !(%f < %s < obj(%s))\n", iCut,
fCutMin[iCut], AliDielectronVarManager::GetValueName((Int_t)cut), dep.Data());
}
}
}
}
AliDielectronVarCuts.cxx:1 AliDielectronVarCuts.cxx:2 AliDielectronVarCuts.cxx:3 AliDielectronVarCuts.cxx:4 AliDielectronVarCuts.cxx:5 AliDielectronVarCuts.cxx:6 AliDielectronVarCuts.cxx:7 AliDielectronVarCuts.cxx:8 AliDielectronVarCuts.cxx:9 AliDielectronVarCuts.cxx:10 AliDielectronVarCuts.cxx:11 AliDielectronVarCuts.cxx:12 AliDielectronVarCuts.cxx:13 AliDielectronVarCuts.cxx:14 AliDielectronVarCuts.cxx:15 AliDielectronVarCuts.cxx:16 AliDielectronVarCuts.cxx:17 AliDielectronVarCuts.cxx:18 AliDielectronVarCuts.cxx:19 AliDielectronVarCuts.cxx:20 AliDielectronVarCuts.cxx:21 AliDielectronVarCuts.cxx:22 AliDielectronVarCuts.cxx:23 AliDielectronVarCuts.cxx:24 AliDielectronVarCuts.cxx:25 AliDielectronVarCuts.cxx:26 AliDielectronVarCuts.cxx:27 AliDielectronVarCuts.cxx:28 AliDielectronVarCuts.cxx:29 AliDielectronVarCuts.cxx:30 AliDielectronVarCuts.cxx:31 AliDielectronVarCuts.cxx:32 AliDielectronVarCuts.cxx:33 AliDielectronVarCuts.cxx:34 AliDielectronVarCuts.cxx:35 AliDielectronVarCuts.cxx:36 AliDielectronVarCuts.cxx:37 AliDielectronVarCuts.cxx:38 AliDielectronVarCuts.cxx:39 AliDielectronVarCuts.cxx:40 AliDielectronVarCuts.cxx:41 AliDielectronVarCuts.cxx:42 AliDielectronVarCuts.cxx:43 AliDielectronVarCuts.cxx:44 AliDielectronVarCuts.cxx:45 AliDielectronVarCuts.cxx:46 AliDielectronVarCuts.cxx:47 AliDielectronVarCuts.cxx:48 AliDielectronVarCuts.cxx:49 AliDielectronVarCuts.cxx:50 AliDielectronVarCuts.cxx:51 AliDielectronVarCuts.cxx:52 AliDielectronVarCuts.cxx:53 AliDielectronVarCuts.cxx:54 AliDielectronVarCuts.cxx:55 AliDielectronVarCuts.cxx:56 AliDielectronVarCuts.cxx:57 AliDielectronVarCuts.cxx:58 AliDielectronVarCuts.cxx:59 AliDielectronVarCuts.cxx:60 AliDielectronVarCuts.cxx:61 AliDielectronVarCuts.cxx:62 AliDielectronVarCuts.cxx:63 AliDielectronVarCuts.cxx:64 AliDielectronVarCuts.cxx:65 AliDielectronVarCuts.cxx:66 AliDielectronVarCuts.cxx:67 AliDielectronVarCuts.cxx:68 AliDielectronVarCuts.cxx:69 AliDielectronVarCuts.cxx:70 AliDielectronVarCuts.cxx:71 AliDielectronVarCuts.cxx:72 AliDielectronVarCuts.cxx:73 AliDielectronVarCuts.cxx:74 AliDielectronVarCuts.cxx:75 AliDielectronVarCuts.cxx:76 AliDielectronVarCuts.cxx:77 AliDielectronVarCuts.cxx:78 AliDielectronVarCuts.cxx:79 AliDielectronVarCuts.cxx:80 AliDielectronVarCuts.cxx:81 AliDielectronVarCuts.cxx:82 AliDielectronVarCuts.cxx:83 AliDielectronVarCuts.cxx:84 AliDielectronVarCuts.cxx:85 AliDielectronVarCuts.cxx:86 AliDielectronVarCuts.cxx:87 AliDielectronVarCuts.cxx:88 AliDielectronVarCuts.cxx:89 AliDielectronVarCuts.cxx:90 AliDielectronVarCuts.cxx:91 AliDielectronVarCuts.cxx:92 AliDielectronVarCuts.cxx:93 AliDielectronVarCuts.cxx:94 AliDielectronVarCuts.cxx:95 AliDielectronVarCuts.cxx:96 AliDielectronVarCuts.cxx:97 AliDielectronVarCuts.cxx:98 AliDielectronVarCuts.cxx:99 AliDielectronVarCuts.cxx:100 AliDielectronVarCuts.cxx:101 AliDielectronVarCuts.cxx:102 AliDielectronVarCuts.cxx:103 AliDielectronVarCuts.cxx:104 AliDielectronVarCuts.cxx:105 AliDielectronVarCuts.cxx:106 AliDielectronVarCuts.cxx:107 AliDielectronVarCuts.cxx:108 AliDielectronVarCuts.cxx:109 AliDielectronVarCuts.cxx:110 AliDielectronVarCuts.cxx:111 AliDielectronVarCuts.cxx:112 AliDielectronVarCuts.cxx:113 AliDielectronVarCuts.cxx:114 AliDielectronVarCuts.cxx:115 AliDielectronVarCuts.cxx:116 AliDielectronVarCuts.cxx:117 AliDielectronVarCuts.cxx:118 AliDielectronVarCuts.cxx:119 AliDielectronVarCuts.cxx:120 AliDielectronVarCuts.cxx:121 AliDielectronVarCuts.cxx:122 AliDielectronVarCuts.cxx:123 AliDielectronVarCuts.cxx:124 AliDielectronVarCuts.cxx:125 AliDielectronVarCuts.cxx:126 AliDielectronVarCuts.cxx:127 AliDielectronVarCuts.cxx:128 AliDielectronVarCuts.cxx:129 AliDielectronVarCuts.cxx:130 AliDielectronVarCuts.cxx:131 AliDielectronVarCuts.cxx:132 AliDielectronVarCuts.cxx:133 AliDielectronVarCuts.cxx:134 AliDielectronVarCuts.cxx:135 AliDielectronVarCuts.cxx:136 AliDielectronVarCuts.cxx:137 AliDielectronVarCuts.cxx:138 AliDielectronVarCuts.cxx:139 AliDielectronVarCuts.cxx:140 AliDielectronVarCuts.cxx:141 AliDielectronVarCuts.cxx:142 AliDielectronVarCuts.cxx:143 AliDielectronVarCuts.cxx:144 AliDielectronVarCuts.cxx:145 AliDielectronVarCuts.cxx:146 AliDielectronVarCuts.cxx:147 AliDielectronVarCuts.cxx:148 AliDielectronVarCuts.cxx:149 AliDielectronVarCuts.cxx:150 AliDielectronVarCuts.cxx:151 AliDielectronVarCuts.cxx:152 AliDielectronVarCuts.cxx:153 AliDielectronVarCuts.cxx:154 AliDielectronVarCuts.cxx:155 AliDielectronVarCuts.cxx:156 AliDielectronVarCuts.cxx:157 AliDielectronVarCuts.cxx:158 AliDielectronVarCuts.cxx:159 AliDielectronVarCuts.cxx:160 AliDielectronVarCuts.cxx:161 AliDielectronVarCuts.cxx:162 AliDielectronVarCuts.cxx:163 AliDielectronVarCuts.cxx:164 AliDielectronVarCuts.cxx:165 AliDielectronVarCuts.cxx:166 AliDielectronVarCuts.cxx:167 AliDielectronVarCuts.cxx:168 AliDielectronVarCuts.cxx:169 AliDielectronVarCuts.cxx:170 AliDielectronVarCuts.cxx:171 AliDielectronVarCuts.cxx:172 AliDielectronVarCuts.cxx:173 AliDielectronVarCuts.cxx:174 AliDielectronVarCuts.cxx:175 AliDielectronVarCuts.cxx:176 AliDielectronVarCuts.cxx:177 AliDielectronVarCuts.cxx:178 AliDielectronVarCuts.cxx:179 AliDielectronVarCuts.cxx:180 AliDielectronVarCuts.cxx:181 AliDielectronVarCuts.cxx:182 AliDielectronVarCuts.cxx:183 AliDielectronVarCuts.cxx:184 AliDielectronVarCuts.cxx:185 AliDielectronVarCuts.cxx:186 AliDielectronVarCuts.cxx:187 AliDielectronVarCuts.cxx:188 AliDielectronVarCuts.cxx:189 AliDielectronVarCuts.cxx:190 AliDielectronVarCuts.cxx:191 AliDielectronVarCuts.cxx:192 AliDielectronVarCuts.cxx:193 AliDielectronVarCuts.cxx:194 AliDielectronVarCuts.cxx:195 AliDielectronVarCuts.cxx:196 AliDielectronVarCuts.cxx:197 AliDielectronVarCuts.cxx:198 AliDielectronVarCuts.cxx:199 AliDielectronVarCuts.cxx:200 AliDielectronVarCuts.cxx:201 AliDielectronVarCuts.cxx:202 AliDielectronVarCuts.cxx:203 AliDielectronVarCuts.cxx:204 AliDielectronVarCuts.cxx:205 AliDielectronVarCuts.cxx:206 AliDielectronVarCuts.cxx:207 AliDielectronVarCuts.cxx:208 AliDielectronVarCuts.cxx:209 AliDielectronVarCuts.cxx:210 AliDielectronVarCuts.cxx:211 AliDielectronVarCuts.cxx:212 AliDielectronVarCuts.cxx:213 AliDielectronVarCuts.cxx:214 AliDielectronVarCuts.cxx:215 AliDielectronVarCuts.cxx:216 AliDielectronVarCuts.cxx:217 AliDielectronVarCuts.cxx:218 AliDielectronVarCuts.cxx:219 AliDielectronVarCuts.cxx:220 AliDielectronVarCuts.cxx:221 AliDielectronVarCuts.cxx:222 AliDielectronVarCuts.cxx:223 AliDielectronVarCuts.cxx:224 AliDielectronVarCuts.cxx:225 AliDielectronVarCuts.cxx:226 AliDielectronVarCuts.cxx:227 AliDielectronVarCuts.cxx:228 AliDielectronVarCuts.cxx:229 AliDielectronVarCuts.cxx:230 AliDielectronVarCuts.cxx:231 AliDielectronVarCuts.cxx:232 AliDielectronVarCuts.cxx:233 AliDielectronVarCuts.cxx:234 AliDielectronVarCuts.cxx:235 AliDielectronVarCuts.cxx:236 AliDielectronVarCuts.cxx:237 AliDielectronVarCuts.cxx:238 AliDielectronVarCuts.cxx:239 AliDielectronVarCuts.cxx:240 AliDielectronVarCuts.cxx:241 AliDielectronVarCuts.cxx:242 AliDielectronVarCuts.cxx:243 AliDielectronVarCuts.cxx:244 AliDielectronVarCuts.cxx:245 AliDielectronVarCuts.cxx:246 AliDielectronVarCuts.cxx:247 AliDielectronVarCuts.cxx:248 AliDielectronVarCuts.cxx:249 AliDielectronVarCuts.cxx:250 AliDielectronVarCuts.cxx:251 AliDielectronVarCuts.cxx:252 AliDielectronVarCuts.cxx:253 AliDielectronVarCuts.cxx:254 AliDielectronVarCuts.cxx:255 AliDielectronVarCuts.cxx:256 AliDielectronVarCuts.cxx:257 AliDielectronVarCuts.cxx:258 AliDielectronVarCuts.cxx:259 AliDielectronVarCuts.cxx:260 AliDielectronVarCuts.cxx:261 AliDielectronVarCuts.cxx:262 AliDielectronVarCuts.cxx:263 AliDielectronVarCuts.cxx:264 AliDielectronVarCuts.cxx:265 AliDielectronVarCuts.cxx:266 AliDielectronVarCuts.cxx:267