ROOT logo
AliRoot » TPC » BASE » AliTPCCalibPedestal

class AliTPCCalibPedestal: public AliTPCCalibRawBase

          Implementation of the TPC pedestal and noise calibration

   Origin: Jens Wiechula, Marian Ivanov   J.Wiechula@gsi.de, Marian.Ivanov@cern.ch



 *                                Class Description                                  *


 Working principle:

 Raw pedestal data is processed by calling one of the ProcessEvent(...) functions
 (see below). These in the end call the Update(...) function, where the data is filled
 into histograms.

 For each ROC one TH2F histo (ROC channel vs. ADC channel) is created when
 it is filled for the first time (GetHistoPedestal(ROC,kTRUE)). All histos are stored in the
 TObjArray fHistoPedestalArray.

 For a fast filling of the histogram the corresponding bin number of the channel and ADC channel
 is computed by hand and the histogram array is accessed directly via its pointer.
 ATTENTION: Doing so the the entry counter of the histogram is not increased
            this means that e.g. the colz draw option gives an empty plot unless
	    calling 'histo->SetEntries(1)' before drawing.

 After accumulating the desired statistics the Analyse() function has to be called.
 Whithin this function the pedestal and noise values are calculated for each pad, using
 the fast gaus fit function  AliMathBase::FitGaus(...), and the calibration
 storage classes (AliTPCCalROC) are filled for each ROC.
 The calibration information is stored in the TObjArrays fCalRocArrayPedestal and fCalRocArrayRMS;



 User interface for filling data:


 To Fill information one of the following functions can be used:

 Bool_t ProcessEvent(eventHeaderStruct *event);
   - process Date event
   - use AliTPCRawReaderDate and call ProcessEvent(AliRawReader *rawReader)

 Bool_t ProcessEvent(AliRawReader *rawReader);
  - process AliRawReader event
   - use AliTPCRawStreamV3 to loop over data and call ProcessEvent(AliTPCRawStreamV3 *rawStream)

 Bool_t ProcessEvent(AliTPCRawStreamV3 *rawStream);
   - process event from AliTPCRawStreamV3
   - call Update function for signal filling

 Int_t Update(const Int_t isector, const Int_t iRow, const Int_t
              iPad,  const Int_t iTimeBin, const Float_t signal);
   - directly  fill signal information (sector, row, pad, time bin, pad)
     to the reference histograms

 It is also possible to merge two independently taken calibrations using the function

 void Merge(AliTPCCalibPedestal *ped)
   - copy histograms in 'ped' if the do not exist in this instance
   - Add histograms in 'ped' to the histograms in this instance if the allready exist
   - After merging call Analyse again!



 -- example: filling data using root raw data:
 void fillPedestal(Char_t *filename)
 {
    rawReader = new AliRawReaderRoot(fileName);
    if ( !rawReader ) return;
    AliTPCCalibPedestal *calib = new AliTPCCalibPedestal;
    while (rawReader->NextEvent()){
      calib->ProcessEvent(rawReader);
    }
    calib->Analyse();
    calib->DumpToFile("PedestalData.root");
    delete rawReader;
    delete calib;
 }


 What kind of information is stored and how to retrieve them:


 - Accessing the 'Reference Histograms' (pedestal distribution histograms):

 TH2F *GetHistoPedestal(Int_t sector);

 - Accessing the calibration storage objects:

 AliTPCCalROC *GetCalRocPedestal(Int_t sector);  - for the pedestal values, mean from gaus fit
 AliTPCCalROC *GetCalRocSigma(Int_t sector);     - for the Noise values, sigma from guas fit
 AliTPCCalROC *GetCalRocMean(Int_t sector);  - for the pedestal values, truncated mean
 AliTPCCalROC *GetCalRocRMS(Int_t sector);     - for the Noise values, rms from truncated mean

 example for visualisation:
 if the file "PedestalData.root" was created using the above example one could do the following:

 TFile filePedestal("PedestalData.root")
 AliTPCCalibPedestal *ped = (AliTPCCalibPedestal*)filePedestal->Get("AliTPCCalibPedestal");
 ped->GetCalRocPedestal(0)->Draw("colz");
 ped->GetCalRocRMS(0)->Draw("colz");

 or use the AliTPCCalPad functionality:
 AliTPCCalPad padPedestal(ped->GetCalPadPedestal());
 AliTPCCalPad padNoise(ped->GetCalPadRMS());
 padPedestal->MakeHisto2D()->Draw("colz");  //Draw A-Side Pedestal Information
 padNoise->MakeHisto2D()->Draw("colz");  //Draw A-Side Noise Information


 example: fill pedestal with gausschen noise
 AliTPCCalibPedestal ped;
 ped.TestEvent();
 ped.Analyse();
 //Draw output;
 TCanvas* c1 = new TCanvas;
 c1->Divide(1,2);
 c1->cd(1);
 ped.GetHistoPedestal(0)->SetEntries(1); //needed in order for colz to work, reason: fast filling does not increase the entries counter
 ped.GetHistoPedestal(0)->Draw("colz");
 c1->cd(2);
 ped.GetHistoPedestal(36)->SetEntries(1); //needed in order for colz to work, reason: fast filling does not increase the entries counter
 ped.GetHistoPedestal(36)->Draw("colz");
 TCanvas* c2 = new TCanvas;
 c2->Divide(2,2);
 c2->cd(1);
 ped.GetCalRocPedestal(0)->Draw("colz");
 c2->cd(2);
 ped.GetCalRocRMS(0)->Draw("colz");
 c2->cd(3);
 ped.GetCalRocPedestal(36)->Draw("colz");
 c2->cd(4);
 ped.GetCalRocRMS(36)->Draw("colz");


 Time dependent pedestals:

 If wished there is the possibility to calculate for each channel and time bin
 the mean pedestal [pedestals(t)]. This is done by

 1) setting SetTimeAnalysis(kTRUE),
 2) processing the data by looping over the events using ProcessEvent(..)
 3) calling the Analyse() and AnalyseTime(nevents) functions (providing nevents)
 4) getting the pedestals(t) using   TArrayF **timePed = calibPedestal.GetTimePedestals();
 5) looking at values using   timePed[row][pad].At(timebin)

 This functionality is intended to be used on an LDC bu the detector algorithm
 (TPCPEDESTALda) to generate a data set used for configuration of the pattern
 memory for baseline subtraction in the ALTROs. Later the information should also
 be stored as reference data.

