ROOT logo
//-*- Mode: C++ -*-

// $Id$
// Main authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007              *
// Author: Jochen Thaeder <thaeder@kip.uni-heidelberg.de>                *
// Author: 2010 Svein Lindal <slindal@fys.uio.no>                        *
//         for The ALICE HLT Project.                                    *



/** @file   AliEveHOMERManager.cxx
    @author Jochen Thaeder,  
    @author Svein Lindal <slindal@fys.uio.no>
    @date
    @brief  Manager for HOMER events
*/

#if __GNUC__>= 3
   using namespace std;
#endif

#include "unistd.h"

#include "AliHLTTriggerDecision.h"
#include "AliEveHOMERManager.h"
#include "AliHLTHOMERBlockDesc.h"
#include "AliHLTHOMERManager.h"
#include "AliEveHOMERSourceList.h"

#include "TTimer.h"

ClassImp(AliEveHOMERManager)
  
//____________________________________________________________________________________
AliEveHOMERManager::AliEveHOMERManager() :
TEveElementList("Homer Manager"),
  AliHLTHOMERManager(), 
  fSrcList(NULL),
  fRetryCount(1000),
  fRetrySleeptime(15),
  fSourceListTimer(NULL)
{
  fSourceListTimer = new TTimer();
  fSourceListTimer->Connect("Timeout()", "AliEveHOMERManager", this, "CreateEveSourcesListLoop()");
}

//____________________________________________________________________________________
AliEveHOMERManager::~AliEveHOMERManager() {
  // see header file for class documentation 
  
  if (fSrcList)
    delete fSrcList;
  fSrcList = NULL;
  
  


}

 //____________________________________________________________________________________
Int_t AliEveHOMERManager::CreateEveSourcesList() {
  // see header file for class documentation

  DestroyElements();

  Int_t iResult = CreateSourcesList();

  fStateHasChanged = kTRUE;
  
  HLTDebug(Form("iResult XXX %d", iResult));
  if ( iResult )
    return iResult;

 

  HLTDebug(Form("iResult %d", iResult));
  if (fSrcList) {
    HLTInfo("delete source list");
    DestroyElements();
    //delete fSrcList;
    fSrcList = NULL;
    //fSrcList->Clear();
    HLTInfo("cleared source list");
  }


  // -- Create new AliEVE sources list 
  if(!fSrcList){
    HLTInfo("no source list");
    fSrcList = new AliEveHOMERSourceList("HLT Sources");
    fSrcList->SetManager(this);
    AddElement(fSrcList);
  }
  
  //HLTInfo(Form("createbytype", iResult));
  fSrcList->CreateByDet();
  
  HLTDebug(Form("Done creating source list %d", iResult));    
    
  return iResult;
}

///_______________________________________________________________
void AliEveHOMERManager::StartEveSourceListLoop() {
  HLTInfo("Starting source list timer");
  fSourceListTimer->Start(5000); 
}
///_______________________________________________________________
void AliEveHOMERManager::StopEveSourceListLoop() {
  fSourceListTimer->Stop(); 
}


//________________________________________________________________###
Int_t AliEveHOMERManager::CreateEveSourcesListLoop() {
  // see header file for class documentation

  HLTInfo("Attempting to create source list");
  Int_t iResult = CreateEveSourcesList();

  if (!iResult) {
    HLTInfo("Source list successfully created.");
    StopEveSourceListLoop();
    HLTInfo("Conneting to sources");
    return ConnectEVEtoHOMER();
  }
  

  else if (iResult == 1) {
    HLTWarning( Form("Couldn't find active services,"));
  
  } else if (iResult == 2) {
    HLTWarning( Form("Services List empty, sleeping %d s before making new attempt.", fRetrySleeptime) ) ;
  
  } else {
    HLTError( Form("Other problem ... \n") ); 
  } 
  
  return iResult;
}

//________________________________________________________________
Int_t AliEveHOMERManager::ConnectEVEtoHOMER( TString detector ) {
  // see header file for class documentation
  HLTInfo("");
  fStateHasChanged = fSrcList->GetSelectedSources();
  HLTInfo(Form("has state changed % d", fStateHasChanged));
  return ConnectHOMER(detector);
}


//________________________________________________________________
Int_t AliEveHOMERManager::ReConnectHOMER( TString /*detector*/ ){
  // see header file for class documentation
  Int_t iResult = 0;
  if (Connected()) DisconnectHOMER();
  CreateEveSourcesListLoop();
  return iResult;
}

