Greetings back online (I’ve missed you.)
Is it possible to have different circular buffer sizes for different branches of the same TTree?
Is it possible to have some branches in a TTree use circular buffer, and some branches not use circular?
No for both.
What you can do is create several tree each for the various sizes of the circular buffer and you could access them (only for reading) as one TTree by making them friend of each other.
Then what does TBranch::KeepCircular() do? Can different branches have different KeepCircular() values?
It is an internal routine that is called by TTree::KeepCircular.
PS. Indeed, nothing actively prevents you from calling this routine directly with different value. However this will result in an unbalanced TTree (with branches with different amount of entries/data) which semantic is dubious and at the very least will confuse most tools that assume a balanced TTree. So we strong recommend against it.