ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2008, ALICE Experiment at CERN, all rights reserved. *
 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
 * full copyright notice.                                                 *
 **************************************************************************/

////////////////////////////////////////////////////////////////////////////
//
//  AliEveEventSelector class
//  selects events according to given criteria
//
//  origin: Mikolaj Krzewicki, Nikhef, Mikolaj.Krzewicki@cern.ch
//
////////////////////////////////////////////////////////////////////////////

#include "AliEveEventSelector.h"
#include "AliEveEventManager.h"
#include "AliESD.h"
#include "AliESDEvent.h"
#include "AliESDRun.h"
#include <TEntryList.h>
#include <TDirectory.h>
#include <TTree.h>
#include <TObjArray.h>
#include <TRegexp.h>
#include <TROOT.h>

ClassImp(AliEveEventSelector)

//_____________________________________________________________________________
AliEveEventSelector::AliEveEventSelector(AliEveEventManager* evman):
    fPEventManager(evman),
    fWrapAround(kFALSE),
    fSelectOnString(kFALSE),
    fString(""),
    fPEntryList(0),
    fEntryListId(0),
    fLastTreeSize(-1),
    fSelectOnTriggerType(kFALSE),
    fTriggerType(""),
    fSelectOnTriggerString(kFALSE),
    fTriggerSelectionString(""),
    fTriggerMaskPatternString("trgmask"),
    fSelectOnMultiplicity(kFALSE),
    fMultiplicityLow(0),
    fMultiplicityHigh(0)
{
    //ctor
}

//_____________________________________________________________________________
void AliEveEventSelector::SetSelectionString( const TString& str )
{
    //selection string setter
    //takes care of producing a list of entries passing selection

    TTree* pESDTree    = fPEventManager->GetESDTree();
    TTree* pHLTESDTree = fPEventManager->GetHLTESDTree();
    if ((!pESDTree && !pHLTESDTree) || fString==str) return;//don't waist time
    fString = str;
    if (str == "" ) return;//on reset don't recalculate

    if(pESDTree!=0)    pESDTree->Draw( ">>listofentries", fString, "entrylist");
    if(pHLTESDTree!=0) pHLTESDTree->Draw( ">>listofentries", fString, "entrylist");

    fPEntryList = dynamic_cast<TEntryList*>(gDirectory->Get("listofentries"));
}

//_____________________________________________________________________________
void AliEveEventSelector::SetSelectionString( const char* str )
{
    //selection string setter

    TString ts = str;
    SetSelectionString(ts);
}

//_____________________________________________________________________________
void AliEveEventSelector::SetTriggerType( const TString& type )
{
    //trigger type setter

    fTriggerType = type;
}

//_____________________________________________________________________________
void AliEveEventSelector::SetTriggerType( const char* type)
{
    //trigger type setter

    TString ts = type;
    SetTriggerType(ts);
}

//_____________________________________________________________________________
void AliEveEventSelector::UpdateEntryList()
{
    //update the entrylist from if file changed

    TTree* pESDTree = fPEventManager->GetESDTree();
    TTree* pHLTESDTree = fPEventManager->GetHLTESDTree();

    if (!pESDTree && !pHLTESDTree) return;

    Long64_t treesize = fPEventManager->GetMaxEventId()+1;
    if (treesize<=fLastTreeSize) return; //nothing changed, do nothing


    if(pESDTree) pESDTree->Draw(">>+fPEntryList", fString, "entrylist", fLastTreeSize+1, treesize-fLastTreeSize );
    if(pHLTESDTree) pHLTESDTree->Draw(">>+fPEntryList", fString, "entrylist", fLastTreeSize+1, treesize-fLastTreeSize );

    fLastTreeSize = treesize;
}

//_____________________________________________________________________________
void AliEveEventSelector::Update()
{
    //refresh stuff

    UpdateEntryList();
}

