]>
Commit | Line | Data |
---|---|---|
37c4363a | 1 | #ifndef ALIFMDV1_H |
2 | #define ALIFMDV1_H | |
3 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights | |
4 | * reserved. | |
5 | * | |
6 | * Latest changes by Christian Holm Christensen <cholm@nbi.dk> | |
7 | * | |
8 | * See cxx source for full Copyright notice | |
9 | */ | |
c2fc1258 | 10 | /** @file AliFMDv1.h |
11 | @author Christian Holm Christensen <cholm@nbi.dk> | |
12 | @date Mon Mar 27 12:48:51 2006 | |
13 | @brief Concrete implementation of FMD detector driver - detailed | |
14 | version | |
15 | */ | |
37c4363a | 16 | //____________________________________________________________________ |
17 | // | |
18 | // Manager class for the FMD - Detailed version. | |
088f8e79 | 19 | // Implements the full geometry, |
20 | // And does stepping | |
21 | // | |
37c4363a | 22 | #ifndef ALIFMD_H |
97961cbd | 23 | # include "AliFMD.h" |
37c4363a | 24 | #endif |
25 | #ifndef ROOT_TLorentzVector | |
26 | # include <TLorentzVector.h> | |
27 | #endif | |
28 | ||
29 | //____________________________________________________________________ | |
c2fc1258 | 30 | /** @brief Forward Multiplicity Detector based on Silicon wafers. |
31 | ||
32 | This class contains the base procedures for the Forward | |
33 | Multiplicity detector Detector consists of 3 sub-detectors FMD1, | |
34 | FMD2, and FMD3, each of which has 1 or 2 rings of silicon sensors. | |
9f662337 | 35 | |
36 | This class contains the detailed version of the FMD - that is, | |
37 | hits are produced during simulation. | |
38 | @ingroup FMD_sim | |
39 | */ | |
37c4363a | 40 | class AliFMDv1 : public AliFMD |
41 | { | |
42 | public: | |
9f662337 | 43 | /** CTOR */ |
90da4514 | 44 | AliFMDv1() |
45 | : AliFMD(), | |
46 | fCurrentDeltaE(0), | |
47 | fCurrentV(), | |
48 | fCurrentP(), | |
49 | fCurrentPdg(0) { fDetailed = kTRUE; } | |
9f662337 | 50 | /** CTOR |
51 | @param name Name | |
52 | @param title Title */ | |
37c4363a | 53 | AliFMDv1(const char *name, const char *title="Detailed geometry") |
90da4514 | 54 | : AliFMD(name, title), |
55 | fCurrentDeltaE(0), | |
56 | fCurrentV(), | |
57 | fCurrentP(), | |
58 | fCurrentPdg(0) { fDetailed = kTRUE; } | |
9f662337 | 59 | /** DTOR */ |
37c4363a | 60 | virtual ~AliFMDv1() {} |
61 | ||
62 | // Required member functions | |
9f662337 | 63 | /** Get version number |
64 | @return always 1 */ | |
37c4363a | 65 | virtual Int_t IsVersion() const {return 1;} |
9f662337 | 66 | /** Member function that is executed each time a hit is made in the |
67 | FMD. None-charged particles are ignored. Dead tracks are | |
68 | ignored. | |
69 | ||
70 | The procedure is as follows: | |
71 | - IF NOT track is alive THEN RETURN ENDIF | |
72 | - IF NOT particle is charged THEN RETURN ENDIF | |
73 | - IF NOT volume name is "STRI" or "STRO" THEN RETURN ENDIF | |
74 | - Get strip number (volume copy # minus 1) | |
75 | - Get phi division number (mother volume copy #) | |
76 | - Get module number (grand-mother volume copy #) | |
77 | - section # = 2 * module # + phi division # - 1 | |
78 | - Get ring Id from volume name | |
79 | - Get detector # from grand-grand-grand-mother volume name | |
80 | - Get pointer to sub-detector object. | |
81 | - Get track position | |
82 | - IF track is entering volume AND track is inside real shape THEN | |
83 | - Reset energy deposited | |
84 | - Get track momentum | |
85 | - Get particle ID # | |
86 | - ENDIF | |
87 | - IF track is inside volume AND inside real shape THEN | |
88 | - Update energy deposited | |
89 | - ENDIF | |
90 | - IF track is inside real shape AND (track is leaving volume, | |
91 | or it died, or it is stopped THEN | |
92 | - Create a hit | |
93 | - ENDIF | |
94 | */ | |
37c4363a | 95 | virtual void StepManager(); |
96 | protected: | |
9f662337 | 97 | /** Translate VMC coordinates to detector coordinates |
98 | @param v On output, Current position | |
99 | @param detector On output, detector # | |
100 | @param ring On output, ring id | |
101 | @param sector On output, sector # | |
102 | @param strip On output, strip # | |
103 | @return @c true on success */ | |
54e415a8 | 104 | Bool_t VMC2FMD(TLorentzVector& v, UShort_t& detector, |
105 | Char_t& ring, UShort_t& sector, UShort_t& strip) const; | |
9f662337 | 106 | /** Translate VMC coordinates to detector coordinates |
107 | @param copy Volume copy number | |
108 | @param v On output, Current position | |
109 | @param detector On output, detector # | |
110 | @param ring On output, ring id | |
111 | @param sector On output, sector # | |
112 | @param strip On output, strip # | |
113 | @return @c true on success */ | |
54e415a8 | 114 | Bool_t VMC2FMD(Int_t copy, TLorentzVector& v, |
115 | UShort_t& detector, Char_t& ring, | |
116 | UShort_t& sector, UShort_t& strip) const; | |
9f662337 | 117 | /** Check if hit is bad. A hit is bad if |
118 | @f[ | |
119 | \Delta E > |Q|^2 p / m > 1 | |
120 | @f] | |
121 | holds, where @f$ \Delta E@f$ is the energy loss in this step, | |
122 | @f$ Q@f$ is the particle charge, @f$ p@f$ is the track momentum, | |
123 | and @f$ m@f$ is the particle mass. If a track is marked as | |
124 | bad, it's kept in a cache, and can be printed at the end of the | |
125 | event. | |
126 | @param trackno Track number | |
127 | @param pdg PDG particle type ID | |
128 | @param absQ Absolute value of particle charge | |
129 | @param p Track momentum | |
130 | @param edep Energy loss in this step. | |
131 | @return @c true if hit is `bad' */ | |
bf000c32 | 132 | Bool_t CheckHit(Int_t trackno, Int_t pdg, Float_t absQ, |
133 | const TLorentzVector& p, Float_t edep) const; | |
54e415a8 | 134 | |
135 | Double_t fCurrentDeltaE; // The current accumulated energy loss | |
37c4363a | 136 | TLorentzVector fCurrentV; // Current production vertex |
137 | TLorentzVector fCurrentP; // Current momentum vector | |
138 | Int_t fCurrentPdg; // Current PDG code | |
139 | ||
54e415a8 | 140 | ClassDef(AliFMDv1,5) // Detailed FMD geometry |
37c4363a | 141 | }; |
142 | ||
143 | #endif | |
144 | //____________________________________________________________________ | |
145 | // | |
146 | // Local Variables: | |
147 | // mode: C++ | |
148 | // End: | |
149 | // | |
150 | // EOF | |
151 | // |