Function Members (Methods)

public:
AliTPCCalibPedestal()
AliTPCCalibPedestal(const AliTPCCalibPedestal& ped)
AliTPCCalibPedestal(const TMap* config)
virtual~AliTPCCalibPedestal()
voidTObject::AbstractMethod(const char* method) const
virtual voidAnalyse()
voidAnalyseTime(Int_t nevents)
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTNamed::Clear(Option_t* option = "")
virtual TObject*TNamed::Clone(const char* newname = "") const
virtual Int_tTNamed::Compare(const TObject* obj) const
virtual voidTNamed::Copy(TObject& named) const
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual Int_tTObject::DistancetoPrimitive(Int_t px, Int_t py)
virtual voidTObject::Draw(Option_t* option = "")
virtual voidTObject::DrawClass() constMENU
virtual TObject*TObject::DrawClone(Option_t* option = "") constMENU
virtual voidTObject::Dump() constMENU
virtual voidAliTPCCalibRawBase::DumpToFile(const Char_t* filename, const Char_t* dir = "", Bool_t append = kFALSE)
virtual voidTObject::Error(const char* method, const char* msgfmt) const
virtual voidTObject::Execute(const char* method, const char* params, Int_t* error = 0)
virtual voidTObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0)
virtual voidTObject::ExecuteEvent(Int_t event, Int_t px, Int_t py)
virtual voidTObject::Fatal(const char* method, const char* msgfmt) const
virtual voidTNamed::FillBuffer(char*& buffer)
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
Int_tGetAdcMax() const
Int_tGetAdcMin() const
AliTPCAltroMapping**AliTPCCalibRawBase::GetAltroMapping()
const AliAltroRawStream*AliTPCCalibRawBase::GetAltroRawStream() const
Float_tGetAnaMeanDown() const
Float_tGetAnaMeanUp() const
const TObjArray*GetCalPadMean() const
const TObjArray*GetCalPadPedestal() const
const TObjArray*GetCalPadRMS() const
const TObjArray*GetCalPadSigma() const
AliTPCCalROC*GetCalRocMean(Int_t sector, Bool_t force = kFALSE)
AliTPCCalROC*GetCalRocPedestal(Int_t sector, Bool_t force = kFALSE)
AliTPCCalROC*GetCalRocRMS(Int_t sector, Bool_t force = kFALSE)
AliTPCCalROC*GetCalRocSigma(Int_t sector, Bool_t force = kFALSE)
Int_tAliTPCCalibRawBase::GetDebugLevel() const
TTreeSRedirector*AliTPCCalibRawBase::GetDebugStreamer()
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
UInt_tAliTPCCalibRawBase::GetEventType() const
Int_tAliTPCCalibRawBase::GetFirstTimeBin() const
UInt_tAliTPCCalibRawBase::GetFirstTimeStamp() const
TH2F*GetHistoPedestal(Int_t sector, Bool_t force = kFALSE)
virtual const char*TObject::GetIconName() const
Double_tAliTPCCalibRawBase::GetL1Phase() const
Double_tAliTPCCalibRawBase::GetL1PhaseTB() const
Int_tAliTPCCalibRawBase::GetLastTimeBin() const
UInt_tAliTPCCalibRawBase::GetLastTimeStamp() const
virtual const char*TNamed::GetName() const
Int_tAliTPCCalibRawBase::GetNevents() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*TObject::GetOption() const
UInt_tAliTPCCalibRawBase::GetRunNumber() const
Int_tAliTPCCalibRawBase::GetStreamLevel() const
TArrayF**GetTimePedestals() const
UInt_tAliTPCCalibRawBase::GetTimeStamp() const
virtual const char*TNamed::GetTitle() const
const AliTPCROC*AliTPCCalibRawBase::GetTPCROC() const
virtual UInt_tTObject::GetUniqueID() const
Bool_tAliTPCCalibRawBase::GetUseL1Phase() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual ULong_tTNamed::Hash() const
voidAliTPCCalibRawBase::IncrementNevents()
virtual voidTObject::Info(const char* method, const char* msgfmt) const
virtual Bool_tTObject::InheritsFrom(const char* classname) const
virtual Bool_tTObject::InheritsFrom(const TClass* cl) const
virtual voidTObject::Inspect() constMENU
voidTObject::InvertBit(UInt_t f)
virtual TClass*IsA() const
virtual Bool_tTObject::IsEqual(const TObject* obj) const
virtual Bool_tTObject::IsFolder() const
Bool_tTObject::IsOnHeap() const
virtual Bool_tTNamed::IsSortable() const
Bool_tTObject::IsZombie() const
virtual voidTNamed::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
voidMerge(AliTPCCalibPedestal *const ped)
virtual Long64_tMerge(TCollection *const list)
voidAliTPCCalibRawBase::MergeBase(const AliTPCCalibRawBase* calib)
virtual Bool_tTObject::Notify()
voidTObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const
static voidTObject::operator delete(void* ptr)
static voidTObject::operator delete(void* ptr, void* vp)
static voidTObject::operator delete[](void* ptr)
static voidTObject::operator delete[](void* ptr, void* vp)
void*TObject::operator new(size_t sz)
void*TObject::operator new(size_t sz, void* vp)
void*TObject::operator new[](size_t sz)
void*TObject::operator new[](size_t sz, void* vp)
AliTPCCalibPedestal&operator=(const AliTPCCalibPedestal& source)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidTNamed::Print(Option_t* option = "") const
virtual voidAliTPCCalibRawBase::ProcessBunch(const Int_t, const Int_t, const Int_t, const Int_t, const UInt_t, const UShort_t*)
Bool_tAliTPCCalibRawBase::ProcessEvent(AliTPCRawStreamV3 *const rawStreamV3)
Bool_tAliTPCCalibRawBase::ProcessEvent(AliRawReader *const rawReader)
Bool_tAliTPCCalibRawBase::ProcessEvent(eventHeaderStruct *const event)
virtual Int_tTObject::Read(const char* name)
virtual voidTObject::RecursiveRemove(TObject* obj)
voidTObject::ResetBit(UInt_t f)
virtual voidTObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU
virtual voidTObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "")
voidAliTPCCalibRawBase::SetAltroMapping(AliTPCAltroMapping** mapp)
voidSetAnalysisTruncationRange(Float_t down, Float_t up)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
voidAliTPCCalibRawBase::SetDebugLevel(Int_t level)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidTNamed::SetName(const char* name)MENU
virtual voidTNamed::SetNameTitle(const char* name, const char* title)
static voidTObject::SetObjectStat(Bool_t stat)
voidSetRangeAdc(Int_t aMin, Int_t aMax)
voidAliTPCCalibRawBase::SetRangeTime(Int_t firstTimeBin, Int_t lastTimeBin)
voidAliTPCCalibRawBase::SetRunNumber(UInt_t eventnumber)
voidAliTPCCalibRawBase::SetStreamLevel(Int_t streamLevel)
voidSetTimeAnalysis(Bool_t time = kTRUE)
voidAliTPCCalibRawBase::SetTimeStampEvent(UInt_t timestamp)
virtual voidTNamed::SetTitle(const char* title = "")MENU
virtual voidTObject::SetUniqueID(UInt_t uid)
voidAliTPCCalibRawBase::SetUseL1Phase(Bool_t useL1Phase = kTRUE)
virtual voidShowMembers(TMemberInspector&)
virtual Int_tTNamed::Sizeof() const
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
Bool_tTestEvent()
virtual Int_tUpdate(const Int_t isector, const Int_t iRow, const Int_t iPad, const Int_t iTimeBin, const Float_t signal)
virtual voidAliTPCCalibRawBase::UpdateDDL()
virtual voidTObject::UseCurrentStyle()
virtual voidTObject::Warning(const char* method, const char* msgfmt) const
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0)
virtual Int_tTObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const
protected:
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
virtual voidAliTPCCalibRawBase::EndEvent()
voidTObject::MakeZombie()
virtual voidAliTPCCalibRawBase::ResetEvent()
private:
AliTPCCalROC*GetCalRoc(Int_t sector, TObjArray* arr, Bool_t force)
TH2F*GetHisto(Int_t sector, TObjArray* arr, Int_t nbinsY, Float_t ymin, Float_t ymax, const Char_t* type, Bool_t force)

