ROOT logo

Int_t AliTRDtest() 
{
  //
  // Test macro for the TRD code
  //

  Int_t rc = 0;

  AliSimulation sim;
  sim.SetConfigFile("$(ALICE_ROOT)/TRD/Macros/AliTRDconfig.C");
  sim.SetLoadAlignFromCDB(0);
  sim.Run();

  // Analyze the TRD hits
  if (rc = AliTRDanalyzeHits()) return rc;

  // Analyze the digits
  //if (rc = AliTRDanalyzeDigits()) return rc;

  return rc;

}

//_____________________________________________________________________________
Int_t AliTRDanalyzeHits()
{
  //
  // Analyzes the hits and fills QA-histograms 
  //

  Int_t rc = 0;

  //AliRunLoader *rl = gAlice->GetRunLoader();
  AliRunLoader *rl = AliRunLoader::Open("TRD_test.root"
				       ,AliConfig::GetDefaultEventFolderName());
  if (!rl) {
    cout << "<AliTRDanalyzeHits> No RunLoader found" << endl;
    rc = 1;
    return rc;
  }
  
  AliLoader* loader = rl->GetLoader("TRDLoader");
  if (!loader) {
    cout << "<AliTRDanalyzeHits> No TRDLoader found" << endl;
    rc = 2;
    return rc;
  }

  rl->LoadgAlice();
  rl->LoadHeader();
  rl->LoadKinematics();
  rl->LoadHits();

  // Get the pointer to the TRD detector 
  gAlice = rl->GetAliRun();
  AliTRD *trd = (AliTRD *) gAlice->GetDetector("TRD");
  if (!trd) {
    cout << "<AliTRDanalyzeHits> No TRD detector found" << endl;
    rc = 2;
    return rc;
  }

  // Get the pointer to the geometry object
  AliTRDgeometry *geo;
  if (trd) {
    geo = (AliTRDgeometry *) trd->GetGeometry();
  }
  else {
    cout << "<AliTRDanalyzeHits> No TRD geometry found" << endl;
    rc = 3;
    return rc;
  }

  AliTRDCommonParam *par = AliTRDCommonParam::Instance();

  // Define the histograms
  TH1F *hQdedx  = new TH1F("hQdedx","Charge dedx-hits",100,0.0,1000.0);
  TH1F *hQtr    = new TH1F("hQtr"  ,"Charge TR-hits"  ,100,0.0,1000.0);

  Float_t rmin   = geo->Rmin();
  Float_t rmax   = geo->Rmax();
  Float_t length = geo->GetChamberLength(0,2);
  Float_t width  = geo->GetChamberWidth(0);
  Int_t   ncol   = par->GetColMax(0);
  Int_t   nrow   = par->GetRowMax(0,2,13);
  Int_t   ntime  = ((Int_t) (rmax - rmin) / 22.0);

  TH2F *hZY     = new TH2F("hZY"   ,"Y vs Z (chamber 0)", nrow,-length/2.,length/2.
                                                        ,ntime,      rmin,     rmax);
  TH2F *hXZ     = new TH2F("hXZ"   ,"Z vs X (plane 0)"  , ncol, -width/2., width/2.
                                                        , nrow,-length/2.,length/2.);

  // Get the pointer hit tree
  TTree *hitTree = loader->TreeH();  
  if (!hitTree) {
    cout << "<AliTRDanalyzeHits> No hit tree found" << endl;
    rc = 4;
    return rc;
  }

  Int_t countHits = 0;
  Int_t nBytes    = 0;

  // Get the number of entries in the hit tree
  // (Number of primary particles creating a hit somewhere)
  Int_t nTrack = (Int_t) hitTree->GetEntries();
  cout << "<AliTRDanalyzeHits> Found " << nTrack 
       << " primary particles with hits" << endl;

  // Loop through all entries in the tree
  for (Int_t iTrack = 0; iTrack < nTrack; iTrack++) {

    gAlice->ResetHits();
    nBytes += hitTree->GetEvent(iTrack);

    // Loop through the TRD hits  
    Int_t iHit = 0;
    AliTRDhit *hit = (AliTRDhit *) trd->FirstHit(-1);
    while (hit) {

      countHits++;
      iHit++;

      Float_t x     = hit->X();
      Float_t y     = hit->Y();
      Float_t z     = hit->Z();
      Float_t q     = hit->GetCharge();
      Int_t   track = hit->Track();
      Int_t   det   = hit->GetDetector();
      Int_t   plane = geo->GetPlane(det);

      if      (q > 0) {
        hQdedx->Fill(q);
        hZY->Fill(z,y);
        if (plane == 0) {
          hXZ->Fill(x,z);
	}
      }
      else if (q < 0) {
        hQtr->Fill(TMath::Abs(q));
      }

      hit = (AliTRDhit *) trd->NextHit();         

    }

  }

  cout << "<AliTRDanalyzeHits> Found " << countHits << " hits in total" << endl;

  TCanvas *cHits = new TCanvas("cHits","AliTRDanalyzeHits",50,50,600,600);
  cHits->Divide(2,2);
  cHits->cd(1);
  hXZ->Draw("COL");
  cHits->cd(2);
  hZY->Draw("COL");
  cHits->cd(3);
  gPad->SetLogy();
  hQdedx->Draw();
  cHits->cd(4);
  gPad->SetLogy();
  hQtr->Draw();

  return rc;

}

