3 // Author: Uli Frankenfeld <mailto:franken@fi.uib.no>
4 //*-- Copyright © ALICE HLT Group
6 #include "AliL3StandardIncludes.h"
8 #include "AliL3Logging.h"
9 #include "AliL3VertexArray.h"
12 /** \class AliL3VertexArray
14 //_____________________________________________________________
17 // The L3 Fast Vertex Finder Base Class
21 //for(Int_t sec=0;sec<NSEC;sec++){
23 // FillSectorSeed3D(x,y,z);
24 // FillSector3D(x,y,z);
25 // FindSectorVertex();
26 // Double_t z = GetZSector();
27 // Double_t zerr = GetZSectorErr();
28 // // do somethink with z, zerr
33 ClassImp(AliL3VertexArray)
34 void AliL3VertexArray::AnalyzeSector(Float_t *vertex, Int_t *array, Int_t len)
36 //loop over all seeds and all vertex position
37 LOG(AliL3Log::kInformational,"AliL3VertexArray::AnalyzeSector","Analyze")
38 <<AliL3Log::kDec<<"Number of Seeds: "<<fNSeed<<ENDLOG;
39 for(Int_t i =0;i<fNSeed;i++)
40 for(Int_t bin = 0;bin<len;bin++)
41 array[bin] += Trace(fZSeed[i],fRSeed[i],fSecSeed[i],vertex[bin]);
44 void AliL3VertexArray::FindSectorVertex(Double_t pos, Double_t range, Int_t nbin)
46 //define position and range for search and
48 //and find position of vertex and error
49 const Int_t klen = nbin;
50 const Double_t kwidth = range;
51 const Double_t kxmin = pos - kwidth/2;
52 const Double_t kstep = kwidth/klen;
53 const Double_t kstart = kxmin + kstep/2.;
54 Int_t * array = new Int_t[klen];
55 Float_t * ver = new Float_t[klen];
56 for(Int_t i=0;i<klen;i++){
57 ver[i] = kstart + kstep * i;
60 AnalyzeSector(ver,array,klen);
61 FindMean(ver,array,klen);
66 void AliL3VertexArray::FindMean(Float_t *vertex,Int_t *array, Int_t len)
68 //find mean and error of array and store it in
69 //fZSector and fZSectorErr
70 const Int_t knbin = len;
73 for(Int_t i = 0;i<knbin;i++){
84 if(xmin<0) {ops++;break;}
85 if(array[xmin]<hmax) {
91 if(xmax>=knbin) {ops++;break;}
97 if(xbin >= knbin/2){xmin = 2 * xbin - knbin +1;xmax = knbin-1;}
98 else{xmin = 0;xmax = 2 * xbin;}
104 for(Int_t bin = xmin;bin<=xmax;bin++){
106 sumw2 += array[bin] * array[bin];
107 sumwx += array[bin] * vertex[bin];
108 sumwx2 += array[bin] * vertex[bin] * vertex[bin];
111 Double_t mean = sumwx/sumw;
112 Double_t rms2 = fabs(sumwx2/sumw - mean*mean);
113 fZSectorErr = sqrt(rms2/sumw);
116 else{fZSectorErr = fZSector = 0;}
117 sumw=sumw2=sumwx=sumwx2=0;
118 for(Int_t bin = 0;bin<knbin;bin++){
120 sumw2 += array[bin] * array[bin];
121 sumwx += array[bin] * vertex[bin];
122 sumwx2 += array[bin] * vertex[bin] * vertex[bin];
125 Double_t mean = fZSector;
126 Double_t rms2 = fabs(sumwx2/sumw - mean*mean);
127 fZSectorErr = sqrt(rms2/sumw);