ROOT logo
AliRoot » FMD » AliFMDReconstructor

class AliFMDReconstructor: public AliReconstructor


 This is a class that constructs AliFMDRecPoint objects from of Digits
 This class reads either digits from a TClonesArray or raw data from
 a DDL file (or similar), and stores the read ADC counts in an
 internal cache (fAdcs).   The rec-points are made via the naiive
 method.

-- Authors: Evgeny Karpechev(INR) and Alla Maevsksia
  Latest changes by Christian Holm Christensen <cholm@nbi.dk>




 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *

Id

 * @file    AliFMDReconstructor.cxx
 * @author  Christian Holm Christensen <cholm@nbi.dk>
 * @date    Mon Mar 27 12:47:09 2006
 * @brief   FMD reconstruction

Function Members (Methods)

public:
AliFMDReconstructor()
virtual~AliFMDReconstructor()
voidTObject::AbstractMethod(const char* method) const
virtual voidTObject::AppendPad(Option_t* option = "")
virtual voidTObject::Browse(TBrowser* b)
static TClass*Class()
virtual const char*TObject::ClassName() const
virtual voidTObject::Clear(Option_t* = "")
virtual TObject*TObject::Clone(const char* newname = "") const
virtual Int_tTObject::Compare(const TObject* obj) const
virtual voidConvertDigits(AliRawReader* reader, TTree* digitsTree) const
virtual voidTObject::Copy(TObject& object) const
virtual AliTrackleter*AliReconstructor::CreateMultFinder() const
virtual AliTracker*AliReconstructor::CreateTracker() const
virtual AliTracker*AliReconstructor::CreateTrackleter() const
virtual AliVertexer*AliReconstructor::CreateVertexer() const
virtual voidTObject::Delete(Option_t* option = "")MENU
virtual voidDigitize(AliRawReader* reader, TClonesArray* sdigits) const
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 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 voidFillESD(TTree* digitsTree, TTree* clusterTree, AliESDEvent* esd) const
virtual voidFillESD(AliRawReader*, TTree* clusterTree, AliESDEvent* esd) const
virtual voidAliReconstructor::FillEventTimeWithTOF(AliESDEvent*, AliESDpid*)
virtual TObject*TObject::FindObject(const char* name) const
virtual TObject*TObject::FindObject(const TObject* obj) const
virtual voidAliReconstructor::FinishEvent()
virtual const char*AliReconstructor::GetDetectorName() const
virtual Option_t*TObject::GetDrawOption() const
static Long_tTObject::GetDtorOnly()
AliESDFMD*GetESDObject() const
const AliEventInfo*AliReconstructor::GetEventInfo() const
AliESDEvent*AliReconstructor::GetHLTESD() const
virtual const char*TObject::GetIconName() const
virtual const char*TObject::GetName() const
virtual char*TObject::GetObjectInfo(Int_t px, Int_t py) const
static Bool_tTObject::GetObjectStat()
virtual Option_t*AliReconstructor::GetOption() const
virtual voidAliReconstructor::GetPidSettings(AliESDpid* esdPID)
static const AliDetectorRecoParam*AliReconstructor::GetRecoParam(Int_t iDet)
const AliRunInfo*AliReconstructor::GetRunInfo() const
virtual const char*TObject::GetTitle() const
virtual UInt_tTObject::GetUniqueID() const
virtual Bool_tTObject::HandleTimer(TTimer* timer)
virtual Bool_tHasDigitConversion() const
virtual ULong_tTObject::Hash() const
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 voidInit()
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_tTObject::IsSortable() const
Bool_tTObject::IsZombie() const
virtual voidTObject::ls(Option_t* option = "") const
voidTObject::MayNotUse(const char* method) const
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)
virtual voidTObject::Paint(Option_t* option = "")
virtual voidTObject::Pop()
virtual voidTObject::Print(Option_t* option = "") const
virtual voidProcessDigits(TClonesArray* digits, const AliFMDRawReader& rawRead) const
virtual Int_tTObject::Read(const char* name)
virtual voidReconstruct(AliFMDRawReader& reader) const
virtual voidReconstruct(TTree* digitsTree, TTree* clusterTree) const
virtual voidReconstruct(AliRawReader*, TTree*) const
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 = "")
virtual voidSetAngleCorrect(Bool_t use = kTRUE)
voidTObject::SetBit(UInt_t f)
voidTObject::SetBit(UInt_t f, Bool_t set)
voidSetDiagnose(Bool_t use = kTRUE)
virtual voidTObject::SetDrawOption(Option_t* option = "")MENU
static voidTObject::SetDtorOnly(void* obj)
virtual voidSetESD(AliESDEvent* esd)
voidAliReconstructor::SetEventInfo(AliEventInfo* evInfo)
voidAliReconstructor::SetHLTESD(AliESDEvent* hltesd)
virtual voidSetNoiseFactor(Float_t f = 3)
static voidTObject::SetObjectStat(Bool_t stat)
voidAliReconstructor::SetOption(Option_t* option)
voidAliReconstructor::SetRecoParam(const AliDetectorRecoParam* par)
voidAliReconstructor::SetRunInfo(AliRunInfo* runInfo)
virtual voidTObject::SetUniqueID(UInt_t uid)
virtual voidShowMembers(TMemberInspector&)
virtual voidStreamer(TBuffer&)
voidStreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b)
virtual voidTObject::SysError(const char* method, const char* msgfmt) const
virtual voidAliReconstructor::Terminate() const
Bool_tTObject::TestBit(UInt_t f) const
Int_tTObject::TestBits(UInt_t f) const
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:
AliFMDReconstructor(const AliFMDReconstructor&)
virtual Float_tAdc2Energy(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, UShort_t count) const
virtual Float_tAdc2Energy(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Float_t eta, UShort_t count) const
virtual voidDigitizeSignal(TClonesArray* sdigits, UShort_t det, Char_t rng, UShort_t sec, UShort_t str, UShort_t sam, Short_t adc) const
virtual voidTObject::DoError(int level, const char* location, const char* fmt, va_list va) const
virtual Float_tEnergy2Multiplicity(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Float_t edep) const
Int_tGetIdentifier() const
const AliFMDRecoParam*GetParameters() const
virtual voidGetVertex(AliESDEvent* esd) const
voidTObject::MakeZombie()
voidMarkDeadChannels(AliESDFMD* esd) const
AliFMDReconstructor&operator=(const AliFMDReconstructor&)
virtual voidPhysicalCoordinates(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Float_t& eta, Float_t& phi) const
Bool_tPreReconstruct() const
virtual voidProcessDigit(AliFMDDigit* digit) const
virtual voidProcessDigits(TClonesArray* digits) const
virtual voidProcessSignal(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Short_t adc) const
virtual UShort_tSubtractPedestal(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Short_t adc) const
virtual UShort_tSubtractPedestal(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, UShort_t adc, Float_t noiseFactor, Bool_t zsEnabled, UShort_t zsNoiseFactor) const
virtual voidUseRecoParam(Bool_t set = kTRUE) const

