]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFSDigits2Digits.C
CMake: removing qpythia from the depedencies
[u/mrichter/AliRoot.git] / TOF / AliTOFSDigits2Digits.C
index 684fbcec11f7eacf7a256d4130b872fff8642165..b0c154516212cb91f24d16ecba1e65239f13287f 100644 (file)
-Int_t AliTOFSDigits2Digits(TString infileNameSDigits, Int_t firstEvent=0,Int_t nEvents=1, Int_t ndump=15)
-{
-  // Create TOF digits out of TOF sdigits (no merging implemented here).
-  // Input: infileNameSDigits --> TOF sdigits filename 
-  //        firstEvent        --> first event to digitize
-  //        nEvents           --> number of events to digitize 
-  //                              including the first and the last ones
-  // if nEvents==0 we sdigitize all events in infileNameSDigits
-  //        ndump             --> number of dumped digits
-
-  // Author: F. Pierella (Bologna University)
-  // report problem to pierella@bo.infn.it
-
-  // Use case: (start root)
-  //root [0] .L AliTOFSDigits2Digits.C                                    
-  //root [1] AliTOFSDigits2Digits("fileWithTOFSdigits.root")
-
-
-  // number 3 is a legacy from AliDigit object
-  const Int_t kMAXDIGITS = 3;
-
-
-  // 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(infileNameSDigits.Data());
-  if(file){
-    cout<<"headerFile already open \n";
-  }
-  else {
-    // file is open in "update" mode
-    // in order to have a writable digits tree
-    if(!file)file=TFile::Open(infileNameSDigits.Data(),"update");
-  }
-  
-  // Get AliRun object from file
-  if (!gAlice) {
-    gAlice = (AliRun*)file->Get("gAlice");
-    if (gAlice) printf("AliRun object found on file\n");
-  }
-
-  if (nEvents == 0) nEvents = (Int_t) gAlice->TreeE()->GetEntries();
-  
-  AliTOF * tof = (AliTOF *) gAlice->GetDetector("TOF") ;
-
-  if (!tof) {
-    cout << "<AliTOFSDigits2Digits> No TOF detector found" << endl;
-    rc = 2;
-    return rc;
-  }
-
-  Int_t totndig=0;   // total number of digits
-  Int_t tottracks=0; // total number of tracks contributing to totndig
-  Int_t upperBoundEvNum=firstEvent+nEvents;
-  for (Int_t ievent = firstEvent; ievent < upperBoundEvNum; ievent++) {
-
-    gAlice->GetEvent(ievent);
-    if (gAlice->TreeD () == 0)
-      gAlice->MakeTree ("D");
-    
-    //Make branches
-    char branchname[20];
-    sprintf (branchname, "%s", tof->GetName ());
-    //Make branch for digits
-    tof->MakeBranch ("D");
-
-
-    // get the TOF branch in TreeS for current event
-    char tname[100]; sprintf(tname,"TreeS%d",ievent);
-    
-    TTree *sdigitstree=(TTree*)file->Get(tname);                   
-    
-    TClonesArray * fSDigits= new TClonesArray("AliTOFSDigit",  1000); 
-    sdigitstree->GetBranch("TOF")->SetAddress(&fSDigits);           
-    
-    Int_t nEntries = sdigitstree->GetEntries();                                
-    //cout << nEntries << endl;
-    
-    // Loop through all entries in the tree
-    Int_t nbytes;
-
+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++) {
-      
-      // Import the tree
-      nbytes += sdigitstree->GetEvent(iEntry);
-      
-      // Get the number of sdigits
+      sTree->GetEvent(iEntry);
+
       Int_t ndig = fSDigits->GetEntriesFast();
-      cout << "------------------<AliTOFSDigits2Digits>------------------" << endl;
+      cout << "----------------<AliTOFSDigits2Digits>---------------- \n";
       cout << "Found " << ndig << " TOF SDigits for event " << ievent << endl;
-      cout << "------------------------------------------------------------" << endl;
+      cout << "------------------------------------------------------ \n";
 
-      // start loop on sdigits
       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);
+       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 [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]
+       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;
@@ -125,28 +138,26 @@ Int_t AliTOFSDigits2Digits(TString infileNameSDigits, Int_t firstEvent=0,Int_t n
 
        //--------------------- QA section ----------------------
        // in the while, I perform QA
-       Bool_t isSDigitBad = (sector<1 || sector>18 || plate<1 || plate >5 || padz<1 || padz>2 || padx<1 || padx>48);
+       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" << endl;
-         rc = 3;
-         return rc;
-       }
+       if (isSDigitBad)
+         {
+           cout << "<AliTOFSDigits2Digits>  strange sdigit found \n";
+           rc = 7;
+           return rc;
+         }
        //-------------------------------------------------------
 
-       //------------------- Dump section ----------------------
-       if(k<ndump){
-         cout << k << "-th | " << "Sector " << sector << " | Plate " << plate << " | Strip " << strip << " | PadZ " << padz << " | PadX " << padx << endl;
-         cout << k << "-th sdigit" << endl;
-         cout << "----------------------------------------------------"<< endl;
-       }
-       // ------------------------------------------------------
-
        // start loop on number of slots for current sdigit
        for (Int_t islot = 0; islot < nslot; islot++) {
-         Float_t  digit[2];     // TOF digit variables
-         Int_t tracknum[kMAXDIGITS];     // contributing tracks for the current slot
-       
+         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;
 
@@ -164,32 +175,46 @@ Int_t AliTOFSDigits2Digits(TString infileNameSDigits, Int_t firstEvent=0,Int_t n
          }
 
          // adding a TOF digit for each slot
-         tof->AddDigit(tracknum, vol, digit);
+          {
+          Int_t ndigits=da.GetEntriesFast();
+         new (da[ndigits]) AliTOFdigit(tracknum, vol, digit);
+          }          
          totndig++;
        }
 
-
       } // end loop on sdigits
-      
+      fSDigits->Clear();
+
     } // end loop on entries
 
-    // free used memory
-    fSDigits->Clear();
-    fSDigits=0;
+    dTree->Fill();
+    tofl->WriteDigits("OVERWRITE");
 
-    gAlice->TreeD()->Reset();
-    gAlice->TreeD()->Fill();
-    //gAlice->TreeS()->Write(0,TObject::kOverwrite) ;
-    gAlice->TreeD()->AutoSave();
+    // free used memory
+    fDigits->Clear();
 
   } // end loop on events 
 
-  cout << "----------------------------------------------------------" << endl;
-  cout << "<AliTOFSDigits2Digits> Summary" << endl;
-  cout << "contributing tracks to " << totndig << " digits: " << tottracks << endl; 
-  cout << "----------------------------------------------------------" << endl;
+  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;
-  
 
 }