Moving loading base after raw
[u/mrichter/AliRoot.git] / HMPID / api.txt
CommitLineData
d3da6dc4 1How to open session:
2 use static method AliRunLoader::Open("galice.root","AlicE","update") or just AliRunLoader::Open() for defaults.
3 Returns pointer to AliRunLoader on success or fatal termination on error
4How to get total number of events in galice.root:
5 AliRunLoader::GetNumberOfEvents() (or AliRun::GetEventsPerRun() using f.e. gAlice deprecated)
6How to get pointer to HMPID:
7 AliRunLoader()->GetAliRun()->GetDetector("HMPID") but before one needs to AliRunLoade()->Set
8How to avoid using gAlice:
9 detector->GetLoader()->GetRunLoader()->GetAliRun() returns gAlice global pointer.
10How to retrieve pointer to alice run loader:
11 use pHMPID->GetLoader()->GetRunLoader() (all detector classes inherit from AliDetector which has GetLoader())
12 use method AliRun::GetRunLoader for gAlice (deprecated)
13How to get pointers to different root trees:
14 TreeE belongs to AliRunLoader, available after AliRunLoader::LoadHeader()
15 TreeK belongs to AliRunLoader, available after AliRunLoader::LoadKinematics()
16 TreeH belongs to AliLoader , available after AliLoader::LoadHits()
17 TreeS belongs to AliLoader , available after AliLoader::LoadSDigits()
18 TreeD belongs to AliLoader , available after AliLoader::LoadDigits()
19 TreeR belongs to AliLoader , available after AliLoader::LoadRecPoints()
20 all methods return 0 on success.
21How to get event of interest:
22 AliRunLoader::GetEvent(event_number) returns 0 on success
23How to deal with the stack of particles?
24 - first of all, the stack includes primary as well as secondary particles
25 - pointer to the stack is taken:
d3da6dc4 26 AliRunLoader::Stack() but before one needs to load event header by AliRunLoader::LoadHeader() otherwise both methods return 0.
27 Moreover loading header gives the information about number of particles only.
28 To retrieve the list of particle one also needs to load kinematics by AliRunLoader::LoadKinematics()
29 - total amount of particles in stack for a given event:
30 AliStack::GetNtrack()
d3da6dc4 31 - total amount of primary particles in stack for a given event (after LoadHeader()):
32 AliStack::GetNprimary()
33How to retrieve hits:
34 Hits are stored on primary by primary basis. Hits for the given primary is TClonesArray.
35 To retrieve all hits one needs to do:
36 -initialize the root tree and containers: pRich->GetLoader()->LoadHits(); (AliLoader::LoadHits() returns 0 on success)
37 -read number of entries in TreeH: pRich->GetLoader()->TreeH()->GetEntries()
745cdf23 38 -then for each entry: pRich->GetLoader()->TreeH()->GetEntry(i)
d3da6dc4 39How to retrieve sdigits?
40 Sdigits stored in tree S with the branch of TClonesArray, all sdigits in a single TClonesArray
41 So the tree has only one entry.
42 One needs to say:
43 -pRich->GetLoader()->LoadSDigits(); this one open file, get the tree and invoke AliHMPID::SetTreeAddress()
44How to retrieve digits?
45 Digits stored in tree D with the 7 branches of TClonesArray, one per chamber, all digits of a given chamber in a single TClonesArray
46 So the tree has only one entry.
47 -One needs to say:
48 pRich->GetLoader()->LoadDigits(); this one opens file, gets the tree and invoke AliHMPID::SetTreeAddress() which in turn corresponds
49 branches of the tree to the digits containers in memory. There are 7 containers, one per chamber, all of them belong to AliHMPID.
50 -Then one needs to take the tree entry (only one) to the memory:
51 pRich->GetLoader()->TreeD()->GetEntry(0)
52 -Finally pRich->Digits(chamber_number) returns the pointer to TClonesArray of AliHMPIDdigit
53What are the debug methods avail:
54 AliLog::SetGlobalDebugLevel(AliLog::kDebug)
55How to get info for a given particle number:
56 Header and Kinematics trees must be loaded, then possible to retrieve pointer to Stack of particles
57 Int_t AliRunLoader::LoadHeader(); Int_t AliRunLoader::LoadKinematics()
58 AliStack *AliRunLoader::Stack()
59 TParticle *AliStack::Particle(tid)
60 TParticle::Print()
61How to deal with AliRunDigitizer:
62 AliRunDigitizer::Exec() just call AliRunDigitizer::Digitize()
63What are the meanings of different VMC flags:
64 gMC->IsTrackAlive()
65 gMC->IsTrackStop()
66 gMC->IsTrackDisappeared()
67How to get pad number for a local position:
68 use static TVector AliHMPIDParam::Loc2Pad(TVector2 position);
69Why list of chambers belongs to AliHMPIDParam:
70
71How to check if a given stack particle is primary:
72 Stack is TClonesArray of TParticle. TParticle::GetMother(0) returns -1 if it's primary (no mother)
73How to loop over all possible object:
74 for(Int_t iEventN=0;iEventN < GetLoader()->GetRunLoader()->GetAliRun()->GetEventsPerRun();iEventN++){//events loop
75 for(Int_t iEntryN=0;iEntryN < GetLoader()->TreeH()->GetEntries();iEntryN++){//TreeH loop
76 GetLoader()->TreeH()->GetEntry(iEntryN);//get current entry (prim)
77 for(Int_t iHitN=0;iHitN<Hits()->GetEntries();iHitN++){//hits loop
78 AliVHMPIDHit *pHit=(AliVHMPIDHit*)Hits()->At(iHitN);//get current hit
79
80 }//hits loop
81 }//TreeH loop
82 }//events loop
83
84
85HMPID full simulation-reconstruction sequence
86
87hits->sdigit:
88 Responsible method is AliHMPID::Hits2SDigits
89 One hit may affect one or more pads.
90 Hit position is taken on the anode wires plane as the most of avalanche is developed there.
91 This position is not directly available, track intersections with entrance and exit of amplification gap are only stored.
92 So the position in the middle of the gap is calculated as average out of pHit->In() and pHit->Out() positions.
93 Then, total charge collected for this hit is calculated by AliHMPIDParam::Hit2Qdc.
94 Area of disintegration is a list of pads affected by current hit. This is a parameter of Mathienson
95sdigits->digits:
96 The necessety of sdigits is dictated by the fact that transport engine transports tracks in a continuous sequence track by track.
97 It means that it may happen that the same pad is affected by few tracks. But this might be known only after the transport of full event is finished.
98
99digits->clusters
100 A set of neighboring digits compose cluster. The aim of this transformation is to construct a list of clusters out of digits list.
101 The calling sequence is:
102 AliReconstruction::Run()
103
104 AliHMPIDReconstructor::Reconstruct() creates an empty clusters list, loops on chambers, retrieves a list of digits for a given chamber, gives it to the method Dig2Clu() and finally serializes
105 the list
106
107 AliHMPIDReconstructor::Dig2Clu() which knows no details about
108
109
110clusters+tracks->theta cerenkov
111
112
113
114
745cdf23 115How to get correct magnetic field:
116 mag field is needed for simulation as well as reconstruction
117
d3da6dc4 118
119
120
121
122
123
124Generalized structure of AliReconstruction:
125
126Run()
127{
128 if(there is galice.root) <-|
129 AliRunLoader::Open(....) |
130 else | this is done in InitRunLoader()
131 if(raw data process requested) |
132 create galice.root on the base of AliRawReader::NextEvent <-|
133
134 for(all detectors){ <-|
135 if(detector not selected to run) skip this detector | this is done in RunLocalReconstruction()
136 reconstructor=get detector's reconstructor |
137 |
138 if(detector HasLocalReconstruction) skip this detector | IMPORTANT! if HasLocalReconstruction() returns YES use RunLocalEventReconstruction instead
139 if(run upon raw data) |
140 reconstructor->Reconstruct(fRunLoader, fRawReader); |
141 else | <- this approach is currently used by HMPID as all branches are mounted in AliHMPID.cxx
142 reconstructor->Reconstruct(fRunLoader); |
143 } <-|
144
145 for(all events){
146
147 for(all detectors){ |
148 if(detector not selected to run) skip this detector |
149 reconstructor=get detector's reconstructor |
150 loader=get detector's loader | this is done in RunLocalEventReconstruction()
151 if(raw data process requested and detector HasDigitConversion){ |
152 loader->LoadDigits("update"); | open file and invoke detector->SetTreeAddress();
153 loader->CleanDigits(); |
154 loader->MakeDigitsContainer(); | create tree
155 reconstructor->Reconstruct(fRawReader,loader->TreeD()); | expected to fill TreeD out of raw reader
156 loader->WriteDigits("overwrite"); |
157 loader->UnloadDigits(); |
158 } |
159 if(detector do not HasLocalReconstruction) skip this detector | IMPORTANT! assumed that this detector is already processed in RunLocalReconstruction()
160 loader->LoadRecPoints("update"); |
161 loader->CleanRecPoints(); |
162 loader->MakeRecPointsContainer(); |
163 if(fRawReader && reconstructor do not HasDigitConversion()){ |
164 reconstructor->Reconstruct(fRawReader, loader->TreeR()); | expected to fill TreeR out of raw reader
165 }else{ |
166 loader->LoadDigits("read"); |
167 reconstructor->Reconstruct(loader->TreeD(),loader->TreeR()); | the only operations inside are pDigTree->GetEntry(0) and pCluTree->Fill();
168 loader->UnloadDigits(); |
169 } |
170 loader->WriteRecPoints("OVERWRITE"); |
171 loader->UnloadRecPoints(); |
172 }//detectors loop |
173
174 }//events loop
175}
176
177
178HMPID calibration and alignment.
179
180Abstract
181HMPID calibration and alignment strategy is described with emphasis put on those aspects of the procedure which are relevant for reconstruction and thus the final detector
182figure of merit. In particular, the refractive index calibration technique based on mass plot shifts analysis and chamber alignment with respect to core detectors
183are explained in details. External sources of calibration and alignment data are also mentioned as well as the way HMPID intends to handle those data, including initial CDB
184creator.
185
186Calibration.
187Looking on HMPID chamber structure, full description of which is available elsewhere (ref RichTDR), easy to compile the table of all possible parameters affecting reconstruction.
188The first one of major importance is a freon refractive index. Although the full optical path visible by photons includes freon vessel, proximity and amplification gaps filled
189with methane and quartz window separating above mentioned volumes, only freon refractive index is subject for calibration. Refractive index of SiO2 window is not practically
190affected by any external parameters, while influence of methane temperature to it's refractive index is negligible. So it's enough to measure there optical curves just once.
191In the rest, the only changeable parameter is refractive index of freon. Temperature influence on freon refractive index was measured experimentally. The parametrization
192found to be:
193 n=n0-0.0005(T-20) where T is freon temperature in degrees Celsius
194 n0=Sqrt(1+ 0.554*lamda^2/(lamda^2-5796)) where lamda is photon wavelength in nm taken at 20 degrees Celsius
8c2afcb4 195Preliminary, the parametrization of refractive index versus temperature and photon energy is considered to be permanent.
196As the reconstruction itself is only interested in mean refractive index Nmean C6F14, the most elegant solution is to store in OCDB this value, prcalculated in
197AliHMPIDPrecprocessor. 2 measurements of temperature is avaiable from DCS: for inlet and outlet. They come in form of TObjArray of AliDCSValue, where AliDCSValue
198holds the value of temperature plus a time stamp at wich the value was taken. Due to organization of DCS, it's not possible to implay that all the points are taken at the same
199time, hence marked with the same time stamp. So the mean temperature are not calculable from inlet-outlet pair. Instead each sperate temperature data points are fitted.
200The resulting functions provide mean temperature function.
201
202
203
d3da6dc4 204In local CDB storage (default directory is $ALICE_ROOT) two versions of freon refractive index are written by external macro RichCdb.C :
205Run0_0_v0_s0.root contains DiMauro's parametrization and the temperature is set to 20 degrees. To be used as default for simulation and reconstruction.
206Run0_0_v0_s1.root contains DiMauro's parametrization and the temperature is set to 50 degrees. To be used in special uncalibrated reconstruction to test calibration procedure.
207Both of them are valid in run range from run number 0 to run number 0, thus in no way affecting any normal operations.
208
209Refractive index of freon (C6F14) is taken in AliHMPIDRecon for 3 different photon energies by means of 2 methods: Set
210
211
212
213Alignment.
214Information about detector position and orientation is needed during reconstruction phase. This information affects track-cluster matching procedure, the relevant peace of
215code comes to AliHMPIDTracker::PropogateBack(). Matching procedure consists in prolongation of the track reconstructed in core detectors up to each HMPID chamber plane in
216a sequence. The plane used is the entrance to HMPID radiators. If the intersection exists and inside the sensitive area, the point of intersection is to be transformed to HMPID
217local reference system. Note, that in this check, the dead zones in-between radiators are not taken into account. This operation requiring MARS to LORS transformations is done
218in AliHMPIDHelix::RichIntersection(). Plane to be intersected is defined by a point belonging to that plane served by AliHMPIDParam::Center(ChamberNumber) and a vector normal
219to the plane served by AliHMPIDParam::Norm(ChamberNumber). Transformations itself are done in AliHMPIDParam::Mars2Lors() and AliHMPIDParam::Lors2Mars(). Internaly in AliHMPIDParam,
220each chamber is represented by TGeoHMatrix. It's worth to stress again that geometry related operations are needed to be done for 3 different planes per chamber, namely entrance
221to radiator, anode wires plane and photocathode plane. So AliHMPIDParam sustains 7*3=21 planes. Also important to say, that direct usage of TGeoHMatrix::MasterToLocal()
222and vice versa is not possible due to special nature of HMPID LORS. According to the decision made about 3 years ago, HMPID local reference system is centered in low left
223hand corner of the chamber if one looks from outside to direction pointing to intersection point.
224So the most obvious candidate for alignable objects to be stored are these 21 TGeoHMatrix objects.
225The approach suggested in AliAlignObj is not quite feasible mainly due to the fact it relays on incrementing procedure using import from geometry.root. HMPID geometry is defined
226in a way that there is no volumes exactly corresponding to the HMPID planes.
227
228Geometry of HMPID chambers.
229After the decision to rotate the whole HMPID setup from 12 o'clock position to 2 o'clock position we have the following situation:
230
231Theta = 109.5 degrees for chambers 1,3
232Theta = 90.0 degrees for chambers 2,4,6
233Theta = 70.5 degrees for chambers 5,7
234
235Phi = 50.0 degrees for chambers 6,7
236Phi = 30.0 degrees for chambers 3,4,5
237Phi = 10.0 degrees for chambers 1,2
238
239
240Old parametrization by AliHMPIDChamber:
241HMPID chamber 1 (454.877118 , 80.207109 , -163.565361)(rho,theta,phi)=(490.0,109.5,10.0)
242HMPID chamber 2 (482.555799 , 85.087607 , 0.000000)(rho,theta,phi)=(490.0, 90.0,10.0)
243HMPID chamber 3 (400.012224 , 230.947165 , -163.565361)(rho,theta,phi)=(490.0,109.5,30.0)
244HMPID chamber 4 (424.352448 , 245.000000 , 0.000000)(rho,theta,phi)=(490.0, 90.0,30.0)
245HMPID chamber 5 (400.012224 , 230.947165 , 163.565361)(rho,theta,phi)=(490.0, 70.5,30.0)
246HMPID chamber 6 (314.965929 , 375.361777 , 0.000000)(rho,theta,phi)=(490.0, 90.0,50.0)
247HMPID chamber 7 (296.899953 , 353.831585 , 163.565361)(rho,theta,phi)=(490.0, 70.5,50.0)
248
249New parametrization by TGeoHMatrix: perfect geometry, no misalignment
250HMPID 0
251 -0.328736 -0.173648 0.928321 Tx = 454.877118
252 -0.057965 0.984808 0.163688 Ty = 80.207109
253 -0.942641 0.000000 -0.333807 Tz = -163.565361
254HMPID 1
255 0.000000 -0.173648 0.984808 Tx = 482.555799
256 0.000000 0.984808 0.173648 Ty = 85.087607
257 -1.000000 0.000000 0.000000 Tz = 0.000000
258HMPID 2
259 -0.289085 -0.500000 0.816351 Tx = 400.012224
260 -0.166903 0.866025 0.471321 Ty = 230.947165
261 -0.942641 0.000000 -0.333807 Tz = -163.565361
262HMPID 3
263 0.000000 -0.500000 0.866025 Tx = 424.352448
264 0.000000 0.866025 0.500000 Ty = 245.000000
265 -1.000000 0.000000 0.000000 Tz = 0.000000
266HMPID 4
267 0.289085 -0.500000 0.816351 Tx = 400.012224
268 0.166903 0.866025 0.471321 Ty = 230.947165
269 -0.942641 0.000000 0.333807 Tz = 163.565361
270HMPID 5
271 0.000000 -0.766044 0.642788 Tx = 314.965929
272 0.000000 0.642788 0.766044 Ty = 375.361777
273 -1.000000 0.000000 0.000000 Tz = 0.000000
274HMPID 6
275 0.214567 -0.766044 0.605918 Tx = 296.899953
276 0.255711 0.642788 0.722105 Ty = 353.831585
277 -0.942641 0.000000 0.333807 Tz = 163.565361
278
279
da08475b 280
281
282
283
284
285
286
d3da6dc4 287