ROOT logo
Int_t AliTOFanalyzeSDigits(TString headersFile, Int_t ndump=15, Int_t iEvNum=0)
{
  //
  // Analyzes the TOF sdigits and fills QA-histograms 
  // report problems to pierella@bo.infn.it
  // iEvNum=0 means all events in the file

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

  
  TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(headersFile.Data());
  if(file){
    cout<<"headerFile already open \n";
  }
  else {
    if(!file)file=TFile::Open(headersFile.Data());
  }
  
  // Get AliRun object from file
  if (!gAlice) {
    gAlice = (AliRun*)file->Get("gAlice");
    if (gAlice) printf("AliRun object found on file\n");
  }
  

  if (iEvNum == 0) iEvNum = (Int_t) gAlice->TreeE()->GetEntries();


  AliTOFSDigit *tofsdigit;

  AliTOF * tof = (AliTOF *) gAlice->GetDetector("TOF") ;

  if (!tof) {
    cout << "<AliTOFanalyzeSDigits> No TOF detector found" << endl;
    rc = 2;
    return rc;
  }

  // adc and tdc
  TH1F *htdc  = new TH1F("htdc","TDC [bin]",5000,0.,150000.);
  TH1F *hadc   = new TH1F("hadc","ADC [bin]",100,0., 3000.);

  // TOF sdigit volumes
  TH1F *hsector  = new TH1F("hsector","Sector",20,0.,20.);
  TH1F *hplate   = new TH1F("hplate","Plate ", 6,0., 6.);
  TH1F *hstrip   = new TH1F("hstrip","Strip ",25,0.,25.);
  TH1F *hpadz    = new TH1F("hpadz","Pad along z ",3,0.,3.);
  TH1F *hpadx    = new TH1F("hpadx","Pad along x",50,0.,50.);
  // ADC-TDC correlation
  TH2F *h2tdcVSadc = new TH2F("h2tdcVSadc","TDC [bin] VS ADC [bin]",500,0.,150000.,100,0.,3000.);

  cout << "First " << ndump << " SDigits found in TOF TreeS branch have:" << endl;

  for (Int_t ievent = 0; ievent < iEvNum; ievent++) {

    gAlice->GetEvent(ievent) ;
    if(gAlice->TreeS()==0) {
      cout << "<AliTOFanalyzeSDigits> No  TreeS found" << endl;
      rc = 4;
      return rc;
    }
    
    
    
    Int_t ndig, k;
    gAlice->ResetDigits();
    gAlice->TreeS()->GetEvent(ievent);
    TClonesArray * TOFdigits   = tof->SDigits();
    
    ndig=TOFdigits->GetEntries();
    
    cout << "<AliTOFanalyzeSDigits> found " << ndig
	 << " TOF sdigits for event " << ievent << endl;
    
    for (k=0; k<ndig; k++) {
      tofsdigit= (AliTOFSDigit*) TOFdigits->UncheckedAt(k);
      Float_t firstTDC=tofsdigit->GetTdc(0);
      Float_t firstADC=tofsdigit->GetAdc(0);
      htdc->Fill(firstTDC);
      hadc->Fill(firstADC);
      // TOF sdigit volumes
      Int_t sector    = tofsdigit->GetSector(); // range [1-18]
      Int_t plate     = tofsdigit->GetPlate();  // range [1- 5]
      Int_t strip     = tofsdigit->GetStrip();  // range [1-20]
      Int_t padz      = tofsdigit->GetPadz();   // range [1- 2]
      Int_t padx      = tofsdigit->GetPadx();   // range [1-48]
      // it is QA, then I perform QA!
      Bool_t isSDigitBad = (sector<1 || sector>18 || plate<1 || plate >5 || padz<1 || padz>2 || padx<1 || padx>48);

      if (isSDigitBad) {
	cout << "<AliTOFanalyzeSDigits>  strange sdigit found" << endl;
	rc = 3;
	return rc;
      }
      
      if(k<ndump){
	cout << k << "-th | " << "Sector " << sector << " | Plate " << plate << " | Strip " << strip << " | PadZ " << padz << " | PadX " << padx << endl;
	cout << k << "-th | ADC " << firstADC << " [bin] | TDC " << firstTDC << " [bin]" << endl;
	cout << "----------------------------------------------------"<< endl;
      }

      // filling sdigit volume histos
      hsector->Fill(sector);
      hplate->Fill(plate);
      hstrip->Fill(strip);
      hpadx->Fill(padx);
      hpadz->Fill(padz);
      h2tdcVSadc->Fill(firstTDC,firstADC);

      //cout << "firstTDC " << firstTDC << " firstADC " << firstADC << endl;
    }
  
  } // end loop on events

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


  return rc;
  
}

 AliTOFanalyzeSDigits.C:1
 AliTOFanalyzeSDigits.C:2
 AliTOFanalyzeSDigits.C:3
 AliTOFanalyzeSDigits.C:4
 AliTOFanalyzeSDigits.C:5
 AliTOFanalyzeSDigits.C:6
 AliTOFanalyzeSDigits.C:7
 AliTOFanalyzeSDigits.C:8
 AliTOFanalyzeSDigits.C:9
 AliTOFanalyzeSDigits.C:10
 AliTOFanalyzeSDigits.C:11
 AliTOFanalyzeSDigits.C:12
 AliTOFanalyzeSDigits.C:13
 AliTOFanalyzeSDigits.C:14
 AliTOFanalyzeSDigits.C:15
 AliTOFanalyzeSDigits.C:16
 AliTOFanalyzeSDigits.C:17
 AliTOFanalyzeSDigits.C:18
 AliTOFanalyzeSDigits.C:19
 AliTOFanalyzeSDigits.C:20
 AliTOFanalyzeSDigits.C:21
 AliTOFanalyzeSDigits.C:22
 AliTOFanalyzeSDigits.C:23
 AliTOFanalyzeSDigits.C:24
 AliTOFanalyzeSDigits.C:25
 AliTOFanalyzeSDigits.C:26
 AliTOFanalyzeSDigits.C:27
 AliTOFanalyzeSDigits.C:28
 AliTOFanalyzeSDigits.C:29
 AliTOFanalyzeSDigits.C:30
 AliTOFanalyzeSDigits.C:31
 AliTOFanalyzeSDigits.C:32
 AliTOFanalyzeSDigits.C:33
 AliTOFanalyzeSDigits.C:34
 AliTOFanalyzeSDigits.C:35
 AliTOFanalyzeSDigits.C:36
 AliTOFanalyzeSDigits.C:37
 AliTOFanalyzeSDigits.C:38
 AliTOFanalyzeSDigits.C:39
 AliTOFanalyzeSDigits.C:40
 AliTOFanalyzeSDigits.C:41
 AliTOFanalyzeSDigits.C:42
 AliTOFanalyzeSDigits.C:43
 AliTOFanalyzeSDigits.C:44
 AliTOFanalyzeSDigits.C:45
 AliTOFanalyzeSDigits.C:46
 AliTOFanalyzeSDigits.C:47
 AliTOFanalyzeSDigits.C:48
 AliTOFanalyzeSDigits.C:49
 AliTOFanalyzeSDigits.C:50
 AliTOFanalyzeSDigits.C:51
 AliTOFanalyzeSDigits.C:52
 AliTOFanalyzeSDigits.C:53
 AliTOFanalyzeSDigits.C:54
 AliTOFanalyzeSDigits.C:55
 AliTOFanalyzeSDigits.C:56
 AliTOFanalyzeSDigits.C:57
 AliTOFanalyzeSDigits.C:58
 AliTOFanalyzeSDigits.C:59
 AliTOFanalyzeSDigits.C:60
 AliTOFanalyzeSDigits.C:61
 AliTOFanalyzeSDigits.C:62
 AliTOFanalyzeSDigits.C:63
 AliTOFanalyzeSDigits.C:64
 AliTOFanalyzeSDigits.C:65
 AliTOFanalyzeSDigits.C:66
 AliTOFanalyzeSDigits.C:67
 AliTOFanalyzeSDigits.C:68
 AliTOFanalyzeSDigits.C:69
 AliTOFanalyzeSDigits.C:70
 AliTOFanalyzeSDigits.C:71
 AliTOFanalyzeSDigits.C:72
 AliTOFanalyzeSDigits.C:73
 AliTOFanalyzeSDigits.C:74
 AliTOFanalyzeSDigits.C:75
 AliTOFanalyzeSDigits.C:76
 AliTOFanalyzeSDigits.C:77
 AliTOFanalyzeSDigits.C:78
 AliTOFanalyzeSDigits.C:79
 AliTOFanalyzeSDigits.C:80
 AliTOFanalyzeSDigits.C:81
 AliTOFanalyzeSDigits.C:82
 AliTOFanalyzeSDigits.C:83
 AliTOFanalyzeSDigits.C:84
 AliTOFanalyzeSDigits.C:85
 AliTOFanalyzeSDigits.C:86
 AliTOFanalyzeSDigits.C:87
 AliTOFanalyzeSDigits.C:88
 AliTOFanalyzeSDigits.C:89
 AliTOFanalyzeSDigits.C:90
 AliTOFanalyzeSDigits.C:91
 AliTOFanalyzeSDigits.C:92
 AliTOFanalyzeSDigits.C:93
 AliTOFanalyzeSDigits.C:94
 AliTOFanalyzeSDigits.C:95
 AliTOFanalyzeSDigits.C:96
 AliTOFanalyzeSDigits.C:97
 AliTOFanalyzeSDigits.C:98
 AliTOFanalyzeSDigits.C:99
 AliTOFanalyzeSDigits.C:100
 AliTOFanalyzeSDigits.C:101
 AliTOFanalyzeSDigits.C:102
 AliTOFanalyzeSDigits.C:103
 AliTOFanalyzeSDigits.C:104
 AliTOFanalyzeSDigits.C:105
 AliTOFanalyzeSDigits.C:106
 AliTOFanalyzeSDigits.C:107
 AliTOFanalyzeSDigits.C:108
 AliTOFanalyzeSDigits.C:109
 AliTOFanalyzeSDigits.C:110
 AliTOFanalyzeSDigits.C:111
 AliTOFanalyzeSDigits.C:112
 AliTOFanalyzeSDigits.C:113
 AliTOFanalyzeSDigits.C:114
 AliTOFanalyzeSDigits.C:115
 AliTOFanalyzeSDigits.C:116
 AliTOFanalyzeSDigits.C:117
 AliTOFanalyzeSDigits.C:118
 AliTOFanalyzeSDigits.C:119
 AliTOFanalyzeSDigits.C:120
 AliTOFanalyzeSDigits.C:121
 AliTOFanalyzeSDigits.C:122
 AliTOFanalyzeSDigits.C:123
 AliTOFanalyzeSDigits.C:124
 AliTOFanalyzeSDigits.C:125
 AliTOFanalyzeSDigits.C:126
 AliTOFanalyzeSDigits.C:127
 AliTOFanalyzeSDigits.C:128
 AliTOFanalyzeSDigits.C:129
 AliTOFanalyzeSDigits.C:130
 AliTOFanalyzeSDigits.C:131
 AliTOFanalyzeSDigits.C:132
 AliTOFanalyzeSDigits.C:133
 AliTOFanalyzeSDigits.C:134
 AliTOFanalyzeSDigits.C:135
 AliTOFanalyzeSDigits.C:136
 AliTOFanalyzeSDigits.C:137
 AliTOFanalyzeSDigits.C:138
 AliTOFanalyzeSDigits.C:139
 AliTOFanalyzeSDigits.C:140