//_____________________________________________________________________________
Bool_t AliEveEventSelector::FindNext( Int_t& output )
{
    //does the magick of selecting the next event

    static const TEveException kEH("AliEveEventSelector::GetNext ");

    TTree* pESDTree = fPEventManager->GetESDTree();
    TTree* pHLTESDTree = fPEventManager->GetHLTESDTree();

    if (!pESDTree && !pHLTESDTree) return kFALSE;

    Bool_t OfflineHasNext=kFALSE;
    Bool_t HLTHasNext=kFALSE;

    if(pESDTree)   OfflineHasNext = FindNextInTree(pESDTree, output);
    if(pHLTESDTree)HLTHasNext = FindNextInTree(pHLTESDTree,output);

    return (OfflineHasNext | HLTHasNext);
}

Bool_t AliEveEventSelector::FindNextInTree(TTree* tree, Int_t& output)
{
    if(!tree) return kFALSE;

    static const TEveException kEH("AliEveEventSelector::FindNextInTree ");

    AliESDEvent* pESDEvent = fPEventManager->GetESD();
    Int_t eventId = fPEventManager->GetEventId();
    Int_t fMaxEventId = fPEventManager->GetMaxEventId();

    if (!fSelectOnString)
    {
        // pure non-string
        for (Int_t i = eventId+1; i<fMaxEventId+1; i++)
        {
            if (tree->GetEntry(i) <= 0)
                throw (kEH + "failed getting required event from ESD.");
            if (CheckOtherSelection(pESDEvent))
            {
                output = i;
                return kTRUE;
            }
        }
        if (!fWrapAround) return kFALSE;
        for (Int_t i = 0; i<eventId+1; i++)
        {
            if (tree->GetEntry(i) <= 0)
                throw (kEH + "failed getting required event from ESD.");
            if (CheckOtherSelection(pESDEvent))
            {
                output = i;
                return kTRUE;
            }
        }
        return kFALSE;
    }
    else
    {
        //select using the entrylist
        UpdateEntryList(); //update entry list if tree got bigger
        for (Long64_t i=fEntryListId+1; i<fPEntryList->GetN(); i++ )
        {
            Long64_t entry = fPEntryList->GetEntry(i);
            if (tree->GetEntry(entry) <= 0)
                throw (kEH + "failed getting required event from ESD.");
            if (CheckOtherSelection(pESDEvent))
            {
                output = entry;
                fEntryListId = i;
                return kTRUE;
            }
        }
        if (!fWrapAround) return kFALSE;
        for (Long64_t i=0; i<fEntryListId+1; i++ )
        {
            Long64_t entry = fPEntryList->GetEntry(i);
            if (tree->GetEntry(entry) <= 0)
                throw (kEH + "failed getting required event from ESD.");
            if (CheckOtherSelection(pESDEvent))
            {
                output = entry;
                fEntryListId=i;
                return kTRUE;
            }
        }
        return kFALSE;
    }
    return kFALSE;

}

//_____________________________________________________________________________
Bool_t AliEveEventSelector::FindPrev( Int_t& output )
{
    //does the magick of selecting the previous event
    TTree* pESDTree = fPEventManager->GetESDTree();
    TTree* pHLTESDTree = fPEventManager->GetHLTESDTree();

    if (!pESDTree && !pHLTESDTree) return kFALSE;

    Bool_t OfflineHasNext=kFALSE;
    Bool_t HLTHasNext=kFALSE;

    if(pESDTree)    OfflineHasNext = FindPrevInTree(pESDTree, output);
    if(pHLTESDTree) HLTHasNext = FindPrevInTree(pHLTESDTree,output);

    return (OfflineHasNext | HLTHasNext);
}


