
void link_basic_1(){

  TString InputSimFile ="data_sim/sim_s_gc_G4_6.root";
  TString InputDigFile ="data_digi/digi_s_gc_G4_6_1000.root";

  TFile *simFile = TFile::Open(InputSimFile); 
  TTree *simTree = (TTree*) simFile->Get("cbmsim");

  TFile *digFile = TFile::Open(InputDigFile); 
  TTree *digTree = (TTree*) digFile->Get("cbmsim");

  FairMCEventHeader* simEvHeader = NULL;
  FairEventHeader* digEvHeader = NULL;

  TClonesArray* mcTrackArray = new TClonesArray("PndMCTrack");
  TClonesArray* scitPointArray = new TClonesArray("PndSciTPoint");
  TClonesArray* scitHitArray = new TClonesArray("PndSciTHit");

  TBranch* mcTrackBranch = (TBranch*) simTree->GetBranch("MCTrack");
  TBranch* scitPointBranch = (TBranch*) simTree->GetBranch("SciTPoint");
  TBranch* scitHitBranch = (TBranch*) digTree->GetBranch("SciTSortedHit");

  simTree->SetBranchAddress("MCTrack",&mcTrackArray);
  simTree->SetBranchAddress("SciTPoint",&scitPointArray);
  simTree->SetBranchAddress("MCEventHeader.",&simEvHeader);

  digTree->SetBranchAddress("SciTSortedHit",&scitHitArray);
  digTree->SetBranchAddress("EventHeader.",&digEvHeader);


  PndMCTrack* mcTrack = NULL;
  PndSciTPoint* scitPoint = NULL;
  PndSciTHit* scitHit = NULL;


  for (Int_t i_Event=0; i_Event<scitHitBranch->GetEntries();i_Event++){ // ----- loop oveer digitized events ---
    
   scitHitBranch->GetEntry(i_Event);

    for (Int_t i_hitArray=0; i_hitArray < scitHitArray->GetEntries() ;i_hitArray++){     
      scitHit = (PndSciTHit*) scitHitArray->At(i_hitArray);

 // ------------- do some stuff with the SciTHit data here -------------
      
      // be carefull there are more links stored. 
      // GetLink(0) seems to point to the MC Track 
      // GetLink(1) seems to point to the SciTPoint (the simulation output)
      // I guess this is different for the reco or pid Output files and maybe also for other detectors

      scitPointBranch->GetEntry(scitHit->GetLink(1).GetEntry());
      scitPoint = (PndSciTPoint*) scitPointArray->At(scitHit->GetLink(1).GetIndex());

      // ------------- do some stuff with the SciTPoint data here -------------


      mcTrackBranch->GetEntry(scitPoint->GetLink(0).GetEntry());
      mcTrack = (PndMCTrack*) mcTrackArray->At(scitPoint->GetLink(0).GetIndex());
      
      //-------------- do some stuff with the corresponding mcTrack data here ---------------

    }
  } // ----- loop oveer digitized events --- END ---

  simFile->Close();
  digFile->Close();

}

