GammaWare  Head Version for release 0.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BaseLevelSchemeReader.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 #ifndef Gw_BaseLevelSchemeReader
24 #include "BaseLevelSchemeReader.h"
25 #endif
26 
27 #ifndef GW_NUCLEARLEVEL_H
28 #include "NuclearLevel.h"
29 #endif
30 
31 #ifndef GW_XGAMMALINK_H
32 #include "XGammaLink.h"
33 #endif
34 
35 
36 using namespace Gw;
37 
38 //__________________________________________________________
39 BaseLevelSchemeReader::BaseLevelSchemeReader(const char* filename, Option_t* opt)
40  : TObject(),
41  fFileName(filename),
42  fOptions(opt),
43  fIsChecked(false),
44  fLog("BaseLevelSchemeReader")
45 {
46  //Default Constructor
47  fBand.SetOwner(kTRUE); fLevel.SetOwner(kTRUE);
48  fLink.SetOwner(kTRUE); fText.SetOwner(kTRUE);
49 }
50 
51 //__________________________________________________________
53 {
54 // default destructor
55 }
56 
57 //__________________________________________________________
59 {
60  // check before filling
61  Int_t ok = 1;
62  if ( !fIsChecked )
63  ok = Check();
64 
65  // if check failed return
66  if ( !ok )
67  return 0;
68 
69  Fill(levelScheme);
70  FillLabels(levelScheme);
71 
72  return ok;
73 }
74 
75 
76 //__________________________________________________________
78 {
79 
80  fLog.SetProcessMethod("Fill(LevelScheme& )");
81 
82  if ( !fIsChecked) {
83  fLog << error << Form("File %s has not been read/checked before", fFileName.Data()) << dolog;
84  return;
85  }
86 
87  TObject *obj;
88  Cascade *cascade; GammaLink *gamma;
89  TList cl; cl.SetOwner(kFALSE);
90  Int_t j, j1;
91  // everything is right .. so now previous definition is cleared
92  levelScheme.Clear();
93 
94  // now remove levels, links etc from temporary and put them in fLevels, fLinks ..
95  fLog << debug << Form(" Deleting temporary levels") << nline;
96  for(j = 0; j < fLevel.GetEntries() ; j++ ){ //levels
97  levelScheme.AddLevel((Level*)fLevel.At(j));
98  }
99  fLevel.SetOwner(kFALSE); fLevel.Clear(); // kFALSE cos fBand is owner
100 
101  fLog << debug << Form(" Deleting temporary links") << nline;
102  for(j = 0; j < fLink.GetEntries() ; j++ ){ // links
103  levelScheme.AddLink((Link*)fLink.At(j));
104  }
105  fLink.SetOwner(kFALSE); fLink.Clear();
106 
107  fLog << debug << Form(" Deleting temporary texts") << nline;
108  for( j = 0; j < fText.GetEntries() ; j++ ){ // texts
109  levelScheme.AddText((TLatex*)fText.At(j));
110  }
111  fText.SetOwner(kFALSE); fText.Clear();
112 
113  fLog << debug << Form(" Deleting temporary cascades") << nline;
114  for(j = 0; j < fBand.GetEntries(); j++ ){ // cascades
115 
116  // move all levels temporary stored in cascade into another collection
117  cascade = (Cascade *)fBand.At(j);
118 
119  for(j1 = 0; j1 < cascade->GetSize(); j1++) {
120  obj = cascade->At(j1); cl.Add(obj);
121  }
122  cascade->Clear();
123 
124  // now loop over all links and keep in the current cascade only those
125  // having their initial and final level in the corresponding band
126  for(j1 = 0; j1 < levelScheme.GetLinks().GetSize(); j1++){
127  gamma = (GammaLink *)levelScheme.GetLinks().At(j1);
128  if ( cl.FindObject(gamma->GetIL()) == NULL ) continue;
129  if ( cl.FindObject(gamma->GetFL()) == NULL ) continue;
130  cascade->Add(gamma);
131  }
132  cl.Clear();
133  // add this cascade to the list of cascades
134  levelScheme.AddCascade(cascade);
135  }
136  fBand.SetOwner(kFALSE); fBand.Clear();
137 
138  fLog << dolog;
139 
140 }
141 
A level Scheme.
Definition: LevelScheme.h:82
virtual void FillLabels(LevelScheme &levelScheme)=0
fill labels
A cascade is a list of links.
Definition: Cascade.h:51
LogMessage & error(LogMessage &)
header file for a NuclearLevel
TString fFileName
name of level scheme file
TObjArray fText
list of texts
LogMessage & nline(LogMessage &)
const TList & GetLinks()
to get the list of links
Definition: LevelScheme.h:295
virtual Int_t Import(LevelScheme &levelScheme)
imported level scheme file
virtual void Clear(Option_t *opt="")
Bool_t fIsChecked
flag for reading is ok
TObjArray fLevel
list of levels
LogMessage & dolog(LogMessage &)
void AddLevel(Level *level)
level scheme player pointer
virtual Int_t Check()=0
check file before imported level scheme
void AddText(TLatex *latex)
Add text.
LogMessage & debug(LogMessage &)
virtual void Fill(LevelScheme &levelScheme)
void AddLink(Link *link)
Add link.
void AddCascade(Cascade *Cascade)
Add cascade.
TObjArray fLink
list of links
virtual void SetProcessMethod(const char *)
To set the current method.
LogMessage fLog
log message
TObjArray fBand
list of cascades
BaseLevelSchemeReader(const char *filename, Option_t *opt)
Base class describing a general level.
Definition: Level.h:53