4 #include "TClonesArray.h"
5 #include "AliMuonForwardTrack.h"
7 TFile *inputFileWithoutBranson=0, *inputFileWithBranson=0, *outputFile=0;
8 TTree *fInputTreeWithoutBranson=0, *fInputTreeWithBranson=0;
9 TTree *fOutputTreeWithoutBranson=0, *fOutputTreeWithBranson=0;
10 TClonesArray *fInputMuonForwardTracksWithoutBranson=0, *fInputMuonForwardTracksWithBranson=0;
11 TClonesArray *fOutputMuonForwardTracksWithoutBranson=0, *fOutputMuonForwardTracksWithBranson=0;
13 AliMuonForwardTrack* GetTrackWithoutBranson(Int_t event, Int_t trackMCId);
15 //====================================================================================================================================================
17 void FilterMuonGlobalTracks() {
19 // ---- reading file of tracks reconstructed without Branson correction
21 inputFileWithoutBranson = new TFile("MuonGlobalTracks.withoutBransonCorrection.root");
22 if (!inputFileWithoutBranson || !inputFileWithoutBranson->IsOpen()) {
23 printf("Error opening file MuonGlobalTracks.withoutBransonCorrection.root");
26 fInputTreeWithoutBranson = (TTree*) inputFileWithoutBranson->Get("AliMuonForwardTracks");
27 if (!fInputTreeWithoutBranson) {
28 printf("Error reading input tree from MuonGlobalTracks.withoutBransonCorrection.root");
31 fInputTreeWithoutBranson->SetName("AliInputMuonForwardTracksWithoutBranson");
32 fInputMuonForwardTracksWithoutBranson = new TClonesArray("AliMuonForwardTrack");
33 fInputTreeWithoutBranson->SetBranchAddress("tracks", &fInputMuonForwardTracksWithoutBranson);
35 // ---- reading file of tracks reconstructed with Branson correction
37 inputFileWithBranson = new TFile("MuonGlobalTracks.withBransonCorrection.root");
38 if (!inputFileWithBranson || !inputFileWithBranson->IsOpen()) {
39 printf("Error opening file MuonGlobalTracks.withBransonCorrection.root");
42 fInputTreeWithBranson = (TTree*) inputFileWithBranson->Get("AliMuonForwardTracks");
43 if (!fInputTreeWithBranson) {
44 printf("Error reading input tree from MuonGlobalTracks.withBransonCorrection.root");
47 fInputTreeWithBranson->SetName("AliInputMuonForwardTracksWithBranson");
48 fInputMuonForwardTracksWithBranson = new TClonesArray("AliMuonForwardTrack");
49 fInputTreeWithBranson->SetBranchAddress("tracks", &fInputMuonForwardTracksWithBranson);
51 // ---- preparing output file and trees
53 outputFile = new TFile("MuonGlobalTracks.root","recreate");
54 fOutputTreeWithoutBranson = new TTree("AliMuonForwardTracksWithoutBranson", "Tree of AliMuonForwardTracks");
55 fOutputTreeWithBranson = new TTree("AliMuonForwardTracksWithBranson", "Tree of AliMuonForwardTracks");
56 fOutputMuonForwardTracksWithoutBranson = new TClonesArray("AliMuonForwardTrack");
57 fOutputMuonForwardTracksWithBranson = new TClonesArray("AliMuonForwardTrack");
58 fOutputTreeWithoutBranson -> Branch("tracks", &fOutputMuonForwardTracksWithoutBranson);
59 fOutputTreeWithBranson -> Branch("tracks", &fOutputMuonForwardTracksWithBranson);
63 Int_t nEvents = fInputTreeWithBranson->GetEntries();
65 for (Int_t iEv=0; iEv<nEvents; iEv++) {
67 fInputTreeWithBranson -> GetEvent(iEv);
69 printf("reading event %d\n", iEv);
71 Int_t nTracksOfEvent = fInputMuonForwardTracksWithBranson->GetEntries();
72 for (Int_t iTr=0; iTr<nTracksOfEvent; iTr++) {
73 AliMuonForwardTrack *trackWithBranson = (AliMuonForwardTrack*) fInputMuonForwardTracksWithBranson->At(iTr);
74 AliMuonForwardTrack *trackWithoutBranson = GetTrackWithoutBranson(iEv, trackWithBranson->GetTrackMCId());
75 if (!trackWithoutBranson) {
76 printf("Event %d, track %d : track without Branson not available!\n", iEv, iTr);
79 new ((*fOutputMuonForwardTracksWithBranson)[fOutputMuonForwardTracksWithBranson->GetEntries()]) AliMuonForwardTrack(*trackWithBranson);
80 new ((*fOutputMuonForwardTracksWithoutBranson)[fOutputMuonForwardTracksWithoutBranson->GetEntries()]) AliMuonForwardTrack(*trackWithoutBranson);
83 fOutputTreeWithBranson -> Fill();
84 fOutputTreeWithoutBranson -> Fill();
86 fOutputMuonForwardTracksWithBranson -> Delete();
87 fOutputMuonForwardTracksWithoutBranson -> Delete();
89 fInputMuonForwardTracksWithBranson -> Delete();
90 fInputMuonForwardTracksWithoutBranson -> Delete();
95 fOutputTreeWithBranson -> Write();
96 fOutputTreeWithoutBranson -> Write();
97 outputFile -> Close();
101 //====================================================================================================================================================
103 AliMuonForwardTrack* GetTrackWithoutBranson(Int_t event, Int_t trackMCId) {
105 fInputTreeWithoutBranson -> GetEvent(event);
107 Int_t nTracksOfEvent = fInputMuonForwardTracksWithoutBranson->GetEntries();
108 for (Int_t iTr=0; iTr<nTracksOfEvent; iTr++) {
109 AliMuonForwardTrack *trackWithoutBranson = (AliMuonForwardTrack*) fInputMuonForwardTracksWithoutBranson->At(iTr);
110 if (trackWithoutBranson->GetTrackMCId() == trackMCId) return trackWithoutBranson;
117 //====================================================================================================================================================