ROOT logo
#include "AliLog.h"
#include "TFile.h"
#include "TTree.h"
#include "TClonesArray.h"
#include "AliMuonForwardTrack.h"

TFile *inputFileWithoutBranson=0, *inputFileWithBranson=0, *outputFile=0;
TTree *fInputTreeWithoutBranson=0, *fInputTreeWithBranson=0;
TTree *fOutputTreeWithoutBranson=0, *fOutputTreeWithBranson=0;
TClonesArray *fInputMuonForwardTracksWithoutBranson=0, *fInputMuonForwardTracksWithBranson=0;
TClonesArray *fOutputMuonForwardTracksWithoutBranson=0, *fOutputMuonForwardTracksWithBranson=0;

AliMuonForwardTrack* GetTrackWithoutBranson(Int_t event, Int_t trackMCId);

//====================================================================================================================================================

void FilterMuonGlobalTracks() {

  // ---- reading file of tracks reconstructed without Branson correction

  inputFileWithoutBranson = new TFile("MuonGlobalTracks.withoutBransonCorrection.root");
  if (!inputFileWithoutBranson || !inputFileWithoutBranson->IsOpen()) {
    printf("Error opening file MuonGlobalTracks.withoutBransonCorrection.root");
    return;
  }
  fInputTreeWithoutBranson = (TTree*) inputFileWithoutBranson->Get("AliMuonForwardTracks");
  if (!fInputTreeWithoutBranson) {
    printf("Error reading input tree from MuonGlobalTracks.withoutBransonCorrection.root");
    return;
  }
  fInputTreeWithoutBranson->SetName("AliInputMuonForwardTracksWithoutBranson");
  fInputMuonForwardTracksWithoutBranson = new TClonesArray("AliMuonForwardTrack");
  fInputTreeWithoutBranson->SetBranchAddress("tracks", &fInputMuonForwardTracksWithoutBranson);  

  // ---- reading file of tracks reconstructed with Branson correction

  inputFileWithBranson = new TFile("MuonGlobalTracks.withBransonCorrection.root");
  if (!inputFileWithBranson || !inputFileWithBranson->IsOpen()) {
    printf("Error opening file MuonGlobalTracks.withBransonCorrection.root");
    return;
  }
  fInputTreeWithBranson = (TTree*) inputFileWithBranson->Get("AliMuonForwardTracks");
  if (!fInputTreeWithBranson) {
    printf("Error reading input tree from MuonGlobalTracks.withBransonCorrection.root");
    return;
  }
  fInputTreeWithBranson->SetName("AliInputMuonForwardTracksWithBranson");
  fInputMuonForwardTracksWithBranson = new TClonesArray("AliMuonForwardTrack");
  fInputTreeWithBranson->SetBranchAddress("tracks", &fInputMuonForwardTracksWithBranson);  

  // ---- preparing output file and trees
  
  outputFile = new TFile("MuonGlobalTracks.root","recreate");
  fOutputTreeWithoutBranson = new TTree("AliMuonForwardTracksWithoutBranson", "Tree of AliMuonForwardTracks");
  fOutputTreeWithBranson    = new TTree("AliMuonForwardTracksWithBranson",    "Tree of AliMuonForwardTracks");
  fOutputMuonForwardTracksWithoutBranson = new TClonesArray("AliMuonForwardTrack");
  fOutputMuonForwardTracksWithBranson    = new TClonesArray("AliMuonForwardTrack");
  fOutputTreeWithoutBranson -> Branch("tracks", &fOutputMuonForwardTracksWithoutBranson);
  fOutputTreeWithBranson    -> Branch("tracks", &fOutputMuonForwardTracksWithBranson);

  // ---- 

  Int_t nEvents = fInputTreeWithBranson->GetEntries();

  for (Int_t iEv=0; iEv<nEvents; iEv++) {

    fInputTreeWithBranson -> GetEvent(iEv);

    printf("reading event %d\n", iEv);
    
    Int_t nTracksOfEvent = fInputMuonForwardTracksWithBranson->GetEntries();
    for (Int_t iTr=0; iTr<nTracksOfEvent; iTr++) {
      AliMuonForwardTrack *trackWithBranson = (AliMuonForwardTrack*) fInputMuonForwardTracksWithBranson->At(iTr);
      AliMuonForwardTrack *trackWithoutBranson = GetTrackWithoutBranson(iEv, trackWithBranson->GetTrackMCId());
      if (!trackWithoutBranson) {
	printf("Event %d, track %d : track without Branson not available!\n", iEv, iTr);
	continue;
      }
      new ((*fOutputMuonForwardTracksWithBranson)[fOutputMuonForwardTracksWithBranson->GetEntries()]) AliMuonForwardTrack(*trackWithBranson);      
      new ((*fOutputMuonForwardTracksWithoutBranson)[fOutputMuonForwardTracksWithoutBranson->GetEntries()]) AliMuonForwardTrack(*trackWithoutBranson);    
    }

    fOutputTreeWithBranson    -> Fill();
    fOutputTreeWithoutBranson -> Fill();

    fOutputMuonForwardTracksWithBranson    -> Delete();
    fOutputMuonForwardTracksWithoutBranson -> Delete();

    fInputMuonForwardTracksWithBranson    -> Delete();
    fInputMuonForwardTracksWithoutBranson -> Delete();

  }

  outputFile -> cd();
  fOutputTreeWithBranson    -> Write();
  fOutputTreeWithoutBranson -> Write();
  outputFile -> Close();

}

