ROOT logo
// Author: Benjamin Hess   29/01/2010

/*************************************************************************
 * Copyright (C) 2009-2010, Alexandru Bercuci, Benjamin Hess.            *
 * All rights reserved.                                                  *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// AliEveListAnalyser                                                   //
//                                                                      //
// An AliEveListAnalyser is, in principal, a TEveElementList with some  //
// sophisticated features. You can add macros to this list, which then  //
// can be applied to the list of analysis objects (these objects can be //
// added to the list in the same way as for the TEveElementList, but    //
// also "by clicking" (cf. AliEveListAnaLyserEditor)).                  //
// In general, please use AddMacro(...) for this purpose.               //
// Macros that are no longer needed can be removed from the list via    //
// RemoveSelectedMacros(...). This function takes an iterator of the    //
// list of macros that are to be removed.                               //
// An entry looks like:                                                 //
// The data for each macro consists of path, name, type and the command //
// that will be used to apply the macro. This stuff is stored in a map  //
// which takes the macro name for the key and the above mentioned data  //
// in a TGeneralMacroData-object for the value.                         //
// You can get the macro type via GetMacroType(...).                    //
// To find the type of objects the macro will deal with (corresponds to //
// "YourObjectType" in the examples below) please use                   //
// GetMacroObjectType(...).                                             //
// With ApplySOSelectionMacros(...) or ApplyProcessMacros(...)          //
// respectively you can apply the macros to the track list via          //
// iterators (same style like for RemoveSelectedMacros(...)(cf. above)).//
// Selection macros (de-)select macros according to a selection rule    //
// by setting the rnr-state of the tracks.                              //
// If multiple selection macros are applied, a track is selected, if    //
// all selection macros select the track.                               //
// Process macros create data or histograms, which will be stored in    //
// a temporary file. The editor of this class will access this file     //
// and draw all the stuff within it's DrawHistos() function. The file   //
// will be deleted by the destructor.                                   //
//                                                                      //
// Currently, the following macro types are supported:                  //
// Selection macros:                                                    //
// Bool_t YourMacro(const YourObjectType*);                             //
// Bool_t YourMacro(const YourObjectType*, const YourObjectType2*);     //
//                                                                      //
// Process macros:                                                      //
// void YourMacro(const YourObjectType*, Double_t*&, Int_t&);           //
// void YourMacro(const YourObjectType*, const YourObjectType2*,        //
//                Double_t*&, Int_t&);                                  //
// TH1* YourMacro(const YourObjectType*);                               //
// TH1* YourMacro(const YourObjectType*, const YourObjectType2*);       //
//                                                                      //
// The macros which take 2 tracks are applied to all track pairs        //
// (whereby BOTH tracks of the pair have to be selected by the single   //
// track selection macros and have to be unequal, otherwise they will   //
// be skipped) that have been selected by ALL correlated tracks         //
// selection macros. The selection macros with 2 tracks do NOT affect   //
// process macros that process only a single track!                     //
//////////////////////////////////////////////////////////////////////////

#ifndef AliEveListAnalyser_H
#define AliEveListAnalyser_H

#include <TClass.h>
#include <TEveElement.h>
#include <AliEveTRDData.h>

#define SIGNATURE_ERROR           -1
#define NOT_EXIST_ERROR           -2
#define ERROR                     -3
#define UNKNOWN_OBJECT_TYPE_ERROR -4
#define WARNING                   0
#define SUCCESS                   1

#define MAX_MACRO_NAME_LENGTH     100
#define MAX_MACRO_PATH_LENGTH     300
#define MAX_APPLY_COMMAND_LENGTH  120

#define UNSETBIT(n,i)  ((n) &= ~BIT(i))


class AliEveListAnalyserEditor;
class AliTRDReconstructor;
class TClass;
class TEveManager;
class TEveSelection;
class TFile;
class TFunction;
class TH1;
class TList;
class TMap;
class TObjString;
class TPair;
class TString;
class TTreeSRedirector;

class AliEveListAnalyser: public TEveElementList
{
  friend class AliEveListAnalyserEditor;

public:
  
  enum
  {
    // Maximum length (number of characters) for a macro name:
    fkMaxMacroNameLength = MAX_MACRO_NAME_LENGTH,    
    // Maximum length (number of characters) for a macro path:
    fkMaxMacroPathLength = MAX_MACRO_PATH_LENGTH,    
    // Maximum length (number of characters) for a macro pathname:
    fkMaxMacroPathNameLength = MAX_MACRO_NAME_LENGTH + MAX_MACRO_PATH_LENGTH,  
    // Maximum length (number of characters) for "apply macro" commands in addition to the length of the name, path... 
    fkMaxApplyCommandLength = MAX_APPLY_COMMAND_LENGTH  
  };

  // Macro types
  enum AliEveListAnalyserMacroType
  {
    kUnknown = 0,
    kSingleObjectSelect = 1,
    kSingleObjectAnalyse = 2,
    kSingleObjectHisto = 3,
    kCorrelObjectSelect = 4,
    kCorrelObjectAnalyse = 5,
    kCorrelObjectHisto = 6
  };
  

  AliEveListAnalyser(const Text_t* n = "AliEveListAnalyser", const Text_t* t = "", Bool_t doColor = kFALSE);
  virtual ~AliEveListAnalyser();

  Int_t AddMacro(const Char_t* path, const Char_t* name, Bool_t forceReload = kFALSE);                      
  Bool_t AddMacroFast(const Char_t* path, const Char_t* name, AliEveListAnalyserMacroType type, TClass* objectType, TClass* objectType2);     
  Int_t AddPrimSelectedObject(TEveElement* el);
  //void AddPrimSelectedObjects();
  void AddSecSelectedSingleObjectToList(Int_t pointId);  
  virtual void AddStandardContent();                             
  Bool_t ApplyProcessMacros(const TList* selIterator, const TList* procIterator);               
  void ApplySOSelectionMacros(const TList* iterator);
  Bool_t GetConnected()             // Returns whether "adding objects by clicking" is enabled or not.
    { return fConnected;  };
  TClass* GetMacroObjectType(const Char_t* name, Int_t argNum = 1) const;

  // Returns the type of the macro of the corresponding entry (i.e. "macro.C (Path: path)"). 
  // If you have only the name and the path, you can simply use MakeMacroEntry.
  // If "UseList" is kTRUE, the type will be looked up in the internal list (very fast). But if this list
  // does not exist, you have to use kFALSE for this parameter. Then the type will be determined by the
  // prototype! NOTE: It is assumed that the macro has been compiled! If not, the return value is not
  // predictable, but normally will be kUnknown.
  // "objectType" gives the class/"type of object" of the pointer(s), the macro accepts as a parametre.
  // Note: AddMacro(Fast) will update the internal list and RemoveProcess(/Selection)Macros respectively.
  AliEveListAnalyserMacroType GetMacroType(const Char_t* name, const Char_t* objectType = "TObject", 
                                           const Char_t* objectType2 = "TObject", Bool_t UseList = kTRUE) const; 
  
  //void RemovePrimSelectedObjects();
  void RemoveSelectedMacros(const TList* iterator);
  void ResetObjectList();
  Bool_t StartAddingObjects();
  Bool_t StopAddingObjects();

protected:     
  Bool_t fConnected;                 // Connection to the TEvePointSet signal

  TList* fDataFromMacroList;         // List of macros that currently have data for histograms

  AliEveListAnalyserEditor* fEditor; // Pointer to the editor of this list

  TMap*  fMacroList;                 // Stores the names, paths, types and commands of all macros added to this list

  TTreeSRedirector *fDataTree;       // Tree containing data for histograms

  Int_t fHistoDataSelected;          // Stores the selection for the data of the histograms
  Int_t fMacroListSelected;          // Stores the selection of the macro list

  Char_t fSelectedTab;               // Holds the index of the selected tab

  Char_t GetSelectedTab() const                          // Gets the selected tab
    { return fSelectedTab;  }

  Bool_t HistoDataIsSelected(Int_t index) const          // Is entry in list selected?
    { return TESTBIT(fHistoDataSelected, index);  }  
   
  Bool_t MacroListIsSelected(Int_t index) const          // Is entry in list selected?
    { return TESTBIT(fMacroListSelected, index);  }     

  void SetHistoDataSelection(Int_t index, Bool_t set)       // Set selection of entry in list
    { if (set) SETBIT(fHistoDataSelected, index); else UNSETBIT(fHistoDataSelected, index);  }  

  void SetMacroListSelection(Int_t index, Bool_t set)       // Set selection of entry in list
    { if (set) SETBIT(fMacroListSelected, index); else UNSETBIT(fMacroListSelected, index);  }  
    
  void SetSelectedTab(Int_t index)                          // Sets the selected tab
    { fSelectedTab = (Char_t)index; }  

private:
  AliEveListAnalyser(const AliEveListAnalyser&);            // Not implemented
  AliEveListAnalyser& operator=(const AliEveListAnalyser&); // Not implemented             

  ClassDef(AliEveListAnalyser, 0);  // Class containing a list of analyse objects
};

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGeneralMacroData                                                    //
//                                                                      //
// Stores macro data which will be used by AliEveListAnalyser.          //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

class TGeneralMacroData: public TObject
{
public:
  TGeneralMacroData(const Char_t* name, const Char_t* path,                                                        // Constructor
             AliEveListAnalyser::AliEveListAnalyserMacroType type = AliEveListAnalyser::kUnknown,
             TClass* objectType = TObject::Class(), TClass* objectType2 = TObject::Class()):
    TObject(),
    fObjectType(0x0),
    fObjectType2(0x0),
    fIsSelected(kFALSE),
    fType(AliEveListAnalyser::kUnknown)
    
  {
    // The command is automatically set via type.

    SetName(name);
    SetObjectType(objectType);
    SetObjectType2(objectType2);
    SetPath(path);
    SetType(type);

    // Register the commands for each type here
    // Note: The framework will cast all data objects to "TObject*"
    // -> We need to cast to the correct type for the macro!
    switch (type)
    {
      case AliEveListAnalyser::kSingleObjectSelect:
      case AliEveListAnalyser::kSingleObjectHisto:
        SetCmd(Form("%s((%s*)automaticObject_1);", name, fObjectType->GetName()));
        break;

      case AliEveListAnalyser::kSingleObjectAnalyse:
        SetCmd(Form("%s((%s*)automaticObject_1, results, n);", name, fObjectType->GetName()));
        break;

      case AliEveListAnalyser::kCorrelObjectSelect:
      case AliEveListAnalyser::kCorrelObjectHisto:
        SetCmd(Form("%s((%s*)automaticObject_1, (%s*)automaticObject_2);", name, fObjectType->GetName(), fObjectType2->GetName()));
        break;

      case AliEveListAnalyser::kCorrelObjectAnalyse:
        SetCmd(Form("%s((%s*)automaticObject_1, (%s*)automaticObject_2, results, n);", name, fObjectType->GetName(), fObjectType2->GetName()));
        break;

      default:
        SetCmd("");
        break;
    }
  }

  const Char_t* GetCmd() const                // Returns the command that will be used to call this macro
    { return fCmd;  }
  const Char_t* GetName() const               // Returns the macro name (without ".C")
    { return fName;  }
  TClass* GetObjectType() const               // Returns the object type of the macro parameter (1st pointer)
    { return fObjectType;  }
  TClass* GetObjectType2() const              // Returns the object type of the macro parameter (2nd pointer)
    { return fObjectType2;  }
  const Char_t* GetPath() const               // Returns the path of the macro
    { return fPath;  }
  AliEveListAnalyser::AliEveListAnalyserMacroType GetType() const   // Returns the type of the macro
    { return fType;  }
  Bool_t IsProcessMacro() const               // Returns whether the macro is a process type macro or not
  {
    switch (fType)
    {
      case AliEveListAnalyser::kSingleObjectAnalyse:
      case AliEveListAnalyser::kSingleObjectHisto:
      case AliEveListAnalyser::kCorrelObjectAnalyse:
      case AliEveListAnalyser::kCorrelObjectHisto:
        return kTRUE;
        break;
      default:
        break;
    }
    
    return kFALSE;
  }

  Bool_t IsSelected() const                   // Returns whether the macro is selected or not
    { return fIsSelected; }
  Bool_t IsSelectionMacro() const             // Returns whether the macro is a selection type macro or not
  {
    switch (fType)
    {
      case AliEveListAnalyser::kSingleObjectSelect:
      case AliEveListAnalyser::kCorrelObjectSelect:
        return kTRUE;
        break;
      default:
        break;
    }
    
    return kFALSE;
  }

  void SetCmd(const char* newCmd)               // Sets the command that will be used to call this macro
  { 
    memset(fCmd, '\0', sizeof(Char_t) * MAX_APPLY_COMMAND_LENGTH);
    snprintf(fCmd, MAX_APPLY_COMMAND_LENGTH, "%s", newCmd);
  }
  void SetName(const char* newName)             // Sets the macro name (please use without ".C")
  { 
    memset(fName, '\0', sizeof(Char_t) * MAX_MACRO_NAME_LENGTH);
    snprintf(fName, MAX_MACRO_NAME_LENGTH, "%s", newName);
  }
  void SetObjectType(TClass* newObjectType)     // Sets the object type of the macro parameter (1st pointer)
  { 
    fObjectType = newObjectType;
  }
  void SetObjectType2(TClass* newObjectType2)   // Sets the object type of the macro parameter (2nd pointer)
  { 
    fObjectType2 = newObjectType2;
  }
  void SetPath(const char* newPath)             // Sets the path of the macro
  { 
    memset(fPath, '\0', sizeof(Char_t) * MAX_MACRO_PATH_LENGTH);
    snprintf(fPath, MAX_MACRO_PATH_LENGTH, "%s", newPath);
  }
  void SetSelected(Bool_t selection)            // Sets whether the macro is selected or not
  {
    fIsSelected = selection;
  }
  void SetType(AliEveListAnalyser::AliEveListAnalyserMacroType newType)  // Sets the type of the macro
  {
    fType = newType;
  }

private:
  TGeneralMacroData(const TGeneralMacroData&);            // Not implemented
  TGeneralMacroData& operator=(const TGeneralMacroData&); // Not implemented 

  Char_t fCmd[MAX_APPLY_COMMAND_LENGTH];                  // Command that will be used to call this macro
  Char_t fName[MAX_MACRO_NAME_LENGTH];                    // Macro name (without ".C"!)
  TClass* fObjectType;                                    // Type of object of the macro parameter (1st pointer)
  TClass* fObjectType2;                                   // Type of object of the macro parameter (2nd pointer)
  Char_t fPath[MAX_MACRO_PATH_LENGTH];                    // Path of the macro
  Bool_t fIsSelected;                                     // Is macro selected (e.g. in the editor's list)?
  AliEveListAnalyser::AliEveListAnalyserMacroType fType;  // Type of the macro  
};

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