ROOT logo
////////////////////////////////////////////////////////////////////////
//
// AliTRDTracking.C 
//
// date: 06.02.2003
// author: Thomas Kuhr based on AliTPCTracking.C
// version: 1.0
// description: 
//      reconstructs of tracks in TRD in the following steps:
//         TRD cluster finding
//         TRD track finding
// input parameters: 
//        Int_t nEvents      ... nr of events to process
//        Int_t firstEventNr ... first event number (starts from 0)
//        const char* fileNameParam ... name of file with TPC parameters
//        const char* fileNameHits ... name of file with hits
//        const char* fileNameDigits .. name of file with TRD digits
//        const char* fileNameSeeds .. name of file with TPC track seeds
//        const char* fileNameClusters .. name of file with TRD clusters (output)
//        const char* fileNameTracks .. name of file with TRD tracks (output)
//
//        default file names correspond to pp production (2002-04)
//
////////////////////////////////////////////////////////////////////////

#if !defined(__CINT__) || defined(__MAKECINT__)
#include "Riostream.h"
#include "TFile.h"
#include "TBenchmark.h"
#include "AliTRD.h"
#include "AliTRDparameter.h"
#include "AliTRDtracker.h"
#include "AliTRDclusterizerV1.h"
#include "AliTPC.h"
#include "AliTPCParamSR.h"
#include "AliTPCtracker.h"
#include "AliITS.h"
#include "AliITSgeom.h"
#include "AliITStrackerV2.h"
#include "AliRun.h"
#endif

Int_t gDEBUG = 2;

Int_t AliTRDTracking(Int_t nEvents=1, Int_t firstEvent=0,
		     const char* fileNameParam="trd.sdigits.root",
		     const char* fileNameDigits="trd.digits.root",
		     const char* fileNameSeed="tpc.tracks.root",
		     const char* fileNameClusters="trd.clusters.root",
		     const char* fileNameTracks="trd.tracks.root");

Bool_t ITSPropagateBack(Int_t nEvents=1, Int_t firstEvent=0,
			const char* fileNameClusters="its.clusters.root",
			const char* fileNameTracks="its.tracks.root",
			const char* fileNameBackTracks="its.back.tracks.root");
Bool_t TPCPropagateBack(Int_t nEvents=1, Int_t firstEvent=0,
			const char* fileNameClusters="tpc.clusters.root",
			const char* fileNameTracks="tpc.tracks.root",
			const char* fileNameITSBackTracks="its.back.tracks.root",
			const char* fileNameBackTracks="tpc.back.tracks.root");
Bool_t TRDFindClusters(Int_t nEvents=1, Int_t firstEvent=0,
		      const char* fileNameParam="trd.sdigits.root", 
		      const char* fileNameDigits="trd.digits.root", 
		      const char* fileNameClusters="trd.clusters.root");
Bool_t TRDFindTracks(Int_t nEvents=1, Int_t firstEvent=0,
		    const char* fileNameSeeds="tpc.tracks.root",
		    const char* fileNameClusters="trd.clusters.root",
		    const char* fileNameTracks="trd.tracks.root",
		     Bool_t inwards = kTRUE, Bool_t addSeeds = kTRUE);


