ROOT logo
//
// A macro to test the Cooked Matrix tracker out of the reco framework
//

#if !defined(__CINT__) || defined(__MAKECINT__)
   #include <Riostream.h>
   #include <TSystem.h>
   #include <TFile.h>
   #include <TTree.h>
   #include <TGeoGlobalMagField.h>
   #include <TStopwatch.h>

   #include "AliRunLoader.h"
   #include "AliGeomManager.h"
   #include "AliLoader.h"
   #include "AliHeader.h"
   #include "AliGenEventHeader.h"
   #include "AliMagF.h"
   #include "AliESDEvent.h"
   #include "AliITSUTrackerCooked.h"
   #include "AliITSUReconstructor.h"
#endif

extern TSystem *gSystem;

const AliESDVertex *SetMCvertex(const AliRunLoader *rl, AliTracker *tr);

void testTrackerCooked() {
    gSystem->Load("libITSUpgradeBase");
    gSystem->Load("libITSUpgradeSim");
    gSystem->Load("libITSUpgradeRec");

    TGeoGlobalMagField::Instance()->
          SetField(new AliMagF("Maps","Maps", -1., -1., AliMagF::k5kG));
    AliGeomManager::LoadGeometry("geometry.root");

    AliITSUReconstructor rec;
    rec.Init();
    AliITSUTrackerCooked *tracker=new AliITSUTrackerCooked(&rec);
    tracker->SetSAonly(kTRUE);

    TFile *esdFile=TFile::Open("AliESDs.root","recreate");
    TTree *esdTree = new TTree("esdTree", "Tree with ESD objects");
    AliESDEvent *esd=new AliESDEvent();
    esd->CreateStdContent();
    esd->WriteToTree(esdTree);
    
    AliRunLoader *rl = AliRunLoader::Open("galice.root","something");
    rl->LoadHeader();
    AliLoader *itsl = rl->GetLoader("ITSLoader");
    itsl->LoadRecPoints();

    TStopwatch timer;    
    Int_t nEvents=rl->GetNumberOfEvents();
    for (Int_t i=0; i<nEvents; i++) {
        cout<<"\nEvent number "<<i<<endl;
        rl->GetEvent(i);

        const AliESDVertex *vtx=SetMCvertex(rl,tracker);
        esd->SetPrimaryVertexSPD(vtx);              

        TTree *cTree=itsl->TreeR();
        tracker->LoadClusters(cTree);
        tracker->Clusters2Tracks(esd);
        tracker->PropagateBack(esd);
        tracker->RefitInward(esd);
        tracker->UnloadClusters();

        Int_t n=esd->GetNumberOfTracks();
        for (Int_t t=0; t<n; t++) {
	  AliESDtrack *track=esd->GetTrack(t);
          if (!track->RelateToVertex(vtx, tracker->GetBz(), 33)) continue;
          //Double_t chi2=track->GetITSchi2();
          //Double_t ncl=track->GetITSclusters(0);
	  //cout<<ncl<<' '<<chi2<<endl;
	}

        esdTree->Fill();
        esd->Reset();
        delete vtx;
    }
    timer.Stop(); timer.Print();
 
    delete tracker;
    esdFile->cd();
    esdTree->Write();
    delete esd;
    delete esdFile;
}

const AliESDVertex *SetMCvertex(const AliRunLoader *rl, AliTracker *tracker) {
    AliGenEventHeader *h=rl->GetHeader()->GenEventHeader();
    TArrayF vtx(3);
    h->PrimaryVertex(vtx);
    cout<<"Vertex "<<vtx[0]<<' '<<vtx[1]<<' '<<vtx[2]<<endl;
    Double_t xyz[]={vtx[0],vtx[1],vtx[2]};
    Double_t ers[]={2.e-4,2.e-4,2.e-2};
    tracker->SetVertex(xyz,ers);
    AliESDVertex *vertex=new AliESDVertex(xyz,ers);
    vertex->SetNContributors(33); // Set some dummy number of contributors
    return vertex;
}

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