Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
TGeoMediumEditor.cxx
Go to the documentation of this file.
1// @(#):$Id: c816a00a89512fcc6cd4a75fb1343c76ebaa3c24 $
2// Author: M.Gheata
3
4/*************************************************************************
5 * Copyright (C) 1995-2002, Rene Brun and Fons Rademakers. *
6 * All rights reserved. *
7 * *
8 * For the licensing terms see $ROOTSYS/LICENSE. *
9 * For the list of contributors see $ROOTSYS/README/CREDITS. *
10 *************************************************************************/
11
12/** \class TGeoMediumEditor
13\ingroup Geometry_builder
14
15Editor class for TGeo tracking media.
16
17*/
18
19#include "TGeoMediumEditor.h"
20#include "TGeoTabManager.h"
21#include "TGeoManager.h"
22#include "TGeoMedium.h"
23#include "TGeoMaterial.h"
24#include "TGTab.h"
25#include "TGComboBox.h"
26#include "TGButton.h"
27#include "TGTextEntry.h"
28#include "TGNumberEntry.h"
29#include "TGLabel.h"
30#include "TG3DLine.h"
31
33
50};
51
52////////////////////////////////////////////////////////////////////////////////
53/// Constructor for medium editor
54
56 : TGeoGedFrame(p, width, height, options | kVerticalFrame, back)
57{
58 fMedium = nullptr;
61 Pixel_t color;
62 TGLabel *label;
63
64 // TextEntry for medium name
65 MakeTitle("Name");
66 fMedName = new TGTextEntry(this, "", kMED_NAME);
68 fMedName->SetToolTipText("Enter the medium name");
69 fMedName->Associate(this);
71
72 TGTextEntry *nef;
73
74 // Composite frame for medium ID and sensitivity
76 f1->AddFrame(new TGLabel(f1, "ID"), new TGLayoutHints(kLHintsLeft, 4, 1, 6, 0));
77 fMedId = new TGNumberEntry(f1, 0., 1, kMED_ID);
79 nef->SetToolTipText("Enter the medium ID");
80 fMedId->Associate(this);
81 f1->AddFrame(fMedId, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 4, 4));
82 fMedSensitive = new TGCheckButton(f1, "&Sens", kMED_SENS);
84 f1->AddFrame(fMedSensitive, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
85 AddFrame(f1, new TGLayoutHints(kLHintsLeft, 3, 3, 2, 2));
86
87 // Current material
89 f1->AddFrame(label = new TGLabel(f1, "Current material"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
90 f1->AddFrame(new TGHorizontal3DLine(f1), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
91 gClient->GetColorByName("#ff0000", color);
92 label->SetTextColor(color);
93 AddFrame(f1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
94 f1 = new TGCompositeFrame(this, 155, 30, kHorizontalFrame);
95 fSelectedMaterial = nullptr;
96 fLSelMaterial = new TGLabel(f1, "Select material");
97 gClient->GetColorByName("#0000ff", color);
102 fBSelMaterial->SetToolTipText("Replace with one of the existing materials");
104 f1->AddFrame(fBSelMaterial, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
105 fEditMaterial = new TGTextButton(f1, "Edit");
106 f1->AddFrame(fEditMaterial, new TGLayoutHints(kLHintsLeft, 1, 1, 2, 2));
107 fEditMaterial->SetToolTipText("Edit selected material");
110
111 // Combo box for magnetic field option
113 f1->AddFrame(label = new TGLabel(f1, "Mag. field option"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
114 f1->AddFrame(new TGHorizontal3DLine(f1), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
115 gClient->GetColorByName("#ff0000", color);
116 label->SetTextColor(color);
117 AddFrame(f1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
121
122 // Number entries for other settings
124 f1->AddFrame(label = new TGLabel(f1, "Medium cuts"), new TGLayoutHints(kLHintsLeft, 1, 1, 0, 0));
125 f1->AddFrame(new TGHorizontal3DLine(f1), new TGLayoutHints(kLHintsExpandX, 5, 5, 7, 7));
126 gClient->GetColorByName("#ff0000", color);
127 label->SetTextColor(color);
128 AddFrame(f1, new TGLayoutHints(kLHintsTop, 0, 0, 2, 0));
130
131 // Number entry for fieldm
133 f1->AddFrame(new TGLabel(f1, "FIELDM"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
134 fMedFieldm = new TGNumberEntry(f1, 0., 5, kMED_FIELDM);
136 nef->SetToolTipText("Maximum magnetic field [kilogauss]");
137 fMedFieldm->Associate(this);
139 f1->AddFrame(fMedFieldm, new TGLayoutHints(kLHintsRight | kLHintsExpandY, 2, 2, 2, 2));
140 compxyz->AddFrame(f1, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 1, 1));
141
142 // Number entry for tmaxfd
143 TGCompositeFrame *f2 =
145 f2->AddFrame(new TGLabel(f2, "TMAXFD"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
146 fMedTmaxfd = new TGNumberEntry(f2, 0., 5, kMED_TMAX);
148 nef->SetToolTipText("Maximum angle per step due to field [deg]");
149 fMedTmaxfd->Associate(this);
152 compxyz->AddFrame(f2, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 1, 1));
153
154 // Number entry for stemax
155 TGCompositeFrame *f3 =
157 f3->AddFrame(new TGLabel(f3, "STEMAX"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
158 fMedStemax = new TGNumberEntry(f3, 0., 5, kMED_STEMAX);
160 nef->SetToolTipText("Maximum step allowed [cm]");
161 fMedStemax->Associate(this);
164 compxyz->AddFrame(f3, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 1, 1));
165
166 // Number entry for deemax
167 TGCompositeFrame *f4 =
169 f4->AddFrame(new TGLabel(f4, "DEEMAX"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
170 fMedDeemax = new TGNumberEntry(f4, 0., 5, kMED_DEEMAX);
172 nef->SetToolTipText("Maximum fraction of energy lost in a step");
173 fMedDeemax->Associate(this);
176 compxyz->AddFrame(f4, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 1, 1));
177
178 // Number entry for epsil
179 TGCompositeFrame *f5 =
181 f5->AddFrame(new TGLabel(f5, "EPSIL"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
182 fMedEpsil = new TGNumberEntry(f5, 0., 5, kMED_EPSIL);
184 nef->SetToolTipText("Tracking precision [cm]");
185 fMedEpsil->Associate(this);
188 compxyz->AddFrame(f5, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 1, 1));
189
190 // Number entry for stmin
191 TGCompositeFrame *f6 =
193 f6->AddFrame(new TGLabel(f6, "STMIN"), new TGLayoutHints(kLHintsLeft, 1, 1, 4, 0));
194 fMedStmin = new TGNumberEntry(f6, 0., 5, kMED_STMIN);
196 nef->SetToolTipText("Minimum step due to continuous processes [cm]");
197 fMedStmin->Associate(this);
200 compxyz->AddFrame(f6, new TGLayoutHints(kLHintsLeft | kLHintsExpandX, 2, 2, 1, 1));
201
202 compxyz->Resize(160, 50);
203 AddFrame(compxyz, new TGLayoutHints(kLHintsLeft, 2, 2, 2, 2));
204
205 // Buttons
207 fApply = new TGTextButton(f23, "&Apply");
208 f23->AddFrame(fApply, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
209 fApply->Associate(this);
210 fUndo = new TGTextButton(f23, " &Undo ");
211 f23->AddFrame(fUndo, new TGLayoutHints(kLHintsRight, 2, 2, 4, 4));
212 fUndo->Associate(this);
213 AddFrame(f23, new TGLayoutHints(kLHintsLeft, 2, 2, 4, 4));
214}
215
216////////////////////////////////////////////////////////////////////////////////
217/// Destructor
218
220{
221 TGFrameElement *el;
222 TIter next(GetList());
223 while ((el = (TGFrameElement *)next())) {
224 if (el->fFrame->IsA() == TGCompositeFrame::Class() || el->fFrame->IsA() == TGHorizontalFrame::Class() ||
227 }
228 Cleanup();
229}
230
231////////////////////////////////////////////////////////////////////////////////
232/// Connect signals to slots.
233
235{
236 fApply->Connect("Clicked()", "TGeoMediumEditor", this, "DoApply()");
237 fUndo->Connect("Clicked()", "TGeoMediumEditor", this, "DoUndo()");
238 fMedName->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoMedName()");
239 fBSelMaterial->Connect("Clicked()", "TGeoMediumEditor", this, "DoSelectMaterial()");
240 fEditMaterial->Connect("Clicked()", "TGeoMediumEditor", this, "DoEditMaterial()");
241 fMedId->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoMedId()");
242 fMedTmaxfd->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoTmaxfd()");
243 fMedStemax->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoStemax()");
244 fMedDeemax->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoDeemax()");
245 fMedEpsil->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoEpsil()");
246 fMedStmin->GetNumberEntry()->Connect("TextChanged(const char *)", "TGeoMediumEditor", this, "DoStmin()");
247 fMedSensitive->Connect("Clicked()", "TGeoMediumEditor", this, "DoToggleSensitive()");
248 fMagfldOption->Connect("Selected(Int_t)", "TGeoMediumEditor", this, "DoMagfldSelect(Int_t)");
249 fInit = kFALSE;
250}
251
252////////////////////////////////////////////////////////////////////////////////
253/// Connect to the selected object.
254
256{
257 if (obj == nullptr || !(obj->IsA() == TGeoMedium::Class())) {
259 return;
260 }
261 fMedium = (TGeoMedium *)obj;
262 const char *sname = fMedium->GetName();
263 if (!strcmp(sname, fMedium->ClassName()))
264 fMedName->SetText("");
265 else
266 fMedName->SetText(sname);
267
269 Int_t isvol = (Int_t)fMedium->GetParam(0);
270 fMedSensitive->SetState((isvol == 0) ? kButtonUp : kButtonDown);
271
275
277 fMagfldOption->AddEntry("No field", 0);
278 fMagfldOption->AddEntry("User decision", 1);
279 fMagfldOption->AddEntry("Runge-Kutta", 2);
280 fMagfldOption->AddEntry("Helix", 3);
281 fMagfldOption->AddEntry("Helix3", 4);
282 fMagfldOption->AddEntry("Unknown option", 5);
283 }
284 Int_t ifld = (Int_t)fMedium->GetParam(1);
285 switch (ifld) {
286 case 0: fMagfldOption->Select(0); break;
287 case -1: fMagfldOption->Select(1); break;
288 case 1: fMagfldOption->Select(2); break;
289 case 2: fMagfldOption->Select(3); break;
290 case 3: fMagfldOption->Select(4); break;
291 default: fMagfldOption->Select(5); break;
292 }
293
300
303
304 if (fInit)
306 SetActive();
307}
308
309////////////////////////////////////////////////////////////////////////////////
310/// Edit selected material.
311
313{
315}
316
317////////////////////////////////////////////////////////////////////////////////
318/// Slot for medium name.
319
321{
322 const char *name = fMedName->GetText();
323 if (!name[0] || !strcmp(name, fMedium->GetName()))
324 return;
326}
327
328////////////////////////////////////////////////////////////////////////////////
329/// Slot for medium id.
330
332
333////////////////////////////////////////////////////////////////////////////////
334/// Select the material component.
335
337{
339 new TGeoMaterialDialog(fBSelMaterial, gClient->GetRoot(), 200, 300);
343 else
344 fSelectedMaterial = material;
345}
346
347////////////////////////////////////////////////////////////////////////////////
348/// Slot for sensitivity.
349
351{
353}
354
355////////////////////////////////////////////////////////////////////////////////
356/// Slot for mag. field.
357
359{
361}
362
363////////////////////////////////////////////////////////////////////////////////
364/// Slot for max field.
365
367{
369}
370
371////////////////////////////////////////////////////////////////////////////////
372/// Slot for tmaxfd.
373
375{
377}
378
379////////////////////////////////////////////////////////////////////////////////
380/// Slot for the max allowed step.
381
383{
385}
386
387////////////////////////////////////////////////////////////////////////////////
388/// Slot for the maximum allowed dedx.
389
391{
393}
394
395////////////////////////////////////////////////////////////////////////////////
396/// Slot for tracking precision.
397
399{
401}
402
403////////////////////////////////////////////////////////////////////////////////
404/// Slot for min. step.
405
407{
409}
410
411////////////////////////////////////////////////////////////////////////////////
412/// Slot for applying modifications.
413
415{
416 if (!fIsModified)
417 return;
418 Double_t isvol = (fMedSensitive->IsOn()) ? 1 : 0;
420 if (ifield > 0) {
421 ifield -= 1.;
422 if (ifield < 1.)
423 ifield -= 1.;
424 }
425 Double_t fieldm = fMedFieldm->GetNumber();
426 Double_t tmaxfd = fMedTmaxfd->GetNumber();
427 Double_t stemax = fMedStemax->GetNumber();
428 Double_t deemax = fMedDeemax->GetNumber();
429 Double_t epsil = fMedEpsil->GetNumber();
430 Double_t stmin = fMedStmin->GetNumber();
431
432 fMedium->SetParam(0, isvol);
433 fMedium->SetParam(1, ifield);
434 fMedium->SetParam(2, fieldm);
435 fMedium->SetParam(3, tmaxfd);
436 fMedium->SetParam(4, stemax);
437 fMedium->SetParam(5, deemax);
438 fMedium->SetParam(6, epsil);
439 fMedium->SetParam(7, stmin);
440 if (strcmp(fMedium->GetName(), fMedName->GetText()))
442 if (fMedium->GetId() != fMedId->GetIntNumber())
444}
445
446////////////////////////////////////////////////////////////////////////////////
447/// Slot for undoing last operation.
448
@ kChildFrame
Definition GuiTypes.h:379
@ kRaisedFrame
Definition GuiTypes.h:384
@ kSunkenFrame
Definition GuiTypes.h:383
@ kVerticalFrame
Definition GuiTypes.h:381
@ kDoubleBorder
Definition GuiTypes.h:385
@ kFixedWidth
Definition GuiTypes.h:387
@ kFitWidth
Definition GuiTypes.h:386
@ kHorizontalFrame
Definition GuiTypes.h:382
@ kOwnBackground
Definition GuiTypes.h:391
ULong_t Pixel_t
Pixel value.
Definition GuiTypes.h:40
int Int_t
Definition RtypesCore.h:45
constexpr Bool_t kFALSE
Definition RtypesCore.h:101
constexpr Bool_t kTRUE
Definition RtypesCore.h:100
#define ClassImp(name)
Definition Rtypes.h:377
@ kButtonDown
Definition TGButton.h:54
@ kButtonUp
Definition TGButton.h:53
#define gClient
Definition TGClient.h:156
@ kLHintsRight
Definition TGLayout.h:26
@ kLHintsExpandY
Definition TGLayout.h:31
@ kLHintsLeft
Definition TGLayout.h:24
@ kLHintsTop
Definition TGLayout.h:27
@ kLHintsExpandX
Definition TGLayout.h:30
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t width
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
char name[80]
Definition TGX11.cxx:110
ETGeoMediumWid
@ kMED_SENS
@ kMED_MATSEL
@ kMED_TMAX
@ kMED_UNDO
@ kMED_STMIN
@ kMED_APPLY
@ kMED_CANCEL
@ kMED_STEMAX
@ kMED_ID
@ kMED_FLDOPT
@ kMED_EPSIL
@ kMED_FIELDM
@ kMED_EDIT_MAT
@ kMED_NAME
@ kMED_DEEMAX
virtual void SetToolTipText(const char *text, Long_t delayms=400)
Set tool tip text associated with this button.
Definition TGButton.cxx:445
virtual void SetEnabled(Bool_t e=kTRUE)
Set enabled or disabled state of button.
Definition TGButton.cxx:459
Selects different options.
Definition TGButton.h:264
Bool_t IsOn() const override
Definition TGButton.h:310
void SetState(EButtonState state, Bool_t emit=kFALSE) override
Set check button state.
const TGPicture * GetPicture(const char *name)
Get picture from the picture pool.
Definition TGClient.cxx:289
A combobox (also known as a drop down listbox) allows the selection of one item out of a list of item...
Definition TGComboBox.h:47
virtual Int_t GetSelected() const
Definition TGComboBox.h:114
virtual void AddEntry(TGString *s, Int_t id)
Definition TGComboBox.h:86
virtual void Select(Int_t id, Bool_t emit=kTRUE)
Make the selected item visible in the combo box window and emit signals according to the second param...
virtual Int_t GetNumberOfEntries() const
Definition TGComboBox.h:107
The base class for composite widgets (menu bars, list boxes, etc.).
Definition TGFrame.h:287
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=nullptr)
Add frame to the composite frame using the specified layout hints.
Definition TGFrame.cxx:1117
virtual TList * GetList() const
Definition TGFrame.h:310
virtual void Cleanup()
Cleanup and delete all objects contained in this composite frame.
Definition TGFrame.cxx:967
static TClass * Class()
TGFrame * fFrame
Definition TGLayout.h:112
virtual void ChangeOptions(UInt_t options)
Change frame options. Options is an OR of the EFrameTypes.
Definition TGFrame.cxx:321
void Resize(UInt_t w=0, UInt_t h=0) override
Resize the frame.
Definition TGFrame.cxx:605
virtual UInt_t GetDefaultHeight() const
Definition TGFrame.h:191
TClass * IsA() const override
Definition TGFrame.h:283
A horizontal 3D line is a line that typically separates a toolbar from the menubar.
Definition TG3DLine.h:18
static TClass * Class()
This class handles GUI labels.
Definition TGLabel.h:24
virtual void SetTextColor(Pixel_t color, Bool_t global=kFALSE)
Changes text color.
Definition TGLabel.cxx:362
virtual void SetText(TGString *newText)
Set new text in label.
Definition TGLabel.cxx:180
This class describes layout hints used by the layout classes.
Definition TGLayout.h:50
TGNumberEntry is a number entry input widget with up/down buttons.
TGNumberEntryField * GetNumberEntry() const
Get the number entry field.
void Associate(const TGWindow *w) override
Make w the window that will receive the generated messages.
virtual Long_t GetIntNumber() const
virtual Double_t GetNumber() const
virtual void SetNumber(Double_t val, Bool_t emit=kTRUE)
UInt_t GetDefaultHeight() const override
TGClient * fClient
Connection to display server.
Definition TGObject.h:25
Yield an action as soon as it is clicked.
Definition TGButton.h:228
Yield an action as soon as it is clicked.
Definition TGButton.h:142
A TGTextEntry is a one line text input widget.
Definition TGTextEntry.h:24
virtual void SetDefaultSize(UInt_t w, UInt_t h)
Set the default / minimal size of the widget.
const char * GetText() const
virtual void SetToolTipText(const char *text, Long_t delayms=500)
Set tool tip text associated with this text entry.
virtual void SetText(const char *text, Bool_t emit=kTRUE)
Sets text entry to text, clears the selection and moves the cursor to the end of the line.
static TClass * Class()
virtual void Associate(const TGWindow *w)
Definition TGWidget.h:72
ROOT GUI Window base class.
Definition TGWindow.h:23
Bool_t fInit
init flag for setting signals/slots
Definition TGedFrame.h:47
virtual void MakeTitle(const char *title)
Create attribute frame title.
Definition TGedFrame.cxx:95
Common base class for geombuilder editors.
virtual void SetActive(Bool_t active=kTRUE)
Set active GUI attribute frames related to the selected object.
TGeoTabManager * fTabMgr
Base class describing materials.
Editor class for TGeo tracking media.
TGComboBox * fMagfldOption
void SetModel(TObject *obj) override
Connect to the selected object.
~TGeoMediumEditor() override
Destructor.
TGNumberEntry * fMedFieldm
void DoMedName()
Slot for medium name.
void DoUndo()
Slot for undoing last operation.
void DoEditMaterial()
Edit selected material.
TGTextButton * fUndo
TGNumberEntry * fMedStemax
void DoStmin()
Slot for min. step.
void DoMedId()
Slot for medium id.
TGTextButton * fApply
TGeoMediumEditor(const TGWindow *p=nullptr, Int_t width=140, Int_t height=30, UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground())
Constructor for medium editor.
void DoEpsil()
Slot for tracking precision.
void DoMagfldSelect(Int_t ientry)
Slot for mag. field.
void DoToggleSensitive()
Slot for sensitivity.
void DoApply()
Slot for applying modifications.
TGPictureButton * fBSelMaterial
TGeoMedium * fMedium
TGNumberEntry * fMedDeemax
void DoSelectMaterial()
Select the material component.
void DoTmaxfd()
Slot for tmaxfd.
TGNumberEntry * fMedStmin
void DoStemax()
Slot for the max allowed step.
void DoDeemax()
Slot for the maximum allowed dedx.
void DoFieldm()
Slot for max field.
TGNumberEntry * fMedId
TGNumberEntry * fMedTmaxfd
TGeoMaterial * fSelectedMaterial
TGNumberEntry * fMedEpsil
virtual void ConnectSignals2Slots()
Connect signals to slots.
TGTextButton * fEditMaterial
TGTextEntry * fMedName
TGCheckButton * fMedSensitive
Media are used to store properties related to tracking and which are useful only when using geometry ...
Definition TGeoMedium.h:23
void SetId(Int_t id)
Definition TGeoMedium.h:51
Int_t GetId() const
Definition TGeoMedium.h:45
void SetParam(Int_t i, Double_t val)
Definition TGeoMedium.h:47
static TClass * Class()
TGeoMaterial * GetMaterial() const
Definition TGeoMedium.h:49
Double_t GetParam(Int_t i) const
Definition TGeoMedium.h:46
void GetMaterialEditor(TGeoMaterial *material)
Get editor for a material.
static void Cleanup(TGCompositeFrame *frame)
Static method to cleanup hierarchically all daughters of a composite frame.
static TObject * GetSelected()
static; return selected object
const char * GetName() const override
Returns name of object.
Definition TNamed.h:47
virtual void SetName(const char *name)
Set the name of the TNamed.
Definition TNamed.cxx:140
Mother of all ROOT objects.
Definition TObject.h:41
virtual const char * ClassName() const
Returns name of class to which the object belongs.
Definition TObject.cxx:207
virtual TClass * IsA() const
Definition TObject.h:245
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
Non-static method is used to connect from the signal of this object to the receiver slot.
Definition TQObject.cxx:869
TF1 * f1
Definition legend1.C:11