ROOT logo
Int_t AliTOFanalyzeDigits(Int_t ndump=0, Int_t numberOfEvents=0)
{

  /////////////////////////////////////////////////////////////////////////
  //
  // Analyzes the TOF digits and fills QA-histograms 
  // numberOfEvents=0 means all events in the file
  //
  // Author: F. Pierella (Bologna University)
  // Updated to the new I/O by: A. De Caro, C. Zampolli
  //
  // Report problems to decaro@sa.infn.it
  //
  /////////////////////////////////////////////////////////////////////////

  Int_t rc = 0;
  
  // adc and tdc
  TH1F *htdc     = new TH1F("htdc","TDC [bin]",500,0.,15000.);
  TH1F *hadc     = new TH1F("hadc","ADC [bin]",100,0., 3000.);
  // TOF digit volumes
  TH1F *hsector  = new TH1F("hsector","Sector",18,0.,18.);
  TH1F *hplate   = new TH1F("hplate","Plate ", 5,0., 5.);
  TH1F *hstrip   = new TH1F("hstrip","Strip ",20,0.,20.);
  TH1F *hpadz    = new TH1F("hpadz","Pad along z ",2,0.,2.);
  TH1F *hpadx    = new TH1F("hpadx","Pad along x",48,0.,48.);
  // ADC-TDC correlation
  TH2F *h2tdcVSadc = new TH2F("h2tdcVSadc","TDC [bin] VS ADC [bin]",100,0.,3000.,500,0.,15000.);

  // Dynamically link some shared libs
  if (gClassTable->GetID("AliRun") < 0) {
    gROOT->LoadMacro("loadlibs.C");
    loadlibs();
  }

  if (gAlice) 
    {
      delete AliRunLoader::Instance();
      delete gAlice;
      gAlice = 0x0;
    }
  
  AliRunLoader *rl = AliRunLoader::Open("galice.root",AliConfig::GetDefaultEventFolderName(),"read");
  if (!rl)
    {
      cerr<<"Can't load RunLoader from file"<<"!\n";
      rc = 1;
      return rc;
    }
  
  rl->LoadgAlice();
  gAlice = rl->GetAliRun();
  
  if (!gAlice)
    {
      cerr << "<AliTOFanalyzeDigits> AliRun object not found on file\n ";
      rc = 2;
      return rc;
    }

  AliLoader* tofl = rl->GetLoader("TOFLoader");
  AliTOF* tof = (AliTOF*) rl->GetAliRun()->GetDetector("TOF");

  if (tof==0x0 || tofl==0x0)
    {
      cerr << "<AliTOFanalyzeDigits> No TOF detector found" << endl;
      rc = 3;
      return rc;
    }
  
  if (ndump) cout << "First " << ndump << " Digits found in TOF TreeD branch have: \n";

  rl->LoadHeader();
  if (numberOfEvents == 0) numberOfEvents = (Int_t)(rl->GetNumberOfEvents());
  
  AliTOFdigit *tofdigit;  

  for (Int_t ievent = 0; ievent < numberOfEvents; ievent++) {
    printf ("Processing event %d \n", ievent);
    rl->GetEvent(ievent);
    
    // Get the pointer Digit tree
    tofl->LoadDigits();
    TTree *TD=tofl->TreeD();
    tof->SetTreeAddress();

    if(!TD)
      {
	cout << "<AliTOFanalyzeDigits> No  TreeD found" << endl;
	rc = 3;
	return rc;
      }

    TClonesArray * TOFdigits = new TClonesArray("AliTOFdigit",1000);
    TOFdigits = tof->Digits();
    TOFdigits = TD->GetBranch("TOF")->SetAddress(&TOFdigits); 

    Int_t nEntries = TD->GetEntries(); 

    for (Int_t iEntry = 0; iEntry < nEntries; iEntry ++) 
      {
	tof->ResetDigits();
	TD->GetEvent(iEntry);
	Int_t ndig = TOFdigits->GetEntriesFast();
	cout << "<AliTOFanalyzeDigits> found " << ndig
	     << " TOF digits for event " << ievent << endl;
	
	for (Int_t k=0; k<ndig; k++) { 
	  tofdigit = (AliTOFdigit*) TOFdigits->UncheckedAt(k);
	  Float_t tdc = tofdigit->GetTdc();
	  Float_t adc = tofdigit->GetAdc();
	  htdc->Fill(tdc);
	  hadc->Fill(adc);
	  // TOF digit volumes
	  Int_t sector = tofdigit->GetSector(); // range [0-17]
	  Int_t plate  = tofdigit->GetPlate();  // range [0- 4]
	  Int_t strip  = tofdigit->GetStrip();  // range [0-19]
	  Int_t padz   = tofdigit->GetPadz();   // range [0- 1]
	  Int_t padx   = tofdigit->GetPadx();   // range [0-47]
	  // it is QA, then I perform QA!
	  Bool_t isDigitBad = (sector<0 || sector>17 || plate<0 || plate >4 || padz<0 || padz>1 || padx<0 || padx>47);
	  
	  if (isDigitBad)
	    {
	      cout << "<AliTOFanalyzeDigits>  strange digit found" << endl;
	      rc = 4;
	      return rc;
	    }
	  
	  if(k<ndump){
	    cout << k << "-th | Sector " << sector << " | Plate " << plate << " | Strip " << strip << " | PadZ " << padz << " | PadX " << padx << endl;
	    cout << k << "-th | ADC " << adc << " [bin] | TDC " << tdc << " [bin] \n";
	    cout << "---------------------------------------------------- \n";
	  }
	  
	  // filling digit volume histos
	  hsector->Fill(sector);
	  hplate->Fill(plate);
	  hstrip->Fill(strip);
	  hpadx->Fill(padx);
	  hpadz->Fill(padz);
	  h2tdcVSadc->Fill(adc,tdc);

	}
      }
    
    tofl->UnloadDigits();
  
  } // end loop on events
  
  rl->UnloadHeader();
  rl->UnloadgAlice();

  TFile *fout = new TFile("TOF_digitsQA.root","RECREATE");
  htdc->Write();
  hadc->Write();
  h2tdcVSadc->Write();
  hsector->Write();
  hplate->Write();
  hstrip->Write();
  hpadz->Write();
  hpadx->Write();
  fout->Close(); 

  delete htdc;
  delete hadc;
  delete h2tdcVSadc;
  delete hsector;
  delete hplate;
  delete hstrip;   
  delete hpadz;
  delete hpadx;

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

  return rc;
  
}

 AliTOFanalyzeDigits.C:1
 AliTOFanalyzeDigits.C:2
 AliTOFanalyzeDigits.C:3
 AliTOFanalyzeDigits.C:4
 AliTOFanalyzeDigits.C:5
 AliTOFanalyzeDigits.C:6
 AliTOFanalyzeDigits.C:7
 AliTOFanalyzeDigits.C:8
 AliTOFanalyzeDigits.C:9
 AliTOFanalyzeDigits.C:10
 AliTOFanalyzeDigits.C:11
 AliTOFanalyzeDigits.C:12
 AliTOFanalyzeDigits.C:13
 AliTOFanalyzeDigits.C:14
 AliTOFanalyzeDigits.C:15
 AliTOFanalyzeDigits.C:16
 AliTOFanalyzeDigits.C:17
 AliTOFanalyzeDigits.C:18
 AliTOFanalyzeDigits.C:19
 AliTOFanalyzeDigits.C:20
 AliTOFanalyzeDigits.C:21
 AliTOFanalyzeDigits.C:22
 AliTOFanalyzeDigits.C:23
 AliTOFanalyzeDigits.C:24
 AliTOFanalyzeDigits.C:25
 AliTOFanalyzeDigits.C:26
 AliTOFanalyzeDigits.C:27
 AliTOFanalyzeDigits.C:28
 AliTOFanalyzeDigits.C:29
 AliTOFanalyzeDigits.C:30
 AliTOFanalyzeDigits.C:31
 AliTOFanalyzeDigits.C:32
 AliTOFanalyzeDigits.C:33
 AliTOFanalyzeDigits.C:34
 AliTOFanalyzeDigits.C:35
 AliTOFanalyzeDigits.C:36
 AliTOFanalyzeDigits.C:37
 AliTOFanalyzeDigits.C:38
 AliTOFanalyzeDigits.C:39
 AliTOFanalyzeDigits.C:40
 AliTOFanalyzeDigits.C:41
 AliTOFanalyzeDigits.C:42
 AliTOFanalyzeDigits.C:43
 AliTOFanalyzeDigits.C:44
 AliTOFanalyzeDigits.C:45
 AliTOFanalyzeDigits.C:46
 AliTOFanalyzeDigits.C:47
 AliTOFanalyzeDigits.C:48
 AliTOFanalyzeDigits.C:49
 AliTOFanalyzeDigits.C:50
 AliTOFanalyzeDigits.C:51
 AliTOFanalyzeDigits.C:52
 AliTOFanalyzeDigits.C:53
 AliTOFanalyzeDigits.C:54
 AliTOFanalyzeDigits.C:55
 AliTOFanalyzeDigits.C:56
 AliTOFanalyzeDigits.C:57
 AliTOFanalyzeDigits.C:58
 AliTOFanalyzeDigits.C:59
 AliTOFanalyzeDigits.C:60
 AliTOFanalyzeDigits.C:61
 AliTOFanalyzeDigits.C:62
 AliTOFanalyzeDigits.C:63
 AliTOFanalyzeDigits.C:64
 AliTOFanalyzeDigits.C:65
 AliTOFanalyzeDigits.C:66
 AliTOFanalyzeDigits.C:67
 AliTOFanalyzeDigits.C:68
 AliTOFanalyzeDigits.C:69
 AliTOFanalyzeDigits.C:70
 AliTOFanalyzeDigits.C:71
 AliTOFanalyzeDigits.C:72
 AliTOFanalyzeDigits.C:73
 AliTOFanalyzeDigits.C:74
 AliTOFanalyzeDigits.C:75
 AliTOFanalyzeDigits.C:76
 AliTOFanalyzeDigits.C:77
 AliTOFanalyzeDigits.C:78
 AliTOFanalyzeDigits.C:79
 AliTOFanalyzeDigits.C:80
 AliTOFanalyzeDigits.C:81
 AliTOFanalyzeDigits.C:82
 AliTOFanalyzeDigits.C:83
 AliTOFanalyzeDigits.C:84
 AliTOFanalyzeDigits.C:85
 AliTOFanalyzeDigits.C:86
 AliTOFanalyzeDigits.C:87
 AliTOFanalyzeDigits.C:88
 AliTOFanalyzeDigits.C:89
 AliTOFanalyzeDigits.C:90
 AliTOFanalyzeDigits.C:91
 AliTOFanalyzeDigits.C:92
 AliTOFanalyzeDigits.C:93
 AliTOFanalyzeDigits.C:94
 AliTOFanalyzeDigits.C:95
 AliTOFanalyzeDigits.C:96
 AliTOFanalyzeDigits.C:97
 AliTOFanalyzeDigits.C:98
 AliTOFanalyzeDigits.C:99
 AliTOFanalyzeDigits.C:100
 AliTOFanalyzeDigits.C:101
 AliTOFanalyzeDigits.C:102
 AliTOFanalyzeDigits.C:103
 AliTOFanalyzeDigits.C:104
 AliTOFanalyzeDigits.C:105
 AliTOFanalyzeDigits.C:106
 AliTOFanalyzeDigits.C:107
 AliTOFanalyzeDigits.C:108
 AliTOFanalyzeDigits.C:109
 AliTOFanalyzeDigits.C:110
 AliTOFanalyzeDigits.C:111
 AliTOFanalyzeDigits.C:112
 AliTOFanalyzeDigits.C:113
 AliTOFanalyzeDigits.C:114
 AliTOFanalyzeDigits.C:115
 AliTOFanalyzeDigits.C:116
 AliTOFanalyzeDigits.C:117
 AliTOFanalyzeDigits.C:118
 AliTOFanalyzeDigits.C:119
 AliTOFanalyzeDigits.C:120
 AliTOFanalyzeDigits.C:121
 AliTOFanalyzeDigits.C:122
 AliTOFanalyzeDigits.C:123
 AliTOFanalyzeDigits.C:124
 AliTOFanalyzeDigits.C:125
 AliTOFanalyzeDigits.C:126
 AliTOFanalyzeDigits.C:127
 AliTOFanalyzeDigits.C:128
 AliTOFanalyzeDigits.C:129
 AliTOFanalyzeDigits.C:130
 AliTOFanalyzeDigits.C:131
 AliTOFanalyzeDigits.C:132
 AliTOFanalyzeDigits.C:133
 AliTOFanalyzeDigits.C:134
 AliTOFanalyzeDigits.C:135
 AliTOFanalyzeDigits.C:136
 AliTOFanalyzeDigits.C:137
 AliTOFanalyzeDigits.C:138
 AliTOFanalyzeDigits.C:139
 AliTOFanalyzeDigits.C:140
 AliTOFanalyzeDigits.C:141
 AliTOFanalyzeDigits.C:142
 AliTOFanalyzeDigits.C:143
 AliTOFanalyzeDigits.C:144
 AliTOFanalyzeDigits.C:145
 AliTOFanalyzeDigits.C:146
 AliTOFanalyzeDigits.C:147
 AliTOFanalyzeDigits.C:148
 AliTOFanalyzeDigits.C:149
 AliTOFanalyzeDigits.C:150
 AliTOFanalyzeDigits.C:151
 AliTOFanalyzeDigits.C:152
 AliTOFanalyzeDigits.C:153
 AliTOFanalyzeDigits.C:154
 AliTOFanalyzeDigits.C:155
 AliTOFanalyzeDigits.C:156
 AliTOFanalyzeDigits.C:157
 AliTOFanalyzeDigits.C:158
 AliTOFanalyzeDigits.C:159
 AliTOFanalyzeDigits.C:160
 AliTOFanalyzeDigits.C:161
 AliTOFanalyzeDigits.C:162
 AliTOFanalyzeDigits.C:163
 AliTOFanalyzeDigits.C:164
 AliTOFanalyzeDigits.C:165
 AliTOFanalyzeDigits.C:166
 AliTOFanalyzeDigits.C:167
 AliTOFanalyzeDigits.C:168
 AliTOFanalyzeDigits.C:169
 AliTOFanalyzeDigits.C:170
 AliTOFanalyzeDigits.C:171
 AliTOFanalyzeDigits.C:172
 AliTOFanalyzeDigits.C:173
 AliTOFanalyzeDigits.C:174
 AliTOFanalyzeDigits.C:175
 AliTOFanalyzeDigits.C:176
 AliTOFanalyzeDigits.C:177
 AliTOFanalyzeDigits.C:178
 AliTOFanalyzeDigits.C:179
 AliTOFanalyzeDigits.C:180
 AliTOFanalyzeDigits.C:181
 AliTOFanalyzeDigits.C:182
 AliTOFanalyzeDigits.C:183
 AliTOFanalyzeDigits.C:184
 AliTOFanalyzeDigits.C:185