]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MONITOR/alistoragemanager/AliStorageAdministratorPanelListEvents.cxx
58f756d6a26b9a4cd55b95668381d97e8154683e
[u/mrichter/AliRoot.git] / MONITOR / alistoragemanager / AliStorageAdministratorPanelListEvents.cxx
1 #include "AliStorageAdministratorPanelListEvents.h"
2
3 #include <iostream>
4 #include <sstream>
5 #include <vector>
6
7 #include <TG3DLine.h>
8 #include <TGButton.h>
9 #include <TGFrame.h>
10
11 using namespace std;
12
13 AliStorageAdministratorPanelListEvents *AliStorageAdministratorPanelListEvents::fInstance=0;
14
15 ClassImp(AliStorageAdministratorPanelListEvents);
16
17 #define WINDOWS_WIDTH 400
18 #define WINDOWS_HEIGHT 500
19
20 enum BUTTON{
21         BUTTON_CLOSE=1,
22         BUTTON_GET_LIST,
23         BUTTON_CHECK_PP,
24         BUTTON_CHECK_PBPB,
25         BUTTON_CHECK_TEMP,
26         BUTTON_CHECK_PERM,
27         BUTTON_MARK_EVENT,
28     BUTTON_LOAD_EVENT
29 };
30
31 enum TEXTENTRY{
32         TEXTENTRY_RUN_MIN=1,
33         TEXTENTRY_RUN_MAX,
34         TEXTENTRY_EVENT_MIN,
35         TEXTENTRY_EVENT_MAX,
36         TEXTENTRY_MULTIPLICITY_MIN,
37         TEXTENTRY_MULTIPLICITY_MAX
38 };
39
40 AliStorageAdministratorPanelListEvents::AliStorageAdministratorPanelListEvents() :
41         TGMainFrame(gClient->GetRoot(),400,400),
42         fStatusLabel(0),
43         fRunNumberMinEntry(0),
44         fRunNumberMaxEntry(0),
45         fEventNumberMinEntry(0),
46         fEventNumberMaxEntry(0),
47         fMultiplicityMinEntry(0),
48         fMultiplicityMaxEntry(0),
49         fProtonProtonCheckButton(0),
50         fLeadLeadCheckButton(0),
51         fTempCheckButton(0),
52         fPermCheckButton(0),
53         fEventsList(0),
54         fEventsListVector(0),
55         fServerSocket(SERVER_COMMUNICATION_REQ),
56         fEventManager(0)
57 {
58         fEventManager = AliStorageEventManager::GetEventManagerInstance();
59         fEventManager->CreateSocket(fServerSocket);
60         InitWindow();
61 }
62
63 AliStorageAdministratorPanelListEvents::~AliStorageAdministratorPanelListEvents()
64 {
65         cout<<"ADMIN PANEL -- List events descructor called";
66         cout<<" --- OK"<<endl;
67 }
68
69 AliStorageAdministratorPanelListEvents* AliStorageAdministratorPanelListEvents::GetInstance()
70 {
71         if(!fInstance){fInstance = new AliStorageAdministratorPanelListEvents();}
72         return fInstance;
73 }
74
75
76 void AliStorageAdministratorPanelListEvents::SelectedEvent()
77 {
78     Emit("SelectedEvent()");
79 }
80
81 void AliStorageAdministratorPanelListEvents::InitWindow()
82 {
83         SetCleanup(kDeepCleanup);
84         
85         //min run number
86         AddFrame(new TGLabel(this,"Minimum run number:"),new TGLayoutHints(kLHintsLeft));
87
88         fRunNumberMinEntry = new TGNumberEntry(this,
89                                             0,
90                                             6,
91                                             TEXTENTRY_RUN_MIN,
92                                             TGNumberFormat::kNESInteger,
93                                             TGNumberFormat::kNEAPositive,
94                                             TGNumberFormat::kNELNoLimits);
95         AddFrame(fRunNumberMinEntry,new TGLayoutHints(kLHintsLeft));
96
97         //max run number
98         AddFrame(new TGLabel(this,"Maximum run number:"),new TGLayoutHints(kLHintsLeft));
99
100         fRunNumberMaxEntry = new TGNumberEntry(this,
101                                             999999,
102                                             6,
103                                             TEXTENTRY_RUN_MAX,
104                                             TGNumberFormat::kNESInteger,
105                                             TGNumberFormat::kNEAPositive,
106                                             TGNumberFormat::kNELNoLimits);
107         AddFrame(fRunNumberMaxEntry,new TGLayoutHints(kLHintsLeft));
108
109         //min event number
110         AddFrame(new TGLabel(this,"Minimum event number:"),new TGLayoutHints(kLHintsLeft));
111
112         fEventNumberMinEntry = new TGNumberEntry(this,
113                                               0,
114                                               6,
115                                               TEXTENTRY_EVENT_MIN,
116                                               TGNumberFormat::kNESInteger,
117                                               TGNumberFormat::kNEAPositive,
118                                               TGNumberFormat::kNELNoLimits);
119         AddFrame(fEventNumberMinEntry,new TGLayoutHints(kLHintsLeft));  
120
121         //max event number
122         AddFrame(new TGLabel(this,"Maximum event number:"),new TGLayoutHints(kLHintsLeft));
123
124         fEventNumberMaxEntry = new TGNumberEntry(this,
125                                               99999,
126                                               6,
127                                               TEXTENTRY_EVENT_MAX,
128                                               TGNumberFormat::kNESInteger,
129                                               TGNumberFormat::kNEAPositive,
130                                               TGNumberFormat::kNELNoLimits);
131         AddFrame(fEventNumberMaxEntry,new TGLayoutHints(kLHintsLeft));  
132
133         //min multiplicity
134         AddFrame(new TGLabel(this,"Minimum multiplicity:"),new TGLayoutHints(kLHintsLeft));
135
136         fMultiplicityMinEntry = new TGNumberEntry(this,
137                                               0,
138                                               6,
139                                               TEXTENTRY_MULTIPLICITY_MIN,
140                                               TGNumberFormat::kNESInteger,
141                                               TGNumberFormat::kNEAPositive,
142                                               TGNumberFormat::kNELNoLimits);
143         AddFrame(fMultiplicityMinEntry,new TGLayoutHints(kLHintsLeft)); 
144
145         //max multiplicity
146         AddFrame(new TGLabel(this,"Maximum multiplicity:"),new TGLayoutHints(kLHintsLeft));
147
148         fMultiplicityMaxEntry = new TGNumberEntry(this,
149                                               9999,
150                                               6,
151                                               TEXTENTRY_MULTIPLICITY_MAX,
152                                               TGNumberFormat::kNESInteger,
153                                               TGNumberFormat::kNEAPositive,
154                                               TGNumberFormat::kNELNoLimits);
155         AddFrame(fMultiplicityMaxEntry,new TGLayoutHints(kLHintsLeft)); 
156
157         //p-p check button
158         AddFrame(new TGLabel(this,"System:"),new TGLayoutHints(kLHintsLeft));
159         fProtonProtonCheckButton = new TGCheckButton(this,"p-p",BUTTON_CHECK_PP);
160         fProtonProtonCheckButton->SetOn();
161         AddFrame(fProtonProtonCheckButton,new TGLayoutHints(kLHintsLeft));
162
163         //Pb-Pb check button
164         fLeadLeadCheckButton = new TGCheckButton(this,"Pb-Pb",BUTTON_CHECK_PBPB);
165         fLeadLeadCheckButton->SetOn();
166         AddFrame(fLeadLeadCheckButton,new TGLayoutHints(kLHintsLeft));
167
168         //temp check button
169         AddFrame(new TGLabel(this,"Storage type:"),new TGLayoutHints(kLHintsLeft));
170         fTempCheckButton = new TGCheckButton(this,"Temporary",BUTTON_CHECK_TEMP);
171         fTempCheckButton->SetOn();
172         AddFrame(fTempCheckButton,new TGLayoutHints(kLHintsLeft));
173
174         //perm check button
175         fPermCheckButton = new TGCheckButton(this,"Permanent",BUTTON_CHECK_PERM);
176         fPermCheckButton->SetOn();
177         AddFrame(fPermCheckButton,new TGLayoutHints(kLHintsLeft));
178         
179         // status label
180         fStatusLabel = new TGLabel(this,"");
181         AddFrame(fStatusLabel,new TGLayoutHints(kLHintsExpandX | kLHintsLeft));
182
183         //buttons
184         fCloseButton = new TGTextButton(this,"Close",BUTTON_CLOSE);
185         AddFrame(fCloseButton,
186                  new TGLayoutHints(kLHintsLeft));
187         fGetListButton = new TGTextButton(this,"Get event's list",BUTTON_GET_LIST);
188         AddFrame(fGetListButton,
189                  new TGLayoutHints(kLHintsRight));
190         fMarkButton = new TGTextButton(this,"Mark selected event",BUTTON_MARK_EVENT);
191         AddFrame(fMarkButton,
192                  new TGLayoutHints(kLHintsRight));
193         fLoadButton = new TGTextButton(this,"Load event",BUTTON_LOAD_EVENT);
194         AddFrame(fLoadButton,
195                  new TGLayoutHints(kLHintsRight));
196     
197
198         //event's list
199         fEventsList = new TGListBox(this,0);
200         fEventsList->AddEntry(new TGString("Run   Event   System   Mult   Marked"),0);
201         AddFrame(fEventsList,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
202         
203         SetWindowName("List Events");
204         MapSubwindows();
205         Resize(WINDOWS_WIDTH,WINDOWS_HEIGHT);
206         MapWindow();
207 }
208
209
210
211
212 void AliStorageAdministratorPanelListEvents::onGetListButton()
213 {
214 //prepare and send request message
215         struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
216         struct listRequestStruct list; 
217
218         //get listing parameters from somwhere
219         list.runNumber[0]=fRunNumberMinEntry->GetIntNumber();
220         list.runNumber[1]=fRunNumberMaxEntry->GetIntNumber();
221         list.eventNumber[0]=fEventNumberMinEntry->GetIntNumber();
222         list.eventNumber[1]=fEventNumberMaxEntry->GetIntNumber();
223         if(fTempCheckButton->GetState()==1)
224         {
225                 list.marked[0]=0;
226         }
227         else
228         {
229                 list.marked[0]=-1;
230         }
231         if(fPermCheckButton->GetState()==1)
232         {
233                 list.marked[1]=1;
234         }
235         else
236         {
237                 list.marked[1]=-1;
238         }
239         list.multiplicity[0]=fMultiplicityMinEntry->GetIntNumber();
240         list.multiplicity[1]=fMultiplicityMaxEntry->GetIntNumber();
241         if(fProtonProtonCheckButton->GetState()==1)
242         {
243                 strcpy(list.system[0],"p-p");
244         }
245         else
246         {
247                 strcpy(list.system[0],"");
248         }
249         if(fLeadLeadCheckButton->GetState()==1)
250         {
251                 strcpy(list.system[1],"Pb-Pb");
252         }
253         else
254         {
255                 strcpy(list.system[1],"");
256         }
257         
258         requestMessage->messageType = REQUEST_LIST_EVENTS;
259         requestMessage->list = list;
260
261         fEventManager->Send(requestMessage,fServerSocket);
262
263         fEventsList->RemoveAll();
264         fEventsList->AddEntry(new TGString("Run   Event   System   Mult   Marked"),0);
265         
266         vector<serverListStruct> receivedList = fEventManager->GetServerListVector(fServerSocket);
267         
268         for(unsigned int i=0;i<receivedList.size();i++)
269         {
270                 fEventsList->InsertEntry(Form("%d   %d   %s   %d   %d   ",
271                                               receivedList[i].runNumber,
272                                               receivedList[i].eventNumber,
273                                               receivedList[i].system,
274                                               receivedList[i].multiplicity,
275                                               receivedList[i].marked),i+1,i);
276
277                 cout<<receivedList[i].runNumber<<receivedList[i].eventNumber<<endl;
278         
279         }
280
281         fEventsListVector = receivedList;
282         
283         gClient->HandleInput();
284         gClient->NeedRedraw(fEventsList, kTRUE);
285         gClient->HandleInput();
286         MapSubwindows();
287         MapWindow();
288         Layout();
289         delete requestMessage;
290 }
291
292
293 void AliStorageAdministratorPanelListEvents::onMarkButton()
294 {
295         int runNumber;
296         int eventNumber;
297
298         //get run and event number from selected row
299         int selectedEventNumber = fEventsList->GetSelected()-1;
300         
301         if(selectedEventNumber<0)return;
302         
303         runNumber=fEventsListVector[selectedEventNumber].runNumber;
304         eventNumber=fEventsListVector[selectedEventNumber].eventNumber;
305         
306         struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
307         struct eventStruct mark;
308         mark.runNumber = runNumber;
309         mark.eventNumber = eventNumber;
310         requestMessage->messageType = REQUEST_MARK_EVENT;
311         requestMessage->event = mark;
312
313         fEventManager->Send(requestMessage,fServerSocket);
314
315         bool response = fEventManager->GetBool(fServerSocket);
316                 
317         if(response)
318         {
319                 fStatusLabel->SetText("Event marked");
320                 cout<<"ADMIN PANEL -- Event marked succesfully"<<endl;
321         }
322         else
323         {
324                 fStatusLabel->SetText("Couldn't mark this event");
325                 cout<<"ADMIN PANEL -- Could not matk event"<<endl;
326         }
327 }
328
329 void AliStorageAdministratorPanelListEvents::onLoadButton()
330 {
331     int selectedEventNumber = fEventsList->GetSelected()-1;
332     int runNumber=fEventsListVector[selectedEventNumber].runNumber;
333     int eventNumber=fEventsListVector[selectedEventNumber].eventNumber;
334     
335     
336     struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
337     struct eventStruct eventToLoad;
338     eventToLoad.runNumber = runNumber;
339     eventToLoad.eventNumber = eventNumber;
340     requestMessage->messageType = REQUEST_GET_EVENT;
341     requestMessage->event = eventToLoad;
342     
343     fEventManager->Send(requestMessage,fServerSocket);
344     AliESDEvent *resultEvent = fEventManager->GetEvent(fServerSocket);
345     
346     if(resultEvent)
347     {
348         cout<<"ADMIN -- received event"<<endl;
349         fCurrentEvent = resultEvent;
350     }
351     else
352     {
353         cout<<"ADMIN -- received no event"<<endl;
354     }
355
356     SelectedEvent();
357 }
358
359 void AliStorageAdministratorPanelListEvents::onCloseButton(){onExit();}
360 void AliStorageAdministratorPanelListEvents::CloseWindow(){onExit();}
361
362 void AliStorageAdministratorPanelListEvents::onExit()
363 {
364         cout<<"Quiting list events";
365         if(fInstance){delete fInstance;fInstance=0;}
366         cout<<" -- OK"<<endl;
367 }
368
369 Bool_t AliStorageAdministratorPanelListEvents::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
370 {
371         switch (GET_MSG(msg))
372         {
373         case kC_COMMAND:
374                 switch (GET_SUBMSG(msg))
375                 {
376                 case kCM_BUTTON:
377                         switch(parm1)
378                         {
379                         case BUTTON_CLOSE:onCloseButton();break;
380                         case BUTTON_GET_LIST:onGetListButton();break;
381                         case BUTTON_MARK_EVENT:onMarkButton();break;
382             case BUTTON_LOAD_EVENT:onLoadButton();break;
383                         default:break;
384                         }
385                         break;
386                 default:break;
387                 }
388                 break;
389         default:break;
390         }
391
392         return false;
393 }
394         
395 void AliStorageAdministratorPanelListEvents::SetOfflineMode(Bool_t ison)
396 {
397
398   if (ison) {
399     fProtonProtonCheckButton->SetDisabledAndSelected(ison);
400     fLeadLeadCheckButton->SetDisabledAndSelected(ison);
401     fTempCheckButton->SetDisabledAndSelected(ison);
402     fPermCheckButton->SetDisabledAndSelected(ison);
403   }
404   else {
405     fProtonProtonCheckButton->SetEnabled(!ison);
406     fLeadLeadCheckButton->SetEnabled(!ison);
407     fTempCheckButton->SetEnabled(!ison);
408     fPermCheckButton->SetEnabled(!ison);
409     fProtonProtonCheckButton->SetOn();
410     fLeadLeadCheckButton->SetOn();
411     fTempCheckButton->SetOn();
412     fPermCheckButton->SetOn();
413   }
414
415   fRunNumberMinEntry->SetState(!ison);
416   fRunNumberMaxEntry->SetState(!ison);
417   fEventNumberMinEntry->SetState(!ison);
418   fEventNumberMaxEntry->SetState(!ison);
419   fMultiplicityMinEntry->SetState(!ison);
420   fMultiplicityMaxEntry->SetState(!ison);
421
422   fCloseButton->SetEnabled(!ison);
423   fGetListButton->SetEnabled(!ison);
424   fMarkButton->SetEnabled(!ison);
425   fLoadButton->SetEnabled(!ison);
426 }