ROOT logo
// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

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

#ifndef AliEveAliEVEHOMERSource_H
#define AliEveAliEVEHOMERSource_H

#include <TEveElement.h>

#include <TNamed.h>

class AliHLTHOMERSourceDesc;

class AliEveHOMERSource : public TEveElement,
			  public TNamed
{
public:
  struct SourceId
  {
    TString fDet, fSDet, fSSDet, fType;

    SourceId(): fDet(), fSDet(), fSSDet(), fType() {}

    struct CmpByDet
    {
      bool operator()(const SourceId& s1, const SourceId& s2) const
      {
	Int_t r;
	if ((r = s1.fDet  .CompareTo(s2.fDet)  )) return r < 0;
	if ((r = s1.fSDet .CompareTo(s2.fSDet) )) return r < 0;
	if ((r = s1.fSSDet.CompareTo(s2.fSSDet))) return r < 0;
	if ((r = s1.fType .CompareTo(s2.fType) )) return r < 0;
	return false;
      }
    };

    struct CmpByType
    {
      bool operator()(const SourceId& s1, const SourceId& s2) const
      {
	Int_t r;
	if ((r = s1.fType .CompareTo(s2.fType) )) return r < 0;
	if ((r = s1.fDet  .CompareTo(s2.fDet)  )) return r < 0;
	if ((r = s1.fSDet .CompareTo(s2.fSDet) )) return r < 0;
	if ((r = s1.fSSDet.CompareTo(s2.fSSDet))) return r < 0;
	return false;
      }
    };

  };

  struct SourceState
  {
    Bool_t                  fState;
    AliHLTHOMERSourceDesc  *fHandle;

    SourceState() : fState(kFALSE), fHandle(0) {}
    SourceState(Bool_t state) : fState(state), fHandle(0) {}
  };


  AliEveHOMERSource(const Text_t* n="HOMER Source", const Text_t* t="");
  virtual ~AliEveHOMERSource() {}

  const SourceId* GetSourceId() const  { return fSrcId; }
  void SetSourceId(const SourceId* id) { fSrcId = id; }

  SourceState* GetSourceState() const  { return fSrcState; }
  void SetSourceState(SourceState* st) { fSrcState = st; TEveElement::SetRnrState(st->fState); }

  void SetSource(const SourceId* id, SourceState* st) { fSrcId = id; fSrcState = st; TEveElement::SetRnrState(st->fState); }

  virtual Bool_t SingleRnrState() const { return kTRUE; }
  virtual Bool_t SetRnrState(Bool_t rnr);

protected:
  const SourceId    *fSrcId;
        SourceState *fSrcState;

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

  ClassDef(AliEveHOMERSource, 0); // Description of an HOMER source.
};

#endif
 AliEveHOMERSource.h:1
 AliEveHOMERSource.h:2
 AliEveHOMERSource.h:3
 AliEveHOMERSource.h:4
 AliEveHOMERSource.h:5
 AliEveHOMERSource.h:6
 AliEveHOMERSource.h:7
 AliEveHOMERSource.h:8
 AliEveHOMERSource.h:9
 AliEveHOMERSource.h:10
 AliEveHOMERSource.h:11
 AliEveHOMERSource.h:12
 AliEveHOMERSource.h:13
 AliEveHOMERSource.h:14
 AliEveHOMERSource.h:15
 AliEveHOMERSource.h:16
 AliEveHOMERSource.h:17
 AliEveHOMERSource.h:18
 AliEveHOMERSource.h:19
 AliEveHOMERSource.h:20
 AliEveHOMERSource.h:21
 AliEveHOMERSource.h:22
 AliEveHOMERSource.h:23
 AliEveHOMERSource.h:24
 AliEveHOMERSource.h:25
 AliEveHOMERSource.h:26
 AliEveHOMERSource.h:27
 AliEveHOMERSource.h:28
 AliEveHOMERSource.h:29
 AliEveHOMERSource.h:30
 AliEveHOMERSource.h:31
 AliEveHOMERSource.h:32
 AliEveHOMERSource.h:33
 AliEveHOMERSource.h:34
 AliEveHOMERSource.h:35
 AliEveHOMERSource.h:36
 AliEveHOMERSource.h:37
 AliEveHOMERSource.h:38
 AliEveHOMERSource.h:39
 AliEveHOMERSource.h:40
 AliEveHOMERSource.h:41
 AliEveHOMERSource.h:42
 AliEveHOMERSource.h:43
 AliEveHOMERSource.h:44
 AliEveHOMERSource.h:45
 AliEveHOMERSource.h:46
 AliEveHOMERSource.h:47
 AliEveHOMERSource.h:48
 AliEveHOMERSource.h:49
 AliEveHOMERSource.h:50
 AliEveHOMERSource.h:51
 AliEveHOMERSource.h:52
 AliEveHOMERSource.h:53
 AliEveHOMERSource.h:54
 AliEveHOMERSource.h:55
 AliEveHOMERSource.h:56
 AliEveHOMERSource.h:57
 AliEveHOMERSource.h:58
 AliEveHOMERSource.h:59
 AliEveHOMERSource.h:60
 AliEveHOMERSource.h:61
 AliEveHOMERSource.h:62
 AliEveHOMERSource.h:63
 AliEveHOMERSource.h:64
 AliEveHOMERSource.h:65
 AliEveHOMERSource.h:66
 AliEveHOMERSource.h:67
 AliEveHOMERSource.h:68
 AliEveHOMERSource.h:69
 AliEveHOMERSource.h:70
 AliEveHOMERSource.h:71
 AliEveHOMERSource.h:72
 AliEveHOMERSource.h:73
 AliEveHOMERSource.h:74
 AliEveHOMERSource.h:75
 AliEveHOMERSource.h:76
 AliEveHOMERSource.h:77
 AliEveHOMERSource.h:78
 AliEveHOMERSource.h:79
 AliEveHOMERSource.h:80
 AliEveHOMERSource.h:81
 AliEveHOMERSource.h:82
 AliEveHOMERSource.h:83
 AliEveHOMERSource.h:84
 AliEveHOMERSource.h:85
 AliEveHOMERSource.h:86
 AliEveHOMERSource.h:87
 AliEveHOMERSource.h:88
 AliEveHOMERSource.h:89
 AliEveHOMERSource.h:90
 AliEveHOMERSource.h:91
 AliEveHOMERSource.h:92