]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSGetter.cxx
removing duplicated code (Christian)
[u/mrichter/AliRoot.git] / PHOS / AliPHOSGetter.cxx
index a5b2fa737be675e7a8e0f4ed3720b6080287a76c..7d6c21e16cd3764f600e6f4a673ffd1c59c90925 100644 (file)
@@ -46,7 +46,8 @@
 #include <TParticle.h>
 #include <TF1.h>
 #include <TGraph.h>
-//#include <TCanvas.h>
+#include <TCanvas.h>
+#include <TStyle.h>
 //#include <TFrame.h>
 
 // --- Standard library ---
 
 ClassImp(AliPHOSGetter)
   
-AliPHOSGetter * AliPHOSGetter::fgObjGetter = 0 ; 
-AliPHOSLoader * AliPHOSGetter::fgPhosLoader = 0;
+AliPHOSGetter   * AliPHOSGetter::fgObjGetter  = 0 ; 
+AliPHOSLoader   * AliPHOSGetter::fgPhosLoader = 0;
+AliPHOSCalibData* AliPHOSGetter::fgCalibData  = 0;
 Int_t AliPHOSGetter::fgDebug = 0;
-AliPHOSCalibData* AliPHOSGetter::fCalibData = 0;
-AliPHOSAlignData* AliPHOSGetter::fAlignData = 0;
 
 //  TFile * AliPHOSGetter::fgFile = 0 ; 
 
+AliPHOSGetter::AliPHOSGetter() :
+  fBTE(0),
+  fLoadingStatus(),
+  fNPrimaries(0),
+  fPrimaries(0),
+  fESDFile(0),
+  fESDFileName(),
+  fESD(0),
+  fESDTree(0),
+  fRawDigits(kFALSE),
+  fcdb(0)
+{
+  // ctor: this is a singleton, the ctor should never be called but cint needs it as public
+  Fatal("ctor", "AliPHOSGetter is a singleton default ctor not callable") ;
+} 
+
+
 //____________________________________________________________________________ 
-AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* version, Option_t * openingOption)
+AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* version, Option_t * openingOption) :
+  fBTE(0),
+  fLoadingStatus(),
+  fNPrimaries(0),
+  fPrimaries(0),
+  fESDFile(0),
+  fESDFileName(),
+  fESD(0),
+  fESDTree(0),
+  fRawDigits(kFALSE),
+  fcdb(0)
 {
   // ctor only called by Instance()
 
@@ -117,6 +144,40 @@ AliPHOSGetter::AliPHOSGetter(const char* headerFile, const char* version, Option
 
 }
 
+AliPHOSGetter::AliPHOSGetter(const AliPHOSGetter & obj) :
+  TObject(obj),
+  fBTE(0),
+  fLoadingStatus(),
+  fNPrimaries(0),
+  fPrimaries(0),
+  fESDFile(0),
+  fESDFileName(),
+  fESD(0),
+  fESDTree(0),
+  fRawDigits(kFALSE),
+  fcdb(0)
+{
+  // cpy ctor requested by Coding Convention 
+  Fatal("cpy ctor", "not implemented") ;
+} 
+
+//____________________________________________________________________________ 
+AliPHOSGetter::AliPHOSGetter(Int_t /*i*/) :
+  fBTE(0),
+  fLoadingStatus(),
+  fNPrimaries(0),
+  fPrimaries(0),
+  fESDFile(0),
+  fESDFileName(),
+  fESD(0),
+  fESDTree(0),
+  fRawDigits(kFALSE),
+  fcdb(0)
+{
+  // special constructor for onflight 
+} 
+
+
 //____________________________________________________________________________ 
 AliPHOSGetter::~AliPHOSGetter()
 {
@@ -169,7 +230,7 @@ AliPHOSClusterizer * AliPHOSGetter::Clusterizer()
 }
 
 //____________________________________________________________________________ 
-TObjArray * AliPHOSGetter::CpvRecPoints() 
+TObjArray * AliPHOSGetter::CpvRecPoints() const
 {
   // asks the Loader to return the CPV RecPoints container 
 
@@ -184,7 +245,7 @@ TObjArray * AliPHOSGetter::CpvRecPoints()
 }
 
 //____________________________________________________________________________ 
-TClonesArray * AliPHOSGetter::Digits() 
+TClonesArray * AliPHOSGetter::Digits() const
 {
   // asks the Loader to return the Digits container 
 
@@ -213,7 +274,7 @@ AliPHOSDigitizer * AliPHOSGetter::Digitizer()
 
 
 //____________________________________________________________________________ 
-TObjArray * AliPHOSGetter::EmcRecPoints() 
+TObjArray * AliPHOSGetter::EmcRecPoints() const
 {
   // asks the Loader to return the EMC RecPoints container 
 
@@ -228,7 +289,7 @@ TObjArray * AliPHOSGetter::EmcRecPoints()
 }
 
 //____________________________________________________________________________ 
-TClonesArray * AliPHOSGetter::TrackSegments() 
+TClonesArray * AliPHOSGetter::TrackSegments() const
 {
   // asks the Loader to return the TrackSegments container 
 
@@ -256,7 +317,7 @@ AliPHOSTrackSegmentMaker * AliPHOSGetter::TrackSegmentMaker()
 }
 
 //____________________________________________________________________________ 
-TClonesArray * AliPHOSGetter::RecParticles() 
+TClonesArray * AliPHOSGetter::RecParticles() const
 {
   // asks the Loader to return the TrackSegments container 
 
@@ -336,9 +397,11 @@ void AliPHOSGetter::Event(Int_t event, const char* opt)
 
 
 //____________________________________________________________________________ 
-void AliPHOSGetter::Event(AliRawReader *rawReader, const char* opt) 
+void AliPHOSGetter::Event(AliRawReader *rawReader, const char* opt, Bool_t isOldRCUFormat
 {
   // Reads the raw event from rawReader
+  // isOldRCUFormat defines whenever to assume
+  // the old RCU format or not
 
   AliRunLoader * rl = AliRunLoader::GetRunLoader(PhosLoader()->GetTitle());
   
@@ -346,8 +409,7 @@ void AliPHOSGetter::Event(AliRawReader *rawReader, const char* opt)
     rawReader->NextEvent(); 
     Int_t iEvent = rl->GetEventNumber();
     rl->GetEvent(iEvent);
-    ReadRaw(rawReader) ;
-    rl->SetEventNumber(++iEvent);
+    ReadRaw(rawReader,isOldRCUFormat) ;
   }    
  
 }
@@ -362,7 +424,7 @@ Int_t AliPHOSGetter::EventNumber() const
 }
 
 //____________________________________________________________________________ 
-  TClonesArray * AliPHOSGetter::Hits()  
+  TClonesArray * AliPHOSGetter::Hits() const
 {
   // asks the loader to return  the Hits container 
   
@@ -492,6 +554,13 @@ AliPHOSGeometry * AliPHOSGetter::PHOSGeometry() const
   AliPHOSGeometry * rv = 0 ; 
   if (PHOS() )
     rv =  PHOS()->GetGeometry() ;
+  else {
+    rv = AliPHOSGeometry::GetInstance();
+    if (!rv) {
+      AliError("Could not find PHOS geometry! Loading the default one !");
+      rv = AliPHOSGeometry::GetInstance("IHEP","");
+    }
+  }
   return rv ; 
 } 
 
@@ -563,7 +632,7 @@ Bool_t AliPHOSGetter::OpenESDFile()
 }
 
 //____________________________________________________________________________ 
-void AliPHOSGetter::FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Double_t & energy, Double_t & time)
+void AliPHOSGetter::FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHighGain, TF1* signalF, Double_t & energy, Double_t & time) const
 {
   // Fits the raw signal time distribution 
 
@@ -594,7 +663,7 @@ void AliPHOSGetter::FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHigh
     if ( timezero1 + PHOS()->GetRawFormatTimePeak() < PHOS()->GetRawFormatTimeMax() * 0.4 ) { // else its noise 
       signalF->SetParameter(2, signalmax) ; 
       signalF->SetParameter(3, timezero1) ;                
-      gLowGain->Fit(signalF, "QRON", "", 0., timezero2); //, "QRON") ; 
+      gLowGain->Fit(signalF, "QRO", "", 0., timezero2); //, "QRON") ; 
       energy = signalF->GetParameter(2) ; 
       time   = signalF->GetMaximumX() - PHOS()->GetRawFormatTimePeak() - PHOS()->GetRawFormatTimeTrigger() ;
     }
@@ -619,7 +688,7 @@ void AliPHOSGetter::FitRaw(Bool_t lowGainFlag, TGraph * gLowGain, TGraph * gHigh
     if ( timezero1 + PHOS()->GetRawFormatTimePeak() < PHOS()->GetRawFormatTimeMax() * 0.4 ) { // else its noise  
       signalF->SetParameter(2, signalmax) ; 
       signalF->SetParameter(3, timezero1) ;               
-      gHighGain->Fit(signalF, "QRON", "", 0., timezero2) ; 
+      gHighGain->Fit(signalF, "QRO", "", 0., timezero2) ; 
       energy = signalF->GetParameter(2) ; 
       time   = signalF->GetMaximumX() - PHOS()->GetRawFormatTimePeak() - PHOS()->GetRawFormatTimeTrigger() ;
     }
@@ -659,119 +728,106 @@ Int_t AliPHOSGetter::CalibrateRaw(Double_t energy, Int_t *relId)
   return amp;
 }
 //____________________________________________________________________________ 
-Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader)
+Int_t AliPHOSGetter::ReadRaw(AliRawReader *rawReader,Bool_t isOldRCUFormat)
 {
   // reads the raw format data, converts it into digits format and store digits in Digits()
   // container.
+  // isOldRCUFormat = kTRUE in case of the old RCU
+  // format used in the raw data readout.
+  // Reimplemented by Boris Polichtchouk (Jul 2006)
+  // to make it working with the Jul-Aug 2006 beam test data.
 
   AliPHOSRawStream in(rawReader);
+  in.SetOldRCUFormat(isOldRCUFormat);
  
-  Bool_t first = kTRUE ;
-  
   TF1 * signalF = new TF1("signal", AliPHOS::RawResponseFunction, 0, PHOS()->GetRawFormatTimeMax(), 4);
   signalF->SetParNames("Charge", "Gain", "Amplitude", "TimeZero") ; 
 
   Int_t relId[4], id =0;
   Bool_t lowGainFlag = kFALSE ; 
+
   TClonesArray * digits = Digits() ;
-  digits->Clear() ; 
+  digits->Clear() ;
+
+  Int_t iBin = 0;
   Int_t idigit = 0 ; 
-  Int_t amp    = 0 ; 
   Double_t energy = 0. ; 
-  Double_t time   = 0. ; 
+  Double_t time   = 0. ;
 
-  TGraph * gLowGain = new TGraph(PHOS()->GetRawFormatTimeBins()) ; 
-  TGraph * gHighGain= new TGraph(PHOS()->GetRawFormatTimeBins()) ;  
+  Int_t iDigLow = 0;
+  Int_t iDigHigh = 0;
+
+  TH1F* gLowGain = 0;
+  TH1F* gHighGain = 0;
 
   while ( in.Next() ) { // PHOS entries loop 
-    if ( (in.IsNewRow() || in.IsNewColumn() || in.IsNewModule()) ) {
-      relId[0] = in.GetModule() ;
-      if ( relId[0] >= PHOS()->GetRawFormatLowGainOffset() ) { 
-       relId[0] -=  PHOS()->GetRawFormatLowGainOffset() ;
-       lowGainFlag = kTRUE ;
-      } else
-       lowGainFlag = kFALSE ;
-      relId[1] = 0 ;
-      relId[2] = in.GetRow() ;
-      relId[3] = in.GetColumn() ;
-      PHOSGeometry()->RelToAbsNumbering(relId, id) ;
-      if (!first) {
-       FitRaw(lowGainFlag, gLowGain, gHighGain, signalF, energy, time) ; 
-//     amp = CalibrateRaw(energy,relId);
-       amp = (Int_t)energy;
-       if (amp > 0) {
-         new((*digits)[idigit]) AliPHOSDigit( -1, id, amp, time) ;     
-         idigit++ ; 
-       }
-       Int_t index ; 
-       for (index = 0; index < PHOS()->GetRawFormatTimeBins(); index++) {
-         gLowGain->SetPoint(index, index * PHOS()->GetRawFormatTimeMax() / PHOS()->GetRawFormatTimeBins(), 0) ;  
-         gHighGain->SetPoint(index, index * PHOS()->GetRawFormatTimeMax() / PHOS()->GetRawFormatTimeBins(), 0) ; 
-       } 
+       
+    if(!gHighGain) gHighGain = new TH1F("gHighGain","High gain",in.GetTimeLength(),0,in.GetTimeLength());
+    if(!gLowGain)  gLowGain = new TH1F("gLowGain","Low gain",in.GetTimeLength(),0,in.GetTimeLength());
+
+    lowGainFlag = in.IsLowGain();
+    
+    if(lowGainFlag) 
+      gLowGain->SetBinContent(in.GetTimeLength()-iBin-1,in.GetSignal());
+    else {
+      gHighGain->SetBinContent(in.GetTimeLength()-iBin-1,in.GetSignal());
+    }
+
+    iBin++;
+
+    if(iBin==in.GetTimeLength()) {
+      iBin=0;
+
+      if(lowGainFlag) iDigLow++;
+      else iDigHigh++;
+         
+      // Temporarily we do not fit the sample graph, but
+      // take the energy from the graph maximum, and the pedestal from the 0th point
+      // 30 Aug 2006
+
+      //FitRaw(lowGainFlag, gLowGain, gHighGain, signalF, energy, time);
+      if(!lowGainFlag) {
+       energy = gHighGain->GetMaximum();
+       energy -= gHighGain->GetBinContent(0); // "pedestal subtraction"
       }
-      first = kFALSE ; 
+      else {
+       energy = gLowGain->GetMaximum();
+       energy -= gLowGain->GetBinContent(0); // "pedestal subtraction"
+      }
+           
+      time = -1;
+
+      relId[0] = in.GetModule();
+      relId[1] = 0;
+      relId[2] = in.GetRow();
+      relId[3] = in.GetColumn();
+      if(!PHOSGeometry()) Fatal("ReadRaw","Couldn't find PHOSGeometry!");
+      PHOSGeometry()->RelToAbsNumbering(relId, id);
+
+      if(!lowGainFlag) {
+       new((*digits)[idigit]) AliPHOSDigit(-1,id,(Float_t)energy,time);
+       idigit++;
+      }
+
     }
-    if (lowGainFlag)
-      gLowGain->SetPoint(in.GetTime(), 
-                    in.GetTime()* PHOS()->GetRawFormatTimeMax() / PHOS()->GetRawFormatTimeBins(), 
-                    in.GetSignal()) ;
-    else 
-      gHighGain->SetPoint(in.GetTime(), 
-                        in.GetTime() * PHOS()->GetRawFormatTimeMax() / PHOS()->GetRawFormatTimeBins(), 
-                        in.GetSignal() ) ;
-
-  } // PHOS entries loop
-
-  FitRaw(lowGainFlag, gLowGain, gHighGain, signalF, energy, time) ; 
-//   amp = CalibrateRaw(energy,relId);
-  amp = (Int_t)energy;
-  if (amp > 0 ) {
-    new((*digits)[idigit]) AliPHOSDigit( -1, id, amp, time) ;
-    idigit++ ; 
   }
-  digits->Sort() ; 
 
-  delete signalF ; 
+  // PHOS entries loop
+  digits->Sort() ;
+//   printf("\t\t\t------ %d Digits: %d LowGain + %d HighGain.\n",
+//      digits->GetEntriesFast(),iDigLow,iDigHigh);   
+
+  delete signalF ;
+  delete gHighGain;
   delete gLowGain;
-  delete gHighGain ; 
-  
-//   AliInfo(Form("Event %d, digits: %d\n", EventNumber(),digits->GetEntries())); //bvp
+
   return digits->GetEntriesFast() ; 
 }
 
-//   TClonesArray * digits = Digits() ;
-//   digits->Clear() ; 
-//   Int_t idigit = 0 ; 
-
-//   while ( in.Next() ) { // PHOS entries loop 
-//     Int_t amp = in.GetSignal() ; 
-//     Double_t time = in.GetTime() ; 
-//     Int_t relId[4], id ;
-
-//     relId[0] = in.GetModule() ;
-//     if ( relId[0] >= PHOS()->GetRawFormatLowGainOffset() ) { 
-//       relId[0] -=  PHOS()->GetRawFormatLowGainOffset() ; 
-//     }
-//     relId[1] = 0 ; 
-//     relId[2] = in.GetRow() ; 
-//     relId[3] = in.GetColumn() ; 
-//     PHOSGeometry()->RelToAbsNumbering(relId, id) ;  
-    
-//     if (amp > 0 && id >=0 ) {
-//       new((*digits)[idigit]) AliPHOSDigit( -1, id, amp, time) ;     
-//       idigit++ ; 
-//     }
-    
-//   } // PHOS entries loop
-  
-//   digits->Sort() ; 
-  
-//   return digits->GetEntriesFast() ; 
-// }
 //____________________________________________________________________________ 
-Int_t AliPHOSGetter::ReadTreeD()
+Int_t AliPHOSGetter::ReadTreeD() const
 {
   // Read the Digits
   
@@ -782,7 +838,7 @@ Int_t AliPHOSGetter::ReadTreeD()
 }
 
 //____________________________________________________________________________ 
-Int_t AliPHOSGetter::ReadTreeH()
+Int_t AliPHOSGetter::ReadTreeH() const
 {
   // Read the Hits
   PhosLoader()->CleanHits() ;
@@ -795,7 +851,7 @@ Int_t AliPHOSGetter::ReadTreeH()
 }
 
 //____________________________________________________________________________ 
-Int_t AliPHOSGetter::ReadTreeR()
+Int_t AliPHOSGetter::ReadTreeR() const
 {
   // Read the RecPoints
   
@@ -811,7 +867,7 @@ Int_t AliPHOSGetter::ReadTreeR()
 }
 
 //____________________________________________________________________________ 
-Int_t AliPHOSGetter::ReadTreeT()
+Int_t AliPHOSGetter::ReadTreeT() const
 {
   // Read the TrackSegments
   
@@ -826,7 +882,7 @@ Int_t AliPHOSGetter::ReadTreeT()
   return TrackSegments()->GetEntries() ; 
 }
 //____________________________________________________________________________ 
-Int_t AliPHOSGetter::ReadTreeP()
+Int_t AliPHOSGetter::ReadTreeP() const
 {
   // Read the RecParticles
   
@@ -842,7 +898,7 @@ Int_t AliPHOSGetter::ReadTreeP()
   return RecParticles()->GetEntries() ; 
 }
 //____________________________________________________________________________ 
-Int_t AliPHOSGetter::ReadTreeS()
+Int_t AliPHOSGetter::ReadTreeS() const
 {
   // Read the SDigits
   
@@ -881,7 +937,7 @@ Int_t AliPHOSGetter::ReadTreeE(Int_t event)
 }
 
 //____________________________________________________________________________ 
-TClonesArray * AliPHOSGetter::SDigits() 
+TClonesArray * AliPHOSGetter::SDigits() const
 {
   // asks the Loader to return the Digits container 
 
@@ -1093,15 +1149,5 @@ AliPHOSCalibData* AliPHOSGetter::CalibData()
 { 
   // Check if the instance of AliPHOSCalibData exists, and return it
 
-  return fCalibData;
-}
-//____________________________________________________________________________ 
-
-AliPHOSAlignData* AliPHOSGetter::AlignData()
-{ 
-  // Check if the instance of AliPHOSAlignData exists, and return it
-
-  if( !(AliCDBManager::Instance()->IsDefaultStorageSet()) )
-    fAlignData=0x0;
-  return fAlignData;
+  return fgCalibData;
 }