115 const char *varexp0 = obj ? obj->
GetTitle() :
"";
117 const char *selection = obj ? obj->
GetTitle() :
"";
121 char *hdefault = (
char *)
"htemp";
122 char *varexp =
nullptr;
143 if (opt.
Contains(
"entrylistarray")) {
144 optEnlistArray =
kTRUE;
162 TCut realSelection(selection);
166 if (evlist && inElist) {
181 realSelection *= inElist->
GetTitle();
195 if (optSame) canExtend =
kFALSE;
197 Int_t nbinsx = 0, nbinsy = 0, nbinsz = 0;
202 char *hnamealloc = 0;
204 if (varexp0 && strlen(varexp0)) {
205 for (
UInt_t k = strlen(varexp0) - 1; k > 0; k--) {
206 if (varexp0[k] ==
'>' && varexp0[k-1] ==
'>') {
207 i = (int)(&(varexp0[k-1]) - varexp0);
208 hnamealloc =
new char[strlen(&(varexp0[k+1])) + 1];
210 strcpy(hname, &(varexp0[k+1]));
218 varexp =
new char[i+1];
221 while (*hname ==
' ') hname++;
225 while (*hname ==
' ') hname++;
227 j = strlen(hname) - 1;
229 if (hname[j] !=
' ')
break;
235 strlcpy(varexp,varexp0,i+1);
237 Int_t mustdelete = 0;
254 const Int_t maxvalues = 9;
256 pstart = strchr(hname,
'(');
257 pend = strchr(hname,
')');
263 if (pstart == strrchr(hname,
'(') && pend == strrchr(hname,
')')) {
268 cdummy = strchr(&cdummy[1],
',');
269 while (cdummy != 0) {
270 cdummy = strchr(&cdummy[1],
',');
274 if (ncomma + 1 > maxvalues) {
275 Error(
"DrawSelect",
"ncomma+1>maxvalues, ncomma=%d, maxvalues=%d", ncomma, maxvalues);
276 ncomma = maxvalues - 1;
284 for (j = 0; j < i; j++) {
286 && !((j > 0 && varexp[j-1] ==
':') || varexp[j+1] ==
':')
292 Error(
"DrawSelect",
"ncols > 3, ncols=%d", ncols);
297 if (ncols * 3 < ncomma) {
298 Error(
"DrawSelect",
"ncols*3 < ncomma ncols=%d, ncomma=%d", ncols, ncomma);
303 for (j = 0; j < ncomma; j++) {
305 if (sscanf(cdummy,
" %lf ", &value) == 1) {
306 cdummy = strchr(&cdummy[1],
',');
310 nbinsx = (
Int_t)value;
313 }
else if (ncols < 3) {
329 nbinsy = (
Int_t)value;
330 if (ncols < 3)
gEnv->
SetValue(
"Hist.Binning.2D.y", nbinsy);
343 nbinsz = (
Int_t)value;
353 Error(
"DrawSelect",
"j>8");
359 Error(
"Begin",
"Two open or close brackets found, hname=%s", hname);
366 j = strlen(hname) - 1;
368 if (hname[j] !=
' ')
break;
377 abrt.
Form(
"An object of type '%s' has the same name as the requested histo (%s)", oldObject->IsA()->
GetName(), hname);
386 Warning(
"Begin",
"Deleting old histogram, since (possibly new) limits and binnings have been given");
396 enlist = oldObject ?
dynamic_cast<TEntryList*
>(oldObject) : 0;
398 if (!enlist && oldObject) {
399 abrt.
Form(
"An object of type '%s' has the same name as the requested event list (%s)",
400 oldObject->IsA()->
GetName(), hname);
406 if (optEnlistArray) {
414 if (enlist == inElist) {
417 if (optEnlistArray) {
435 evlist = oldObject ?
dynamic_cast<TEventList*
>(oldObject) : 0;
437 if (!evlist && oldObject) {
438 abrt.
Form(
"An object of type '%s' has the same name as the requested event list (%s)",
439 oldObject->IsA()->
GetName(), hname);
451 Abort(
"Input and output lists are the same!");
469 const size_t varexpLen = strlen(varexp0) + 1;
470 varexp =
new char[varexpLen];
471 strlcpy(varexp, varexp0, varexpLen);
480 abrt.
Form(
"Variable compilation failed: {%s,%s}", varexp, realSelection.
GetTitle());
486 Abort(
"Too many variables. Use the option \"para\", \"gl5d\" or \"candle\" to display more than 4 variables.");
490 if (
fDimension < 2 && (optpara || optcandle)) {
491 Abort(
"The options \"para\" and \"candle\" require at least 2 variables.");
497 Int_t nsel = strlen(selection);
499 htitle.
Form(
"%s {%s}", varexp, selection);
505 Int_t mustdelete = 0;
516 if (!profile || olddim !=
fDimension) mustdelete = 1;
523 Warning(
"Begin",
"Deleting old histogram with different dimensions");
532 gROOT->MakeDefCanvas();
534 Abort(
"Creation of default canvas failed");
546 if (
gPad && optSame) {
550 while ((op = np()) && !oldhtemp) {
598 }
else if (
fDimension == 2 && !(optpara || optcandle)) {
605 TH1 *oldhtemp = (
TH1*)
gPad->FindObject(hdefault);
630 if (profile || opt.
Contains(
"prof")) {
645 TH1 *oldhtemp = (
TH1*)
gPad->FindObject(hdefault);
738 TH1 *oldhtemp = (
TH1*)
gPad->FindObject(hdefault);
752 Error(
"Begin",
"You cannot use option same when no 3D view exists");
855 h3 =
new TH3F(hname, htitle.
Data(),
fNbins[2],
fVmin[2],
fVmax[2],
fNbins[1],
fVmin[1],
fVmax[1],
fNbins[0],
fVmin[0],
fVmax[0]);
857 h3 =
new TH3D(hname, htitle.
Data(),
fNbins[2],
fVmin[2],
fVmax[2],
fNbins[1],
fVmin[1],
fVmax[1],
fNbins[0],
fVmin[0],
fVmax[0]);
886 Int_t noscat = strlen(option);
887 if (optSame) noscat -= 4;
904 }
else if (optcandle || optpara || opt5d) {
909 if (varexp)
delete[] varexp;
910 if (hnamealloc)
delete[] hnamealloc;
986 if (strlen(selection)) {
997 nch = strlen(varexp);
1016 std::vector<TString> varnames;
1024 for (i = 0; i < ncols; ++i) {
1108 for (
Int_t i = 0; i < oldsize; ++i)
1132 if (varexp[i] ==
':'
1133 && !((i > 0 && varexp[i-1] ==
':') || varexp[i+1] ==
':')
1138 names.push_back(varexp(prev, i - prev));
1142 if (varexp[i] ==
'?') {
1146 names.push_back(varexp(prev, varexp.
Length() - prev));
1147 return names.size();
1246 for (
Int_t i = 1; i < ndata; i++) {
1247 if (subList && !subList->
Contains(i))
continue;
1251 if (ww == 0)
continue;
1290 for (
Int_t i = 0; i < ndata; i++) {
1299 if (ww == 0)
continue;
1314 if (nextbit >= nbits)
break;
1325 "Not implemented for %s",
1326 cl ? cl->
GetName() :
"unknown class");
1351 delete []
fW;
fW = 0;
1378 enlist->
Enter(enumb);
1389 for (i = 0; i <
fNfill; i++) {
1428 for (i = 0; i <
fNfill; i++) {
1450 for (col = 0; col < ncolors; col++) {
1462 for (i = 0; i <
fNfill; i++) {
1464 if (col < 0) col = 0;
1465 if (col > ncolors - 1) col = ncolors - 1;
1470 for (col = 0; col < ncolors; col++) {
1497 for (col = 0; col < ncolors; col++) {
1502 pms->
AddAt(pm3d, col);
1508 for (i = 0; i <
fNfill; i++) {
1510 if (col > ncolors-1) col = ncolors-1;
1511 if (col < 0) col = 0;
1522 gROOT->ProcessLine(
TString::Format(
"TParallelCoord::BuildParallelCoord((TSelectorDraw*)0x%lx,0x%lx)",
1552 for (i = 0; i <
fValSize && i < 4; i++) {
1553 vminOld[i] =
fVmin[i];
1554 vmaxOld[i] =
fVmax[i];
1558 fVmax[i] = - DBL_MAX;
1564 for (i = 0; i <
fNfill; i++) {
1575 for (i = 0; i <
fNfill; i++) {
1588 for (i = 0; i <
fNfill; i++) {
1601 for (i = 0; i <
fNfill; i++) {
1677 if (vminOld[2] == DBL_MAX)
1679 for (i = 0; i <
fValSize && i < 4; i++) {
1680 fVmin[i] = vminOld[i];
1681 fVmax[i] = vmaxOld[i];
1683 for (i = 0; i <
fNfill; i++) {
1706 for (i = 0; i <
fNfill; i++) {
1715 for (i = 0; i <
fNfill; i++) {
1748 gPad->Range(-1, -1, 1, 1);
1755 for (i = 0; i <
fNfill; i++) {
1767 for (i = 0; i <
fNfill; i++) {
1782 for (i = 0; i <
fValSize && i < 4; i++) {
1783 fVmin[i] = vminOld[i];
1784 fVmax[i] = vmaxOld[i];
1786 for (i = 0; i <
fNfill; i++) {
1798 for (i = 0; i <
fNfill; i++) {
const Int_t kCustomHistogram
R__EXTERN TStyle * gStyle
virtual void SetTitleOffset(Float_t offset=1)
Set distance between the axis and the axis title.
virtual Float_t GetTitleOffset() const
virtual Color_t GetFillColor() const
Return the fill area color.
virtual Style_t GetFillStyle() const
Return the fill area style.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual Color_t GetLineColor() const
Return the line color.
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
virtual Width_t GetLineWidth() const
Return the line width.
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual Style_t GetLineStyle() const
Return the line style.
virtual Style_t GetMarkerStyle() const
Return the marker style.
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color.
virtual Color_t GetMarkerColor() const
Return the marker color.
virtual Size_t GetMarkerSize() const
Return the marker size.
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style.
virtual void SetMarkerSize(Size_t msize=1)
Set the marker size.
Class to manage histogram axis.
virtual Int_t FindFixBin(Double_t x) const
Find bin number corresponding to abscissa x.
virtual Double_t GetBinWidth(Int_t bin) const
Return bin width.
virtual Double_t GetBinUpEdge(Int_t bin) const
Return up edge of bin.
Int_t GetFirst() const
Return first bin on the axis i.e.
UInt_t FirstSetBit(UInt_t startBit=0) const
Return position of first non null bit (starting from position 0 and up)
TClass instances represent classes, structs and namespaces in the ROOT type system.
void SetName(const char *name)
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
static void InitializeColors()
Initialize colors used by the TCanvas based graphics (via TColor objects).
A specialized string object used for TTree selections.
A list of entries and subentries in a TTree or TChain.
virtual Bool_t Enter(Long64_t entry, TTree *tree, Long64_t subentry)
Add entry #entry (, #subentry) to the list.
virtual TEntryListArray * GetSubListForEntry(Long64_t entry, TTree *tree=0)
Return the list holding the subentries for the given entry or 0.
A List of entry numbers in a TTree or TChain.
virtual Int_t Contains(Long64_t entry, TTree *tree=0)
virtual Bool_t GetReapplyCut() const
virtual void Reset()
Reset this list.
virtual Bool_t Enter(Long64_t entry, TTree *tree=0)
Add entry #entry to the list.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=0)
Set the value of a resource or create a new resource.
A TEventList object is a list of selected events (entries) in a TTree.
virtual void Reset(Option_t *option="")
Reset number of entries in event list.
virtual Int_t GetIndex(Long64_t entry) const
Return index in the list of element with value entry array is supposed to be sorted prior to this cal...
virtual void Enter(Long64_t entry)
Enter element entry into the list.
A Graph is a graphics object made of two arrays X and Y with npoints each.
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set x and y values for point number i.
virtual void Draw(Option_t *chopt="")
Draw this graph with its current attributes.
virtual void SetEditable(Bool_t editable=kTRUE)
if editable=kFALSE, the graph cannot be modified with the mouse by default a TGraph is editable
1-D histogram with a double per channel (see TH1 documentation)}
1-D histogram with a float per channel (see TH1 documentation)}
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
virtual Int_t GetDimension() const
@ kNoStats
don't draw stats box
virtual Bool_t CanExtendAllAxes() const
Returns true if all axes are extendable.
virtual void Reset(Option_t *option="")
Reset this histogram: contents, errors, etc.
TAxis * GetXaxis()
Get the behaviour adopted by the object about the statoverflows. See EStatOverflows for more informat...
virtual void SetMaximum(Double_t maximum=-1111)
virtual void SetMinimum(Double_t minimum=-1111)
virtual UInt_t SetCanExtend(UInt_t extendBitMask)
Make the histogram axes extendable / not extendable according to the bit mask returns the previous bi...
TList * GetListOfFunctions() const
virtual TH1 * DrawCopy(Option_t *option="", const char *name_postfix="_copy") const
Copy this histogram and Draw in the current pad.
virtual void Draw(Option_t *option="")
Draw this histogram with options.
virtual void FillN(Int_t ntimes, const Double_t *x, const Double_t *w, Int_t stride=1)
Fill this histogram with an array x and weights w.
virtual void SetBins(Int_t nx, Double_t xmin, Double_t xmax)
Redefine x axis parameters.
virtual void Sumw2(Bool_t flag=kTRUE)
Create structure to store sum of squares of weights.
virtual void SetEntries(Double_t n)
virtual void SetStats(Bool_t stats=kTRUE)
Set statistics option on/off.
2-D histogram with a double per channel (see TH1 documentation)}
2-D histogram with a float per channel (see TH1 documentation)}
Service class for 2-Dim histogram classes.
Int_t Fill(Double_t)
Invalid Fill method.
3-D histogram with a double per channel (see TH1 documentation)}
3-D histogram with a float per channel (see TH1 documentation)}
The 3-D histogram classes derived from the 1-D histogram classes.
Int_t Fill(Double_t)
Invalid Fill method.
static THLimitsFinder * GetLimitsFinder()
Return pointer to the current finder.
virtual Int_t FindGoodLimits(TH1 *h, Double_t xmin, Double_t xmax)
Compute the best axis limits for the X axis.
virtual void Add(TObject *obj)
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name.
virtual void SetTitle(const char *title="")
Set the title of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
TObject * UncheckedAt(Int_t i) const
virtual TObject * Remove(TObject *obj)
Remove object from array.
virtual void AddAt(TObject *obj, Int_t idx)
Add object at position ids.
TObject * At(Int_t idx) const
Mother of all ROOT objects.
virtual const char * GetName() const
Returns name of object.
R__ALWAYS_INLINE Bool_t TestBit(UInt_t f) const
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Delete(Option_t *option="")
Delete this object.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual const char * GetTitle() const
Returns title of object.
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
@ kCanDelete
if object in a list can be deleted
void SetPoint(Int_t n, Double_t x, Double_t y, Double_t z)
Set point n to x, y, z.
virtual Int_t GetLastPoint() const
virtual void Draw(Option_t *option="")
Draws 3-D polymarker with its current attributes.
Profile2D histograms are used to display the mean value of Z and its RMS for each cell in X,...
Int_t Fill(const Double_t *v)
void FillN(Int_t, const Double_t *, const Double_t *, Int_t)
Fill this histogram with an array x and weights w.
A specialized TSelector for TTree::Draw.
TEntryListArray * fTreeElistArray
virtual void SetEstimate(Long64_t n)
Set number of entries to estimate variable limits.
virtual void InitArrays(Int_t newsize)
Initialization of the primitive type arrays if the new size is bigger than the available space.
Int_t fAction
Pointer to previously used histogram.
Int_t GetMultiplicity() const
TTreeFormulaManager * fManager
TTreeFormula * GetVar(Int_t i) const
Return the TTreeFormula corresponding to the i-th component of the request formula (where the compone...
Bool_t * fVarMultiple
[fSelectedRows]Local buffer for weights
virtual Bool_t CompileVariables(const char *varexp="", const char *selection="")
Compile input variables and selection expression.
TSelectorDraw()
Default selector constructor.
virtual void Terminate()
Called at the end of a loop on a TTree.
virtual UInt_t SplitNames(const TString &varexp, std::vector< TString > &names)
Build Index array for names in varexp.
Long64_t fCurrentSubEntry
TTreeFormula * fSelect
[fDimension] Array of pointers to variables formula
virtual void ClearFormula()
Delete internal buffers.
virtual ~TSelectorDraw()
Selector destructor.
virtual void TakeAction()
Execute action for object obj fNfill times.
Double_t fWeight
[fDimension] Maxima of varexp columns
Int_t fNfill
Last entry loop number when object was drawn.
virtual void ProcessFill(Long64_t entry)
Called in the entry loop for all entries accepted by Select.
TH1 * fOldHistogram
pointer to Tree Event list array
Double_t * fVmax
[fDimension] Minima of varexp columns
Int_t fMultiplicity
Total number of histogram fills.
virtual void ProcessFillMultiple(Long64_t entry)
Called in the entry loop for all entries accepted by Select.
virtual Double_t * GetVal(Int_t i) const
Return the last values corresponding to the i-th component of the formula being processed (where the ...
Long64_t fDraw
Action type.
Bool_t fSelectMultiple
[fDimension] true if fVar[i] has a variable index
Int_t fValSize
[fSelectedRows][fDimension] Local buffer for the variables
virtual void TakeEstimate()
Estimate limits for 1-D, 2-D or 3-D objects.
virtual void ProcessFillObject(Long64_t entry)
Called in the entry loop for all entries accepted by Select.
Double_t * fVmin
[fDimension] Number of bins per dimension
virtual void Begin(TTree *tree)
Called every time a loop on the tree(s) starts.
virtual Bool_t Notify()
This function is called at the first entry of a new tree in a chain.
virtual void SetStatus(Long64_t status)
TList * fInput
List of objects available during processing.
TString fOption
Option given to TTree::Process.
virtual const char * GetOption() const
virtual void Abort(const char *why, EAbort what=kAbortProcess)
Abort processing.
TObject * fObject
! Current object if processing object (vs. TTree)
virtual void ResetAbort()
void ToLower()
Change string to lower-case.
const char * Data() const
TString & ReplaceAll(const TString &s1, const TString &s2)
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Int_t GetColorPalette(Int_t i) const
Return color number i in current palette.
Int_t GetNumberOfColors() const
Return number of colors in the color palette.
A TTree represents a columnar dataset.
virtual Long64_t GetEstimate() const
virtual Double_t GetWeight() const
virtual TEntryList * GetEntryList()
Returns the entry list assigned to this tree.
virtual void SetEstimate(Long64_t nentries=1000000)
Set number of entries to estimate variable limits.
virtual Long64_t GetReadEntry() const
virtual TTree * GetTree() const
virtual void SetEntryList(TEntryList *list, Option_t *opt="")
Set an EntryList.
TEventList * GetEventList() const
virtual Int_t GetUpdate() const
virtual Long64_t GetChainOffset() const
virtual Double_t * GetRmax()=0
virtual Double_t * GetRmin()=0
static TView * CreateView(Int_t system=1, const Double_t *rmin=0, const Double_t *rmax=0)
Create a concrete default 3-d view via the plug-in manager.