Bug getting transparent color

ROOT Version: 6.24/06
Platform: Rocky Linux release 8.4
Compiler: gcc (GCC) 8.4.1

Hello together,

working with transparent colors I found an issue with the internal color array. Requesting multiple times the same non transparent color by rgb-float-values it results in the same color index. Doing this with a transparent color I always get a new color index. Please see example code:

#include <iostream>
#include "TColor.h"

int
main (int argc, char **argv)
{
  for (size_t i = 0; i < 10; ++i)
    {
      auto color = TColor::GetColor (0.0f, 0.0f, 0.0f);
      auto color_transparent = TColor::GetColorTransparent (color, 0.0f);
      auto free_color_idx = TColor::GetFreeColorIndex ();

      std::cout << "color=" << color << " color_transparent=" << color_transparent
                << " free_color_idx=" << free_color_idx << std::endl;
    }

  return 0;
}

I assume this behaviour results in use of == operator of the float-values in GetColorTransparent instead of a compare by a threshold (gColorThreshold).

Can you confirm this?

Bests,
Michael

Welcome to the ROOT forum

Thanks for your report. I’ll check.

It does not seem to behave as you said (with root master):

void mott()
{
  for (size_t i = 0; i < 10; ++i)
    {
      auto color = TColor::GetColor (0.0f, 0.0f, 0.0f);
      auto color_transparent = TColor::GetColorTransparent (color, 0.0f);
      auto free_color_idx    = TColor::GetFreeColorIndex ();

      std::cout << "color = " << color << " color_transparent = " << color_transparent
                << " free_color_idx = " << free_color_idx << std::endl;
    }
}

gives:

root [0] .x mott.C
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
root [1] 

Your ROOT version is old. I remember having fixed something like that.

Hi, thank you.

I will check it - sorry that I haven’t checked it against the master version.

Bests,
Michael

Just downloaded current version of ROOT and done the test again. Sadly I got another result.

   ------------------------------------------------------------------
  | Welcome to ROOT 6.26/06                        https://root.cern |
  | (c) 1995-2021, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for linuxx8664gcc on Sep 02 2022, 09:27:00                 |
  | From tag , 28 July 2022                                          |
  | With c++ (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1)                  |
  | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q'       |
   ------------------------------------------------------------------

root [0] .x mott.C
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1180 free_color_idx = 1181
color = 1 color_transparent = 1181 free_color_idx = 1182
color = 1 color_transparent = 1182 free_color_idx = 1183
color = 1 color_transparent = 1183 free_color_idx = 1184
color = 1 color_transparent = 1184 free_color_idx = 1185
color = 1 color_transparent = 1185 free_color_idx = 1186
color = 1 color_transparent = 1186 free_color_idx = 1187
color = 1 color_transparent = 1187 free_color_idx = 1188
color = 1 color_transparent = 1188 free_color_idx = 1189

Do you have any idea?

Bests,
Michael

I am using master. Ie: 6.27/01

I’ve tried it with the same version like you, but I still get a different output.

   ------------------------------------------------------------------
  | Welcome to ROOT 6.27/01                        https://root.cern |
  | (c) 1995-2021, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for linuxx8664gcc on Jan 07 2022, 07:52:00                 |
  | From remotes/origin/master@v6-25-02-9-g6cb82dd30e                |
  | With c++ (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1)                  |
  | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q'       |
   ------------------------------------------------------------------

root [0] .x mott.C
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1180 free_color_idx = 1181
color = 1 color_transparent = 1181 free_color_idx = 1182
color = 1 color_transparent = 1182 free_color_idx = 1183
color = 1 color_transparent = 1183 free_color_idx = 1184
color = 1 color_transparent = 1184 free_color_idx = 1185
color = 1 color_transparent = 1185 free_color_idx = 1186
color = 1 color_transparent = 1186 free_color_idx = 1187
color = 1 color_transparent = 1187 free_color_idx = 1188
color = 1 color_transparent = 1188 free_color_idx = 1189
root [1]

I don’t have a clue - do you have?

That’s really weird. I tried again:

% root mott.C
   ------------------------------------------------------------------
  | Welcome to ROOT 6.27/01                        https://root.cern |
  | (c) 1995-2022, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for macosx64 on Sep 05 2022, 08:03:42                      |
  | From heads/master@v6-25-02-2126-g9b9027a245                      |
  | With Apple clang version 13.1.6 (clang-1316.0.21.2.5)            |
  | Try '.help'/'.?', '.demo', '.license', '.credits', '.quit'/'.q'  |
   ------------------------------------------------------------------

root [0] 
Processing mott.C...
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
root [1] 

