ROOT logo
void AliBarrelRec_TPCparam(Int_t firstEvent=0,Int_t lastEvent=0) {
  //
  // Macro to create AliESDs.root using parametrized TPC tracking
  // and AliITStrackerSA (MI + SA)
  //
  // Input files:
  // - galice.root
  // - Kinematics.root
  // - TrackReferences.root
  // - ITS.RecPoints.root (use AliRecontruction class)
  // - ITS.Vertex.root (use $ALICE_ROOT/ITS/AliITSVertexerZTest.C)
  //
  // A. Dainese - INFN Legnaro
  //


  Int_t  collcode = 1; // pp collisions
  Bool_t useMeanVtx = kFALSE;
  
  AliGeomManager::LoadGeometry("geometry.root");
  
  if (gAlice) {
    delete AliRunLoader::Instance();
    delete gAlice; 
    gAlice=0;
  }
  AliRunLoader *rl = AliRunLoader::Open("galice.root");
  if (rl == 0x0) {
    cerr<<"Can not open session"<<endl;
    return;
  }
  Int_t retval = rl->LoadgAlice();
  if (retval) {
    cerr<<"LoadgAlice returned error"<<endl;
    delete rl;
    return;
  }
  retval = rl->LoadHeader();
  if (retval) {
    cerr<<"LoadHeader returned error"<<endl;
    delete rl;
    return;
  }
  gAlice=rl->GetAliRun();
  
  
  
  // Get field from galice.root
  AliMagF *fiel = (AliMagF*)gAlice->Field();
  Double_t fieval=TMath::Abs((Double_t)fiel->SolenoidField()/10.);
  // Set the conversion constant between curvature and Pt
  AliTracker::SetFieldMap(fiel,kTRUE);
  
  /**** The TPC corner ********************/
  
  AliTPCtrackerParam tpcTrackerPar(collcode,fieval);
  tpcTrackerPar.Init();
  
  //**** Switch on the PID class (mandatory!)
  AliPID pid;
  
  /**** The ITS corner ********************/
  
  AliITSLoader* itsl = (AliITSLoader*)rl->GetLoader("ITSLoader");
  if (itsl == 0x0) {
    cerr<<"Cannot get the ITS loader"<<endl;
    return;
  }
  itsl->LoadRecPoints("read");
  
  AliITSRecoParam * itsRecoParam = AliITSRecoParam::GetLowFluxParam();
  AliITSReconstructor::SetRecoParam(itsRecoParam);
  
  // Instance of the ITS tracker
  AliITStrackerSA itsTracker(0);
  Int_t ITSclusters[6] = {1,1,1,1,1,1};
  itsTracker.SetLayersNotToSkip(ITSclusters);  
  
  // Primary vertex reconstruction in pp
  AliESDVertex *initVertex = 0;
  TFile *invtx = new TFile("AliESDVertexMean.root");
  if(collcode==1 && useMeanVtx) {
    // open the mean vertex
    initVertex = (AliESDVertex*)invtx->Get("vtxmean");
  } else {
    Double_t pos[3]={0.5,0.5,0.}; 
    Double_t err[3]={3.,3.,5.};
    initVertex = new AliESDVertex(pos,err);
  }
  invtx->Close();
  delete invtx;
  AliVertexerTracks *vertexer = new AliVertexerTracks(AliTracker::GetBz());
  vertexer->SetVtxStart(initVertex);
  vertexer->SetDebug(0);
  delete initVertex;
  initVertex=0;
  
  /***** The TREE for ESD is born *****/
  TTree *esdTree=new TTree("esdTree","Tree with ESD objects");
  AliESDEvent *event=0; AliESDEvent *eventTPCin=0;
  event = new AliESDEvent();
  event->CreateStdContent();
  event->WriteToTree(esdTree);
  
  if(firstEvent>rl->GetNumberOfEvents()) firstEvent=rl->GetNumberOfEvents()-1;
  if(lastEvent>rl->GetNumberOfEvents())  lastEvent=rl->GetNumberOfEvents()-1;
  cout<<" Number of events: "<<1+lastEvent-firstEvent<<endl;
  
  TFile *ppZ = TFile::Open("ITS.Vertex.root"); // z vertices from SPD
  AliESDVertex *vertexSPD = new AliESDVertex();
  Char_t zver[100];
  Double_t vtx[3]={0,0,0};
  Double_t sigmavtx[3]={0.07,0.07,0.1};


  //<---------------------------------- The Loop over events begins
  TStopwatch timer;
  Int_t trc;
  for(Int_t i=firstEvent; i<=lastEvent; i++) { 
    
    cout<<" Processing event number : "<<i<<endl;
    //AliESDEvent *event = new AliESDEvent(); 
    event->SetRunNumber(gAlice->GetRunNumber());
    event->SetEventNumberInFile(i);
    event->SetMagneticField(gAlice->Field()->SolenoidField());
    rl->GetEvent(i);

    //***** Primary vertex from SPD from file 
    sprintf(zver,"Event%d/Vertex",i);
    vertexSPD = (AliESDVertex*)ppZ->Get(zver);
    if(!vertexSPD) {
      esdTree->Fill(); event->Reset();
      continue;
    }      
    event->SetVertex(vertexSPD);
    vertexSPD->GetXYZ(vtx);
    vertexSPD->GetSigmaXYZ(sigmavtx);

    //***** TPC tracking
    if ( (trc=tpcTrackerPar.BuildTPCtracks(event)) ) {
      printf("exiting TPC tracker with code %d in event %d\n",trc,i);
      esdTree->Fill(); event->Reset();
      continue;
    }

    // make a copy of the ESD at this stage
    eventTPCin = event;

    //***** ITS tracking
    itsTracker.AliTracker::SetVertex(vtx,sigmavtx);
    //    itsl->LoadRecPoints("read");
    TTree *itsTree=itsl->TreeR();
    if (!itsTree) {
      cerr<<"Can't get the ITS cluster tree !\n";
      esdTree->Fill(); event->Reset();
      return;
    }     
    itsTracker.UnloadClusters();
    itsTracker.LoadClusters(itsTree);
    if ( (trc=itsTracker.Clusters2Tracks(event)) ) {
      printf("exiting ITS tracker with code %d in event %d\n",trc,i);
      esdTree->Fill(); event->Reset();
      continue;
    }

    // Bring kTPCin-tracks back to the TPC inner wall
    BackToTPCInnerWall(event,eventTPCin);

    // refit inward in ITS:
    // - refit without vertex constraint
    // - propagate through beam pipe to local x = 0
    itsTracker.RefitInward(event);
    

    //***** Vertex from ESD tracks
    if(collcode==1) { // pp
      AliESDVertex *vertexTrks = 
	(AliESDVertex*)vertexer->FindPrimaryVertex(event);
      event->SetPrimaryVertex(vertexTrks); 
    }
    
    esdTree->Fill();
    event->Reset();

  }//<-----------------------------------The Loop over events ends here
  timer.Stop(); timer.Print();
  
  // The AliESDs.root is born
  TFile *ef = TFile::Open("AliESDs.root","RECREATE"); 
  if (!ef || !ef->IsOpen()) {cerr<<"Can't open AliESDs.root !\n"; return;}

  //Write the tree and close everything
  esdTree->Write();
  delete esdTree;
  ef->Close();

  delete vertexer;
  delete rl;

  return;
}
//--------------------------------------------------------------------------
void BackToTPCInnerWall(AliESDEvent *event,AliESDEvent *eventTPC) {

  Int_t ntracks = eventTPC->GetNumberOfTracks();
  AliESDtrack *esdTrackTPC = 0;

  // create relation between event and eventTPC
  Int_t labelsTPC[100000000];
  for(Int_t tr = 0; tr<ntracks; tr++) {
    esdTrackTPC = (AliESDtrack*)event->GetTrack(tr);
    labelsTPC[TMath::Abs(esdTrackTPC->GetLabel())] = tr;
  }

  ntracks = event->GetNumberOfTracks();
  AliESDtrack *esdTrack = 0;
  esdTrackTPC = 0;
  Int_t indexTPC;

  // loop on tracks
  for(tr = 0; tr<ntracks; tr++) {
    esdTrack = (AliESDtrack*)event->GetTrack(tr);
    // set to kITSout the tracks that don't have kTPCin
    // (they've been found by AliITStrackerSA)
    if(!(esdTrack->GetStatus()&AliESDtrack::kTPCin)) {
      esdTrack->SetStatus(AliESDtrack::kITSout);
      continue;
    }

    // skip tracks that don't have kITSin
    if(!(esdTrack->GetStatus()&AliESDtrack::kITSin)) continue;

    indexTPC = labelsTPC[TMath::Abs(esdTrack->GetLabel())];
    esdTrackTPC = (AliESDtrack*)eventTPC->GetTrack(indexTPC);

    AliITStrackMI *itsTrack = 0;
    try {
      itsTrack = new AliITStrackMI(*esdTrackTPC);
      esdTrack = 0;
    }
    catch (const Char_t *msg) {
        Warning("ToTPCInnerWall",msg);
        continue;
    }
    itsTrack->UpdateESDtrack(AliESDtrack::kITSout);
    esdTrack = new AliESDtrack(*(itsTrack->GetESDtrack()));

    delete itsTrack;
  } // end loop on tracks

  return;
}
//--------------------------------------------------------------------------
 AliBarrelRec_TPCparam.C:1
 AliBarrelRec_TPCparam.C:2
 AliBarrelRec_TPCparam.C:3
 AliBarrelRec_TPCparam.C:4
 AliBarrelRec_TPCparam.C:5
 AliBarrelRec_TPCparam.C:6
 AliBarrelRec_TPCparam.C:7
 AliBarrelRec_TPCparam.C:8
 AliBarrelRec_TPCparam.C:9
 AliBarrelRec_TPCparam.C:10
 AliBarrelRec_TPCparam.C:11
 AliBarrelRec_TPCparam.C:12
 AliBarrelRec_TPCparam.C:13
 AliBarrelRec_TPCparam.C:14
 AliBarrelRec_TPCparam.C:15
 AliBarrelRec_TPCparam.C:16
 AliBarrelRec_TPCparam.C:17
 AliBarrelRec_TPCparam.C:18
 AliBarrelRec_TPCparam.C:19
 AliBarrelRec_TPCparam.C:20
 AliBarrelRec_TPCparam.C:21
 AliBarrelRec_TPCparam.C:22
 AliBarrelRec_TPCparam.C:23
 AliBarrelRec_TPCparam.C:24
 AliBarrelRec_TPCparam.C:25
 AliBarrelRec_TPCparam.C:26
 AliBarrelRec_TPCparam.C:27
 AliBarrelRec_TPCparam.C:28
 AliBarrelRec_TPCparam.C:29
 AliBarrelRec_TPCparam.C:30
 AliBarrelRec_TPCparam.C:31
 AliBarrelRec_TPCparam.C:32
 AliBarrelRec_TPCparam.C:33
 AliBarrelRec_TPCparam.C:34
 AliBarrelRec_TPCparam.C:35
 AliBarrelRec_TPCparam.C:36
 AliBarrelRec_TPCparam.C:37
 AliBarrelRec_TPCparam.C:38
 AliBarrelRec_TPCparam.C:39
 AliBarrelRec_TPCparam.C:40
 AliBarrelRec_TPCparam.C:41
 AliBarrelRec_TPCparam.C:42
 AliBarrelRec_TPCparam.C:43
 AliBarrelRec_TPCparam.C:44
 AliBarrelRec_TPCparam.C:45
 AliBarrelRec_TPCparam.C:46
 AliBarrelRec_TPCparam.C:47
 AliBarrelRec_TPCparam.C:48
 AliBarrelRec_TPCparam.C:49
 AliBarrelRec_TPCparam.C:50
 AliBarrelRec_TPCparam.C:51
 AliBarrelRec_TPCparam.C:52
 AliBarrelRec_TPCparam.C:53
 AliBarrelRec_TPCparam.C:54
 AliBarrelRec_TPCparam.C:55
 AliBarrelRec_TPCparam.C:56
 AliBarrelRec_TPCparam.C:57
 AliBarrelRec_TPCparam.C:58
 AliBarrelRec_TPCparam.C:59
 AliBarrelRec_TPCparam.C:60
 AliBarrelRec_TPCparam.C:61
 AliBarrelRec_TPCparam.C:62
 AliBarrelRec_TPCparam.C:63
 AliBarrelRec_TPCparam.C:64
 AliBarrelRec_TPCparam.C:65
 AliBarrelRec_TPCparam.C:66
 AliBarrelRec_TPCparam.C:67
 AliBarrelRec_TPCparam.C:68
 AliBarrelRec_TPCparam.C:69
 AliBarrelRec_TPCparam.C:70
 AliBarrelRec_TPCparam.C:71
 AliBarrelRec_TPCparam.C:72
 AliBarrelRec_TPCparam.C:73
 AliBarrelRec_TPCparam.C:74
 AliBarrelRec_TPCparam.C:75
 AliBarrelRec_TPCparam.C:76
 AliBarrelRec_TPCparam.C:77
 AliBarrelRec_TPCparam.C:78
 AliBarrelRec_TPCparam.C:79
 AliBarrelRec_TPCparam.C:80
 AliBarrelRec_TPCparam.C:81
 AliBarrelRec_TPCparam.C:82
 AliBarrelRec_TPCparam.C:83
 AliBarrelRec_TPCparam.C:84
 AliBarrelRec_TPCparam.C:85
 AliBarrelRec_TPCparam.C:86
 AliBarrelRec_TPCparam.C:87
 AliBarrelRec_TPCparam.C:88
 AliBarrelRec_TPCparam.C:89
 AliBarrelRec_TPCparam.C:90
 AliBarrelRec_TPCparam.C:91
 AliBarrelRec_TPCparam.C:92
 AliBarrelRec_TPCparam.C:93
 AliBarrelRec_TPCparam.C:94
 AliBarrelRec_TPCparam.C:95
 AliBarrelRec_TPCparam.C:96
 AliBarrelRec_TPCparam.C:97
 AliBarrelRec_TPCparam.C:98
 AliBarrelRec_TPCparam.C:99
 AliBarrelRec_TPCparam.C:100
 AliBarrelRec_TPCparam.C:101
 AliBarrelRec_TPCparam.C:102
 AliBarrelRec_TPCparam.C:103
 AliBarrelRec_TPCparam.C:104
 AliBarrelRec_TPCparam.C:105
 AliBarrelRec_TPCparam.C:106
 AliBarrelRec_TPCparam.C:107
 AliBarrelRec_TPCparam.C:108
 AliBarrelRec_TPCparam.C:109
 AliBarrelRec_TPCparam.C:110
 AliBarrelRec_TPCparam.C:111
 AliBarrelRec_TPCparam.C:112
 AliBarrelRec_TPCparam.C:113
 AliBarrelRec_TPCparam.C:114
 AliBarrelRec_TPCparam.C:115
 AliBarrelRec_TPCparam.C:116
 AliBarrelRec_TPCparam.C:117
 AliBarrelRec_TPCparam.C:118
 AliBarrelRec_TPCparam.C:119
 AliBarrelRec_TPCparam.C:120
 AliBarrelRec_TPCparam.C:121
 AliBarrelRec_TPCparam.C:122
 AliBarrelRec_TPCparam.C:123
 AliBarrelRec_TPCparam.C:124
 AliBarrelRec_TPCparam.C:125
 AliBarrelRec_TPCparam.C:126
 AliBarrelRec_TPCparam.C:127
 AliBarrelRec_TPCparam.C:128
 AliBarrelRec_TPCparam.C:129
 AliBarrelRec_TPCparam.C:130
 AliBarrelRec_TPCparam.C:131
 AliBarrelRec_TPCparam.C:132
 AliBarrelRec_TPCparam.C:133
 AliBarrelRec_TPCparam.C:134
 AliBarrelRec_TPCparam.C:135
 AliBarrelRec_TPCparam.C:136
 AliBarrelRec_TPCparam.C:137
 AliBarrelRec_TPCparam.C:138
 AliBarrelRec_TPCparam.C:139
 AliBarrelRec_TPCparam.C:140
 AliBarrelRec_TPCparam.C:141
 AliBarrelRec_TPCparam.C:142
 AliBarrelRec_TPCparam.C:143
 AliBarrelRec_TPCparam.C:144
 AliBarrelRec_TPCparam.C:145
 AliBarrelRec_TPCparam.C:146
 AliBarrelRec_TPCparam.C:147
 AliBarrelRec_TPCparam.C:148
 AliBarrelRec_TPCparam.C:149
 AliBarrelRec_TPCparam.C:150
 AliBarrelRec_TPCparam.C:151
 AliBarrelRec_TPCparam.C:152
 AliBarrelRec_TPCparam.C:153
 AliBarrelRec_TPCparam.C:154
 AliBarrelRec_TPCparam.C:155
 AliBarrelRec_TPCparam.C:156
 AliBarrelRec_TPCparam.C:157
 AliBarrelRec_TPCparam.C:158
 AliBarrelRec_TPCparam.C:159
 AliBarrelRec_TPCparam.C:160
 AliBarrelRec_TPCparam.C:161
 AliBarrelRec_TPCparam.C:162
 AliBarrelRec_TPCparam.C:163
 AliBarrelRec_TPCparam.C:164
 AliBarrelRec_TPCparam.C:165
 AliBarrelRec_TPCparam.C:166
 AliBarrelRec_TPCparam.C:167
 AliBarrelRec_TPCparam.C:168
 AliBarrelRec_TPCparam.C:169
 AliBarrelRec_TPCparam.C:170
 AliBarrelRec_TPCparam.C:171
 AliBarrelRec_TPCparam.C:172
 AliBarrelRec_TPCparam.C:173
 AliBarrelRec_TPCparam.C:174
 AliBarrelRec_TPCparam.C:175
 AliBarrelRec_TPCparam.C:176
 AliBarrelRec_TPCparam.C:177
 AliBarrelRec_TPCparam.C:178
 AliBarrelRec_TPCparam.C:179
 AliBarrelRec_TPCparam.C:180
 AliBarrelRec_TPCparam.C:181
 AliBarrelRec_TPCparam.C:182
 AliBarrelRec_TPCparam.C:183
 AliBarrelRec_TPCparam.C:184
 AliBarrelRec_TPCparam.C:185
 AliBarrelRec_TPCparam.C:186
 AliBarrelRec_TPCparam.C:187
 AliBarrelRec_TPCparam.C:188
 AliBarrelRec_TPCparam.C:189
 AliBarrelRec_TPCparam.C:190
 AliBarrelRec_TPCparam.C:191
 AliBarrelRec_TPCparam.C:192
 AliBarrelRec_TPCparam.C:193
 AliBarrelRec_TPCparam.C:194
 AliBarrelRec_TPCparam.C:195
 AliBarrelRec_TPCparam.C:196
 AliBarrelRec_TPCparam.C:197
 AliBarrelRec_TPCparam.C:198
 AliBarrelRec_TPCparam.C:199
 AliBarrelRec_TPCparam.C:200
 AliBarrelRec_TPCparam.C:201
 AliBarrelRec_TPCparam.C:202
 AliBarrelRec_TPCparam.C:203
 AliBarrelRec_TPCparam.C:204
 AliBarrelRec_TPCparam.C:205
 AliBarrelRec_TPCparam.C:206
 AliBarrelRec_TPCparam.C:207
 AliBarrelRec_TPCparam.C:208
 AliBarrelRec_TPCparam.C:209
 AliBarrelRec_TPCparam.C:210
 AliBarrelRec_TPCparam.C:211
 AliBarrelRec_TPCparam.C:212
 AliBarrelRec_TPCparam.C:213
 AliBarrelRec_TPCparam.C:214
 AliBarrelRec_TPCparam.C:215
 AliBarrelRec_TPCparam.C:216
 AliBarrelRec_TPCparam.C:217
 AliBarrelRec_TPCparam.C:218
 AliBarrelRec_TPCparam.C:219
 AliBarrelRec_TPCparam.C:220
 AliBarrelRec_TPCparam.C:221
 AliBarrelRec_TPCparam.C:222
 AliBarrelRec_TPCparam.C:223
 AliBarrelRec_TPCparam.C:224
 AliBarrelRec_TPCparam.C:225
 AliBarrelRec_TPCparam.C:226
 AliBarrelRec_TPCparam.C:227
 AliBarrelRec_TPCparam.C:228
 AliBarrelRec_TPCparam.C:229
 AliBarrelRec_TPCparam.C:230
 AliBarrelRec_TPCparam.C:231
 AliBarrelRec_TPCparam.C:232
 AliBarrelRec_TPCparam.C:233
 AliBarrelRec_TPCparam.C:234
 AliBarrelRec_TPCparam.C:235
 AliBarrelRec_TPCparam.C:236
 AliBarrelRec_TPCparam.C:237
 AliBarrelRec_TPCparam.C:238
 AliBarrelRec_TPCparam.C:239
 AliBarrelRec_TPCparam.C:240
 AliBarrelRec_TPCparam.C:241
 AliBarrelRec_TPCparam.C:242
 AliBarrelRec_TPCparam.C:243
 AliBarrelRec_TPCparam.C:244
 AliBarrelRec_TPCparam.C:245
 AliBarrelRec_TPCparam.C:246
 AliBarrelRec_TPCparam.C:247
 AliBarrelRec_TPCparam.C:248
 AliBarrelRec_TPCparam.C:249
 AliBarrelRec_TPCparam.C:250
 AliBarrelRec_TPCparam.C:251
 AliBarrelRec_TPCparam.C:252
 AliBarrelRec_TPCparam.C:253
 AliBarrelRec_TPCparam.C:254