47 fCanvas =
new KVCanvas(
"c123", 10, 10, wfRootEmbeddedCanvas615);
49 fCanvas->SetRightMargin(0.02);
50 fCanvas->SetTopMargin(0.02);
51 fCanvas->SetLeftMargin(0.08);
52 fCanvas->SetBottomMargin(0.07);
67 const char* xpms[] = {
74 "bld_colorselect.png",
80 const char* tips[] = {
81 "Save intervals in current grid",
82 "Create a new interval",
83 "Create a new interval set",
84 "Remove selected intervals",
88 "Set log scale on y axis",
89 "Unzoom the histogram",
104 const char* method[] = {
118 fToolBar =
new TGToolBar(fControlOscillo, 450, 80);
126 TGButton* bb = fToolBar->AddButton(fControlOscillo, &t[i], spacing[i]);
127 bb->
Connect(
"Clicked()",
"KVItvFinderDialog",
this, method[i]);
134 fCustomView =
new KVListView(interval_set::Class(), fControlOscillo, 450, 200);
135 fCustomView->SetDataColumns(3);
136 fCustomView->SetDataColumn(0,
"Z",
"GetZ",
kTextLeft);
137 fCustomView->SetDataColumn(1,
"PIDs",
"GetNPID",
kTextCenterX);
138 fCustomView->SetDataColumn(2,
"Masses",
"GetListOfMasses",
kTextLeft);
140 fCustomView->Connect(
"SelectionChanged()",
"KVItvFinderDialog",
this,
"DisplayPIDint()");
141 fCustomView->SetDoubleClickAction(
"KVItvFinderDialog",
this,
"ZoomOnCanvas()");
142 fCustomView->AllowContextMenu(
kFALSE);
146 fCurrentView =
new KVListView(interval::Class(), fControlOscillo, 450, 180);
147 fCurrentView->SetDataColumns(5);
148 fCurrentView->SetDataColumn(0,
"Z",
"GetZ",
kTextLeft);
149 fCurrentView->SetDataColumn(1,
"A",
"GetA",
kTextCenterX);
150 fCurrentView->SetDataColumn(2,
"min",
"GetPIDmin",
kTextCenterX);
151 fCurrentView->SetDataColumn(3,
"pid",
"GetPID",
kTextCenterX);
152 fCurrentView->SetDataColumn(4,
"max",
"GetPIDmax",
kTextCenterX);
157 const char* xpms[] = {
162 const char* tips[] = {
172 const char* method[] = {
179 fToolBar2 =
new TGToolBar(fControlOscillo, 450, 80);
187 TGButton* bb = fToolBar2->AddButton(fControlOscillo, &t[i], spacing[i]);
188 bb->
Connect(
"Clicked()",
"KVItvFinderDialog",
this, method[i]);
196 fCurrentView->Connect(
"SelectionChanged()",
"KVItvFinderDialog",
this,
"SelectionITVChanged()");
198 fCurrentView->AllowContextMenu(
kFALSE);
206 fMain->MapSubwindows();
207 fMain->Resize(fMain->GetDefaultSize());
210 fMain->CenterOnParent();
212 fMain->SetWindowName(
"Masses Identification");
219 fLinearHisto->SetLineColor(
kBlack);
220 fLinearHisto->SetFillColor(
kGreen + 1);
221 fLinearHisto->Draw(
"hist");
223 int tmp[30] = {3, 3, 3, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6};
224 for (
int ii = 0; ii < 30; ii++) fNpeaks[ii] = tmp[ii];
254 if (nSelected == 1) {
276 if (!painter)
Info(
"SelectionITVChanged",
"%d %d not found...", zz, aa);
291 if (nSelected == 1) {
310 tmp->
Execute(
"SetDisplayLabel",
"1");
347 dummy->Connect(
"IntMod()",
"KVItvFinderDialog",
this,
"UpdatePIDList()");
358 for (
int ii = 0; ii < itvs->
GetNPID(); ii++) {
392 if (poids == 0)
continue;
399 if (x0 < 4)
continue;
403 Double_t weight = (kmax == 20 ? poids / 20. : 1.);
404 for (
int k = 0; k < kmax; k++) {
408 fGrid->KVIDZAGrid::Identify(
x,
y, &idr);
446 for (
int ii = 0; ii < list->
GetSize(); ii++) {
468 const char* filetypes[] = {
469 "ID Grid files",
"*.dat",
480 if (!filenam.
Contains(
'.')) filenam +=
".dat";
504 if (!itvs->
GetNPID())
continue;
512 if (!itvs->
GetNPID())
continue;
543 double pid =
mm->GetX();
548 aa = itvs->
GetZ() * 2;
560 for (
int ii = 1; ii < itvs->
GetNPID(); ii++) {
579 dummy->Connect(
"IntMod()",
"KVItvFinderDialog",
this,
"UpdatePIDList()");
615 if (nSelected == 1) {
621 if (nSelected >= 1) {
622 for (
int ii = 0; ii < nSelected; ii++) {
636 else if (nSelected > 1) {
637 for (
int ii = 0; ii < nSelected; ii++) {
655 if (nSelected == 1) {
662 if (nSelected == 1) {
673 if (nSelected >= 1) {
674 for (
int ii = 0; ii < nSelected; ii++) {
697 if (nSelected == 1) {
703 if (nSelected == 1) {
714 if (nSelected >= 1) {
715 for (
int ii = 0; ii < nSelected; ii++) {
738 if (nSelected == 1) {
810 #if ROOT_VERSION_CODE > ROOT_VERSION(5,99,01)
823 int zrefs[] = {1, 4, 7, 9, 11, 12, 15, 16, 19, 21, 23, 25, 27, 29, 31, 34, 35, 38, 40, 42, 44, 47, 49, 51, 53};
824 int zref = zrefs[zz - 1];
827 for (
int p = 0; p < nfound; p++) {
828 if (abs(xpeaks[idx[p]] - xpeaks[0]) < .0001) idref = p;
830 Info(
"FindPIDIntervals",
"Z=%d : idref = %d ", zz, idref);
832 for (
int p = 0; p < nfound; p++) {
834 double pid = xpeaks[idx[p]];
835 itvs->
add(zref + (p - idref), pid, pid - 0.05, pid + 0.05);
849 for (
Int_t p = 0; p < np; p++) {
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
R__EXTERN TRandom * gRandom
char * Form(const char *fmt,...)
char * StrDup(const char *str)
R__EXTERN TStyle * gStyle
TCanvas with mouse-controlled dynamic zoom and pan & scan.
virtual Bool_t IsIdentifiable(Double_t, Double_t, TString *rejected_by=nullptr) const
const Char_t * GetName() const
void WriteAsciiFile(const Char_t *filename)
Open, write and close ascii file containing this grid.
KVNameValueList * GetParameters() const
KVList * GetIdentifiers() const
Hybrid identification grid.
interval_set * GetIntervalSet(int zint) const
void SetOnlyZId(Bool_t=kTRUE)
KVList * GetIntervalSets()
Base class for graphical cuts used in particle identification.
virtual Double_t GetPID() const
Full result of one attempted particle identification.
Double_t PID
= "real" Z if Zident==kTRUE and Aident==kFALSE, "real" A if Zident==Aident==kTRUE
Bool_t HasFlag(std::string grid_name, TString flag)
GUI for finding/fixing mass identification intervals.
void DrawInterval(interval_set *itvs, bool label=0)
void DisplayPIDint()
DrawIntervals();.
void ClearInterval(interval_set *itvs)
void ProcessIdentification(Int_t zmin=-1, Int_t zmax=-1)
void Identify()
KVBase::OpenContextMenu("Identify(double,double)",this);.
KVListView * fCurrentView
void DrawIntervals()
fCanvas->cd();
void FindPIDIntervals(Int_t zz)
TSpectrum fSpectrum
KVPIDIntervalFinder* fPIDFinder;.
void SelectionITVChanged()
void TestIdent()
fGrid->SetOnlyZId(0);
virtual ~KVItvFinderDialog()
Destructor.
void LinearizeHisto(int nbins)
Double_t fpeaks(Double_t *x, Double_t *par)
Enhanced version of ROOT TGListView widget.
virtual void Display(const TCollection *l)
TObject * GetLastSelectedObject() const
TList * GetSelectedObjects() const
Extended TList class which owns its objects by default.
void SetValue(const Char_t *name, value_type value)
Strings used to represent a set of ranges of values.
const Char_t * AsString(Int_t maxchars=0) const
void Add(Int_t)
Add value 'n' to the list.
Used for mass identification GUI.
virtual void Draw(Option_t *option="")
void SetDisplayLabel(bool dis=true)
void HighLight(bool hi=true)
void SetCanvas(KVCanvas *cc)
KVSeqCollection * GetSubListWithMethod(const Char_t *retvalue, const Char_t *method) const
virtual TObject * Last() const
virtual void Clear(Option_t *option="")
virtual Int_t GetSize() const
virtual TObject * At(Int_t idx) const
virtual TObject * First() const
virtual void Execute(const char *method, const char *params, Int_t *error=0)
virtual void Add(TObject *obj)
virtual void AddAt(TObject *obj, Int_t idx)
virtual TObject * Remove(TObject *obj)
Remove object from list.
virtual TObject * FindObject(const char *name) const
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
GUI for testing identification grids.
virtual void SetMarkerStyle(Style_t mstyle=1)
virtual Double_t GetBinCenter(Int_t bin) const
virtual void SetRangeUser(Double_t ufirst, Double_t ulast)
virtual Double_t GetBinWidth(Int_t bin) const
virtual Int_t GetSize() const
virtual void AddFrame(TGFrame *f, TGLayoutHints *l=0)
virtual Int_t GetNbinsY() const
virtual Int_t GetNbinsX() const
virtual Int_t Fill(const char *name, Double_t w)
virtual void SetAxisRange(Double_t xmin, Double_t xmax, Option_t *axis="X")
virtual Double_t GetBinContent(Int_t bin) const
virtual void Add(TObject *obj)
TObject * Remove(const TObjLinkPtr_t &lnk)
virtual TObject * At(Int_t idx) const
virtual TObject * Last() const
void Modified(Bool_t flag=1) override
void SetLogy(Int_t value=1) override
Int_t GetLogy() const override
TList * GetListOfPrimitives() const override
Bool_t Connect(const char *signal, const char *receiver_class, void *receiver, const char *slot)
virtual Double_t Uniform(Double_t x1, Double_t x2)
void AdoptCanvas(TCanvas *c)
Int_t GetCanvasWindowId() const
virtual Int_t Search(const TH1 *hist, Double_t sigma=2, Option_t *option="", Double_t threshold=0.05)
Double_t * GetPositionX() const
const char * Data() const
TString & Remove(EStripType s, char c)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
TString & ReplaceAll(const char *s1, const char *s2)
void SetOptTitle(Int_t tit=1)
void SetOptStat(Int_t stat=1)
virtual TList * GetListOfPrimitives() const=0
virtual TObject * WaitPrimitive(const char *pname="", const char *emode="")=0
virtual TVirtualPad * cd(Int_t subpadnumber=0)=0
void add(int aa, double pid, double pidmin=-1., double pidmax=-1.)
Double_t Min(Double_t a, Double_t b)
Double_t Gaus(Double_t x, Double_t mean=0, Double_t sigma=1, Bool_t norm=kFALSE)
void Sort(Index n, const Element *a, Index *index, Bool_t down=kTRUE)