40 res.Form(
"CutG_%d",cnt++);
41 }
while (gROOT->GetListOfSpecials()->FindObject(res)!=0);
98 if(
fxCut==0)
return 0;
99 Int_t n=
fxCut->GetN();
100 Double_t* xarr=
fxCut->GetX();
101 fxCut->SetBit(kMustCleanup,0);
102 Int_t nxmin=TMath::LocMin(n,xarr);
103 return (xarr[nxmin]);
107 if(
fxCut==0)
return 0;
108 Int_t n=
fxCut->GetN();
109 Double_t* xarr=
fxCut->GetX();
110 Int_t nxmax=TMath::LocMax(n,xarr);
111 return (xarr[nxmax]);
115 if(
fxCut==0)
return 0;
116 Int_t n=
fxCut->GetN();
117 Double_t* yarr=
fxCut->GetY();
118 Int_t nymin=TMath::LocMin(n,yarr);
119 return (yarr[nymin]);
123 if(
fxCut==0)
return 0;
124 Int_t n=
fxCut->GetN();
125 Double_t* yarr=
fxCut->GetY();
126 Int_t nymax=TMath::LocMax(n,yarr);
127 return (yarr[nymax]);
139 TCutG* tempcut =
fxCut;
152 TCutG * tempcut = source->
GetCut(
false);
156 TCutG* ret= (TCutG *)tempcut->Clone(GetName());
166 if(newcut==0)
return;
167 #ifdef POLYCOND_UPDATE_WITHCLONE
171 fxCut = (TCutG*) newcut->Clone(GetName());
172 fxCut->SetBit(kCanDelete,kFALSE);
175 Int_t pn = newcut->GetN();
178 fxCut =
new TCutG(GetName(),pn);
179 fxCut->SetBit(kMustCleanup);
188 for(Int_t i=0; i<pn; ++i) {
189 newcut->GetPoint(i,xp,yp);
190 fxCut->SetPoint(i,xp,yp);
196 SetLineColor(newcut->GetLineColor());
197 SetLineWidth(newcut->GetLineWidth());
198 SetLineStyle(newcut->GetLineStyle());
199 SetFillColor(newcut->GetFillColor());
200 SetFillStyle(newcut->GetFillStyle());
207 if(newcut==0)
return;
212 fxCut->SetName(GetName());
215 SetLineColor(newcut->GetLineColor());
216 SetLineWidth(newcut->GetLineWidth());
217 SetLineStyle(newcut->GetLineStyle());
218 SetFillColor(newcut->GetFillColor());
219 SetFillStyle(newcut->GetFillStyle());
231 fxCut =
new TCutG(GetName(), len, x, y);
232 fxCut->SetBit(kMustCleanup);
246 Bool_t outside = (
fxCut->IsInside(x,y) == 0);
257 std::cout <<
"No polygon specified!" << std::endl;
274 if(cond->InheritsFrom(TGo4PolyCond::Class()))
277 #ifdef POLYCOND_UPDATE_WITHCLONE
285 if(old != 0)
delete old;
296 TCutG * srccut = source->
GetCut(
false);
299 if(srccut==0)
return kFALSE;
301 Int_t pn = srccut->GetN();
305 for(Int_t i=0; i<pn; ++i) {
306 srccut->GetPoint(i,xp,yp);
307 fxCut->SetPoint(i,xp,yp);
319 std::cout <<
"Cannot update " << GetName() <<
" from " << cond->ClassName() << std::endl;
329 message.Form(
"TGo4PolyCond::UpdateFromUrl - condition %s: with url:%s", GetName(), rest_url_opt);
339 Double_t* X =
new Double_t[npoints];
340 Double_t* Y =
new Double_t[npoints];
341 for(Int_t i=0; i<npoints;++i) {
346 message.Form(
" i:%d, X=%f, Y=%f\n",i,X[i],Y[i]);
349 delete[] X;
delete[] Y;
351 message.Form(
" - setting Polygon condition to new values!");
363 #if ROOT_VERSION_CODE >= ROOT_VERSION(5,25,1)
364 return (
fxCut->IntegralHist(dynamic_cast<TH2*>(histo),opt));
366 return (
fxCut->Integral(dynamic_cast<TH2*>(histo),opt));
407 Int_t maxbin =
fxCutHis->GetMaximumBin();
408 Int_t xmaxbin = maxbin % (
fxCutHis->GetNbinsX() + 2);
409 return xax->GetBinCenter(xmaxbin);
418 Int_t maxbin =
fxCutHis->GetMaximumBin();
419 Int_t maxybin = maxbin / (
fxCutHis->GetNbinsX() + 2);
420 return yax->GetBinCenter(maxybin);
438 if (painter->InheritsFrom(TGo4PolyCondPainter::Class())) {
444 TGo4Log::Warn(
"Could not set painter of class %s for TGo4PolyCond %s", painter->ClassName(), GetName());
463 TH2 *his =
dynamic_cast<TH2 *
>(source);
470 TAxis *xaxis =
fxCutHis->GetXaxis();
471 TAxis *yaxis =
fxCutHis->GetYaxis();
472 xaxis->SetRange(0, 0);
473 yaxis->SetRange(0, 0);
475 for (Int_t i = 0; i < nx; ++i) {
476 Double_t x = xaxis->GetBinCenter(i);
477 for (Int_t j = 0; j < ny; ++j) {
478 Double_t y = yaxis->GetBinCenter(j);
498 TSeqCollection* specials=gROOT->GetListOfSpecials();
499 TIter iter(specials);
501 while((ob = iter())!=0) {
502 if(ob->InheritsFrom(TCutG::Class())) {
503 specials->Remove(ob);
511 Int_t size =
sizeof(*this);
512 if (GetName()!=0) size+=strlen(GetName());
513 if (GetTitle()!=0) size+=strlen(GetTitle());
515 size +=
sizeof(*fxCut);
516 #if ROOT_VERSION_CODE > ROOT_VERSION(4,0,8)
517 size +=
fxCut->GetMaxSize()*2*
sizeof(Double_t);
519 size +=
fxCut->GetN()*2*
sizeof(Double_t);
528 TString line, varname =
MakeScript(out, Form(
"polycond%d", cnt++), opt);
531 line.Form(
" %s->SetValues(0, 0, 0);", varname.Data());
533 TString xname = varname;
534 xname.ReplaceAll(
"->At(",
"_sub");
535 xname.ReplaceAll(
")",
"");
536 TString yname = xname +
"_y";
537 xname = xname +
"_x";
538 line.Form(
" Double_t %s[%d], %s[%d];", xname.Data(),
fxCut->GetN(), yname.Data(),
fxCut->GetN());
539 out << line << std::endl;
540 for (Int_t n=0;n<
fxCut->GetN();n++) {
542 fxCut->GetPoint(n, x, y);
543 line.Form(
" %s[%d] = %f; %s[%d] = %f;", xname.Data(), n, x, yname.Data(), n, y);
544 out << line << std::endl;
546 line.Form(
" %s->SetValues(%s, %s, %d);", varname.Data(), xname.Data(), yname.Data(),
fxCut->GetN());
549 out << line << std::endl;
virtual void PrintCondition(Bool_t points=kTRUE)
Bool_t UrlOptionHasKey(const char *key)
static TString fgxURL_XPRE
virtual Double_t GetXUp()
virtual Bool_t UpdateFrom(TGo4Condition *cond, Bool_t counts)
virtual Double_t GetIntegral(TH1 *histo, Option_t *opt="")
virtual Int_t GetMemorySize()
static TString NextAvailableName()
virtual Bool_t IsPolygonType()
virtual void PrintCondition(Bool_t full=kTRUE)
static void Warn(const char *text,...)
TCutG * CloneCut(TGo4PolyCond *source)
void SetValuesDirect(TCutG *newcut)
Bool_t IsCutHis(TH1 *source)
virtual Double_t GetYMax(TH1 *histo)
static void CleanupSpecials()
virtual void SetWorkHistogram(TH1 *histo)
virtual Double_t GetXMax(TH1 *histo)
Bool_t FixedResult() const
virtual Double_t GetRMS(TH1 *histo, Int_t axis=1)
TCutG * GetCut(Bool_t changeowner)
static TString fgxURL_YPRE
virtual Double_t GetYUp()
virtual Double_t GetSkewness(TH1 *histo, Int_t axis=1)
virtual Bool_t UpdateFromUrl(const char *rest_url_opt)
virtual Bool_t UpdateFromUrl(const char *rest_url_opt)
virtual void SetPainter(TGo4ConditionPainter *painter)
virtual Double_t GetCurtosis(TH1 *histo, Int_t axis=1)
virtual void SetWorkHistogram(TH1 *histo)
static const char * Message(Int_t prio, const char *text,...)
virtual void SetCondition(TGo4Condition *con)
const char * MakeScript(std::ostream &out, const char *varname, Option_t *opt="", const char *arrextraargs=0)
virtual void SavePrimitive(std::ostream &fs, Option_t *="")
Bool_t UpdateFrom(TGo4Condition *cond, Bool_t counts)
TGo4ConditionPainter * fxPainter
virtual TGo4ConditionPainter * CreatePainter()
Int_t GetUrlOptionAsInt(const char *key, Int_t def_value)
virtual Double_t GetCMax(TH1 *histo)
static TString fgxURL_NPOINTS
virtual Double_t GetXLow()
Double_t GetUrlOptionAsDouble(const char *key, Double_t def_value)
void SetDimension(Int_t d)
virtual Double_t GetYLow()
virtual Double_t GetMean(TH1 *histo, Int_t axis=1)