Data Members

public:
enum Vertex_t { kNoVertex
kGenVertex
kESDVertex
};
enum TObject::EStatusBits { kCanDelete
kMustCleanup
kObjInCanvas
kIsReferenced
kHasUUID
kCannotPick
kNoContextMenu
kInvalidObject
};
enum TObject::[unnamed] { kIsOnHeap
kNotDeleted
kZombie
kBitMask
kSingleKey
kOverwrite
kWriteDelete
};
protected:
Bool_tfAngleCorrectWhether to angle correct
AliFMDBoolMapfBadStrip marked bad
Float_tfCurrentVertexZ-coordinate of primary vertex
TH1*fDiagAllDiagnostics histogram
TH1*fDiagStep1Diagnostics histogram
TH1*fDiagStep2Diagnostics histogram
TH1*fDiagStep3Diagnostics histogram
TH1*fDiagStep4Diagnostics histogram
Bool_tfDiagnosticsWheter to do diagnostics
AliESDEvent*fESDESD object(?)
AliESDFMD*fESDObjESD output object
TClonesArray*fMultCache of RecPoints
Int_tfNMultNumber of entries in fMult
Float_tfNoiseFactorFactor of noise to check
TTree*fTreeROutput tree
AliFMDReconstructor::Vertex_tfVertexTypeWhat kind of vertex we got
Bool_tfZS[3]Zero-suppredded?
UShort_tfZSFactor[3]Noise factor for Zero-suppression
Bool_tfZombieAre we a zombie?

Class Charts

Inheritance Chart:
TObject
AliReconstructor
AliFMDReconstructor

Function documentation

AliFMDReconstructor()
 Make a new FMD reconstructor object - default CTOR.
~AliFMDReconstructor()
 Destructor
Init()
 Initialize the reconstructor
ConvertDigits(AliRawReader* reader, TTree* digitsTree) const
 Convert Raw digits to AliFMDDigit's in a tree