//_____________________________________________________________________________________
TList * AliEveHOMERManager::NextHOMEREvent() {
  //See header file for documentation  
  
  if(!Connected()) {
    HLTInfo("Homer is not connected, trying to reconnect!");
    ReConnectHOMER();
    return NULL;
  }
  
  
  if ( NextEvent() ) {
    HLTInfo("Failed getting next event, trying to reconnect");
    ReConnectHOMER();
    return NULL;
  }
  
  return GetBlockList();
  
}
 AliEveHOMERManager.cxx:1
 AliEveHOMERManager.cxx:2
 AliEveHOMERManager.cxx:3
 AliEveHOMERManager.cxx:4
 AliEveHOMERManager.cxx:5
 AliEveHOMERManager.cxx:6
 AliEveHOMERManager.cxx:7
 AliEveHOMERManager.cxx:8
 AliEveHOMERManager.cxx:9
 AliEveHOMERManager.cxx:10
 AliEveHOMERManager.cxx:11
 AliEveHOMERManager.cxx:12
 AliEveHOMERManager.cxx:13
 AliEveHOMERManager.cxx:14
 AliEveHOMERManager.cxx:15
 AliEveHOMERManager.cxx:16
 AliEveHOMERManager.cxx:17
 AliEveHOMERManager.cxx:18
 AliEveHOMERManager.cxx:19
 AliEveHOMERManager.cxx:20
 AliEveHOMERManager.cxx:21
 AliEveHOMERManager.cxx:22
 AliEveHOMERManager.cxx:23
 AliEveHOMERManager.cxx:24
 AliEveHOMERManager.cxx:25
 AliEveHOMERManager.cxx:26
 AliEveHOMERManager.cxx:27
 AliEveHOMERManager.cxx:28
 AliEveHOMERManager.cxx:29
 AliEveHOMERManager.cxx:30
 AliEveHOMERManager.cxx:31
 AliEveHOMERManager.cxx:32
 AliEveHOMERManager.cxx:33
 AliEveHOMERManager.cxx:34
 AliEveHOMERManager.cxx:35
 AliEveHOMERManager.cxx:36
 AliEveHOMERManager.cxx:37
 AliEveHOMERManager.cxx:38
 AliEveHOMERManager.cxx:39
 AliEveHOMERManager.cxx:40
 AliEveHOMERManager.cxx:41
 AliEveHOMERManager.cxx:42
 AliEveHOMERManager.cxx:43
 AliEveHOMERManager.cxx:44
 AliEveHOMERManager.cxx:45
 AliEveHOMERManager.cxx:46
 AliEveHOMERManager.cxx:47
 AliEveHOMERManager.cxx:48
 AliEveHOMERManager.cxx:49
 AliEveHOMERManager.cxx:50
 AliEveHOMERManager.cxx:51
 AliEveHOMERManager.cxx:52
 AliEveHOMERManager.cxx:53
 AliEveHOMERManager.cxx:54
 AliEveHOMERManager.cxx:55
 AliEveHOMERManager.cxx:56
 AliEveHOMERManager.cxx:57
 AliEveHOMERManager.cxx:58
 AliEveHOMERManager.cxx:59
 AliEveHOMERManager.cxx:60
 AliEveHOMERManager.cxx:61
 AliEveHOMERManager.cxx:62
 AliEveHOMERManager.cxx:63
 AliEveHOMERManager.cxx:64
 AliEveHOMERManager.cxx:65
 AliEveHOMERManager.cxx:66
 AliEveHOMERManager.cxx:67
 AliEveHOMERManager.cxx:68
 AliEveHOMERManager.cxx:69
 AliEveHOMERManager.cxx:70
 AliEveHOMERManager.cxx:71
 AliEveHOMERManager.cxx:72
 AliEveHOMERManager.cxx:73
 AliEveHOMERManager.cxx:74
 AliEveHOMERManager.cxx:75
 AliEveHOMERManager.cxx:76
 AliEveHOMERManager.cxx:77
 AliEveHOMERManager.cxx:78
 AliEveHOMERManager.cxx:79
 AliEveHOMERManager.cxx:80
 AliEveHOMERManager.cxx:81
 AliEveHOMERManager.cxx:82
 AliEveHOMERManager.cxx:83
 AliEveHOMERManager.cxx:84
 AliEveHOMERManager.cxx:85
 AliEveHOMERManager.cxx:86
 AliEveHOMERManager.cxx:87
 AliEveHOMERManager.cxx:88
 AliEveHOMERManager.cxx:89
 AliEveHOMERManager.cxx:90
 AliEveHOMERManager.cxx:91
 AliEveHOMERManager.cxx:92
 AliEveHOMERManager.cxx:93
 AliEveHOMERManager.cxx:94
 AliEveHOMERManager.cxx:95
 AliEveHOMERManager.cxx:96
 AliEveHOMERManager.cxx:97
 AliEveHOMERManager.cxx:98
 AliEveHOMERManager.cxx:99
 AliEveHOMERManager.cxx:100
 AliEveHOMERManager.cxx:101
 AliEveHOMERManager.cxx:102
 AliEveHOMERManager.cxx:103
 AliEveHOMERManager.cxx:104
 AliEveHOMERManager.cxx:105
 AliEveHOMERManager.cxx:106
 AliEveHOMERManager.cxx:107
 AliEveHOMERManager.cxx:108
 AliEveHOMERManager.cxx:109
 AliEveHOMERManager.cxx:110
 AliEveHOMERManager.cxx:111
 AliEveHOMERManager.cxx:112
 AliEveHOMERManager.cxx:113
 AliEveHOMERManager.cxx:114
 AliEveHOMERManager.cxx:115
 AliEveHOMERManager.cxx:116
 AliEveHOMERManager.cxx:117
 AliEveHOMERManager.cxx:118
 AliEveHOMERManager.cxx:119
 AliEveHOMERManager.cxx:120
 AliEveHOMERManager.cxx:121
 AliEveHOMERManager.cxx:122
 AliEveHOMERManager.cxx:123
 AliEveHOMERManager.cxx:124
 AliEveHOMERManager.cxx:125
 AliEveHOMERManager.cxx:126
 AliEveHOMERManager.cxx:127
 AliEveHOMERManager.cxx:128
 AliEveHOMERManager.cxx:129
 AliEveHOMERManager.cxx:130
 AliEveHOMERManager.cxx:131
 AliEveHOMERManager.cxx:132
 AliEveHOMERManager.cxx:133
 AliEveHOMERManager.cxx:134
 AliEveHOMERManager.cxx:135
 AliEveHOMERManager.cxx:136
 AliEveHOMERManager.cxx:137
 AliEveHOMERManager.cxx:138
 AliEveHOMERManager.cxx:139
 AliEveHOMERManager.cxx:140
 AliEveHOMERManager.cxx:141
 AliEveHOMERManager.cxx:142
 AliEveHOMERManager.cxx:143
 AliEveHOMERManager.cxx:144
 AliEveHOMERManager.cxx:145
 AliEveHOMERManager.cxx:146
 AliEveHOMERManager.cxx:147
 AliEveHOMERManager.cxx:148
 AliEveHOMERManager.cxx:149
 AliEveHOMERManager.cxx:150
 AliEveHOMERManager.cxx:151
 AliEveHOMERManager.cxx:152
 AliEveHOMERManager.cxx:153
 AliEveHOMERManager.cxx:154
 AliEveHOMERManager.cxx:155
 AliEveHOMERManager.cxx:156
 AliEveHOMERManager.cxx:157
 AliEveHOMERManager.cxx:158
 AliEveHOMERManager.cxx:159
 AliEveHOMERManager.cxx:160
 AliEveHOMERManager.cxx:161
 AliEveHOMERManager.cxx:162
 AliEveHOMERManager.cxx:163
 AliEveHOMERManager.cxx:164
 AliEveHOMERManager.cxx:165
 AliEveHOMERManager.cxx:166
 AliEveHOMERManager.cxx:167
 AliEveHOMERManager.cxx:168
 AliEveHOMERManager.cxx:169
 AliEveHOMERManager.cxx:170
 AliEveHOMERManager.cxx:171
 AliEveHOMERManager.cxx:172
 AliEveHOMERManager.cxx:173
 AliEveHOMERManager.cxx:174
 AliEveHOMERManager.cxx:175
 AliEveHOMERManager.cxx:176
 AliEveHOMERManager.cxx:177
 AliEveHOMERManager.cxx:178
 AliEveHOMERManager.cxx:179
 AliEveHOMERManager.cxx:180