Copyright(c) 2004, 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 AliFMDDigitizer.cxx * * @author Christian Holm Christensen <cholm@nbi.dk> * @date Mon Mar 27 12:38:26 2006 * @brief FMD Digitizers implementation * * @ingroup FMD_sim This class contains the procedures simulation ADC signal for the Forward Multiplicity detector : SDigits->Digits Digits consists of - Detector # - Ring ID - Sector # - Strip # - ADC count in this channel Digits consists of - Detector # - Ring ID - Sector # - Strip # - Total energy deposited in the strip - ADC count in this channel As the Digits and SDigits have so much in common, the classes AliFMDDigitizer and AliFMDSDigitizer are implemented via a base class AliFMDBaseDigitizer. +---------------------+ | AliFMDBaseDigitizer | +---------------------+ ^ | +----------+---------+ | | +-----------------+ +------------------+ | AliFMDDigitizer | | AliFMDSDigitizer | +-----------------+ +------------------+ | +-------------------+ | AliFMDSSDigitizer | +-------------------+ These classes has several paramters: fPedestal fPedestalWidth (Only AliFMDDigitizer) Mean and width of the pedestal. The pedestal is simulated by a Guassian, but derived classes my override MakePedestal to simulate it differently (or pick it up from a database). fVA1MipRange The dymamic MIP range of the VA1_ALICE pre-amplifier chip fAltroChannelSize The largest number plus one that can be stored in one channel in one time step in the ALTRO ADC chip. fSampleRate How many times the ALTRO ADC chip samples the VA1_ALICE pre-amplifier signal. The VA1_ALICE chip is read-out at 10MHz, while it's possible to drive the ALTRO chip at 25MHz. That means, that the ALTRO chip can have time to sample each VA1_ALICE signal up to 2 times. Although it's not certain this feature will be used in the production, we'd like have the option, and so it should be reflected in the code. The shaping function of the VA1_ALICE is generally given by f(x) = A(1 - exp(-Bx)) where A is the total charge collected in the pre-amp., and B is a paramter that depends on the shaping time of the VA1_ALICE circut. When simulating the shaping function of the VA1_ALICe pre-amp. chip, we have to take into account, that the shaping function depends on the previous value of read from the pre-amp. That results in the following algorithm: last = 0; FOR charge IN pre-amp. charge train DO IF last < charge THEN f(t) = (charge - last) * (1 - exp(-B * t)) + last ELSE f(t) = (last - charge) * exp(-B * t) + charge) ENDIF FOR i IN # samples DO adc_i = f(i / (# samples)) DONE last = charge DONE Here, pre-amp. charge train is a series of 128 charges read from the VA1_ALICE chip # samples is the number of times the ALTRO ADC samples each of the 128 charges from the pre-amp. Where Q is the total charge collected by the VA1_ALICE pre-amplifier. Q is then given by E S Q = - - e R where E is the total energy deposited in a silicon strip, R is the dynamic range of the VA1_ALICE pre-amp (fVA1MipRange), e is the energy deposited by a single MIP, and S ALTRO channel size in each time step (fAltroChannelSize). The energy deposited per MIP is given by e = M * rho * w where M is the universal number 1.664, rho is the density of silicon, and w is the depth of the silicon sensor. The final ADC count is given by C' = C + P where P is the (randomized) pedestal (see MakePedestal) This class uses the class template AliFMDMap<Type> to make an internal cache of the energy deposted of the hits. The class template is instantasized as typedef AliFMDMap<std::pair<Float_t, UShort_t> > AliFMDEdepMap; The first member of the values is the summed energy deposition in a given strip, while the second member of the values is the number of hits in a given strip. Using the second member, it's possible to do some checks on just how many times a strip got hit, and what kind of error we get in our reconstructed hits. Note, that this information is currently not written to the digits tree. I think a QA (Quality Assurance) digit tree is better suited for that task. However, the information is there to be used in the future. Latest changes by Christian Holm Christensen
AliFMDDigitizer() | |
AliFMDDigitizer(AliDigitizationInput* digInput) | |
AliFMDDigitizer(const AliFMDDigitizer&) | |
virtual | ~AliFMDDigitizer() |
void | TObject::AbstractMethod(const char* method) const |
virtual void | TObject::AppendPad(Option_t* option = "") |
virtual void | TObject::Browse(TBrowser* b) |
static TClass* | Class() |
virtual const char* | TObject::ClassName() const |
virtual void | TNamed::Clear(Option_t* option = "") |
virtual TObject* | TNamed::Clone(const char* newname = "") const |
virtual Int_t | TNamed::Compare(const TObject* obj) const |
virtual void | TObject::Delete(Option_t* option = "")MENU |
virtual void | Digitize(Option_t* option = "") |
virtual Int_t | TObject::DistancetoPrimitive(Int_t px, Int_t py) |
virtual void | TObject::Draw(Option_t* option = "") |
virtual void | TObject::DrawClass() constMENU |
virtual TObject* | TObject::DrawClone(Option_t* option = "") constMENU |
virtual void | TObject::Dump() constMENU |
virtual void | TObject::Error(const char* method, const char* msgfmt) const |
virtual void | TObject::Execute(const char* method, const char* params, Int_t* error = 0) |
virtual void | TObject::Execute(TMethod* method, TObjArray* params, Int_t* error = 0) |
virtual void | TObject::ExecuteEvent(Int_t event, Int_t px, Int_t py) |
virtual void | TObject::Fatal(const char* method, const char* msgfmt) const |
virtual void | TNamed::FillBuffer(char*& buffer) |
virtual TObject* | TObject::FindObject(const char* name) const |
virtual TObject* | TObject::FindObject(const TObject* obj) const |
virtual Option_t* | TObject::GetDrawOption() const |
static Long_t | TObject::GetDtorOnly() |
virtual const char* | TObject::GetIconName() const |
virtual const char* | TNamed::GetName() const |
virtual char* | TObject::GetObjectInfo(Int_t px, Int_t py) const |
static Bool_t | TObject::GetObjectStat() |
virtual Option_t* | TObject::GetOption() const |
Bool_t | AliDigitizer::GetRegionOfInterest() const |
Float_t | AliFMDBaseDigitizer::GetShapingTime() const |
virtual const char* | TNamed::GetTitle() const |
virtual UInt_t | TObject::GetUniqueID() const |
virtual Bool_t | TObject::HandleTimer(TTimer* timer) |
virtual ULong_t | TNamed::Hash() const |
virtual void | TObject::Info(const char* method, const char* msgfmt) const |
virtual Bool_t | TObject::InheritsFrom(const char* classname) const |
virtual Bool_t | TObject::InheritsFrom(const TClass* cl) const |
virtual Bool_t | Init() |
virtual void | TObject::Inspect() constMENU |
void | TObject::InvertBit(UInt_t f) |
virtual TClass* | IsA() const |
virtual Bool_t | TObject::IsEqual(const TObject* obj) const |
virtual Bool_t | TObject::IsFolder() const |
Bool_t | TObject::IsOnHeap() const |
virtual Bool_t | TNamed::IsSortable() const |
Bool_t | AliFMDBaseDigitizer::IsStoreTrackRefs() const |
Bool_t | TObject::IsZombie() const |
virtual void | TNamed::ls(Option_t* option = "") const |
void | TObject::MayNotUse(const char* method) const |
virtual Bool_t | TObject::Notify() |
void | TObject::Obsolete(const char* method, const char* asOfVers, const char* removedFromVers) const |
static void | TObject::operator delete(void* ptr) |
static void | TObject::operator delete(void* ptr, void* vp) |
static void | TObject::operator delete[](void* ptr) |
static void | TObject::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 void | TObject::Paint(Option_t* option = "") |
virtual void | TObject::Pop() |
virtual void | TNamed::Print(Option_t* option = "") const |
virtual Int_t | TObject::Read(const char* name) |
virtual void | TObject::RecursiveRemove(TObject* obj) |
void | TObject::ResetBit(UInt_t f) |
virtual void | TObject::SaveAs(const char* filename = "", Option_t* option = "") constMENU |
virtual void | TObject::SavePrimitive(basic_ostream<char,char_traits<char> >& out, Option_t* option = "") |
void | TObject::SetBit(UInt_t f) |
void | TObject::SetBit(UInt_t f, Bool_t set) |
virtual void | TObject::SetDrawOption(Option_t* option = "")MENU |
static void | TObject::SetDtorOnly(void* obj) |
virtual void | TNamed::SetName(const char* name)MENU |
virtual void | TNamed::SetNameTitle(const char* name, const char* title) |
static void | TObject::SetObjectStat(Bool_t stat) |
void | AliFMDBaseDigitizer::SetShapingTime(Float_t B = 10) |
void | AliFMDBaseDigitizer::SetStoreTrackRefs(Bool_t store = kTRUE) |
virtual void | TNamed::SetTitle(const char* title = "")MENU |
virtual void | TObject::SetUniqueID(UInt_t uid) |
virtual void | ShowMembers(TMemberInspector&) |
virtual Int_t | TNamed::Sizeof() const |
virtual void | Streamer(TBuffer&) |
void | StreamerNVirtual(TBuffer& ClassDef_StreamerNVirtual_b) |
virtual void | TObject::SysError(const char* method, const char* msgfmt) const |
Bool_t | TObject::TestBit(UInt_t f) const |
Int_t | TObject::TestBits(UInt_t f) const |
virtual void | TObject::UseCurrentStyle() |
virtual void | TObject::Warning(const char* method, const char* msgfmt) const |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) |
virtual Int_t | TObject::Write(const char* name = 0, Int_t option = 0, Int_t bufsize = 0) const |
enum TObject::EStatusBits { | kCanDelete | |
kMustCleanup | ||
kObjInCanvas | ||
kIsReferenced | ||
kHasUUID | ||
kCannotPick | ||
kNoContextMenu | ||
kInvalidObject | ||
}; | ||
enum TObject::[unnamed] { | kIsOnHeap | |
kNotDeleted | ||
kZombie | ||
kBitMask | ||
kSingleKey | ||
kOverwrite | ||
kWriteDelete | ||
}; |
AliDigitizationInput* | AliDigitizer::fDigInput | ! Pointer to the Digitizer input |
AliFMDEdepMap | AliFMDBaseDigitizer::fEdep | Cache of Energy from hits |
AliFMD* | AliFMDBaseDigitizer::fFMD | Detector object |
Int_t | AliFMDBaseDigitizer::fIgnoredLabels | ! Number of labels not assigned |
TString | TNamed::fName | object identifier |
AliRunLoader* | AliFMDBaseDigitizer::fRunLoader | ! Run loader |
Float_t | AliFMDBaseDigitizer::fShapingTime | Shaping profile parameter |
Bool_t | AliFMDBaseDigitizer::fStoreTrackRefs | Wether to store track references |
TString | TNamed::fTitle | object title |
Inheritance Chart: | ||||||||||||||||
|
Execute this digitizer. This member function will be called once per event by the passed AliDigitizationInput* digInput object. Parameters: options Not used
Sum contributions from SDigits Parameters: sdigitsBranch Branch of SDigit data