1 #include "AliDIMListenerThread.h"
2 #include "AliStorageTypes.h"
10 AliDIMListenerThread::AliDIMListenerThread()
15 DimCurrentInfo SORrunNumber("/LOGBOOK/SUBSCRIBE/DAQ_SOR_PHYSICS_1",-1);
16 DimCurrentInfo EORrunNumber("/LOGBOOK/SUBSCRIBE/DAQ_EOR_PHYSICS_1",-1);
18 if(SORrunNumber.getData() && EORrunNumber.getData())
20 cout<<"DIM Listener -- current SOR signal:"<<SORrunNumber.getInt()<<endl;
21 cout<<"DIM Listener -- current EOR signal:"<<EORrunNumber.getInt()<<endl;
23 if(SORrunNumber.getInt() != EORrunNumber.getInt()){StartOfRun(SORrunNumber.getInt());}
25 else{cout<<"DIM Listener -- no data received from dim server"<<endl;}
29 AliDIMListenerThread::~AliDIMListenerThread()
31 for (int i = 0; i < 5; ++i){
32 if(fDimSORListener[i]) delete fDimSORListener[i];
33 if(fDimEORListener[i]) delete fDimEORListener[i];
35 fDimSORListener[i] = 0;
36 fDimEORListener[i] = 0;
40 void AliDIMListenerThread::InitDIMListeners()
42 for (int i = 0; i < 5; ++i)
47 fDimSORListener[i] = new AliDimIntNotifier("/LOGBOOK/SUBSCRIBE/DAQ_SOR_PHYSICS");
48 fDimEORListener[i] = new AliDimIntNotifier("/LOGBOOK/SUBSCRIBE/DAQ_EOR_PHYSICS");
52 fDimSORListener[i] = new AliDimIntNotifier(Form("/LOGBOOK/SUBSCRIBE/DAQ_SOR_PHYSICS_%d", i));
53 fDimEORListener[i] = new AliDimIntNotifier(Form("/LOGBOOK/SUBSCRIBE/DAQ_EOR_PHYSICS_%d", i));
56 fDimSORListener[i]->Connect("DimMessage(int)", "AliDIMListenerThread", this, "StartOfRun(int)");
57 fDimEORListener[i]->Connect("DimMessage(int)", "AliDIMListenerThread", this, "EndOfRun(int)");
59 fDimSORListener[i]=0x0;
60 fDimEORListener[i]=0x0;
65 void AliDIMListenerThread::StartOfRun(int run)
67 cout<<"DIM Listener -- SOR signal received for run:"<<run<<endl;
69 ifstream configFile (GetConfigFilePath());
70 string username,hostname;
72 if (configFile.is_open())
76 while(configFile.good())
78 getline(configFile,line);
79 from = line.find("\"")+1;
80 to = line.find_last_of("\"");
81 if(line.find("EVENT_SERVER=")==0){hostname=line.substr(from,to-from);}
82 else if(line.find("EVENT_SERVER_USER=")==0){username=line.substr(from,to-from);}
84 if(configFile.eof()){configFile.clear();}
87 else{cout<<"Event Manager Editor -- Unable to open config file"<<endl;}
89 // Kill reconstruction server
90 gSystem->Exec(Form("ssh -n -f %s@%s \"killall alionlinereco;alionlinereco %d\"",username.c_str(),hostname.c_str(),run));
94 void AliDIMListenerThread::EndOfRun(int run)
96 cout<<"DIM Listener -- EOR signal received for run:"<<run<<endl;