Data Members

protected:
Double_tAliTPCCalibRawBase::fAltroL1Phase! L1 Phase
Float_tAliTPCCalibRawBase::fAltroL1PhaseTB! L1 Phase in time bins
AliAltroRawStream*AliTPCCalibRawBase::fAltroRawStream! pointer to the altro object
Int_tAliTPCCalibRawBase::fCurrDDLNum! Current DDL number
Int_tAliTPCCalibRawBase::fCurrRCUId! Current RCU Id
Int_tAliTPCCalibRawBase::fDebugLevel! debug level
TTreeSRedirector*AliTPCCalibRawBase::fDebugStreamer! debug streamer
UInt_tAliTPCCalibRawBase::fEventType! current event Type from event header
Int_tAliTPCCalibRawBase::fFirstTimeBinFirst Time bin used for analysis
UInt_tAliTPCCalibRawBase::fFirstTimeStampFirst event time stamp
Int_tAliTPCCalibRawBase::fLastTimeBinLast Time bin used for analysis
UInt_tAliTPCCalibRawBase::fLastTimeStampLast event time stamp
AliTPCAltroMapping**AliTPCCalibRawBase::fMapping! Altro Mapping object
TStringTNamed::fNameobject identifier
Int_tAliTPCCalibRawBase::fNeventsNumber of processed events
Int_tAliTPCCalibRawBase::fPrevDDLNum! Current DDL number
Int_tAliTPCCalibRawBase::fPrevRCUId! Previous RCU Id
AliTPCROC*AliTPCCalibRawBase::fROC! ROC information
UInt_tAliTPCCalibRawBase::fRunNumbercurrent run number from event header
Int_tAliTPCCalibRawBase::fStreamLevel! level of streamer output
UInt_tAliTPCCalibRawBase::fTimeStamp! time stamp from event header
TStringTNamed::fTitleobject title
Bool_tAliTPCCalibRawBase::fUseL1Phaseuse L1 Phase information?
private:
Int_tfAdcMaxmax adc channel of pedestal value
Int_tfAdcMinmin adc channel of pedestal value
Float_tfAnaMeanDownTruncated mean channel analysis - lower cut
Float_tfAnaMeanUpTruncated mean channel analysis - upper cut
TObjArrayfCalRocArrayMeanArray of AliTPCCalROC class for pedestal values, simple mean
TObjArrayfCalRocArrayPedestalArray of AliTPCCalROC class for pedestal values from gaus fit
TObjArrayfCalRocArrayRMSArray of AliTPCCalROC class for noise values, simple rms
TObjArrayfCalRocArraySigmaArray of AliTPCCalROC class for noise values from gaus fit
TObjArrayfHistoPedestalArrayCalibration histograms for Pedestal distribution
Bool_tfTimeAnalysis! Should we use the time dependent analysis? ONLY ON LDC!
TArrayF**fTimeSignal! Arrays which hold time dependent signals