GetVertex(AliESDEvent* esd) const
 Return the vertex to use.
 This is obtained from the ESD object.
 If not found, a warning is issued.
GetIdentifier() const
 Get the detector identifier.
 Note the actual value is cached so that we do not
 need to do many expensive string comparisons.
GetParameters() const
 Get the reconstruction parameters.

 Return:
   Pointer to reconstruction parameters or null if not found or wrong type
UseRecoParam(Bool_t set = kTRUE) const
 Set-up reconstructor to use values from reconstruction
 parameters, if present, for this event.   If the argument @a set
 is @c false, then restore preset values.

 Parameters:
    set

MarkDeadChannels(AliESDFMD* esd) const
 Loop over all entries of the ESD and mark
 those that are dead as such
 - otherwise put in the zero signal.
PreReconstruct() const
Reconstruct(AliFMDRawReader& reader) const
 Reconstruct directly from raw data (no intermediate output on
 digit tree or rec point tree).

 Parameters:
   rawReader	FMD Raw event reader
Reconstruct(AliRawReader* , TTree* ) const
 Reconstruct directly from raw data (no intermediate output on
 digit tree or rec point tree).

 Parameters:
   reader	Raw event reader
   ctree    Not used - 'cluster tree' to store rec-points in.
Digitize(AliRawReader* reader, TClonesArray* sdigits) const
 Reconstruct directly from raw data (no intermediate output on
 digit tree or rec point tree).

 Parameters:
   reader	Raw event reader
   ctree    Not used.
Reconstruct(TTree* digitsTree, TTree* clusterTree) const
 Reconstruct event from digits in tree
 Get the FMD branch holding the digits.
 FIXME: The vertex may not be known yet, so we may have to move
 some of this to FillESD.

 Parameters:
   digitsTree	Pointer to a tree containing digits
   clusterTree	Pointer to output tree

ProcessDigits(TClonesArray* digits, const AliFMDRawReader& rawRead) const
 For each digit, find the pseudo rapdity, azimuthal angle, and
 number of corrected ADC counts, and pass it on to the algorithms
 used.

 Parameters:
    digits	Array of digits

ProcessDigits(TClonesArray* digits) const
 For each digit, find the pseudo rapdity, azimuthal angle, and
 number of corrected ADC counts, and pass it on to the algorithms
 used.

 Parameters:
    digits	Array of digits

ProcessDigit(AliFMDDigit* digit) const
 Process a single digit

 Parameters:
    digit Digiti to process

ProcessSignal(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Short_t adc) const
 Process the signal from a single strip

 Parameters:
    det	Detector ID
    rng	Ring ID
    sec	Sector ID
    rng	Strip ID
    adc     ADC counts

DigitizeSignal(TClonesArray* sdigits, UShort_t det, Char_t rng, UShort_t sec, UShort_t str, UShort_t sam, Short_t adc) const
 Process the signal from a single strip

 Parameters:
    det	Detector ID
    rng	Ring ID
    sec	Sector ID
    rng	Strip ID
    adc     ADC counts

SubtractPedestal(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, UShort_t adc, Float_t noiseFactor, Bool_t zsEnabled, UShort_t zsNoiseFactor) const
 Subtract the pedestal off the ADC counts.

 Parameters:
    det           Detector number
    rng           Ring identifier
    sec           Sector number
    str           Strip number
    adc           ADC counts
    noiseFactor   If pedestal substracted pedestal is less then
        this times the noise, then consider this to be 0.
    zsEnabled     Whether zero-suppression is on.
    zsNoiseFactor Noise factor used in on-line pedestal
        subtraction.

 Return:
    The pedestal subtracted ADC counts (possibly 0), or @c
         USHRT_MAX in case of problems.

SubtractPedestal(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Short_t adc) const
 Member function to subtract the pedestal from a digit

 Parameters:
    det	Detector ID
    rng	Ring ID
    sec	Sector ID
    rng	Strip ID
    adc     # of ADC counts
 Return:
    Pedestal subtracted signal or USHRT_MAX in case of problems

Adc2Energy(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, UShort_t count) const
 Converts number of ADC counts to energy deposited.
 Note, that this member function can be overloaded by derived
 classes to do strip-specific look-ups in databases or the like,
 to find the proper gain for a strip.

 In the first simple version, we calculate the energy deposited as

    EnergyDeposited = cos(theta) * gain * count

 where

           Pre_amp_MIP_Range
    gain = ----------------- * Energy_deposited_per_MIP
           ADC_channel_size

 is constant and the same for all strips.

 For the production we use the conversion measured in the NBI lab.
 The total conversion is then:

    gain = ADC / DAC

                  EdepMip * count
      => energy = ----------------
                  gain * DACPerADC

 Parameters:
    det	Detector ID
    rng	Ring ID
    sec	Sector ID
    rng	Strip ID
    counts  Number of ADC counts over pedestal
 Return
    The energy deposited in a single strip, or -1 in case of problems

