How to merge TFiles created over different threads

Hi @eguiraud ,
I have written a piece of code where I pass a pointer from different TThreads and trying to write a merged file from the files written over multiple TThreads.
Kindly have a look. I am facing some issue, I mean it is not working.

void* write_outfile(void* ptr){
    gROOT->cd();
    Long64_t* N = (Long64_t*) ptr;
    gROOT->SetBatch();
    ROOT::EnableThreadSafety();
    std::string fileName = oname;
    ROOT::Experimental::TBufferMerger merger("testfile.root", "RECREATE");
    auto file = merger.GetFile();

    for(auto j=N[1]; j<N[2]; j++){
       
        auto tree = new TTree("data","data");
        tree->Branch("q",&qcalib,"qcalib[1024]/F");
        tree->Branch("t",&tcalib,"tcalib[1024]/l");
        chain[N[0]]->GetEntry(j);
        for(CHID=channel_start;CHID<=channel_end;CHID++){
            if(CHID >63 && CHID <320){continue;}
            if(q[CHID]>0 ){
                //Float_t S= pow(q[CHID],par[CHID][2]);
                //qcalib[CHID]=par[CHID][0]*pow(par[CHID][1],S)+par[CHID][3]*q[CHID]-par[CHID][0];
                qcalib[CHID] = q[CHID]*S[CHID];
            }
            else{continue;}
        }
        tree->Fill();
    }
    file->Write();
    return 0;
}