]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - VZERO/AliVZERO.cxx
Method to extract the TPC space-points added
[u/mrichter/AliRoot.git] / VZERO / AliVZERO.cxx
index b9a64fde9be908e7a9f4a9c66947f4c72e6df0e0..ffa8864ad3958695b05ba98d2bba53b16a7f09a2 100755 (executable)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-
+/* $Id$ */
 
 ///////////////////////////////////////////////////////////////////////////
 //                                                                       //
 //                          V-Zero   Detector                            //
 //  This class contains the base procedures for the VZERO  detector      //
+//  Default geometry of November 2003 :   V0R box is 4.4 cm thick        //
+//                                  scintillators are 2 cm thick         //
 //  All comments should be sent to Brigitte CHEYNIS :                    //
 //                                 b.cheynis@ipnl.in2p3.fr               //
 //                                                                       //
 //                                                                       //
 ///////////////////////////////////////////////////////////////////////////
 
-#include <iostream.h>
-#include <fstream.h>
 
-#include "TMath.h"
-#include "TTUBE.h"
-#include "TNode.h"
-#include "TGeometry.h"
+// --- Standard libraries ---
+#include <Riostream.h>
+#include <stdlib.h>
+
+// --- ROOT libraries ---
+#include <TNamed.h>
+#include "TROOT.h"
+#include "TFile.h"
+#include "TNetFile.h"
+#include "TRandom.h"
+#include "TTree.h"
+#include "TBranch.h"
+#include "TClonesArray.h"
+#include "TStopwatch.h"
+
+// --- AliRoot header files ---
 #include "AliRun.h"
+#include "AliMC.h"
 #include "AliVZERO.h"
+#include "AliVZEROLoader.h"
+#include "AliVZERODigitizer.h"
+#include "AliVZEROBuffer.h"
+#include "AliRunDigitizer.h"
 #include "AliVZEROdigit.h"
-#include "AliMC.h"
-#include "AliVZEROhit.h"
 
 ClassImp(AliVZERO)
  
-
 //_____________________________________________________________________________
 AliVZERO::AliVZERO(const char *name, const char *title)
        : AliDetector(name,title)
@@ -49,17 +63,15 @@ AliVZERO::AliVZERO(const char *name, const char *title)
   // Standard constructor for VZERO Detector
   //
   
-  fIshunt       =  1;  // All hits are associated with primary particles  
+  //  fIshunt       =  1;  // All hits are associated with primary particles  
    
   fHits         =  new TClonesArray("AliVZEROhit", 400);
   fDigits       =  new TClonesArray("AliVZEROdigit",400); 
    
-  gAlice->AddHitList(fHits);
-
-//  fDigits       =  new TClonesArray("AliVZEROdigit",400) ; 
+  gAlice->GetMCApp()->AddHitList(fHits);
 
-  fThickness    =  3.1;   // total thickness of the V0R box
-  fThickness1   =  1.0;   // thickness of the thickest cell (2.5 in version 0)
+  fThickness    =  4.4;   // total thickness of the V0R box in cm
+  fThickness1   =  2.0;   // thickness of scintillating cells in cm
   
   fMaxStepQua   =  0.05; 
   fMaxStepAlu   =  0.01; 
@@ -73,17 +85,26 @@ AliVZERO::AliVZERO(const char *name, const char *title)
 //_____________________________________________________________________________
 AliVZERO::~AliVZERO()
 {
+  //
+  // Default destructor for VZERO Detector
+  //
+  
     if (fHits) {
         fHits->Delete();
         delete fHits;
-    }
+       fHits=0; }
+    
+    if (fDigits) {
+        fDigits->Delete();
+        delete fDigits;
+        fDigits=0; }
 }
 
 //_____________________________________________________________________________
 void AliVZERO::BuildGeometry()
 {
   //
-  // Build simple ROOT TNode geometry for event display
+  // Builds simple ROOT TNode geometry for event display
   //
 }
  
@@ -91,60 +112,189 @@ void AliVZERO::BuildGeometry()
 void AliVZERO::CreateGeometry()
 {
   //
-  // Build simple ROOT TNode geometry for event display
+  // Builds simple Geant3 geometry 
   //
 }
 //_____________________________________________________________________________
 void AliVZERO::CreateMaterials()
 {
   //
-  // Build simple ROOT TNode geometry for event display
+  // Creates materials used for Geant3 geometry 
   //
 }
 
-
-
 //_____________________________________________________________________________
-Int_t AliVZERO::DistanceToPrimitive(Int_t px, Int_t py)
+Int_t AliVZERO::DistanceToPrimitive(Int_t /*px*/, Int_t /*py*/)
 {
   //
-  // Calculate the distance from the mouse to the VZERO on the screen
+  // Calculates the distance from the mouse to the VZERO on the screen
   // Dummy routine
   //
   
   return 9999;
 }
  
-//-------------------------------------------------------------------------
+//_____________________________________________________________________________
 void AliVZERO::Init()
 {
   //
-  // Initialise the VZERO after it has been built
+  // Initialises the VZERO  class after it has been built
   //
 }
 
 
-//-------------------------------------------------------------------------
-
+//_____________________________________________________________________________
 void AliVZERO::SetMaxStepQua(Float_t p1)
 {
+  //
+  // Possible parametrisation of steps in active materials
+  //
      fMaxStepQua = p1;
 }
 