//_____________________________________________________________________________
Int_t AliTRDanalyzeDigits()
{
  //
  // Analyzes the digits
  //

  Int_t rc = 0;

  const Int_t kNpla = AliTRDgeometry::Nplan();

  if (!gAlice) {
    cout << "<AliTRDanalyzeDigits> No AliRun object found" << endl;
    rc = 1;
    return rc;
  }

  AliRunLoader *rl = gAlice->GetRunLoader();
  if (!rl) {
    cout << "<AliTRDanalyzeHits> No RunLoader found" << endl;
    rc = 2;
    return rc;
  }

  // Import the Trees for the event nEvent in the file
  rl->LoadDigits();
  
  AliLoader* loader = rl->GetLoader("TRDLoader");
  if (!loader) {
    cout << "<AliTRDanalyzeHits> No TRDLoader found" << endl;
    rc = 3;
    return rc;
  }

  // Get the pointer to the TRD detector 
  AliTRD *trd = (AliTRD *) gAlice->GetDetector("TRD");
  if (!trd) {
    cout << "<AliTRDanalyzeDigits> No TRD detector found" << endl;
    rc = 4;
    return rc;
  }

  // Get the parameter object
  AliTRDSimParam    *parSim = AliTRDSimParam::Instance();
  AliTRDCommonParam *parCom = AliTRDCommonParam::Instance();
  AliTRDcalibDB     *cal    = AliTRDcalibDB::Instance();

  // Define the histograms
  Int_t adcRange = ((Int_t) parSim->GetADCoutRange());
  TH1F *hAmpAll   = new TH1F("hAmpAll"  ,"Amplitude of the digits (all)"
                            ,adcRange+1,-0.5,((Float_t) adcRange)+0.5);
  TH1F *hAmpEl    = new TH1F("hAmpEl"   ,"Amplitude of the digits (electrons)"
                            ,adcRange+1,-0.5,((Float_t) adcRange)+0.5);
  TH1F *hAmpPi    = new TH1F("hAmpPi"   ,"Amplitude of the digits (pions)"
                            ,adcRange+1,-0.5,((Float_t) adcRange)+0.5);
  TH1F *hAmpNoise = new TH1F("hAmpNoise","Amplitude of the digits (noise)"
                            ,5,-0.5,4.5);

  // Get the pointer to the geometry object
  AliTRDgeometry *geo;
  if (trd) {
    geo = trd->GetGeometry();
  }
  else {
    cout << "<AliTRDanalyzeDigits> No TRD geometry found" << endl;
    rc = 5;
    return rc;
  }

  // Create the digits manager
  AliTRDdigitsManager *digitsManager = new AliTRDdigitsManager();
  digitsManager->SetDebug(1);

  // Read the digits from the file
  if (!(digitsManager->ReadDigits(loader->TreeD()))) {
    cout << "<AliTRDanalyzeDigits> Cannot read the digits" << endl;
    rc = 6;
    return rc;
  }

  // Get the particle stack
  AliStack *kineStack = rl->Stack();
  if (!kineStack) {
    cout << "<AliTRDanalyzeDigits> Cannot find the KINE stack" << endl;
    rc = 7;
    return rc;
  }

  Int_t countDigits = 0;
  Int_t iSec = 0;
  Int_t iCha = 2;
  Int_t timeMax     = cal->GetNumberOfTimeBins();

  TProfile *hAmpTimeEl = new TProfile("hAmpTimeEl","Amplitude of the digits (electrons)"
				      ,timeMax,-0.5,((Double_t) timeMax)-0.5);
  TProfile *hAmpTimePi = new TProfile("hAmpTimePi","Amplitude of the digits (pions)"
				      ,timeMax,-0.5,((Double_t) timeMax)-0.5);

  // Loop over all planes
  for (Int_t iPla = 0; iPla < kNpla; iPla++) {

    Int_t iDet   = geo->GetDetector(iPla,iCha,iSec);
    Int_t rowMax = parCom->GetRowMax(iPla,iCha,iSec);
    Int_t colMax = parCom->GetColMax(iPla);
  
    // Loop through the detector pixel
    for (Int_t time = 0; time < timeMax; time++) {
      for (Int_t  col = 0;  col <  colMax;  col++) {
        for (Int_t  row = 0;  row <  rowMax;  row++) {

          AliTRDdigit *digit    = digitsManager->GetDigit(row,col,time,iDet);
          Int_t        amp      = digit->GetAmp();
          Int_t        track0   = digitsManager->GetTrack(0,row,col,time,iDet);
          Int_t        track1   = digitsManager->GetTrack(1,row,col,time,iDet);
          TParticle   *particle = 0;
          if (track0 > -1) {
            particle = (TParticle *) kineStack->Particle(track0);
	  }

          if (amp > 0) {
            countDigits++;
	  }

	  // Total spectrum
          hAmpAll->Fill(amp);

	  // Noise spectrum
          if (track0 < 0) {
            hAmpNoise->Fill(amp);
	  }          

	  // Electron digit
          if ((particle) && (particle->GetPdgCode() ==   11) && (track1 < 0)) {
            hAmpEl->Fill(amp);
            hAmpTimeEl->Fill(time,amp);
	  }

          // Pion digit
          if ((particle) && (particle->GetPdgCode() == -211) && (track1 < 0)) {
            hAmpPi->Fill(amp);
            hAmpTimePi->Fill(time,amp);
	  }

          delete digit;

        }
      }
    }

  }

  cout << "<AliTRDanalyzeDigits> Found " << countDigits << " digits in total" << endl;

  TCanvas *cDigits = new TCanvas("cDigits","AliTRDanalyzeDigits",100,100,600,800);
  cDigits->Divide(2,3);
  cDigits->cd(1);
  gPad->SetLogy();
  hAmpAll->SetXTitle("Amplitude (ADC-channels)");
  hAmpAll->SetYTitle("Entries");
  hAmpAll->Draw();
  cDigits->cd(2);
  gPad->SetLogy();
  hAmpNoise->SetXTitle("Amplitude (ADC-channels)");
  hAmpNoise->SetYTitle("Entries");
  hAmpNoise->Draw();
  cDigits->cd(3);
  gPad->SetLogy();
  hAmpEl->SetXTitle("Amplitude (ADC-channels)");
  hAmpEl->SetYTitle("Entries");
  hAmpEl->Draw();
  cDigits->cd(4);
  gPad->SetLogy();
  hAmpPi->SetXTitle("Amplitude (ADC-channels)");
  hAmpPi->SetYTitle("Entries");
  hAmpPi->Draw();
  cDigits->cd(5);
  hAmpTimeEl->SetXTitle("Timebin number");
  hAmpTimeEl->SetYTitle("Mean amplitude");
  hAmpTimeEl->Draw("HIST");
  cDigits->cd(6);
  hAmpTimePi->SetXTitle("Timebin number");
  hAmpTimePi->SetYTitle("Mean amplitude");
  hAmpTimePi->Draw("HIST");

  return rc;

}

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