#include "DabcHydra.h" #include "DabcRoot.h" #include "THttpServer.h" #include "hades.h" #include "Riostream.h" #include "TTimeStamp.h" #include #ifdef WITH_DABC static THttpServer* gServer = 0; void DabcHydra::StartServers(const char* serv1, const char* serv2, const char* serv3) { DabcRoot::EnableDebug(true); if (gServer==0) { gServer = new THttpServer(""); gServer->SetTimer(100, kTRUE); } if (!serv1 && !serv2 && !serv3) { gServer->CreateEngine("dabc:1239?top=HYDRA"); gServer->CreateEngine("dabc:http:8097?top=HYDRA"); return; } if (serv1) gServer->CreateEngine(serv1); if (serv2) gServer->CreateEngine(serv2); if (serv3) gServer->CreateEngine(serv3); } /* void DabcHydra::RegisterHist(TList& histpool) { TIter iter(&histpool); TObject* obj = 0; while ((obj = iter()) != 0) { TString name = obj->GetName(); //if (name.Contains("[") || name.Contains("]")) continue; HOnlineMonHist* hh1 = dynamic_cast (obj); if (hh1!=0) { DabcRoot::Register("", hh1->getP()); continue; } HOnlineMonHist2* hh2 = dynamic_cast (obj); if (hh2!=0) { DabcRoot::Register("", hh2->getP()); continue; } HOnlineHistArray* harr = dynamic_cast (obj); if (harr!=0) { Int_t n1(0), n2(0); harr->getDim(&n1, &n2); for (Int_t i=0; iGetName(), harr->getP(i,j)); continue; } HOnlineHistArray2* harr2 = dynamic_cast (obj); if (harr2!=0) { Int_t n1(0), n2(0); harr2->getDim(&n1, &n2); for (Int_t i=0; iGetName(), harr2->getP(i,j)); continue; } HOnlineTrendArray* htrend = dynamic_cast (obj); if (htrend!=0) { Int_t n1(0), n2(0); htrend->getDim(&n1, &n2); for (Int_t i=0; iGetName(), htrend->getP(i,j)); continue; } } } */ void DabcHydra::Register(const char* folder, TObject* obj) { gServer->Register(folder, obj); } void DabcHydra::RegisterExtra(TObject* obj) { gServer->Register("extra", obj); } #else void DabcHydra::StartServers() { cout << "Compiled without DABC" << endl; } void DabcHydra::Register(const char* folder, TObject* obj) { cout << "Compiled without DABC" << endl; } //void DabcHydra::RegisterHist(TList& histpool) //{ // cout << "Compiled without DABC" << endl; //} void DabcHydra::RegisterExtra(TObject* obj) { cout << "Compiled without DABC" << endl; } #endif Int_t DabcHydra::EventLoop(std::vector < DabcFillFunction>& fillfunctions, Int_t maxcnt) { Int_t count = 0; TTimeStamp tm; double lasttm = 0; //------------------- EVENTLOOP--------------------------------------- while (gHades->eventLoop(1)) { count++; tm.Set(); if (tm.AsDouble() - lasttm > 0.5) { printf("Still processing %d\n", count); lasttm = tm.AsDouble(); } gSystem->ProcessEvents(); for(UInt_t i = 0; i < fillfunctions.size(); i++){ // call the fill functionwith event number DabcFillFunction func = fillfunctions[i]; (*func)(count); } if ((maxcnt>0) && (count>maxcnt)) break; } cout<<"wait some time after events processing "<< endl; for (int n=0;n<20000000;n++) { gSystem->ProcessEvents(); if (n % 1000 == 0) printf("Still waiting %d\n", n); gSystem->Sleep(100); } return count; }