ROOT logo
// $Id: AEVProofFeedback.cxx 2088 2008-11-23 20:26:46Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

//__________________________________________________________________________
// AEVProofFeedback
//
//

#include "AEVProofFeedback.h"
#include <Glasses/AEVDistAnRep.h>
#include <Glasses/AEVDemoDriver.h>

#include <Glasses/ZImage.h>
#include <Glasses/Board.h>

#include <TList.h>
#include <TROOT.h>
#include <TProof.h>

#include <TError.h>
#include <TPad.h>
#include <TCanvas.h>
#include <TH1.h>


ClassImp(AEVProofFeedback);

/**************************************************************************/

void AEVProofFeedback::_init()
{
  mProof = 0;
  mDAR   = 0;
  mDD    = 0;

  mHImg  = 0;
  mBoard = 0;
}

/**************************************************************************/

void AEVProofFeedback::Connect(TProof* p, AEVDistAnRep* dar)
{
  mProof = p;
  mDAR   = dar;
  //mProof->Connect("Feedback(TList *objs)", "AEVProofFeedback",
  //              this, "Feedback(TList *objs)");
  mProof->Connect("SiteProgress(TList *siteinfos)", "AEVProofFeedback",
                  this, "SiteProgress(TList *siteinfos)");

  mProof->Connect("Feedback(TList *objs)", "AEVProofFeedback",
		  this, "Feedback(TList *objs)");

  mFeedbackCount = 0;
}

void AEVProofFeedback::Disconnect()
{
  // if(mProof) mProof->Disconnect("Feedback(TList *objs)");
  if(mProof) {
    mProof->Disconnect("SiteProgress(TList *siteinfos)");
    mProof->Disconnect("Feedback(TList *objs)");
  }
  mProof = 0;
  mDAR   = 0;
}

/**************************************************************************/

void AEVProofFeedback::SiteProgress(TList *siteinfos)
{
  static const Exc_t _eh("AEVProofFeedback::SiteProgress ");

//   printf("%sgot a list w/ %d elements.\n", _eh.c_str(), siteinfos->GetSize());
//   TIter next_site(siteinfos);
//   TObject* o;
//   while( (o = next_site()) ) {
//     printf("  %s[%s]\n", o->GetName(), o->ClassName());
//   }

  // !!!! here create the map and pass it later to demo driver
  // !!!! to vizualize partial results coming back.

  map<string,int> siteevmap;
  if(mDAR) {
    mDAR->UpdateProcStatus(siteinfos, &siteevmap);
  }
  if(mDD) {
    mDD->VisProofProgress(siteevmap);
  }

}

void AEVProofFeedback::Feedback(TList *objs)
{
  static const Exc_t _eh("AEVProofFeedback::Feedback ");

  ++mFeedbackCount;

  TSeqCollection *canvases = gROOT->GetListOfCanvases();

  TVirtualPad *save = gPad;

  // ::Info("Feedback","DEREK: feedback called\n");

  TIter next(objs);
  TObject *o;
  // objs->Dump();
  while( (o = next()) )
    {
      if (o->InheritsFrom("TH1")) {

	TString name = o->GetName();
	// ::Info("Feedback","DEREK: feedback for %s\n",name.Data());
	name += "_canvas";

	TCanvas *c = (TCanvas*) canvases->FindObject( name.Data() );

	if ( c == 0 ) {
	  if(mHImg) {
	    c = new TCanvas(name.Data(),name.Data(), 1028, 540);
	  } else {
	    c = new TCanvas(name.Data(),name.Data(), 640, 480);
	  }
	  c->SetGrid(1, 1);
	  c->SetLogy(1);
	  ((TH1*)o)->DrawCopy();
	} else {
	  c->cd();
	  ((TH1*)o)->DrawCopy();
	}
	c->Update();

	// Update histo vizualization.
	if(mHImg) {
	  GLensWriteHolder wlck(mHImg);
	  // !!!! this is bugged. jpegs/pngs are slow, xpms don't work
	  // idealy would like a direct transfer.
	  // also ... segvs if the canvas is not completely visible.
	  c->SaveAs(mHImg->GetFile());
	  mHImg->Load();
	}
	// Updates come twice per second.
	if(mBoard && mFeedbackCount <= 100) {
	  GLensWriteHolder wlck(mBoard);
	  mBoard->SetColor(1,1,1, 0.01*mFeedbackCount);
	}
      }
    }

  if (save != 0) {
    save->cd();
  } else {
    gPad = 0;
  }
}