I am on Mac, bu that should not take any difference. That’s only array management. It should not be machine dependent. Do you have a rootlogon.C ? can you start root wit root -n ?

@couet I tried your “mott” on several Linux / x86_64 (gcc 11.2.0, 7.5.0, 4.8.5) systems with ROOT 6.26/06, 6.24/06, 6.22/08, 6.20/08, and 6.18/04, and I also always got different “free_color_idx” (I have no “rootlogon.C”).

@couet I found a rootlogon.C in tutorials directory.

If I start mott.C with root -n there is no difference. I got a new free_color_idx every color request.

Ok, i will need to investigate on a Linux machine. Thanks for your feedback.

well…

$ uname -a
Linux root-ubuntu-2004-1 5.4.0-73-generic #82-Ubuntu SMP Wed Apr 14 17:39:42 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
sftnight@root-ubuntu-2004-1:~/couet/build$ root mott.C
   ------------------------------------------------------------------
  | Welcome to ROOT 6.27/01                        https://root.cern |
  | (c) 1995-2022, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for linuxx8664gcc on Sep 05 2022, 12:32:28                 |
  | From heads/master@v6-25-02-2128-gb0aea2e155                      |
  | With c++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0                   |
  | Try '.help'/'.?', '.demo', '.license', '.credits', '.quit'/'.q'  |
   ------------------------------------------------------------------

root [0] 
Processing mott.C...
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
root [1] 

Try ROOT 6.26/06 and 6.24/06 so that we have a comparison.

Was this a true machine or a virtualized. May it depens on that?

Even on another server I got the same (counting color index) result.

Ok I see the following on my IMac:

6.27/01 :

% root mott.C
   ------------------------------------------------------------------
  | Welcome to ROOT 6.27/01                        https://root.cern |
  | (c) 1995-2022, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for macosx64 on Sep 07 2022, 06:31:43                      |
  | From heads/master@v6-25-02-2141-g5c9164ec54                      |
  | With Apple clang version 13.1.6 (clang-1316.0.21.2.5)            |
  | Try '.help'/'.?', '.demo', '.license', '.credits', '.quit'/'.q'  |
   ------------------------------------------------------------------

root [0] 
Processing mott.C...
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
root [1] 

6.26/07:

% root mott.C
   ------------------------------------------------------------------
  | Welcome to ROOT 6.26/07                        https://root.cern |
  | (c) 1995-2021, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for macosx64 on Sep 06 2022, 14:21:10                      |
  | From heads/v6-26-00-patches@v6-26-06-33-g2cef31413d              |
  | With Apple clang version 13.1.6 (clang-1316.0.21.2.5)            |
  | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q'       |
   ------------------------------------------------------------------

root [0] 
Processing mott.C...
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1180 free_color_idx = 1181
color = 1 color_transparent = 1181 free_color_idx = 1182
color = 1 color_transparent = 1182 free_color_idx = 1183
color = 1 color_transparent = 1183 free_color_idx = 1184
color = 1 color_transparent = 1184 free_color_idx = 1185
color = 1 color_transparent = 1185 free_color_idx = 1186
color = 1 color_transparent = 1186 free_color_idx = 1187
color = 1 color_transparent = 1187 free_color_idx = 1188
color = 1 color_transparent = 1188 free_color_idx = 1189
root [1] 

So seems to have been fixed between these two versions.

Is it possible to get the 6.27/01 as source code?
Than I can compile it here to check if it’s a problem with the pre-build CentOs package since I’m running Rocky Linux.

For today, “6.27/01” is just the head of the “master” branch (and “6.26/07” is the head of the “v6-26-00-patches” branch).

git clone https://github.com/root-project/root.git root
mkdir build
cd build
cmake ../root
make -j8
source bin/thisroot.sh
root --version

Wham - after compiling 6.27/01 by my own it works. I don’t know why it not worked with the precompiled version.

   ------------------------------------------------------------------
  | Welcome to ROOT 6.27/01                        https://root.cern |
  | (c) 1995-2022, The ROOT Team; conception: R. Brun, F. Rademakers |
  | Built for linuxx8664gcc on Sep 07 2022, 07:41:45                 |
  | From heads/master@v6-25-02-2141-g5c9164ec54                      |
  | With c++ (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1)                  |
  | Try '.help'/'.?', '.demo', '.license', '.credits', '.quit'/'.q'  |
   ------------------------------------------------------------------

root [0] .x mott.C
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
color = 1 color_transparent = 1179 free_color_idx = 1180
root [1]
1 Like

As @Wile_E_Coyote said the master head might is a bt ahead even if the version number is the same.