//====================================================================================================================================================

AliMuonForwardTrack* GetTrackWithoutBranson(Int_t event, Int_t trackMCId) {

  fInputTreeWithoutBranson -> GetEvent(event);
  
  Int_t nTracksOfEvent = fInputMuonForwardTracksWithoutBranson->GetEntries();
  for (Int_t iTr=0; iTr<nTracksOfEvent; iTr++) {
    AliMuonForwardTrack *trackWithoutBranson = (AliMuonForwardTrack*) fInputMuonForwardTracksWithoutBranson->At(iTr);
    if (trackWithoutBranson->GetTrackMCId() == trackMCId) return trackWithoutBranson;
  }
  
  return NULL;
  
}

//====================================================================================================================================================
 FilterMuonGlobalTracks.C:1
 FilterMuonGlobalTracks.C:2
 FilterMuonGlobalTracks.C:3
 FilterMuonGlobalTracks.C:4
 FilterMuonGlobalTracks.C:5
 FilterMuonGlobalTracks.C:6
 FilterMuonGlobalTracks.C:7
 FilterMuonGlobalTracks.C:8
 FilterMuonGlobalTracks.C:9
 FilterMuonGlobalTracks.C:10
 FilterMuonGlobalTracks.C:11
 FilterMuonGlobalTracks.C:12
 FilterMuonGlobalTracks.C:13
 FilterMuonGlobalTracks.C:14
 FilterMuonGlobalTracks.C:15
 FilterMuonGlobalTracks.C:16
 FilterMuonGlobalTracks.C:17
 FilterMuonGlobalTracks.C:18
 FilterMuonGlobalTracks.C:19
 FilterMuonGlobalTracks.C:20
 FilterMuonGlobalTracks.C:21
 FilterMuonGlobalTracks.C:22
 FilterMuonGlobalTracks.C:23
 FilterMuonGlobalTracks.C:24
 FilterMuonGlobalTracks.C:25
 FilterMuonGlobalTracks.C:26
 FilterMuonGlobalTracks.C:27
 FilterMuonGlobalTracks.C:28
 FilterMuonGlobalTracks.C:29
 FilterMuonGlobalTracks.C:30
 FilterMuonGlobalTracks.C:31
 FilterMuonGlobalTracks.C:32
 FilterMuonGlobalTracks.C:33
 FilterMuonGlobalTracks.C:34
 FilterMuonGlobalTracks.C:35
 FilterMuonGlobalTracks.C:36
 FilterMuonGlobalTracks.C:37
 FilterMuonGlobalTracks.C:38
 FilterMuonGlobalTracks.C:39
 FilterMuonGlobalTracks.C:40
 FilterMuonGlobalTracks.C:41
 FilterMuonGlobalTracks.C:42
 FilterMuonGlobalTracks.C:43
 FilterMuonGlobalTracks.C:44
 FilterMuonGlobalTracks.C:45
 FilterMuonGlobalTracks.C:46
 FilterMuonGlobalTracks.C:47
 FilterMuonGlobalTracks.C:48
 FilterMuonGlobalTracks.C:49
 FilterMuonGlobalTracks.C:50
 FilterMuonGlobalTracks.C:51
 FilterMuonGlobalTracks.C:52
 FilterMuonGlobalTracks.C:53
 FilterMuonGlobalTracks.C:54
 FilterMuonGlobalTracks.C:55
 FilterMuonGlobalTracks.C:56
 FilterMuonGlobalTracks.C:57
 FilterMuonGlobalTracks.C:58
 FilterMuonGlobalTracks.C:59
 FilterMuonGlobalTracks.C:60
 FilterMuonGlobalTracks.C:61
 FilterMuonGlobalTracks.C:62
 FilterMuonGlobalTracks.C:63
 FilterMuonGlobalTracks.C:64
 FilterMuonGlobalTracks.C:65
 FilterMuonGlobalTracks.C:66
 FilterMuonGlobalTracks.C:67
 FilterMuonGlobalTracks.C:68
 FilterMuonGlobalTracks.C:69
 FilterMuonGlobalTracks.C:70
 FilterMuonGlobalTracks.C:71
 FilterMuonGlobalTracks.C:72
 FilterMuonGlobalTracks.C:73
 FilterMuonGlobalTracks.C:74
 FilterMuonGlobalTracks.C:75
 FilterMuonGlobalTracks.C:76
 FilterMuonGlobalTracks.C:77
 FilterMuonGlobalTracks.C:78
 FilterMuonGlobalTracks.C:79
 FilterMuonGlobalTracks.C:80
 FilterMuonGlobalTracks.C:81
 FilterMuonGlobalTracks.C:82
 FilterMuonGlobalTracks.C:83
 FilterMuonGlobalTracks.C:84
 FilterMuonGlobalTracks.C:85
 FilterMuonGlobalTracks.C:86
 FilterMuonGlobalTracks.C:87
 FilterMuonGlobalTracks.C:88
 FilterMuonGlobalTracks.C:89
 FilterMuonGlobalTracks.C:90
 FilterMuonGlobalTracks.C:91
 FilterMuonGlobalTracks.C:92
 FilterMuonGlobalTracks.C:93
 FilterMuonGlobalTracks.C:94
 FilterMuonGlobalTracks.C:95
 FilterMuonGlobalTracks.C:96
 FilterMuonGlobalTracks.C:97
 FilterMuonGlobalTracks.C:98
 FilterMuonGlobalTracks.C:99
 FilterMuonGlobalTracks.C:100
 FilterMuonGlobalTracks.C:101
 FilterMuonGlobalTracks.C:102
 FilterMuonGlobalTracks.C:103
 FilterMuonGlobalTracks.C:104
 FilterMuonGlobalTracks.C:105
 FilterMuonGlobalTracks.C:106
 FilterMuonGlobalTracks.C:107
 FilterMuonGlobalTracks.C:108
 FilterMuonGlobalTracks.C:109
 FilterMuonGlobalTracks.C:110
 FilterMuonGlobalTracks.C:111
 FilterMuonGlobalTracks.C:112
 FilterMuonGlobalTracks.C:113
 FilterMuonGlobalTracks.C:114
 FilterMuonGlobalTracks.C:115
 FilterMuonGlobalTracks.C:116
 FilterMuonGlobalTracks.C:117
 FilterMuonGlobalTracks.C:118