Implementation of ITS tracking for HLT. The tracking is based on the off-line AliITSt...
[u/mrichter/AliRoot.git] / HLT / ITS / RunHLTITS.C
1 // The following macro runs the HLT ITS tracker over the HLT
2 // tracks stored in the ESD and stores the output tracks in a
3 // separate ESD file AliESDits.root
4
5 Int_t RunHLTITS(Int_t nev=1,Int_t run=0) {
6
7   TStopwatch timer;
8   timer.Start();
9
10    if (gAlice) {
11       delete gAlice->GetRunLoader();
12       delete gAlice; 
13       gAlice=0;
14    }
15
16    AliRunLoader *rl = AliRunLoader::Open("galice.root");
17    if (rl == 0x0) {
18       cerr<<"Can not open session"<<endl;
19       return 1;
20    }
21    Int_t retval = rl->LoadgAlice();
22    if (retval) {
23       cerr<<"AliESDtest.C : LoadgAlice returned error"<<endl;
24       delete rl;
25       return 1;
26    }
27    retval = rl->LoadHeader();
28    if (retval) {
29       cerr<<"AliESDtest.C : LoadHeader returned error"<<endl;
30       delete rl;
31       return 2;
32    }
33    gAlice=rl->GetAliRun();
34        
35
36    AliKalmanTrack::SetConvConst(
37       1000/0.299792458/gAlice->Field()->SolenoidField()
38    );
39
40    AliITSLoader* itsl = (AliITSLoader*)rl->GetLoader("ITSLoader");
41    if (itsl == 0x0) {
42       cerr<<"AliESDtest.C : Can not get the ITS loader"<<endl;
43       return 3;
44    }
45    itsl->LoadRecPoints("read");
46
47    AliITS *dITS = (AliITS*)gAlice->GetDetector("ITS");
48    if (!dITS) {
49       cerr<<"AliESDtest.C : Can not find the ITS detector !"<<endl;
50       return 4;
51    }
52    AliITSgeom *geom = dITS->GetITSgeom();
53
54    //An instance of the HLT ITS tracker
55    AliL3ITStracker itsTracker(geom);
56
57    TFile *ef=TFile::Open("AliESDs.root");
58    if (!ef || !ef->IsOpen()) {cerr<<"Can't AliESDs.root !\n"; return 1;}
59    AliESD* event = new AliESD;
60    TTree* tree = (TTree*) ef->Get("esdTree");
61    if (!tree) {cerr<<"no ESD tree found\n"; return 1;};
62    tree->SetBranchAddress("ESD", &event);
63
64    TFile *itsf=TFile::Open("AliESDits.root","RECREATE");
65    if ((!itsf)||(!itsf->IsOpen())) {
66       cerr<<"Can't AliESDits.root !\n"; return 1;
67    }
68
69    Int_t rc=0;
70    if (nev>rl->GetNumberOfEvents()) nev=rl->GetNumberOfEvents();
71    //The loop over events
72    for (Int_t i=0; i<nev; i++) {
73
74      cerr<<"\n\nProcessing event number : "<<i<<endl;
75      tree->GetEvent(i);
76      
77      rl->GetEvent(i);
78
79      TArrayF v(3);     
80      rl->GetHeader()->GenEventHeader()->PrimaryVertex(v);
81      Double_t vtx[3]={v[0],v[1],v[2]};
82      Double_t cvtx[3]={0.005,0.005,0.010};
83      AliESDVertex vertex1(vtx,cvtx);
84      event->SetVertex(&vertex1);
85
86      Double_t vtx[3];
87      Double_t cvtx[3];
88      AliESDVertex *vertex = event->GetVertex();
89      vertex->GetXYZ(vtx);
90      vertex->GetSigmaXYZ(cvtx);
91      itsTracker.SetVertex(vtx,cvtx);
92
93      TTree *itsTree=itsl->TreeR();
94      if (!itsTree) {
95        cerr<<"Can't get the ITS cluster tree !\n";
96        return 4;
97      }     
98      itsTracker.LoadClusters(itsTree);
99      rc+=itsTracker.Clusters2Tracks(event);
100      //     rc+=itsTracker.PropagateBack(event);
101      itsTracker.UnloadClusters();
102
103      if (rc==0) {
104        TTree* tree = new TTree("esdTree", "Tree with ESD objects");
105        tree->Branch("ESD", "AliESD", &event);
106        tree->Fill();
107        itsf->cd();
108        tree->Write();
109      } 
110      if (rc) {
111        cerr<<"Something bad happened...\n";
112      }
113
114    }
115    delete event;
116
117    itsf->Close();
118    ef->Close();
119
120    //   delete rl;
121
122    timer.Stop();
123    timer.Print();
124
125    return rc;
126 }