Class Charts

Inheritance Chart:
TNamed
AliTPCCalibRawBase
AliTPCCalibPedestal

Function documentation

AliTPCCalibPedestal()
 default constructor

AliTPCCalibPedestal(const AliTPCCalibPedestal& ped)
 copy constructor

AliTPCCalibPedestal(const TMap* config)
 This constructor uses a TMap for setting some parametes

~AliTPCCalibPedestal()
 destructor

void SetTimeAnalysis(Bool_t time = kTRUE)
 Use time dependent analysis: Pedestals are analysed as a function
 of the drift time. There is one mean value generated for each time
 bin and each channel. It can be used as reference data and for
 configuration of the ALTRO pattern memory for baseline subtraction.

 ATTENTION: Use only on LDC in TPCPEDESTALda! On a LDC we get data
 only from one sector. For the full TPC we would need a lot of
 memory (36*159*140*1024*4bytes = 3.3GB)!

Int_t Update(const Int_t isector, const Int_t iRow, const Int_t iPad, const Int_t iTimeBin, const Float_t signal)
 Signal filling method

Bool_t TestEvent()
  Test event loop
 fill one oroc and one iroc with random gaus

TH2F* GetHisto(Int_t sector, TObjArray* arr, Int_t nbinsY, Float_t ymin, Float_t ymax, const Char_t* type, Bool_t force)
 return pointer to Q histogram
 if force is true create a new histogram if it doesn't exist allready

