GammaWare  Head Version for release 0.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
GLSPlayer.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2004-2006 by Olivier Stezowski & Christian Finck *
3  * stezow(AT)ipnl.in2p3.fr, cfinck(AT)ires.in2p3.fr *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
20 
23 #include <Riostream.h>
24 
25 #ifndef Gw_GLSPlayer
26 #include "GLSPlayer.h"
27 #endif
28 
29 #ifndef Gw_CSManager
30 #include "CSManager.h"
31 #endif
32 
33 #ifndef Gw_CubicFilter
34 #include "CubicFilter.h"
35 #endif
36 
37 #ifndef ROOT_TArrow
38 #include "TArrow.h"
39 #endif
40 
41 #ifndef ROOT_TCanvas
42 #include "TCanvas.h"
43 #endif
44 
45 #ifndef ROOT_TClass
46 #include "TClass.h"
47 #endif
48 
49 #ifndef ROOT_TContextMenu
50 #include "TContextMenu.h"
51 #endif
52 
53 #ifndef ROOT_TFile
54 #include "TFile.h"
55 #endif
56 
57 #ifndef ROOT_TFolder
58 #include "TFolder.h"
59 #endif
60 
61 #ifndef ROOT_TGaxis
62 #include "TGaxis.h"
63 #endif
64 
65 #ifndef ROOT_TGraphErrors
66 #include "TGraphErrors.h"
67 #endif
68 
69 #ifndef ROOT_TH1F
70 #include "TH1F.h"
71 #endif
72 
73 #ifndef ROOT_TAxis
74 #include "TAxis.h"
75 #endif
76 
77 #ifndef ROOT_TLatex
78 #include "TLatex.h"
79 #endif
80 
81 #ifndef ROOT_TList
82 #include "TList.h"
83 #endif
84 
85 #ifndef ROOT_TMath
86 #include "TMath.h"
87 #endif
88 
89 #ifndef ROOT_TObjString
90 #include "TObjString.h"
91 #endif
92 
93 #ifndef ROOT_TROOT
94 #include "TROOT.h"
95 #endif
96 
97 #ifndef ROOT_TSystem
98 #include "TSystem.h"
99 #endif
100 
101 #ifndef ROOT_TVirtualPad
102 #include "TVirtualPad.h"
103 #endif
104 
105 
106 #ifndef Gw_BaseNucleus
107 #include "BaseNucleus.h"
108 #endif
109 
110 #ifndef Gw_Cascade
111 #include "Cascade.h"
112 #endif
113 
114 #ifndef Gw_GSPlayer
115 #include "GSPlayer.h"
116 #endif
117 
118 #ifndef Gw_LevelScheme
119 #include "LevelScheme.h"
120 #endif
121 
122 #ifndef Gw_Peak1D
123 #include "Peak1D.h"
124 #endif
125 
126 
127 using namespace Gw;
128 
129 //__________________________________________________________
131  BaseLSPlayer(levelScheme),
132  fCSManager(new CSManager(Form("%s_%s", "CSManager", levelScheme->GetName()),
133  Form("%s %s", "CS Manager for", levelScheme->GetName())))
134 {
135  fLog.GetProcessName() = "GLSPlayer";
136  SetName("GLSPlayer");
137 
138  fPathtoSaveLS = "./";
139 
140  //Default Constructor
141 }
142 
143 //__________________________________________________________
145 {
146  // default destructor
147  delete fCSManager;
148 }
149 
150 //__________________________________________________________
151 void GLSPlayer::Draw(Option_t *opt)
152 {
153  TString option(opt);
154  option.ToLower();
155 
156  TSeqCollection* listCanvas = gROOT->GetListOfCanvases();
157 
158  TString name(GetName());
159  TCanvas* canvas = 0x0;
160  TIter next(listCanvas);
161  while ( (canvas = (TCanvas*)next()) ) {
162  if ( name.CompareTo(canvas->GetName()) == 0 ) {
163  break;
164  }
165  }
166 
167  // create default canvas if not existing
168  if (!canvas) {
169  canvas = gROOT->MakeDefCanvas();
170  canvas->SetName(GetName());
171  canvas->SetTitle(GetName());
172  Connect(canvas);
173  } else {
174  if ( !canvas->HasConnection("ProcessedEvent(Int_t, Int_t, Int_t, TObject*)") ) // should not be the case
175  Connect();
176  }
177 
178  if ( option.Contains("new") ) {
179  Double_t xmin = GetDefaultSize()[0];
180  Double_t xmax = GetDefaultSize()[1];
181  Double_t ymin = GetDefaultSize()[2];
182  Double_t ymax = GetDefaultSize()[3];
183 
184  TVirtualPad* pad = TVirtualPad::Pad();
185  pad->cd();
186 
187  pad->Range(GetXRmin(xmin, xmax), GetYRmin(ymin, ymax),
188  GetXRmax(xmin, xmax), GetYRmax(ymin, ymax));
189 
191  fAxis->SetX1(BaseLSPlayer::GetXAxis(xmin, xmax));
192  fAxis->SetX2(BaseLSPlayer::GetXAxis(xmin, xmax));
193  fAxis->SetY1(0.0); fAxis->SetY2(ymax);
194  fAxis->SetWmin(0.0);
195  fAxis->SetWmax(ymax);
196  fAxis->Draw();
197  AppendPad();
198  return;
199  }
200 
201  BaseLSPlayer::Draw(opt);
202 }
203 
204 //__________________________________________________________
205 void GLSPlayer::AddGroundLevel(Int_t z, Int_t a, Option_t* opt, Float_t energy, Float_t errEnergy)
206 {
207  // add ground state level
208  fLog.SetProcessMethod( "AddGroundLevel(Int_t, Int_t, Option_t*, Float_t, Float_t )");
209 
210  const Char_t* nucleus = BaseNucleus::WhichSymbol(z,a);
211  fLevelScheme->SetName(nucleus);
212  TObjString* sNucleus = new TObjString(nucleus);
213  fNucleiList->Add(sNucleus);
214  Int_t nbNuclei = fNucleiList->GetEntries();
215 
217  TString spin(opt), parity("+"); Ssiz_t parity_offset = spin.Length();
218  if ( !spin.Contains("+") ) {
219  if ( !spin.Contains("-") ) {
220  parity = "?";
221  }
222  else {
223  parity = "-";
224  parity_offset = spin.Index("-");
225  }
226  }
227  else{
228  parity = "+";
229  parity_offset = spin.Index("+");
230  }
231  spin.Remove(parity_offset);
232 
233  Double_t xRmin = 0;
234  Double_t xRmax = 0;
235  Double_t yRmin = 0;
236  Double_t yRmax = 0;
237  Double_t width = GetDefaultWidth();
238 
239  static Double_t deltaR = 0;
240  static Double_t delta = 0;
241 
242  TVirtualPad* pad = TVirtualPad::Pad();
243  if (!pad) {
244  fLog << error << "Pad not existing" << dolog;
245  return;
246  }
247 
248  pad->cd();
249 
250  static Double_t xmin = 0;
251  static Double_t xmax = 0;
252 
253  pad->GetRange(xRmin, yRmin, xRmax, yRmax);
254 
255  if (nbNuclei == 1) {
256  xmin = GetXMin(xRmin, xRmax);
257  xmax = GetXMax(xRmin, xRmax);
258  deltaR = xRmax - xRmin;
259  delta = xmax - xmin;
260  } else {
261  xRmax += deltaR;
262  pad->Range(xRmin, yRmin, xRmax, yRmax);
263  fAxis->SetLabelSize(0.03);
264  fLog << warning << "Adding new ground level to the same level scheme" << nline;
265  }
266 
267  // nuclear level
268  NuclearLevel* level = new NuclearLevel();
269  level->GetEnergy().Set(energy); level->GetEnergy().SetError(errEnergy);
270  level->SetX1((xmax+xmin-width)/2+delta*(nbNuclei-1)); level->SetX2((xmax+xmin+width)/2+delta*(nbNuclei-1));
271  level->SetY1(energy); level->SetY2(energy);
272  level->SetLineWidth(3);
273  level->SetLineColor( Level::GetDefaultColor(level->GetDefaultColor()) );
274 
275  level->GetSpin().Set(spin.Data());
276  if (parity.Contains("+")) {
277  level->GetParity().Set(Parity::kPlus);
278  }
279  if (parity.Contains("-")) {
280  level->GetParity().Set(Parity::kMinus);
281  }
282  if (parity.Contains("?")) {
284  }
285 
286  level->SetDefaultLabels();
287  TList* levels = &GetLevelList();
288  levels->Add(level);
289 
290  TLatex* label = &GetNameLatex();
291  label->SetNDC();
292  label->SetX(0.55); label->SetY(0.95);
293 
294  AppendPad();
295  fLevelScheme->Draw("ground");
296 
297  fLog << dolog;
298 }
299 
300 //__________________________________________________________
301 void GLSPlayer::SetLevelVisLabel(const char* s)
302 {
303  for (Int_t i = 0; i < GetLevelList().GetSize(); ++i) {
304  Level* level = static_cast<Level*>(GetLevelList().At(i));
305  level->SetVisLabel(s);
306  }
307 }
308 
309 //__________________________________________________________
311 {
313  for (Int_t i = 0; i < GetLevelList().GetSize(); ++i) {
314  Level* level = static_cast<Level*>(GetLevelList().At(i));
315  level->SetDefaultLabels();
316  }
317 }
318 
319 //__________________________________________________________
321 {
323  for (Int_t i = 0; i < GetLevelList().GetSize(); ++i) {
324  Level* level = static_cast<Level*>(GetLevelList().At(i));
325  level->SetDefaultLabels();
326  }
327 }
328 
329 //__________________________________________________________
330 void GLSPlayer::SetLinkVisLabel(const char* s)
331 {
332  for (Int_t i = 0; i < GetLinkList().GetSize(); ++i) {
333  Link* link = static_cast<Link*>(GetLinkList().At(i));
334  link->SetVisLabel(s);
335  }
336 }
337 
338 //__________________________________________________________
340 {
342  for (Int_t i = 0; i < GetLinkList().GetSize(); ++i) {
343  Link* link = static_cast<Link*>(GetLinkList().At(i));
344  link->SetDefaultLabels();
345  }
346 }
347 
348 //__________________________________________________________
349 void GLSPlayer::SetLinkLabelsColor(Color_t color)
350 {
352  for (Int_t i = 0; i < GetLinkList().GetSize(); ++i) {
353  Link* link = static_cast<Link*>(GetLinkList().At(i));
354  link->SetDefaultLabels();
355  }
356 }
357 
358 //__________________________________________________________
359 void GLSPlayer::WriteLS(const char* nameLS, const char *path, Int_t write)
360 {
361  fLog.SetProcessMethod("WriteLS(const char*,const char *,Int_t)");
362 
363  TString nameFile(path);
364  //
365  if ( nameFile.EndsWith(".root") ) { // means it saves LS into a root file
366  }
367  else {
368  if ( nameFile.Sizeof() && !nameFile.EndsWith("/") )
369  nameFile += "/";
370  nameFile += nameLS; nameFile += ".root";
371  }
372 
373  TSeqCollection* list = gROOT->GetListOfFiles();
374  TFile* file = 0x0;
375  if ( (file = (TFile*)list->FindObject(nameFile.Data())) ) {
376  file->ReOpen("UPDATE");
377  }
378  if (file == 0x0)
379  file = new TFile(nameFile.Data(), "UPDATE");
380  fLevelScheme->Write(nameLS, write);
381  file->Close();
382 
383  delete file;
384 
385  fLog << info << Form("Write level scheme in %s file", nameFile.Data()) << dolog;
386 }
387 
388 //__________________________________________________________
390 {
391  fLog.SetProcessMethod("DeleteLink()");
392 
393  Link* cLink = GetCurrentLink();
394  if (cLink == 0x0) {
395  fLog << error << "No selected link available" << dolog;
396  return;
397  }
398 
399  // remove from list
400  GetLinkList().Remove(cLink);
401 
402  // remove from cascade if any
403  TList* listCascade = fLevelScheme->FindCLinkInCascade();
404  for (Int_t i = 0; i < listCascade->GetEntries(); ++i) {
405  Cascade* cas = static_cast<Cascade*>( listCascade->At(i) );
406  cas->Remove(cLink);
407  }
408  delete listCascade;
409 
410  // delete from pad
411  TVirtualPad* pad = TVirtualPad::Pad();
412  if (!pad) {
413  fLog << error << "Pb with deleting link from pad" << dolog;
414  return;
415  }
416  TSeqCollection* list = pad->GetListOfPrimitives();
417  list->Remove(cLink);
418 
419  fLog << dolog;
420 }
421 
422 //__________________________________________________________
424 {
425  fLog.SetProcessMethod("DeleteLevel()");
426 
427  Level* cLevel = GetCurrentLevel();
428  if (cLevel == 0x0) {
429  fLog << error << "No selected level available" << dolog;
430  return;
431  }
432 
433  // remove from LS list
434  GetLevelList().Remove(cLevel);
435 
436  // remove from pad
437  TVirtualPad* pad = TVirtualPad::Pad();
438  if (pad) {
439  TSeqCollection* list = pad->GetListOfPrimitives();
440  list->Remove(cLevel);
441  }
442 
443  delete cLevel;
444 
445  fLog << dolog;
446 }
447 
448 //__________________________________________________________
450 {
451  fLog.SetProcessMethod("AddLinkToCascade()");
452 
453  Link* cLink = GetCurrentLink();
454  if (cLink == 0x0) {
455  fLog << error << "No selected link available" << dolog;
456  return;
457  }
458 
459  Cascade* cCas = GetCurrentCascade();
460  if (cCas->FindObject(cLink)){
461  fLog << error << "link already belongs to cascade" << dolog;
462  return;
463  }
464 
465  if (cCas == 0x0) {
466  fLog << error << "No selected cascade available" << dolog;
467  return;
468  }
469 
470  cCas->Add(cLink);
471 }
472 
473 //__________________________________________________________
475 {
476  for (Int_t i = 0; i < GetLinkList().GetSize(); ++i) {
477  Link* link = static_cast<Link*>(GetLinkList().At(i));
478  if (!link->IsSelected()) {
479  link->SetFillColor(fCColorSelectedLink);
480  link->Selected();
481  }
482  }
483 
484  for (Int_t i = 0; i < GetLevelList().GetSize(); ++i) {
485  Level* level = static_cast<Level*>(GetLevelList().At(i));
486  if (!level->IsSelected()) {
487  level->SetLineColor( Level::GetDefaultColor(Level::kSelected) );
488  level->Selected();
489  }
490  }
491 
492  for (Int_t i = 0; i < GetCascadeList().GetSize(); ++i) {
493  Cascade* cas = static_cast<Cascade*>(GetCascadeList().At(i));
494  if (!cas->IsSelected()) {
496  cas->Selected();
497  }
498  }
499 }
500 
501 //__________________________________________________________
503 {
504  for (Int_t i = 0; i < GetLinkList().GetSize(); ++i) {
505  Link* link = static_cast<Link*>(GetLinkList().At(i));
506  if (link->IsSelected()) {
507  link->SetFillColor( Link::GetDefaultColor() );
508  link->DeSelected();
509  }
510  }
511 
512  fLevelScheme->SetCLink(0x0);
513  for (Int_t i = 0; i < GetLevelList().GetSize(); ++i) {
514  Level* level = static_cast<Level*>(GetLevelList().At(i));
515  if (level->IsSelected()) {
516  level->SetLineColor( Level::GetDefaultColor(level->GetDefaultColor()) );
517  level->DeSelected();
518  }
519  }
520 
521  fLevelScheme->SetCLevel(0x0);
522  for (Int_t i = 0; i < GetCascadeList().GetSize(); ++i) {
523  Cascade* cas = static_cast<Cascade*>(GetCascadeList().At(i));
524  if (cas->IsSelected()) {
526  cas->DeSelected();
527  }
528  }
530  fSelectedLinks->Clear();
531  fSelectedLevels->Clear();
532  fSelectedCascades->Clear();
533 }
534 
535 //__________________________________________________________
536 void GLSPlayer::RegisterCS(const Char_t* fileName, const Char_t* name)
537 {
538  fLog.SetProcessMethod("RegisterCS(const Char_t*, const Char_t* )");
539 
540  TFile* fileIn = new TFile(fileName, "READ");
541  if (fileIn == 0x0){
542  fLog << error << "File not found" << dolog;
543  return;
544  }
545 
546  CorrelatedSpace* coor = (Gw::CorrelatedSpace*)fileIn->Get(name);
547  if (coor == 0x0) {
548  fLog << error << "Correlated space not found in file" << dolog;
549  return;
550  }
551 
552  fCSManager->Register(coor);
553 }
554 
555 //__________________________________________________________
557 {
558  TMethod* m = Class()->GetMethod("DoProject", "");
559 
560  if (m != 0x0 && fContextMenu != 0x0)
561  fContextMenu->Action(this, m);
562  else {
563  fLog.SetProcessMethod("PopupDoProject()");
564  fLog << error << "Cannot Popup DoProject dialog box" << dolog;
565  }
566 }
567 
568 //__________________________________________________________
570 {
571  TMethod* m = Class()->GetMethod("AddLink", "");
572 
573  if (m != 0x0 && fContextMenu != 0x0)
574  fContextMenu->Action(this, m);
575  else {
576  fLog.SetProcessMethod("PopupAddLink()");
577  fLog << error << "Cannot Popup AddLink dialog box" << dolog;
578  }
579 }
580 
581 //__________________________________________________________
583 {
584  TMethod* m = Class()->GetMethod("AddLevel", "");
585 
586  if (m != 0x0 && fContextMenu != 0x0)
587  fContextMenu->Action(this, m);
588  else {
589  fLog.SetProcessMethod("PopupAddLevel()");
590  fLog << error << "Cannot Popup AddLevel dialog box" << dolog;
591  }
592 }
593 
594 //__________________________________________________________
596 {
597  TMethod* m = Class()->GetMethod("AddFirstLevel", "");
598 
599  if (m != 0x0 && fContextMenu != 0x0)
600  fContextMenu->Action(this, m);
601  else {
602  fLog.SetProcessMethod("PopupAddFirstLevel()");
603  fLog << error << "Cannot Popup AddFirstLevel dialog box" << dolog;
604  }
605 }
606 
607 //__________________________________________________________
609 {
610  TMethod* m = Class()->GetMethod("AddGroundLevel", "");
611 
612  if (m != 0x0 && fContextMenu != 0x0)
613  fContextMenu->Action(this, m);
614  else {
615  fLog.SetProcessMethod("AddGroundLevel()");
616  fLog << error << "Cannot Popup AddGroundLevel dialog box" << dolog;
617  }
618 }
619 
620 //__________________________________________________________
622 {
623  TMethod* m = Class()->GetMethod("AddArrow", "");
624 
625  if (m != 0x0 && fContextMenu != 0x0)
626  fContextMenu->Action(this, m);
627  else {
628  fLog.SetProcessMethod("PopupAddArrow()");
629  fLog << error << "Cannot Popup AddArrow dialog box" << dolog;
630  }
631 }
632 
633 //__________________________________________________________
635 {
636  TMethod* m = Class()->GetMethod("AddText", "");
637 
638  if (m != 0x0 && fContextMenu != 0x0)
639  fContextMenu->Action(this, m);
640  else {
641  fLog.SetProcessMethod("PopupAddText()");
642  fLog << error << "Cannot Popup AddText dialog box" << dolog;
643  }
644 }
645 
646 //__________________________________________________________
648 {
649  TMethod* m = Class()->GetMethodWithPrototype("WriteLS", "const char*,const char *,Int_t");
650 
651  if (m != 0x0 && fContextMenu != 0x0)
652  fContextMenu->Action(this, m);
653  else {
654  fLog.SetProcessMethod("PopupWriteLS()");
655  fLog << error << "Cannot Popup WriteLS dialog box" << dolog;
656  }
657 }
658 
659 //__________________________________________________________
660 void GLSPlayer::AddLink(Float_t strength, Float_t errStrength, Float_t energy, Float_t errEnergy, const Char_t* mult)
661 {
662  fLog.SetProcessMethod("AddLink()");
663 
664  if ( (GetCurrentLink() != 0 || GetCurrentLevel() != 0) && fSelectedLevels->GetEntries() != 2) {
665  AddLinkOnTop(strength, energy, errStrength, errEnergy, mult);
666  } else if (fSelectedLevels->GetEntries() == 2 && GetCurrentLink() == 0) {
667  InsertLink(strength, errStrength, mult);
668  } else {
669  fLog << error << "Ambigous selection, please re-select objects" << nline;
670  }
671  fLog << dolog;
672 }
673 
674 //__________________________________________________________
675 void GLSPlayer::AddArrow(Option_t* opt)
676 {
677  fLog.SetProcessMethod("AddArrow()");
678 
679  // first collect selected levels
680  if (fSelectedLevels->GetEntries() != 2) {
681  fLog << error << "Wrong number of selected levels" << dolog;
682  return;
683  }
684 
685  NuclearLevel* level1 = dynamic_cast<NuclearLevel*> ( fSelectedLevels->At(0) );
686  NuclearLevel* level2 = dynamic_cast<NuclearLevel*> ( fSelectedLevels->At(1) );
687 
688  if (level1 == 0x0 || level2 == 0x0) {
689  fLog << error << "Selected levels are not nuclear levels" << dolog;
690  return;
691  }
692 
693  //deselect levels
694  level1->SetLineColor( Level::GetDefaultColor(GetCurrentLevel()->GetDefaultColor()) );
695  level1->DeSelected();
696  level2->SetLineColor( Level::GetDefaultColor(GetCurrentLevel()->GetDefaultColor()) );
697  level2->DeSelected();
698 
699  NuclearLevel* levelI = 0x0;
700  NuclearLevel* levelF = 0x0;
701 
702  Float_t x1I, x2I;
703  Float_t x1F, x2F;
704  Float_t yI, yF;
705 
706  // re-ordered initial - final
707  if (level1->GetEnergy().Get() > level2->GetEnergy().Get()) {
708  levelI = level1;
709  levelF = level2;
710  } else {
711  levelI = level2;
712  levelF = level1;
713  }
714 
715  x1I = levelI->GetX1();
716  x2I = levelI->GetX2();
717  yI = levelI->GetY1();
718 
719  x1F = levelF->GetX1();
720  x2F = levelF->GetX2();
721  yF = levelF->GetY1();
722 
723  Float_t offsetX = (x2I - x1I)*0.02;
724  Float_t offsetY = (yI - yF)*0.01;
725 
726  //TArrow::SetDefaultArrowSize(0.01);
727  if (x1I > x2F) {
728  TArrow* arrow = fLevelScheme->NewArrow(x1I-offsetX, yI-offsetY, x2F+offsetX, yF+offsetY);
729  arrow->SetLineWidth(levelI->GetLineWidth());
730  arrow->SetArrowSize(0.02);
731  arrow->SetOption(opt);
732  }
733 
734  if (x1F > x2I) {
735  TArrow* arrow = fLevelScheme->NewArrow(x2I+offsetX, yI-offsetY, x1F-offsetX, yF+offsetY);
736  arrow->SetLineWidth(levelI->GetLineWidth());
737  arrow->SetArrowSize(0.02);
738  arrow->SetOption(opt);
739  }
740 
741  fSelectedLevels->Clear();
742 
743  fLevelScheme->Draw();
744 }
745 
746 //__________________________________________________________
747 void GLSPlayer::AddText(const Char_t* msg)
748 {
749  TLatex* text = fLevelScheme->NewText(msg);
750  text->SetX(gPad->AbsPixeltoX(GetLastX())); text->SetY(gPad->AbsPixeltoY(GetLastY()));
751  text->SetTextSize(Cascade::GetDefaultLabelSize());
752  fLevelScheme->Draw();
753 }
754 
755 //__________________________________________________________
757 {
758  AddLinkOnTop(strength.Get(), energy.Get(), strength.GetError(), energy.GetError());
759 }
760 
761 //__________________________________________________________
762 void GLSPlayer::AddLinkBetween(Float_t strength, Float_t energy, Float_t errStrength, Float_t errEnergy)
763 {
764  fLog.SetProcessMethod("AddLinkBetween()");
765 
766  if (GetCurrentLink() == 0) {
767  fLog << error << "No selected link available" << dolog;
768  return;
769  }
770 
771  Float_t x1c, x2c;
772  Float_t y1IL, y2IL, y1c, y2c;
773 
774  y1IL = y2IL = 0.;
775 
776  x1c = GetCurrentLink()->GetIL()->GetX1();
777  y1c = GetCurrentLink()->GetIL()->GetY1();
778  x2c = GetCurrentLink()->GetIL()->GetX2();
779  y2c = GetCurrentLink()->GetIL()->GetY2();
780 
781  y1IL = y1c + energy;
782  y2IL = y2c + energy;
783 
784  // creation of new link and level
785  GammaLink* newLink = new GammaLink();
786  newLink->GetStrength().Set(strength, errStrength);
787  newLink->SetFillColor( Link::GetDefaultColor() );
788  newLink->GetEnergy().Set(energy, errEnergy);
789  NuclearLevel* newLevel = new NuclearLevel();
790  newLevel->SetLineColor( Level::GetDefaultColor(newLevel->GetDefaultColor()) );
791  newLevel->SetX1(x1c); newLevel->SetX2(x2c);
792  newLevel->SetY1(y1IL); newLevel->SetY2(y2IL);
793 
794  newLink->SetFL(GetCurrentLink()->GetIL());
795  newLink->SetIL(newLevel);
796  newLink->SetPoints();
797 
798  GetLinkList().Add(newLink);
799  GetLevelList().Add(newLevel);
800 
801  TList* list = fLevelScheme->FindCLinkInCascade();
802 
803  // move all links/levels above the current link
804  for (Int_t i = 0; i < list->GetEntries(); ++i) {
805  Cascade* cas = static_cast<Cascade*> ( list->At(i) );
806  Int_t index = cas->IndexOf(GetCurrentLink())+1;
807 
808  for (Int_t j = index; j < cas->GetEntries(); ++j) {
809  Link* link = static_cast<Link*> ( cas->At(j) );
810  Level* levelI = link->GetIL();
811 
812  if (j == index)
813  link->SetFL(newLevel);
814 
815  levelI->SetY1(levelI->GetY1()+energy); levelI->SetY2(levelI->GetY2()+energy);
816  link->SetPoints();
817  }
818  cas->AddAfter(GetCurrentLink(), newLink);
819  }
820 
821  fLevelScheme->Draw();
822 }
823 
824 //__________________________________________________________
825 void GLSPlayer::AddLinkOnTop(Float_t strength, Float_t energy, Float_t errStrength, Float_t errEnergy, const Char_t* mult)
826 {
827  fLog.SetProcessMethod("AddLinkOnTop()");
828 
829  if (GetCurrentLink() == 0 && GetCurrentLevel() == 0) {
830  fLog << error << "No selected link/level available" << dolog;
831  return;
832  }
833 
834  TString em(mult);
835  em.ToUpper();
836 
837  if (em.Length() > 2 && em.Length() < 1) {
838  fLog << warning << "Multipolarity of the link not readable set to E1" << dolog;
839  em = "E1";
840  }
841 
842  Float_t x1c, x2c;
843  Float_t y1IL, y2IL, y/*1c, y2c*/;
844  Float_t errY1IL = 0;
845  y1IL = y2IL = 0.;
846 
847  if ( GetCurrentLink() ) {
848 
850 
851  x1c = level->GetX1();
852 // y1c = level->GetY1();
853  x2c = level->GetX2();
854 // y2c = level->GetY2();
855  y = level->GetEnergy().GetValue();
856 
857  // deselect current link
858  GammaLink* link = (GammaLink*)fSelectedLinks->Last();
859 
860  if(link == 0x0)
861  {
862  fLog << warning << "bad link selection" << dolog;
863  return;
864  }
865 
866  errY1IL = link->GetEnergy().GetError();
867  GetCurrentLink()->SetFillColor( Link::GetDefaultColor() );
869  fSelectedLinks->Remove(GetCurrentLink());
870  }
871  else
872  {
874  if(level==0x0) return;
875 
876  x1c = GetCurrentLevel()->GetX1();
877 // y1c = GetCurrentLevel()->GetY1();
878  x2c = GetCurrentLevel()->GetX2();
879 // y2c = GetCurrentLevel()->GetY2();
880  y = level->GetEnergy().GetValue();
881 
882 // // deselect current level
883 // NuclearLevel* level = (NuclearLevel*)fSelectedLevels->Last();
884 // if(level==0x0) return;
885 
886  errY1IL = level->GetEnergy().GetError();
887  GetCurrentLevel()->SetLineColor( Level::GetDefaultColor(GetCurrentLevel()->GetDefaultColor()) );
889  fSelectedLevels->Remove( GetCurrentLevel());
890  }
891 
892  y1IL = y/*1c*/ + energy;
893  y2IL = y/*2c*/ + energy;
894 
895  // creation of new link and level
896  GammaLink* newLink = new GammaLink();
897  newLink->GetStrength().Set(strength, errStrength);
898  newLink->SetFillColor( Link::GetDefaultColor() );
899  newLink->GetEnergy().Set(energy, errEnergy);
900  newLink->SetEM(em.Data());
901 
902  NuclearLevel* newLevel = new NuclearLevel();
903  newLevel->SetLineColor( Level::GetDefaultColor(newLevel->GetDefaultColor()) );
904  newLevel->SetX1(x1c); newLevel->SetX2(x2c);
905  newLevel->SetY1(y1IL); newLevel->SetY2(y2IL);
906  errY1IL = TMath::Sqrt(errY1IL*errY1IL + errEnergy*errEnergy);
907  newLevel->GetEnergy().Set(y1IL, errY1IL); //right computing of error
908 
909  if ( GetCurrentLink() )
910  newLink->SetFL(GetCurrentLink()->GetIL());
911  else
912  newLink->SetFL(GetCurrentLevel());
913 
914  // set spin/parity
915  NuclearLevel* levelF = static_cast<NuclearLevel*> ( newLink->GetFL() );
916  Spin spin = levelF->GetSpin();
917  spin += newLink->GetLambda();
918  newLevel->GetSpin().Set(spin.GetString());
919 
920  if ( (newLink->IsE() && levelF->GetParity().IsParity(Parity::kPlus)) ||
921  (newLink->IsM() && levelF->GetParity().IsParity(Parity::kMinus)) )
922  newLevel->GetParity().Set(Parity::kPlus);
923  else
924  newLevel->GetParity().Set(Parity::kMinus);
925  newLevel->SetDefaultLabels();
926 
927  newLink->SetIL(newLevel);
928  newLink->SetPoints();
929 
930  newLink->SetDefaultLabels();
931 
932  GetLinkList().Add(newLink);
933  GetLevelList().Add(newLevel);
934 
935  fLevelScheme->Draw();
936 
937  fLog << dolog;
938 }
939 
940 //__________________________________________________________
942 {
943  fLog.SetProcessMethod("CheckPolarity(GammaLink& )");
944 
945  NuclearLevel* level1 = dynamic_cast<NuclearLevel*> ( fSelectedLevels->At(0) );
946  NuclearLevel* level2 = dynamic_cast<NuclearLevel*> ( fSelectedLevels->At(1) );
947 
948  if (level1 == 0x0 || level2 == 0x0) {
949  fLog << error << "Selected levels are not nuclear levels" << dolog;
950  return false;
951  }
952 
953  Float_t spin1 = level1->GetSpin().Get(); Parity parity1 = level1->GetParity();
954  Float_t spin2 = level2->GetSpin().Get(); Parity parity2 = level2->GetParity();
955 
956  Parity p(parity1);
957  p *= parity2;
958  Bool_t isOk = true;
959 
960  // default values
961  char em;
962  UShort_t lambda = link.GetLambda();
963  if (link.IsE())
964  em = 'E';
965  else if (link.IsM())
966  em = 'M';
967  else
968  em = '-';
969 
970  // change parity if necessary
971  if (em == 'E' && p.IsParity(Parity::kMinus)) {
972  em = 'M';
973  isOk = false;
974  }
975 
976  if (em == 'M' && p.IsParity(Parity::kPlus)) {
977  em = 'E';
978  isOk = false;
979  }
980 
981  // take lowest spin if selection rule not valid
982  if (link.GetLambda() > spin1+spin2 || link.GetLambda() < TMath::Abs(spin1-spin2)) {
983  lambda = UShort_t(TMath::Abs(spin1-spin2)+0.5);
984  isOk = false;
985  }
986 
987  // change EM if necessary
988  if (!isOk)
989  link.SetEM(Form("%c%d", em, lambda));
990 
991  fLog << dolog;
992 
993  return isOk;
994 }
995 
996 //__________________________________________________________
998 {
999  InsertLink(strength.Get(), strength.GetError());
1000 }
1001 
1002 //__________________________________________________________
1003 void GLSPlayer::InsertLink(Float_t strength, Float_t errStrength, const Char_t* mult)
1004 {
1005  // add link from two selected levels
1006 
1007  fLog.SetProcessMethod("InsertLink(Float_t, Float_t, const Char_t* )");
1008 
1009  // first collect selected levels
1010  if (fSelectedLevels->GetEntries() != 2) {
1011  fLog << error << "Wrong number of selected levels" << dolog;
1012  return;
1013  }
1014 
1015  NuclearLevel* level1 = dynamic_cast<NuclearLevel*> ( fSelectedLevels->At(0) );
1016  NuclearLevel* level2 = dynamic_cast<NuclearLevel*> ( fSelectedLevels->At(1) );
1017 
1018  if (level1 == 0x0 || level2 == 0x0) {
1019  fLog << error << "Selected levels are not nuclear levels" << dolog;
1020  return;
1021  }
1022 
1023  //deselect levels
1024  level1->SetLineColor( Level::GetDefaultColor(GetCurrentLevel()->GetDefaultColor()) );
1025  level1->DeSelected();
1026  level2->SetLineColor( Level::GetDefaultColor(GetCurrentLevel()->GetDefaultColor()) );
1027  level2->DeSelected();
1028 
1029  NuclearLevel* levelI = 0x0;
1030  NuclearLevel* levelF = 0x0;
1031 
1032  Float_t energyI = 0;
1033  Float_t energyF = 0;
1034 
1035  // re-ordered initial - final
1036  if (level1->GetEnergy().Get() > level2->GetEnergy().Get()) {
1037  levelI = level1;
1038  levelF = level2;
1039  } else {
1040  levelI = level2;
1041  levelF = level1;
1042  }
1043 
1044  energyI = levelI->GetEnergy().Get();
1045  energyF = levelF->GetEnergy().Get();
1046 
1047  // compute energy
1048  Float_t energy = energyI - energyF;
1049  Float_t errEnergy = TMath::Sqrt( (levelI->GetEnergy().GetError()/energyI)*(levelI->GetEnergy().GetError()/energyI) +
1050  (levelF->GetEnergy().GetError()/energyF)*(levelF->GetEnergy().GetError()/energyF) );
1051 
1052  // new gamma link
1053  GammaLink* newLink = new GammaLink();
1054  newLink->GetStrength().Set(strength, errStrength);
1055  newLink->SetFillColor( Link::GetDefaultColor() );
1056  newLink->GetEnergy().Set(energy, errEnergy);
1057  newLink->SetEM(mult);
1058 
1059  if (!CheckPolarity(*newLink)) {
1060  if (newLink->IsE()) {
1061  fLog << warning << Form("Selection rule not valided, change multi-polarity from %s to E%d", mult, newLink->GetLambda()) << nline;
1062  } else {
1063  fLog << warning << Form("Selection rule not valided, change multi-polarity from %s to M%d", mult, newLink->GetLambda()) << nline;
1064  }
1065  }
1066 
1067  newLink->SetFL(levelF);
1068  newLink->SetIL(levelI);
1069  newLink->SetPoints();
1070  newLink->SetDefaultLabels();
1071  GetLinkList().Add(newLink);
1072 
1073  fSelectedLevels->Clear();
1074 
1075  fLevelScheme->Draw();
1076 
1077  fLog << dolog;
1078 }
1079 
1080 //__________________________________________________________
1081 void GLSPlayer::MoveCascade(Float_t mv, Bool_t lastLevel)
1082 {
1083  fLog.SetProcessMethod("MoveCascade(Float_t, Bool_t )");
1084 
1085  Cascade* cCas = GetCurrentCascade();
1086  if (cCas == 0x0) {
1087  fLog << error << "No cascade selected" << dolog;
1088  return;
1089  }
1090 
1091  Int_t idxFirstLink = 0;
1092  Double_t min = 9999999.;
1093  Link* link = 0x0;
1094  Level* level = 0x0;
1095 
1096  for (Int_t j = 0; j < cCas->GetEntries(); ++j) {
1097  link = static_cast<Link*> ( cCas->At(j) );
1098  // deselect selected links
1099  link->SetFillColor( Link::GetDefaultColor() );
1100  link->DeSelected();
1101  level = link->GetIL();
1102 
1103  if (level->GetY1() < min) {
1104  min = level->GetY1();
1105  idxFirstLink = j;
1106  }
1107 
1108  if (level){
1109  level->SetX1(level->GetX1()+mv);
1110  level->SetX2(level->GetX2()+mv);
1111  if ( level->HasExtraLine() ) {
1112  TLine* extra = &level->GetExtraLine();
1113  if (extra->GetX1() == level->GetX2()-mv) {
1114  extra->SetX1(extra->GetX1()+mv);
1115  }
1116  if (extra->GetX2() == level->GetX1()-mv) {
1117  extra->SetX2(extra->GetX2()+mv);
1118  }
1119  }
1120  }
1121  link->SetPoints();
1122  }
1123 
1124  if (lastLevel) {
1125  // last final level
1126  link = static_cast<Link*> ( cCas->At(idxFirstLink) );
1127  level = link->GetFL();
1128  if (level){
1129  level->SetX1(level->GetX1()+mv);
1130  level->SetX2(level->GetX2()+mv);
1131  }
1132  link->SetPoints();
1133  }
1134 
1135  // move labels
1136  TLatex* name = &cCas->GetLatex();
1137  name->SetX(name->GetX()+mv);
1138 
1139  // clear selection
1141  cCas->DeSelected();
1142  fSelectedCascades->Clear();
1143  fLevelScheme->SetCCascade(0x0);
1144  Draw();
1145 }
1146 
1147 //__________________________________________________________
1148 void GLSPlayer::AddLevel(Float_t energy, Float_t errEnergy, const Char_t* dJp)
1149 {
1150  fLog.SetProcessMethod("AddLevel(Float_t, Float_t, const Char_t* )");
1151 
1152  if (GetCurrentLevel() == 0) {
1153  fLog << error << "No level selected" << dolog;
1154  return;
1155  }
1156 
1158  TString spin(dJp), parity("+"); Ssiz_t parity_offset = spin.Length();
1159  if ( !spin.Contains("+") ) {
1160  if ( !spin.Contains("-") ) {
1161  parity = "?";
1162  }
1163  else {
1164  parity = "-";
1165  parity_offset = spin.Index("-");
1166  }
1167  }
1168  else{
1169  parity = "+";
1170  parity_offset = spin.Index("+");
1171  }
1172  spin.Remove(parity_offset);
1173 
1174  TList* levels = &GetLevelList();
1175 
1176  Float_t x1 = GetCurrentLevel()->GetX1();
1177  Float_t x2 = GetCurrentLevel()->GetX2();
1178 
1179  GetCurrentLevel()->SetLineColor( Level::GetDefaultColor(GetCurrentLevel()->GetDefaultColor()) );
1181  fSelectedLevels->Remove( GetCurrentLevel());
1182 
1183  // create new level
1184  NuclearLevel* level = new NuclearLevel();
1185  level->GetEnergy().Set(energy); level->GetEnergy().SetError(errEnergy);
1186  level->SetX1(x1); level->SetX2(x2);
1187  level->SetY1(energy); level->SetY2(energy);
1188  level->SetLineWidth(2); level->SetLineColor( Level::GetDefaultColor(level->GetDefaultColor()) );
1189 
1190  //set spin/aprity
1191  level->GetSpin().Set(spin.Data());
1192  if (parity.Contains("+")) {
1193  level->GetParity().Set(Parity::kPlus);
1194  }
1195  if (parity.Contains("-")) {
1196  level->GetParity().Set(Parity::kMinus);
1197  }
1198  if (parity.Contains("?")) {
1200  }
1201 
1202  level->SetDefaultLabels();
1203  levels->Add(level);
1204 
1205  fLevelScheme->Draw();
1206 
1207  fLog << dolog;
1208 }
1209 
1210 //__________________________________________________________
1211 void GLSPlayer::AddFirstLevel(Float_t energy, Float_t errEnergy,
1212  const Char_t* jp, Option_t* opt)
1213 {
1214  fLog.SetProcessMethod("AddFirstLevel(Float_t, Float_t, Option_t* )");
1215 
1216  TString option(opt);
1217 
1218  if (GetCurrentLink() == 0 && GetCurrentLevel() == 0) {
1219  fLog << error << "No link/level selected" << dolog;
1220  return;
1221  }
1222 
1224  TString spin(jp), parity("+"); Ssiz_t parity_offset = spin.Length();
1225  if ( !spin.Contains("+") ) {
1226  if ( !spin.Contains("-") ) {
1227  parity = "?";
1228  }
1229  else {
1230  parity = "-";
1231  parity_offset = spin.Index("-");
1232  }
1233  }
1234  else{
1235  parity = "+";
1236  parity_offset = spin.Index("+");
1237  }
1238  spin.Remove(parity_offset);
1239 
1240  TList* levels = &GetLevelList();
1241 
1242  Float_t limit = 0.;
1243  Float_t width = GetDefaultWidth();
1244  Float_t x1 = 0.;
1245  Float_t x2 = 0.;
1246 
1247  // define position of current cascade
1248  Float_t min;
1249  Float_t max;
1250 
1251  if (GetCurrentLink() != 0x0) {
1252  Link* link = static_cast<Link*> ( fSelectedLinks->First() );
1253  if (!link) {
1254  fLog << warning << "No Link selected" << dolog;
1255  return;
1256  }
1257  min = link->GetFL()->GetX1();
1258  max = link->GetFL()->GetX2();
1259 
1260  for (Int_t j = 0; j < fSelectedLinks->GetEntries(); ++j) {
1261  Link* link = static_cast<Link*> ( fSelectedLinks->At(j) );
1262  // deselect selected links
1263  link->SetFillColor( Link::GetDefaultColor() );
1264  link->DeSelected();
1265  Level* level = link->GetIL();
1266  if (level->GetX2() > max) max = level->GetX2();
1267  if (level->GetX1() <= min) min = level->GetX1();
1268  }
1269  } else {
1270  Level* level = static_cast<Level*> ( fSelectedLevels->First() );
1271  if (!level) {
1272  fLog << warning << "No Level selected" << dolog;
1273  return;
1274  }
1275  min = level->GetX1();
1276  max = level->GetX2();
1277 
1278  for (Int_t j = 0; j < fSelectedLevels->GetEntries(); ++j) {
1279  Level* level = static_cast<Level*> ( fSelectedLevels->At(j) );
1280  // deselect selected levels
1281  level->SetLineColor( Level::GetDefaultColor( level->GetDefaultColor()) );
1282  level->DeSelected();
1283  if (level->GetX2() > max) max = level->GetX2();
1284  if (level->GetX1() <= min) min = level->GetX1();
1285  }
1286  }
1287 
1288  fLevelScheme->SetCLink(0x0);
1289  fLevelScheme->SetCLevel(0x0);
1290 
1291  fSelectedLinks->Clear();
1292  fSelectedLevels->Clear();
1293 
1294  if (option.Contains("left")) {
1295  limit = min;
1296  x1 = limit-1.5*width;
1297  x2 = limit-0.5*width;
1298  }
1299  if (option.Contains("right")) {
1300  limit = max;
1301  x1 = limit+0.5*width;
1302  x2 = limit+1.5*width;
1303  }
1304  if ( option.Contains("+") ) {
1305  TList* links = &GetLinkList();
1306  TList* cascades = &GetCascadeList();
1307 
1308  x1 = limit-width/2.;
1309  x2 = limit+width/2.;
1310 
1311  // move levels at right/left
1312  for (Int_t i = 0; i < levels->GetEntries(); ++i) {
1313  Level* level = static_cast<Level*> ( levels->At(i) );
1314  if (option.Contains("left")) {
1315  if ( level->GetX1() >= limit) {
1316  level->SetX1(level->GetX1()+width);
1317  level->SetX2(level->GetX2()+width);
1318  }
1319  } else {
1320  if ( level->GetX1() <= limit) {
1321  level->SetX1(level->GetX1()-width);
1322  level->SetX2(level->GetX2()-width);
1323  }
1324  }
1325  }
1326 
1327  // move links at right/left
1328  for (Int_t i = 0; i < links->GetEntries(); ++i) {
1329  Link* link = static_cast<Link*> ( links->At(i) );
1330  if (option.Contains("left")) {
1331  if ( link->GetX()[1] >= limit) {
1332  link->SetPoints();
1333  }
1334  } else {
1335  if ( link->GetX()[1] <= limit) {
1336  link->SetPoints();
1337  }
1338  }
1339  }
1340 
1341  // move cascades labels at right/left
1342  for (Int_t i = 0; i < cascades->GetEntries(); ++i) {
1343  Cascade* cas1 = static_cast<Cascade*> ( cascades->At(i) );
1344  TLatex* name = &cas1->GetLatex();
1345  if (option.Contains("left")) {
1346  if ( name->GetX() >= limit) {
1347  name->SetX(name->GetX()+width);
1348  }
1349  } else {
1350  if ( name->GetX() <= limit)
1351  name->SetX(name->GetX()-width);
1352  }
1353  }
1354  }
1355 
1356  // create new level
1357  NuclearLevel* level = new NuclearLevel();
1358  level->GetEnergy().Set(energy); level->GetEnergy().SetError(errEnergy);
1359  level->SetX1(x1); level->SetX2(x2);
1360  level->SetY1(energy); level->SetY2(energy);
1361  level->SetLineWidth(2); level->SetLineColor( Level::GetDefaultColor(level->GetDefaultColor()) );
1362 
1363  //set spin/aprity
1364  level->GetSpin().Set(spin.Data());
1365  if (parity.Contains("+")) {
1366  level->GetParity().Set(Parity::kPlus);
1367  }
1368  if (parity.Contains("-")) {
1369  level->GetParity().Set(Parity::kMinus);
1370  }
1371  if (parity.Contains("?")) {
1373  }
1374 
1375  level->SetDefaultLabels();
1376  levels->Add(level);
1377 
1378  fLevelScheme->Draw();
1379 
1380  fLog << dolog;
1381 }
1382 
1383 //__________________________________________________________
1384 void GLSPlayer::MakeCascade(const Char_t* label)
1385 {
1386  fLog.SetProcessMethod("MakeCascade(Option_t* )");
1387 
1388  if (fSelectedLinks->GetEntries() == 0) {
1389  fLog << error << "No link selected" << dolog;
1390  return;
1391  }
1392 
1393  TList* cascades = &GetCascadeList();
1394 
1395  // create new cascade and add to list
1396  Cascade* cas = new Cascade();
1397  cas->SetName(label);
1398  cascades->Add(cas);
1399 
1400  // Double_t xmin = 0.;
1401  // Double_t xmax = 0.;
1402  // Double_t ymin = 0.;
1403  // Double_t ymax = 0.;
1404  Double_t xRmin, xRmax, yRmin, yRmax;
1405 
1406 
1407  // define position of current cascade
1408  Float_t moy = 0.;
1409  fLevelScheme->SetCLink(0x0);
1410  for (Int_t j = 0; j < fSelectedLinks->GetEntries(); ++j) {
1411  Link* link = static_cast<Link*> ( fSelectedLinks->At(j) );
1412  // deselect selected links
1413  link->SetFillColor( Link::GetDefaultColor() );
1414  link->DeSelected();
1415  Level* level = link->GetIL();
1416  moy += (level->GetX1() + level->GetX2())/2.;
1417  cas->Add(link);
1418  }
1419 
1420  moy /= fSelectedLinks->GetEntries();
1421 
1422  fSelectedLinks->Clear();
1423 
1424 
1425  if ( TVirtualPad::Pad() != 0 ) { // in principle, gpad exists
1426  TVirtualPad::Pad()->GetRange(xRmin, yRmin, xRmax, yRmax);
1427  // xmin = GetXMin(xRmin, xRmax);
1428  // xmax = GetXMax(xRmin, xRmax);
1429 
1430  // ymin = GetYMin(yRmin, yRmax);
1431  // ymax = GetYMax(yRmin, yRmax);
1432  }
1433 
1434  TLatex* name = &cas->GetLatex();
1435 
1436  name->SetX(moy); name->SetY(fPositionLabels);
1437 
1438  cascades->Draw();
1439 }
1440 
1441 //__________________________________________________________
1443 {
1444  // Align selected links respect to first selected link
1445 
1446  fLog.SetProcessMethod("AlignLinks()");
1447 
1448  Int_t nLinks = fSelectedLinks->GetEntries();
1449 
1450  if (nLinks == 0) {
1451  fLog << warning << "No specific link selected" << dolog;
1452  return;
1453  }
1454 
1455  GammaLink* link = 0x0;
1456  link = static_cast<GammaLink*> ( fSelectedLinks->At(0) );
1457  Float_t x1i = link->GetX()[1];
1458  Float_t x2i = link->GetX()[5];
1459 
1460 
1461  for (Int_t i = 0; i < nLinks; ++i) {
1462  link = static_cast<GammaLink*> ( fSelectedLinks->At(i) );
1463  link->SetPoints(x1i,x2i);
1464  link->SetFillColor( Link::GetDefaultColor() );
1465  link->DeSelected();
1466  }
1467 
1468  fSelectedLinks->Clear();
1469 }
1470 
1471 //__________________________________________________________
1473 {
1474  fLog.SetProcessMethod("AlignLevels()");
1475 
1476  Int_t nLevels = fSelectedLevels->GetEntries();
1477 
1478  if (nLevels == 0) {
1479  fLog << warning << "No specific level selected" << dolog;
1480  return;
1481  }
1482 
1483  NuclearLevel* level = 0x0;
1484 
1485  level = static_cast<NuclearLevel*> ( fSelectedLevels->At(0) );
1486 
1487  Float_t x1i = level->GetX1();
1488  Float_t x2i = level->GetX2();
1489 
1490  for (Int_t i = 1; i < nLevels; ++i) {
1491  level = static_cast<NuclearLevel*> ( fSelectedLevels->At(i) );
1492  level->SetX1(x1i);
1493  level->SetX2(x2i);
1494  }
1495 
1496  for (Int_t i = 0; i < nLevels; ++i) {
1497  level = static_cast<NuclearLevel*> ( fSelectedLevels->At(i) );
1498  level->SetLineColor( Level::GetDefaultColor( level->GetDefaultColor()) );
1499  level->DeSelected();
1500  }
1501 
1502  fSelectedLevels->Clear();
1503 }
1504 
1505 //__________________________________________________________
1507 {
1508  fLog.SetProcessMethod("AlignCascade()");
1509 
1510  Cascade* cas = GetCurrentCascade();
1511 
1512  if (cas == 0x0) {
1513  fLog << warning << "No cascade selected" << dolog;
1514  return;
1515  }
1516 
1517  if (cas->IsSelected()) {
1519  cas->DeSelected();
1520  }
1521 
1522  Int_t nEntries = cas->GetEntries();
1523 
1524  GammaLink* link = 0x0;
1525 
1526  // respect to this first gamma
1527  link = static_cast<GammaLink*> ( cas->At(0) );
1528 
1529  Float_t x1i = link->GetFL()->GetX1();
1530  Float_t x2i = link->GetFL()->GetX2();
1531 
1532  for (Int_t i = 0; i < nEntries; ++i) {
1533  link = static_cast<GammaLink*> ( cas->At(i) );
1534  link->GetFL()->SetX1(x1i);
1535  link->GetFL()->SetX2(x2i);
1536  }
1537 
1538  // IL of last gamma
1539  link = static_cast<GammaLink*> ( cas->At(nEntries-1) );
1540  link->GetIL()->SetX1(x1i);
1541  link->GetIL()->SetX2(x2i);
1542 
1543  // set points
1544  for (Int_t i = 0; i < nEntries; ++i) {
1545  link = static_cast<GammaLink*> ( cas->At(i) );
1546  link->SetPoints();
1547  if (link->IsSelected()) {
1548  link->SetFillColor( Link::GetDefaultColor() );
1549  link->DeSelected();
1550  }
1551  }
1552 
1553  fLevelScheme->SetCCascade(0x0);
1554 }
1555 
1556 //__________________________________________________________
1557 void GLSPlayer::DoJ1(Option_t* opt) const
1558 {
1559  fLog.SetProcessMethod("DoJ1()");
1560 
1561  const Cascade* cas = fLevelScheme->GetCCascade();
1562  if (cas == 0) {
1563  fLog << error << "Current cascade not selected" << dolog;
1564  return;
1565  }
1566 
1567  TGraphErrors* gr = cas->DoJ1();
1568 
1569  if (gr == 0x0) {
1570  fLog << error << "Graph is empty" << dolog;
1571  return;
1572  }
1573 
1574  TString name("cObservables");
1575  TCanvas* hJ1 = (TCanvas*)gROOT->FindObject(name);
1576 
1577  if (hJ1)
1578  hJ1->cd();
1579  else {
1580  hJ1 = new TCanvas(name,"J1",10,10,700,500);
1581  hJ1->Draw();
1582  }
1583 
1584  Int_t nPoints = gr->GetN();
1585  Double_t* y = gr->GetY();
1586  Double_t* dy = gr->GetEY();
1587 
1588  // switch to MeV
1589  for (Int_t i = 0; i < nPoints; ++i) {
1590  y[i] *= 1000;
1591  dy[i] *= 1000;
1592  }
1593 
1594  Float_t max = TMath::MaxElement(nPoints, y)*1.2;
1595  Float_t min = TMath::MinElement(nPoints, y)*0.8;
1596 
1597  gr->SetMarkerColor(2);
1598  gr->SetMarkerStyle(20);
1599  gr->SetTitle(cas->GetName());
1600  gr->SetMinimum(min);
1601  gr->SetMaximum(max);
1602 
1603  gr->GetHistogram()->SetYTitle("#Jgothic^{(1)} (#hbar^{2}/MeV)");
1604  gr->GetHistogram()->SetXTitle("#omega (keV)");
1605 
1606  gr->GetHistogram()->SetTitleOffset(1.0,"X");
1607  gr->GetHistogram()->SetTitleOffset(1.1,"Y");
1608  gr->GetHistogram()->SetTitleSize(0.04,"X");
1609  gr->GetHistogram()->SetTitleSize(0.04,"Y");
1610  gr->GetXaxis()->SetLabelSize(0.04);
1611  gr->GetXaxis()->SetLabelOffset(0.01);
1612  gr->GetXaxis()->SetLabelSize(0.04);
1613  gr->GetYaxis()->SetLabelOffset(0.01);
1614 
1615  gr->Draw(opt);
1616 }
1617 
1618 //__________________________________________________________
1619 void GLSPlayer::DoJ2(Option_t* opt) const
1620 {
1621  fLog.SetProcessMethod("DoJ2()");
1622 
1623  const Cascade* cas = fLevelScheme->GetCCascade();
1624  if (cas == 0) {
1625  fLog << error << "Current cascade not selected" << dolog;
1626  return;
1627  }
1628 
1629  TGraphErrors* gr = cas->DoJ2();
1630 
1631  if (gr == 0x0) {
1632  fLog << error << "Graph is empty" << dolog;
1633  return;
1634  }
1635 
1636  TString name("cObservables");
1637  TCanvas* hJ2 = (TCanvas*)gROOT->FindObject(name);
1638 
1639  if (hJ2)
1640  hJ2->cd();
1641  else {
1642  hJ2 = new TCanvas(name,"J2",10,10,700,500);
1643  hJ2->Draw();
1644  }
1645 
1646  Int_t nPoints = gr->GetN();
1647  Double_t* y = gr->GetY();
1648  Double_t* dy = gr->GetEY();
1649 
1650  // switch to MeV
1651  for (Int_t i = 0; i < nPoints; ++i) {
1652  y[i] *= 1000;
1653  dy[i] *= 1000;
1654  }
1655 
1656  Float_t max = TMath::MaxElement(nPoints, y)*1.2;
1657  Float_t min = TMath::MinElement(nPoints, y)*0.8;
1658 
1659  gr->SetMarkerColor(2);
1660  gr->SetMarkerStyle(20);
1661  gr->SetTitle(cas->GetName());
1662  gr->SetMinimum(min);
1663  gr->SetMaximum(max);
1664 
1665  gr->GetHistogram()->SetYTitle("#Jgothic^{(2)} (#hbar^{2}/MeV)");
1666  gr->GetHistogram()->SetXTitle("#omega (keV)");
1667 
1668  gr->GetHistogram()->SetTitleOffset(1.0,"X");
1669  gr->GetHistogram()->SetTitleOffset(1.1,"Y");
1670  gr->GetHistogram()->SetTitleSize(0.04,"X");
1671  gr->GetHistogram()->SetTitleSize(0.04,"Y");
1672  gr->GetXaxis()->SetLabelSize(0.04);
1673  gr->GetXaxis()->SetLabelOffset(0.01);
1674  gr->GetXaxis()->SetLabelSize(0.04);
1675  gr->GetYaxis()->SetLabelOffset(0.01);
1676 
1677  gr->Draw(opt);
1678 }
1679 
1680 //__________________________________________________________
1681 void GLSPlayer::ShowGate(Option_t* /*opt*/)
1682 {
1683  fLog.SetProcessMethod("ShowGate(Option_t* )");
1684 
1685  // collect link
1686  CollectLinks();
1687  Int_t nLinks = fSelectedLinks->GetEntries();
1688 
1689  if (!nLinks) {
1690  fLog << error << "No Link selected" << dolog;
1691  return;
1692  }
1693 
1694  // find last drawn histo
1695  TVirtualPad* pad = 0x0;
1696 
1697  TObject* obj = 0x0;
1698 
1699  Int_t entries = fCSManager->GetRegCSList()->GetEntries();
1700  TVirtualPad* cpad = 0x0;
1701 
1702  for (Int_t i = 0; i < entries; ++i) {
1703 
1704  cpad = fCSManager->GetProjTotPad(i);
1705 
1706  TIter next(cpad->GetListOfPrimitives());
1707  while ( (obj = next()) ) {
1708  if ( obj->InheritsFrom("TH1") )
1709  pad = cpad;
1710  }
1711 
1712  if ( !pad ) {
1713  fLog << error << "Pad not existing" << dolog;
1714  return;
1715  }
1716 
1717  pad->cd();
1718 
1719  // draw gate with peak creator
1721 
1722  for (Int_t i = 0; i < nLinks; ++i) {
1723  GammaLink* link = static_cast<GammaLink*> ( fSelectedLinks->At(i) );
1724  Float_t energy = link->GetEnergy().Get();
1725  Peak1D* peak = static_cast<Peak1D*> (pc->CreatePeak(energy,"bg") );
1726  if (Peak1D::IsvalideGateColor(link->GetFillColor()) )
1727  peak->SetLineColorPeak(link->GetFillColor());
1728  peak->SetDrawAs(Peak1D::kGate);
1729  }
1730 
1731  pad->Modified();
1732  pad->Update();
1733  }
1734 }
1735 
1736 //__________________________________________________________
1737 void GLSPlayer::Project(Option_t* axis)
1738 {
1739  fCSManager->Project(axis);
1740 }
1741 
1742 //__________________________________________________________
1743 void GLSPlayer::DrawProj(Option_t* opt)
1744 {
1745  fCSManager->DrawProj(opt);
1746 }
1747 
1748 //__________________________________________________________
1749 void GLSPlayer::DrawProjTot(Option_t* opt)
1750 {
1751  fCSManager->DrawProjTot(opt);
1752 }
1753 
1754 //__________________________________________________________
1755 void GLSPlayer::DoProject(Option_t* axis, Option_t* gateName, Option_t* optFilter, Option_t* optDraw)
1756 {
1757  fCSManager->SetFilterBaseName(gateName);
1758  if (CollectGate(optFilter)) {
1759  Project(axis);
1760  DrawProj(optDraw);
1761  }
1762 }
1763 
1764 //__________________________________________________________
1765 Int_t GLSPlayer::CollectGate(Option_t* opt)
1766 {
1767  return fCSManager->CollectGate(opt);
1768 }
1769 
1770 //__________________________________________________________
1771 void GLSPlayer::SetLevelColorPalette(Color_t plus, Color_t minus, Color_t unknown, Color_t selected)
1772 {
1773  Color_t pal[] = {plus, minus, unknown, selected};
1774 
1776  Select();
1777  DeSelect();
1778 }
1779 
1780 //__________________________________________________________
1781 void GLSPlayer::SetLevelStylePalette(Color_t known, Color_t tentative)
1782 {
1783  Color_t pal[] = {known, tentative};
1784 
1787 }
1788 
1789 //__________________________________________________________
1791 {
1792  Link::SetDefaultColor(color);
1794 }
1795 
1796 //__________________________________________________________
1797 void GLSPlayer::SetCascadeColorPalette(Color_t def, Color_t selected)
1798 {
1799  Color_t pal[] = {def, selected};
1800 
1803 }
1804 
1805 //__________________________________________________________
1807 {
1808  for (Int_t i = 0; i < GetLinkList().GetSize(); ++i) {
1809  Link* link = static_cast<Link*>(GetLinkList().At(i));
1810  link->SetFillColor( Link::GetDefaultColor() );
1811  }
1812 
1813  for (Int_t i = 0; i < GetLevelList().GetSize(); ++i) {
1814  Level* level = static_cast<Level*>(GetLevelList().At(i));
1815  level->SetLineColor( Level::GetDefaultColor(level->GetDefaultColor()) );
1816  level->SetLineStyle( Level::GetDefaultStyle(level->GetDefaultStyle()) );
1817  }
1818 
1819  for (Int_t i = 0; i < GetCascadeList().GetSize(); ++i) {
1820  Cascade* cas = static_cast<Cascade*>(GetCascadeList().At(i));
1822  }
1823 }
1824 
A level Scheme.
Definition: LevelScheme.h:82
virtual void AddGroundLevel(Int_t z=66, Int_t a=152, Option_t *opt="0/1+", Float_t energy=0, Float_t errEnergy=1)
Add ground state level.
Definition: GLSPlayer.cpp:205
virtual Data_T GetError() const
return the error on the measured value
Definition: Measure.h:109
virtual void PopupAddArrow()
Popup AddArrow menu.
Definition: GLSPlayer.cpp:621
virtual void DeSelected()
unselected link
Definition: Level.h:207
TContextMenu * fContextMenu
Definition: BaseLSPlayer.h:301
static Color_t GetDefaultColor(EDefaultColor d)
Definition: Level.h:62
virtual void AlignLinks()
Align selected links on level posistions in X.
Definition: GLSPlayer.cpp:1442
void SetY2(Double_t y2)
Set Y2.
void SetCCascade(Cascade *cascade)
set current cascade
Definition: LevelScheme.h:198
virtual void Project(Option_t *axis="x")
Project with CSManger.
Definition: GLSPlayer.cpp:1737
static Style_t GetDefaultStyle(EDefaultStyle d)
Definition: Level.h:61
virtual TList * FindCLinkInCascade() const
Find the cascades that own the currengt link.
virtual void AddLink(Float_t strength=100, Float_t errStrength=1, Float_t energy=300, Float_t errEnergy=1, const Char_t *mult="E2")
Add link with selected link/level.
Definition: GLSPlayer.cpp:660
TGraphErrors * DoJ2() const
Compute J2.
Definition: Cascade.cpp:234
virtual void SetLineColorPeak(Color_t color)
Definition: Peak1D.cpp:1651
A cascade is a list of links.
Definition: Cascade.h:51
virtual Bool_t IsSelected()
return selection
Definition: Level.h:210
virtual void Set(Data_T data)
set the measure and its error (default err=0)
Definition: Measure.h:66
virtual void SetCascadeColorPalette(Color_t def, Color_t selected)
set color palette for level
Definition: GLSPlayer.cpp:1797
virtual void AddArrow(Option_t *opt="|>")
Add arrows to the LS between two selected levels.
Definition: GLSPlayer.cpp:675
void Set(Int_t n, Int_t d=1)
To set the spin.
Definition: Spin.cpp:124
virtual void AddLinkBetween(Float_t strength=10, Float_t energy=300, Float_t errStrength=1, Float_t errEnergy=1)
Add gamma link on the top of any selected link (under progress)
Definition: GLSPlayer.cpp:762
virtual void Draw(Option_t *opt="")
to draw this level scheme
virtual void DoProject(Option_t *axis="x", Option_t *gateName="Gate", Option_t *optFilter="reset", Option_t *optDraw="")
Make gate, project and drawing.
Definition: GLSPlayer.cpp:1755
LogMessage & error(LogMessage &)
static void SetStylePalette(Style_t *pal)
Definition: Level.h:66
static const char * WhichSymbol(Int_t Z)
return the symbol corresponding to Z if the nucleus is found in the correspondence table ...
LogMessage & warning(LogMessage &)
virtual Int_t GetLastY()
Definition: BaseLSPlayer.h:256
virtual const Char_t * GetName() const
to get only the cascade's name
Definition: Cascade.h:185
static void SetColorPalette(Color_t *pal)
Definition: Cascade.h:64
virtual void AlignCascade()
Align selected cascade's levels/links respect to the first selected in X.
Definition: GLSPlayer.cpp:1506
header file for all type of CSManager
virtual EDefaultStyle GetDefaultStyle()
return default style
Definition: Level.h:237
virtual void InsertLink(Measure< Float_t > strength)
insert a gamma link between two seleted levels
Definition: GLSPlayer.cpp:997
virtual void MakeCascade(const Char_t *label="New")
Make Cascade from selected links.
Definition: GLSPlayer.cpp:1384
void SetCLevel(Level *level)
set current level
Definition: LevelScheme.h:192
const Cascade * GetCCascade()
get current cascade
Definition: LevelScheme.h:201
TList & GetLevelList()
Definition: BaseLSPlayer.h:264
virtual void AddLinkToCascade()
Add existing link to cascade.
Definition: GLSPlayer.cpp:449
virtual void SetName(const Char_t *name)
set level scheme name.
Definition: LevelScheme.h:298
void Register(CorrelatedSpace *cs)
Add correlated space.
Definition: CSManager.cpp:327
Cascade * fSelectedLinks
Definition: BaseLSPlayer.h:285
static void SetDefaultLabelSize(Float_t size)
Definition: Level.h:68
Cascade * fSelectedLevels
pointer to the selected links
Definition: BaseLSPlayer.h:286
virtual EDefaultColor GetDefaultColor()
return default color
Definition: Level.h:240
virtual void SetLinkLabelsColor(Color_t color)
Set label color for levels.
Definition: GLSPlayer.cpp:349
A nuclear level.
Definition: NuclearLevel.h:66
Level * GetCurrentLevel()
Definition: BaseLSPlayer.h:270
Float_t Get() const
To get the spin as a float.
Definition: Spin.h:166
virtual void DeSelected()
unselected link
Definition: Cascade.h:151
virtual void DeSelect()
Deselect all objects.
Definition: GLSPlayer.cpp:502
LogMessage & nline(LogMessage &)
virtual void SetLevelStylePalette(Color_t known, Color_t tentative)
set style palette for level
Definition: GLSPlayer.cpp:1781
CSManager correlated spaces manager.
Definition: CSManager.h:53
A spin is defined by two integers: a numerator and a denominator.
Definition: Spin.h:46
virtual void AddFirstLevel(Float_t energy=300, Float_t errEnergy=1, const Char_t *jp="0+", Option_t *opt="left")
Add first level to a new cascade beside the current cascade.
Definition: GLSPlayer.cpp:1211
static PeakCreator * AddPeakCreator(TVirtualPad *pad=0x0)
add a peak creator to the given pad. Current pad if argument is 0x0
virtual void Selected()
Selected link.
Definition: Cascade.h:148
virtual void DrawProj(Option_t *opt="")
Draw projection.
Definition: GLSPlayer.cpp:1743
static Float_t GetXMin(Float_t xRmin, Float_t xRmax)
Get size from range.
Definition: BaseLSPlayer.h:152
virtual void PopupWriteLS()
Popup write LS menu.
Definition: GLSPlayer.cpp:647
Most of the methods relies on graphical approach for level scheme.
Definition: GLSPlayer.h:53
Color_t fCColorSelectedLink
Definition: BaseLSPlayer.h:302
This class discribes a specific quantum number: the parity.
Definition: Parity.h:46
virtual void MoveCascade(Float_t mv=200, Bool_t lastLevel=true)
Move all levels/link (extra line) from a casacde (excluded last level if lastLevel = false) ...
Definition: GLSPlayer.cpp:1081
static Float_t * GetDefaultSize()
Get default size.
Definition: BaseLSPlayer.h:136
virtual void SetLevelLabelsColor(Color_t color)
Set label color for levels.
Definition: GLSPlayer.cpp:320
TList * fNucleiList
pointer to the selected levels
Definition: BaseLSPlayer.h:290
TLatex & GetNameLatex()
Definition: BaseLSPlayer.h:267
virtual void Select()
Select all objects.
Definition: GLSPlayer.cpp:474
Cascade * GetCurrentCascade()
Definition: BaseLSPlayer.h:271
virtual void PopupAddGroundLevel()
Popup AddGroundLevel menu.
Definition: GLSPlayer.cpp:608
static Float_t GetYRmin(Float_t ymin, Float_t ymax)
Definition: BaseLSPlayer.h:162
virtual Bool_t CheckPolarity(GammaLink &link)
Check multi-polarity.
Definition: GLSPlayer.cpp:941
const TList * GetRegCSList()
Get registred CS list.
Definition: CSManager.h:102
virtual Data_T Get() const
get the value, can be overloaded
Definition: Data.h:70
TList & GetCascadeList()
Definition: BaseLSPlayer.h:266
virtual void PopupAddText()
Popup AddText menu.
Definition: GLSPlayer.cpp:634
void Project(Option_t *axis)
Project.
Definition: CSManager.cpp:414
LogMessage & info(LogMessage &)
manipulator to modify the LogMessage
virtual Int_t CollectGate(Option_t *opt="reset")
Collect gate on a histogram and add them to filter.
Definition: GLSPlayer.cpp:1765
Parity & GetParity()
get the parity and modify it if it is needed
Definition: NuclearLevel.h:87
virtual void SetLevelVisLabel(const char *s="0000")
Set vis label for levels.
Definition: GLSPlayer.cpp:301
TArrow * NewArrow(Float_t x1, Float_t y1, Float_t x2, Float_t y2)
create new arrow
virtual void AddText(const Char_t *msg)
Add text to the LS at last mouse position.
Definition: GLSPlayer.cpp:747
Measure< Float_t > & GetEnergy()
Definition: NuclearLevel.h:91
virtual void SetLinkDefaultColor(Color_t col)
set color palette for link
Definition: GLSPlayer.cpp:1790
virtual void ShowGate(Option_t *opt="gate")
Show gate on spectrum.
Definition: GLSPlayer.cpp:1681
static Float_t GetYRmax(Float_t ymin, Float_t ymax)
Definition: BaseLSPlayer.h:163
virtual void SetLinkVisLabel(const char *s="000")
Set vis label for levels.
Definition: GLSPlayer.cpp:330
virtual void Draw(Option_t *opt="")
To draw this level scheme.
Definition: GLSPlayer.cpp:151
static Float_t GetXRmax(Float_t xmin, Float_t xmax)
Definition: BaseLSPlayer.h:160
virtual Bool_t HasExtraLine()
check if extra line
Definition: Level.h:249
virtual void SetLevelColorPalette(Color_t plus, Color_t minus, Color_t unknown, Color_t selected)
set color palette for level
Definition: GLSPlayer.cpp:1771
LogMessage & dolog(LogMessage &)
virtual ~GLSPlayer()
Definition: GLSPlayer.cpp:144
const Char_t * GetString() const
To get the spin as a string.
Definition: Spin.cpp:55
virtual void PopupAddLevel()
Popup AddLevel menu.
Definition: GLSPlayer.cpp:582
bool IsParity(Parity::EParity) const
Definition: Parity.h:78
virtual void SetDefaultLabels()
Set default labels.
Definition: Level.cpp:243
virtual void DrawProjTot(Option_t *opt="")
Draw projection total.
Definition: GLSPlayer.cpp:1749
static Float_t GetXAxis(Float_t xmin, Float_t xmax)
Get position of axis in X.
Definition: BaseLSPlayer.h:169
virtual void SetLevelLabelsSize(Float_t size)
Set label size for levels.
Definition: GLSPlayer.cpp:310
static Bool_t IsvalideGateColor(Color_t co)
Definition: BasePeak.cpp:82
virtual void WriteLS(const char *nameLS, const char *path, Int_t write=TObject::kOverwrite)
Save level scheme.
Definition: GLSPlayer.cpp:359
Bool_t Connect(TCanvas *c=0x0)
Connect the Canvas to this to collect events.
void Set(Parity::EParity)
Definition: Parity.h:77
header file for a LevelScheme
static Float_t GetYLabels(Float_t ymin, Float_t ymax)
Get position of labels in Y.
Definition: BaseLSPlayer.h:166
virtual Bool_t IsSelected()
return selection
Definition: Cascade.h:154
void DrawProj(Option_t *opt)
Draw projection.
Definition: CSManager.cpp:219
LogMessage fLog
Definition: BaseLSPlayer.h:306
header file for a Cascade
virtual void PopupDoProject()
Popup DoProject menu.
Definition: GLSPlayer.cpp:556
virtual std::string & GetProcessName()
To get the Process name.
Definition: GwLogMessage.h:224
virtual void SetLabelColor(EDefaultColor color)
Set color label.
Definition: Cascade.h:169
header file for a BaseNucleus
virtual void AddLevel(Float_t energy=300, Float_t errEnergy=1, const Char_t *dJp="0/1+")
Add new level to the current cascade.
Definition: GLSPlayer.cpp:1148
virtual void SetX2(Double_t)
All labels are shifted when moving a level to another position.
Definition: Level.cpp:273
ClassImp(BaseNucleus)
virtual void SetY1(Double_t)
All labels are shifted when moving a level to another position.
Definition: Level.cpp:284
void SetY1(Double_t y1)
Set Y1.
header file for a general 1D peak
virtual TLine & GetExtraLine()
Get extra line.
Definition: Level.h:155
virtual void SetVisLabel(const char *)
Used to determine which label should be drawn.
Definition: Level.cpp:172
virtual void AlignLevels()
Align selected levels respect to the first selected in X (does not affect the associated links) ...
Definition: GLSPlayer.cpp:1472
static Float_t GetXRmin(Float_t xmin, Float_t xmax)
Get range from size.
Definition: BaseLSPlayer.h:159
virtual void UpdateDrawingOptions()
update drawing options color/style
Definition: GLSPlayer.cpp:1806
virtual void SetX1(Double_t)
All labels are shifted when moving a level to another position.
Definition: Level.cpp:262
virtual void DeleteLevel()
Delete current level.
Definition: GLSPlayer.cpp:423
static void SetColorPalette(Color_t *pal)
Definition: Level.h:67
Int_t CollectGate(Option_t *opt="reset")
Collect gates on spectra.
Definition: CSManager.cpp:277
virtual void SetName(const Char_t *name)
to set only the cascade's name
Definition: Cascade.h:183
Spin & GetSpin()
to get the spin and modify it if it is needed
Definition: NuclearLevel.h:84
virtual void SetLinkLabelsSize(Float_t size)
Set label size for levels.
Definition: GLSPlayer.cpp:339
virtual void DoJ1(Option_t *opt="AP") const
Do J1.
Definition: GLSPlayer.cpp:1557
void DrawProjTot(Option_t *opt, Option_t *axis="x")
Draw total projection.
Definition: CSManager.cpp:257
A graphical interface for placing schematic peak onto a 1D histogram with a given position...
Definition: Peak1D.h:79
virtual void RegisterCS(const Char_t *fileName, const Char_t *name=CorrelatedSpace::GetDefaultName())
Register correlated space.
Definition: GLSPlayer.cpp:536
virtual void SetInfo(InfoData::EData)
to set some information about this data
Definition: InfoData.h:83
void SetFilterBaseName(const Char_t *name)
Set Filter Base Name.
Definition: CSManager.h:135
virtual void SetDrawAs(EDrawAs d)
Set drawing flag.
Definition: Peak1D.cpp:1718
virtual void AddLinkOnTop(Measure< Float_t > strength, Measure< Float_t > energy)
Add gamma link on the top of a band by selected a link or a link.
Definition: GLSPlayer.cpp:756
virtual void DoJ2(Option_t *opt="AP") const
Do J2.
Definition: GLSPlayer.cpp:1619
virtual void PopupAddLink()
Popup AddLink menu.
Definition: GLSPlayer.cpp:569
virtual void SetProcessMethod(const char *)
To set the current method.
LevelScheme * fLevelScheme
Definition: BaseLSPlayer.h:291
virtual TLatex & GetLatex(Option_t *opt="name")
to get and modify the displayed properties of name and type
Definition: Cascade.cpp:91
virtual void SetY2(Double_t)
All labels are shifted when moving a level to another position.
Definition: Level.cpp:303
const Int_t size
Definition: BenchIO.C:24
TList * fSelectedCascades
pointer to the selected levels
Definition: BaseLSPlayer.h:288
void SetCLink(Link *link)
set current link
Definition: LevelScheme.h:186
Float_t fPositionLabels
Definition: BaseLSPlayer.h:304
virtual Int_t CollectLinks(Option_t *o="")
Collect selected links.
TGraphErrors * DoJ1() const
Compute J1.
Definition: Cascade.cpp:170
virtual void Selected()
Selected link.
Definition: Level.h:204
virtual void DeleteLink()
Delete current link.
Definition: GLSPlayer.cpp:389
TList & GetLinkList()
Definition: BaseLSPlayer.h:265
static Float_t GetXMax(Float_t xRmin, Float_t xRmax)
Definition: BaseLSPlayer.h:153
TLatex * NewText(const char *msg)
create new text
TVirtualPad * GetProjTotPad(Int_t idx)
Get pad of total projection spectrum for a given CS.
Definition: CSManager.cpp:205
Link * GetCurrentLink()
Definition: BaseLSPlayer.h:269
virtual void Draw(Option_t *opt="")
to draw this level scheme
CorrelatedSpace base class that contains correlated informations.
BaseLSPlayer to work on level scheme.
Definition: BaseLSPlayer.h:106
virtual void SetError(Data_T derr)
set the error of this value
Definition: Measure.h:111
static Float_t GetDefaultWidth()
Get default width.
Definition: BaseLSPlayer.h:142
virtual BasePeak * CreatePeak(const TH1 *h, Double_t x, Option_t *opt="")
It creates a peak at position x for the 1D spectra.
static Float_t GetDefaultLabelSize()
Definition: Cascade.h:61
static void SetDefaultLabelColor(Color_t color)
Definition: Level.h:69
Data_T GetValue() const
get the value, cannot be overloaded
Definition: Data.h:114
virtual void PopupAddFirstLevel()
Popup AddFirstLevel menu.
Definition: GLSPlayer.cpp:595
GLSPlayer(LevelScheme *levelScheme)
Definition: GLSPlayer.cpp:130
virtual Int_t GetLastX()
set/get fLastX/fLastY
Definition: BaseLSPlayer.h:255
Base class describing a general level.
Definition: Level.h:53