![]() |
KaliVeda
Toolkit for HIC analysis
|
#include <KVDataAnalysisLauncher.h>

Private Types | |
| enum | ElementId { CB_DataRepository , CB_AnalysisTask , CB_DataSet , CB_System , CB_Trigger , LB_Runs , B_Libs , B_Incs , B_Process , B_Quit } |
Private Member Functions | |
| void | BuildResourceName (const TString &name, TString &, TString &) |
| void | DisableUserClassList () |
| Remove all entries from user class combo box & disable text entry. More... | |
| void | EnableUserClassList () |
| void | FillListOfUserClasses () |
| void | GenerateNewUserClass () |
| KVDataSetAnalyser * | GetDataAnalyser (KVDataAnalysisTask *task=0) |
| TString | GetResource (const TString &name, const TString &defaultvalue="") |
| TString | GetUserClass () |
| Returns currently selected user class name. More... | |
| void | SetResource (const TString &name, const TString &value) |
| void | SetUserClass (const Char_t *) |
| void | SetUserClassList () |
| Sets the list of all available user classes in the drop down list. More... | |
| TString | SystemBatchName () |
| Get the system name for the batch name. More... | |
Additional Inherited Members | |
Public Types inherited from TGWindow | |
| enum | EEditMode |
| enum | EStatusBits |
Public Types inherited from TObject | |
| enum | EDeprecatedStatusBits |
| enum | EStatusBits |
Static Public Member Functions inherited from TGMainFrame | |
| static TClass * | Class () |
| static const char * | Class_Name () |
| static constexpr Version_t | Class_Version () |
| static const char * | DeclFileName () |
Static Public Member Functions inherited from TGCompositeFrame | |
| static TClass * | Class () |
| static const char * | Class_Name () |
| static constexpr Version_t | Class_Version () |
| static const char * | DeclFileName () |
Static Public Member Functions inherited from TGFrame | |
| static TClass * | Class () |
| static const char * | Class_Name () |
| static constexpr Version_t | Class_Version () |
| static const char * | DeclFileName () |
| static const TGGC & | GetBckgndGC () |
| static const TGGC & | GetBlackGC () |
| static Pixel_t | GetBlackPixel () |
| static Pixel_t | GetDefaultFrameBackground () |
| static Pixel_t | GetDefaultSelectedBackground () |
| static const TGGC & | GetHilightGC () |
| static const TGGC & | GetShadowGC () |
| static const TGGC & | GetWhiteGC () |
| static Pixel_t | GetWhitePixel () |
Static Public Member Functions inherited from TGWindow | |
| static TClass * | Class () |
| static const char * | Class_Name () |
| static constexpr Version_t | Class_Version () |
| static const char * | DeclFileName () |
| static Int_t | GetCounter () |
Static Public Member Functions inherited from TGObject | |
| static TClass * | Class () |
| static const char * | Class_Name () |
| static constexpr Version_t | Class_Version () |
| static const char * | DeclFileName () |
Static Public Member Functions inherited from TObject | |
| static TClass * | Class () |
| static const char * | Class_Name () |
| static constexpr Version_t | Class_Version () |
| static const char * | DeclFileName () |
| static Longptr_t | GetDtorOnly () |
| static Bool_t | GetObjectStat () |
| static void | SetDtorOnly (void *obj) |
| static void | SetObjectStat (Bool_t stat) |
Static Public Member Functions inherited from TQObject | |
| static Bool_t | AreAllSignalsBlocked () |
| static Bool_t | BlockAllSignals (Bool_t b) |
| static TClass * | Class () |
| static const char * | Class_Name () |
| static constexpr Version_t | Class_Version () |
| static Bool_t | Connect (const char *sender_class, const char *signal, const char *receiver_class, void *receiver, const char *slot) |
| static Bool_t | Connect (TQObject *sender, const char *signal, const char *receiver_class, void *receiver, const char *slot) |
| static const char * | DeclFileName () |
| static Bool_t | Disconnect (const char *class_name, const char *signal, void *receiver=nullptr, const char *slot=nullptr) |
| static Bool_t | Disconnect (TQObject *sender, const char *signal=nullptr, void *receiver=nullptr, const char *slot=nullptr) |
Public Attributes inherited from TGWindow | |
| kEditDisable | |
| kEditDisableBtnEnable | |
| kEditDisableEvents | |
| kEditDisableGrab | |
| kEditDisableHeight | |
| kEditDisableKeyEnable | |
| kEditDisableLayout | |
| kEditDisableResize | |
| kEditDisableWidth | |
| kEditEnable | |
| kIsHtmlView | |
Public Attributes inherited from TObject | |
| kBitMask | |
| kCanDelete | |
| kCannotPick | |
| kHasUUID | |
| kInconsistent | |
| kInvalidObject | |
| kIsOnHeap | |
| kIsReferenced | |
| kMustCleanup | |
| kNoContextMenu | |
| kNotDeleted | |
| kObjInCanvas | |
| kOverwrite | |
| kSingleKey | |
| kWriteDelete | |
| kZombie | |
Protected Member Functions inherited from TGMainFrame | |
| TString | GetMWMfuncString () const |
| TString | GetMWMinpString () const |
| TString | GetMWMvalueString () const |
Protected Member Functions inherited from TGFrame | |
| void | DoRedraw () override |
| virtual void | Draw3dRectangle (UInt_t type, Int_t x, Int_t y, UInt_t w, UInt_t h) |
| TString | GetOptionString () const |
| const TGResourcePool * | GetResourcePool () const |
| void * | GetSender () override |
| virtual void | StartGuiBuilding (Bool_t on=kTRUE) |
Protected Member Functions inherited from TGWindow | |
| TGWindow (const TGWindow &tgw) | |
| TGWindow (Window_t id) | |
| TGWindow & | operator= (const TGWindow &tgw) |
Protected Member Functions inherited from TGObject | |
| TGObject & | operator= (const TGObject &tgo) |
Protected Member Functions inherited from TObject | |
| virtual void | DoError (int level, const char *location, const char *fmt, va_list va) const |
| void | MakeZombie () |
Protected Member Functions inherited from TQObject | |
| virtual const char * | GetSenderClassName () const |
Static Protected Member Functions inherited from TGFrame | |
| static Time_t | GetLastClick () |
Static Protected Member Functions inherited from TQObject | |
| static Int_t | CheckConnectArgs (TQObject *sender, TClass *sender_class, const char *signal, TClass *receiver_class, const char *slot) |
| static TString | CompressName (const char *method_name) |
| static Bool_t | ConnectToClass (const char *sender_class, const char *signal, TClass *receiver_class, void *receiver, const char *slot) |
| static Bool_t | ConnectToClass (TQObject *sender, const char *signal, TClass *receiver_class, void *receiver, const char *slot) |
Protected Attributes inherited from TGMainFrame | |
| TList * | fBindList |
| TString | fClassName |
| Atom_t * | fDNDTypeList |
| TString | fIconName |
| TString | fIconPixmap |
| UInt_t | fMWMFuncs |
| UInt_t | fMWMInput |
| UInt_t | fMWMValue |
| TString | fResourceName |
| TString | fWindowName |
| UInt_t | fWMHeight |
| UInt_t | fWMHeightInc |
| EInitialState | fWMInitState |
| UInt_t | fWMMaxHeight |
| UInt_t | fWMMaxWidth |
| UInt_t | fWMMinHeight |
| UInt_t | fWMMinWidth |
| UInt_t | fWMWidth |
| UInt_t | fWMWidthInc |
| Int_t | fWMX |
| Int_t | fWMY |
| kDontCallClose | |
Protected Attributes inherited from TGCompositeFrame | |
| Bool_t | fLayoutBroken |
| TGLayoutManager * | fLayoutManager |
| TList * | fList |
| Bool_t | fMapSubwindows |
| Int_t | fMustCleanup |
Protected Attributes inherited from TGFrame | |
| Pixel_t | fBackground |
| Int_t | fBorderWidth |
| Int_t | fDNDState |
| UInt_t | fEventMask |
| TGFrameElement * | fFE |
| UInt_t | fHeight |
| UInt_t | fMaxHeight |
| UInt_t | fMaxWidth |
| UInt_t | fMinHeight |
| UInt_t | fMinWidth |
| UInt_t | fOptions |
| UInt_t | fWidth |
| Int_t | fX |
| Int_t | fY |
| kDeleteWindowCalled | |
Protected Attributes inherited from TGWindow | |
| UInt_t | fEditDisabled |
| TString | fName |
| Bool_t | fNeedRedraw |
| const TGWindow * | fParent |
Protected Attributes inherited from TGObject | |
| TGClient * | fClient |
| Handle_t | fId |
Protected Attributes inherited from TObject | |
| kOnlyPrepStep | |
Protected Attributes inherited from TQObject | |
| TList * | fListOfConnections |
| TList * | fListOfSignals |
| Bool_t | fSignalsBlocked |
Static Protected Attributes inherited from TGCompositeFrame | |
| static TGLayoutHints * | fgDefaultHints |
Static Protected Attributes inherited from TGFrame | |
| static const TGGC * | fgBckgndGC |
| static const TGGC * | fgBlackGC |
| static Pixel_t | fgBlackPixel |
| static Window_t | fgDbw |
| static Int_t | fgDbx |
| static Int_t | fgDby |
| static Pixel_t | fgDefaultFrameBackground |
| static Pixel_t | fgDefaultSelectedBackground |
| static const TGGC * | fgHilightGC |
| static Bool_t | fgInit |
| static UInt_t | fgLastButton |
| static Time_t | fgLastClick |
| static const TGGC * | fgShadowGC |
| static UInt_t | fgUserColor |
| static const TGGC * | fgWhiteGC |
| static Pixel_t | fgWhitePixel |
Static Protected Attributes inherited from TGWindow | |
| static Int_t | fgCounter |
Static Protected Attributes inherited from TQObject | |
| static Bool_t | fgAllSignalsBlocked |
|
private |
| Enumerator | |
|---|---|
| CB_DataRepository | |
| CB_AnalysisTask | |
| CB_DataSet | |
| CB_System | |
| CB_Trigger | |
| LB_Runs | |
| B_Libs | |
| B_Incs | |
| B_Process | |
| B_Quit | |
Definition at line 104 of file KVDataAnalysisLauncher.h.
| KVDataAnalysisLauncher::KVDataAnalysisLauncher | ( | const TGWindow * | p = 0, |
| UInt_t | w = 200, |
||
| UInt_t | h = 400 |
||
| ) |
Main window width and height can be set using .kvrootrc variables: KaliVedaGUI.MainGUIWidth: 800 KaliVedaGUI.MainGUIHeight: 600 Maximum column width of runlist can be set using: KaliVedaGUI.MaxColWidth: 500
Definition at line 422 of file KVDataAnalysisLauncher.cpp.
| KVDataAnalysisLauncher::~KVDataAnalysisLauncher | ( | ) |
Destructeur.
Definition at line 757 of file KVDataAnalysisLauncher.cpp.
|
private |
Build the full resource names for storing DataSet, Task, etc.
We store the current state of the interface using the following resource names:
"name" "cur_res" Repository KVDataAnalysisLauncher.Repository DataSet KVDataAnalysisLauncher.DataSet Task KVDataAnalysisLauncher.Task UserClass KVDataAnalysisLauncher.UserClass UserClassOptions KVDataAnalysisLauncher.UserClassOptions NbEventsToRead KVDataAnalysisLauncher.NbEventsToRead
We also keep a "memory" of all selected configurations using the following resource names:
"name" "saved_res" DataSet KVDataAnalysisLauncher.DataSet.[repository] Task KVDataAnalysisLauncher.Task.[repository].[dataset]
N.B. [task]: it is the NAME of the task which is used in the resource name.
If name = "Repository", saved_res="" as we do not save it. If the resource cannot be saved because one of the resources that is needed to form the full resource name has not been set, saved_res="". Resource name for current value
Definition at line 1826 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::ClearListOfSelectedRuns | ( | ) |
Empty displayed list of selected runs.
Definition at line 2330 of file KVDataAnalysisLauncher.cpp.
Deselect all runs currently in the displayed list of runs.
Definition at line 1141 of file KVDataAnalysisLauncher.cpp.
|
private |
Remove all entries from user class combo box & disable text entry.
Definition at line 2125 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::DoStageSelection | ( | ) |
Called when 'Stage selection' button is pressed, for conversion jobs which generate 'target' files from 'source' files.
Open small GUI for user to choose:
Definition at line 2213 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::EditUserClassFiles | ( | ) |
If environment variable $EDITOR is set, and if the currently selected user class has available source files, we open them in the user's favourite editor
Definition at line 2167 of file KVDataAnalysisLauncher.cpp.
|
private |
Reenable user class combo box & text entry, fill list with all known user classes & select the one corresponding to the current environment
Definition at line 2147 of file KVDataAnalysisLauncher.cpp.
Called when user presses "Runlist" button. Open dialogue box in which a runlist can be entered. The runs in the runlist will be selected.
Definition at line 2276 of file KVDataAnalysisLauncher.cpp.
Definition at line 179 of file KVDataAnalysisLauncher.h.
|
private |
Look at files in working directory & deduce list of user analysis classes. We look for any file ending in '.h'. If we can find a corresponding '.cpp' or '.C' or '.cxx', we consider that it is a user analysis class. This list is used to fill the "User Class" drop-down list. We add "[NEW]" at the end of the list: if selected, this will generate a new user analysis class for the currently selected data & analysis task
Definition at line 1922 of file KVDataAnalysisLauncher.cpp.
|
private |
called when user selects [NEW] in user class list we generate a new analysis class for currently selected data & task the source files are opened in the $EDITOR the new class is selected for the analysis Get name of new class
Definition at line 2030 of file KVDataAnalysisLauncher.cpp.
|
private |
Get analyser for task If task = 0 we return the current analyser
Definition at line 925 of file KVDataAnalysisLauncher.cpp.
Definition at line 1295 of file KVDataAnalysisLauncher.cpp.
Definition at line 1281 of file KVDataAnalysisLauncher.cpp.
|
private |
Handles resource file ".KVDataAnalysisGUIrc"
We return the current value of the resource "name"
Definition at line 1729 of file KVDataAnalysisLauncher.cpp.
Definition at line 1338 of file KVDataAnalysisLauncher.cpp.
| TString KVDataAnalysisLauncher::GetSavedResource | ( | const TString & | name, |
| const TString & | defaultvalue = "" |
||
| ) |
Handles resource file ".KVDataAnalysisGUIrc"
We look for a stored value of the resource "name" corresponding to the current values of all the resources which come before "name" in the list : Repository DataSet Task These values are stored in resources with names like: KVDataAnalysisLauncher.[name].[repository].[dataset]...
If no stored value is found, the defaultvalue is returned
Definition at line 1756 of file KVDataAnalysisLauncher.cpp.
Definition at line 1323 of file KVDataAnalysisLauncher.cpp.
Definition at line 1309 of file KVDataAnalysisLauncher.cpp.
|
private |
Returns currently selected user class name.
Definition at line 2107 of file KVDataAnalysisLauncher.cpp.
Definition at line 212 of file KVDataAnalysisLauncher.h.
Run the analysis task.
Definition at line 1153 of file KVDataAnalysisLauncher.cpp.
Select all runs currently in the displayed list of runs.
Definition at line 1129 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::SelectAllUnconvertedRuns | ( | ) |
For analysis tasks which perform data conversions (raw -> recon, dst -> recon, ...) clicking on this button will select all of the runs of the currently selected system(s) which have not yet been converted.
Definition at line 2189 of file KVDataAnalysisLauncher.cpp.
Called when dataset is selected in drop-down list
Calls SetTaskList() to fill list of available tasks for given dataset
Definition at line 858 of file KVDataAnalysisLauncher.cpp.
Called when repository is selected in drop-down list
Calls SetDataSetList() to fill list of available datasets for given repository
Definition at line 798 of file KVDataAnalysisLauncher.cpp.
Called when user analysis class is selected in drop-down list
Calls UserClassSelected() with name of class
Definition at line 1112 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::SetBatch | ( | ) |
Set the resource KVDataAnalysisLauncher.Batch according to whether button 'Batch' is down or up
Definition at line 1503 of file KVDataAnalysisLauncher.cpp.
| Bool_t KVDataAnalysisLauncher::SetBatchParameters | ( | ) |
Open dialog to set batch parameters for job returns kFALSE if cancel is pressed
Definition at line 1521 of file KVDataAnalysisLauncher.cpp.
Definition at line 1368 of file KVDataAnalysisLauncher.cpp.
Sets the list of all available data sets in the data sets combo box.
Definition at line 814 of file KVDataAnalysisLauncher.cpp.
Definition at line 1347 of file KVDataAnalysisLauncher.cpp.
Sets the list of all possible repositories in the repository combo box.
Definition at line 770 of file KVDataAnalysisLauncher.cpp.
Handles resource file ".KVDataAnalysisGUIrc" We store the current state of the interface using the following resource names:
Repository KVDataAnalysisLauncher.Repository DataSet KVDataAnalysisLauncher.DataSet Task KVDataAnalysisLauncher.Task System KVDataAnalysisLauncher.System Trigger KVDataAnalysisLauncher.Trigger RunsList KVDataAnalysisLauncher.RunsList UserClass KVDataAnalysisLauncher.UserClass KVDataSelector KVDataAnalysisLauncher.KVDataSelector NbEventsToRead KVDataAnalysisLauncher.NbEventsToRead
We also keep a "memory" of all selected configurations using the following resource names:
DataSet KVDataAnalysisLauncher.DataSet.[repository] Task KVDataAnalysisLauncher.Task.[repository].[dataset] System KVDataAnalysisLauncher.System.[repository].[dataset].[task] Trigger KVDataAnalysisLauncher.Trigger.[repository].[dataset].[task].[system] RunsList KVDataAnalysisLauncher.RunsList.[repository].[dataset].[task].[system].[trigger] UserClass KVDataAnalysisLauncher.UserClass.[repository].[dataset].[task].[system].[trigger] KVDataSelector KVDataAnalysisLauncher.KVDataSelector.[repository].[dataset].[task].[system].[trigger] NbEventsToRead KVDataAnalysisLauncher.NbEventsToRead.[repository].[dataset].[task].[system].[trigger]
N.B. [task]: it is the NAME of the task which is used in the resource name. N.B.2. [system]: it is the name given by SystemBatchName() which is used in the resource name. N.B.3. [trigger]: for the resource name we take "M > 4", "M>=8" "All" etc. and replace all ' ', '>' or '=' by '' to give "M4", "M8", "All", etc.
Definition at line 1676 of file KVDataAnalysisLauncher.cpp.
Definition at line 1480 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::SetRunsList | ( | ) |
Sets the list of all available runs in the runs list box SetResource("Trigger", "All");
Definition at line 1033 of file KVDataAnalysisLauncher.cpp.
Definition at line 1436 of file KVDataAnalysisLauncher.cpp.
Sets the list of all possible systems in the system list. Called every time a task is selected.
The choice of task may lead to a change of batch system:
Definition at line 955 of file KVDataAnalysisLauncher.cpp.
Definition at line 1402 of file KVDataAnalysisLauncher.cpp.
Sets the list of all possible tasks in the tasks combo box Called when a new dataset is selected in the dropdown list
Definition at line 877 of file KVDataAnalysisLauncher.cpp.
Sets selected user class in combo box according to e.g. a previously stored resource value. We update the resource corresponding to the current state of the interface. look for user class in list
Definition at line 2068 of file KVDataAnalysisLauncher.cpp.
|
private |
Sets the list of all available user classes in the drop down list.
Definition at line 1970 of file KVDataAnalysisLauncher.cpp.
Set the User's includes.
Definition at line 1564 of file KVDataAnalysisLauncher.cpp.
Set the User's libraries.
Definition at line 1548 of file KVDataAnalysisLauncher.cpp.
Get the system name for the batch name.
Definition at line 1787 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::SystemSelectionChanged | ( | ) |
KVDBSystem* system = (KVDBSystem*)lvSystems->GetLastSelectedObject(); if (system == lastSelectedSystem) return; lastSelectedSystem = system; GetDataAnalyser()->SetSystem(system);
Definition at line 1462 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::UpdateAvailableRuns | ( | ) |
Update available runs for current selected task (=datatype)
Definition at line 2259 of file KVDataAnalysisLauncher.cpp.
| void KVDataAnalysisLauncher::UpdateListOfSelectedRuns | ( | ) |
Called when the selected runs in TGListView lvRuns change. We update the run_index_list listOfRuns according to the current selection we modify the limits of the 'runs per job' widget
Definition at line 2299 of file KVDataAnalysisLauncher.cpp.
Called when a user class is selected in the combo box. Updates batch name if 'auto batch name' is selected.
Definition at line 1998 of file KVDataAnalysisLauncher.cpp.
| Bool_t KVDataAnalysisLauncher::WarningBox | ( | const char * | title = "Warning", |
| const char * | msg = "Warning", |
||
| Bool_t | confirm = kFALSE |
||
| ) |
Warning box in case of problems if confirm=kTRUE we ask for a yes/no answer from the user: if 'yes' is pressed, we return kTRUE, if 'no', kFALSE. by default, only a 'dismiss' button is shown, and this method always returns kTRUE.
Definition at line 1584 of file KVDataAnalysisLauncher.cpp.
|
private |
Definition at line 150 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 144 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 131 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 129 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 130 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 143 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 142 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 156 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 149 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 137 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 158 of file KVDataAnalysisLauncher.h.
|
private |
heigth of main window in pixels
Definition at line 172 of file KVDataAnalysisLauncher.h.
|
private |
width of main window in pixels
Definition at line 171 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 152 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 145 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 155 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 154 of file KVDataAnalysisLauncher.h.
|
private |
Declaration des boutons de la fenetre principale.
Definition at line 119 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 141 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 133 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 139 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 126 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 134 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 127 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 135 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 132 of file KVDataAnalysisLauncher.h.
|
private |
number of names in list
Definition at line 121 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 157 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 151 of file KVDataAnalysisLauncher.h.
|
private |
used by Get/SetResource
Definition at line 120 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 138 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 136 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 151 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 147 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 146 of file KVDataAnalysisLauncher.h.
|
private |
list of user classes present in working directory
Definition at line 161 of file KVDataAnalysisLauncher.h.
|
private |
Definition at line 148 of file KVDataAnalysisLauncher.h.