TH2F* GetHistoPedestal(Int_t sector, Bool_t force = kFALSE)
 return pointer to T0 histogram
 if force is true create a new histogram if it doesn't exist allready

AliTPCCalROC* GetCalRoc(Int_t sector, TObjArray* arr, Bool_t force)
 return pointer to ROC Calibration
 if force is true create a new histogram if it doesn't exist allready

AliTPCCalROC* GetCalRocPedestal(Int_t sector, Bool_t force = kFALSE)
 return pointer to ROC with Pedestal data
 if force is true create a new histogram if it doesn't exist allready

AliTPCCalROC* GetCalRocSigma(Int_t sector, Bool_t force = kFALSE)
 return pointer to  ROC with signal witdth in sigma
 if force is true create a new histogram if it doesn't exist allready

AliTPCCalROC* GetCalRocMean(Int_t sector, Bool_t force = kFALSE)
 return pointer to ROC with signal mean information
 if force is true create a new histogram if it doesn't exist allready

AliTPCCalROC* GetCalRocRMS(Int_t sector, Bool_t force = kFALSE)
 return pointer to signal width ROC Calibration
 if force is true create a new histogram if it doesn't exist allready

void Merge(AliTPCCalibPedestal *const ped)
  Merge reference histograms of sig to the current AliTPCCalibPedestal

Long64_t Merge(TCollection *const list)
 Merge all objects of this type in list

void Analyse()
  Calculate calibration constants

void AnalyseTime(Int_t nevents)
 Calculate for each channel and time bin the mean pedestal. This
 is used on LDC by TPCPEDESTALda to generate data used for configuration
 of the pattern memory for baseline subtraction in the ALTROs.

const TObjArray* GetCalPadPedestal() const
const TObjArray* GetCalPadSigma() const
const TObjArray* GetCalPadMean() const
{return &fCalRocArrayMean;}
const TObjArray* GetCalPadRMS() const
{return &fCalRocArrayRMS;}
TArrayF ** GetTimePedestals() const
{ return fTimeSignal; }
Int_t GetAdcMin() const
{ return fAdcMin; }
Int_t GetAdcMax() const
{ return fAdcMax; }
Float_t GetAnaMeanDown() const
{ return fAnaMeanDown; }
Float_t GetAnaMeanUp() const
{ return fAnaMeanUp; }
void SetRangeAdc(Int_t aMin, Int_t aMax)
{ fAdcMin=aMin; fAdcMax=aMax; }
void SetAnalysisTruncationRange(Float_t down, Float_t up)