/[PAMELA software]/eventviewer/ground/macros/EventViewer.c
ViewVC logotype

Diff of /eventviewer/ground/macros/EventViewer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by mocchiut, Fri Jan 13 10:07:39 2006 UTC revision 1.3 by mocchiut, Thu Mar 9 15:50:53 2006 UTC
# Line 1  Line 1 
1  //-------------------------------------------------------------------------------------------------------------------------------------------------------  //-------------------------------------------------------------------------------------------------------------------------------------------------------
2  //  //
3  //   EventViewer.c      version 8.01  (2006-01-10)  //   EventViewer.c      version 9.02  (2006-03-09)
4  //  //
5  //   Shows PAMELA events - Emiliano Mocchiutti  //   Shows PAMELA events - Emiliano Mocchiutti
6  //  //
# Line 10  Line 10 
10  //  //
11  //   Standard use:  //   Standard use:
12  //  //
13  //   root[0] .L ShowEvent.c  //   bash> EventViewer
 //   root[1] ShowEvent("/home/dati/filesFromYoda/DW_050112_00600/");  
14  //  //
15  //   For further informations use:  //   For further informations use:
16  //  //
17  //   root[3] ShowEvent();  //   EventViewer --help
18  //  //
19  //   or  //   or
20  //  //
21  //   root[4] ShowEvent("help");  //   EventViewer --version
22  //    //  
23  //-------------------------------------------------------------------------------------------------------------------------------------------------------  //-------------------------------------------------------------------------------------------------------------------------------------------------------
24  //  //
25  //   Changelog:  //   Changelog:
26  //  //
27    //   9.01 - 9.02 (2006-03-09): Now reads tracker software output from v3r02. Small bugs fixed (figure not editable now and complete text inside the GUI if there are only files with the same name).
28    //
29    //   9.00 - 9.01 (2006-03-03): Many bugs fixed and some correction in the behaviour in some cases (many thanks to Silvio for help in developing and debugging!).
30    //
31    //   8.02 - 9.00 (2006-02-17): Added the Graphic User Interface, fixed some old bugs, many new features (on fly load and unload files and selection files, stop searching
32    //                             while in selection mode, on fly level0/best level switching, fork the application/no text output flag,... )
33    //
34    //   8.01 - 8.02 (2006-02-16): Don't show positions not used in determine the track. Shows S4 mip values in standard mode (not scientific notation).
35    //
36  //   8.00 - 8.01 (2006-01-10): Added tracker measured positions used to determine the track.  //   8.00 - 8.01 (2006-01-10): Added tracker measured positions used to determine the track.
37  //  //
38  //   7.03 - 8.00 (2005-11-24): many changes to compile the macro. The code is still very redundant and heavy but some bugs were fixed and now it should be more stable.  //   7.03 - 8.00 (2005-11-24): many changes to compile the macro. The code is still very redundant and heavy but some bugs were fixed and now it should be more stable.
# Line 164  Line 172 
172  #include <iostream>  #include <iostream>
173  #include <iomanip>  #include <iomanip>
174  //  //
175    #include <TObjectTable.h>
176    #include <TGClient.h>
177    #include <TGButton.h>
178    #include <TGComboBox.h>
179    #include <TGLabel.h>
180    #include <TGTextEntry.h>
181    #include <TGFrame.h>
182    #include <TGButtonGroup.h>
183    #include <TGProgressBar.h>
184    #include <TGMsgBox.h>
185    #include <TGComboBox.h>
186    //
187  #include <TTree.h>  #include <TTree.h>
188  #include <TClassEdit.h>  #include <TClassEdit.h>
189  #include <TObject.h>  #include <TObject.h>
# Line 260  void unload2(){ Line 280  void unload2(){
280          gSystem->Unload(libload.str().c_str());          gSystem->Unload(libload.str().c_str());
281  #endif  #endif
282  }  }
283    
284    //
285    // GUI
286    //
287    
288    class PAMevcontrol : public TGMainFrame {
289        //RQ_OBJECT("PAMevcontrol");
290    
291     private:
292      TGHProgressBar *fHProg1;
293      TGTextEntry *fText2;
294      TGTextEntry *fText4;
295      TGComboBox *fCombo;
296      TCanvas *thefigure;
297      struct Variables *cvar;
298    
299     public:
300      PAMevcontrol(const TGWindow *p,UInt_t w,UInt_t h,struct Variables & var, TCanvas &figure);
301      virtual ~PAMevcontrol();
302      void chktof();
303      void chkac();
304      void chktrk();
305      void chkcalo();
306      void chks4();
307      void chknd();
308      void chkinfo();
309      void chknames();
310      void chkpalette();
311      void radiocolor();
312      void radiobw();
313      void radiotrack();
314      void forcel0();
315      void next();
316      void prev();
317      void stop();
318      void SetFilename();
319      void SetFilter();
320      void jumpto();
321      void radioevent();
322      void radioprog();
323      void saveas();
324      void CompleteText();
325      void Close();
326      void increment(float val);
327      void DIALOG(Int_t ty, TString warn);
328      void clearselfi();
329      void upgrnamfi();
330      void Terminate();
331      ClassDef(PAMevcontrol,0);
332    };
333    
334    PAMevcontrol::PAMevcontrol(const TGWindow *p,UInt_t w,UInt_t h,Variables & var, TCanvas &figure) : TGMainFrame(p, w, h){
335      //
336      SetCleanup(kDeepCleanup);
337      DontCallClose();
338      Connect("CloseWindow()","PAMevcontrol",this,"Terminate()");
339      //
340      cvar = &var;
341      thefigure = &figure;
342      //
343      TGCompositeFrame *cframe1 = new TGCompositeFrame(this, 280, 60, kVerticalFrame);
344      TGCompositeFrame *cframe2 = new TGCompositeFrame(this, 280, 60, kVerticalFrame);
345      TGCompositeFrame *cframe3 = new TGCompositeFrame(this, 280, 60, kVerticalFrame);
346      TGCompositeFrame *cframe4 = new TGCompositeFrame(this, 280, 60, kVerticalFrame);
347      TGGroupFrame *gf = new TGGroupFrame(cframe1, "Appearance");
348      TGGroupFrame *inputf = new TGGroupFrame(cframe2, "Input");
349      TGGroupFrame *jumpf = new TGGroupFrame(cframe3, "Jump to");
350      TGGroupFrame *savef = new TGGroupFrame(cframe4, "Save figure as");
351      //
352      TGHorizontalFrame *htexts = new TGHorizontalFrame(savef,400,800);
353      TGHorizontalFrame *htextsl = new TGHorizontalFrame(cframe4,400,800);
354      TGHorizontalFrame *htext = new TGHorizontalFrame(inputf,400,800);
355      TGHorizontalFrame *htext2 = new TGHorizontalFrame(inputf,400,800);
356      TGHorizontalFrame *htext3 = new TGHorizontalFrame(jumpf,400,800);
357      TGHorizontalFrame *htext4 = new TGHorizontalFrame(jumpf,400,80);
358      TGHorizontalFrame *hframe = new TGHorizontalFrame(this,400,800);
359      TGHorizontalFrame *hframe1 = new TGHorizontalFrame(gf, 280, 50);
360      TGHorizontalFrame *hframe2 = new TGHorizontalFrame(gf, 280, 40);
361      TGHorizontalFrame *hframe3 = new TGHorizontalFrame(gf, 280, 40);
362      TGHorizontalFrame *hframe4 = new TGHorizontalFrame(gf,280,10);
363      TGVerticalFrame *hframe5 = new TGVerticalFrame(hframe4, 280, 40);
364      TGHorizontalFrame *hfrprog = new TGHorizontalFrame(this,400,800);
365      //
366      TGTextEntry *fText = new TGTextEntry(htext, new TGTextBuffer(20),-1);
367      fText->SetText(cvar->thefilename.Data());
368      TGTextButton *Load = new TGTextButton(htext,"Load");
369      Load->Connect("Pressed()","TGTextEntry",fText,"ReturnPressed()");
370      fText->Connect("ReturnPressed()", "PAMevcontrol", this,"SetFilename()");
371      fText->Connect("TabPressed()", "PAMevcontrol", this,"CompleteText()");
372      htext->AddFrame(fText, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY, 0, 5, 5, 5));
373      htext->AddFrame(Load, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX,0,5,5,5));
374      inputf->AddFrame(new TGLabel(inputf, new TGHotString("Filename:")));
375      inputf->AddFrame(htext, new TGLayoutHints(kLHintsExpandX));
376      //
377      fText2 = new TGTextEntry(htext2, new TGTextBuffer(20),-1);
378      fText2->SetText(cvar->thefilter.Data());
379      TGTextButton *Load2 = new TGTextButton(htext2,"Load");
380      Load2->Connect("Clicked()","TGTextEntry",fText2,"ReturnPressed()");
381      fText2->Connect("ReturnPressed()", "PAMevcontrol", this,"SetFilter()");
382      fText2->Connect("TabPressed()", "PAMevcontrol", this,"CompleteText()");
383      htext2->AddFrame(fText2, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY, 0, 5, 5, 5));
384      htext2->AddFrame(Load2, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX,0,5,5,5));
385      inputf->AddFrame(new TGLabel(inputf, new TGHotString("Selection file:")));
386      inputf->AddFrame(htext2, new TGLayoutHints(kLHintsExpandX));
387      //
388      cframe2->AddFrame(inputf,new TGLayoutHints(kLHintsExpandX,5,5,5,5));
389      //
390      TGCheckButton *fchktof = new TGCheckButton(hframe1, "TOF");  
391      fchktof->Connect("Clicked()","PAMevcontrol", this,"chktof()");
392      if ( cvar->TOF ) fchktof->SetState(kButtonDown);
393      hframe1->AddFrame(fchktof, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,0,5,5,5));
394      //
395      TGCheckButton *fchkac = new TGCheckButton(hframe1, "AC");  
396      fchkac->Connect("Clicked()","PAMevcontrol", this,"chkac()");  
397      if ( cvar->AC ) fchkac->SetState(kButtonDown);
398      hframe1->AddFrame(fchkac, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,5,25,5,5));
399      //
400      TGCheckButton *fchktrk = new TGCheckButton(hframe1, "Tracker");  
401      fchktrk->Connect("Clicked()","PAMevcontrol",this,"chktrk()");  
402      if ( cvar->TRK ) fchktrk->SetState(kButtonDown);
403      hframe1->AddFrame(fchktrk, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,10,5,5,5));
404      //
405      gf->AddFrame(hframe1, new TGLayoutHints(kLHintsExpandX));
406      //
407      TGCheckButton *fchks4 = new TGCheckButton(hframe2, "S4");  
408      fchks4->Connect("Clicked()","PAMevcontrol",this,"chks4()");  
409      if ( cvar->S4 ) fchks4->SetState(kButtonDown);
410      hframe2->AddFrame(fchks4, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,0,15,5,5));
411      //
412      TGCheckButton *fchknd = new TGCheckButton(hframe2, "ND");  
413      fchknd->Connect("Clicked()","PAMevcontrol",this,"chknd()");  
414      if ( cvar->ND ) fchknd->SetState(kButtonDown);
415      hframe2->AddFrame(fchknd, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,5,25,5,5));
416      //
417      TGCheckButton *fchkcalo = new TGCheckButton(hframe2, "Calorimeter");  
418      fchkcalo->Connect("Clicked()","PAMevcontrol",this,"chkcalo()");  
419      if ( cvar->CALO ) fchkcalo->SetState(kButtonDown);
420      hframe2->AddFrame(fchkcalo, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,10,2,5,5));
421      //
422      gf->AddFrame(hframe2, new TGLayoutHints(kLHintsExpandX));
423      //
424      TGCheckButton *fchkinfo = new TGCheckButton(hframe3, "Infos");  
425      fchkinfo->Connect("Clicked()","PAMevcontrol",this,"chkinfo()");  
426      if ( cvar->INFOS ) fchkinfo->SetState(kButtonDown);
427      hframe3->AddFrame(fchkinfo, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,0,5,5,5));
428      //
429      TGCheckButton *fchknames = new TGCheckButton(hframe3, "Names");  
430      fchknames->Connect("Clicked()","PAMevcontrol",this,"chknames()");  
431      if ( cvar->VINFOS ) fchknames->SetState(kButtonDown);
432      hframe3->AddFrame(fchknames, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,5,5,5,5));
433      TGCheckButton *fchkpalette = new TGCheckButton(hframe3, "Palette");  
434      fchkpalette->Connect("Clicked()","PAMevcontrol",this,"chkpalette()");  
435      if ( cvar->PALETTE) fchkpalette->SetState(kButtonDown);
436      hframe3->AddFrame(fchkpalette, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,10,5,5,5));
437      gf->AddFrame(hframe3, new TGLayoutHints(kLHintsExpandX));
438      //
439      TGVButtonGroup *group = new TGVButtonGroup(hframe4);
440      TGRadioButton *bwc0;
441      TGRadioButton *bwc1;
442      bwc0 = new TGRadioButton(group, "Colour");
443      bwc1 = new TGRadioButton(group, "B/W");
444      if ( cvar->bw ){
445        bwc1->SetState(kButtonDown);
446      } else {
447        bwc0->SetState(kButtonDown);
448      };
449      bwc0->Connect("Pressed()", "PAMevcontrol",this,"radiocolor()");
450      bwc1->Connect("Pressed()", "PAMevcontrol",this,"radiobw()");
451      hframe4->AddFrame(group,new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,1,5,5,5));
452      //
453      //
454      TGCheckButton *ftrks4 = new TGCheckButton(hframe5, "Track in S4/ND");  
455      ftrks4->Connect("Clicked()","PAMevcontrol",this,"radiotrack()");  
456      if ( cvar->tracknds4) ftrks4->SetState(kButtonDown);
457      hframe5->AddFrame(ftrks4, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,5,2,5,5));
458      TGCheckButton *ffl0 = new TGCheckButton(hframe5, "Force LEVEL0");
459      ffl0->Connect("Clicked()","PAMevcontrol",this,"forcel0()");
460      if ( cvar->fl0 ) ffl0->SetState(kButtonDown);
461      hframe5->AddFrame(ffl0, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,5,2,5,5));
462      //
463      hframe4->AddFrame(hframe5, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY,10,5,5,5));
464      gf->AddFrame(hframe4, new TGLayoutHints(kLHintsExpandX));
465      //
466      cframe1->AddFrame(gf, new TGLayoutHints(kLHintsExpandX));
467      //
468      TGHButtonGroup *jgroup = new TGHButtonGroup(htext4);
469      TGRadioButton *jbwc0;
470      TGRadioButton *jbwc1;
471      jbwc0 = new TGRadioButton(jgroup, "event      ");
472      jbwc1 = new TGRadioButton(jgroup, "progressive");
473      jbwc1->SetState(kButtonDown);
474      jbwc0->Connect("Pressed()", "PAMevcontrol",this,"radioevent()");
475      jbwc1->Connect("Pressed()", "PAMevcontrol",this,"radioprog()");
476      htext4->AddFrame(jgroup,new TGLayoutHints(kLHintsExpandX,1,1,0,0));
477      //
478      TGTextEntry *fText3 = new TGTextEntry(htext3, new TGTextBuffer(6),-1);
479      TGTextButton *Jump = new TGTextButton(htext3,"go");
480      Jump->Connect("Clicked()","TGTextEntry",fText3,"ReturnPressed()");
481      fText3->Connect("ReturnPressed()", "PAMevcontrol", this,"jumpto()");
482      htext3->AddFrame(new TGLabel(htext3, new TGHotString("number")), new TGLayoutHints(kLHintsExpandX,0,0,1,1));
483      htext3->AddFrame(fText3, new TGLayoutHints(kLHintsExpandX, 0, 8, 0, 0));
484      htext3->AddFrame(Jump, new TGLayoutHints(kLHintsExpandX,0,0,0,0));
485      jumpf->AddFrame(htext4, new TGLayoutHints(kLHintsExpandX,0,0,1,1)); //
486      jumpf->AddFrame(htext3, new TGLayoutHints(kLHintsExpandX,0,0,0,1)); //
487      //
488      cframe3->AddFrame(jumpf,new TGLayoutHints(kLHintsExpandX,5,5,5,5));
489      //
490      fText4 = new TGTextEntry(htexts, new TGTextBuffer(18),-1);
491      TGTextButton *save = new TGTextButton(htextsl,"save");
492      save->Connect("Clicked()","TGTextEntry",fText4,"ReturnPressed()");
493      fText4->Connect("ReturnPressed()", "PAMevcontrol", this,"saveas()");
494      fText4->Connect("TabPressed()", "PAMevcontrol", this,"CompleteText()");
495      htexts->AddFrame(fText4, new TGLayoutHints(kLHintsExpandX, 0, 8, 1, 1));
496      //
497      fCombo = new TGComboBox(htexts, 98);
498      fCombo->AddEntry(".ps", 0);
499      fCombo->AddEntry(".eps", 1);
500      fCombo->AddEntry(".gif", 2);
501      fCombo->AddEntry(".jpg", 3);
502      fCombo->AddEntry(".tiff", 4);
503      fCombo->AddEntry(".xpm", 5);
504      fCombo->AddEntry(".pdf", 6);
505      fCombo->AddEntry(".xml", 7);
506      fCombo->AddEntry(".png", 8);
507      fCombo->AddEntry(".svg", 9);
508      fCombo->AddEntry(".root", 10);
509      fCombo->AddEntry(".C", 11);
510      fCombo->Select(0);
511      fCombo->Resize(50,23);
512      //  htexts->AddFrame(fCombo, new TGLayoutHints(kLHintsCenterX | kLHintsTop | kLHintsLeft | kLHintsCenterY | kLHintsExpandX, 0, 8, 1, 1));
513      htexts->AddFrame(fCombo, new TGLayoutHints(kLHintsExpandY | kLHintsRight, 2, 2, 2, 1));
514      //
515      htextsl->AddFrame(save, new TGLayoutHints(kLHintsExpandX,0,0,2,1));
516      savef->AddFrame(htexts, new TGLayoutHints(kLHintsExpandX,0,0,2,5));
517      //  savef->AddFrame(htextsl, new TGLayoutHints(kLHintsExpandX,5,2,5,2));
518      savef->AddFrame(htextsl, new TGLayoutHints(kLHintsExpandX,8,0,5,2));
519      //
520      cframe4->AddFrame(savef,new TGLayoutHints(kLHintsExpandX,5,5,5,5));
521      //
522      fHProg1 = new TGHProgressBar(hfrprog, TGProgressBar::kFancy, 260);
523      fHProg1->SetBarColor("green");
524      fHProg1->ShowPosition();
525      hfrprog->AddFrame(fHProg1, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsCenterY | kLHintsExpandX,5,5,5,5));
526      //
527      //
528      TGTextButton *prev = new TGTextButton(hframe,"< &Back");
529      prev->Connect("Clicked()","PAMevcontrol",this,"prev()");
530      hframe->AddFrame(prev, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX,5,5,3,4));
531      //
532      TGTextButton *exit = new TGTextButton(hframe,"E&xit");
533      exit->Connect("Clicked()","PAMevcontrol",this,"Terminate()");
534      //,"gApplication->Terminate(0)");
535      exit->SetToolTipText("Quit the event viewer");
536      hframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX,5,5,3,4));
537      //
538      TGTextButton *stop = new TGTextButton(hframe,"&Stop");
539      stop->Connect("Clicked()","PAMevcontrol",this,"stop()");
540      hframe->AddFrame(stop, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX,5,5,3,4));
541      //
542      TGTextButton *next = new TGTextButton(hframe,"&Next >");
543      next->Connect("Clicked()","PAMevcontrol",this,"next()");
544      hframe->AddFrame(next, new TGLayoutHints(kLHintsCenterX | kLHintsExpandX,5,5,3,4));
545      //
546      //
547      //  AddFrame(htext, new TGLayoutHints(kLHintsExpandX,2,2,15,1));
548      AddFrame(cframe2, new TGLayoutHints(kLHintsExpandX,1,1,1,1));
549      AddFrame(cframe1, new TGLayoutHints(kLHintsExpandX,1,1,1,1));
550      AddFrame(cframe3, new TGLayoutHints(kLHintsExpandX,1,1,1,1));
551      AddFrame(cframe4, new TGLayoutHints(kLHintsExpandX,1,1,1,1));
552      AddFrame(hfrprog, new TGLayoutHints(kLHintsExpandX,1,1,1,1));
553      AddFrame(hframe, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY,1,1,1,1));
554      // Set a name to the main frame
555      SetWindowName("PAMELA Event Viewer control panel");
556      // Map all subwindows of main frame
557      MapSubwindows();
558      // Initialize the layout algorithm
559      Resize(GetDefaultSize());
560      // Map main frame
561      MapWindow();
562    }
563    
564    void PAMevcontrol::DIALOG(Int_t ty, TString warn){    
565        //
566        // ty = 0 -> INFO, ty = 1 -> WARNING, ty = 3 -> ERROR
567        //
568        Int_t retval;
569        TString title;
570        EMsgBoxIcon mb_icon = kMBIconStop;
571        if ( ty == 0 ){
572            title="INFO";
573            mb_icon = kMBIconAsterisk;
574        };
575        if ( ty == 1 ){
576            title="WARNING!";
577            mb_icon = kMBIconExclamation;
578        };
579        if ( ty == 2 ){
580            title="ERROR!!";
581            mb_icon = kMBIconStop;
582        };
583        new TGMsgBox(gClient->GetRoot(), this, title.Data(), warn.Data(), mb_icon, kMBOk, &retval);
584    }
585    
586    
587    void PAMevcontrol::SetFilename() {
588        TGTextEntry *entry = (TGTextEntry*)gTQSender;
589        TString text = entry->GetText();
590        cvar->thefilename=text.Data();
591        cvar->nevents = 0;
592        cvar->firstevno = 0;
593        cvar->lastevno = 0;
594        cvar->restart = true;
595        cvar->waitforever = false;
596    }
597    
598    void PAMevcontrol::SetFilter() {
599        TGTextEntry *entry = (TGTextEntry*)gTQSender;
600        TString text = entry->GetText();
601        cvar->thefilter=text.Data();
602        cvar->i--;
603        cvar->selex = false;
604        cvar->nevents = 0;
605        cvar->firstevno = 0;
606        cvar->lastevno = 0;
607        cvar->refresh = true;
608    }
609    
610    void PAMevcontrol::CompleteText() {
611        TGTextEntry *entry = (TGTextEntry*)gTQSender;
612        TString text = entry->GetText();
613        Int_t curspos = entry->GetCursorPosition();
614        Int_t ncurspos = 0;
615        TString textrem;
616        stringcopy(textrem,text,curspos,text.Length());
617        text.Resize(curspos);
618        if ( !strcmp(text.Data(),"") ) {
619            stringstream ntext;
620            ntext.str("");
621            ntext << gSystem->ExpandPathName("$HOME");
622            text = ntext.str().c_str();
623            curspos=ntext.str().length();  
624        };
625        char *test = gSystem->ExpandPathName(text.Data());
626        const char *dir = gSystem->DirName(test);
627        const char *base = gSystem->BaseName(test);
628        TString lbase = base;
629        Int_t lenbase = lbase.Length();
630        TSystemDirectory *tsd = new TSystemDirectory("",dir);
631        TSystemFile *file;
632        TList *lsmatch = new TList;
633        Int_t numf = 0;
634        Int_t numgo = 0;
635        Int_t charmac = 0;
636        TString tbase;
637        Int_t k = 0;
638        stringstream newtext;
639        TSystemFile *mfile;
640        TSystemFile nfile;
641        TList *lsf = new TList;
642        const char *ctbase;
643        if ( !tsd->GetListOfFiles() ){
644            gVirtualX->Bell(0);
645            goto end;
646        };
647        lsf = tsd->GetListOfFiles();
648        file = (TSystemFile*)lsf->First();
649        //
650        while( (TSystemFile*)lsf->After(file) ){
651            numf++;
652            file = (TSystemFile*)lsf->After(file);
653            if ( !strncmp(file->GetName(),base,lenbase) ){
654                numgo++;
655                lsmatch->AddLast(file);
656                const char *ctbase = file->GetName();
657                tbase = ctbase;
658                charmac = tbase.Length();
659            };
660        };
661        newtext.str("");
662        if ( numgo > 0 ){
663          mfile = (TSystemFile*)lsmatch->First();
664          ctbase = mfile->GetName();    
665          while ( (!strcmp(ctbase,"..") || !strcmp(ctbase,".")) && (TSystemFile*)lsmatch->After(mfile) ) {
666            mfile = (TSystemFile*)lsmatch->After(mfile);
667            ctbase = mfile->GetName();
668          };
669          tbase = ctbase;
670          base = ctbase;    
671          charmac = tbase.Length();;
672          while( (TSystemFile*)lsmatch->After(mfile) ){
673            mfile = (TSystemFile*)lsmatch->After(mfile);
674            ctbase = mfile->GetName();
675            while ( (!strcmp(ctbase,"..") || !strcmp(ctbase,".")) && (TSystemFile*)lsmatch->After(mfile) ) {
676              mfile = (TSystemFile*)lsmatch->After(mfile);
677              ctbase = mfile->GetName();
678            };
679            tbase = ctbase;
680            k = 0;
681            for ( Int_t i=lenbase; i<=tbase.Length(); i++){
682              if ( !strncmp(tbase.Data(),base,i) && strcmp(tbase.Data(),base) ){
683                k = i;
684              };
685            };
686            if ( k <= charmac){
687              charmac = k;          
688            };
689          };
690        };
691        if ( !charmac ) {
692            gVirtualX->Bell(0);
693            goto end;
694        };
695        tbase.Resize(charmac);
696        if ( !strcmp(dir,"") || !strcmp(dir,"/") ){
697            newtext << "/" << tbase.Data();
698        } else {
699            newtext << dir << "/" << tbase.Data();
700        };
701        nfile = TSystemFile(tbase.Data(),dir);
702        if ( nfile.IsDirectory() && numgo == 1 ) newtext << "/";
703        ncurspos = newtext.str().length();
704        if ( textrem.Length() ) newtext << textrem.Data();    
705        entry->SetText(newtext.str().c_str());
706        entry->SetCursorPosition(ncurspos);
707     end:
708        lsf->Clear();
709        lsmatch->Clear();    
710    }
711    
712    void PAMevcontrol::saveas() {
713        TString text = fText4->GetText();
714        Int_t sel=fCombo->GetSelected();
715        TString ty;
716        switch (sel){
717        case (0):
718            ty = ".ps";
719            break;
720        case (1):
721            ty = ".eps";
722            break;
723        case (2):
724            ty = ".gif";
725            break;
726        case (3):
727            ty = ".jpg";
728            break;
729        case (4):
730            ty = ".tiff";
731            break;
732        case (5):
733            ty = ".xpm";
734            break;
735        case (6):
736            ty = ".pdf";
737            break;
738        case (7):
739            ty = ".xml";
740            break;
741        case (8):
742            ty = ".png";
743            break;
744        case (9):
745            ty = ".svg";
746            break;
747        case (10):
748            ty = ".root";
749            break;
750        case (11):
751            ty = ".C";
752            break;
753        };
754        if ( sel == 0 ) ty = ".ps";
755        stringstream name;
756        if ( strcmp(text.Data(),"") ){
757            name.str("");
758            name << text.Data();
759            name << ty.Data();
760            thefigure->SaveAs(name.str().c_str());
761            name.str("");
762            name << " Saved as ";
763            name << text.Data();
764            name << ty.Data();    
765            DIALOG(0,name.str().c_str());
766            printf(" Saved as %s%s \n",text.Data(),ty.Data());
767        };
768    }
769    
770    void PAMevcontrol::increment(float val) {
771        fHProg1->SetPosition(val);
772        fHProg1->DoRedraw();
773        gSystem->ProcessEvents();
774    }
775    
776    void PAMevcontrol::forcel0() {
777        if ( cvar->fl0 ) {
778            cvar->fl0 = false;
779        } else {
780            cvar->fl0 = true;
781        };
782        cvar->alrforc = false;
783        cvar->i--;
784        cvar->nevents = 0;
785        cvar->firstevno = 0;
786        cvar->lastevno = 0;
787        cvar->refresh = true;
788    }
789    
790    void PAMevcontrol::clearselfi(){
791        fText2->SetText("");  
792    }
793    
794    void PAMevcontrol::upgrnamfi(){
795        fText4->SetText(cvar->svas.Data());  
796        fText4->SetCursorPosition(fText4->GetMaxLength());
797    }
798    
799    void PAMevcontrol::jumpto() {
800        TGTextEntry *entry = (TGTextEntry*)gTQSender;
801        TString text = entry->GetText();
802        Int_t j;
803        j = atoi(text.Data());
804        if ( cvar->jumprog ){
805            if ( j < 1 || j > cvar->nevents ) {
806                printf("\n You can choose between 1 and %i \n",(int)cvar->nevents);
807                stringstream warning;
808                warning.str("");
809                warning << "You can choose between 1 and ";
810                warning << (int)cvar->nevents;
811                DIALOG(1,warning.str().c_str());
812            } else {
813                stringstream warning;
814                warning.str("");
815                warning << "Jumping to progressive number ";
816                warning << j;
817                DIALOG(0,warning.str().c_str());
818                printf("\n Jumping to progressive number %i\n\n",j);
819                cvar->i = j-2;
820                cvar->goon = true;
821            };      
822        } else {
823            if ( j < cvar->firstevno || j > cvar->lastevno ) {
824                printf("\n You can choose between %i and %i \n",cvar->firstevno,cvar->lastevno);
825                stringstream warning;
826                warning.str("");
827                warning << "You can choose between ";
828                warning << cvar->firstevno;
829                warning << " and ";
830                warning << cvar->lastevno;
831                DIALOG(1,warning.str().c_str());
832            } else {
833                stringstream warning;
834                warning.str("");
835                warning << "Jumping to event number ";
836                warning << j;
837                DIALOG(0,warning.str().c_str());
838                printf("\n Jumping to event number %i\n\n",j);
839                cvar->jumpto = j;
840                cvar->jumpen = true;
841                cvar->goon = true;
842            };
843        };
844        entry->SetText("");    
845    }
846    
847    void PAMevcontrol::radioevent() {
848        cvar->jumprog = false;    
849    }
850    
851    void PAMevcontrol::radioprog() {
852        cvar->jumprog = true;    
853    }
854    
855    void PAMevcontrol::radiocolor() {
856        if ( !cvar->goon ){
857            if ( cvar->bw ) {
858                cvar->bw = 0;
859                cvar->i--;
860                cvar->goon = true;
861            };
862        };
863    }
864    
865    void PAMevcontrol::radiobw() {
866        if ( !cvar->goon ){
867            if ( !cvar->bw ) {
868                cvar->bw = 1;
869                cvar->i--;
870                cvar->goon = true;
871            };
872        };
873    }
874    
875    void PAMevcontrol::radiotrack() {
876      if ( cvar->tracknds4 ) {
877        cvar->tracknds4 = 0;
878      } else {
879        cvar->tracknds4 = 1;
880      };
881        cvar->i--;
882        cvar->goon = true;
883    }
884    
885    void PAMevcontrol::chktof() {
886      if ( cvar->TOF ) {
887        cvar->TOF = 0;
888      } else {
889        cvar->TOF = 1;
890      };
891      cvar->i--;
892      cvar->nevents = 0;
893      cvar->firstevno = 0;
894      cvar->lastevno = 0;
895      cvar->refresh = true;
896    }
897    
898    void PAMevcontrol::chkac() {
899      if ( cvar->AC ) {
900        cvar->AC = 0;
901      } else {
902        cvar->AC = 1;
903      };
904      cvar->i--;
905      cvar->nevents = 0;
906      cvar->firstevno = 0;
907      cvar->lastevno = 0;
908      cvar->refresh = true;
909    }
910    
911    void PAMevcontrol::chktrk() {
912      if ( cvar->TRK ) {
913        cvar->TRK = 0;
914      } else {
915        cvar->TRK = 1;
916      };
917      cvar->i--;
918      cvar->nevents = 0;
919      cvar->firstevno = 0;
920      cvar->lastevno = 0;
921      cvar->refresh = true;
922    }
923    
924    void PAMevcontrol::chkcalo() {
925      if ( cvar->CALO ) {
926        cvar->CALO = 0;
927      } else {
928        cvar->CALO = 1;
929      };
930      cvar->i--;
931      cvar->nevents = 0;
932      cvar->firstevno = 0;
933      cvar->lastevno = 0;
934      cvar->refresh = true;
935    }
936    
937    void PAMevcontrol::chks4() {
938      if ( cvar->S4 ) {
939        cvar->S4 = 0;
940      } else {
941        cvar->S4 = 1;
942      };
943      cvar->i--;
944      cvar->nevents = 0;
945      cvar->firstevno = 0;
946      cvar->lastevno = 0;
947      cvar->refresh = true;  
948    }
949    
950    void PAMevcontrol::chknd() {
951      if ( cvar->ND ) {
952        cvar->ND = 0;
953      } else {
954        cvar->ND = 1;
955      };
956      cvar->i--;
957      cvar->nevents = 0;
958      cvar->firstevno = 0;
959      cvar->lastevno = 0;
960      cvar->refresh = true;
961    }
962    
963    void PAMevcontrol::chkinfo() {
964      if ( cvar->INFOS ) {
965        cvar->INFOS = 0;
966      } else {
967        cvar->INFOS = 1;
968      };
969      cvar->i--;
970      cvar->goon = true;
971    }
972    
973    void PAMevcontrol::chknames() {
974      if ( cvar->VINFOS ) {
975        cvar->VINFOS = 0;
976      } else {
977        cvar->VINFOS = 1;
978      };
979      cvar->i--;
980      cvar->goon = true;
981    }
982    
983    void PAMevcontrol::chkpalette() {
984      if ( cvar->PALETTE ) {
985        cvar->PALETTE = 0;
986      } else {
987        cvar->PALETTE = 1;
988      };
989      cvar->i--;
990      cvar->goon = true;
991    }
992    
993    void PAMevcontrol::next() {
994        if ( cvar->i == cvar->nevents-1  ) {
995            printf("This is the last event, you can't go forward! \n");
996            DIALOG(1,"This is the last event!");
997        } else {
998            cvar->goon = true;
999            cvar->doflag = 1;
1000        };    
1001    }
1002    
1003    void PAMevcontrol::stop() {
1004        DIALOG(1,"Stop searching");
1005        cvar->doflag = 3;
1006    }
1007    
1008    void PAMevcontrol::prev() {
1009        if ( cvar->i > 0  ) {
1010            printf("WARNING: going backward!\n\n");
1011            cvar->doflag = 2;
1012            cvar->goon = true;
1013        } else {
1014            printf("This is the first event, you can't go backward! \n");
1015            DIALOG(1,"This is the first event!");
1016        };
1017    }
1018    
1019    void PAMevcontrol::Close() {
1020        Cleanup();
1021        CloseWindow();
1022    }
1023    
1024    void PAMevcontrol::Terminate() {
1025        Close();
1026        gApplication->Terminate(0);
1027    }
1028    
1029    PAMevcontrol::~PAMevcontrol() {
1030      // Clean up used widgets: frames, buttons, layouthints
1031      Cleanup();
1032      delete this;
1033    }
1034    
1035  //**********************************************************************************  //**********************************************************************************
1036  //                           LEVEL0        SUBROUTINES                            //  //                           LEVEL0        SUBROUTINES                            //
1037  //**********************************************************************************  //**********************************************************************************
# Line 375  void ShowCaloRAW(Int_t i, TTree *otr, Va Line 1147  void ShowCaloRAW(Int_t i, TTree *otr, Va
1147                          gDirectory->Delete(yevent.str().c_str());                          gDirectory->Delete(yevent.str().c_str());
1148                          TH2F *Xview = new TH2F(xevent.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);                          TH2F *Xview = new TH2F(xevent.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);
1149                          TH2F *Yview = new TH2F(yevent.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);                                TH2F *Yview = new TH2F(yevent.str().c_str(),"",96,-0.5,95.5,22,-0.5,21.5);      
1150                          Int_t colo = 38;                          Int_t colo;
1151                            if ( var.bw ){
1152                                colo = 17;
1153                            } else {
1154                                colo = 38;
1155                            };
1156                          Xview->SetFillColor(colo);                          Xview->SetFillColor(colo);
1157                          Yview->SetFillColor(colo);                          Yview->SetFillColor(colo);
1158                          if ( l == 0 ) {                          if ( l == 0 ) {
# Line 400  void ShowCaloRAW(Int_t i, TTree *otr, Va Line 1177  void ShowCaloRAW(Int_t i, TTree *otr, Va
1177  }  }
1178    
1179  void ShowND(Int_t evno, TTree *otr, Variables & var){  void ShowND(Int_t evno, TTree *otr, Variables & var){
1180      Int_t        tmpSize;          Int_t tmpSize;    
1181      Int_t yUpperTrig = 0;      Int_t yUpperTrig = 0;
1182      Int_t yUpperBk = 0;      Int_t yUpperBk = 0;
1183      Int_t yBottomBk = 0;      Int_t yBottomBk = 0;
# Line 788  void ShowTRKL0(Int_t evno, TTree *otr, V Line 1565  void ShowTRKL0(Int_t evno, TTree *otr, V
1565      };      };
1566      //      //
1567      // Draw crosses      // Draw crosses
1568      //      //    
1569      if ( ncro ) {      if ( ncro && var.AC ) {
1570          trplv->cd();          trplv->cd();
1571          trplv->Range(0.,0.,2076.,3100.);          trplv->Range(0.,0.,2076.,3100.);
1572          for ( Int_t i = 0; i<ncro; i++){          for ( Int_t i = 0; i<ncro; i++){
# Line 2945  void ShowCaloL1(Int_t i, TTree *otr, Var Line 3722  void ShowCaloL1(Int_t i, TTree *otr, Var
3722      var.nstrip=(int)calo->nstrip;      var.nstrip=(int)calo->nstrip;
3723  }  }
3724    
3725  void ShowTRKL1(Int_t evno, TTree *ttr1, Variables & var){  void ShowTRKL1(Int_t evno, TTree *ttr1, Variables & var, PAMevcontrol *pamgui){
3726      //      //
3727      Int_t syncro = 1;      Int_t syncro = 1;
3728      Int_t itr = evno;      Int_t itr = evno;
# Line 2958  void ShowTRKL1(Int_t evno, TTree *ttr1, Line 3735  void ShowTRKL1(Int_t evno, TTree *ttr1,
3735      settrklev1(ttr1,trk);      settrklev1(ttr1,trk);
3736      if ( itr >= trnevents ){      if ( itr >= trnevents ){
3737          printf(" WARNING: no more tracker level1 data.\n");          printf(" WARNING: no more tracker level1 data.\n");
3738            pamgui->DIALOG(1," No more tracker level1 data ");
3739          nodata = 1;          nodata = 1;
3740          goto goon;          goto goon;
3741      };      };
# Line 2968  void ShowTRKL1(Int_t evno, TTree *ttr1, Line 3746  void ShowTRKL1(Int_t evno, TTree *ttr1,
3746      if ( pktnum != ev2.pkt_num1 || obt != ev2.obt1 ){      if ( pktnum != ev2.pkt_num1 || obt != ev2.obt1 ){
3747          if ( pktnum > ev2.pkt_num1 || obt > ev2.obt1 ){          if ( pktnum > ev2.pkt_num1 || obt > ev2.obt1 ){
3748              itr++;              itr++;
3749              if ( syncro ) printf(" WARNING: lost sync! try to recover... \n");              if ( syncro ){
3750                    printf(" WARNING: lost sync! try to recover... \n");
3751                    pamgui->DIALOG(1," Lost sync! try to recover ");
3752                };
3753              syncro = 0;                      syncro = 0;        
3754              goto trkcalosync;              goto trkcalosync;
3755          };          };
3756          if ( pktnum < ev2.pkt_num1 || obt < ev2.obt1 ){          if ( pktnum < ev2.pkt_num1 || obt < ev2.obt1 ){
3757              printf(" WARNING: no tracker level2 data. \n");              printf(" WARNING: no tracker level2 data. \n");
3758                pamgui->DIALOG(1," No more tracker level2 data ");
3759              nodata = 1;              nodata = 1;
3760              goto goon;              goto goon;
3761          };          };
3762      };      };
3763      //      //
3764      if ( !syncro ) printf(" ...synchronization recovered! \n");      if ( !syncro ) {
3765            printf(" ...synchronization recovered! \n");
3766            pamgui->DIALOG(0," Synchronization recovered! ");
3767        };
3768      syncro = 1;      syncro = 1;
3769      //      //
3770   goon: struct Trklev1 ev;   goon: struct Trklev1 ev;
3771      ev.good1 = (Bool_t)ev2.good1;      ev.good1 = (Bool_t)ev2.good1;
3772      ev.nev1 = ev2.nev1;      ev.nev1 = ev2.nev1;
3773        ev.whic_calib1 = ev2.whic_calib1;
3774        ev.swcode1 = ev2.swcode1;
3775      ev.pkt_type1 = ev2.pkt_type1;      ev.pkt_type1 = ev2.pkt_type1;
3776      ev.pkt_num1 = ev2.pkt_num1;      ev.pkt_num1 = ev2.pkt_num1;
3777      ev.obt1 = ev2.obt1;      ev.obt1 = ev2.obt1;
3778      ev.which_calib1 = ev2.which_calib1;      ev.cpu_crc1 = (Bool_t)ev2.cpu_crc1;
3779      ev.nclstr1 = ev2.nclstr1;      ev.nclstr1 = ev2.nclstr1;
3780      ev.totcllength = ev2.totcllength;      ev.totcllength = ev2.totcllength;
3781      for ( Int_t ii = 0 ; ii<8500; ii++){      for ( Int_t ii = 0 ; ii<8500; ii++){
# Line 3004  void ShowTRKL1(Int_t evno, TTree *ttr1, Line 3791  void ShowTRKL1(Int_t evno, TTree *ttr1,
3791          ev.indmax[ii] = (Int_t)ev2.indmax[ii];          ev.indmax[ii] = (Int_t)ev2.indmax[ii];
3792      };      };
3793      for ( Int_t ii = 0 ; ii<12 ; ii++){      for ( Int_t ii = 0 ; ii<12 ; ii++){
3794            ev.crc1[ii] = ev2.crc1[ii];  
3795          for ( Int_t ij = 0 ; ij<24 ; ij++){              for ( Int_t ij = 0 ; ij<24 ; ij++){    
3796              ev.cnev[ij][ii] = ev2.cnev[ii][ij];              ev.cnev[ij][ii] = ev2.cnev[ii][ij];
3797          };          };
# Line 3294  void ShowTRKL1(Int_t evno, TTree *ttr1, Line 4082  void ShowTRKL1(Int_t evno, TTree *ttr1,
4082      //      //
4083      // Draw crosses      // Draw crosses
4084      //      //
4085      trplv->cd();      if ( var.AC ) {
4086      trplv->Range(-7.05,-8.1,7.05,8.1);          trplv->cd();
4087      for ( Int_t i = 0; i<6; i++){          trplv->Range(-7.05,-8.1,7.05,8.1);
4088          if ( mask[i] ){          for ( Int_t i = 0; i<6; i++){
4089              //              if ( mask[i] ){
4090              Float_t cdx = (0.55/mag[i])*var.sfx;                  //
4091              Float_t cdy = (0.55/mag[i])*var.sfy;                  Float_t cdx = (0.55/mag[i])*var.sfx;
4092              Float_t lwx = (0.019)*var.sfy;                  Float_t cdy = (0.55/mag[i])*var.sfy;
4093              Float_t lwy = (0.019)*var.sfx;                  Float_t lwx = (0.019)*var.sfy;
4094              //                  Float_t lwy = (0.019)*var.sfx;
4095              linea = new TLine(yh1[i]-lwx/2.,xh[i]-cdy,yh1[i]-lwx/2.,xh[i]+cdy);                  //
4096              linea->SetLineWidth((int)lwx);                  linea = new TLine(yh1[i]-lwx/2.,xh[i]-cdy,yh1[i]-lwx/2.,xh[i]+cdy);
4097              linea->SetLineColor(sigcol1);                  linea->SetLineWidth((int)lwx);
4098              linea->Draw();                  linea->SetLineColor(sigcol1);
4099              linea = new TLine(yh1[i]-cdx,xh[i]-lwy/2.,yh1[i]+cdx,xh[i]-lwy/2.);                  linea->Draw();
4100              linea->SetLineWidth((int)lwy);                  linea = new TLine(yh1[i]-cdx,xh[i]-lwy/2.,yh1[i]+cdx,xh[i]-lwy/2.);
4101              linea->SetLineColor(sigcol1);                  linea->SetLineWidth((int)lwy);
4102              linea->Draw();                  linea->SetLineColor(sigcol1);
4103              //                  linea->Draw();
4104              linea = new TLine(yh2[i]-lwx/2.,xh[i]-cdy,yh2[i]-lwx/2.,xh[i]+cdy);                  //
4105              linea->SetLineWidth((int)lwx);                  linea = new TLine(yh2[i]-lwx/2.,xh[i]-cdy,yh2[i]-lwx/2.,xh[i]+cdy);
4106              linea->SetLineColor(sigcol2);                  linea->SetLineWidth((int)lwx);
4107              linea->Draw();                  linea->SetLineColor(sigcol2);
4108              linea = new TLine(yh2[i]-cdy,xh[i]-lwy/2.,yh2[i]+cdx,xh[i]-lwy/2.);                  linea->Draw();
4109              linea->SetLineWidth((int)lwy);                  linea = new TLine(yh2[i]-cdy,xh[i]-lwy/2.,yh2[i]+cdx,xh[i]-lwy/2.);
4110              linea->SetLineColor(sigcol2);                  linea->SetLineWidth((int)lwy);
4111              linea->Draw();                  linea->SetLineColor(sigcol2);
4112                    linea->Draw();
4113                };
4114          };          };
4115      };      };
4116  }  }
# Line 4006  void ShowTOFGENL1(Int_t j, TTree *otr, V Line 4796  void ShowTOFGENL1(Int_t j, TTree *otr, V
4796      //      //
4797  }  }
4798    
4799  void ShowTOFL1(Int_t j, TTree *toftr, Variables & var){  void ShowTOFL1(Int_t j, TTree *toftr, Variables & var, PAMevcontrol *pamgui){
4800      //      //
4801      for (Int_t i=0 ; i<5; i++){      for (Int_t i=0 ; i<5; i++){
4802          var.beta[i] = 0.;          var.beta[i] = 0.;
# Line 4022  void ShowTOFL1(Int_t j, TTree *toftr, Va Line 4812  void ShowTOFL1(Int_t j, TTree *toftr, Va
4812      Int_t obt = 0;      Int_t obt = 0;
4813   trkcalosync: if ( itr >= trnevents ){   trkcalosync: if ( itr >= trnevents ){
4814          printf(" WARNING: no more tof level1 data.\n");          printf(" WARNING: no more tof level1 data.\n");
4815            pamgui->DIALOG(1," No more tof level1 data ");
4816          return;          return;
4817        } else {
4818            if ( !var.nosig ) toftr->GetEntry(itr);
4819      };      };
     if ( !var.nosig ) toftr->GetEntry(itr);  
4820      pktnum = var.headc;      pktnum = var.headc;
4821      obt = var.etime;      obt = var.etime;
4822      if ( pktnum != ntof.pkt_num || obt != ntof.obt ){      if ( pktnum != ntof.pkt_num || obt != ntof.obt ){
4823          if ( pktnum > ntof.pkt_num || obt > ntof.obt ){          if ( pktnum > ntof.pkt_num || obt > ntof.obt ){
4824              itr++;              itr++;
4825              if ( syncro ) printf(" WARNING: lost sync! try to recover... \n");              if ( syncro ){
4826                    printf(" WARNING: lost sync! try to recover... \n");
4827                    pamgui->DIALOG(1," Lost sync! try to recover ");
4828                };
4829              syncro = 0;                      syncro = 0;        
4830              goto trkcalosync;              goto trkcalosync;
4831          };          };
4832          if ( pktnum < ntof.pkt_num || obt < ntof.obt ){          if ( pktnum < ntof.pkt_num || obt < ntof.obt ){
4833              printf(" WARNING: no tof level1 data. \n");              printf(" WARNING: no tof level1 data. \n");
4834                pamgui->DIALOG(1," No more tof level1 data ");
4835              return;              return;
4836          };          };
4837      };      };
4838      //      //
4839      if ( !syncro ) printf(" ...synchronization recovered! \n");                  if ( !syncro ){
4840            printf(" ...synchronization recovered! \n");      
4841            pamgui->DIALOG(0," Synchronization recovered! ");
4842        };
4843      syncro = 1;      syncro = 1;
4844      //      //
4845      if ( !var.nosig ) {      if ( !var.nosig ) {
# Line 4637  void ShowTOFL1(Int_t j, TTree *toftr, Va Line 5436  void ShowTOFL1(Int_t j, TTree *toftr, Va
5436  //                           LEVEL2        SUBROUTINES                            //  //                           LEVEL2        SUBROUTINES                            //
5437  //**********************************************************************************  //**********************************************************************************
5438    
5439  void ShowTRACK(Int_t evno, TTree *ttr, Variables & var){  void ShowTRACK(Int_t evno, TTree *ttr, Variables & var, PAMevcontrol *pamgui){
5440      //      //
5441      var.rig = 0.;      var.rig = 0.;
5442      var.chi2 = 0.;      var.chi2 = 0.;
# Line 4652  void ShowTRACK(Int_t evno, TTree *ttr, V Line 5451  void ShowTRACK(Int_t evno, TTree *ttr, V
5451      Int_t obt = 0;      Int_t obt = 0;
5452   trkcalosync: if ( itr >= trnevents ){   trkcalosync: if ( itr >= trnevents ){
5453          printf(" WARNING: no more tracker level2 data.\n");          printf(" WARNING: no more tracker level2 data.\n");
5454            pamgui->DIALOG(1," No more tracker level2 data ");
5455          return;          return;
5456      };      };
5457      if ( !var.nosig ) ttr->GetEntry(itr);      if ( !var.nosig ) ttr->GetEntry(itr);
# Line 4660  void ShowTRACK(Int_t evno, TTree *ttr, V Line 5460  void ShowTRACK(Int_t evno, TTree *ttr, V
5460      if ( pktnum != trk.pkt_num || obt != trk.obt ){      if ( pktnum != trk.pkt_num || obt != trk.obt ){
5461          if ( pktnum > trk.pkt_num || obt > trk.obt ){          if ( pktnum > trk.pkt_num || obt > trk.obt ){
5462              itr++;              itr++;
5463              if ( syncro ) printf(" WARNING: lost sync! try to recover... \n");              if ( syncro ) {
5464                    printf(" WARNING: lost sync! try to recover... \n");
5465                    pamgui->DIALOG(1," Lost sync! try to recover ");
5466                };
5467              syncro = 0;                      syncro = 0;        
5468              goto trkcalosync;              goto trkcalosync;
5469          };          };
5470          if ( pktnum < trk.pkt_num || obt < trk.obt ){          if ( pktnum < trk.pkt_num || obt < trk.obt ){
5471              printf(" WARNING: no tracker level2 data. \n");              printf(" WARNING: no tracker level2 data. \n");
5472                pamgui->DIALOG(1," No more tracker level2 data ");
5473              return;              return;
5474          };          };
5475      };      };
5476      //      //
5477      if ( !syncro ) printf(" ...synchronization recovered! \n");                  if ( !syncro ){
5478            printf(" ...synchronization recovered! \n");      
5479            pamgui->DIALOG(0," Synchronization recovered! ");
5480        };
5481      //      //
5482      if ( trk.ntrk > 0 ){      if ( trk.ntrk > 0 ){
5483          Int_t l = 0;          Int_t l = 0;
# Line 4804  void ShowTRACK(Int_t evno, TTree *ttr, V Line 5611  void ShowTRACK(Int_t evno, TTree *ttr, V
5611                  //                  //
5612                  // Plane View                  // Plane View
5613                  //                  //
5614                  TPolyLine *trackp1 = new TPolyLine(50,ptx1,pty1);                  if ( var.AC ){
5615                  trackp1->SetLineColor(trcol);                      TPolyLine *trackp1 = new TPolyLine(50,ptx1,pty1);
5616                  trackp1->SetLineWidth(1);                      trackp1->SetLineColor(trcol);
5617                  trackp1->Draw();                      trackp1->SetLineWidth(1);
5618                  TPolyLine *trackp2 = new TPolyLine(50,ptx2,pty2);                      trackp1->Draw();
5619                  trackp2->SetLineColor(trcol);                      TPolyLine *trackp2 = new TPolyLine(50,ptx2,pty2);
5620                  trackp2->SetLineWidth(1);                      trackp2->SetLineColor(trcol);
5621                  trackp2->SetLineStyle(3);                      trackp2->SetLineWidth(1);
5622                  trackp2->Draw();                      trackp2->SetLineStyle(3);
5623                        trackp2->Draw();
5624                    };
5625                  //                  //
5626                  // Dots on measured points                  // Dots on measured points
5627                  //                  //
# Line 4821  void ShowTRACK(Int_t evno, TTree *ttr, V Line 5630  void ShowTRACK(Int_t evno, TTree *ttr, V
5630                  Float_t y;                  Float_t y;
5631                  Float_t z1;                  Float_t z1;
5632                  Float_t z2;                  Float_t z2;
5633                    Int_t dcol;
5634                    if ( var.bw ){
5635                        dcol = 12;
5636                            } else {
5637                        dcol = 2;
5638                    };
5639                  for (Int_t g = 0; g<6; g++){                  for (Int_t g = 0; g<6; g++){
5640                      x = trk.xm[l][g]*var.sfx/100. + var.xxvc;                      if ( trk.xgood[l][g] ) {
5641                      y = trk.ym[l][g]*var.sfx/100. + var.xyvc;                          x = trk.xm[l][g]*var.sfx/100. + var.xxvc;
5642                      z1 = (trk.zm[l][g]+11.2)*var.sfy/100. + var.yxvc;                                        z1 = (trk.zm[l][g]+11.2)*var.sfy/100. + var.yxvc;                  
5643                      z2 = (trk.zm[l][g]+11.2)*var.sfy/100. + var.yyvc;                                        elli = new TEllipse(x,z1,0.004,0.004,0.,-180.);
5644                      elli = new TEllipse(x,z1,0.004,0.004,0.,-180.);                          elli->SetFillStyle(1001);
5645                      elli->SetFillStyle(1001);                          elli->SetFillColor(dcol);
5646                      elli->SetFillColor(2);                          elli->Draw();
5647                      elli->Draw();                      };
5648                      elli = new TEllipse(y,z2,0.004,0.004,0.,-180.);                      if ( trk.ygood[l][g] ) {
5649                      elli->SetFillStyle(1001);                          y = trk.ym[l][g]*var.sfx/100. + var.xyvc;
5650                      elli->SetFillColor(2);                          z2 = (trk.zm[l][g]+11.2)*var.sfy/100. + var.yyvc;                  
5651                      elli->Draw();                          elli = new TEllipse(y,z2,0.004,0.004,0.,-180.);
5652                            elli->SetFillStyle(1001);
5653                            elli->SetFillColor(dcol);
5654                            elli->Draw();
5655                        };
5656                  };                  };
5657                  //                  //
5658                  //                  //
5659              } else {              } else {
5660                    pamgui->DIALOG(1," Failed in determining the track! ");
5661                  printf(" WARNING: failed in determining the track! \n");                  printf(" WARNING: failed in determining the track! \n");
5662              };              };
5663              l++;              l++;
# Line 5099  void ShowCaloL0(TString filename, Int_t Line 5919  void ShowCaloL0(TString filename, Int_t
5919    
5920    
5921  void ShowPalette(Int_t bw){  void ShowPalette(Int_t bw){
5922      Float_t xp = 0.33;      Float_t xp = 0.40;
5923      Float_t yp = 0.02;      Float_t yp = 0.02;
5924      Float_t xw = 0.35;      Float_t xw = 0.2325;
5925      Float_t yh = 0.19;      Float_t yh = 0.19;
5926        //    Float_t xp = 0.33;
5927        //Float_t yp = 0.02;
5928        //Float_t xw = 0.35;
5929        //Float_t yh = 0.19;
5930      Double_t xx[5] = {xp, xp+xw, xp+xw, xp, xp};      Double_t xx[5] = {xp, xp+xw, xp+xw, xp, xp};
5931      Double_t yy[5] = {yp, yp, yp+yh, yp+yh, yp};      Double_t yy[5] = {yp, yp, yp+yh, yp+yh, yp};
5932      TPolyLine *fpale = new TPolyLine(5,xx,yy);      TPolyLine *fpale = new TPolyLine(5,xx,yy);
# Line 5113  void ShowPalette(Int_t bw){ Line 5937  void ShowPalette(Int_t bw){
5937      txt->SetTextSize(0.01);      txt->SetTextSize(0.01);
5938      txt->DrawLatex(xp+0.005,yp+yh-0.015,"PALETTE");      txt->DrawLatex(xp+0.005,yp+yh-0.015,"PALETTE");
5939      txt->DrawLatex(xp+0.005,yp+yh-0.04,"TOF, CALO, S4 [MIP]:");      txt->DrawLatex(xp+0.005,yp+yh-0.04,"TOF, CALO, S4 [MIP]:");
5940      Float_t xwc = (xp+0.01)/6.;      //    Float_t xwc = (xp+0.01)/6.;
5941        Float_t xwc = (xw-0.01)/6.;
5942        Float_t axwc = xwc+0.02;
5943      Float_t yhc = 0.03;          Float_t yhc = 0.03;    
5944      Int_t colo = 0;      Int_t colo = 0;
5945      Float_t yc = 0.135;      Float_t yc = 0.135;
5946      TPolyLine *fc1[6];      TPolyLine *fc1[6];
5947      if ( bw ){      if ( bw ){
5948          for ( Int_t j=0; j<6; j++){          for ( Int_t j=0; j<6; j++){
5949              Float_t xc = 0.335+(j*xwc);              //      Float_t xc = 0.335+(j*xwc);
5950                Float_t xc = 0.005+xp+(j*xwc);
5951              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};
5952              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};
5953              fc1[j] = new TPolyLine(5,xx,yy);              fc1[j] = new TPolyLine(5,xx,yy);
# Line 5171  void ShowPalette(Int_t bw){ Line 5998  void ShowPalette(Int_t bw){
5998          Float_t yc = 0.08;          Float_t yc = 0.08;
5999          TPolyLine *fc2[6];          TPolyLine *fc2[6];
6000          for ( Int_t j=0; j<6; j++){          for ( Int_t j=0; j<6; j++){
6001              Float_t xc = 0.335+(j*xwc);              Float_t xc = 0.005+xp+(j*xwc);
6002              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};
6003              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};
6004              fc2[j] = new TPolyLine(5,xx,yy);              fc2[j] = new TPolyLine(5,xx,yy);
# Line 5222  void ShowPalette(Int_t bw){ Line 6049  void ShowPalette(Int_t bw){
6049          yc = 0.025;          yc = 0.025;
6050          TPolyLine *fc3[3];          TPolyLine *fc3[3];
6051          for ( Int_t j=0; j<3; j++){          for ( Int_t j=0; j<3; j++){
6052              Float_t xc = 0.335+(j*xwc);              Float_t xc = 0.005+xp+(j*axwc);
6053              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};              Double_t xx[5] = {xc, xc+axwc, xc+axwc, xc, xc};
6054              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};
6055              fc3[j] = new TPolyLine(5,xx,yy);              fc3[j] = new TPolyLine(5,xx,yy);
6056              fc3[j]->SetLineColor(1);              fc3[j]->SetLineColor(1);
# Line 5254  void ShowPalette(Int_t bw){ Line 6081  void ShowPalette(Int_t bw){
6081          };          };
6082      } else {      } else {
6083          for ( Int_t j=0; j<6; j++){          for ( Int_t j=0; j<6; j++){
6084              Float_t xc = 0.335+(j*xwc);              Float_t xc = 0.005+xp+(j*xwc);
6085              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};
6086              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};
6087              fc1[j] = new TPolyLine(5,xx,yy);              fc1[j] = new TPolyLine(5,xx,yy);
# Line 5305  void ShowPalette(Int_t bw){ Line 6132  void ShowPalette(Int_t bw){
6132          Float_t yc = 0.08;          Float_t yc = 0.08;
6133          TPolyLine *fc2[6];          TPolyLine *fc2[6];
6134          for ( Int_t j=0; j<6; j++){          for ( Int_t j=0; j<6; j++){
6135              Float_t xc = 0.335+(j*xwc);              Float_t xc = 0.005+xp+(j*xwc);
6136              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};
6137              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};
6138              fc2[j] = new TPolyLine(5,xx,yy);              fc2[j] = new TPolyLine(5,xx,yy);
# Line 5356  void ShowPalette(Int_t bw){ Line 6183  void ShowPalette(Int_t bw){
6183          yc = 0.025;          yc = 0.025;
6184          TPolyLine *fc3[3];          TPolyLine *fc3[3];
6185          for ( Int_t j=0; j<3; j++){          for ( Int_t j=0; j<3; j++){
6186              Float_t xc = 0.335+(j*xwc);              Float_t xc = 0.005+xp+(j*axwc);
6187              Double_t xx[5] = {xc, xc+xwc, xc+xwc, xc, xc};              Double_t xx[5] = {xc, xc+axwc, xc+axwc, xc, xc};
6188              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};              Double_t yy[5] = {yc, yc, yc+yhc, yc+yhc, yc};
6189              fc3[j] = new TPolyLine(5,xx,yy);              fc3[j] = new TPolyLine(5,xx,yy);
6190              fc3[j]->SetLineColor(1);              fc3[j]->SetLineColor(1);
# Line 5419  void DrawX(Float_t cx, Float_t cy, Float Line 6246  void DrawX(Float_t cx, Float_t cy, Float
6246          x1->Draw();          x1->Draw();
6247      };      };
6248  }  }
 //  
 //  
 //  
 void ShowHelp(){  
     char input[256];  
     printf("\n USE:\n\n The only input needed is the path to the directory (\"filename\") created by YODA\n for the data file you want to analyze.\n Standard use:\n  root[0] .L ShowEvent.c\n  root[1] ShowEvent(\"/home/dati/filesFromYoda/DW_050112_00600/\");\n \n\n\n\n\n\n");  
     printf("Press <enter> to continue\n");  
     cin.getline(input,256);  
     printf(" FEATURES:\n\n  ShowEvent(TString filename, Int_t fromevent = 0, Int_t toevent = 0,\n             TString selfile = \"\", Int_t FORCELEVEL = -1,\n            Int_t ctrlword = 509, Int_t BW=0, TString outDir = \"\",\n            TString calcalibfile = \"\")\n  Input variables\n   *  fromevent = the first event to be shown (0 means \"show all\")\n");  
     printf("   *  toevent = the last event to be shown (NB: if fromevent differs from zero\n                and toevent is equal zero only one event will be shown,\n                number \"fromevent\")\n\n\n\n");  
     printf("Press <enter> to continue\n");  
     cin.getline(input,256);  
     printf("   *  ctrword is an integer which can be used as a mask to customize the figure:\n           ctrword bit:    10    9    8    7     6    5     4    3      2     1   \n      detector   : special TOF   AC  TRK  CALO   S4    ND  infos names legenda\n      Examples:\n           ctrword = 509 = 0111111101 : all detectors+infos are printed(DEFAULT)\n           ctrword = 511 = 0111111111 : show all\n           ctrword = 505 = 0111111001 : don't print infos on figure\n           ctrword = 507 = 0111111011 : show detector names+legenda (no infos)\n           ctrword = 8   = 0000001000 : show only ND\n           ctrword = 1019 = 1111111011 : show all but infos without signals\n\n");  
     printf("Press <enter> to continue\n");  
     cin.getline(input,256);  
     printf("\n\n      When the \"special\" bit is set NO SIGNAL will be shown in the detectors.\n      It can be used to draw a draft of the PAMELA apparatus without any event.\n ");  
     printf("   *  selfile = selection file. Can be used to select events.\n                Default is \"\" that is no selection applied.\n");  
     printf("   *  FORCELEVEL = to force a certain level visualization.\n                   For the moment only level0 can be forced.\n");  
     printf("   *  BW = 0 flag to display black and white figures.\n             Default is 0, colours, set it to 1 to have BW visualization.\n");  
     printf("   *  outDir = directory where to place figures (if you want to print them).\n               Default is \"filename\".\n\n");  
     printf("Press <enter> to continue\n");  
     cin.getline(input,256);  
     printf("   *  calcalibfile = the calorimeter needs a calibration to display events. If a\n                     calibration is not in the file you want to analylze put \n                      here the path to a directory created by YODA for a data \n                     file with calorimeter calibration. Default is \"filename\".\n");  
     printf("\n\n For further informations read the README.ShowEvent file.\n");  
     return;  
 }  
6249    
6250  //  //
6251  // MAIN ROUTINE  // MAIN ROUTINE
6252  //  //
6253  void ShowEvent(TString filename="help", TString selfile="", Int_t ctrlword = 509, Int_t FORCELEV = -1, Int_t fromevent = 0, Int_t toevent = 0, TString outDir = ""){  void ShowEvent(TString filename="help", TString selfile="", Int_t ctrlword = 509, Int_t FORCELEV = -1, Int_t fromevent = 0, Int_t toevent = 0, TString outDir = ""){
     gROOT->GetListOfCanvases()->Delete();  
     gDirectory->GetList()->Delete();  
6254      TString calcalibfile = "";      TString calcalibfile = "";
6255      TString startingdir = gSystem->WorkingDirectory();      TString startingdir = gSystem->WorkingDirectory();
6256      const char* startingdir2 = gSystem->WorkingDirectory();      const char* startingdir2 = gSystem->WorkingDirectory();
6257      TString path;      TString path;
6258      stringcopy(path,startingdir2);      stringcopy(path,startingdir2);
     Int_t BW = 0;  
6259  #if defined (__CINT__)    #if defined (__CINT__)  
6260      emicheckLib();      emicheckLib();
6261      const char *pamlib=gSystem->Getenv("PAM_LIB");      const char *pamlib=gSystem->Getenv("PAM_LIB");
# Line 5481  void ShowEvent(TString filename="help", Line 6279  void ShowEvent(TString filename="help",
6279      stringstream calfile;      stringstream calfile;
6280      calfile.str("");      calfile.str("");
6281      calfile << pam_calib << "/CaloADC2MIP.root";      calfile << pam_calib << "/CaloADC2MIP.root";
6282        Int_t selection = 0;
6283        Bool_t firsttime = true;
6284        //
6285        //
6286     restart:
6287        gROOT->GetListOfCanvases()->Delete();
6288        gDirectory->GetList()->Delete();
6289        //
6290        struct Variables var;
6291        Bool_t loadselfs = true;
6292        Bool_t popup = false;
6293        PAMevcontrol *pamgui = 0;
6294        var.restart = false;
6295        var.waitforever = false;
6296        var.jumprog = true;
6297        var.jumpen = false;
6298        //    Int_t njumpen = 0;
6299      struct Levels level;      struct Levels level;
6300      //      //
6301      const char *name= filename;      const char *name= filename;
6302      if ( filename == "" || !strcmp(name,"help") ){      if ( filename == "" || !strcmp(name,"help") ){
6303          ShowHelp();          //      ShowHelp();
6304          return;          //      return;
6305            var.waitforever = true;
6306      };      };
6307      //      //
6308        Float_t mip[2][22][96];
6309        Int_t okcalo = 0;
6310        TTree *ctree = 0;
6311        TFile *chfile;
6312        CalorimeterCalibration *ccalo = 0;
6313        Long64_t cnevents = 0;
6314      //      //
6315        var.goon = false;
6316        var.refresh = false;
6317        var.fl0 = false;
6318        
6319        if ( FORCELEV == 0 ) var.fl0 = true;
6320      //      //
6321      if ( FORCELEV != -1 ) printf("\n WARNING: FORCING LEVEL%i DATA \n\n",FORCELEV);      //  Define some variables
6322      //      //
6323      // LOAD SELECTION FILE      Int_t OBT = 0;
6324        Int_t DOBT = 0;
6325        Int_t ifout = 0;
6326        Int_t OOBT = 0;
6327      //      //
6328      Int_t selection = 0;      // here windows dimension (based on the computer screen size) and position and dimension of figures
6329        //
6330        Int_t  xw, yw;
6331        UInt_t ww, hw;
6332        gVirtualX->GetWindowSize(gClient->GetRoot()->GetId(),xw,yw,ww,hw);
6333        Float_t winx = (float)ww*0.80;
6334        Float_t winy = (float)hw*0.80; // 95
6335        Float_t winrap = winx/winy;
6336        TCanvas *figure = new TCanvas("PAMELA event viewer", "PAMELA event viewer",(int)winx,(int)winy);
6337        //    GetCanvas->SetBit(kNotEditable);
6338        //
6339        var.bw = 0;
6340        //    var.xxvc = 0.17;
6341        var.xxvc = 0.20;
6342        var.yxvc = 0.44;
6343        //    var.xyvc = 0.83;
6344        var.xyvc = 0.815;
6345        var.yyvc = 0.44;
6346        //    
6347        var.sfx = 0.81/winrap;
6348        var.sfy = 0.81;
6349        //
6350        //var.nds4 = 0.4;
6351        var.nds4 = var.sfx;
6352        var.xcat = 0.515;
6353        //var.xcat = 0.56;
6354        var.ycat = 0.74;
6355        //
6356        var.tracknds4 = 1;
6357        //
6358        var.thefilename = filename.Data();
6359        var.thefilter = selfile.Data();
6360        //
6361        //  book the canvas
6362        //
6363        TLatex *text=new TLatex();
6364        stringstream testo;
6365        stringstream testo2;
6366        stringstream testo3;
6367        figure->Range(0.,0.,1.,1.);
6368        gStyle->SetOptDate(0);
6369        gStyle->SetOptStat(0);
6370        gStyle->SetLabelSize(0);
6371        gStyle->SetNdivisions(1,"X");
6372        gStyle->SetNdivisions(1,"Y");      
6373        //
6374        stringstream libload;
6375        Int_t doflag = 1;
6376        Int_t thefirst = 1;
6377        Int_t trackdone1 = 0;
6378        Int_t trackdone2 = 0;
6379        Int_t seldone = 0;
6380        Float_t headc = 0.;
6381        Float_t headcold = 0.;
6382        Int_t i = 0;
6383        Int_t isOK = 0;
6384        Int_t jumpto = 0;
6385        struct Calib calib;
6386        Int_t b[4];
6387        Int_t si = 0;
6388        var.selex = false;
6389        var.alrforc = false;
6390        //
6391        // from here to refresh
6392        //
6393     refresh:
6394        //
6395        selfile = var.thefilter.Data();
6396        if ( calcalibfile == "" ) calcalibfile = filename;
6397        if ( outDir == "" ) outDir = filename;    
6398        //
6399        if ( var.fl0 == true ) {
6400          FORCELEV = 0;
6401        } else {
6402          if ( var.refresh ) FORCELEV = -1;
6403        };
6404        //
6405        // clear levels!
6406        //
6407        level.calo = -10;
6408        level.calol2 = -10;
6409        level.tof = -10;
6410        level.track = -10;
6411        level.track2 = -10;
6412        level.s4 = -10;
6413        level.ac = -10;
6414        level.nd = -10;
6415        //
6416        TString fififile =  getFilename(filename);
6417        const char *file = fififile;
6418        //
6419        //
6420        //
6421        if ( !var.refresh ){
6422          var.SHOWDEC = 0;
6423          var.TOF = 0;
6424          var.AC = 0;
6425          var.TRK = 0;
6426          var.CALO = 0;
6427          var.S4 = 0;
6428          var.ND = 0;
6429          var.INFOS = 0;
6430          var.VINFOS = 0;
6431          var.PALETTE = 0;
6432          if ( ctrlword & (1<<0) ) {
6433            var.PALETTE = 1;
6434            printf("Show Palette\n");
6435          };
6436          if ( ctrlword & (1<<1) ) {
6437            var.VINFOS = 1;
6438            printf("Show Verbose Text Informations\n");
6439          };
6440          if ( ctrlword & (1<<2) ) {
6441            var.INFOS = 1;
6442            printf("Show Text Informations\n");
6443          };
6444          if ( ctrlword & (1<<3) ) {
6445            var.ND = 1;
6446          };
6447          if ( ctrlword & (1<<4) ) {
6448            var.S4 = 1;
6449          };
6450          if ( ctrlword & (1<<5) ) {
6451            var.CALO = 1;
6452          };
6453          if ( ctrlword & (1<<6) ) {
6454            var.TRK = 1;
6455          };
6456          if ( ctrlword & (1<<7) ) {
6457            var.AC = 1;
6458          };
6459          if ( ctrlword & (1<<8) ) {
6460            var.TOF = 1;
6461          };
6462          if ( ctrlword & (1<<9) ) {
6463            var.SHOWDEC = 1;
6464            fromevent = 1;
6465            toevent = 1;
6466            printf("\n ** WARNING! YOU HAVE CHOSEN TO SHOW ONLY DETECTORS AND NO SIGNALS! **\n\n");
6467            gSystem->Exec("sleep 5");
6468          };
6469        };
6470        //
6471        // Pop up the GUI
6472        //
6473        if ( !popup ) {
6474            pamgui = new PAMevcontrol(gClient->GetRoot(),400,800,var,*figure);
6475            popup = true;
6476        };
6477        if ( firsttime ){
6478            firsttime = false;
6479            if ( filename == "" ) pamgui->DIALOG(0," Insert the filename and press load to start ");
6480        };
6481        //
6482        while( var.waitforever ) {
6483            if ( !gROOT->GetListOfCanvases()->FindObject(figure)  ) {
6484                pamgui->Close();
6485                gSystem->ProcessEvents();
6486                gApplication->Terminate(0);
6487            };
6488            gSystem->ProcessEvents();
6489        };
6490        if ( var.restart ){
6491            filename = var.thefilename.Data();
6492            pamgui->Close();
6493            goto restart;
6494        };
6495        //
6496        //
6497        //
6498        if ( FORCELEV != -1 ) {
6499            printf("\n WARNING: FORCING LEVEL%i DATA \n\n",FORCELEV);
6500            if ( !var.alrforc ) {
6501                pamgui->DIALOG(1," Forcing LEVEL0 data ");
6502                var.alrforc = true;
6503            };
6504        };
6505        //
6506        // LOAD SELECTION FILE
6507        //    
6508      if ( selfile == ""  ){      if ( selfile == ""  ){
6509            if ( !var.selex && selection ) pamgui->DIALOG(0," Selection file unloaded ");
6510            var.selex = true;
6511          selection = 0;          selection = 0;
6512    #if !defined (__CINT__)
6513            if ( !var.refresh ) {
6514              gROOT->Reset();
6515              stringstream paminc;
6516              paminc.str("");
6517              const char *testinc = gSystem->Getenv("PAM_INC");    
6518              if ( !testinc ) {
6519                  const char *pam_calib = pathtocalibration();
6520                  paminc << pam_calib << "../include/";
6521              } else {
6522                  paminc << testinc;
6523              };
6524              stringstream carica;
6525              carica.str("");
6526              carica << paminc.str().c_str() << "/eventviewer.h";
6527              gROOT->LoadMacro(carica.str().c_str());
6528            };
6529    #endif
6530      } else {      } else {
6531  #if !defined (__CINT__)  #if !defined (__CINT__)
6532          //          //
6533          // if running the compiled program we must load header files for the selection macros!          // if running the compiled program we must load header files for the selection macros!
6534          //          //
6535          gROOT->Reset();          //        if ( !var.refresh ) {
6536          stringstream paminc;          if ( loadselfs ) {
6537          paminc.str("");            loadselfs = false;  
6538          const char *testinc = gSystem->Getenv("PAM_INC");                  gROOT->Reset();
6539          if ( testinc == "" ){            stringstream paminc;
6540              paminc.str("");
6541              const char *testinc = gSystem->Getenv("PAM_INC");    
6542              if ( !testinc ){
6543              const char *pam_calib = pathtocalibration();              const char *pam_calib = pathtocalibration();
6544              paminc << pam_calib << "../include/";              paminc << pam_calib << "../include/";
6545          } else {            } else {
6546              paminc << testinc;              paminc << testinc;
6547              };
6548              stringstream carica;
6549              carica.str("");
6550              carica << paminc.str().c_str() << "/eventviewer.h";
6551              gROOT->LoadMacro(carica.str().c_str());
6552              carica.str("");
6553              carica << paminc.str().c_str() << "/trklev1struct.h";
6554              gROOT->LoadMacro(carica.str().c_str());
6555              carica.str("");
6556              carica << paminc.str().c_str() << "/ctrkstruct.h";
6557              gROOT->LoadMacro(carica.str().c_str());
6558              carica.str("");
6559              carica << paminc.str().c_str() << "/ctrkinclude.h";
6560              gROOT->LoadMacro(carica.str().c_str());
6561              carica.str("");
6562              carica << paminc.str().c_str() << "/ctofstruct.h";
6563              gROOT->LoadMacro(carica.str().c_str());
6564              carica.str("");
6565              carica << paminc.str().c_str() << "/ctofinclude.h";
6566              gROOT->LoadMacro(carica.str().c_str());
6567          };          };
         stringstream carica;  
         carica.str("");  
         carica << paminc.str().c_str() << "/eventviewer.h";  
         gROOT->LoadMacro(carica.str().c_str());  
         carica.str("");  
         carica << paminc.str().c_str() << "/trklev1struct.h";  
         gROOT->LoadMacro(carica.str().c_str());  
         carica.str("");  
         carica << paminc.str().c_str() << "/ctrkstruct.h";  
         gROOT->LoadMacro(carica.str().c_str());  
         carica.str("");  
         carica << paminc.str().c_str() << "/ctrkinclude.h";  
         gROOT->LoadMacro(carica.str().c_str());  
         carica.str("");  
         carica << paminc.str().c_str() << "/ctofstruct.h";  
         gROOT->LoadMacro(carica.str().c_str());  
         carica.str("");  
         carica << paminc.str().c_str() << "/ctofinclude.h";  
         gROOT->LoadMacro(carica.str().c_str());  
6568  #endif  #endif
6569          //          //
6570          // load the selection macro          // load the selection macro
6571          //          //
6572          selection = gROOT->LoadMacro(selfile);          selection = gROOT->LoadMacro(selfile);
6573          if ( selection ){          if ( selection ){
6574                stringstream dialog;
6575                dialog.str("");
6576                dialog << var.thefilter.Data();
6577                dialog << " : no such file!";
6578                pamgui->DIALOG(2,dialog.str().c_str());
6579              printf("\n\n ERROR! cannot read the selection file you give me as input! \n");              printf("\n\n ERROR! cannot read the selection file you give me as input! \n");
6580              selection = 0;              selection = 0;
6581              printf("\n WARNING! no selection file loaded! \n\n");              printf("\n WARNING! no selection file loaded! \n\n");
6582                pamgui->DIALOG(1," No selection file loaded! ");
6583                pamgui->clearselfi();
6584          } else {          } else {
6585              printf("\n\n Selection file loaded \n\n The first event will be shown anyway. \n\n");                                        printf("\n\n Selection file loaded \n\n The first event will be shown anyway. \n\n");                          
6586                if ( !var.selex ) pamgui->DIALOG(0," Selection file successfully loaded ");
6587                var.selex = true;
6588              selection = 1;              selection = 1;
6589          };          };
6590      };      };
6591      //      //
6592        //  LOAD FILES    
6593      //      //
     //  LOAD FILES  
     //  
     Int_t SHOWDEC = 0;  
     Int_t TOF = 0;  
     Int_t AC = 0;  
     Int_t TRK = 0;  
     Int_t CALO = 0;  
     Int_t S4 = 0;  
     Int_t ND = 0;  
     Int_t INFOS = 0;  
     Int_t VINFOS = 0;  
     Int_t PALETTE = 0;  
     //  
     if ( ctrlword & (1<<0) ) {  
         PALETTE = 1;  
         printf("Show Palette\n");  
     };  
     if ( BW ) printf(" --> Black and White visualization! \n");  
     if ( ctrlword & (1<<1) ) {  
         VINFOS = 1;  
         printf("Show Verbose Text Informations\n");  
     };  
     if ( ctrlword & (1<<2) ) {  
         INFOS = 1;  
         printf("Show Text Informations\n");  
     };  
     if ( ctrlword & (1<<3) ) {  
         ND = 1;  
     };  
     if ( ctrlword & (1<<4) ) {  
         S4 = 1;  
     };  
     if ( ctrlword & (1<<5) ) {  
         CALO = 1;  
     };  
     if ( ctrlword & (1<<6) ) {  
         TRK = 1;  
     };  
     if ( ctrlword & (1<<7) ) {  
         AC = 1;  
     };  
     if ( ctrlword & (1<<8) ) {  
         TOF = 1;  
     };  
     if ( ctrlword & (1<<9) ) {  
         SHOWDEC = 1;  
         fromevent = 1;  
         toevent = 1;  
         printf("\n ** WARNING! YOU HAVE CHOSEN TO SHOW ONLY DETECTORS AND NO SIGNALS! **\n\n");  
         gSystem->Exec("sleep 5");  
     };  
     //  
     TString fififile =  getFilename(filename);  
     const char *file = fififile;  
6594      //      //
6595      Int_t trk1noev = 0;      Int_t trk1noev = 0;
6596      Int_t trk2noev = 0;      Int_t trk2noev = 0;
# Line 5619  void ShowEvent(TString filename="help", Line 6608  void ShowEvent(TString filename="help",
6608      TFile       *tofFileL1 = 0;      TFile       *tofFileL1 = 0;
6609      TTree       *toftr = 0;      TTree       *toftr = 0;
6610      //      //
6611        // check if user has given as input a correct path
6612        //
6613        ifstream myfile;
6614        stringstream hfile;
6615        TString textslash;
6616        Int_t minus = 0;
6617        stringcopy(textslash,filename,filename.Length()-1,filename.Length());
6618        if ( !strcmp(textslash.Data(),"/") ){
6619            minus = 1;
6620        } else {
6621            minus = 0;
6622        };
6623        TString textrem;
6624        stringcopy(textrem,filename,filename.Length()-minus-15,filename.Length()-minus);
6625        hfile.str("");
6626        hfile << filename.Data();
6627        hfile << "/Physics/";
6628        hfile << textrem.Data();
6629        hfile << ".Physics.Header.root";
6630        myfile.open(hfile.str().c_str());
6631        if ( !myfile ){
6632            printf("ERROR: no Header file, exiting...\n");
6633            hfile << " - No header file! ";
6634            pamgui->DIALOG(2,hfile.str().c_str());
6635            var.waitforever = true;
6636            goto refresh;
6637        };
6638        myfile.close();
6639        //
6640        // ok, open header file
6641        //
6642      headerFile = emigetFile(filename, "Physics", "Header");      headerFile = emigetFile(filename, "Physics", "Header");
6643      if ( !headerFile ){      if ( !headerFile ){
6644          printf("ERROR: no Header file, exiting...\n");          printf("ERROR: no Header file, exiting...\n");
6645          return;          pamgui->DIALOG(2," No header file! ");
6646            var.waitforever = true;
6647            goto refresh;
6648      };      };
6649      TTree *otr = (TTree*)headerFile->Get("Pscu");      TTree *otr = (TTree*)headerFile->Get("Pscu");
6650      printf("Get the Header informations\n");      printf("Get the Header informations\n");
# Line 5630  void ShowEvent(TString filename="help", Line 6652  void ShowEvent(TString filename="help",
6652      triggerFile = emigetFile(filename, "Trigger");      triggerFile = emigetFile(filename, "Trigger");
6653      if ( !triggerFile ){      if ( !triggerFile ){
6654          printf("ERROR: no Trigger file, exiting...\n");          printf("ERROR: no Trigger file, exiting...\n");
6655          return;          pamgui->DIALOG(2," No trigger file! ");
6656            var.waitforever = true;
6657            goto refresh;
6658      };      };
6659      otr->AddFriend("Trigger", triggerFile);      otr->AddFriend("Trigger", triggerFile);
6660      printf("Get the Trigger informations\n");      printf("Get the Trigger informations\n");
# Line 5645  void ShowEvent(TString filename="help", Line 6669  void ShowEvent(TString filename="help",
6669      TTree *ctrk = 0;      TTree *ctrk = 0;
6670      TFile *trackcalibFile2 = 0;      TFile *trackcalibFile2 = 0;
6671      TFile *trackerFile2b = 0;      TFile *trackerFile2b = 0;
6672      if ( TRK ) {      if ( var.TRK ) {
6673          if ( FORCELEV == 0 ){        if ( FORCELEV == 0 ){
6674              trackerFile2 = emigetFile(filename, "Tracker");          trackerFile2 = emigetFile(filename, "Tracker");
6675              if ( !trackerFile2 ){          if ( !trackerFile2 ){
6676                  printf("WARNING: no Tracker file! \n");            printf("WARNING: no Tracker file! \n");
6677                  TRK = 0;            pamgui->DIALOG(1," No tracker file! ");
6678              } else {            var.TRK = 0;
6679                  otr->AddFriend("Tracker", trackerFile2);          } else {
6680                  printf("Show the Tracker detector, LEVEL0 data \n");            otr->AddFriend("Tracker", trackerFile2);
6681                  TRKLEV = 0;            printf("Show the Tracker detector, LEVEL0 data \n");
6682              };            TRKLEV = 0;
6683          } else {          };
6684              trackerFile = emigetFile(filename, "Physics.Level2", "Tracker");        } else {
6685            trackerFile = emigetFile(filename, "Physics.Level2", "Tracker");
6686            if ( !trackerFile ){
6687              //
6688              trackhead = emigetFile(filename, "CalibTrk1", "Header");
6689              ctrk = (TTree*)trackhead->Get("Pscu");
6690              //
6691              trackerFile = emigetFile(filename, "Physics.Level1", "Tracker");
6692              trackcalibFile1 = emigetFile(filename, "CalibTrk1");
6693              trackcalibFile2 = emigetFile(filename, "CalibTrk2");
6694              //
6695              if ( !trackerFile || !trackcalibFile1 || !trackcalibFile2 || !trackhead ){
6696                trackerFile = emigetFile(filename, "Tracker");
6697              if ( !trackerFile ){              if ( !trackerFile ){
6698                  //                printf("WARNING: no Tracker file! \n");
6699                  trackhead = emigetFile(filename, "CalibTrk1", "Header");                pamgui->DIALOG(1," No tracker file! ");
6700                  ctrk = (TTree*)trackhead->Get("Pscu");                var.TRK = 0;
                 //  
                 trackerFile = emigetFile(filename, "Physics.Level1", "Tracker");  
                 trackcalibFile1 = emigetFile(filename, "CalibTrk1");  
                 trackcalibFile2 = emigetFile(filename, "CalibTrk2");  
                 //  
                 if ( !trackerFile || !trackcalibFile1 || !trackcalibFile2 || !trackhead ){  
                     trackerFile = emigetFile(filename, "Tracker");  
                     if ( !trackerFile ){  
                         printf("WARNING: no Tracker file! \n");  
                         TRK = 0;  
                     } else {  
                         otr->AddFriend("Tracker", trackerFile);  
                         printf("Show the Tracker detector, LEVEL0 data \n");  
                         TRKLEV = 0;  
                     };  
                 } else {  
                     ttr1 = (TTree*)trackerFile->Get("TrkLevel1");  
                     ctrk->AddFriend("CalibTrk1", trackcalibFile1);                
                     ctrk->AddFriend("CalibTrk2", trackcalibFile2);                
                     printf("Show the Tracker detector, LEVEL1 data \n");  
                     TRKLEV = 1;          
                     trk1noev = ttr1->GetEntries();  
                 };  
6701              } else {              } else {
6702                  ttr = (TTree*)trackerFile->Get("TrkLevel2");                otr->AddFriend("Tracker", trackerFile);
6703                  trk2noev = ttr->GetEntries();                printf("Show the Tracker detector, LEVEL0 data \n");
6704                  printf("Get the track informations (LEVEL2 Tracker data!)\n");                TRKLEV = 0;
6705                  STRACK = 1;              };
6706                  //            } else {
6707                  trackhead = emigetFile(filename, "CalibTrk2", "Header");              ttr1 = (TTree*)trackerFile->Get("TrkLevel1");
6708                  ctrk = (TTree*)trackhead->Get("Pscu");              ctrk->AddFriend("CalibTrk1", trackcalibFile1);              
6709                  //              ctrk->AddFriend("CalibTrk2", trackcalibFile2);              
6710                  trackerFile2b = emigetFile(filename, "Physics.Level1", "Tracker");              printf("Show the Tracker detector, LEVEL1 data \n");
6711                  trackcalibFile1 = emigetFile(filename, "CalibTrk1");              TRKLEV = 1;        
6712                  trackcalibFile2 = emigetFile(filename, "CalibTrk2");              trk1noev = ttr1->GetEntries();
6713                  //            };
6714                  if ( !trackerFile2b || !trackcalibFile1 || !trackcalibFile2 || !trackhead ){          } else {
6715                      printf(" WARNING: no LEVEL1 Tracker data, load LEVEL0 data \n");                        ttr = (TTree*)trackerFile->Get("TrkLevel2");
6716                      trackerFile2b = emigetFile(filename, "Tracker");            trk2noev = ttr->GetEntries();
6717                      if ( !trackerFile2b ){            printf("Get the track informations (LEVEL2 Tracker data!)\n");
6718                          printf("WARNING: no Tracker file! \n");            STRACK = 1;
6719                          TRK = 0;            //
6720                      } else {            trackhead = emigetFile(filename, "CalibTrk2", "Header");
6721                          otr->AddFriend("Tracker", trackerFile2b);            ctrk = (TTree*)trackhead->Get("Pscu");
6722                          printf("Show the Tracker detector, LEVEL0 data \n");            //
6723                          TRKLEV = 0;            trackerFile2b = emigetFile(filename, "Physics.Level1", "Tracker");
6724                      };            trackcalibFile1 = emigetFile(filename, "CalibTrk1");
6725                  } else {            trackcalibFile2 = emigetFile(filename, "CalibTrk2");
6726                      ttr1 = (TTree*)trackerFile2b->Get("TrkLevel1");            //
6727                      ctrk->AddFriend("CalibTrk1", trackcalibFile1);                          if ( !trackerFile2b || !trackcalibFile1 || !trackcalibFile2 || !trackhead ){
6728                      ctrk->AddFriend("CalibTrk2", trackcalibFile2);                            printf(" WARNING: no LEVEL1 Tracker data, load LEVEL0 data \n");            
6729                      printf("Show the Tracker detector, LEVEL1 data \n");              trackerFile2b = emigetFile(filename, "Tracker");
6730                      TRKLEV = 1;                      if ( !trackerFile2b ){
6731                      trk1noev = ttr1->GetEntries();                printf("WARNING: no Tracker file! \n");
6732                  };                pamgui->DIALOG(1," No tracker file! ");
6733              };                var.TRK = 0;
6734          };              } else {
6735                  otr->AddFriend("Tracker", trackerFile2b);
6736                  printf("Show the Tracker detector, LEVEL0 data \n");
6737                  TRKLEV = 0;
6738                };
6739              } else {
6740                ttr1 = (TTree*)trackerFile2b->Get("TrkLevel1");
6741                ctrk->AddFriend("CalibTrk1", trackcalibFile1);              
6742                ctrk->AddFriend("CalibTrk2", trackcalibFile2);              
6743                printf("Show the Tracker detector, LEVEL1 data \n");
6744                TRKLEV = 1;        
6745                trk1noev = ttr1->GetEntries();
6746              };
6747            };
6748          };
6749          level.track = TRKLEV;
6750          level.track2 = STRACK;
6751        } else {
6752          level.track = -10;
6753          level.track2 = -10;
6754      };      };
6755      //      //
6756      Int_t CALOLEV = 0;      Int_t CALOLEV = 0;
6757      if ( CALO ) {      if ( var.CALO ) {
6758          if ( FORCELEV == 0 ){          if ( FORCELEV == 0 ){
6759              caloFile = emigetFile(filename, "Calorimeter");              caloFile = emigetFile(filename, "Calorimeter");
6760              if ( !caloFile ){              if ( !caloFile ){
6761                  printf("WARNING: no calorimeter file! \n");                  printf("WARNING: no calorimeter file! \n");
6762                  CALO = 0;                  pamgui->DIALOG(1," No calorimeter file! ");
6763                    var.CALO = 0;
6764              } else {              } else {
6765                  otr->AddFriend("Calorimeter", caloFile);                  otr->AddFriend("Calorimeter", caloFile);
6766                  printf("Show the Calorimeter detector, LEVEL0 data \n");                  printf("Show the Calorimeter detector, LEVEL0 data \n");
# Line 5739  void ShowEvent(TString filename="help", Line 6772  void ShowEvent(TString filename="help",
6772                  caloFile = emigetFile(filename, "Calorimeter");                  caloFile = emigetFile(filename, "Calorimeter");
6773                  if ( !caloFile ){                  if ( !caloFile ){
6774                      printf("WARNING: no calorimeter file! \n");                      printf("WARNING: no calorimeter file! \n");
6775                      CALO = 0;                      pamgui->DIALOG(1," No calorimeter file! ");
6776                        var.CALO = 0;
6777                  } else {                  } else {
6778                      otr->AddFriend("Calorimeter", caloFile);                      otr->AddFriend("Calorimeter", caloFile);
6779                      printf("Show the Calorimeter detector, try to generate LEVEL1 data \n");                      printf("Show the Calorimeter detector, try to generate LEVEL1 data \n");
# Line 5751  void ShowEvent(TString filename="help", Line 6785  void ShowEvent(TString filename="help",
6785                  CALOLEV = 1;                              CALOLEV = 1;            
6786              };              };
6787          };          };
6788            level.calo = CALOLEV;
6789            level.calol2 = -10;
6790        } else {
6791            level.calo = -10;
6792            level.calol2 = -10;
6793      };      };
6794      //      //
6795      if ( ND ) {      if ( var.ND ) {
6796          neutronFile = emigetFile(filename, "Neutron");          neutronFile = emigetFile(filename, "Neutron");
6797          if ( !neutronFile ){          if ( !neutronFile ){
6798              printf("WARNING: no neutron detector file! \n");              printf("WARNING: no neutron detector file! \n");
6799              ND = 0;              pamgui->DIALOG(1," No neutron detector file! ");
6800                var.ND = 0;
6801          } else {          } else {
6802              otr->AddFriend("Neutron", neutronFile);              otr->AddFriend("Neutron", neutronFile);
6803              printf("Show the Neutron detector, LEVEL0 data \n");              printf("Show the Neutron detector, LEVEL0 data \n");
6804          };          };
6805            level.nd = 0;
6806        } else {
6807            level.nd = -10;
6808      };      };
6809      //      //
6810      if ( AC ) {      if ( var.AC ) {
6811          if ( FORCELEV == 0 ){          if ( FORCELEV == 0 ){
6812              acFile = emigetFile(filename, "Anticounter");              acFile = emigetFile(filename, "Anticounter");
6813              if ( !acFile ){              if ( !acFile ){
6814                  printf("WARNING: no AC file! \n");                  printf("WARNING: no AC file! \n");
6815                  AC = 0;                  pamgui->DIALOG(1," No anticounters file! ");
6816                    var.AC = 0;
6817              } else {              } else {
6818                  otr->AddFriend("Anticounter", acFile);                  otr->AddFriend("Anticounter", acFile);
6819                  printf("Show the Anticoincidence detector, LEVEL 0 data\n");                                              printf("Show the Anticoincidence detector, LEVEL 0 data\n");                            
# Line 5781  void ShowEvent(TString filename="help", Line 6825  void ShowEvent(TString filename="help",
6825                  acFile = emigetFile(filename, "Anticounter");                  acFile = emigetFile(filename, "Anticounter");
6826                  if ( !acFile ){                  if ( !acFile ){
6827                      printf("WARNING: no AC file! \n");                      printf("WARNING: no AC file! \n");
6828                      AC = 0;                      pamgui->DIALOG(1," No anticounters file! ");
6829                        var.AC = 0;
6830                  } else {                  } else {
6831                      otr->AddFriend("Anticounter", acFile);                      otr->AddFriend("Anticounter", acFile);
6832                      printf("Show the Anticoincidence detector, LEVEL 0 data\n");                                                      printf("Show the Anticoincidence detector, LEVEL 0 data\n");                                
# Line 5793  void ShowEvent(TString filename="help", Line 6838  void ShowEvent(TString filename="help",
6838                  ACLEV = 1;                  ACLEV = 1;
6839              };              };
6840          };          };
6841            level.ac = ACLEV;
6842        } else {
6843            level.ac = -10;
6844      };      };
6845      Int_t S4LEV = 0;      Int_t S4LEV = 0;
6846      if ( S4 ) {      if ( var.S4 ) {
6847          s4File = emigetFile(filename, "S4");          s4File = emigetFile(filename, "S4");
6848          if ( !s4File ){          if ( !s4File ){
6849              printf("WARNING: no S4 file! \n");              printf("WARNING: no S4 file! \n");
6850              S4 = 0;              pamgui->DIALOG(1," No S4 file! ");
6851                var.S4 = 0;
6852          } else {          } else {
6853              otr->AddFriend("S4", s4File);              otr->AddFriend("S4", s4File);
6854              if ( FORCELEV != 0 ){              if ( FORCELEV != 0 ){
# Line 5810  void ShowEvent(TString filename="help", Line 6859  void ShowEvent(TString filename="help",
6859                  S4LEV = 0;                  S4LEV = 0;
6860              };              };
6861          };          };
6862            level.s4 = S4LEV;
6863        } else {
6864            level.s4 = -10;
6865      };      };
6866      //      //
6867      Int_t TOFLEV = 0;        Int_t TOFLEV = 0;  
6868      if ( TOF ) {      if ( var.TOF ) {
6869          if ( FORCELEV != 0 ){          if ( FORCELEV != 0 ){
6870              tofFileL1 = emigetFile(filename, "Physics.Level1","TofTrigger");              tofFileL1 = emigetFile(filename, "Physics.Level1","TofTrigger");
6871              if ( !tofFileL1 ){                if ( !tofFileL1 ){  
6872                  tofFile = emigetFile(filename, "Tof");                  tofFile = emigetFile(filename, "Tof");
6873                  if ( !tofFile ){                          if ( !tofFile ){        
6874                      printf("WARNING: no TOF file! \n");                      printf("WARNING: no TOF file! \n");
6875                        pamgui->DIALOG(1," No TOF file! ");
6876                      printf("Show the Time of Flight detector, LEVEL0 (trigger board) data\n");                      printf("Show the Time of Flight detector, LEVEL0 (trigger board) data\n");
6877                      //      TOF = 0;                      //      var.TOF = 0;
6878                      TOFLEV = 0;                      TOFLEV = 0;
6879                  } else {                  } else {
6880                      otr->AddFriend("Tof", tofFile);                      otr->AddFriend("Tof", tofFile);
# Line 5838  void ShowEvent(TString filename="help", Line 6891  void ShowEvent(TString filename="help",
6891              printf("Show the Time of Flight detector, LEVEL0 data\n");              printf("Show the Time of Flight detector, LEVEL0 data\n");
6892              TOFLEV = 0;              TOFLEV = 0;
6893          };          };
6894            level.tof = TOFLEV;
6895        } else {
6896            level.tof = -10;
6897      };      };
6898      //          //    
6899      printf("\n");      printf("\n");
# Line 5852  void ShowEvent(TString filename="help", Line 6908  void ShowEvent(TString filename="help",
6908      if (nevents<=0) {      if (nevents<=0) {
6909          headerFile->Close();          headerFile->Close();
6910          triggerFile->Close();          triggerFile->Close();
6911          if ( TRK ) trackerFile->Close();          if ( var.TRK ) trackerFile->Close();
6912          if ( CALO )caloFile->Close();          if ( var.CALO )caloFile->Close();
6913          if ( ND ) neutronFile->Close();          if ( var.ND ) neutronFile->Close();
6914          if ( AC ) acFile->Close();          if ( var.AC ) acFile->Close();
6915          if ( TOF ) tofFile->Close();          if ( var.TOF ) tofFile->Close();
6916          if ( S4 ) s4File->Close();          if ( var.S4 ) s4File->Close();
6917          printf("The file is empty, exiting...\n");          printf("The file is empty, exiting...\n");
6918          return;          pamgui->DIALOG(0," The file contains no physics data! ");
6919            var.waitforever = true;
6920            goto refresh;
6921      }      }
6922      //      //
6923      //  Define some variables      if ( var.SHOWDEC ){
     //  
     Int_t OBT = 0;  
     Int_t DOBT = 0;  
     Int_t ifout = 0;  
     Int_t OOBT = 0;  
     //  
     if ( calcalibfile == "" ) calcalibfile = filename;  
     if ( outDir == "" ) outDir = filename;  
     //  
     struct Variables var;  
     //  
     if ( SHOWDEC ){  
6924          var.nosig = 1;          var.nosig = 1;
6925      } else {      } else {
6926          var.nosig = 0;          var.nosig = 0;
6927      };      };
6928      //      //
     // here windows dimension (based on the computer screen size) and position and dimension of figures  
     //  
     Int_t  xw, yw;  
     UInt_t ww, hw;  
     gVirtualX->GetWindowSize(gClient->GetRoot()->GetId(),xw,yw,ww,hw);  
     Float_t winx = (float)ww*0.95;  
     Float_t winy = (float)hw*0.95;  
     Float_t winrap = winx/winy;  
     var.bw = 0;  
     if ( BW ) var.bw = 1;  
     var.xxvc = 0.17;  
     var.yxvc = 0.44;  
     var.xyvc = 0.83;  
     var.yyvc = 0.44;  
     //      
     var.sfx = 0.82/winrap;  
     var.sfy = 0.82;  
     //  
     var.nds4 = 0.4;  
     //var.nds4 = 0.85/winrap;  
     var.xcat = 0.5;  
     var.ycat = 0.74;  
     //  
     var.tracknds4 = 1;  
     //  
6929      //  READ the CALORIMETER ADC to MIP conversion table (if trying to generate level1 data)      //  READ the CALORIMETER ADC to MIP conversion table (if trying to generate level1 data)
6930      //      //
6931      Float_t mip[2][22][96];      if ( !var.refresh ){
6932      Int_t okcalo = 0;        if ( !CALOLEV && var.CALO ){
     TTree *ctree = 0;  
     TFile *chfile;  
     CalorimeterCalibration *ccalo = 0;  
     Long64_t cnevents = 0;  
     if ( !CALOLEV && CALO ){  
6933          chfile = new TFile(calfile.str().c_str(),"READ","Calorimeter CALIBRATION data");          chfile = new TFile(calfile.str().c_str(),"READ","Calorimeter CALIBRATION data");
6934          if ( chfile->IsZombie() ){          if ( chfile->IsZombie() ){
6935              printf(" WARNING: no calorimeter calibration file! \n Using 26 as conversion factor for all strips. \n");            printf(" WARNING: no calorimeter calibration file! \n Using 26 as conversion factor for all strips. \n");
6936              okcalo = 0;            okcalo = 0;
6937          } else {          } else {
6938              okcalo = 1;            okcalo = 1;
6939              ctree = (TTree*)chfile->Get("CaloADC");              ctree = (TTree*)chfile->Get("CaloADC");  
6940              ctree->SetBranchAddress("Event", &ccalo);                ctree->SetBranchAddress("Event", &ccalo);    
6941              //            //
6942              cnevents = ctree->GetEntries();            cnevents = ctree->GetEntries();
6943              ctree->GetEntry(cnevents-1);            ctree->GetEntry(cnevents-1);
6944          };          };
6945          //          //
6946          if ( okcalo ) {          if ( okcalo ) {
6947              for (Int_t m = 0; m < 2 ; m++ ){            for (Int_t m = 0; m < 2 ; m++ ){
6948                  for (Int_t k = 0; k < 22; k++ ){              for (Int_t k = 0; k < 22; k++ ){
6949                      for (Int_t l = 0; l < 96; l++ ){                for (Int_t l = 0; l < 96; l++ ){
6950                          if ( (ccalo->fp[1][m][k][l] > 20. && ccalo->fp[1][m][k][l] < 32.) || ccalo->mask[m][k][l] == 1. ) {                  if ( (ccalo->fp[1][m][k][l] > 20. && ccalo->fp[1][m][k][l] < 32.) || ccalo->mask[m][k][l] == 1. ) {
6951                              if ( ccalo->mip[m][k][l] != 0. ){                    if ( ccalo->mip[m][k][l] != 0. ){
6952                                  mip[m][k][l] = ccalo->mip[m][k][l];                      mip[m][k][l] = ccalo->mip[m][k][l];
6953                              } else {                    } else {
6954                                  mip[m][k][l] = 26. ;                      mip[m][k][l] = 26. ;
6955                              };                    };
6956                          } else {                  } else {
6957                              mip[m][k][l] = 26. ;                    mip[m][k][l] = 26. ;
                         };  
                     };      
6958                  };                  };
6959                  };          
6960              };              };
6961              };
6962          } else {          } else {
6963              for (Int_t m = 0; m < 2 ; m++ ){            for (Int_t m = 0; m < 2 ; m++ ){
6964                  for (Int_t k = 0; k < 22; k++ ){              for (Int_t k = 0; k < 22; k++ ){
6965                      for (Int_t l = 0; l < 96; l++ ){                      for (Int_t l = 0; l < 96; l++ ){
6966                          mip[m][k][l] = 26. ;                        mip[m][k][l] = 26. ;
6967                      };                      };
6968                  };                  };
6969              };            };
6970          };          };
6971          chfile->Close();          chfile->Close();
6972          };
6973      };      };
6974      //      //
6975      //  Check that given input are inside the boundary conditions      //  Check that given input are inside the boundary conditions
6976      //      //
6977          if ( fromevent > toevent && toevent ){      if ( fromevent > toevent && toevent ){
6978          printf("It must be fromevent < toevent \n");          printf("It must be fromevent < toevent \n");
6979          return;          return;
6980      };      };
# Line 5983  void ShowEvent(TString filename="help", Line 7000  void ShowEvent(TString filename="help",
7000          };          };
7001      };      };
7002      //      //
     //  book the canvas  
     //  
     TCanvas *figure = new TCanvas("PAMELA event viewer", "PAMELA event viewer",(int)winx,(int)winy);  
     TLatex *text=new TLatex();  
     stringstream testo;  
     stringstream testo2;  
     stringstream testo3;  
     figure->Range(0.,0.,1.,1.);  
     gStyle->SetOptDate(0);  
     gStyle->SetOptStat(0);  
     gStyle->SetLabelSize(0);  
     gStyle->SetNdivisions(1,"X");  
     gStyle->SetNdivisions(1,"Y");        
     //  
     stringstream libload;  
     Int_t doflag = 1;  
     Int_t thefirst = 1;  
     Int_t trackdone1 = 0;  
     Int_t trackdone2 = 0;  
     Int_t seldone = 0;  
     Float_t headc = 0.;  
     Float_t headcold = 0.;  
     Int_t i = minevent;  
     Int_t OK = 0;  
     Int_t jumpto = 0;  
7003      //      //
7004      otr->SetBranchAddress("Header", &eh);      otr->SetBranchAddress("Header", &eh);
7005      otr->GetEntry(maxevent);      otr->GetEntry(maxevent);
# Line 6016  void ShowEvent(TString filename="help", Line 7008  void ShowEvent(TString filename="help",
7008      otr->GetEntry(minevent);      otr->GetEntry(minevent);
7009      ph = eh->GetPscuHeader();      ph = eh->GetPscuHeader();
7010      Int_t firstevno = (int)ph->GetCounter();      Int_t firstevno = (int)ph->GetCounter();
7011      struct Calib calib;      if ( !var.refresh ) i = minevent;
7012      Int_t b[4];      var.refresh = false;
     Int_t si = 0;  
7013      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7014      //  MAIN LOOP STARTS HERE: run over all the events      //  MAIN LOOP STARTS HERE: run over all the events
7015      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////      /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7016      while ( i < maxevent+1 ){          //    while ( i < maxevent+1 ){
7017        while ( 1 ){
7018            //
7019            // update progress bar
7020            //
7021            if ( popup ) pamgui->increment((float)(i+1)*100./(float)nevents);
7022          //          //
7023          // clear canvas and variables          // clear canvas and variables
7024          //          //
# Line 6051  void ShowEvent(TString filename="help", Line 7047  void ShowEvent(TString filename="help",
7047              ph = eh->GetPscuHeader();              ph = eh->GetPscuHeader();
7048              Int_t cjumpto = (int)ph->GetCounter();              Int_t cjumpto = (int)ph->GetCounter();
7049              if ( cjumpto == jumpto ) jumpto = 0;              if ( cjumpto == jumpto ) jumpto = 0;
7050              if ( jumpto && i == maxevent ) {              if ( jumpto && (i == maxevent || i == si) ) {
7051                  i = si;                  if ( var.jumpen && i == maxevent ) {
7052                  printf(" WARNING: NO EVENT WITH EVENT NUMBER %i \n",jumpto);                      i = -1;
7053                  jumpto = 0;                      var.jumpen = false;
7054                    } else {
7055                        i = si;
7056                        printf(" WARNING: NO EVENT WITH EVENT NUMBER %i \n",jumpto);
7057                        stringstream dialog;
7058                        dialog.str("");
7059                        dialog << " No event with event number ";
7060                        dialog << jumpto;
7061                        pamgui->DIALOG(1,dialog.str().c_str());
7062                        jumpto = 0;
7063                    };
7064              };              };
7065          };          };
7066          //          //
7067          OK = 0;          isOK = 0;
7068          if ( !selection || ( i == minevent && !seldone) ){          if ( !selection || ( i == minevent && !seldone) || ( i == minevent || i == maxevent )){
7069              OK = 1;              if (  i == minevent && selection && seldone && doflag==2) pamgui->DIALOG(1," Stop searching, first event reached ");
7070                if (  i == maxevent && selection ) pamgui->DIALOG(1," Stop searching, last event reached ");
7071                isOK = 1;
7072              seldone = 1;              seldone = 1;
7073          } else {          } else {
7074              OK = 0;              isOK = 0;
7075  #if defined (__CINT__)  #if defined (__CINT__)
7076              OK = filter(i,otr,ttr,level);              isOK = filter(i,otr,ttr,level);
7077  #endif  #endif
7078  #if !defined (__CINT__)  #if !defined (__CINT__)
7079              stringstream cintcom;              stringstream cintcom;
# Line 6086  void ShowEvent(TString filename="help", Line 7094  void ShowEvent(TString filename="help",
7094              cintcom << "struct Levels &level = (struct Levels &)0x" << hex;              cintcom << "struct Levels &level = (struct Levels &)0x" << hex;
7095              cintcom << &level;              cintcom << &level;
7096              gROOT->ProcessLine(cintcom.str().c_str());              gROOT->ProcessLine(cintcom.str().c_str());
7097              OK = gApplication->ProcessLine("filter((Int_t)a,(TTree *)otr,(TTree *)ttr,(Levels &)level);");              isOK = gApplication->ProcessLine("filter((Int_t)a,(TTree *)otr,(TTree *)ttr,(Levels &)level);");
7098  #endif  #endif
7099              seldone = 1;              seldone = 1;
7100              printf("Scanning data: %d%c done",100*(i-minevent)/(maxevent-minevent),37);              printf("Scanning data: %d%c done",100*(i-minevent)/(maxevent-minevent),37);
# Line 6095  void ShowEvent(TString filename="help", Line 7103  void ShowEvent(TString filename="help",
7103          //          //
7104          // if the event is selected go on          // if the event is selected go on
7105          //          //
7106          if ( OK && !jumpto ) {          if ( isOK && !jumpto ) {
7107                if ( var.doflag == 3 ) selection = 1;
7108              printf("\n");              printf("\n");
7109              figure->Clear();              figure->Clear();
7110              figure->SetFillColor(10);              figure->SetFillColor(10);
# Line 6148  void ShowEvent(TString filename="help", Line 7157  void ShowEvent(TString filename="help",
7157              //              //
7158              // show TOF              // show TOF
7159              //              //
7160              if ( TOF ){              if ( var.TOF ){
7161                  figure->cd();                    figure->cd();  
7162                  if ( TOFLEV == 0 ){                  if ( TOFLEV == 0 ){
7163                      ShowTOF(i,otr,var);                      ShowTOF(i,otr,var);
# Line 6159  void ShowEvent(TString filename="help", Line 7168  void ShowEvent(TString filename="help",
7168                      level.tof = 0;                      level.tof = 0;
7169                  };                  };
7170                  if ( TOFLEV == 1 ){                  if ( TOFLEV == 1 ){
7171                      ShowTOFL1(i,toftr,var);                      ShowTOFL1(i,toftr,var,pamgui);
7172                      level.tof = 1;                      level.tof = 1;
7173                  };                  };
7174              };              };
7175              //              //
7176              // show anticounters              // show anticounters
7177              //              //
7178              if ( AC ){              if ( var.AC ){
7179                  figure->cd();                    figure->cd();  
7180                  if ( ACLEV == 0 ){                  if ( ACLEV == 0 ){
7181                      ShowAC(i,otr,var,0);                                      ShowAC(i,otr,var,0);                
# Line 6180  void ShowEvent(TString filename="help", Line 7189  void ShowEvent(TString filename="help",
7189              //              //
7190              // show S4              // show S4
7191              //              //
7192              if ( S4 ){              if ( var.S4 ){
7193                  figure->cd();                    figure->cd();  
7194                  if ( S4LEV == 0 ){                  if ( S4LEV == 0 ){
7195                      ShowS4L0(i,otr,var);                                      ShowS4L0(i,otr,var);                
# Line 6195  void ShowEvent(TString filename="help", Line 7204  void ShowEvent(TString filename="help",
7204              //              //
7205              // show neutron detector              // show neutron detector
7206              //              //
7207              if ( ND ){              if ( var.ND ){
7208                  figure->cd();                    figure->cd();  
7209                  ShowND(i,otr,var);                  ShowND(i,otr,var);
7210                  level.nd = 0;                  level.nd = 0;
# Line 6203  void ShowEvent(TString filename="help", Line 7212  void ShowEvent(TString filename="help",
7212              //              //
7213              // show tracker              // show tracker
7214              //              //
7215              if ( TRK ){              if ( var.TRK ){
7216                  //                  //
7217                  // if we have level2 data show the track                  // if we have level2 data show the track
7218                  //                  //
# Line 6245  void ShowEvent(TString filename="help", Line 7254  void ShowEvent(TString filename="help",
7254                      };                      };
7255                      level.track2 = 1;                      level.track2 = 1;
7256                      figure->cd();                            figure->cd();      
7257                      ShowTRACK(i,ttr,var);                      ShowTRACK(i,ttr,var,pamgui);
7258                    } else {
7259                        level.track2 = 0;
7260                  };                  };
7261                  //                  //
7262                  // show level1 data                  // show level1 data
# Line 6296  void ShowEvent(TString filename="help", Line 7307  void ShowEvent(TString filename="help",
7307                              };                              };
7308                          };                          };
7309                      };                      };
7310                      ShowTRKL1(i,ttr1,var);                      ShowTRKL1(i,ttr1,var,pamgui);
7311                  };                  };
7312                  //                  //
7313                  // if everything fails, show at least level0 data                  // if everything fails, show at least level0 data
# Line 6309  void ShowEvent(TString filename="help", Line 7320  void ShowEvent(TString filename="help",
7320              //              //
7321              // show calorimeter              // show calorimeter
7322              //                //  
7323              if ( CALO ){                          if ( var.CALO ){        
7324                  figure->cd();                    figure->cd();  
7325                  //                  //
7326                  // if we have LEVEL1 data                  // if we have LEVEL1 data
# Line 6369  void ShowEvent(TString filename="help", Line 7380  void ShowEvent(TString filename="help",
7380              //              //
7381              // SHOW INFOS              // SHOW INFOS
7382              //              //
7383              if ( INFOS ){              if ( var.INFOS ){
7384                  figure->cd();                  figure->cd();
7385                  text->SetTextAngle(0);                  text->SetTextAngle(0);
7386                  text->SetTextFont(32);                  text->SetTextFont(32);
# Line 6429  void ShowEvent(TString filename="help", Line 7440  void ShowEvent(TString filename="help",
7440                  text->DrawLatex(0.33,txthi,testo3.str().c_str());                  text->DrawLatex(0.33,txthi,testo3.str().c_str());
7441                  txthi -= 0.03;                  txthi -= 0.03;
7442                  testo3.str("");                  testo3.str("");
7443                  testo3 << "S4: " << setprecision(2);                  testo3 << "S4: ";// << setprecision(2);
7444                  testo3 << var.s4sig << " [MIP]   TOF: #beta(1,...,5) = (";                  testo3 << var.s4sig << " [MIP]   TOF: #beta(1,...,5) = (";
7445                  testo3 << setprecision(3) << var.beta[0];                  testo3 << setprecision(3) << var.beta[0];
7446                  testo3 << ",";                  testo3 << ",";
# Line 6444  void ShowEvent(TString filename="help", Line 7455  void ShowEvent(TString filename="help",
7455                  text->DrawLatex(0.33,txthi,testo3.str().c_str());                            text->DrawLatex(0.33,txthi,testo3.str().c_str());          
7456                  txthi -= 0.03;                  txthi -= 0.03;
7457                  testo3.str("");                  testo3.str("");
7458                  testo3 << "ND: Trigger: neutrons = " << var.trup;                  testo3 << "ND: Trig: " << var.trup;
7459                  testo3 << "  - Background: upper = " << var.bkup;                  testo3 << "  - Bckgr: upper = " << var.bkup;
7460                  testo3 << " lower = " << var.bkbo;                  testo3 << " lower = " << var.bkbo;
7461                  text->DrawLatex(0.33,txthi,testo3.str().c_str());                  text->DrawLatex(0.33,txthi,testo3.str().c_str());
7462                  txthi -= 0.03;                  txthi -= 0.03;
# Line 6454  void ShowEvent(TString filename="help", Line 7465  void ShowEvent(TString filename="help",
7465                  text->SetTextAngle(90);                  text->SetTextAngle(90);
7466                  text->DrawLatex(var.xyvc+0.17*var.sfx,var.yyvc+0.075*var.sfy,"CPU SIDE");                  text->DrawLatex(var.xyvc+0.17*var.sfx,var.yyvc+0.075*var.sfy,"CPU SIDE");
7467                  text->DrawLatex(var.xyvc-0.17*var.sfx,var.yyvc+0.075*var.sfy,"VME SIDE");                  text->DrawLatex(var.xyvc-0.17*var.sfx,var.yyvc+0.075*var.sfy,"VME SIDE");
7468                  if ( AC || TRK ){                  if ( var.AC ){
7469                      text->SetTextAngle(90);                      text->SetTextAngle(90);
7470                      text->DrawLatex(var.xcat-0.235*var.sfx,var.ycat-0.025*var.sfy,"VME SIDE");                      text->DrawLatex(var.xcat-0.235*var.sfx,var.ycat-0.025*var.sfy,"VME SIDE");
7471                      text->DrawLatex(var.xcat+0.235*var.sfx,var.ycat-0.025*var.sfy,"CPU SIDE");                      text->DrawLatex(var.xcat+0.235*var.sfx,var.ycat-0.025*var.sfy,"CPU SIDE");
# Line 6489  void ShowEvent(TString filename="help", Line 7500  void ShowEvent(TString filename="help",
7500                  //                  //
7501                  text->SetTextSize(0.015);                            text->SetTextSize(0.015);          
7502                  text->SetTextFont(2);                  text->SetTextFont(2);
7503                  DrawX(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,0.005,var);                  DrawX(var.xxvc-0.25*var.sfx,var.yxvc-0.328*var.sfy,0.005,var); //508
7504                  text->SetTextFont(32);                  text->SetTextFont(32);
7505                  text->DrawLatex(var.xxvc-0.246*var.sfx,var.yxvc-0.508*var.sfy,"y");                  text->DrawLatex(var.xxvc-0.266*var.sfx,var.yxvc-0.328*var.sfy,"y");
7506                  TArrow *arr;                  TArrow *arr;
7507                  arr = new TArrow(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,var.xxvc-0.19*var.sfx,var.yxvc-0.508*var.sfy);                  arr = new TArrow(var.xxvc-0.25*var.sfx,var.yxvc-0.328*var.sfy,var.xxvc-0.21*var.sfx,var.yxvc-0.328*var.sfy);
7508                  arr->SetArrowSize(0.005);                  arr->SetArrowSize(0.005);
7509                  arr->Draw();                  arr->Draw();
7510                  text->DrawLatex(var.xxvc-0.19*var.sfx,var.yxvc-0.515*var.sfy,"x");                  text->DrawLatex(var.xxvc-0.21*var.sfx,var.yxvc-0.335*var.sfy,"x");
7511                  arr = new TArrow(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,var.xxvc-0.23*var.sfx,var.yxvc-0.468*var.sfy);                  arr = new TArrow(var.xxvc-0.25*var.sfx,var.yxvc-0.328*var.sfy,var.xxvc-0.25*var.sfx,var.yxvc-0.288*var.sfy);
7512                  arr->SetArrowSize(0.005);                  arr->SetArrowSize(0.005);
7513                  arr->Draw();                  arr->Draw();
7514                  text->DrawLatex(var.xxvc-0.246*var.sfx,var.yxvc-0.468*var.sfy,"z");                  text->DrawLatex(var.xxvc-0.266*var.sfx,var.yxvc-0.288*var.sfy,"z");
7515                  //                  //
7516                  text->SetTextSize(0.015);                            text->SetTextSize(0.015);          
7517                  text->SetTextFont(2);                  text->SetTextFont(2);
7518                  DrawX(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,0.005,var);                  DrawX(var.xyvc+0.24*var.sfx,var.yyvc-0.328*var.sfy,0.005,var);
7519                  text->SetTextFont(32);                  text->SetTextFont(32);
7520                  text->DrawLatex(var.xyvc+0.23*var.sfx,var.yyvc-0.508*var.sfy,"x");                  text->DrawLatex(var.xyvc+0.25*var.sfx,var.yyvc-0.328*var.sfy,"x");
7521                  arr = new TArrow(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,var.xyvc+0.18*var.sfx,var.yyvc-0.508*var.sfy);                  arr = new TArrow(var.xyvc+0.24*var.sfx,var.yyvc-0.328*var.sfy,var.xyvc+0.2*var.sfx,var.yyvc-0.328*var.sfy);
7522                  arr->SetArrowSize(0.005);                  arr->SetArrowSize(0.005);
7523                  arr->Draw();                  arr->Draw();
7524                  text->DrawLatex(var.xyvc+0.17*var.sfx,var.yyvc-0.511*var.sfy,"y");                  text->DrawLatex(var.xyvc+0.19*var.sfx,var.yyvc-0.335*var.sfy,"y");
7525                  arr = new TArrow(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,var.xyvc+0.22*var.sfx,var.yyvc-0.468*var.sfy);                  arr = new TArrow(var.xyvc+0.24*var.sfx,var.yyvc-0.328*var.sfy,var.xyvc+0.24*var.sfx,var.yyvc-0.288*var.sfy);
7526                  arr->SetArrowSize(0.005);                  arr->SetArrowSize(0.005);
7527                  arr->Draw();                  arr->Draw();
7528                  text->DrawLatex(var.xyvc+0.23*var.sfx,var.yyvc-0.468*var.sfy,"z");                            text->DrawLatex(var.xyvc+0.25*var.sfx,var.yyvc-0.288*var.sfy,"z");          
7529                  text->SetTextSize(0.01);                  text->SetTextSize(0.01);
7530                    //
7531    /*              text->SetTextSize(0.015);            */
7532    /*              text->SetTextFont(2); */
7533    /*              DrawX(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,0.005,var); */
7534    /*              text->SetTextFont(32); */
7535    /*              text->DrawLatex(var.xxvc-0.246*var.sfx,var.yxvc-0.508*var.sfy,"y"); */
7536    /*              TArrow *arr; */
7537    /*              arr = new TArrow(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,var.xxvc-0.19*var.sfx,var.yxvc-0.508*var.sfy); */
7538    /*              arr->SetArrowSize(0.005); */
7539    /*              arr->Draw(); */
7540    /*              text->DrawLatex(var.xxvc-0.19*var.sfx,var.yxvc-0.515*var.sfy,"x"); */
7541    /*              arr = new TArrow(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,var.xxvc-0.23*var.sfx,var.yxvc-0.468*var.sfy); */
7542    /*              arr->SetArrowSize(0.005); */
7543    /*              arr->Draw(); */
7544    /*              text->DrawLatex(var.xxvc-0.246*var.sfx,var.yxvc-0.468*var.sfy,"z"); */
7545    /*              // */
7546    /*              text->SetTextSize(0.015);            */
7547    /*              text->SetTextFont(2); */
7548    /*              DrawX(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,0.005,var); */
7549    /*              text->SetTextFont(32); */
7550    /*              text->DrawLatex(var.xyvc+0.23*var.sfx,var.yyvc-0.508*var.sfy,"x"); */
7551    /*              arr = new TArrow(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,var.xyvc+0.18*var.sfx,var.yyvc-0.508*var.sfy); */
7552    /*              arr->SetArrowSize(0.005); */
7553    /*              arr->Draw(); */
7554    /*              text->DrawLatex(var.xyvc+0.17*var.sfx,var.yyvc-0.511*var.sfy,"y"); */
7555    /*              arr = new TArrow(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,var.xyvc+0.22*var.sfx,var.yyvc-0.468*var.sfy); */
7556    /*              arr->SetArrowSize(0.005); */
7557    /*              arr->Draw(); */
7558    /*              text->DrawLatex(var.xyvc+0.23*var.sfx,var.yyvc-0.468*var.sfy,"z");           */
7559    /*              text->SetTextSize(0.01); */
7560              };              };
7561              //              //
7562              // SHOW PALETTE              // SHOW PALETTE
7563              //              //
7564              if ( PALETTE ) ShowPalette(var.bw);              if ( var.PALETTE ) ShowPalette(var.bw);
7565              //              //
7566              // SHOW VERBOSE INFOS              // SHOW VERBOSE INFOS
7567              //              //
7568              if ( VINFOS ){              if ( var.VINFOS ){
7569                  figure->cd();                  figure->cd();
7570                  text->SetTextAngle(0);                  text->SetTextAngle(0);
7571                  text->SetTextFont(32);                  text->SetTextFont(32);
7572                  text->SetTextColor(1);                  text->SetTextColor(1);
7573                  text->SetTextSize(0.01);                  text->SetTextSize(0.01);
7574                  text->SetTextAlign(12);                  text->SetTextAlign(12);
7575                  if ( AC ){                  if ( var.AC ){
7576                      //                      //
7577                      // Plane view                      // Plane view
7578                      //                      //
# Line 6569  void ShowEvent(TString filename="help", Line 7610  void ShowEvent(TString filename="help",
7610                      text->DrawLatex(var.xyvc-0.170*var.sfx,var.yyvc+0.39*var.sfy,"CAT2");                      text->DrawLatex(var.xyvc-0.170*var.sfx,var.yyvc+0.39*var.sfy,"CAT2");
7611                      text->DrawLatex(var.xyvc+0.13*var.sfx,var.yyvc+0.39*var.sfy,"CAT1");                      text->DrawLatex(var.xyvc+0.13*var.sfx,var.yyvc+0.39*var.sfy,"CAT1");
7612                  };                  };
7613                  if  ( CALO ){                  if  ( var.CALO ){
7614                      text->SetTextSize(0.020);                      text->SetTextSize(0.020);
7615                      text->SetTextAngle(90);                      text->SetTextAngle(90);
7616                      text->DrawLatex(var.xxvc-0.22*var.sfx,var.yxvc-0.290*var.sfy,"Calorimeter");                                      text->DrawLatex(var.xxvc-0.22*var.sfx,var.yxvc-0.290*var.sfy,"Calorimeter");                
# Line 6577  void ShowEvent(TString filename="help", Line 7618  void ShowEvent(TString filename="help",
7618                      text->SetTextSize(0.01);                      text->SetTextSize(0.01);
7619                      text->SetTextAngle(0);                      text->SetTextAngle(0);
7620                  };                  };
7621                  if  ( TRK ){                  if  ( var.TRK ){
7622                      text->SetTextSize(0.020);                      text->SetTextSize(0.020);
7623                      text->SetTextAngle(90);                      text->SetTextAngle(90);
7624                      text->DrawLatex(var.xxvc-0.22*var.sfx,var.yxvc+0.080*var.sfy,"Tracker");                                  text->DrawLatex(var.xxvc-0.22*var.sfx,var.yxvc+0.080*var.sfy,"Tracker");            
# Line 6585  void ShowEvent(TString filename="help", Line 7626  void ShowEvent(TString filename="help",
7626                      text->SetTextSize(0.01);                      text->SetTextSize(0.01);
7627                      text->SetTextAngle(0);                      text->SetTextAngle(0);
7628                  };                  };
7629                  if  ( ND ){                  if  ( var.ND ){
7630                      text->SetTextSize(0.020);                      text->SetTextSize(0.020);
7631                      text->SetTextAngle(90);                      //              text->SetTextAngle(90);
7632                      text->DrawLatex(var.xxvc-0.22*var.sfx,var.yxvc-0.430*var.sfy,"ND");                              text->DrawLatex(var.xxvc-0.25*var.sfx,var.yxvc-0.530*var.sfy,"ND");        
7633                      text->DrawLatex(var.xyvc+0.22*var.sfx,var.yyvc-0.430*var.sfy,"ND");                              text->DrawLatex(var.xyvc+0.22*var.sfx,var.yyvc-0.530*var.sfy,"ND");        
7634                      text->SetTextSize(0.01);                      text->SetTextSize(0.01);
7635                      text->SetTextAngle(0);                      text->SetTextAngle(0);
7636                  };                  };
7637                  if  ( TOF ){                  if  ( var.TOF ){
7638                      text->SetTextSize(0.020);                      text->SetTextSize(0.020);
7639                      text->DrawLatex(var.xxvc-0.24*var.sfx,var.yxvc-0.130*var.sfy,"S3");                              text->DrawLatex(var.xxvc-0.24*var.sfx,var.yxvc-0.130*var.sfy,"S3");        
7640                      text->DrawLatex(var.xxvc-0.24*var.sfx,var.yxvc+0.350*var.sfy,"S2");                              text->DrawLatex(var.xxvc-0.24*var.sfx,var.yxvc+0.350*var.sfy,"S2");        
# Line 6603  void ShowEvent(TString filename="help", Line 7644  void ShowEvent(TString filename="help",
7644                      text->DrawLatex(var.xyvc+0.21*var.sfx,var.yyvc+0.653*var.sfy,"S1");                              text->DrawLatex(var.xyvc+0.21*var.sfx,var.yyvc+0.653*var.sfy,"S1");        
7645                      text->SetTextSize(0.01);                      text->SetTextSize(0.01);
7646                  };                  };
7647                  if  ( S4 ){                  if  ( var.S4 ){
7648                      text->SetTextSize(0.020);                      text->SetTextSize(0.020);
7649                      text->DrawLatex(var.xxvc-0.24*var.sfx,var.yxvc-0.350*var.sfy,"S4");                              text->DrawLatex(var.xxvc-0.28*var.sfx,var.yxvc-0.350*var.sfy,"S4");        
7650                      text->DrawLatex(var.xyvc+0.21*var.sfx,var.yyvc-0.350*var.sfy,"S4");                              text->DrawLatex(var.xyvc+0.25*var.sfx,var.yyvc-0.350*var.sfy,"S4");        
7651                      text->SetTextSize(0.01);                      text->SetTextSize(0.01);
7652                  };                  };
7653                  if ( !INFOS ){                  if ( !var.INFOS ){
7654                      text->SetTextSize(0.01);                      text->SetTextSize(0.01);
7655                      text->DrawLatex(var.xxvc-0.025*var.sfx,var.yxvc-0.520*var.sfy,"CPU SIDE");                      text->DrawLatex(var.xxvc-0.025*var.sfx,var.yxvc-0.520*var.sfy,"CPU SIDE");
7656                      text->SetTextAngle(90);                      text->SetTextAngle(90);
7657                      text->DrawLatex(var.xyvc+0.17*var.sfx,var.yyvc+0.075*var.sfy,"CPU SIDE");                      text->DrawLatex(var.xyvc+0.17*var.sfx,var.yyvc+0.075*var.sfy,"CPU SIDE");
7658                      text->DrawLatex(var.xyvc-0.17*var.sfx,var.yyvc+0.075*var.sfy,"VME SIDE");                      text->DrawLatex(var.xyvc-0.17*var.sfx,var.yyvc+0.075*var.sfy,"VME SIDE");
7659                      if ( AC || TRK ){                      if ( var.AC ){
7660                          text->SetTextAngle(90);                          text->SetTextAngle(90);
7661                          text->DrawLatex(var.xcat-0.235*var.sfx,var.ycat-0.025*var.sfy,"VME SIDE");                          text->DrawLatex(var.xcat-0.235*var.sfx,var.ycat-0.025*var.sfy,"VME SIDE");
7662                          text->DrawLatex(var.xcat+0.235*var.sfx,var.ycat-0.025*var.sfy,"CPU SIDE");                          text->DrawLatex(var.xcat+0.235*var.sfx,var.ycat-0.025*var.sfy,"CPU SIDE");
# Line 6650  void ShowEvent(TString filename="help", Line 7691  void ShowEvent(TString filename="help",
7691                      //                      //
7692                      text->SetTextSize(0.015);                            text->SetTextSize(0.015);      
7693                      text->SetTextFont(2);                      text->SetTextFont(2);
7694                      DrawX(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,0.005,var);                      DrawX(var.xxvc-0.25*var.sfx,var.yxvc-0.328*var.sfy,0.005,var); //508
7695                      text->SetTextFont(32);                      text->SetTextFont(32);
7696                      text->DrawLatex(var.xxvc-0.246*var.sfx,var.yxvc-0.508*var.sfy,"y");                      text->DrawLatex(var.xxvc-0.266*var.sfx,var.yxvc-0.328*var.sfy,"y");
7697                      TArrow *arr;                      TArrow *arr;
7698                      arr = new TArrow(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,var.xxvc-0.19*var.sfx,var.yxvc-0.508*var.sfy);                      arr = new TArrow(var.xxvc-0.25*var.sfx,var.yxvc-0.328*var.sfy,var.xxvc-0.21*var.sfx,var.yxvc-0.328*var.sfy);
7699                      arr->SetArrowSize(0.005);                      arr->SetArrowSize(0.005);
7700                      arr->Draw();                      arr->Draw();
7701                      text->DrawLatex(var.xxvc-0.19*var.sfx,var.yxvc-0.515*var.sfy,"x");                      text->DrawLatex(var.xxvc-0.21*var.sfx,var.yxvc-0.335*var.sfy,"x");
7702                      arr = new TArrow(var.xxvc-0.23*var.sfx,var.yxvc-0.508*var.sfy,var.xxvc-0.23*var.sfx,var.yxvc-0.468*var.sfy);                      arr = new TArrow(var.xxvc-0.25*var.sfx,var.yxvc-0.328*var.sfy,var.xxvc-0.25*var.sfx,var.yxvc-0.288*var.sfy);
7703                      arr->SetArrowSize(0.005);                      arr->SetArrowSize(0.005);
7704                      arr->Draw();                      arr->Draw();
7705                      text->DrawLatex(var.xxvc-0.246*var.sfx,var.yxvc-0.468*var.sfy,"z");                      text->DrawLatex(var.xxvc-0.266*var.sfx,var.yxvc-0.288*var.sfy,"z");
7706                      //                      //
7707                      text->SetTextSize(0.015);                            text->SetTextSize(0.015);      
7708                      text->SetTextFont(2);                      text->SetTextFont(2);
7709                      DrawX(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,0.005,var);                      DrawX(var.xyvc+0.24*var.sfx,var.yyvc-0.328*var.sfy,0.005,var);
7710                      text->SetTextFont(32);                      text->SetTextFont(32);
7711                      text->DrawLatex(var.xyvc+0.23*var.sfx,var.yyvc-0.508*var.sfy,"x");                      text->DrawLatex(var.xyvc+0.25*var.sfx,var.yyvc-0.328*var.sfy,"x");
7712                      arr = new TArrow(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,var.xyvc+0.18*var.sfx,var.yyvc-0.508*var.sfy);                      arr = new TArrow(var.xyvc+0.24*var.sfx,var.yyvc-0.328*var.sfy,var.xyvc+0.2*var.sfx,var.yyvc-0.328*var.sfy);
7713                      arr->SetArrowSize(0.005);                      arr->SetArrowSize(0.005);
7714                      arr->Draw();                      arr->Draw();
7715                      text->DrawLatex(var.xyvc+0.17*var.sfx,var.yyvc-0.511*var.sfy,"y");                      text->DrawLatex(var.xyvc+0.19*var.sfx,var.yyvc-0.335*var.sfy,"y");
7716                      arr = new TArrow(var.xyvc+0.22*var.sfx,var.yyvc-0.508*var.sfy,var.xyvc+0.22*var.sfx,var.yyvc-0.468*var.sfy);                      arr = new TArrow(var.xyvc+0.24*var.sfx,var.yyvc-0.328*var.sfy,var.xyvc+0.24*var.sfx,var.yyvc-0.288*var.sfy);
7717                      arr->SetArrowSize(0.005);                      arr->SetArrowSize(0.005);
7718                      arr->Draw();                      arr->Draw();
7719                      text->DrawLatex(var.xyvc+0.23*var.sfx,var.yyvc-0.468*var.sfy,"z");                            text->DrawLatex(var.xyvc+0.25*var.sfx,var.yyvc-0.288*var.sfy,"z");      
7720                      text->SetTextSize(0.01);                      text->SetTextSize(0.01);
7721                  };                  };
7722              };              };
# Line 6714  void ShowEvent(TString filename="help", Line 7755  void ShowEvent(TString filename="help",
7755              // Interact with user: do you want to continue, go backward, exit or print the figure?              // Interact with user: do you want to continue, go backward, exit or print the figure?
7756              //              //
7757              printf("\n\n\n\n\n\n\n\n\n\n");              printf("\n\n\n\n\n\n\n\n\n\n");
7758              if ( i != maxevent ) {              si = i;
7759                  si = i;              doflag = 1;
7760                  doflag = 1;              jumpto = 0;
7761                  jumpto = 0;              var.i = i;
7762                  TString figty = "ev";              var.doflag = doflag;
7763                  var.i = i;              var.jumpto = jumpto;
7764                  var.doflag = doflag;              var.nevents = nevents;
7765                  var.jumpto = jumpto;              var.lastevno = lastevno;
7766                  var.nevents = nevents;              var.firstevno = firstevno;
7767                  var.lastevno = lastevno;              //
7768                  var.firstevno = firstevno;              char *bw;
7769                  Int_t ifout = WhatToDoEV(var,file,outDir,figty,*figure);              if ( var.bw ){
7770                  i = var.i;                  bw = "_bw";
                 doflag = var.doflag;  
                 jumpto = var.jumpto;  
                 if ( i != si ) OOBT = 1000000000;  
                 if ( maxevent < i+1 ) {  
                     maxevent = nevents;  
                     printf("WARNING: you have chosen an event number out of the starting range.\n         Range extended to %i\n\n",maxevent);            
                 };  
                 if ( ifout ) goto theend;  
7771              } else {              } else {
7772                  printf("\n\n");                      bw = "";
7773                };
7774                TString filenm = file;
7775                const string fil = (const char*)filenm;
7776                Int_t posiz = fil.find("dw_");
7777                if ( posiz == -1 ) posiz = fil.find("DW_");
7778                Int_t posiz2 = posiz+13;
7779                TString file2;
7780                stringcopy(file2,filenm,posiz,posiz2);
7781                const char *figrec = file2;
7782                const char *outdir = outDir;
7783                stringstream figsave;    
7784                figsave.str("");
7785                figsave << outdir << "/";
7786                figsave << figrec;
7787                figsave << "_ev_";
7788                figsave << (var.i+1);
7789                figsave << bw;
7790                var.svas=figsave.str().c_str();
7791                pamgui->upgrnamfi();
7792                //
7793                var.jumpen = false;
7794                //      njumpen = 0;
7795                Int_t ifout = 0;
7796                figure->SetEditable(kFALSE);
7797                while( !var.goon && !var.refresh && !var.restart ) {
7798                    if ( !gROOT->GetListOfCanvases()->FindObject(figure)  ) {
7799                        pamgui->Close();
7800                        gSystem->ProcessEvents();
7801                        gApplication->Terminate(0);
7802                    };
7803                    gSystem->ProcessEvents();
7804                };
7805                figure->SetEditable(kTRUE);
7806                var.goon = false;
7807                if ( var.refresh || var.restart ){
7808                    headerFile->Close();
7809                    triggerFile->Close();
7810                    if ( trackerFile ) trackerFile->Close();
7811                    if ( trackerFile2 ) trackerFile2->Close();
7812                    if ( caloFile )caloFile->Close();
7813                    if ( neutronFile ) neutronFile->Close();
7814                    if ( acFile ) acFile->Close();
7815                    if ( tofFile ) tofFile->Close();
7816                    if ( tofFileL1 ) tofFileL1->Close();
7817                    if ( s4File ) s4File->Close();                            
7818                    if ( trackhead ) trackhead->Close();                              
7819                    if ( trackcalibFile1 ) trackcalibFile1->Close();                                  
7820                    if ( trackcalibFile2 ) trackcalibFile2->Close();                                  
7821                    if ( trackerFile2b ) trackerFile2b->Close();                              
7822                    if ( var.refresh ) goto refresh;
7823                    if ( var.restart ){
7824                        filename = var.thefilename.Data();
7825                        pamgui->Close();
7826                        goto restart;
7827                    };
7828                };
7829                //
7830                i = var.i;
7831                doflag = var.doflag;
7832                jumpto = var.jumpto;
7833                if ( i != si ) OOBT = 1000000000;
7834                if ( maxevent < i ) {
7835                    maxevent = nevents;
7836                    printf("WARNING: you have chosen an event number out of the starting range.\n         Range extended to %i\n\n",maxevent);              
7837              };              };
7838                if ( ifout ) goto theend;
7839          };          };
7840          if ( doflag == 2 && i == 0 ) {          if ( doflag == 2 && i == 0 ) {
7841              printf("\n WARNING: Cannot go backward! Going forward. \n");              printf("\n WARNING: Cannot go backward! Going forward. \n");
# Line 6745  void ShowEvent(TString filename="help", Line 7843  void ShowEvent(TString filename="help",
7843          };          };
7844          if ( doflag == 2 && i>0 ) i--;          if ( doflag == 2 && i>0 ) i--;
7845          if ( doflag == 1 ) i++;          if ( doflag == 1 ) i++;
7846            if ( var.doflag == 3 ) selection = 0;
7847          //          //
7848          // if in selection mode, print out a event progress bar:          // if in selection mode, print out a event progress bar:
7849          //          //

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

  ViewVC Help
Powered by ViewVC 1.1.23