ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)

#include <Riostream.h>
#include <TFile.h>
#include <TTree.h>
#include <TBranch.h>
#include <TROOT.h>
#include <TObjArray.h>
#include <TGeoManager.h>
#include <TProfile.h>

#include "AliESD.h"
#include "AliESDVertex.h"
#include "AliESDEvent.h"

#include "AliRun.h"
#include "AliRunLoader.h"

#include "AliCDBManager.h"
#include "AliGeomManager.h"
#include "AliITS.h"
#include "AliITSgeom.h"
#include "AliITSLoader.h"
#include "AliITSRecPoint.h"

#include "AliITSTrackleterSPDEff.h"
#include "AliITSPlaneEffSPD.h"

#include <AliHeader.h>
#include <AliGenEventHeader.h>
#include <AliStack.h>

#endif

void EvaluateSPDEffWithTracklets(Char_t* dir=".", Bool_t mc=kTRUE, Bool_t bckg=kFALSE,
                                 TString cdburi="") {

  Char_t str[256];

  AliITSTrackleterSPDEff* trackleterSPDEff = new AliITSTrackleterSPDEff();
// outer layer (estrapolation)
  trackleterSPDEff->SetPhiWindow(0.07);
  trackleterSPDEff->SetZetaWindow(0.4);
// inner layer (interpolation)
  trackleterSPDEff->SetPhiWindowL1(0.10);
  trackleterSPDEff->SetZetaWindowL1(0.6);
//
  trackleterSPDEff->SetUpdateOncePerEventPlaneEff();
// Study the residual background: reflect outer RecPoints
  if(bckg) trackleterSPDEff->SetReflectClusterAroundZAxisForLayer(1,kTRUE);
//
// this special setting for MC
  if(mc) trackleterSPDEff->SetMC();
  if(trackleterSPDEff->GetMC()) trackleterSPDEff->SetUseOnlyStableParticle();
//
// this for having histograms (both from base class and the new ones)
  trackleterSPDEff->SetHistOn();
//
//
  const Int_t minCont=3;
  const Bool_t VtxMC=kFALSE;
//
  const Bool_t misalign=kTRUE;
//
  // Defining pointers
  AliRunLoader* runLoader;

    if (gAlice) {
      delete AliRunLoader::Instance();
      delete gAlice;
      gAlice=0;
    }

    sprintf(str,"%s/galice.root",dir);
    runLoader = AliRunLoader::Open(str);
    runLoader->LoadgAlice();
    gAlice = runLoader->GetAliRun();

    runLoader->LoadKinematics("read");
    runLoader->LoadTrackRefs("read");
    Int_t retval = runLoader->LoadHeader();
    if (retval){
      cerr<<"LoadHeader returned error"<<endl;
      return;
    }

    // open the new ESD file
    sprintf(str,"%s/AliESDs.root",dir);

    TFile inFile(str, "READ");
    TTree *esdTree = (TTree*)inFile.Get("esdTree");
    AliESDEvent *esd = new AliESDEvent();
    esd->ReadFromTree(esdTree);

    // Set OfflineConditionsDataBase if needed
    AliCDBManager* man = AliCDBManager::Instance();
    if (cdburi.Length() > 0) {
      printf("Default CDB storage is set to: %s\n", cdburi.Data());
      man->SetDefaultStorage(cdburi);
      man->SetRun(0);
    }
    if (!man->IsDefaultStorageSet()) {
      printf("Setting a local default CDB storage and run number 0\n");
      man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
      man->SetRun(0);
    }
    // retrives geometry
    if (!gGeoManager) {
      sprintf(str,"%s/geometry.root",dir);
      AliGeomManager::LoadGeometry(str);
    }
    // apply misalignement
    if (misalign) AliGeomManager::ApplyAlignObjsFromCDB("ITS"); 

    AliITSLoader* ITSloader =  (AliITSLoader*) runLoader->GetLoader("ITSLoader");
    if (!ITSloader){
      cerr<<"ITS loader not found"<<endl;
      return;
    }
    ITSloader->LoadRecPoints("read");

    // getting number of events
    Int_t nEvents = (Int_t)runLoader->GetNumberOfEvents();

    // loop over events
    for (Int_t iev=0; iev<nEvents; iev++) {

      runLoader->GetEvent(iev);
      // read events
      esdTree->GetEvent(iev);

      // get the ESD vertex
      const AliESDVertex* vtxESD = esd->GetVertex();
      Double_t esdvtx[3];
      vtxESD->GetXYZ(esdvtx);
      Int_t ncont=vtxESD->GetNContributors();
      if(ncont <= minCont) continue;
      Float_t ESDvtx[3];
      ESDvtx[0]=esdvtx[0];
      ESDvtx[1]=esdvtx[1];
      ESDvtx[2]=esdvtx[2];

      // get the MC vertex
      TArrayF vertex(3);
      runLoader->GetHeader()->GenEventHeader()->PrimaryVertex(vertex);

     // Read the generated particles
     AliStack *pStack=0x0; TTree *tRefTree=0x0;
     if (trackleterSPDEff->GetMC()) {
       pStack= runLoader->Stack();
       tRefTree= runLoader->TreeTR();
     }

     TTree *itsClusterTree = ITSloader->TreeR();

     if(!VtxMC) {
      if (ESDvtx[2]!=0.) {
        if(trackleterSPDEff->GetMC()) trackleterSPDEff->Reconstruct(itsClusterTree, ESDvtx, ESDvtx, pStack,t RefTree);
        else trackleterSPDEff->Reconstruct(itsClusterTree, ESDvtx, ESDvtx); }
     }
     else {
       Float_t vtx[3]={0.,0.,vertex[2]};
       if(trackleterSPDEff->GetMC()) trackleterSPDEff->Reconstruct(itsClusterTree, vtx, vtx, pStack,tRefTree );
     }

   } // end loop over events

   runLoader->UnloadAll();
   delete runLoader;

if(trackleterSPDEff->GetMC()) trackleterSPDEff->SavePredictionMC("TrackletsMCpred.root");
if(!bckg && !trackleterSPDEff->WriteHistosToFile()) printf("cannot write histos to file \n");
//trackleterSPDEff->GetPlaneEff()->WriteIntoCDB();
const char* name="AliITSPlaneEffSPDtracklet.root";
TFile* pefile = TFile::Open(name, "RECREATE");
Int_t nb=trackleterSPDEff->GetPlaneEff()->Write();
if(nb>0) printf("Writing PlaneEfficiency to file %s\n",name);
pefile->Close();
return;
}
 EvaluateSPDEffWithTracklets.C:1
 EvaluateSPDEffWithTracklets.C:2
 EvaluateSPDEffWithTracklets.C:3
 EvaluateSPDEffWithTracklets.C:4
 EvaluateSPDEffWithTracklets.C:5
 EvaluateSPDEffWithTracklets.C:6
 EvaluateSPDEffWithTracklets.C:7
 EvaluateSPDEffWithTracklets.C:8
 EvaluateSPDEffWithTracklets.C:9
 EvaluateSPDEffWithTracklets.C:10
 EvaluateSPDEffWithTracklets.C:11
 EvaluateSPDEffWithTracklets.C:12
 EvaluateSPDEffWithTracklets.C:13
 EvaluateSPDEffWithTracklets.C:14
 EvaluateSPDEffWithTracklets.C:15
 EvaluateSPDEffWithTracklets.C:16
 EvaluateSPDEffWithTracklets.C:17
 EvaluateSPDEffWithTracklets.C:18
 EvaluateSPDEffWithTracklets.C:19
 EvaluateSPDEffWithTracklets.C:20
 EvaluateSPDEffWithTracklets.C:21
 EvaluateSPDEffWithTracklets.C:22
 EvaluateSPDEffWithTracklets.C:23
 EvaluateSPDEffWithTracklets.C:24
 EvaluateSPDEffWithTracklets.C:25
 EvaluateSPDEffWithTracklets.C:26
 EvaluateSPDEffWithTracklets.C:27
 EvaluateSPDEffWithTracklets.C:28
 EvaluateSPDEffWithTracklets.C:29
 EvaluateSPDEffWithTracklets.C:30
 EvaluateSPDEffWithTracklets.C:31
 EvaluateSPDEffWithTracklets.C:32
 EvaluateSPDEffWithTracklets.C:33
 EvaluateSPDEffWithTracklets.C:34
 EvaluateSPDEffWithTracklets.C:35
 EvaluateSPDEffWithTracklets.C:36
 EvaluateSPDEffWithTracklets.C:37
 EvaluateSPDEffWithTracklets.C:38
 EvaluateSPDEffWithTracklets.C:39
 EvaluateSPDEffWithTracklets.C:40
 EvaluateSPDEffWithTracklets.C:41
 EvaluateSPDEffWithTracklets.C:42
 EvaluateSPDEffWithTracklets.C:43
 EvaluateSPDEffWithTracklets.C:44
 EvaluateSPDEffWithTracklets.C:45
 EvaluateSPDEffWithTracklets.C:46
 EvaluateSPDEffWithTracklets.C:47
 EvaluateSPDEffWithTracklets.C:48
 EvaluateSPDEffWithTracklets.C:49
 EvaluateSPDEffWithTracklets.C:50
 EvaluateSPDEffWithTracklets.C:51
 EvaluateSPDEffWithTracklets.C:52
 EvaluateSPDEffWithTracklets.C:53
 EvaluateSPDEffWithTracklets.C:54
 EvaluateSPDEffWithTracklets.C:55
 EvaluateSPDEffWithTracklets.C:56
 EvaluateSPDEffWithTracklets.C:57
 EvaluateSPDEffWithTracklets.C:58
 EvaluateSPDEffWithTracklets.C:59
 EvaluateSPDEffWithTracklets.C:60
 EvaluateSPDEffWithTracklets.C:61
 EvaluateSPDEffWithTracklets.C:62
 EvaluateSPDEffWithTracklets.C:63
 EvaluateSPDEffWithTracklets.C:64
 EvaluateSPDEffWithTracklets.C:65
 EvaluateSPDEffWithTracklets.C:66
 EvaluateSPDEffWithTracklets.C:67
 EvaluateSPDEffWithTracklets.C:68
 EvaluateSPDEffWithTracklets.C:69
 EvaluateSPDEffWithTracklets.C:70
 EvaluateSPDEffWithTracklets.C:71
 EvaluateSPDEffWithTracklets.C:72
 EvaluateSPDEffWithTracklets.C:73
 EvaluateSPDEffWithTracklets.C:74
 EvaluateSPDEffWithTracklets.C:75
 EvaluateSPDEffWithTracklets.C:76
 EvaluateSPDEffWithTracklets.C:77
 EvaluateSPDEffWithTracklets.C:78
 EvaluateSPDEffWithTracklets.C:79
 EvaluateSPDEffWithTracklets.C:80
 EvaluateSPDEffWithTracklets.C:81
 EvaluateSPDEffWithTracklets.C:82
 EvaluateSPDEffWithTracklets.C:83
 EvaluateSPDEffWithTracklets.C:84
 EvaluateSPDEffWithTracklets.C:85
 EvaluateSPDEffWithTracklets.C:86
 EvaluateSPDEffWithTracklets.C:87
 EvaluateSPDEffWithTracklets.C:88
 EvaluateSPDEffWithTracklets.C:89
 EvaluateSPDEffWithTracklets.C:90
 EvaluateSPDEffWithTracklets.C:91
 EvaluateSPDEffWithTracklets.C:92
 EvaluateSPDEffWithTracklets.C:93
 EvaluateSPDEffWithTracklets.C:94
 EvaluateSPDEffWithTracklets.C:95
 EvaluateSPDEffWithTracklets.C:96
 EvaluateSPDEffWithTracklets.C:97
 EvaluateSPDEffWithTracklets.C:98
 EvaluateSPDEffWithTracklets.C:99
 EvaluateSPDEffWithTracklets.C:100
 EvaluateSPDEffWithTracklets.C:101
 EvaluateSPDEffWithTracklets.C:102
 EvaluateSPDEffWithTracklets.C:103
 EvaluateSPDEffWithTracklets.C:104
 EvaluateSPDEffWithTracklets.C:105
 EvaluateSPDEffWithTracklets.C:106
 EvaluateSPDEffWithTracklets.C:107
 EvaluateSPDEffWithTracklets.C:108
 EvaluateSPDEffWithTracklets.C:109
 EvaluateSPDEffWithTracklets.C:110
 EvaluateSPDEffWithTracklets.C:111
 EvaluateSPDEffWithTracklets.C:112
 EvaluateSPDEffWithTracklets.C:113
 EvaluateSPDEffWithTracklets.C:114
 EvaluateSPDEffWithTracklets.C:115
 EvaluateSPDEffWithTracklets.C:116
 EvaluateSPDEffWithTracklets.C:117
 EvaluateSPDEffWithTracklets.C:118
 EvaluateSPDEffWithTracklets.C:119
 EvaluateSPDEffWithTracklets.C:120
 EvaluateSPDEffWithTracklets.C:121
 EvaluateSPDEffWithTracklets.C:122
 EvaluateSPDEffWithTracklets.C:123
 EvaluateSPDEffWithTracklets.C:124
 EvaluateSPDEffWithTracklets.C:125
 EvaluateSPDEffWithTracklets.C:126
 EvaluateSPDEffWithTracklets.C:127
 EvaluateSPDEffWithTracklets.C:128
 EvaluateSPDEffWithTracklets.C:129
 EvaluateSPDEffWithTracklets.C:130
 EvaluateSPDEffWithTracklets.C:131
 EvaluateSPDEffWithTracklets.C:132
 EvaluateSPDEffWithTracklets.C:133
 EvaluateSPDEffWithTracklets.C:134
 EvaluateSPDEffWithTracklets.C:135
 EvaluateSPDEffWithTracklets.C:136
 EvaluateSPDEffWithTracklets.C:137
 EvaluateSPDEffWithTracklets.C:138
 EvaluateSPDEffWithTracklets.C:139
 EvaluateSPDEffWithTracklets.C:140
 EvaluateSPDEffWithTracklets.C:141
 EvaluateSPDEffWithTracklets.C:142
 EvaluateSPDEffWithTracklets.C:143
 EvaluateSPDEffWithTracklets.C:144
 EvaluateSPDEffWithTracklets.C:145
 EvaluateSPDEffWithTracklets.C:146
 EvaluateSPDEffWithTracklets.C:147
 EvaluateSPDEffWithTracklets.C:148
 EvaluateSPDEffWithTracklets.C:149
 EvaluateSPDEffWithTracklets.C:150
 EvaluateSPDEffWithTracklets.C:151
 EvaluateSPDEffWithTracklets.C:152
 EvaluateSPDEffWithTracklets.C:153
 EvaluateSPDEffWithTracklets.C:154
 EvaluateSPDEffWithTracklets.C:155
 EvaluateSPDEffWithTracklets.C:156
 EvaluateSPDEffWithTracklets.C:157
 EvaluateSPDEffWithTracklets.C:158
 EvaluateSPDEffWithTracklets.C:159
 EvaluateSPDEffWithTracklets.C:160
 EvaluateSPDEffWithTracklets.C:161
 EvaluateSPDEffWithTracklets.C:162
 EvaluateSPDEffWithTracklets.C:163
 EvaluateSPDEffWithTracklets.C:164
 EvaluateSPDEffWithTracklets.C:165
 EvaluateSPDEffWithTracklets.C:166
 EvaluateSPDEffWithTracklets.C:167
 EvaluateSPDEffWithTracklets.C:168
 EvaluateSPDEffWithTracklets.C:169
 EvaluateSPDEffWithTracklets.C:170
 EvaluateSPDEffWithTracklets.C:171
 EvaluateSPDEffWithTracklets.C:172
 EvaluateSPDEffWithTracklets.C:173
 EvaluateSPDEffWithTracklets.C:174
 EvaluateSPDEffWithTracklets.C:175
 EvaluateSPDEffWithTracklets.C:176
 EvaluateSPDEffWithTracklets.C:177
 EvaluateSPDEffWithTracklets.C:178
 EvaluateSPDEffWithTracklets.C:179
 EvaluateSPDEffWithTracklets.C:180
 EvaluateSPDEffWithTracklets.C:181