/**************************************************************************/
 AEVProofFeedback.cxx:1
 AEVProofFeedback.cxx:2
 AEVProofFeedback.cxx:3
 AEVProofFeedback.cxx:4
 AEVProofFeedback.cxx:5
 AEVProofFeedback.cxx:6
 AEVProofFeedback.cxx:7
 AEVProofFeedback.cxx:8
 AEVProofFeedback.cxx:9
 AEVProofFeedback.cxx:10
 AEVProofFeedback.cxx:11
 AEVProofFeedback.cxx:12
 AEVProofFeedback.cxx:13
 AEVProofFeedback.cxx:14
 AEVProofFeedback.cxx:15
 AEVProofFeedback.cxx:16
 AEVProofFeedback.cxx:17
 AEVProofFeedback.cxx:18
 AEVProofFeedback.cxx:19
 AEVProofFeedback.cxx:20
 AEVProofFeedback.cxx:21
 AEVProofFeedback.cxx:22
 AEVProofFeedback.cxx:23
 AEVProofFeedback.cxx:24
 AEVProofFeedback.cxx:25
 AEVProofFeedback.cxx:26
 AEVProofFeedback.cxx:27
 AEVProofFeedback.cxx:28
 AEVProofFeedback.cxx:29
 AEVProofFeedback.cxx:30
 AEVProofFeedback.cxx:31
 AEVProofFeedback.cxx:32
 AEVProofFeedback.cxx:33
 AEVProofFeedback.cxx:34
 AEVProofFeedback.cxx:35
 AEVProofFeedback.cxx:36
 AEVProofFeedback.cxx:37
 AEVProofFeedback.cxx:38
 AEVProofFeedback.cxx:39
 AEVProofFeedback.cxx:40
 AEVProofFeedback.cxx:41
 AEVProofFeedback.cxx:42
 AEVProofFeedback.cxx:43
 AEVProofFeedback.cxx:44
 AEVProofFeedback.cxx:45
 AEVProofFeedback.cxx:46
 AEVProofFeedback.cxx:47
 AEVProofFeedback.cxx:48
 AEVProofFeedback.cxx:49
 AEVProofFeedback.cxx:50
 AEVProofFeedback.cxx:51
 AEVProofFeedback.cxx:52
 AEVProofFeedback.cxx:53
 AEVProofFeedback.cxx:54
 AEVProofFeedback.cxx:55
 AEVProofFeedback.cxx:56
 AEVProofFeedback.cxx:57
 AEVProofFeedback.cxx:58
 AEVProofFeedback.cxx:59
 AEVProofFeedback.cxx:60
 AEVProofFeedback.cxx:61
 AEVProofFeedback.cxx:62
 AEVProofFeedback.cxx:63
 AEVProofFeedback.cxx:64
 AEVProofFeedback.cxx:65
 AEVProofFeedback.cxx:66
 AEVProofFeedback.cxx:67
 AEVProofFeedback.cxx:68
 AEVProofFeedback.cxx:69
 AEVProofFeedback.cxx:70
 AEVProofFeedback.cxx:71
 AEVProofFeedback.cxx:72
 AEVProofFeedback.cxx:73
 AEVProofFeedback.cxx:74
 AEVProofFeedback.cxx:75
 AEVProofFeedback.cxx:76
 AEVProofFeedback.cxx:77
 AEVProofFeedback.cxx:78
 AEVProofFeedback.cxx:79
 AEVProofFeedback.cxx:80
 AEVProofFeedback.cxx:81
 AEVProofFeedback.cxx:82
 AEVProofFeedback.cxx:83
 AEVProofFeedback.cxx:84
 AEVProofFeedback.cxx:85
 AEVProofFeedback.cxx:86
 AEVProofFeedback.cxx:87
 AEVProofFeedback.cxx:88
 AEVProofFeedback.cxx:89
 AEVProofFeedback.cxx:90
 AEVProofFeedback.cxx:91
 AEVProofFeedback.cxx:92
 AEVProofFeedback.cxx:93
 AEVProofFeedback.cxx:94
 AEVProofFeedback.cxx:95
 AEVProofFeedback.cxx:96
 AEVProofFeedback.cxx:97
 AEVProofFeedback.cxx:98
 AEVProofFeedback.cxx:99
 AEVProofFeedback.cxx:100
 AEVProofFeedback.cxx:101
 AEVProofFeedback.cxx:102
 AEVProofFeedback.cxx:103
 AEVProofFeedback.cxx:104
 AEVProofFeedback.cxx:105
 AEVProofFeedback.cxx:106
 AEVProofFeedback.cxx:107
 AEVProofFeedback.cxx:108
 AEVProofFeedback.cxx:109
 AEVProofFeedback.cxx:110
 AEVProofFeedback.cxx:111
 AEVProofFeedback.cxx:112
 AEVProofFeedback.cxx:113
 AEVProofFeedback.cxx:114
 AEVProofFeedback.cxx:115
 AEVProofFeedback.cxx:116
 AEVProofFeedback.cxx:117
 AEVProofFeedback.cxx:118
 AEVProofFeedback.cxx:119
 AEVProofFeedback.cxx:120
 AEVProofFeedback.cxx:121
 AEVProofFeedback.cxx:122
 AEVProofFeedback.cxx:123
 AEVProofFeedback.cxx:124
 AEVProofFeedback.cxx:125
 AEVProofFeedback.cxx:126
 AEVProofFeedback.cxx:127
 AEVProofFeedback.cxx:128
 AEVProofFeedback.cxx:129
 AEVProofFeedback.cxx:130
 AEVProofFeedback.cxx:131
 AEVProofFeedback.cxx:132
 AEVProofFeedback.cxx:133
 AEVProofFeedback.cxx:134
 AEVProofFeedback.cxx:135
 AEVProofFeedback.cxx:136
 AEVProofFeedback.cxx:137
 AEVProofFeedback.cxx:138
 AEVProofFeedback.cxx:139
 AEVProofFeedback.cxx:140
 AEVProofFeedback.cxx:141
 AEVProofFeedback.cxx:142
 AEVProofFeedback.cxx:143
 AEVProofFeedback.cxx:144
 AEVProofFeedback.cxx:145
 AEVProofFeedback.cxx:146
 AEVProofFeedback.cxx:147
 AEVProofFeedback.cxx:148
 AEVProofFeedback.cxx:149
 AEVProofFeedback.cxx:150
 AEVProofFeedback.cxx:151
 AEVProofFeedback.cxx:152
 AEVProofFeedback.cxx:153
 AEVProofFeedback.cxx:154
 AEVProofFeedback.cxx:155
 AEVProofFeedback.cxx:156
 AEVProofFeedback.cxx:157
 AEVProofFeedback.cxx:158
 AEVProofFeedback.cxx:159
 AEVProofFeedback.cxx:160
 AEVProofFeedback.cxx:161