Bool_t AliEveEventSelector::FindPrevInTree(TTree* tree, Int_t& output)
{
    static const TEveException kEH("AliEveEventSelector::FindPrevInTree ");

    AliESDEvent* pESDEvent = fPEventManager->GetESD();
    Int_t eventId = fPEventManager->GetEventId();
    Int_t fMaxEventId = fPEventManager->GetMaxEventId();

    if (!fSelectOnString)
    {
        // pure non-string
        for (Int_t i = eventId-1; i>-1; i--)
        {
            if (tree->GetEntry(i) <= 0)
                throw (kEH + "failed getting required event from ESD.");
            if (CheckOtherSelection(pESDEvent))
            {
                output = i;
                return kTRUE;
            }
        }
        if (!fWrapAround) return kFALSE;
        for (Int_t i = fMaxEventId; i>eventId-1; i--)
        {
            if (tree->GetEntry(i) <= 0)
                throw (kEH + "failed getting required event from ESD.");
            if (CheckOtherSelection(pESDEvent))
            {
                output = i;
                return kTRUE;
            }
        }
        return kFALSE;
    }
    else
    {
        //select using the entrylist
        for (Long64_t i=fEntryListId-1; i>-1; i--)
        {
            Long64_t entry = fPEntryList->GetEntry(i);
            if (tree->GetEntry(entry) <= 0)
                throw (kEH + "failed getting required event from ESD.");
            if (CheckOtherSelection(pESDEvent))
            {
                output = entry;
                fEntryListId = i;
                return kTRUE;
            }
        }
        if (!fWrapAround) return kFALSE;
        for (Long64_t i=fPEntryList->GetN()-1; i>fEntryListId-1; i--)
        {
            Long64_t entry = fPEntryList->GetEntry(i);
            if (tree->GetEntry(entry) <= 0)
                throw (kEH + "failed getting required event from ESD.");
            if (CheckOtherSelection(pESDEvent))
            {
                output = entry;
                fEntryListId=i;
                return kTRUE;
            }
        }
        return kFALSE;
    }
    return kFALSE;
}

//_____________________________________________________________________________
Bool_t AliEveEventSelector::CheckOtherSelection( AliESDEvent* pESDEvent )
{
    //checks the event for any other hardcoded selection criteria

    Bool_t ret=kTRUE;

    //trigger stuff
    if (fSelectOnTriggerType)
    {
        TString firedtrclasses = pESDEvent->GetFiredTriggerClasses();
        if (!(firedtrclasses.Contains(fTriggerType))) return kFALSE;
        //if (!pESDEvent->IsTriggerClassFired(fTriggerType.Data())) return kFALSE;
    }

    if (fSelectOnMultiplicity)
    {
        Int_t mult = pESDEvent->GetNumberOfTracks();
        Int_t mhigh = (fMultiplicityHigh==0)?100000000:fMultiplicityHigh;
        if (mult<fMultiplicityLow || mult>mhigh) return kFALSE;
    }

    if (fSelectOnTriggerString)
    {
        ULong64_t triggermask = pESDEvent->GetTriggerMask();
        TString triggermaskstr;
        triggermaskstr += triggermask;
        TString selstr(fTriggerSelectionString); //make copy
        selstr.ReplaceAll(fTriggerMaskPatternString,triggermaskstr);
        //Int_t returncode;
        Bool_t result = static_cast<Bool_t>(gROOT->ProcessLine(selstr));//,&returncode));
        //if (!returncode) return kFALSE;
        if (!result) return kFALSE;
    }

    return ret;
}

