ROOT logo
/****************************************************************************
 * This macro is used to create a DataBase for the TPC tracking             *
 * parameterization.                                                        * 
 * 1) the function CreateAllGeantTracks gives all tracks at the 1st hit of  *
 *    the TPC                                                               *
 * 2) the function TrackCompare compares them with track found by the       *
 *    Kalman filter for the same event and computes efficiency and          *
 *    resolution on the track parameters for the Kalman filter.             *
 * 3) the function BuildDataBase calls many functions of AliTPCtrackerParam:*
 *    - merge results from TrackCompare for many events and compute         *
 *      average efficiency.                                                 *
 *    - analyze the pulls of the covariance matrix                          *
 *    - analyze the dE/dx                                                   *
 *    - regularize the covariance matrix as a function of the momentum      *
 *    - write all the informations and the trees with regularized cov.      *
 *      matrices in the DataBase file.                                      *
 *                                                                          *
 *  Origin: A.Dainese, Padova, andrea.dainese@pd,infn.it                    * 
 *                                                                          *
 ****************************************************************************/

#ifndef __CINT__
#include "Riostream.h"
#include <TFile.h>
#include <TTree.h>
#include <TStopwatch.h>
#include <TObject.h>
#include "alles.h"
#include "AliRun.h"
#include "AliHeader.h"
#include "AliGenEventHeader.h"
#include "AliMagF.h"
#include "AliModule.h"
#include "AliArrayI.h"
#include "AliDigits.h"
#include "AliITS.h"
#include "AliTPC.h"
#include "AliITSgeom.h"
#include "AliITSRecPoint.h"
#include "AliITSclusterV2.h"
#include "AliITSsimulationFastPoints.h"
#include "AliITStrackerV2.h"
#include "AliKalmanTrack.h"
#include "AliTPCtrackerParam.h"
#include "AliTracker.h"
#include "AliESD.h"
#include "AliRun.h"
#include "AliRunLoader.h"
#endif

Int_t TPCParamTracks(const Int_t coll=1,Int_t firstEvent=0,Int_t lastEvent=0);
void CreateAllGeantTracks(const Int_t coll=1,Int_t nev=1);
void TrackCompare(const Int_t coll,const Double_t Bfield,Int_t n);
void BuildDataBase(const Int_t coll,const Double_t Bfield);

//_____________________________________________________________________________
Int_t TPCParamTracks(const Int_t coll,Int_t firstEvent,Int_t lastEvent) {
//
// Ordinary TPC tracking parameterization
//

   /**** Initialization of the NewIO *******/

   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();
       

   TDatabasePDG *DataBase = TDatabasePDG::Instance();

   // Get field from galice.root
   AliMagF *fiel = TGeoGlobalMagField::Instance()->GetField();
   Double_t fieval=TMath::Abs((Double_t)fiel->SolenoidField()/10.);

   /**** The TPC corner ********************/

   AliTPCtrackerParam tpcTrackerPar(coll,fieval);
   tpcTrackerPar.Init();

   /***** The TREE is born *****/
   
   TTree *esdTree=new TTree("esdTree","Tree with ESD objects");
   AliESD *event=0;
   esdTree->Branch("ESD","AliESD",&event);
   
   if(firstEvent>rl->GetNumberOfEvents()) firstEvent=rl->GetNumberOfEvents()-1;
   if(lastEvent>rl->GetNumberOfEvents())  lastEvent=rl->GetNumberOfEvents()-1;
   cout<<" Number of events: "<<1+lastEvent-firstEvent<<endl;
   
   //<----------------------------------The Loop over events begins
   TStopwatch timer;
   Int_t trc;
   for(Int_t i=firstEvent; i<=lastEvent; i++) { 
     
     cerr<<" Processing event number : "<<i<<endl;
     AliESD *event = new AliESD(); 
     event->SetRunNumber(gAlice->GetRunNumber());
     event->SetEventNumber(i);
     event->SetMagneticField(gAlice->Field()->SolenoidField());
     rl->GetEvent(i);

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

     esdTree->Fill();
     delete event;

   }//<-----------------------------------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;}

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

   delete rl;

   return;
}
//_____________________________________________________________________________
void CreateAllGeantTracks(const Int_t coll,Int_t nev) {
//
// Get all tracks at TPC 1st hit w/o selection and smearing
//
  cerr<<"\n*******************************************************************\n";

  const Char_t *name="CreateAllGeantTracks";
  cerr<<'\n'<<name<<"...\n";
  gBenchmark->Start(name);

  TFile *outfile=TFile::Open(outname,"recreate");
  TFile *infile =TFile::Open(galice);

  AliTPCtrackerParam tracker(coll,Bfield,n);
  tracker.AllGeantTracks(); // this is to switch-off selection and smearing
  tracker.BuildTPCtracks(infile,outfile);

  delete gAlice; gAlice=0;

  infile->Close();
  outfile->Close();

  gBenchmark->Stop(name);
  gBenchmark->Show(name);

  return;
}
//_____________________________________________________________________________
void TrackCompare(const Int_t coll,const Double_t Bfield,Int_t n) {
//
// Compare Kalman tracks with tracks at TPC 1st hit
//
  cerr<<"\n*******************************************************************\n";

  const Char_t *name="TrackCompare";
  cerr<<'\n'<<name<<"...\n";
  gBenchmark->Start(name);

  AliTPCtrackerParam tracker(coll,Bfield,n);
  tracker.CompareTPCtracks();

  gBenchmark->Stop(name);
  gBenchmark->Show(name);

  return;
}
//_____________________________________________________________________________
void BuildDataBase(const Int_t coll,const Double_t Bfield) {
//
//
//
  cerr<<"\n*******************************************************************\n";

  AliTPCtrackerParam tracker(coll,Bfield);

  // Merge files with cov. matrix and compute average efficiencies
  cerr<<"\n   --- Merging Events ---\n\n";
  tracker.MergeEvents(1,5);
 
  // Compute the pulls for pions, kaons, electrons
  cerr<<"\n   --- Analyzing Pulls ---\n\n";
  tracker.AnalyzePulls("pulls.root");

  // Draw pulls and efficiencies  
  tracker.DrawPulls("CovMatrixDB_PbPb6000_B0.4T.root",211,0);
  tracker.DrawEffs("CovMatrixDB_PbPb6000_B0.4T.root",13);

  // Regularize the covariance matrix
  tracker.RegularizeCovMatrix("regPi.root",211);

  // Analyze the dE/dx
  tracker.AnalyzedEdx("dEdxPi.root",211);


  // Put everything together and create the DB file
  tracker.MakeDataBase();

  return;
}







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