]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITStrackSA.cxx
PMD new raw data writer
[u/mrichter/AliRoot.git] / ITS / AliITStrackSA.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2003, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 ////////////////////////////////////////////////////
19 //  Stand alone track class                       //
20 //  Origin:  Elisabetta Crescio                   //
21 //  e-mail:  crescio@to.infn.it                   //
22 //  it is a V2 track with a possible number       //
23 //  of cluster equal to fgkMaxNumberOfClusters    //
24 ////////////////////////////////////////////////////
25
26 #include "AliITSgeom.h"
27 #include "AliITStrackSA.h"
28
29
30 ClassImp(AliITStrackSA)
31
32 //_____________________________________
33 AliITStrackSA:: AliITStrackSA() : AliITStrackMI(){
34 // Default constructor  
35   SetNumberOfClusters(0);
36   SetNumberOfClustersSA(0);
37   ResetIndexSA();
38   for(Int_t nlay=0;nlay<fgkLayers;nlay++){ 
39     SetNumberOfMarked(nlay,0);
40   }
41   ResetMarked();
42 }
43
44
45 //___________________________________________________
46 AliITStrackSA::AliITStrackSA(const AliITStrackMI& t) : 
47 AliITStrackMI(t){
48 // Copy a V2 track into a SA track
49   SetNumberOfClustersSA(0);
50   ResetIndexSA();
51   for(Int_t nlay=0;nlay<fgkLayers;nlay++){ 
52     SetNumberOfMarked(nlay,0);
53   }
54   ResetMarked();
55
56 }
57 //___________________________________________________
58 AliITStrackSA::AliITStrackSA(const AliITStrackSA& t) : 
59 AliITStrackMI(t){
60 // Copy constructor
61
62
63   ResetIndexSA();
64   ResetMarked();
65   Int_t number = t.GetNumberOfClustersSA();
66   SetNumberOfClustersSA(number);
67   for(Int_t nlay=0;nlay<fgkLayers;nlay++){
68     SetNumberOfMarked(nlay,t.GetNumberOfMarked(nlay));
69   }
70   for(Int_t i=0;i<number;i++){
71     fSain[i]=t.fSain[i];
72   }
73   for(Int_t nlay=0;nlay<fgkLayers;nlay++){
74     for(Int_t i=0;i<t.GetNumberOfMarked(nlay);i++){
75       fCluMark[nlay][i]=t.fCluMark[nlay][i];
76     }
77   }
78 }
79 //____________________________________________________
80 AliITStrackSA::AliITStrackSA(AliITSgeom* geom,Int_t layer, Int_t ladder, Int_t detector, Double_t Ycoor, Double_t Zcoor, Double_t phi, Double_t tanlambda, Double_t curv, Int_t lab ) {
81   // standard constructor. Used for ITS standalone tracking
82
83   if(!geom){
84     Fatal("AliITStrackSA","ITS geometry not found - Abort\n");
85     return;
86   }
87   // get the azimuthal angle of the detector containing the innermost
88   // cluster of this track (data member fAlpha)
89   Float_t rotmatr[9];
90   geom->GetRotMatrix(layer,ladder,detector,rotmatr);
91   fAlpha=TMath::ATan2(rotmatr[1],rotmatr[0])+TMath::Pi();
92   fAlpha+=TMath::Pi()/2.;
93   if(layer==1) fAlpha+=TMath::Pi();
94
95
96   // get the radius of this detector. Procedure taken from the 
97   // AliITStrackerV2 constructor
98   Float_t x=0,y=0,z=0;
99   geom->GetTrans(layer,ladder,detector,x,y,z);
100
101   Double_t fi=TMath::ATan2(rotmatr[1],rotmatr[0])+TMath::Pi();
102   fi+=TMath::Pi()/2;
103   if (layer==1) fi+=TMath::Pi();
104   Double_t cp=TMath::Cos(fi), sp=TMath::Sin(fi);
105   fX=x*cp+y*sp;
106
107
108   fdEdx = 0;
109
110   fC00 = 0.000009; // 0.000009
111   fC10 = 0.;
112   fC11 = 0.000003; //0.000030
113   fC20 = 0.;
114   fC21 = 0.;
115   fC22 = 0.000001; //0.000001
116   fC30 = 0.;
117   fC31 = 0.;
118   fC32 = 0.;
119   fC33 = 0.000002; //0.000002
120   fC40 = 0.;
121   fC41 = 0.;
122   fC42 = 0.;
123   fC43 = 0.;
124   fC44 = 0.000001; //0.0000001
125
126   fP0 = Ycoor;
127   fP1 = Zcoor;
128   
129   fP2 = TMath::Sin(phi-fAlpha);
130   fP3 = tanlambda;
131   fP4 = curv;
132   for(Int_t i=0; i<kMaxLayer; i++) fIndex[i] = 0;  // to be set explicitely
133
134   for(Int_t i=0; i<4; i++) fdEdxSample[i] = 0; 
135
136   SetNumberOfClusters(0);
137   SetNumberOfClustersSA(0);
138   for(Int_t nlay=0;nlay<fgkLayers;nlay++) SetNumberOfMarked(nlay,0);
139   ResetIndexSA();
140   ResetMarked();
141   SetChi2(0);
142   SetMass(0.139);    // pion mass
143   SetLabel(lab); 
144   
145
146 }
147
148 //____________________________________________________________
149 void AliITStrackSA::AddClusterSA(Int_t layer, Int_t clnumb) {
150   // add one clusters to the list (maximum number=fgkMaxNumberOfClusters)
151   Int_t presnum = GetNumberOfClustersSA();
152   if(presnum>=fgkMaxNumberOfClusters){
153     Warning("AddClusterSA","Maximum number of clusters already reached. Nothing is done\n");
154     return;
155   }
156
157   fSain[presnum] = (layer<<28)+clnumb;  
158   presnum++;
159   SetNumberOfClustersSA(presnum);
160 }
161
162 //____________________________________________________________
163 void AliITStrackSA::AddClusterMark(Int_t layer, Int_t clnumb) {
164   // add one clusters to the list (maximum number=fgkMaxNumberOfClusters)
165   Int_t presnum = GetNumberOfMarked(layer);
166   //  printf("presnum=%d\n",presnum);
167   if(presnum>=fgkMaxNumberOfClustersL){
168     Warning("AddClusterMark","Maximum number of clusters already reached. Nothing is done\n");
169     return;
170   }
171
172   fCluMark[layer][presnum] = clnumb;  
173   presnum++;
174   SetNumberOfMarked(layer,presnum);
175 }
176
177 //____________________________________________________________
178 void AliITStrackSA::AddClusterV2(Int_t layer,Int_t clnumb) {
179   // add one clusters to the list (maximum number=6)
180   Int_t presnum = GetNumberOfClusters();
181   if(presnum>=kMaxLayer){
182     Warning("AddClusterV2","Maximum number of clusters already reached. Nothing is done\n");
183     return;
184    }    
185
186   fIndex[presnum] = (layer<<28)+clnumb;  
187   presnum++;
188   SetNumberOfClusters(presnum);
189 }
190
191 //_____________________________________________________________
192 void AliITStrackSA::ResetMarked(){
193
194   //Reset array of marked clusters
195   for(Int_t nlay=0;nlay<fgkLayers;nlay++){
196     for(Int_t k=0; k<fgkMaxNumberOfClustersL; k++) fCluMark[nlay][k]=0;
197   }
198 }
199
200
201
202
203
204
205
206
207
208
209
210
211
212