//_____________________________________________________________________________
void AliEveEventSelector::SetTriggerSelectionString( TString str )
{
    //parses and sets the trigger selection formula

    const AliESDRun* run = fPEventManager->GetESD()->GetESDRun();
    for (Int_t i=0; i<run->kNTriggerClasses; i++)
    {
        TString name(run->GetTriggerClass(i));
        if (name.IsNull()) continue;
        TString valuestr("(");
        valuestr += fTriggerMaskPatternString;
        valuestr += "&";
        valuestr += static_cast<ULong64_t>(1)<<i;
        valuestr += ")";
        str.ReplaceAll(name,valuestr);
    }//for i
    fTriggerSelectionString = str;
}

 AliEveEventSelector.cxx:1
 AliEveEventSelector.cxx:2
 AliEveEventSelector.cxx:3
 AliEveEventSelector.cxx:4
 AliEveEventSelector.cxx:5
 AliEveEventSelector.cxx:6
 AliEveEventSelector.cxx:7
 AliEveEventSelector.cxx:8
 AliEveEventSelector.cxx:9
 AliEveEventSelector.cxx:10
 AliEveEventSelector.cxx:11
 AliEveEventSelector.cxx:12
 AliEveEventSelector.cxx:13
 AliEveEventSelector.cxx:14
 AliEveEventSelector.cxx:15
 AliEveEventSelector.cxx:16
 AliEveEventSelector.cxx:17
 AliEveEventSelector.cxx:18
 AliEveEventSelector.cxx:19
 AliEveEventSelector.cxx:20
 AliEveEventSelector.cxx:21
 AliEveEventSelector.cxx:22
 AliEveEventSelector.cxx:23
 AliEveEventSelector.cxx:24
 AliEveEventSelector.cxx:25
 AliEveEventSelector.cxx:26
 AliEveEventSelector.cxx:27
 AliEveEventSelector.cxx:28
 AliEveEventSelector.cxx:29
 AliEveEventSelector.cxx:30
 AliEveEventSelector.cxx:31
 AliEveEventSelector.cxx:32
 AliEveEventSelector.cxx:33
 AliEveEventSelector.cxx:34
 AliEveEventSelector.cxx:35
 AliEveEventSelector.cxx:36
 AliEveEventSelector.cxx:37
 AliEveEventSelector.cxx:38
 AliEveEventSelector.cxx:39
 AliEveEventSelector.cxx:40
 AliEveEventSelector.cxx:41
 AliEveEventSelector.cxx:42
 AliEveEventSelector.cxx:43
 AliEveEventSelector.cxx:44
 AliEveEventSelector.cxx:45
 AliEveEventSelector.cxx:46
 AliEveEventSelector.cxx:47
 AliEveEventSelector.cxx:48
 AliEveEventSelector.cxx:49
 AliEveEventSelector.cxx:50
 AliEveEventSelector.cxx:51
 AliEveEventSelector.cxx:52
 AliEveEventSelector.cxx:53
 AliEveEventSelector.cxx:54
 AliEveEventSelector.cxx:55
 AliEveEventSelector.cxx:56
 AliEveEventSelector.cxx:57
 AliEveEventSelector.cxx:58
 AliEveEventSelector.cxx:59
 AliEveEventSelector.cxx:60
 AliEveEventSelector.cxx:61
 AliEveEventSelector.cxx:62
 AliEveEventSelector.cxx:63
 AliEveEventSelector.cxx:64
 AliEveEventSelector.cxx:65
 AliEveEventSelector.cxx:66
 AliEveEventSelector.cxx:67
 AliEveEventSelector.cxx:68
 AliEveEventSelector.cxx:69
 AliEveEventSelector.cxx:70
 AliEveEventSelector.cxx:71
 AliEveEventSelector.cxx:72
 AliEveEventSelector.cxx:73
 AliEveEventSelector.cxx:74
 AliEveEventSelector.cxx:75
 AliEveEventSelector.cxx:76
 AliEveEventSelector.cxx:77
 AliEveEventSelector.cxx:78
 AliEveEventSelector.cxx:79
 AliEveEventSelector.cxx:80
 AliEveEventSelector.cxx:81
 AliEveEventSelector.cxx:82
 AliEveEventSelector.cxx:83
 AliEveEventSelector.cxx:84
 AliEveEventSelector.cxx:85
 AliEveEventSelector.cxx:86
 AliEveEventSelector.cxx:87
 AliEveEventSelector.cxx:88
 AliEveEventSelector.cxx:89
 AliEveEventSelector.cxx:90
 AliEveEventSelector.cxx:91
 AliEveEventSelector.cxx:92
 AliEveEventSelector.cxx:93
 AliEveEventSelector.cxx:94
 AliEveEventSelector.cxx:95
 AliEveEventSelector.cxx:96
 AliEveEventSelector.cxx:97
 AliEveEventSelector.cxx:98
 AliEveEventSelector.cxx:99
 AliEveEventSelector.cxx:100
 AliEveEventSelector.cxx:101
 AliEveEventSelector.cxx:102
 AliEveEventSelector.cxx:103
 AliEveEventSelector.cxx:104
 AliEveEventSelector.cxx:105
 AliEveEventSelector.cxx:106
 AliEveEventSelector.cxx:107
 AliEveEventSelector.cxx:108
 AliEveEventSelector.cxx:109
 AliEveEventSelector.cxx:110
 AliEveEventSelector.cxx:111
 AliEveEventSelector.cxx:112
 AliEveEventSelector.cxx:113
 AliEveEventSelector.cxx:114
 AliEveEventSelector.cxx:115
 AliEveEventSelector.cxx:116
 AliEveEventSelector.cxx:117
 AliEveEventSelector.cxx:118
 AliEveEventSelector.cxx:119
 AliEveEventSelector.cxx:120
 AliEveEventSelector.cxx:121
 AliEveEventSelector.cxx:122
 AliEveEventSelector.cxx:123
 AliEveEventSelector.cxx:124
 AliEveEventSelector.cxx:125
 AliEveEventSelector.cxx:126
 AliEveEventSelector.cxx:127
 AliEveEventSelector.cxx:128
 AliEveEventSelector.cxx:129
 AliEveEventSelector.cxx:130
 AliEveEventSelector.cxx:131
 AliEveEventSelector.cxx:132
 AliEveEventSelector.cxx:133
 AliEveEventSelector.cxx:134
 AliEveEventSelector.cxx:135
 AliEveEventSelector.cxx:136
 AliEveEventSelector.cxx:137
 AliEveEventSelector.cxx:138
 AliEveEventSelector.cxx:139
 AliEveEventSelector.cxx:140
 AliEveEventSelector.cxx:141
 AliEveEventSelector.cxx:142
 AliEveEventSelector.cxx:143
 AliEveEventSelector.cxx:144
 AliEveEventSelector.cxx:145
 AliEveEventSelector.cxx:146
 AliEveEventSelector.cxx:147
 AliEveEventSelector.cxx:148
 AliEveEventSelector.cxx:149
 AliEveEventSelector.cxx:150
 AliEveEventSelector.cxx:151
 AliEveEventSelector.cxx:152
 AliEveEventSelector.cxx:153
 AliEveEventSelector.cxx:154
 AliEveEventSelector.cxx:155
 AliEveEventSelector.cxx:156
 AliEveEventSelector.cxx:157
 AliEveEventSelector.cxx:158
 AliEveEventSelector.cxx:159
 AliEveEventSelector.cxx:160
 AliEveEventSelector.cxx:161
 AliEveEventSelector.cxx:162
 AliEveEventSelector.cxx:163
 AliEveEventSelector.cxx:164
 AliEveEventSelector.cxx:165
 AliEveEventSelector.cxx:166
 AliEveEventSelector.cxx:167
 AliEveEventSelector.cxx:168
 AliEveEventSelector.cxx:169
 AliEveEventSelector.cxx:170
 AliEveEventSelector.cxx:171
 AliEveEventSelector.cxx:172
 AliEveEventSelector.cxx:173
 AliEveEventSelector.cxx:174
 AliEveEventSelector.cxx:175
 AliEveEventSelector.cxx:176
 AliEveEventSelector.cxx:177
 AliEveEventSelector.cxx:178
 AliEveEventSelector.cxx:179
 AliEveEventSelector.cxx:180
 AliEveEventSelector.cxx:181
 AliEveEventSelector.cxx:182
 AliEveEventSelector.cxx:183
 AliEveEventSelector.cxx:184
 AliEveEventSelector.cxx:185
 AliEveEventSelector.cxx:186
 AliEveEventSelector.cxx:187
 AliEveEventSelector.cxx:188
 AliEveEventSelector.cxx:189
 AliEveEventSelector.cxx:190
 AliEveEventSelector.cxx:191
 AliEveEventSelector.cxx:192
 AliEveEventSelector.cxx:193
 AliEveEventSelector.cxx:194
 AliEveEventSelector.cxx:195
 AliEveEventSelector.cxx:196
 AliEveEventSelector.cxx:197
 AliEveEventSelector.cxx:198
 AliEveEventSelector.cxx:199
 AliEveEventSelector.cxx:200
 AliEveEventSelector.cxx:201
 AliEveEventSelector.cxx:202
 AliEveEventSelector.cxx:203
 AliEveEventSelector.cxx:204
 AliEveEventSelector.cxx:205
 AliEveEventSelector.cxx:206
 AliEveEventSelector.cxx:207
 AliEveEventSelector.cxx:208
 AliEveEventSelector.cxx:209
 AliEveEventSelector.cxx:210
 AliEveEventSelector.cxx:211
 AliEveEventSelector.cxx:212
 AliEveEventSelector.cxx:213
 AliEveEventSelector.cxx:214
 AliEveEventSelector.cxx:215
 AliEveEventSelector.cxx:216
 AliEveEventSelector.cxx:217
 AliEveEventSelector.cxx:218
 AliEveEventSelector.cxx:219
 AliEveEventSelector.cxx:220
 AliEveEventSelector.cxx:221
 AliEveEventSelector.cxx:222
 AliEveEventSelector.cxx:223
 AliEveEventSelector.cxx:224
 AliEveEventSelector.cxx:225
 AliEveEventSelector.cxx:226
 AliEveEventSelector.cxx:227
 AliEveEventSelector.cxx:228
 AliEveEventSelector.cxx:229
 AliEveEventSelector.cxx:230
 AliEveEventSelector.cxx:231
 AliEveEventSelector.cxx:232
 AliEveEventSelector.cxx:233
 AliEveEventSelector.cxx:234
 AliEveEventSelector.cxx:235
 AliEveEventSelector.cxx:236
 AliEveEventSelector.cxx:237
 AliEveEventSelector.cxx:238
 AliEveEventSelector.cxx:239
 AliEveEventSelector.cxx:240
 AliEveEventSelector.cxx:241
 AliEveEventSelector.cxx:242
 AliEveEventSelector.cxx:243
 AliEveEventSelector.cxx:244
 AliEveEventSelector.cxx:245
 AliEveEventSelector.cxx:246
 AliEveEventSelector.cxx:247
 AliEveEventSelector.cxx:248
 AliEveEventSelector.cxx:249
 AliEveEventSelector.cxx:250
 AliEveEventSelector.cxx:251
 AliEveEventSelector.cxx:252
 AliEveEventSelector.cxx:253
 AliEveEventSelector.cxx:254
 AliEveEventSelector.cxx:255
 AliEveEventSelector.cxx:256
 AliEveEventSelector.cxx:257
 AliEveEventSelector.cxx:258
 AliEveEventSelector.cxx:259
 AliEveEventSelector.cxx:260
 AliEveEventSelector.cxx:261
 AliEveEventSelector.cxx:262
 AliEveEventSelector.cxx:263
 AliEveEventSelector.cxx:264
 AliEveEventSelector.cxx:265
 AliEveEventSelector.cxx:266
 AliEveEventSelector.cxx:267
 AliEveEventSelector.cxx:268
 AliEveEventSelector.cxx:269
 AliEveEventSelector.cxx:270
 AliEveEventSelector.cxx:271
 AliEveEventSelector.cxx:272
 AliEveEventSelector.cxx:273
 AliEveEventSelector.cxx:274
 AliEveEventSelector.cxx:275
 AliEveEventSelector.cxx:276
 AliEveEventSelector.cxx:277
 AliEveEventSelector.cxx:278
 AliEveEventSelector.cxx:279
 AliEveEventSelector.cxx:280
 AliEveEventSelector.cxx:281
 AliEveEventSelector.cxx:282
 AliEveEventSelector.cxx:283
 AliEveEventSelector.cxx:284
 AliEveEventSelector.cxx:285
 AliEveEventSelector.cxx:286
 AliEveEventSelector.cxx:287
 AliEveEventSelector.cxx:288
 AliEveEventSelector.cxx:289
 AliEveEventSelector.cxx:290
 AliEveEventSelector.cxx:291
 AliEveEventSelector.cxx:292
 AliEveEventSelector.cxx:293
 AliEveEventSelector.cxx:294
 AliEveEventSelector.cxx:295
 AliEveEventSelector.cxx:296
 AliEveEventSelector.cxx:297
 AliEveEventSelector.cxx:298
 AliEveEventSelector.cxx:299
 AliEveEventSelector.cxx:300
 AliEveEventSelector.cxx:301
 AliEveEventSelector.cxx:302
 AliEveEventSelector.cxx:303
 AliEveEventSelector.cxx:304
 AliEveEventSelector.cxx:305
 AliEveEventSelector.cxx:306
 AliEveEventSelector.cxx:307
 AliEveEventSelector.cxx:308
 AliEveEventSelector.cxx:309
 AliEveEventSelector.cxx:310
 AliEveEventSelector.cxx:311
 AliEveEventSelector.cxx:312
 AliEveEventSelector.cxx:313
 AliEveEventSelector.cxx:314
 AliEveEventSelector.cxx:315
 AliEveEventSelector.cxx:316
 AliEveEventSelector.cxx:317
 AliEveEventSelector.cxx:318
 AliEveEventSelector.cxx:319
 AliEveEventSelector.cxx:320
 AliEveEventSelector.cxx:321
 AliEveEventSelector.cxx:322
 AliEveEventSelector.cxx:323
 AliEveEventSelector.cxx:324
 AliEveEventSelector.cxx:325
 AliEveEventSelector.cxx:326
 AliEveEventSelector.cxx:327
 AliEveEventSelector.cxx:328
 AliEveEventSelector.cxx:329
 AliEveEventSelector.cxx:330
 AliEveEventSelector.cxx:331
 AliEveEventSelector.cxx:332
 AliEveEventSelector.cxx:333
 AliEveEventSelector.cxx:334
 AliEveEventSelector.cxx:335
 AliEveEventSelector.cxx:336
 AliEveEventSelector.cxx:337
 AliEveEventSelector.cxx:338
 AliEveEventSelector.cxx:339
 AliEveEventSelector.cxx:340
 AliEveEventSelector.cxx:341
 AliEveEventSelector.cxx:342
 AliEveEventSelector.cxx:343
 AliEveEventSelector.cxx:344
 AliEveEventSelector.cxx:345
 AliEveEventSelector.cxx:346
 AliEveEventSelector.cxx:347
 AliEveEventSelector.cxx:348
 AliEveEventSelector.cxx:349
 AliEveEventSelector.cxx:350
 AliEveEventSelector.cxx:351
 AliEveEventSelector.cxx:352
 AliEveEventSelector.cxx:353
 AliEveEventSelector.cxx:354
 AliEveEventSelector.cxx:355
 AliEveEventSelector.cxx:356
 AliEveEventSelector.cxx:357
 AliEveEventSelector.cxx:358