-//___________________________________________
+//_____________________________________________________________________________
 void AliVZERO::SetMaxStepAlu(Float_t p1)
 {
+  //
+  // Possible parametrisation of steps in Aluminum foils (not used in 
+  // version v2)
+  //
     fMaxStepAlu = p1;
 }
 
-//___________________________________________
+//_____________________________________________________________________________
 void AliVZERO::SetMaxDestepQua(Float_t p1)
 {
+  //
+  // Possible parametrisation of steps in active materials (quartz)
+  //
     fMaxDestepQua = p1;
 }
 
-//___________________________________________
+//_____________________________________________________________________________
 void AliVZERO::SetMaxDestepAlu(Float_t p1)
 {
+  //
+  // Possible parametrisation of steps in Aluminum (not used in 
+  // version v2)
+  //
     fMaxDestepAlu = p1;
 }
+
+//_____________________________________________________________________________
+AliLoader* AliVZERO::MakeLoader(const char* topfoldername)
+{ 
+  //
+  // Builds VZEROgetter (AliLoader type)
+  // if detector wants to use customized getter, it must overload this method
+  //
+
+  Info("MakeLoader","Creating AliVZEROLoader. Top folder is %s.",topfoldername);
+  fLoader = new AliVZEROLoader(GetName(),topfoldername);
+  return fLoader;
+}
+
+//_____________________________________________________________________________
+void AliVZERO::SetTreeAddress()
+{
+  //
+  // Sets tree address for hits.
+  //
+  if (fLoader->TreeH() && (fHits == 0x0))
+    fHits = new  TClonesArray("AliVZEROhit", 400);
+
+  AliDetector::SetTreeAddress();
+}
+
+//_____________________________________________________________________________
+AliDigitizer* AliVZERO::CreateDigitizer(AliRunDigitizer* manager) const
+{
+  //
+  // Creates a digitizer for VZERO
+  //
+  return new AliVZERODigitizer(manager);
+}
+
+//_____________________________________________________________________________
+void AliVZERO::Hits2Digits(){
+  //
+  // Converts hits to digits of the current event
+  //
+  // Inputs file name
+  const char *alifile = "galice.root";   
+
+  // Create the run digitizer 
+  AliRunDigitizer* manager = new AliRunDigitizer(1, 1);
+  manager->SetInputStream(0, alifile);
+  manager->SetOutputFile("H2Dfile");
+
+  // Creates the VZERO digitizer 
+  AliVZERODigitizer* dig = new AliVZERODigitizer(manager);
+
+  // Creates the digits
+  dig->Exec("");
+
+}
+//_____________________________________________________________________________
+void AliVZERO::Digits2Raw()
+{
+  //
+  // Converts digits of the current event to raw data
+  //
+  AliVZERO *fVZERO = (AliVZERO*)gAlice->GetDetector("VZERO");
+  fLoader->LoadDigits();
+  TTree* digits = fLoader->TreeD();
+  if (!digits) {
+    Error("Digits2Raw", "no digits tree");
+    return;
+  }
+  TClonesArray * VZEROdigits = new TClonesArray("AliVZEROdigit",1000);
+  fVZERO->SetTreeAddress();            
+  digits->GetBranch("VZERODigit")->SetAddress(&VZEROdigits); 
+  
+  const char *fileName    = "VZERO_3584.ddl";
+  AliVZEROBuffer* buffer  = new AliVZEROBuffer(fileName);
+  
+  //  Verbose level
+  //  0: Silent
+  //  1: cout messages
+  //  2: txt files with digits 
+  //  BE CAREFUL, verbose level 2 MUST be used only for debugging and
+  //  it is highly suggested to use this mode only for debugging digits files
+  //  reasonably small, because otherwise the size of the txt files can reach
+  //  quickly several MB wasting time and disk space.
+  
+  ofstream ftxt;
+  buffer->SetVerbose(0);
+  Int_t fVerbose = buffer->GetVerbose();
+
+  Int_t nEntries = Int_t(digits->GetEntries());
+  
+  for (Int_t i = 0; i < nEntries; i++) {
+  
+    fVZERO->ResetDigits();
+    digits->GetEvent(i);
+    Int_t ndig = VZEROdigits->GetEntriesFast(); 
+   
+    if(ndig == 0) continue;
+    if(fVerbose == 2) {ftxt.open("VZEROdigits.txt",ios::app);}
+    for(Int_t k=0; k<ndig; k++){
+        AliVZEROdigit* fVZERODigit = (AliVZEROdigit*) VZEROdigits->At(k);                      
+       Int_t ADC  = fVZERODigit->ADC();
+       Int_t cell = fVZERODigit->CellNumber();
+        if(fVerbose == 1) { cout <<"DDL: "<<fileName<< "\tdigit number: "<< k<<"\tcell: "
+                           <<cell<<"\tADC: "<< ADC << endl;} 
+       if(fVerbose == 2) {
+           ftxt<<"DDL: "<<fileName<< "\tdigit number: "<< k<<"\tcell: "
+                          <<cell<<"\tADC: "<< ADC << endl;           
+       }
+        buffer->WriteBinary(cell, ADC);
+    }
+  if(fVerbose==2) ftxt.close();
+  }
+
+  delete buffer;
+  fLoader->UnloadDigits();
+}
+
+