ROOT logo
Int_t AliTOFSDigits2Digits(Int_t numberOfEvents = 0) {

  /////////////////////////////////////////////////////////////////////////
  //
  // Creates TOF digits from the summable digits for all event in the header file
  //
  // Use case:
  // start root
  // // load the macro
  // root[0] .L AliTOFSDigits2Digits.C
  // root[1] AliTOFSDigits2Digits()
  //
  // By default, it creates digits for all the events in the header file.
  //
  // If you want create digits only the firts event
  // you can use the following lines:
  //
  // root[0] .L AliTOFSDigits2Digits.C
  // root[1] AliTOFSDigits2Digits(1)
  //
  // Created by: F. Pierella
  // Updated to the new I/O: I.Belikov (Jouri.Belikov@cern.ch)
  //
  // Report problems to decaro@sa.infn.it
  //
  /////////////////////////////////////////////////////////////////////////

  Int_t rc = 0;

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

  AliRunLoader* rl = AliRunLoader::Open("galice.root");
  if (rl == 0x0)
    {
      cerr<<"Can not open session"<<endl;
      rc = 1;   
      return rc;
    }

  if (rl->LoadgAlice())
    {
      cerr<<"Error occured while loading gAlice \n";
      rc = 2;
      return rc;
    }

  AliLoader *tofl = rl->GetLoader("TOFLoader");
   if (tofl == 0x0)
     {
       cerr<<"Can not get the TOF Loader \n";
       rc = 3;
       return rc;
     }

   gAlice=rl->GetAliRun();
   if (!gAlice)
     {
       cerr<<"Can't get gAlice !\n";
       rc = 4;
       return rc;
     }

   tofl->LoadSDigits("read");
   tofl->LoadDigits("recreate");

   Int_t totndig=0;   // total number of digits
   Int_t tottracks=0; // total number of tracks contributing to totndig

   if (numberOfEvents==0) numberOfEvents=rl->GetNumberOfEvents();

   TClonesArray *fSDigits=new TClonesArray("AliTOFSDigit",  1000); 
   TClonesArray *fDigits =new TClonesArray("AliTOFdigit",  1000);
   TClonesArray &da=*fDigits; 

   for (Int_t ievent = 0; ievent < numberOfEvents; ievent++) {
     rl->GetEvent(ievent);
     
     TTree *sTree=tofl->TreeS();
     if (sTree == 0)
       {
	 cerr<<"Can't get the sdigit tree !\n";
	 rc = 5;
	 return rc;
       }
     TBranch *branch=sTree->GetBranch("TOF");
     if (!branch)
       {
	 cerr<<"Cant' get the branch !\n";
	 rc = 6;
	 return rc;
       }
     branch->SetAddress(&fSDigits);

    TTree *dTree=tofl->TreeD();
    if (dTree == 0) {
       tofl->MakeTree("D");
       dTree=tofl->TreeD();
    }
    branch=dTree->GetBranch("TOF");
    if (!branch) dTree->Branch("TOF",&fDigits);    
    else branch->SetAddress(&fDigits);

    Int_t nEntries = sTree->GetEntries();                                
    for (Int_t iEntry = 0; iEntry < nEntries; iEntry++) {
      sTree->GetEvent(iEntry);

      Int_t ndig = fSDigits->GetEntriesFast();
      cout << "----------------<AliTOFSDigits2Digits>---------------- \n";
      cout << "Found " << ndig << " TOF SDigits for event " << ievent << endl;
      cout << "------------------------------------------------------ \n";

      for (Int_t k = 0; k < ndig; k++) {
	Int_t    vol[5];       // location for a digit

	// Get the information for this digit
	AliTOFSDigit *tofsdigit = (AliTOFSDigit *)fSDigits->UncheckedAt(k);

	Int_t nslot=tofsdigit->GetNDigits(); // get the number of slots
	                                     // for current sdigit

	// TOF sdigit volumes (always the same for all slots)
	Int_t sector    = tofsdigit->GetSector(); // range [0-17]
	Int_t plate     = tofsdigit->GetPlate();  // range [0- 4]
	Int_t strip     = tofsdigit->GetStrip();  // range [0-19]
	Int_t padz      = tofsdigit->GetPadz();   // range [0- 1]
	Int_t padx      = tofsdigit->GetPadx();   // range [0-47]

	vol[0] = sector;
	vol[1] = plate;
	vol[2] = strip;
	vol[3] = padx;
	vol[4] = padz;

	//--------------------- QA section ----------------------
	// in the while, I perform QA
	Bool_t isSDigitBad = (sector<0 || sector>17 || 
                               plate<0 || plate >4  || 
                                padz<0 || padz>1    || 
                                padx<0 || padx>47);
	
	if (isSDigitBad)
	  {
	    cout << "<AliTOFSDigits2Digits>  strange sdigit found \n";
	    rc = 7;
	    return rc;
	  }
	//-------------------------------------------------------

	// start loop on number of slots for current sdigit
	for (Int_t islot = 0; islot < nslot; islot++) {
	  Float_t  digit[2];           // TOF digit variables
          const Int_t kMAXDIGITS = 3;  // number 3 is a legacy from AliDigit object

	  Int_t tracknum[kMAXDIGITS];  //contributing tracks for the current slot

	  Float_t tdc=tofsdigit->GetTdc(islot); digit[0]=tdc;
	  Float_t adc=tofsdigit->GetAdc(islot); digit[1]=adc;

	  tracknum[0]=tofsdigit->GetTrack(islot,0);
	  tracknum[1]=tofsdigit->GetTrack(islot,1);
	  tracknum[2]=tofsdigit->GetTrack(islot,2);

	  for (Int_t i = 0; i < kMAXDIGITS; i++) {
	    tottracks++;
	    // search for the first empty location
	    if(tracknum[i]==-1){
	      tottracks--;
	      break;
	    }
	  }

	  // adding a TOF digit for each slot
          {
          Int_t ndigits=da.GetEntriesFast();
	  new (da[ndigits]) AliTOFdigit(tracknum, vol, digit);
          }          
	  totndig++;
	}

      } // end loop on sdigits
      fSDigits->Clear();

    } // end loop on entries

    dTree->Fill();
    tofl->WriteDigits("OVERWRITE");

    // free used memory
    fDigits->Clear();

  } // end loop on events 

  delete fSDigits;
  delete fDigits;

  tofl->UnloadDigits();
  tofl->UnloadSDigits();
  rl->UnloadHeader();
  rl->UnloadgAlice();

  cout << "---------------------------------------------------------- \n";
  cout << "<AliTOFSDigits2Digits> Summary \n";
  cout << "contributing tracks to " << totndig << " digits: " << tottracks << endl;
  cout << "---------------------------------------------------------- \n";

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

  return rc;

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