]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ITS/AliITSVertexer.cxx
classes for alignment from Tomek
[u/mrichter/AliRoot.git] / ITS / AliITSVertexer.cxx
... / ...
CommitLineData
1#include <AliESDVertex.h>
2#include "AliITSgeomTGeo.h"
3#include "AliITSVertexer.h"
4#include "AliRunLoader.h"
5#include "AliITSLoader.h"
6#include "AliMultiplicity.h"
7#include "AliITSMultReconstructor.h"
8
9const Float_t AliITSVertexer::fgkPipeRadius = 3.0;
10
11ClassImp(AliITSVertexer)
12
13//////////////////////////////////////////////////////////////////////
14// Base class for primary vertex reconstruction //
15// AliESDVertexer is a class for full 3D primary vertex finding //
16// derived classes: AliITSVertexerIons AliITSvertexer3D //
17// AliITSVertexerCosmics //
18//////////////////////////////////////////////////////////////////////
19
20//______________________________________________________________________
21AliITSVertexer::AliITSVertexer():AliVertexer(),
22fLadders(),
23fLadOnLay2(0) {
24 // Default Constructor
25 SetLaddersOnLayer2();
26}
27
28AliITSVertexer::AliITSVertexer(TString filename):AliVertexer(),
29fLadders(),
30fLadOnLay2(0)
31{
32 // Standard constructor
33 AliRunLoader *rl = AliRunLoader::GetRunLoader();
34 if(!rl){
35 Fatal("AliITSVertexer","Run Loader not found");
36 }
37 /*
38 if(rl->LoadgAlice()){
39 Fatal("AliITSVertexer","The AliRun object is not available - nothing done");
40 }
41 */
42 fCurrentVertex = 0;
43 SetFirstEvent(0);
44 SetLastEvent(0);
45 // rl->LoadHeader();
46 AliITSLoader* itsLoader = (AliITSLoader*) rl->GetLoader("ITSLoader");
47 if(!filename.Contains("default"))itsLoader->SetVerticesFileName(filename);
48 if(!filename.Contains("null"))itsLoader->LoadVertices("recreate");
49 itsLoader->LoadRecPoints();
50 // Int_t lst;
51 SetLastEvent(rl->GetNumberOfEvents()-1);
52 /*
53 if(rl->TreeE()){
54 lst = static_cast<Int_t>(rl->TreeE()->GetEntries());
55 SetLastEvent(lst-1);
56 }
57 */
58 SetLaddersOnLayer2();
59}
60
61//______________________________________________________________________
62AliITSVertexer::AliITSVertexer(const AliITSVertexer &vtxr) : AliVertexer(vtxr) {
63 // Copy constructor
64 // Copies are not allowed. The method is protected to avoid misuse.
65 Error("AliITSVertexer","Copy constructor not allowed\n");
66}
67
68//______________________________________________________________________
69AliITSVertexer& AliITSVertexer::operator=(const AliITSVertexer& /* vtxr */){
70 // Assignment operator
71 // Assignment is not allowed. The method is protected to avoid misuse.
72 Error("= operator","Assignment operator not allowed\n");
73 return *this;
74}
75
76//______________________________________________________________________
77AliITSVertexer::~AliITSVertexer() {
78 // Destructor
79 if(fLadders) delete [] fLadders;
80}
81
82//______________________________________________________________________
83void AliITSVertexer::FindMultiplicity(Int_t evnumber){
84 // Invokes AliITSMultReconstructor to determine the
85 // charged multiplicity in the pixel layers
86 if(fMult){delete fMult; fMult = 0;}
87 Bool_t success=kTRUE;
88 if(!fCurrentVertex)success=kFALSE;
89 if(fCurrentVertex && fCurrentVertex->GetNContributors()<1)success=kFALSE;
90 if(!success){
91 AliWarning("Tracklets multiplicity not determined because the primary vertex was not found");
92 return;
93 }
94 AliITSMultReconstructor* multReco = new AliITSMultReconstructor();
95 AliRunLoader *rl =AliRunLoader::GetRunLoader();
96 AliITSLoader* itsLoader = (AliITSLoader*)rl->GetLoader("ITSLoader");
97 multReco->SetGeometry(itsLoader->GetITSgeom());
98 itsLoader->LoadRecPoints();
99 rl->GetEvent(evnumber);
100 TTree* itsClusterTree = itsLoader->TreeR();
101 if (!itsClusterTree) {
102 AliError(" Can't get the ITS cluster tree !\n");
103 return;
104 }
105 Double_t vtx[3];
106 fCurrentVertex->GetXYZ(vtx);
107 Float_t vtxf[3];
108 for(Int_t i=0;i<3;i++)vtxf[i]=vtx[i];
109 multReco->SetHistOn(kFALSE);
110 multReco->Reconstruct(itsClusterTree,vtxf,vtxf);
111 Int_t notracks=multReco->GetNTracklets();
112 Float_t *tht = new Float_t [notracks];
113 Float_t *phi = new Float_t [notracks];
114 Float_t *dphi = new Float_t [notracks];
115 Int_t *labels = new Int_t[notracks];
116 for(Int_t i=0;i<multReco->GetNTracklets();i++){
117 tht[i] = multReco->GetTracklet(i)[0];
118 phi[i] = multReco->GetTracklet(i)[1];
119 dphi[i] = multReco->GetTracklet(i)[2];
120 labels[i] = static_cast<Int_t>(multReco->GetTracklet(i)[3]);
121 }
122 Int_t nosingleclus=multReco->GetNSingleClusters();
123 Float_t *ths = new Float_t [nosingleclus];
124 Float_t *phs = new Float_t [nosingleclus];
125 for(Int_t i=0;i<nosingleclus;i++){
126 ths[i] = multReco->GetCluster(i)[0];
127 phs[i] = multReco->GetCluster(i)[1];
128 }
129 fMult = new AliMultiplicity(notracks,tht,phi,dphi,labels,nosingleclus,ths,phs);
130 delete [] tht;
131 delete [] phi;
132 delete [] dphi;
133 delete [] ths;
134 delete [] phs;
135 delete [] labels;
136 itsLoader->UnloadRecPoints();
137 delete multReco;
138 return;
139}
140
141//______________________________________________________________________
142void AliITSVertexer::SetLaddersOnLayer2(Int_t ladwid){
143 // Calculates the array of ladders on layer 2 to be used with a
144 // given ladder on layer 1
145 fLadOnLay2=ladwid;
146 // AliRunLoader *rl =AliRunLoader::GetRunLoader();
147 // AliITSLoader* itsLoader = (AliITSLoader*)rl->GetLoader("ITSLoader");
148 // AliITSgeom* geom = itsLoader->GetITSgeom();
149 Int_t ladtot1=AliITSgeomTGeo::GetNLadders(1);
150 if(fLadders) delete [] fLadders;
151 fLadders=new UShort_t[ladtot1];
152
153
154 Double_t pos1[3],pos2[3];
155 Int_t mod1=AliITSgeomTGeo::GetModuleIndex(2,1,1);
156 AliITSgeomTGeo::GetTranslation(mod1,pos1); // position of the module in the MRS
157 Double_t phi0=TMath::ATan2(pos1[1],pos1[0]);
158 if(phi0<0) phi0+=2*TMath::Pi();
159 Int_t mod2=AliITSgeomTGeo::GetModuleIndex(2,2,1);
160 AliITSgeomTGeo::GetTranslation(mod2,pos2);
161 Double_t phi2=TMath::ATan2(pos2[1],pos2[0]);
162 if(phi2<0) phi2+=2*TMath::Pi();
163 Double_t deltaPhi= phi0-phi2; // phi width of a layer2 module
164
165 for(Int_t i= 0; i<ladtot1;i++){
166 Int_t modlad= AliITSgeomTGeo::GetModuleIndex(1,i+1,1);
167 Double_t posmod[3];
168 AliITSgeomTGeo::GetTranslation(modlad,posmod);
169 Double_t phimod=TMath::ATan2(posmod[1],posmod[0]);
170 if(phimod<0) phimod+=2*TMath::Pi();
171 Double_t phi1= phimod+deltaPhi*double(fLadOnLay2);
172 if(phi1<0) phi1+=2*TMath::Pi();
173 if(phi1>2*TMath::Pi()) phi1-=2*TMath::Pi();
174 Double_t philad1=phi0-phi1;
175 UShort_t lad1;
176 Double_t ladder1=(philad1)/(deltaPhi) +1.;
177 if(ladder1<1){ladder1=40+ladder1;}
178 lad1=int(ladder1+0.5);
179 fLadders[i]=lad1;
180 }
181}
182
183
184//______________________________________________________________________
185void AliITSVertexer::WriteCurrentVertex(){
186 // Write the current AliVertex object to file fOutFile
187 AliRunLoader *rl = AliRunLoader::GetRunLoader();
188 AliITSLoader* itsLoader = (AliITSLoader*) rl->GetLoader("ITSLoader");
189 fCurrentVertex->SetName("Vertex");
190 // const char * name = fCurrentVertex->GetName();
191 // itsLoader->SetVerticesContName(name);
192 Int_t rc = itsLoader->PostVertex(fCurrentVertex);
193 rc = itsLoader->WriteVertices();
194}
195