Adc2Energy(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Float_t eta, UShort_t count) const
 Converts number of ADC counts to energy deposited.
 Note, that this member function can be overloaded by derived
 classes to do strip-specific look-ups in databases or the like,
 to find the proper gain for a strip.

 In the first simple version, we calculate the energy deposited as

    EnergyDeposited = cos(theta) * gain * count

 where

           Pre_amp_MIP_Range
    gain = ----------------- * Energy_deposited_per_MIP
           ADC_channel_size

 is constant and the same for all strips.

 For the production we use the conversion measured in the NBI lab.
 The total conversion is then:

    gain = ADC / DAC

                  EdepMip * count
      => energy = ----------------
                  gain * DACPerADC

 Parameters:
    det	Detector ID
    rng	Ring ID
    sec	Sector ID
    rng	Strip ID
    eta     Psuedo-rapidity
    counts  Number of ADC counts over pedestal
 Return
    The energy deposited in a single strip, or -1 in case of problems

Energy2Multiplicity(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Float_t edep) const
 Converts an energy signal to number of particles.
 Note, that this member function can be overloaded by derived
 classes to do strip-specific look-ups in databases or the like,
 to find the proper gain for a strip.

 In this simple version, we calculate the multiplicity as

   multiplicity = Energy_deposited / Energy_deposited_per_MIP

 where

   Energy_deposited_per_MIP = 1.664 * SI_density * SI_thickness

 is constant and the same for all strips

 Parameters:
    det	Detector ID
    rng	Ring ID
    sec	Sector ID
    rng	Strip ID
    edep    Energy deposited in a single strip
 Return
    The "bare" multiplicity corresponding to the energy deposited
PhysicalCoordinates(UShort_t det, Char_t rng, UShort_t sec, UShort_t str, Float_t& eta, Float_t& phi) const
 Get the eta and phi of a digit

 Parameters:
    det	Detector ID
    rng	Ring ID
    sec	Sector ID
    rng	Strip ID
    eta	On return, contains the psuedo-rapidity of the strip
    phi     On return, contains the azimuthal angle of the strip

FillESD(TTree* digitsTree, TTree* clusterTree, AliESDEvent* esd) const
 nothing to be done
 FIXME: The vertex may not be known when Reconstruct is executed,
 so we may have to move some of that member function here.
FillESD(AliRawReader* , TTree* clusterTree, AliESDEvent* esd) const
 Forwards to above member function

AliFMDReconstructor()
   * CTOR

Bool_t HasDigitConversion() const
   * Flag that we can convert raw data into digits.
   *
   * @return always @c true

{ return kTRUE; }
AliESDFMD* GetESDObject() const
   * Return the filled FMD ESD object
   *
   * @return FMD ESD object

{ return fESDObj; }
void SetESD(AliESDEvent* esd)
   * Not used

{ fESD = esd; }
void SetNoiseFactor(Float_t f = 3)
   * Set the noise factor
   *
   * @param f Factor to use

{ fNoiseFactor = f; }
void SetAngleCorrect(Bool_t use = kTRUE)
   * Set whether we should do angle correction or nor
   *
   * @param use If true, do angle correction

{ fAngleCorrect = use; }
void SetDiagnose(Bool_t use = kTRUE)
   * Set whether we want to do diagnostics.  If this is enabled, a
   * file named @c FMD.Diag.root will be made.  It contains a set of
   * histograms for each event, filed in separate directories in the
   * file.  The histograms are
   * @verbatim
   * diagStep1   Read ADC vs. Noise surpressed ADC
   * diagStep2   Noise surpressed ADC vs. calculated Energy dep.
   * diagStep3   Energy deposition vs. angle corrected Energy dep.
   * diagStep4   Energy deposition vs. calculated multiplicity
   * diagAll     Read ADC vs. calculated multiplicity
   * @endverbatim
   *
   * @param use If true, make the diagnostics file

{ fDiagnostics = use; }
AliFMDReconstructor& operator=(const AliFMDReconstructor& )
   * Assignment operator
   *
   * @param other Object to assign from
   *
   * @return reference to this object