]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCCalibPedestal.cxx
AliCaloTrackReader, AliAnaCalorimterQA, AliAnaPi0: Leak with PHOS rotation matrices...
[u/mrichter/AliRoot.git] / TPC / AliTPCCalibPedestal.cxx
index 31386693cbc4e9b17e9478aa32626c25beeb877d..e287e979f4ce120dce4a0dbe48675a7eb66ca455 100644 (file)
@@ -26,6 +26,7 @@
 #include <TRandom.h>
 #include <TDirectory.h>
 #include <TFile.h>
+#include <TMap.h>
 //AliRoot includes
 #include "AliRawReader.h"
 #include "AliRawReaderRoot.h"
 ClassImp(AliTPCCalibPedestal)
 
 AliTPCCalibPedestal::AliTPCCalibPedestal() : 
-  TObject(),
-  fFirstTimeBin(60),
-  fLastTimeBin(1000),
+  AliTPCCalibRawBase(),
   fAdcMin(1),
   fAdcMax(100),
   fAnaMeanDown(0.),
   fAnaMeanUp(1.),
-  fOldRCUformat(kTRUE),
   fTimeAnalysis(kFALSE),
-  fROC(AliTPCROC::Instance()),
-  fMapping(NULL),
   fCalRocArrayPedestal(72),
   fCalRocArraySigma(72),
   fHistoPedestalArray(72),
@@ -221,22 +217,20 @@ AliTPCCalibPedestal::AliTPCCalibPedestal() :
   //
   // default constructor
   //
+  SetNameTitle("AliTPCCalibPedestal","AliTPCCalibPedestal");
+  fFirstTimeBin=60;
+  fLastTimeBin=1000;
 }
 
 
 //_____________________________________________________________________
 AliTPCCalibPedestal::AliTPCCalibPedestal(const AliTPCCalibPedestal &ped) : 
-  TObject(ped),
-  fFirstTimeBin(ped.GetFirstTimeBin()),
-  fLastTimeBin(ped.GetLastTimeBin()),
+  AliTPCCalibRawBase(ped),
   fAdcMin(ped.GetAdcMin()),
   fAdcMax(ped.GetAdcMax()),
   fAnaMeanDown(ped.fAnaMeanDown),
   fAnaMeanUp(ped.fAnaMeanUp),
-  fOldRCUformat(ped.fOldRCUformat),
   fTimeAnalysis(ped.fTimeAnalysis),
-  fROC(AliTPCROC::Instance()),
-  fMapping(NULL),
   fCalRocArrayPedestal(72),
   fCalRocArraySigma(72),
   fHistoPedestalArray(72),
@@ -262,6 +256,32 @@ AliTPCCalibPedestal::AliTPCCalibPedestal(const AliTPCCalibPedestal &ped) :
     }
   }
 }
+AliTPCCalibPedestal::AliTPCCalibPedestal(const TMap *config): 
+  AliTPCCalibRawBase(),
+  fAdcMin(1),
+  fAdcMax(100),
+  fAnaMeanDown(0.),
+  fAnaMeanUp(1.),
+  fTimeAnalysis(kFALSE),
+  fCalRocArrayPedestal(72),
+  fCalRocArraySigma(72),
+  fHistoPedestalArray(72),
+  fTimeSignal(NULL),
+  fCalRocArrayMean(72),
+  fCalRocArrayRMS(72)  
+{
+ //
+ // This constructor uses a TMap for setting some parametes
+ //
+  SetNameTitle("AliTPCCalibPedestal","AliTPCCalibPedestal");
+  fFirstTimeBin=60;
+  fLastTimeBin=1000;
+  if (config->GetValue("FirstTimeBin")) fFirstTimeBin = ((TObjString*)config->GetValue("FirstTimeBin"))->GetString().Atoi();
+  if (config->GetValue("LastTimeBin"))  fLastTimeBin = ((TObjString*)config->GetValue("LastTimeBin"))->GetString().Atoi();
+  if (config->GetValue("AdcMin"))       fAdcMin = ((TObjString*)config->GetValue("AdcMin"))->GetString().Atoi();
+  if (config->GetValue("AdcMax"))       fAdcMax = ((TObjString*)config->GetValue("AdcMax"))->GetString().Atoi();
+  if (config->GetValue("TimeAnalysis")) SetTimeAnalysis(((TObjString*)config->GetValue("TimeAnalysis"))->GetString().Atoi());
+} 
 
 
 //_____________________________________________________________________
