// Label is used to store scanning result for tracks and trackelts. // // BIT(1) stores the original selection. // BIT(0) stores the user selection (set to same value as b1 at init). // // This allows to check all possible combinations. struct XXX { const char *bname; const char *oname; TBranch *branch; AliESDVertex *vert; }; XXX vvv[3] = { { "VT", "PrimVertTracks" }, { "VTPC", "PrimVertTPC" }, { "VSPD", "PrimVertSPD" } }; void make_scan_results() { TFile *f = TFile::Open("scan_results.root", "UPDATE"); f->Delete("SR;*"); T = new TTree("SR", "Scanning results"); TClonesArray* ts = new TClonesArray("AliESDtrack", 32); TBranch * tb = T->Branch("T", &ts); delete ts; AliMultiplicity *ms = 0; TBranch *mb = T->Branch("M", &ms); for (Int_t v = 0; v < 3; ++v) { vvv[v].vert = 0; vvv[v].branch = T->Branch(vvv[v].bname, &vvv[v].vert); } for (Int_t i=0; i<=9999; ++i) { TString name; name.Form("Tracks_%04d", i); ts = (TClonesArray*) f->Get(name); if (ts == 0) continue; name.Form("Tracklets_%04d", i); ms = (AliMultiplicity*) f->Get(name); if (ms == 0) Error("make_scan_results", "'%s' not found.", name.Data()); tb->SetAddress(&ts); mb->SetAddress(&ms); for (Int_t v = 0; v < 3; ++v) { name.Form("%s_%04d", vvv[v].oname, i); vvv[v].vert = (AliESDVertex*) f->Get(name); if (vvv[v].vert == 0) Error("make_scan_results", "'%s' not found.", name.Data()); vvv[v].branch->SetAddress(&vvv[v].vert); } T->Fill(); delete ts; delete ms; for (Int_t v = 0; v < 3; ++v) delete vvv[v].vert; } T->Write(); f->Close(); delete f; }