]> git.uio.no Git - u/mrichter/AliRoot.git/blob - EVE/EveBase/AliEveConfigManager.cxx
Merging STORAGE-dev to master
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveConfigManager.cxx
1 // $Id$
2 // Author: Matevz Tadel 2009
3
4 /**************************************************************************
5  * Copyright(c) 1998-2009, ALICE Experiment at CERN, all rights reserved. *
6  * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for          *
7  * full copyright notice.                                                 *
8  **************************************************************************/
9
10 #include "AliEveConfigManager.h"
11
12 #include <AliEveMultiView.h>
13 #include <TEveManager.h>
14 #include <TEveBrowser.h>
15 #include <TEveWindow.h>
16 #include <TGFileDialog.h>
17 #include <TGMenu.h>
18
19 #include "AliEveEventManager.h"
20 #include "AliEveMacroExecutor.h"
21 #include "AliEveMacroExecutorWindow.h"
22 #include "AliEveMacro.h"
23
24 //Storage Manager:
25 #include "AliStorageAdministratorPanelListEvents.h"
26 #include "AliStorageAdministratorPanelMarkEvent.h"
27
28 class AliEveMacroExecutor;
29 class TEveProjectionManager;
30 class TEveGeoShape;
31 class TEveUtil;
32
33 #include <TSystem.h>
34 #include <TPRegexp.h>
35 #include <RVersion.h>
36
37 //______________________________________________________________________________
38 // Full description of AliEveConfigManager
39 //
40
41 ClassImp(AliEveConfigManager)
42
43 AliEveConfigManager* AliEveConfigManager::fgMaster = 0;
44
45 namespace
46 {
47  enum EAliEveMenu_e
48  {
49          kAEMDefault, kAEMScreen, kAEMProjector, kAEMNotransparency, kAEMTransparentDark, kAEMTransparentLight, kAEMTransparentMonoDark, kAEMTransparentMonoLight, kAEMGreen, kAEMBright, kAEMYellow, kAEMTpc, kAEMAll, kAEM3d, kAEMRphi, kAEMRhoz, kAEMAllhr, kAEM3dhr, kAEMRphihr, kAEMRhozhr, kAEMSavemacros, kAEMLoadmacros, kAEMSave, kAEMOpen, kAEMSetDefault, kAEMResiduals,  kAEMCuts, kAEMVectors, kAEMGui, kStorageListEvents, kStorageMarkEvent
50  };
51 }
52  
53 //______________________________________________________________________________
54 AliEveConfigManager* AliEveConfigManager::InitializeMaster()
55 {
56   // Get main instance.
57
58   static const TEveException kEH("AliEveConfigManager::InitializeMaster ");
59
60   if (fgMaster)
61     throw kEH + "Master already initialized.";
62
63   fgMaster = new AliEveConfigManager;
64   return fgMaster;
65 }
66
67 //______________________________________________________________________________
68 AliEveConfigManager* AliEveConfigManager::GetMaster()
69 {
70   // Get main instance.
71
72   static const TEveException kEH("AliEveConfigManager::GetMaster ");
73
74   if (!fgMaster)
75     throw kEH + "Master not initialized.";
76
77   return fgMaster;
78 }
79
80 //______________________________________________________________________________
81 AliEveConfigManager::AliEveConfigManager() :
82   TObject(),
83   fAnalysisPopup(0),
84   fAliEvePopup(0),
85   fAliEveGeometries(0),
86   fAliEvePictures(0),
87   fAliEvePicturesHR(0),
88   fAliEveDataSelection(0),
89   fAliEveVizDBs(0),
90   fLoadCheck(kFALSE)
91 {
92   // Constructor.
93   // Expected TEveManager is already initialized.
94
95
96   fAliEveGeometries = new TGPopupMenu(gClient->GetRoot());
97   fAliEveGeometries->AddEntry("&Default", kAEMDefault);
98   fAliEveGeometries->AddEntry("&Screen", kAEMScreen);
99   fAliEveGeometries->AddEntry("&Projector", kAEMProjector);
100
101   fAliEveGeometries->AddSeparator();
102
103   fAliEveGeometries->AddEntry("&Low transparency", kAEMNotransparency);
104
105   fAliEveGeometries->AddSeparator();
106
107   fAliEveGeometries->AddEntry("&Transparent screen", kAEMTransparentDark);
108   fAliEveGeometries->AddEntry("&Transparent projector", kAEMTransparentLight);
109   fAliEveGeometries->AddEntry("&Transparent mono dark", kAEMTransparentMonoDark);
110   fAliEveGeometries->AddEntry("&Transparent mono light", kAEMTransparentMonoLight);
111
112   fAliEveGeometries->AddSeparator();
113
114   fAliEveGeometries->AddEntry("&First collision setup", kAEMGreen);
115   fAliEveGeometries->AddEntry("&Bright", kAEMBright);
116
117   fAliEveGeometries->AddSeparator();
118
119   fAliEveGeometries->AddEntry("&TPC Yellow", kAEMYellow);
120   fAliEveGeometries->AddEntry("&TPC Blue", kAEMTpc);
121
122   fAliEveGeometries->AddSeparator();
123
124   fAliEvePictures = new TGPopupMenu(gClient->GetRoot());
125
126   fAliEvePictures->AddEntry("&Save all views", kAEMAll);
127   fAliEvePictures->AddEntry("&Save 3D View",   kAEM3d);
128   fAliEvePictures->AddEntry("&Save RPhi View", kAEMRphi);
129   fAliEvePictures->AddEntry("&Save RhoZ View", kAEMRhoz);
130
131   fAliEvePictures->AddSeparator();
132
133   fAliEvePicturesHR = new TGPopupMenu(gClient->GetRoot());
134
135   fAliEvePicturesHR->AddEntry("&Save all views HR", kAEMAllhr);
136   fAliEvePicturesHR->AddEntry("&Save 3D View HR",   kAEM3dhr);
137   fAliEvePicturesHR->AddEntry("&Save RPhi View HR", kAEMRphihr);
138   fAliEvePicturesHR->AddEntry("&Save RhoZ View HR", kAEMRhozhr);
139
140   fAliEvePicturesHR->AddSeparator();
141
142   fAliEveDataSelection = new TGPopupMenu(gClient->GetRoot());
143
144   fAliEveDataSelection->AddEntry("&Save Data Selection macros", kAEMSavemacros);
145   fAliEveDataSelection->AddEntry("&Load Data Selection macros",   kAEMLoadmacros);
146
147   fAliEveDataSelection->AddSeparator();
148
149   fAliEveVizDBs = new TGPopupMenu(gClient->GetRoot());
150
151   fAliEveVizDBs->AddEntry("&Save VizDB", kAEMSave);
152   fAliEveVizDBs->AddEntry("&Load VizDB", kAEMOpen);
153
154   fAliEveVizDBs->AddSeparator();
155
156   fAliEvePopup = new TGPopupMenu(gClient->GetRoot());
157   fAliEvePopup->AddEntry("&Set Default Settings", kAEMSetDefault);
158   fAliEvePopup->AddSeparator();
159   fAliEvePopup->AddPopup("&Geometries/VizDBs", fAliEveGeometries);
160   fAliEvePopup->AddSeparator();
161   fAliEvePopup->AddPopup("&Pictures", fAliEvePictures);
162   fAliEvePopup->AddSeparator();
163   fAliEvePopup->AddPopup("&PicturesHR", fAliEvePicturesHR);
164   fAliEvePopup->AddSeparator();
165   fAliEvePopup->AddPopup("&VizDBs",  fAliEveVizDBs);
166   fAliEvePopup->AddSeparator();
167   fAliEvePopup->AddPopup("&DataSelection", fAliEveDataSelection);
168   fAliEvePopup->AddSeparator();
169
170   fAnalysisPopup = new TGPopupMenu(gClient->GetRoot());  
171 //  fAnalysisPopup->AddEntry("&Residuals", kAEMResiduals);
172 //  fAnalysisPopup->AddSeparator();
173   fAnalysisPopup->AddEntry("&Cuts", kAEMCuts);
174   fAnalysisPopup->AddSeparator();
175   fAnalysisPopup->AddEntry("&Momentum vectors", kAEMVectors);
176   fAnalysisPopup->AddSeparator();
177 //  fAnalysisPopup->AddEntry("&Gui Mode", kAEMGui);
178 //  fAnalysisPopup->AddSeparator();
179
180   fAliEvePopup->Connect("Activated(Int_t)", "AliEveConfigManager",
181                         this, "AliEvePopupHandler(Int_t)");
182
183   fAnalysisPopup->Connect("Activated(Int_t)", "AliEveConfigManager",
184                         this, "AliEvePopupHandler(Int_t)");
185
186   //Storage Manager:
187   fStoragePopup = new TGPopupMenu(gClient->GetRoot());
188   fStoragePopup->AddEntry("&List events",kStorageListEvents);
189   fStoragePopup->AddEntry("&Mark event",kStorageMarkEvent);
190
191   fStoragePopup->Connect("Activated(Int_t)","AliEveConfigManager",
192                          this, "AliEvePopupHandler(Int_t)");
193   
194   fLoadCheck = kFALSE;
195
196 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,25,4)
197   TGMenuBar *mBar = gEve->GetBrowser()->GetMenuBar();
198   mBar->AddPopup("&AliEve", fAliEvePopup, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
199   ((TGCompositeFrame*)mBar->GetParent()->GetParent())->Layout();
200   mBar->AddPopup("&Tools", fAnalysisPopup, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
201     ((TGCompositeFrame*)mBar->GetParent()->GetParent())->Layout();
202    mBar->AddPopup("&Storage Manager",fStoragePopup,new TGLayoutHints(kLHintsTop | kLHintsLeft,0,4,0,0));
203   
204   gEve->GetBrowser()->GetTopMenuFrame()->Layout();
205 #else
206   // Uber hack as TRootBrowser does not provede manu-bar getter.
207   TGFrameElement   *xxFE = (TGFrameElement*)   gEve->GetBrowser()->GetList()->First();
208   TGCompositeFrame *xxCF = (TGCompositeFrame*) xxFE->fFrame;
209   xxFE = (TGFrameElement*)   xxCF->GetList()->First();
210   xxCF = (TGCompositeFrame*) xxFE->fFrame;
211   xxFE = (TGFrameElement*)   xxCF->GetList()->First();
212   xxCF = (TGCompositeFrame*) xxFE->fFrame;
213   xxFE = (TGFrameElement*)   xxCF->GetList()->First();
214   TGMenuBar *mBar = (TGMenuBar*) xxFE->fFrame;
215   mBar->AddPopup("&AliEve", fAliEvePopup, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
216   ((TGCompositeFrame*)mBar->GetParent()->GetParent())->Layout();
217   mBar->AddPopup("&Tools", fAnalysisPopup, new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
218   ((TGCompositeFrame*)mBar->GetParent()->GetParent())->Layout();
219   mBar->AddPopup("&Storage Manager",fStoragePopup,new TGLayoutHints(kLHintsTop | kLHintsLeft,0,4,0,0));
220     ((TGCompositeFrame*)mBar->GetParent()->GetParent())->Layout();
221 #endif
222 }
223
224 //==============================================================================
225
226 #include <iostream>
227 #include <fstream>
228 #include <string>
229 #include <sstream>
230
231 using namespace std;
232
233 namespace
234 {
235 const char *gMacroSaveAsTypes[] = {"CINT Macro", "*.C",
236                                    0, 0}; //for saving/loading macros
237
238 const char *gPictureSaveAsTypes[] = {"PNG Image", "*.png",
239                                    0, 0}; //for saving pictures
240
241 }
242
243 void AliEveConfigManager::AliEvePopupHandler(Int_t id)
244 {
245   // Handle user selections from AliEve popup.
246
247   static const TEveException kEH("AliEveConfigManager::AliEvePopupHandler ");
248
249   switch (id)
250   {
251
252     case kAEMDefault: //default geometry and VizDB
253     {
254       AliEveMultiView *mv = AliEveMultiView::Instance();
255
256       mv->DestroyAllGeometries(); //destroy RPhi and Rhoz geometries before putting new
257
258       gEve->LoadVizDB("geom_gentle_default.C", kTRUE, kTRUE); //loading geometry
259
260       gEve->LoadVizDB("VizDB_scan.C", kTRUE, kTRUE); //loading VizDB
261
262       if(!gEve->GetViewers()->UseLightColorSet())
263         gEve->GetViewers()->SwitchColorSet(); //white background
264
265       gEve->FullRedraw3D();   
266       
267       break;
268     }
269
270     case kAEMScreen: //default geometry with black background
271     {
272       AliEveMultiView *mv = AliEveMultiView::Instance();
273
274       mv->DestroyAllGeometries();
275
276       gEve->LoadVizDB("geom_gentle_default.C", kTRUE, kTRUE);
277
278       gEve->LoadVizDB("VizDB_scan_screen.C", kTRUE, kTRUE);
279
280       if(gEve->GetViewers()->UseLightColorSet())
281         gEve->GetViewers()->SwitchColorSet();
282
283       gEve->FullRedraw3D();    
284
285       break;
286     }
287
288     case kAEMProjector: //default geometry with white background
289     {
290       AliEveMultiView *mv = AliEveMultiView::Instance();
291
292       mv->DestroyAllGeometries();
293
294       gEve->LoadVizDB("geom_gentle_projector.C", kTRUE, kTRUE);
295
296       gEve->LoadVizDB("VizDB_scan_projector.C", kTRUE, kTRUE);
297
298       if(!gEve->GetViewers()->UseLightColorSet())
299         gEve->GetViewers()->SwitchColorSet();
300
301       gEve->FullRedraw3D();    
302
303       break;
304     }
305
306     case kAEMNotransparency: //default geometry with low transparency (5%)
307     {
308       AliEveMultiView *mv = AliEveMultiView::Instance();
309
310       mv->DestroyAllGeometries();
311
312       gEve->LoadVizDB("geom_gentle_notransparency.C", kTRUE, kTRUE);
313
314       gEve->LoadVizDB("VizDB_scan.C", kTRUE, kTRUE);
315
316       if(!gEve->GetViewers()->UseLightColorSet())
317         gEve->GetViewers()->SwitchColorSet();
318
319       gEve->FullRedraw3D();    
320
321       break;
322     }
323
324
325     case kAEMTransparentDark: //default geometry with black background, high transparency (80%)
326     {
327       AliEveMultiView *mv = AliEveMultiView::Instance();
328
329       mv->DestroyAllGeometries();
330
331       gEve->LoadVizDB("geom_gentle_transparent.C", kTRUE, kTRUE);
332
333       gEve->LoadVizDB("VizDB_scan_transparentdark.C", kTRUE, kTRUE);
334
335       if(gEve->GetViewers()->UseLightColorSet())
336         gEve->GetViewers()->SwitchColorSet();
337
338       gEve->FullRedraw3D();   
339
340       break;
341     }
342
343     case kAEMTransparentLight: //default geometry with white background, high transparency (80%)
344     {
345       AliEveMultiView *mv = AliEveMultiView::Instance();
346
347       mv->DestroyAllGeometries();
348
349       gEve->LoadVizDB("geom_gentle_transparent.C", kTRUE, kTRUE);
350
351       gEve->LoadVizDB("VizDB_scan_transparentlight.C", kTRUE, kTRUE);
352
353       if(!gEve->GetViewers()->UseLightColorSet())
354         gEve->GetViewers()->SwitchColorSet();
355
356       gEve->FullRedraw3D();    
357
358       break;
359     }
360
361     case kAEMTransparentMonoDark:
362     {
363       AliEveMultiView *mv = AliEveMultiView::Instance();
364
365       mv->DestroyAllGeometries();
366
367       gEve->LoadVizDB("geom_gentle_transparentdark.C", kTRUE, kTRUE);
368
369       gEve->LoadVizDB("VizDB_scan_transparentdark.C", kTRUE, kTRUE);
370
371       if(gEve->GetViewers()->UseLightColorSet())
372         gEve->GetViewers()->SwitchColorSet();
373
374       gEve->FullRedraw3D();   
375
376       break;
377     }
378
379     case kAEMTransparentMonoLight:
380     {
381       AliEveMultiView *mv = AliEveMultiView::Instance();
382
383       mv->DestroyAllGeometries();
384
385       gEve->LoadVizDB("geom_gentle_transparentlight.C", kTRUE, kTRUE);
386
387       gEve->LoadVizDB("VizDB_scan_transparentlight.C", kTRUE, kTRUE);
388
389       if(!gEve->GetViewers()->UseLightColorSet())
390         gEve->GetViewers()->SwitchColorSet();
391
392       gEve->FullRedraw3D();    
393
394       break;
395     }
396
397     case kAEMGreen:
398     {
399       AliEveMultiView *mv = AliEveMultiView::Instance();
400
401       mv->DestroyAllGeometries();
402
403       gEve->LoadVizDB("geom_gentle_green.C", kTRUE, kTRUE);
404
405       gEve->LoadVizDB("VizDB_scan.C", kTRUE, kTRUE);
406
407       if(!gEve->GetViewers()->UseLightColorSet())
408         gEve->GetViewers()->SwitchColorSet();
409
410       gEve->FullRedraw3D();    
411
412       break;
413     }
414
415     case kAEMBright:
416     {
417       AliEveMultiView *mv = AliEveMultiView::Instance();
418
419       mv->DestroyAllGeometries();
420
421       gEve->LoadVizDB("geom_gentle_bright.C", kTRUE, kTRUE);
422
423       gEve->LoadVizDB("VizDB_scan.C", kTRUE, kTRUE);
424
425       if(gEve->GetViewers()->UseLightColorSet())
426         gEve->GetViewers()->SwitchColorSet();
427
428       gEve->FullRedraw3D();
429
430       break;
431     }
432
433     case kAEMYellow:
434     {
435       AliEveMultiView *mv = AliEveMultiView::Instance();
436
437       mv->DestroyAllGeometries();
438
439       gEve->LoadVizDB("geom_gentle_yellow.C", kTRUE, kTRUE);
440
441       gEve->LoadVizDB("VizDB_scan_yellow.C", kTRUE, kTRUE);
442
443       if(!gEve->GetViewers()->UseLightColorSet())
444         gEve->GetViewers()->SwitchColorSet();
445
446       gEve->FullRedraw3D();    
447
448       break;
449     }
450
451     case kAEMTpc:
452     {
453       AliEveMultiView *mv = AliEveMultiView::Instance();
454
455       mv->DestroyAllGeometries();
456
457       gEve->LoadVizDB("geom_gentle_tpc.C", kTRUE, kTRUE);
458
459       gEve->LoadVizDB("VizDB_scan_tpc.C", kTRUE, kTRUE);
460
461       if(!gEve->GetViewers()->UseLightColorSet())
462         gEve->GetViewers()->SwitchColorSet();
463
464       gEve->FullRedraw3D();
465
466       break;
467     }
468
469     case kAEMAll: //saving pictures from all three viewers
470     {
471       
472      TGFileInfo fi;
473      fi.fFileTypes   = gPictureSaveAsTypes;
474      fi.fIniDir      = StrDup(""); // current directory
475      fi.fFileTypeIdx = 0;
476      fi.fOverwrite   = kTRUE;
477      new TGFileDialog(gClient->GetDefaultRoot(),
478      gEve->GetMainWindow(), kFDSave, &fi); // dialog 
479      if (!fi.fFilename) return;
480
481      TPMERegexp filere(".*/([^/]+$)");
482      if (filere.Match(fi.fFilename) != 2)
483      {
484        Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
485        return;
486      }
487
488      TString file1(filere[1]);
489      TString file2(filere[1]);
490      TString file3(filere[1]);
491      
492      if (!file1.EndsWith(".png"))
493        file1 += "_3D.png"; // adding extensions
494        
495      if (!file2.EndsWith(".png"))
496        file2 += "_RPhi.png"; // adding extensions
497        
498      if (!file3.EndsWith(".png"))
499        file3 += "_RhoZ.png"; // adding extensions
500
501      gSystem->ChangeDirectory(fi.fIniDir);
502       
503      printf("Saving...\n");
504
505      TEveViewerList *viewers = gEve->GetViewers();
506      TEveElement::List_i i = viewers->BeginChildren();
507      i++;
508      TEveViewer* view3d = ((TEveViewer*)*i);
509      view3d->GetGLViewer()->SavePicture(file1); // saving pictures
510      i++;
511      TEveViewer* viewrphi = ((TEveViewer*)*i);
512      viewrphi->GetGLViewer()->SavePicture(file2); // saving pictures
513      i++;
514      TEveViewer* viewrhoz = ((TEveViewer*)*i);
515      viewrhoz->GetGLViewer()->SavePicture(file3); // saving pictures
516      
517      printf("Done.\n"); 
518       
519       break;
520     }
521     
522     case kAEM3d: // saving only 3d view
523     {
524       
525      TGFileInfo fi;
526      fi.fFileTypes   = gPictureSaveAsTypes;
527      fi.fIniDir      = StrDup(""); // current directory
528      fi.fFileTypeIdx = 0;
529      fi.fOverwrite   = kTRUE;
530      new TGFileDialog(gClient->GetDefaultRoot(),
531      gEve->GetMainWindow(), kFDSave, &fi);
532      if (!fi.fFilename) return;
533
534      TPMERegexp filere(".*/([^/]+$)");
535      if (filere.Match(fi.fFilename) != 2)
536      {
537        Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
538        return;
539      }
540
541      TString file1(filere[1]);
542      
543      if (!file1.EndsWith(".png"))
544        file1 += ".png";
545
546      gSystem->ChangeDirectory(fi.fIniDir);
547       
548      printf("Saving...\n");
549
550      TEveViewerList *viewers = gEve->GetViewers();
551      TEveElement::List_i i = viewers->BeginChildren();
552      i++;
553      TEveViewer* view3d = ((TEveViewer*)*i);
554      view3d->GetGLViewer()->SavePicture(file1);
555      
556      printf("Done.\n"); 
557       
558       break;
559     }
560     
561      case kAEMRphi: // saving only RPhi view
562     {
563       
564      TGFileInfo fi;
565      fi.fFileTypes   = gPictureSaveAsTypes;
566      fi.fIniDir      = StrDup(""); // current directory
567      fi.fFileTypeIdx = 0;
568      fi.fOverwrite   = kTRUE;
569      new TGFileDialog(gClient->GetDefaultRoot(),
570      gEve->GetMainWindow(), kFDSave, &fi);
571      if (!fi.fFilename) return;
572
573      TPMERegexp filere(".*/([^/]+$)");
574      if (filere.Match(fi.fFilename) != 2)
575      {
576        Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
577        return;
578      }
579
580      TString file1(filere[1]);
581      
582      if (!file1.EndsWith(".png"))
583        file1 += ".png";
584      
585      gSystem->ChangeDirectory(fi.fIniDir);
586       
587      printf("Saving...\n");
588
589      TEveViewerList *viewers = gEve->GetViewers();
590      TEveElement::List_i i = viewers->BeginChildren();
591      i++;
592      i++;
593      TEveViewer* viewrphi = ((TEveViewer*)*i);
594      viewrphi->GetGLViewer()->SavePicture(file1);
595      
596      printf("Done.\n"); 
597       
598       break;
599     }
600     
601      case kAEMRhoz: // saving only RhoZ view
602     {
603     
604      TGFileInfo fi;
605      fi.fFileTypes   = gPictureSaveAsTypes;
606      fi.fIniDir      = StrDup(""); // current directory
607      fi.fFileTypeIdx = 0;
608      fi.fOverwrite   = kTRUE;
609      new TGFileDialog(gClient->GetDefaultRoot(),
610      gEve->GetMainWindow(), kFDSave, &fi);
611      if (!fi.fFilename) return;
612
613      TPMERegexp filere(".*/([^/]+$)");
614      if (filere.Match(fi.fFilename) != 2)
615      {
616        Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
617        return;
618      }
619
620      TString file1(filere[1]);
621        
622      if (!file1.EndsWith(".png"))
623        file1 += ".png";
624
625      gSystem->ChangeDirectory(fi.fIniDir);
626      
627      printf("Saving...\n");
628
629      TEveViewerList *viewers = gEve->GetViewers();
630      TEveElement::List_i i = viewers->BeginChildren();
631      i++;
632      i++;
633      i++;
634      TEveViewer* viewrhoz = ((TEveViewer*)*i);
635      viewrhoz->GetGLViewer()->SavePicture(file1);
636      
637      printf("Done.\n"); 
638       
639       break;
640     }
641
642     case kAEMAllhr: // saving all three views in high resolution
643     {
644       
645      TGFileInfo fi;
646      fi.fFileTypes   = gPictureSaveAsTypes;
647      fi.fIniDir      = StrDup(""); // current directory
648      fi.fFileTypeIdx = 0;
649      fi.fOverwrite   = kTRUE;
650      new TGFileDialog(gClient->GetDefaultRoot(),
651      gEve->GetMainWindow(), kFDSave, &fi);
652      if (!fi.fFilename) return;
653
654      TPMERegexp filere(".*/([^/]+$)");
655      if (filere.Match(fi.fFilename) != 2)
656      {
657        Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
658        return;
659      }
660
661      TString file1(filere[1]);
662      TString file2(filere[1]);
663      TString file3(filere[1]);
664      
665      if (!file1.EndsWith(".png"))
666        file1 += "_3D.png";
667        
668      if (!file2.EndsWith(".png"))
669        file2 += "_RPhi.png";
670        
671      if (!file3.EndsWith(".png"))
672        file3 += "_RhoZ.png";
673
674      gSystem->ChangeDirectory(fi.fIniDir);
675       
676      printf("Saving...\n");
677
678      TEveViewerList *viewers = gEve->GetViewers();
679      TEveElement::List_i i = viewers->BeginChildren();
680      i++;
681      TEveViewer* view3d = ((TEveViewer*)*i);
682      view3d->GetGLViewer()->SavePictureScale(file1,6.0); // getting high resolution
683      i++;
684      TEveViewer* viewrphi = ((TEveViewer*)*i);
685      viewrphi->GetGLViewer()->SavePictureScale(file2,6.0);
686      i++;
687      TEveViewer* viewrhoz = ((TEveViewer*)*i);
688      viewrhoz->GetGLViewer()->SavePictureScale(file3,6.0);
689      
690      printf("Done.\n"); 
691       
692       break;
693     }
694     
695     case kAEM3dhr: // saving only 3d view in high resolution
696     {
697       
698      TGFileInfo fi;
699      fi.fFileTypes   = gPictureSaveAsTypes;
700      fi.fIniDir      = StrDup(""); // current directory
701      fi.fFileTypeIdx = 0;
702      fi.fOverwrite   = kTRUE;
703      new TGFileDialog(gClient->GetDefaultRoot(),
704      gEve->GetMainWindow(), kFDSave, &fi);
705      if (!fi.fFilename) return;
706
707      TPMERegexp filere(".*/([^/]+$)");
708      if (filere.Match(fi.fFilename) != 2)
709      {
710        Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
711        return;
712      }
713
714      TString file1(filere[1]);
715      
716      if (!file1.EndsWith(".png"))
717        file1 += ".png";
718
719      gSystem->ChangeDirectory(fi.fIniDir);
720       
721      printf("Saving...\n");
722
723      TEveViewerList *viewers = gEve->GetViewers();
724      TEveElement::List_i i = viewers->BeginChildren();
725      i++;
726      TEveViewer* view3d = ((TEveViewer*)*i);
727      view3d->GetGLViewer()->SavePictureScale(file1,4.0);
728      
729      printf("Done.\n"); 
730       
731       break;
732     }
733     
734      case kAEMRphihr: // saving only RPhi view in high resolution
735     {
736       
737      TGFileInfo fi;
738      fi.fFileTypes   = gPictureSaveAsTypes;
739      fi.fIniDir      = StrDup(""); // current directory
740      fi.fFileTypeIdx = 0;
741      fi.fOverwrite   = kTRUE;
742      new TGFileDialog(gClient->GetDefaultRoot(),
743      gEve->GetMainWindow(), kFDSave, &fi);
744      if (!fi.fFilename) return;
745
746      TPMERegexp filere(".*/([^/]+$)");
747      if (filere.Match(fi.fFilename) != 2)
748      {
749        Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
750        return;
751      }
752
753      TString file1(filere[1]);
754      
755      if (!file1.EndsWith(".png"))
756        file1 += ".png";
757      
758      gSystem->ChangeDirectory(fi.fIniDir);
759       
760      printf("Saving...\n");
761
762      TEveViewerList *viewers = gEve->GetViewers();
763      TEveElement::List_i i = viewers->BeginChildren();
764      i++;
765      i++;
766      TEveViewer* viewrphi = ((TEveViewer*)*i);
767      viewrphi->GetGLViewer()->SavePictureScale(file1,4.0);
768      
769      printf("Done.\n"); 
770       
771       break;
772     }
773     
774      case kAEMRhozhr: // saving only RhoZ view in high resolution
775     {
776     
777      TGFileInfo fi;
778      fi.fFileTypes   = gPictureSaveAsTypes;
779      fi.fIniDir      = StrDup(""); // current directory
780      fi.fFileTypeIdx = 0;
781      fi.fOverwrite   = kTRUE;
782      new TGFileDialog(gClient->GetDefaultRoot(),
783      gEve->GetMainWindow(), kFDSave, &fi);
784      if (!fi.fFilename) return;
785
786      TPMERegexp filere(".*/([^/]+$)");
787      if (filere.Match(fi.fFilename) != 2)
788      {
789        Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
790        return;
791      }
792
793      TString file1(filere[1]);
794        
795      if (!file1.EndsWith(".png"))
796        file1 += ".png";
797
798      gSystem->ChangeDirectory(fi.fIniDir);
799      
800      printf("Saving...\n");
801
802      TEveViewerList *viewers = gEve->GetViewers();
803      TEveElement::List_i i = viewers->BeginChildren();
804      i++;
805      i++;
806      i++;
807      TEveViewer* viewrhoz = ((TEveViewer*)*i);
808      viewrhoz->GetGLViewer()->SavePictureScale(file1,4.0);
809      
810      printf("Done.\n"); 
811       
812       break;
813     }
814
815      case kAEMSavemacros:// Saving Data Selection macros
816     {
817
818       AliEveMacroExecutor *exec = AliEveEventManager::GetMaster()->GetExecutor();
819
820       exec->SaveAddedMacros();
821
822       break;
823     }
824  
825    case kAEMLoadmacros://Loading Data Selection macros
826     {
827
828       TEveBrowser *browser = gEve->GetBrowser();
829       browser->ShowCloseTab(kFALSE);
830
831       if(fLoadCheck)
832         browser->RemoveTab(TRootBrowser::kRight, 5);//remove the tab with previous DataSelection window
833       else
834         browser->RemoveTab(TRootBrowser::kRight, 2);
835
836
837       TGFileInfo fi;
838       fi.fFileTypes   = gMacroSaveAsTypes;
839       fi.fIniDir      = StrDup(""); // current directory
840       fi.fFileTypeIdx = 0;
841       fi.fOverwrite   = kTRUE;
842       new TGFileDialog(gClient->GetDefaultRoot(), gEve->GetMainWindow(), kFDOpen, &fi);//dialog
843       if (!fi.fFilename) return;
844
845       TPMERegexp filere(".*/([^/]+$)");
846       if (filere.Match(fi.fFilename) != 2)
847       {
848         Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
849         return;
850       }
851       printf("Loading...\n");
852
853       TString file(filere[1]);
854       gSystem->ChangeDirectory(fi.fIniDir);
855
856       TEveUtil::Macro(file);//run macro
857
858       AliEveEventManager *eman = AliEveEventManager::GetMaster();//reload event (gEve->Refresh() crashes)
859       Int_t ev = eman->GetEventId();
860       eman->Close();
861       eman->Open();
862       eman->GotoEvent(ev);
863
864       printf("Done.\n");
865
866       fLoadCheck = kTRUE;
867
868       break;
869
870     }
871
872     case kAEMSave://saving VizDB
873     {
874       TGFileInfo fi;
875       fi.fFileTypes   = gMacroSaveAsTypes;
876       fi.fIniDir      = StrDup(""); // current directory
877       fi.fFileTypeIdx = 0;
878       fi.fOverwrite   = kTRUE;
879       new TGFileDialog(gClient->GetDefaultRoot(), gEve->GetMainWindow(), kFDSave, &fi);
880       if (!fi.fFilename) return;
881
882       TPMERegexp filere(".*/([^/]+$)");
883       if (filere.Match(fi.fFilename) != 2)
884       {
885         Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
886         return;
887       }
888       printf("Saving...\n");
889
890       TString file(filere[1]);
891       if (!file.EndsWith(".C"))
892         file += ".C";
893       gSystem->ChangeDirectory(fi.fIniDir);
894       gEve->SaveVizDB(file);
895
896 //Last line "gEve->SaveVizDB(file);" gives macro with many unnecessary
897 //lines like "x038->SetMinPt(0);" tahat are not interpreted properly later
898
899       string text;
900       string all;
901
902       ifstream myfile1(file);
903       if(myfile1.is_open())
904         {
905         while(!myfile1.eof())
906           {
907             getline(myfile1,text);
908             TString check(text);
909             if(!(check.EndsWith("MinPt(0);")||check.EndsWith("MaxPt(0);")
910                ||check.EndsWith("LimPt(0);")||check.EndsWith("MinP(0);")
911                ||check.EndsWith("MaxP(0);")||check.EndsWith("LimP(0);")))
912               {
913               all += text; //Cut off unnecessary lines and bring everything together
914               all += "\n";
915               }
916           }
917         myfile1.close();
918         }
919
920       ofstream myfile2(file); //Replacing old file with the one without "bad" lines
921       myfile2 << all;
922       myfile2.close();
923
924       printf("Done.\n");
925       break;
926
927     }
928
929     case kAEMOpen://Opening VizDB
930     {
931       TGFileInfo fi;
932       fi.fFileTypes   = gMacroSaveAsTypes;
933       fi.fIniDir      = StrDup(""); // current directory
934       fi.fFileTypeIdx = 0;
935       fi.fOverwrite   = kTRUE;
936       new TGFileDialog(gClient->GetDefaultRoot(), gEve->GetMainWindow(), kFDOpen, &fi);
937       if (!fi.fFilename) return;
938
939       TPMERegexp filere(".*/([^/]+$)");
940       if (filere.Match(fi.fFilename) != 2)
941       {
942         Warning("AliEvePopupHandler", "file '%s' bad.", fi.fFilename);
943         return;
944       }
945       printf("Opening...\n");
946
947       TString file(filere[1]);
948
949       gSystem->ChangeDirectory(fi.fIniDir);
950
951       gEve->LoadVizDB(file, kTRUE, kTRUE);
952
953       gEve->Redraw3D(kTRUE);
954
955       printf("Done.\n");
956       break;
957
958     }
959
960     case kAEMSetDefault://Restore default settings
961     {
962
963       printf("Setting...\n");
964
965       TEveBrowser *browser = gEve->GetBrowser();
966       browser->ShowCloseTab(kFALSE);
967
968       if(fLoadCheck)
969         browser->RemoveTab(TRootBrowser::kRight, 5);//remove the tab with previous DataSelection window
970       else
971         browser->RemoveTab(TRootBrowser::kRight, 2);
972
973       TEveUtil::Macro("geom_gentle_default.C");
974       gEve->LoadVizDB("VizDB_scan.C", kTRUE, kTRUE);
975       TEveUtil::Macro("DataSelection_init.C");
976
977       if(!gEve->GetViewers()->UseLightColorSet())
978         gEve->GetViewers()->SwitchColorSet(); //white background
979
980       AliEveEventManager *eman = AliEveEventManager::GetMaster();//reload event (gEve->Refresh() crashes)
981       Int_t ev = eman->GetEventId();
982       eman->Close();
983       eman->Open();
984       eman->GotoEvent(ev);
985
986       printf("Done.\n");
987
988       fLoadCheck = kTRUE;
989
990       gEve->Redraw3D(kTRUE);
991
992
993     }
994
995 /*
996     case kAEMResiduals:
997     {
998
999       TEveUtil::Macro("make_residuals.C");
1000
1001       break;
1002
1003     }
1004 */
1005
1006     case kAEMCuts:
1007     {
1008
1009       TEveUtil::Macro("alieve_set_cuts.C");
1010
1011       break;
1012
1013     }
1014
1015     case kAEMVectors:
1016     {
1017
1018       TEveUtil::Macro("set_momentum_vectors.C");
1019
1020       break;
1021
1022     }
1023
1024 /*
1025     case kAEMGui:
1026     {
1027
1028       TEveUtil::Macro("alieve_gui_mode.C");
1029
1030       break;
1031
1032     }
1033 */
1034   case kStorageListEvents:
1035   {
1036       fListEventsWindow =
1037                   AliStorageAdministratorPanelListEvents::GetInstance();
1038       
1039       fListEventsWindow->Connect("SelectedEvent()","AliEveConfigManager",this,"SetEventInEventManager()");
1040       
1041       
1042           break;
1043
1044   }
1045    case kStorageMarkEvent:
1046   {
1047           AliStorageAdministratorPanelMarkEvent *markEventWindow =
1048                   AliStorageAdministratorPanelMarkEvent::GetInstance();
1049           break;
1050
1051   }
1052
1053     default:
1054     {
1055       Warning(kEH, "Unknown menu entry.");
1056       break;
1057     }
1058   }
1059 }
1060
1061 void AliEveConfigManager::SetEventInEventManager()
1062 {
1063     AliEveEventManager *manager = AliEveEventManager::GetMaster();
1064     AliESDEvent *event = fListEventsWindow->GetSelectedEvent();
1065     
1066     if(event)
1067     {
1068             cout<<"SETTING EVENT IN ED"<<endl;
1069             //fListEventsWindow->onExit();
1070         manager->SetAutoLoad(kFALSE);
1071         manager->PrepareForNewEvent(event);
1072     }
1073     
1074 }
1075
1076