@@ -286,6 +306,7 @@ AliTPCCalibPedestal::~AliTPCCalibPedestal()
 
   fCalRocArrayPedestal.Delete();
   fCalRocArrayRMS.Delete();
+  fCalRocArraySigma.Delete();
   fHistoPedestalArray.Delete();
 
   if ( fTimeSignal ) {
@@ -372,101 +393,6 @@ Int_t AliTPCCalibPedestal::Update(const Int_t icsector,
 }
 
 
-//_____________________________________________________________________
-Bool_t AliTPCCalibPedestal::ProcessEventFast(AliTPCRawStreamFast *rawStreamFast)
-{
-  //
-  // Event Processing loop - AliTPCRawStream
-  //
-  Bool_t withInput = kFALSE;
-
-  while ( rawStreamFast->NextDDL() ){
-      while ( rawStreamFast->NextChannel() ){
-         Int_t isector  = rawStreamFast->GetSector();                       //  current sector
-         Int_t iRow     = rawStreamFast->GetRow();                          //  current row
-         Int_t iPad     = rawStreamFast->GetPad();                          //  current pad
-
-         while ( rawStreamFast->NextBunch() ){
-            Int_t startTbin = (Int_t)rawStreamFast->GetStartTimeBin();
-            Int_t endTbin = (Int_t)rawStreamFast->GetEndTimeBin();
-            for (Int_t iTimeBin = startTbin; iTimeBin < endTbin; iTimeBin++){
-                 Float_t signal=(Float_t)rawStreamFast->GetSignals()[iTimeBin-startTbin];
-                 Update(isector,iRow,iPad,iTimeBin+1,signal);
-                 withInput = kTRUE;
-             }
-         }
-      }
-  }
-
-  return withInput;
-}
-//_____________________________________________________________________
-Bool_t AliTPCCalibPedestal::ProcessEventFast(AliRawReader *rawReader)
-{
-  //
-  //  Event processing loop - AliRawReader
-  //
-  AliTPCRawStreamFast *rawStreamFast = new AliTPCRawStreamFast(rawReader, (AliAltroMapping**)fMapping);
-  Bool_t res=ProcessEventFast(rawStreamFast);
-  delete rawStreamFast;
-  return res;
-}
-
-//_____________________________________________________________________
-Bool_t AliTPCCalibPedestal::ProcessEvent(AliTPCRawStream *rawStream)
-{
-  //
-  // Event Processing loop - AliTPCRawStream
-  //
-
-  rawStream->SetOldRCUFormat(fOldRCUformat);
-
-  Bool_t withInput = kFALSE;
-
-  while (rawStream->Next()) {
-
-    Int_t iSector  = rawStream->GetSector();      //  current ROC
-    Int_t iRow     = rawStream->GetRow();         //  current row
-    Int_t iPad     = rawStream->GetPad();         //  current pad
-    Int_t iTimeBin = rawStream->GetTime();        //  current time bin
-    Float_t signal = rawStream->GetSignal();      //  current ADC signal
-    
-    Update(iSector,iRow,iPad,iTimeBin,signal);
-    withInput = kTRUE;
-  }
-
-  return withInput;
-}
-
-
-//_____________________________________________________________________
-Bool_t AliTPCCalibPedestal::ProcessEvent(AliRawReader *rawReader)
-{
-  //
-  //  Event processing loop - AliRawReader
-  //
-
-  // if fMapping is NULL the rawstream will crate its own mapping
-  AliTPCRawStream rawStream(rawReader, (AliAltroMapping**)fMapping);
-  rawReader->Select("TPC");
-  return ProcessEvent(&rawStream);
-}
-
-
-//_____________________________________________________________________
-Bool_t AliTPCCalibPedestal::ProcessEvent(eventHeaderStruct *event)
-{
-  //
-  //  process date event
-  //
-
-  AliRawReader *rawReader = new AliRawReaderDate((void*)event);
-  Bool_t result=ProcessEvent(rawReader);
-  delete rawReader;
-  return result;
-}
-
-
 //_____________________________________________________________________
 Bool_t AliTPCCalibPedestal::TestEvent() 
 {
@@ -475,27 +401,27 @@ Bool_t AliTPCCalibPedestal::TestEvent()
   // fill one oroc and one iroc with random gaus
   //
 
-    gRandom->SetSeed(0);
-
-    for (UInt_t iSec=0; iSec<72; ++iSec){
-        if (iSec%36>0) continue;
-       for (UInt_t iRow=0; iRow < fROC->GetNRows(iSec); ++iRow){
-           for (UInt_t iPad=0; iPad < fROC->GetNPads(iSec,iRow); ++iPad){
-               for (UInt_t iTimeBin=0; iTimeBin<1024; ++iTimeBin){
-                   Float_t signal=(Int_t)(iRow+3+gRandom->Gaus(0,.7));
-                   if ( signal>0 )Update(iSec,iRow,iPad,iTimeBin,signal);
-               }
-           }
-       }
+  gRandom->SetSeed(0);
+
+  for (UInt_t iSec=0; iSec<72; ++iSec){
+    if (iSec%36>0) continue;
+    for (UInt_t iRow=0; iRow < fROC->GetNRows(iSec); ++iRow){
+      for (UInt_t iPad=0; iPad < fROC->GetNPads(iSec,iRow); ++iPad){
+        for (UInt_t iTimeBin=0; iTimeBin<1024; ++iTimeBin){
+          Float_t signal=(Int_t)(iRow+3+gRandom->Gaus(0,.7));
+          if ( signal>0 )Update(iSec,iRow,iPad,iTimeBin,signal);
+        }
+      }
     }
-    return kTRUE;
+  }
+  return kTRUE;
 }
 
 
 //_____________________________________________________________________
 TH2F* AliTPCCalibPedestal::GetHisto(Int_t sector, TObjArray *arr, 
                                    Int_t nbinsY, Float_t ymin, Float_t ymax,
-                                   Char_t *type, Bool_t force)
+                                   const Char_t *type, Bool_t force)
 {
     //
     // return pointer to Q histogram
@@ -598,7 +524,7 @@ AliTPCCalROC* AliTPCCalibPedestal::GetCalRocRMS(Int_t sector, Bool_t force)
 
 
 //_____________________________________________________________________
-void AliTPCCalibPedestal::Merge(AliTPCCalibPedestal *ped)
+void AliTPCCalibPedestal::Merge(AliTPCCalibPedestal * const ped)
 {
   //
   //  Merge reference histograms of sig to the current AliTPCCalibSignal
@@ -607,25 +533,48 @@ void AliTPCCalibPedestal::Merge(AliTPCCalibPedestal *ped)
   // merge histograms
   for (Int_t iSec=0; iSec<72; ++iSec){
     TH2F *hRefPedMerge   = ped->GetHistoPedestal(iSec);
-
+    
     if ( hRefPedMerge ){
       TDirectory *dir = hRefPedMerge->GetDirectory(); hRefPedMerge->SetDirectory(0);
       TH2F *hRefPed   = GetHistoPedestal(iSec);
       if ( hRefPed ) hRefPed->Add(hRefPedMerge);
       else {
-       TH2F *hist = new TH2F(*hRefPedMerge);
-       hist->SetDirectory(0);
-       fHistoPedestalArray.AddAt(hist, iSec);
+        TH2F *hist = new TH2F(*hRefPedMerge);
+        hist->SetDirectory(0);
+        fHistoPedestalArray.AddAt(hist, iSec);
       }
       hRefPedMerge->SetDirectory(dir);
     }
   }
-
+  
   // merge array
   // ...
-
+  
 }
 
+//_____________________________________________________________________
+Long64_t AliTPCCalibPedestal::Merge(TCollection * const list)
+{
+  //
+  // Merge all objects of this type in list
+  //
+  
+  Long64_t nmerged=1;
+  
+  TIter next(list);
+  AliTPCCalibPedestal *ce=0;
+  TObject *o=0;
+  
+  while ( (o=next()) ){
+    ce=dynamic_cast<AliTPCCalibPedestal*>(o);
+    if (ce){
+      Merge(ce);
+      ++nmerged;
+    }
+  }
+  
+  return nmerged;
+}
 
 //_____________________________________________________________________
 void AliTPCCalibPedestal::Analyse() 
@@ -641,7 +590,7 @@ void AliTPCCalibPedestal::Analyse()
 
   TH1F *hChannel=new TH1F("hChannel","hChannel",nbinsAdc,fAdcMin,fAdcMax);
   
-  Float_t *array_hP=0;  
+  Float_t *arrayhP=0;  
 
   for (Int_t iSec=0; iSec<72; ++iSec){
     TH2F *hP = GetHistoPedestal(iSec);
@@ -652,24 +601,28 @@ void AliTPCCalibPedestal::Analyse()
     AliTPCCalROC *rocMean     = GetCalRocMean(iSec,kTRUE);
     AliTPCCalROC *rocRMS      = GetCalRocRMS(iSec,kTRUE);
 
-    array_hP = hP->GetArray();
+    arrayhP = hP->GetArray();
     UInt_t nChannels = fROC->GetNChannels(iSec);
 
     for (UInt_t iChannel=0; iChannel<nChannels; ++iChannel){
       Int_t offset = (nbinsAdc+2)*(iChannel+1)+1;
       //calculate mean and sigma using a gaus fit
       //Double_t ret =
-      AliMathBase::FitGaus(array_hP+offset,nbinsAdc,fAdcMin,fAdcMax,&param,&dummy);
+      AliMathBase::FitGaus(arrayhP+offset,nbinsAdc,fAdcMin,fAdcMax,&param,&dummy);
       // if the fitting failed set noise and pedestal to 0
       // is now done in AliMathBase::FitGaus !
 //       if ( ret == -4 ) {
 //     param[1]=0;
 //     param[2]=0;
 //       }
+      if ( param[1]<fAdcMin || param[1]>fAdcMax ){
+        param[1]=0;
+        param[2]=0;
+      }
       rocPedestal->SetValue(iChannel,param[1]);
       rocSigma->SetValue(iChannel,param[2]);
       //calculate mean and RMS using a truncated means
-      hChannel->Set(nbinsAdc+2,array_hP+offset-1);
+      hChannel->Set(nbinsAdc+2,arrayhP+offset-1);
       hChannel->SetEntries(param[3]);
       param[1]=0;
       param[2]=0;
@@ -702,32 +655,3 @@ void AliTPCCalibPedestal::AnalyseTime(Int_t nevents)
     }
   }
 }
-
-
-//_____________________________________________________________________
-void AliTPCCalibPedestal::DumpToFile(const Char_t *filename, const Char_t *dir, Bool_t append) 
-{
-  //
-  //  Write class to file
-  //
-
-  TString sDir(dir);
-  TString option;
-
-  if ( append )
-    option = "update";
-  else
-    option = "recreate";
-
-  TDirectory *backup = gDirectory;
-  TFile f(filename,option.Data());
-  f.cd();
-  if ( !sDir.IsNull() ){
-    f.mkdir(sDir.Data());
-    f.cd(sDir);
-  }
-  this->Write();
-  f.Close();
-
-  if ( backup ) backup->cd();
-}