////////////////////////////////////////////////////////////////////////
Int_t AliTRDTracking( Int_t nEvents, Int_t firstEvent,
		      const char* fileNameParam,
		      const char* fileNameDigits,
		      const char* fileNameSeeds,
		      const char* fileNameClusters,
		      const char* fileNameTracks) {

  AliTracker::SetFieldFactor(fileNameParam,kFALSE);

// ********** Find TRD clusters *********** //
  if (fileNameParam && fileNameDigits && fileNameClusters){
    if (!TRDFindClusters(nEvents,firstEvent,fileNameParam,fileNameDigits,fileNameClusters)) {
      cerr<<"Failed to get TRD clusters: !\n";
      return 1;
    }
  }      

// ********** Find TRD tracks *********** //
  if (fileNameSeeds && fileNameClusters && fileNameTracks) {
    if (!TRDFindTracks(nEvents,firstEvent,fileNameSeeds,fileNameClusters,fileNameTracks)) {
      cerr<<"Failed to get TRD tracks !\n";
      return 2;
    }
  }

  return 0;
}

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
Bool_t ITSPropagateBack(Int_t nEvents, Int_t firstEvent,
			const char* fileNameClusters,
			const char* fileNameTracks,
			const char* fileNameBackTracks)
{
  const char *name="ITSPropagateBack";
  if (gDEBUG>1) cout<<name<<" starts...\n";
  if (gDEBUG>1) gBenchmark->Start(name);

  TFile* clustersFile = TFile::Open(fileNameClusters);
  if (!clustersFile->IsOpen()) {
    cerr<<"Cannot open "<<fileNameClusters<<" !\n"; 
    return kFALSE;
  }
  TFile* tracksFile = NULL;
  TFile* backTracksFile = NULL;
  if (strcmp(fileNameTracks, fileNameBackTracks) == 0) {
    tracksFile = backTracksFile = TFile::Open(fileNameTracks, "UPDATE");
  } else {
    backTracksFile = TFile::Open(fileNameBackTracks, "RECREATE");
    tracksFile = TFile::Open(fileNameTracks);
  }
  if (!tracksFile->IsOpen()) {
    cerr<<"Cannot open "<<fileNameTracks<<" !\n"; 
    return kFALSE;
  }

  gROOT->cd();
  AliITSgeom* geom = (AliITSgeom*) clustersFile->Get("AliITSgeom");
  AliITStrackerV2 tracker(geom);
  clustersFile->cd();

  for (Int_t iEvent = firstEvent; iEvent < firstEvent+nEvents; iEvent++) {
    tracker.SetEventNumber(iEvent);
    tracker.PropagateBack(tracksFile, backTracksFile);
  }

  if (tracksFile != backTracksFile) {
    backTracksFile->Close();
    delete backTracksFile;
  }
  tracksFile->Close();
  delete tracksFile;
  clustersFile->Close();
  delete clustersFile;

  if (gDEBUG>1) gBenchmark->Show(name);
  return kTRUE;
}
////////////////////////////////////////////////////////////////////////
Bool_t TPCPropagateBack(Int_t nEvents, Int_t firstEvent,
			const char* fileNameClusters,
			const char* fileNameTracks,
			const char* fileNameITSBackTracks,
			const char* fileNameBackTracks)
{
  const char *name="TPCPropagateBack";
  if (gDEBUG>1) cout<<name<<" starts...\n";
  if (gDEBUG>1) gBenchmark->Start(name);

  TFile* clustersFile = TFile::Open(fileNameClusters);
  if (!clustersFile->IsOpen()) {
    cerr<<"Cannot open "<<fileNameClusters<<" !\n"; 
    return kFALSE;
  }
  TFile* itsBackFile = NULL;
  if (fileNameITSBackTracks) {
    itsBackFile = TFile::Open(fileNameITSBackTracks);
    if (!itsBackFile->IsOpen()) {
      cerr<<"Cannot open "<<fileNameITSBackTracks<<" !\n"; 
      return kFALSE;
    }
  }
  TFile* tracksFile = NULL;
  TFile* backTracksFile = NULL;
  if (strcmp(fileNameTracks, fileNameBackTracks) == 0) {
    tracksFile = backTracksFile = TFile::Open(fileNameTracks, "UPDATE");
  } else {
    backTracksFile = TFile::Open(fileNameBackTracks, "RECREATE");
    tracksFile = TFile::Open(fileNameTracks);
  }
  if (!tracksFile->IsOpen()) {
    cerr<<"Cannot open "<<fileNameTracks<<" !\n"; 
    return kFALSE;
  }

  gROOT->cd();
  AliTPCParam* tpcParam = (AliTPCParam*) 
    clustersFile->Get("75x40_100x60_150x60");
  if (!tpcParam) tpcParam = new AliTPCParamSR;
  AliTPCtracker tracker(tpcParam);
  clustersFile->cd();

  for (Int_t iEvent = firstEvent; iEvent < firstEvent+nEvents; iEvent++) {
    tracker.SetEventNumber(iEvent);
    tracker.PropagateBack(tracksFile, itsBackFile, backTracksFile);
  }

  if (tracksFile != backTracksFile) {
    backTracksFile->Close();
    delete backTracksFile;
  }
  tracksFile->Close();
  delete tracksFile;
  clustersFile->Close();
  delete clustersFile;

  if (gDEBUG>1) gBenchmark->Show(name);
  return kTRUE;
}
////////////////////////////////////////////////////////////////////////
Bool_t TRDFindClusters(Int_t nEvents, Int_t firstEvent,
		      const char* fileNameParam, 
		      const char* fileNameDigits, const char* fileNameClusters) {
  
  const char *name="TRDFindClusters";
  if (gDEBUG>1) cout<<name<<" starts...\n";
  if (gDEBUG>1) gBenchmark->Start(name);

  TFile* paramFile = TFile::Open(fileNameParam);
  if (!paramFile->IsOpen()) {
    cerr<<"Cannot open "<<fileNameParam<<" !\n"; 
    return kFALSE;
  }
  AliTRDparameter* trdParam = 
    (AliTRDparameter*) paramFile->Get("TRDparameter"); 
  if (!trdParam) {
    cerr << "TRD parameters have not been found !\n"; 
    return kFALSE;
  }
  trdParam->ReInit();
  AliTRDclusterizerV1 clusterizer("clusterizer", "Clusterizer class"); 
  clusterizer.SetParameter(trdParam);

  for (Int_t iEvent = firstEvent; iEvent < firstEvent+nEvents; iEvent++) {
    clusterizer.Open(fileNameDigits, fileNameClusters, iEvent);
    clusterizer.ReadDigits();
    clusterizer.MakeClusters();
    clusterizer.WriteClusters(-1);
  }

  paramFile->Close();
  delete paramFile;

  if (gDEBUG>1) gBenchmark->Show(name);
  return kTRUE;
}
////////////////////////////////////////////////////////////////////////
Bool_t TRDFindTracks(Int_t nEvents, Int_t firstEvent,
		    const char* fileNameSeeds,
		     const char* fileNameClusters, const char* fileNameTracks,
		     Bool_t inwards, Bool_t addSeeds) {

  const char *name="TRDFindTracks";
  if (gDEBUG>1) cout<<name<<" starts...\n";
  if (gDEBUG>1) gBenchmark->Start(name);

  TFile* seedsFile = TFile::Open(fileNameSeeds);
  if (!seedsFile->IsOpen()) {
    cerr<<"Cannot open "<<fileNameSeeds<<" !\n"; 
    return kFALSE;
  }
  TFile* clustersFile = TFile::Open(fileNameClusters);
  if (!clustersFile->IsOpen()) {
    cerr<<"Cannot open "<<fileNameClusters<<" !\n"; 
    return kFALSE;
  }
  TFile* tracksFile = TFile::Open(fileNameTracks, "recreate");
  if (!tracksFile->IsOpen()) {
    cerr<<"Cannot open "<<fileNameTracks<<" !\n"; 
    return kFALSE;
  }

  AliTRDtracker tracker(clustersFile);
  if (addSeeds) tracker.SetAddTRDseeds();
  clustersFile->cd();  
  for (Int_t iEvent = firstEvent; iEvent < firstEvent+nEvents; iEvent++) {
    printf("Processing event %d\n", iEvent);
    tracker.SetEventNumber(iEvent);
    tracker.PropagateBack(seedsFile, tracksFile);
    if (inwards) tracker.Clusters2Tracks(tracksFile, tracksFile);
  }

  seedsFile->Close();
  delete seedsFile;
  clustersFile->Close();
  delete clustersFile;
  tracksFile->Close();
  delete tracksFile;

  if (gDEBUG>1) gBenchmark->Show(name);
  return kTRUE;
}

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