ROOT logo
#include "iostream"
#include "AliFMDInput.h"
#include "AliFMDHit.h"
#include "TFile.h"
#include "TTree.h"
#include "TClonesArray.h"
#include "AliTrackReference.h"
#include "AliFMDStripIndex.h"
#include "TParticle.h"
//Script to compare the hits and the FMD track references for one event.
//To run:
//>gSystem->Load("libFMDutil")
//>.L CompareTrackRefsAndHits.C++
//>ReadHits t
//>t.Run()
//Note that the order of hits and trackrefs is different.

class ReadHits : public AliFMDInput{

private:
  Int_t nHits;
  Int_t nTracks;
public:
  
  
  
  ReadHits(){
    AddLoad(kKinematics);
    AddLoad(kTracks);
    AddLoad(kTrackRefs);
    AddLoad(kHits);
    nHits = 0;
    nTracks = 0;
    fGAliceFile.Form("galice.root");
  }

  Bool_t ProcessHit(AliFMDHit* hit, TParticle* p) 
  {
    nHits++;
    // std::cout<<hit->Px()<<"   "<<hit->Py()<<"   "<<hit->Pz()<<std::endl;
    //std::cout<<hit->Detector()<<"   "<<hit->Ring()<<"    "<<hit->Sector()<<"    "<<hit->Strip()<<std::endl;
    return kTRUE;
  }
  Bool_t ProcessTrackRef(AliTrackReference* trackRef, TParticle* p) 
  {
    UShort_t det,sec,strip;
    Char_t ring;
    if(trackRef->DetectorId() == AliTrackReference::kFMD) {
      nTracks++;
      AliFMDStripIndex::Unpack(trackRef->UserId(),det,ring,sec,strip);
      //std::cout<<p->Px()<<"   "<<p->Py()<<"   "<<p->Pz()<<std::endl;
      //std::cout<<det<<"   "<<ring<<"    "<<sec<<"    "<<strip<<std::endl;
    }
        
    return kTRUE;
  }

  
  Bool_t Finish()
  {
    // Int_t nTracks = 0;
    /* TFile* f=TFile::Open("TrackRefs.root");
    TTree* tree = (TTree*)f->Get("Event0/TreeTR");
    
    
    TClonesArray* array=new TClonesArray("AliTrackReference");
    
    tree->SetBranchAddress("TrackReferences",&array);
    
    UShort_t det,sec,strip;
    Char_t ring;
    for (int i=0; i<tree->GetEntries(); i++) {
      tree->GetEvent(i);
    for(Int_t j = 0; j <array->GetEntriesFast();j++) {
      
      AliTrackReference* track = static_cast<AliTrackReference*>(array->At(j));
      
      if(track->DetectorId()==AliTrackReference::kFMD) {
	nTracks++;
	AliFMDStripIndex::Unpack(track->UserId(),det,ring,sec,strip);
	std::cout<<track->Px()<<"   "<<track->Py()<<"   "<<track->Pz()<<"   "<<track->UserId()<<endl;
	std::cout<<det<<"   "<<ring<<"    "<<sec<<"    "<<strip<<std::endl;
      }
      
    }
    
  }
    */
    std::cout<<nTracks<<"     "<<nHits<<std::endl;
    return kTRUE;
  }
  
};
 CompareTrackRefsAndHits.C:1
 CompareTrackRefsAndHits.C:2
 CompareTrackRefsAndHits.C:3
 CompareTrackRefsAndHits.C:4
 CompareTrackRefsAndHits.C:5
 CompareTrackRefsAndHits.C:6
 CompareTrackRefsAndHits.C:7
 CompareTrackRefsAndHits.C:8
 CompareTrackRefsAndHits.C:9
 CompareTrackRefsAndHits.C:10
 CompareTrackRefsAndHits.C:11
 CompareTrackRefsAndHits.C:12
 CompareTrackRefsAndHits.C:13
 CompareTrackRefsAndHits.C:14
 CompareTrackRefsAndHits.C:15
 CompareTrackRefsAndHits.C:16
 CompareTrackRefsAndHits.C:17
 CompareTrackRefsAndHits.C:18
 CompareTrackRefsAndHits.C:19
 CompareTrackRefsAndHits.C:20
 CompareTrackRefsAndHits.C:21
 CompareTrackRefsAndHits.C:22
 CompareTrackRefsAndHits.C:23
 CompareTrackRefsAndHits.C:24
 CompareTrackRefsAndHits.C:25
 CompareTrackRefsAndHits.C:26
 CompareTrackRefsAndHits.C:27
 CompareTrackRefsAndHits.C:28
 CompareTrackRefsAndHits.C:29
 CompareTrackRefsAndHits.C:30
 CompareTrackRefsAndHits.C:31
 CompareTrackRefsAndHits.C:32
 CompareTrackRefsAndHits.C:33
 CompareTrackRefsAndHits.C:34
 CompareTrackRefsAndHits.C:35
 CompareTrackRefsAndHits.C:36
 CompareTrackRefsAndHits.C:37
 CompareTrackRefsAndHits.C:38
 CompareTrackRefsAndHits.C:39
 CompareTrackRefsAndHits.C:40
 CompareTrackRefsAndHits.C:41
 CompareTrackRefsAndHits.C:42
 CompareTrackRefsAndHits.C:43
 CompareTrackRefsAndHits.C:44
 CompareTrackRefsAndHits.C:45
 CompareTrackRefsAndHits.C:46
 CompareTrackRefsAndHits.C:47
 CompareTrackRefsAndHits.C:48
 CompareTrackRefsAndHits.C:49
 CompareTrackRefsAndHits.C:50
 CompareTrackRefsAndHits.C:51
 CompareTrackRefsAndHits.C:52
 CompareTrackRefsAndHits.C:53
 CompareTrackRefsAndHits.C:54
 CompareTrackRefsAndHits.C:55
 CompareTrackRefsAndHits.C:56
 CompareTrackRefsAndHits.C:57
 CompareTrackRefsAndHits.C:58
 CompareTrackRefsAndHits.C:59
 CompareTrackRefsAndHits.C:60
 CompareTrackRefsAndHits.C:61
 CompareTrackRefsAndHits.C:62
 CompareTrackRefsAndHits.C:63
 CompareTrackRefsAndHits.C:64
 CompareTrackRefsAndHits.C:65
 CompareTrackRefsAndHits.C:66
 CompareTrackRefsAndHits.C:67
 CompareTrackRefsAndHits.C:68
 CompareTrackRefsAndHits.C:69
 CompareTrackRefsAndHits.C:70
 CompareTrackRefsAndHits.C:71
 CompareTrackRefsAndHits.C:72
 CompareTrackRefsAndHits.C:73
 CompareTrackRefsAndHits.C:74
 CompareTrackRefsAndHits.C:75
 CompareTrackRefsAndHits.C:76
 CompareTrackRefsAndHits.C:77
 CompareTrackRefsAndHits.C:78
 CompareTrackRefsAndHits.C:79
 CompareTrackRefsAndHits.C:80
 CompareTrackRefsAndHits.C:81
 CompareTrackRefsAndHits.C:82
 CompareTrackRefsAndHits.C:83
 CompareTrackRefsAndHits.C:84
 CompareTrackRefsAndHits.C:85
 CompareTrackRefsAndHits.C:86
 CompareTrackRefsAndHits.C:87
 CompareTrackRefsAndHits.C:88
 CompareTrackRefsAndHits.C:89
 CompareTrackRefsAndHits.C:90
 CompareTrackRefsAndHits.C:91
 CompareTrackRefsAndHits.C:92
 CompareTrackRefsAndHits.C:93
 CompareTrackRefsAndHits.C:94