
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