<commit_before><br/> 
<hr/> 
<a name="io"></a> 
<h3>I/O Libraries</h3>

<h4>TFileCacheRead</h4>
<ul>
<li>Support for multiple <tt>TFileCacheRead</tt> per <tt>TFile</tt>.<p/>
Multiple <tt>TFileCacheRead</tt> per <tt>TFile</tt> are supported by augmenting the existing <tt>TFile::SetCacheRead()</tt> function with an optional <tt>TObject*</tt> argument specifying the owner (i.e. tree) of the cache. This function will assign a <tt>TFileCacheRead</tt> to a <tt>TFile</tt> for the given <tt>TTree</tt>. A cache can be removed by setting the pointer <tt>TFileCacheRead</tt> to 0.<p/>
Similarly, in <tt>TFile::GetCacheRead()</tt> an optional <tt>TObject*</tt> argument was added to obtain the <tt>TFileCacheRead</tt> from a <tt>TFile</tt>.<p/>
In addition to the unassigned <tt>TFileCacheRead</tt> pointer, <tt>TFile</tt> will maintain a map of tree specific cache pointer.<p/>
Backward compatibility in both functions is handled by making the <tt>TObject*</tt> argument optional. If it is not specified in the <tt>TFile::SetCacheRead()</tt> call, only the unassigned <tt>TFileCacheRead</tt> pointer is updated, otherwise the map and the unassigned cache are updated. In  <tt>TFile::GetCacheRead()</tt>, if an owner is not specified or doesn't exist in the files' cache map, the unassigned cache is returned, unless it is 0 and there is exactly one entry in the cache map.<p/>
</li>
</ul><commit_msg>Update release notes<commit_after><br/> 
<hr/> 
<a name="io"></a> 
<h3>I/O Libraries</h3>

<h4>TFileCacheRead</h4>
<ul>
<li>Support for multiple <tt>TFileCacheRead</tt> per <tt>TFile</tt>.<p/>
Multiple <tt>TFileCacheRead</tt> per <tt>TFile</tt> are supported by augmenting the existing <tt>TFile::SetCacheRead()</tt> function with an optional <tt>TObject*</tt> argument specifying the owner (i.e. tree) of the cache. This function will assign a <tt>TFileCacheRead</tt> to a <tt>TFile</tt> for the given <tt>TTree</tt>. A cache can be removed by setting the pointer <tt>TFileCacheRead</tt> to 0.<p/>
Similarly, in <tt>TFile::GetCacheRead()</tt> an optional <tt>TObject*</tt> argument was added to obtain the <tt>TFileCacheRead</tt> from a <tt>TFile</tt>.<p/>
In addition to the unassigned <tt>TFileCacheRead</tt> pointer, <tt>TFile</tt> will maintain a map of tree specific cache pointer.<p/>
Backward compatibility in both functions is handled by making the <tt>TObject*</tt> argument optional. If it is not specified in the <tt>TFile::SetCacheRead()</tt> call, only the unassigned <tt>TFileCacheRead</tt> pointer is updated, otherwise the map and the unassigned cache are updated. In  <tt>TFile::GetCacheRead()</tt>, if an owner is not specified or doesn't exist in the files' cache map, the unassigned cache is returned, unless it is 0 and there is exactly one entry in the cache map.<p/>
<li>Distingurish counter for bytes read and read calls for learning phase.</li>
</li>
</ul>

<h4>TFileMerger</h4>

<ul>
<li>Improve efficiency of <tt>TFileMerger</tt> when merging a single file by doing a <tt>TFile::Cp</tt> rather than a load/write of the objects.</li>
<li>In <tt>TFileMerger</tt> and hadd when objects can not be merged do <em>not</em> overwrite the last object in the set with the first!</li>
<li>Renable warning about not being able to merge objects in <tt>TFileMerger</tt> and hadd.</li>
<li>Fix hadd problem where the incremental merging fails if the TTree are stored in sub-directories.</li>
<li>Improve the code used for forward compatibility (record the type as 'TDirectory' even-though the class is now 'TDirectoryFile') by delaying the switching of the class name until it is written (to the buffer).  This avoids problem where a TKey is created (by TFile::mkdir) and then immediately used for reading (this happens in the incremental file merger).</li>
</ul>
{'fraction_non_alphanumeric': 0.1269883351007423, 'fraction_numerical': 0.003711558854718982, 'mean_word_length': 5.2055921052631575, 'pattern_counts': {'":': 0, '<': 143, '<?xml version=': 0, '>': 143, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6922343', 'n_tokens_mistral': 1215, 'n_tokens_neox': 1185, 'n_words': 485}