ROOT logo
Bool_t AliITSCompareHitsRecPoints(Char_t *rfn="galice.root"){
    // This macro compares the average location of the hits associated
    // with a specific track and the best match RecPoint location.
    // Inputs:
    //   none.
    // Outputs:
    //   none.
    // Return:
    //   kTRUE if no errors were encountered, otherwise kFALSE.
    TProfile *pxg,*pyg,*pzg,*pxl,*pyl,*pzl;
    Double_t hg[3],hl[3],tof,rg[3],rl[3];
    Float_t rgf[3];

    // Dynamically link some shared libs
    if (gClassTable->GetID("AliRun") < 0) {
        gROOT->LoadMacro("loadlibs.C");
        loadlibs();
    } else {
        if(gAlice){
            delete AliRunLoader::Instance();
            delete gAlice;
            gAlice=0;
        } // end if gAlice
    }// end if gClassTable->GetID()

    gROOT->LoadMacro("$(ALICE_ROOT)/ITS/AliITSstandard.C");

    AliRunLoader *runl = AccessFile(rfn); // Set up to read in Data
    Int_t retval = runl->LoadHeader();
    if (retval){
        cerr<<"AliITSPrintRecPoints.C : LoadHeader returned error"<<endl;
        return kFALSE;
    } // end if retval

    AliITSLoader* ITSloader =  (AliITSLoader*) runl->GetLoader("ITSLoader");
    if(!ITSloader){
        cerr<<"AliITSPrintRecPoints.C :  ITS loader not found"<<endl;
        return kFALSE;
    } // end if !ITSloader

    if(!gGeoManager){
        gGeoManger = new TGeoManager();
        gGeoManager->Import("geometry.root","");
    } // end if !gGeoManager
    if(ITSloader->LoadHits("read")!=0){
        cerr<<"Error Loading Hits"<<endl;
        return kFALSE;
    }// end if ITSloader->LoadHits
    if(ITSloader->LoadRecPoints("read")!=0){
        cerr<<"Error Loading RecPoints"<<endl;
        return kFALSE;
    }// end if ITSloader->LoadRecPoints
    AliITS *ITS = 0;
    ITS = (AliITS*)(gAlice->GetDetector("ITS"));
    if(!ITS){
        cout << "Error: no ITS found. Aborting"<<endl;
        return kFALSE;
    } // end if !ITS
    if(!(ITS->GetDetTypeSim())){
        cout <<"No AliITSDetTypeSim object found in ITS"<<endl;
        return kFALSE;
    } // end if
    AliITSmodule     *m   = 0;
    AliITShit        *h   = 0;
    AliITSDetTypeSim *sim = ITS->GetDetTypeSim();
    AliITSgeom *gm=0;
    gm = ITS->GetITSgeom();
    if(!gm){
        cout <<"No AliITSgeom object found in ITS"<<endl;
        if(!gGeoManager){
            cout <<"No gGeoManger. Aborting"<<endl;
            return kFALSE;
        }else{
            ITS->UpdateInternalGeometry(gGeoManager);
        } // end if
    } // end if !AliITSgeom
    //
    Int_t nMods= gm->GetIndexMax(),nEvents=AliRunLoader::GetNumberOfEvents();
    Int_t mod=0,evnt=0,size=-1,irp=0,ih=0,trkindexOld=-1;
    Double_t xmod,nHitPerTrack;
    TTree            *rpt = 0;
    TClonesArray     *rpa = 0;
    AliITSRecPoint   *rp  = 0;
    AliITSDetTypeRec *rec = new AliITSDetTypeRec(ITSloader);
    rec->SetDefaults();
    // We are going to use the following
    // <hit_x[i]> == { Sum_j hit_x[i][j] }/N_hits per track
    // d_x[i] == <hit_x[i]>-recpoint_x[i]
    // <d_x>  == {sum_i d_x[i]}/N_RecPoints   (excluding noise and no merging)
    //         = {sum_i (<hit_x[i]>-recpoint_x[i])}/N_RecPoints
    //         = {sum_i ((sum_j hit_x[i][j])/N_hits_per_track -recpoinnt_x[i])}/N_Recpoints
    //         = sum_i sum_j {hit_x[i][j]/N_hits_per_track}/N_Recpoints -
    //           sum_i {recpoint_x[i]}/N_Recpoints
    pxg = new TProfile("XdiffGlobal","Mean displacement in gX direction",nMods,
                       -0.5,(Double_t)(nMods)+0.5," ");
    pxg->SetXTitle("module");
    pxg->SetYTitle("Global X [cm]");
    pyg = new TProfile("YdiffGlobal","Mean displacement in gY direction",nMods,
                       -0.5,(Double_t)(nMods)+0.5," ");
    pyg->SetXTitle("module");
    pyg->SetYTitle("Global Y [cm]");
    pzg = new TProfile("ZdiffGlobal","Mean displacement in gZ direction",nMods,
                       -0.5,(Double_t)(nMods)+0.5," ");
    pzg->SetXTitle("module");
    pzg->SetYTitle("Global Z [cm]");
    pxl = new TProfile("XdiffLocal","Mean displacement in lX direction",nMods,
                       -0.5,(Double_t)(nMods)+0.5," ");
    pxl->SetXTitle("module");
    pxl->SetYTitle("local X [cm]");
    pyl = new TProfile("YdiffLocal","Mean displacement in lY direction",nMods,
                       -0.5,(Double_t)(nMods)+0.5," ");
    pyl->SetXTitle("module");
    pyl->SetYTitle("local Y [cm]");
    pzl = new TProfile("ZdiffLocal","Mean displacement in lZ direction",nMods,
                       -0.5,(Double_t)(nMods)+0.5," ");
    pzl->SetXTitle("module");
    pzl->SetYTitle("local Z [cm]");
    //
    for(evnt=0;evnt<nEvents;evnt++){
        runl->GetEvent(evnt);
        ITS->InitModules(size,nMods);
        ITS->FillModules(evnt,0,-1," "," ");
        rec->SetTreeAddress();
        for(mod=0;mod<nMods;mod++){
            xmod = (Double_t) mod;
            m = ITS->GetModule(mod);
            rec->ResetRecPoints();
            rpt = ITSloader->TreeR();
            rpt->GetEvent(mod);
            rpa = rec->RecPoints();
            for(irp=0;irp<rpa->GetEntriesFast();irp++){
                rp = (AliITSRecPoint*)(rpa->At(irp));
                rp->GetGlobalXYZ(rgf);rg[0]=rgf[0];rg[1]=rgf[1];rg[2]=rgf[2];
                rl[0] = rp->GetDetLocalX();
                rl[1] = 0.0;
                rl[2] = rp->GetDetLocalZ();
                pxg->Fill(xmod,-rg[0],0.5);
                pyg->Fill(xmod,-rg[1],0.5);
                pzg->Fill(xmod,-rg[2],0.5);
                pxl->Fill(xmod,-rl[0],0.5);
                //pyl->Fill(xmod,-rl[1],0.5); // assumed to be zero always.
                pzl->Fill(xmod,-rl[2],0.5);
            }// rnf got itp
            trkindexOld=-1;
            nHitPerTrack = 0.0;
            for(ih=0;ih<m->GetNhits();ih++){ // We want the median hit location
                // for each track.
                h = m->GetHit(ih);
                if(m->GetHitTrackIndex(ih)!=trkindexOld){// Enterence location
                    trkindexOld = m->GetHitTrackIndex(ih);
                    nHitPerTrack = 1.0;
                    do{
                        nHitPerTrack += 1.0;
                    }while (m->GetHitTrackIndex(ih+nHitPerTrack-1)==trkindexOld);
                    h->GetPositionG0(hg[0],hg[1],hg[2],tof);
                    h->GetPositionL0(hl[0],hl[1],hl[2],tof);
                    pxg->Fill(xmod,hg[0],0.5/nHitPerTrack);
                    pyg->Fill(xmod,hg[1],0.5/nHitPerTrack);
                    pzg->Fill(xmod,hg[2],0.5/nHitPerTrack);
                    pxl->Fill(xmod,hl[0],0.5/nHitPerTrack);
                    pyl->Fill(xmod,hl[1],1.0/nHitPerTrack); // rl[1]=0 always.
                    pzl->Fill(xmod,hl[2],0.5/nHitPerTrack);
                } // end if
                if(nHitPerTrack==0.0) continue;
                h->GetPositionG(hg[0],hg[1],hg[2],tof);
                h->GetPositionL(hl[0],hl[1],hl[2],tof);
                pxg->Fill(xmod,hg[0],0.5/nHitPerTrack);
                pyg->Fill(xmod,hg[1],0.5/nHitPerTrack);
                pzg->Fill(xmod,hg[2],0.5/nHitPerTrack);
                pxl->Fill(xmod,hl[0],0.5/nHitPerTrack);
                pyl->Fill(xmod,hl[1],1.0/nHitPerTrack); // rl[1]=0 always.
                pzl->Fill(xmod,hl[2],0.5/nHitPerTrack);
            } // end for ih
        } // end for mod
        ITS->ClearModules();
    } // end for evnt
    //
    Int_t wh=800;
    TCanvas *c0 = new TCanvas("c0","Average displacements between hits and RecPoints"
                              ,1.5*wh,wh);
    c0->Divide(3,2);
    c0->cd(1);
    pxg->Draw();
    c0->cd(2);
    pyg->Draw();
    c0->cd(3);
    pzg->Draw();
    c0->cd(4);
    pxl->Draw();
    c0->cd(5);
    pyl->Draw();
    c0->cd(6);
    pzl->Draw();
    c0->Update();
    return kTRUE;
}
 AliITSCompareHitsRecPoints.C:1
 AliITSCompareHitsRecPoints.C:2
 AliITSCompareHitsRecPoints.C:3
 AliITSCompareHitsRecPoints.C:4
 AliITSCompareHitsRecPoints.C:5
 AliITSCompareHitsRecPoints.C:6
 AliITSCompareHitsRecPoints.C:7
 AliITSCompareHitsRecPoints.C:8
 AliITSCompareHitsRecPoints.C:9
 AliITSCompareHitsRecPoints.C:10
 AliITSCompareHitsRecPoints.C:11
 AliITSCompareHitsRecPoints.C:12
 AliITSCompareHitsRecPoints.C:13
 AliITSCompareHitsRecPoints.C:14
 AliITSCompareHitsRecPoints.C:15
 AliITSCompareHitsRecPoints.C:16
 AliITSCompareHitsRecPoints.C:17
 AliITSCompareHitsRecPoints.C:18
 AliITSCompareHitsRecPoints.C:19
 AliITSCompareHitsRecPoints.C:20
 AliITSCompareHitsRecPoints.C:21
 AliITSCompareHitsRecPoints.C:22
 AliITSCompareHitsRecPoints.C:23
 AliITSCompareHitsRecPoints.C:24
 AliITSCompareHitsRecPoints.C:25
 AliITSCompareHitsRecPoints.C:26
 AliITSCompareHitsRecPoints.C:27
 AliITSCompareHitsRecPoints.C:28
 AliITSCompareHitsRecPoints.C:29
 AliITSCompareHitsRecPoints.C:30
 AliITSCompareHitsRecPoints.C:31
 AliITSCompareHitsRecPoints.C:32
 AliITSCompareHitsRecPoints.C:33
 AliITSCompareHitsRecPoints.C:34
 AliITSCompareHitsRecPoints.C:35
 AliITSCompareHitsRecPoints.C:36
 AliITSCompareHitsRecPoints.C:37
 AliITSCompareHitsRecPoints.C:38
 AliITSCompareHitsRecPoints.C:39
 AliITSCompareHitsRecPoints.C:40
 AliITSCompareHitsRecPoints.C:41
 AliITSCompareHitsRecPoints.C:42
 AliITSCompareHitsRecPoints.C:43
 AliITSCompareHitsRecPoints.C:44
 AliITSCompareHitsRecPoints.C:45
 AliITSCompareHitsRecPoints.C:46
 AliITSCompareHitsRecPoints.C:47
 AliITSCompareHitsRecPoints.C:48
 AliITSCompareHitsRecPoints.C:49
 AliITSCompareHitsRecPoints.C:50
 AliITSCompareHitsRecPoints.C:51
 AliITSCompareHitsRecPoints.C:52
 AliITSCompareHitsRecPoints.C:53
 AliITSCompareHitsRecPoints.C:54
 AliITSCompareHitsRecPoints.C:55
 AliITSCompareHitsRecPoints.C:56
 AliITSCompareHitsRecPoints.C:57
 AliITSCompareHitsRecPoints.C:58
 AliITSCompareHitsRecPoints.C:59
 AliITSCompareHitsRecPoints.C:60
 AliITSCompareHitsRecPoints.C:61
 AliITSCompareHitsRecPoints.C:62
 AliITSCompareHitsRecPoints.C:63
 AliITSCompareHitsRecPoints.C:64
 AliITSCompareHitsRecPoints.C:65
 AliITSCompareHitsRecPoints.C:66
 AliITSCompareHitsRecPoints.C:67
 AliITSCompareHitsRecPoints.C:68
 AliITSCompareHitsRecPoints.C:69
 AliITSCompareHitsRecPoints.C:70
 AliITSCompareHitsRecPoints.C:71
 AliITSCompareHitsRecPoints.C:72
 AliITSCompareHitsRecPoints.C:73
 AliITSCompareHitsRecPoints.C:74
 AliITSCompareHitsRecPoints.C:75
 AliITSCompareHitsRecPoints.C:76
 AliITSCompareHitsRecPoints.C:77
 AliITSCompareHitsRecPoints.C:78
 AliITSCompareHitsRecPoints.C:79
 AliITSCompareHitsRecPoints.C:80
 AliITSCompareHitsRecPoints.C:81
 AliITSCompareHitsRecPoints.C:82
 AliITSCompareHitsRecPoints.C:83
 AliITSCompareHitsRecPoints.C:84
 AliITSCompareHitsRecPoints.C:85
 AliITSCompareHitsRecPoints.C:86
 AliITSCompareHitsRecPoints.C:87
 AliITSCompareHitsRecPoints.C:88
 AliITSCompareHitsRecPoints.C:89
 AliITSCompareHitsRecPoints.C:90
 AliITSCompareHitsRecPoints.C:91
 AliITSCompareHitsRecPoints.C:92
 AliITSCompareHitsRecPoints.C:93
 AliITSCompareHitsRecPoints.C:94
 AliITSCompareHitsRecPoints.C:95
 AliITSCompareHitsRecPoints.C:96
 AliITSCompareHitsRecPoints.C:97
 AliITSCompareHitsRecPoints.C:98
 AliITSCompareHitsRecPoints.C:99
 AliITSCompareHitsRecPoints.C:100
 AliITSCompareHitsRecPoints.C:101
 AliITSCompareHitsRecPoints.C:102
 AliITSCompareHitsRecPoints.C:103
 AliITSCompareHitsRecPoints.C:104
 AliITSCompareHitsRecPoints.C:105
 AliITSCompareHitsRecPoints.C:106
 AliITSCompareHitsRecPoints.C:107
 AliITSCompareHitsRecPoints.C:108
 AliITSCompareHitsRecPoints.C:109
 AliITSCompareHitsRecPoints.C:110
 AliITSCompareHitsRecPoints.C:111
 AliITSCompareHitsRecPoints.C:112
 AliITSCompareHitsRecPoints.C:113
 AliITSCompareHitsRecPoints.C:114
 AliITSCompareHitsRecPoints.C:115
 AliITSCompareHitsRecPoints.C:116
 AliITSCompareHitsRecPoints.C:117
 AliITSCompareHitsRecPoints.C:118
 AliITSCompareHitsRecPoints.C:119
 AliITSCompareHitsRecPoints.C:120
 AliITSCompareHitsRecPoints.C:121
 AliITSCompareHitsRecPoints.C:122
 AliITSCompareHitsRecPoints.C:123
 AliITSCompareHitsRecPoints.C:124
 AliITSCompareHitsRecPoints.C:125
 AliITSCompareHitsRecPoints.C:126
 AliITSCompareHitsRecPoints.C:127
 AliITSCompareHitsRecPoints.C:128
 AliITSCompareHitsRecPoints.C:129
 AliITSCompareHitsRecPoints.C:130
 AliITSCompareHitsRecPoints.C:131
 AliITSCompareHitsRecPoints.C:132
 AliITSCompareHitsRecPoints.C:133
 AliITSCompareHitsRecPoints.C:134
 AliITSCompareHitsRecPoints.C:135
 AliITSCompareHitsRecPoints.C:136
 AliITSCompareHitsRecPoints.C:137
 AliITSCompareHitsRecPoints.C:138
 AliITSCompareHitsRecPoints.C:139
 AliITSCompareHitsRecPoints.C:140
 AliITSCompareHitsRecPoints.C:141
 AliITSCompareHitsRecPoints.C:142
 AliITSCompareHitsRecPoints.C:143
 AliITSCompareHitsRecPoints.C:144
 AliITSCompareHitsRecPoints.C:145
 AliITSCompareHitsRecPoints.C:146
 AliITSCompareHitsRecPoints.C:147
 AliITSCompareHitsRecPoints.C:148
 AliITSCompareHitsRecPoints.C:149
 AliITSCompareHitsRecPoints.C:150
 AliITSCompareHitsRecPoints.C:151
 AliITSCompareHitsRecPoints.C:152
 AliITSCompareHitsRecPoints.C:153
 AliITSCompareHitsRecPoints.C:154
 AliITSCompareHitsRecPoints.C:155
 AliITSCompareHitsRecPoints.C:156
 AliITSCompareHitsRecPoints.C:157
 AliITSCompareHitsRecPoints.C:158
 AliITSCompareHitsRecPoints.C:159
 AliITSCompareHitsRecPoints.C:160
 AliITSCompareHitsRecPoints.C:161
 AliITSCompareHitsRecPoints.C:162
 AliITSCompareHitsRecPoints.C:163
 AliITSCompareHitsRecPoints.C:164
 AliITSCompareHitsRecPoints.C:165
 AliITSCompareHitsRecPoints.C:166
 AliITSCompareHitsRecPoints.C:167
 AliITSCompareHitsRecPoints.C:168
 AliITSCompareHitsRecPoints.C:169
 AliITSCompareHitsRecPoints.C:170
 AliITSCompareHitsRecPoints.C:171
 AliITSCompareHitsRecPoints.C:172
 AliITSCompareHitsRecPoints.C:173
 AliITSCompareHitsRecPoints.C:174
 AliITSCompareHitsRecPoints.C:175
 AliITSCompareHitsRecPoints.C:176
 AliITSCompareHitsRecPoints.C:177
 AliITSCompareHitsRecPoints.C:178
 AliITSCompareHitsRecPoints.C:179
 AliITSCompareHitsRecPoints.C:180
 AliITSCompareHitsRecPoints.C:181
 AliITSCompareHitsRecPoints.C:182
 AliITSCompareHitsRecPoints.C:183
 AliITSCompareHitsRecPoints.C:184
 AliITSCompareHitsRecPoints.C:185
 AliITSCompareHitsRecPoints.C:186
 AliITSCompareHitsRecPoints.C:187
 AliITSCompareHitsRecPoints.C:188
 AliITSCompareHitsRecPoints.C:189
 AliITSCompareHitsRecPoints.C:190
 AliITSCompareHitsRecPoints.C:191
 AliITSCompareHitsRecPoints.C:192
 AliITSCompareHitsRecPoints.C:193
 AliITSCompareHitsRecPoints.C:194
 AliITSCompareHitsRecPoints.C:195
 AliITSCompareHitsRecPoints.C:196
 AliITSCompareHitsRecPoints.C:197