23 #include "AliObjectArray.h" 24 #include "AliTPCTrackHits.h" 25 #include "AliArrayBranch.h" 32 void
CompareHits(TClonesArray * arr, AliTPCTrackHits * myhits, Bool_t
debug, TClonesArray *arrd=0);
33 AliTPCTrackHits *
MakeTrack(TClonesArray * arr, TClonesArray * arrp, AliTPCTrackHits *myhits);
41 TFile
f(
"galice.root",
"update");
42 TClonesArray *arr =
new TClonesArray(
"AliTPChit",100);
43 TTree * treeCl =(TTree*)f.Get(
"TreeH0");
44 TBranch *branch = treeCl->GetBranch(
"TPC");
45 AliTPCTrackHits * myhits =
new AliTPCTrackHits;
46 branch->SetAddress(&arr);
48 TTree *
treeP = (TTree*)f.Get(
"TreeK0");
49 TBranch *branchP = treeP->GetBranch(
"Particles");
50 TClonesArray *arrp =
new TClonesArray(
"TParticle",100);
51 branchP->SetAddress(&arrp);
54 TFile f2(
"treeh.root",
"recreate");
55 f2.SetCompressionLevel(10);
56 TTree * treeh2 =
new TTree(
"TreeTPCH",
"TreeTPCH");
58 treeh2->GetListOfBranches()->Add(
new AliObjectBranch(
"TPC",
"AliTPCTrackHits",
59 &myhits,treeh2,4096,1));
61 TFile f3(
"treehcl.root",
"recreate");
62 f3.SetCompressionLevel(2);
63 TTree * treeh3 =
new TTree(
"TreeTPCH",
"TreeTPCH");
64 treeh3->Branch(
"TPC", &arr,64000,100);
67 Int_t trsize = (Int_t)treeCl->GetEntries();
68 for (Int_t i=0;i<300;i++){
70 Int_t size = branch->GetEvent(i);
72 if ((size>0)&& arr->GetEntriesFast()>0) {
81 if ((i%10)==0) cout<<i<<
"\n";
101 TFile f2(
"treeh.root");
102 TTree * treeh2 = (TTree*)f2.Get(
"TreeTPCH");
103 AliTPCTrackHits * myhits =
new AliTPCTrackHits ;
104 AliObjectBranch *mybranch = (AliObjectBranch*)treeh2->GetBranch(
"TPC");
105 mybranch->SetAddress(&myhits);
108 TClonesArray *arr =
new TClonesArray(
"AliTPChit",100);
109 TFile f3(
"treehcl.root");
110 TTree * treeh3 = (TTree*)f3.Get(
"TreeTPCH");
111 TBranch *branch = treeh3->GetBranch(
"TPC");
112 branch->SetAddress(&arr);
116 Int_t trsize = (Int_t)treeh3->GetEntries();
117 for (Int_t i=0;i<300;i++){
118 Int_t size = branch->GetEvent(i);
119 mybranch->GetEvent(i);
121 if ((arr->GetEntriesFast()>0) && size>0) {
123 if ((i%10)==0) cout<<i<<
"\n";
135 TFile f2(
"galice.root");
136 TTree * treeh2 = (TTree*)f2.Get(
"TreeH0");
137 AliTPCTrackHits * myhits =
new AliTPCTrackHits ;
138 AliObjectBranch *mybranch = (AliObjectBranch*)treeh2->GetBranch(
"TPC2");
139 mybranch->SetAddress(&myhits);
142 TClonesArray *arr =
new TClonesArray(
"AliTPChit",100);
145 TBranch *branch = treeh2->GetBranch(
"TPC");
146 branch->SetAddress(&arr);
148 TFile f3(
"treehdelta.root",
"recreate");
149 f3.SetCompressionLevel(2);
150 TTree * treeh3 =
new TTree(
"DelataH",
"DeltaH");
151 TClonesArray *arrd =
new TClonesArray(
"AliTPChitD",100);
152 treeh3->Branch(
"TPC", &arrd,64000,100);
156 Int_t trsize = treeh2->GetEntries();
157 for (Int_t i=0;i<trsize;i++){
158 Int_t size = branch->GetEvent(i);
159 mybranch->GetEvent(i);
161 if ((arr->GetEntriesFast()>0) && size>0) {
164 if ((i%10)==0) cout<<i<<
"\n";
176 AliTPCTrackHits *
MakeTrack(TClonesArray * arr, TClonesArray * arrp, AliTPCTrackHits *myhits)
182 myhits->SetHitPrecision(0.002);
183 myhits->SetStepPrecision(0.003);
184 myhits->SetMaxDistance(100);
185 myhits->FlushHitStack(kTRUE);
186 for (Int_t i=0;i<arr->GetEntriesFast();i++){
187 hit = (AliTPChit*)arr->At(i);
189 TParticle *
p = (TParticle*)arrp->At(hit->GetTrack());
190 Float_t momentum = TMath::Sqrt(p->Px()*p->Px()+p->Py()*p->Py());
191 Float_t ran= 100.*gRandom->Rndm();
192 if (ran<1.) myhits->FlushHitStack(kTRUE);
194 myhits->SetHitPrecision(0.05);
195 myhits->AddHitKartez(hit->fSector,hit->GetTrack(), hit->X(), hit->Y(),
196 hit->Z(), hit->fQ+1000);
199 myhits->SetHitPrecision(0.002);
200 myhits->AddHitKartez(hit->fSector,hit->GetTrack(), hit->X(), hit->Y(),
205 myhits->FlushHitStack();
211 void CompareHits(TClonesArray * arr, AliTPCTrackHits * myhits, Bool_t
debug, TClonesArray *arrd)
216 AliTPChit * hit, *hit2;
217 if (arrd) arrd->Clear();
219 for (Int_t i=0;i<arr->GetEntriesFast();i++){
220 hit = (AliTPChit*)arr->At(i);
222 if (i==0) myhits->First();
224 hit2 = myhits->GetHit();
227 if (hit) cout<<
"Error _ hits "<<i<<
"didn't find\n";
233 AliTrackHitsParam *param= myhits->GetParam();
234 AliHitInfo *
info = myhits->GetHitInfo();
237 TClonesArray &larrd = *arrd;
242 h->SetTrack(hit->GetTrack());
244 h->fSector = hit->fSector;
246 hitd->SetX(hit->X()-hit2->X());
247 hitd->SetY(hit->Y()-hit2->Y());
248 hitd->SetZ(hit->Z()-hit2->Z());
249 hitd->SetTrack(hit->GetTrack()-hit2->GetTrack());
250 hitd->fQ = hit->fQ-hit2->fQ;
251 hitd->fSector = hit->fSector-hit2->fSector;
257 (hit->X()-hit2->X())*(hit->X()-hit2->X())+
258 (hit->Y()-hit2->Y())*(hit->Y()-hit2->Y())+
259 (hit->Z()-hit2->Z())*(hit->Z()-hit2->Z()));
260 printf(
"C1\t%d\t%d\t%d\t%d\t",
261 hit->fSector,hit2->fSector,hit->GetTrack(),hit2->GetTrack());
262 printf(
"%3.6f\t%3.6f\t%3.6f\t%3.6f\t%3.6f\t%3.6f\t",
263 hit->X(),hit2->X(), hit->Y(),hit2->Y(),hit->Z(),hit2->Z());
264 printf(
"%3.6f\t%3.6f\t%3.6f\t%3.6f\t%3.6f\t%3.6f\t%3.6f\t",
265 dd, param->fR,param->fZ,param->fFi,param->fAn,
266 param->fAd,param->fTheta);
268 (Int_t)info->fHitDistance, (Int_t)hit->fQ, (Int_t)hit2->fQ);
307 void Fit2(Double_t fSumY, Double_t fSumYX, Double_t fSumYX2,
308 Double_t fSumX, Double_t fSumX2, Double_t fSumX3,
309 Double_t fSumX4, Int_t n,
310 Double_t &a, Double_t &
b, Double_t &c)
315 n* (fSumX2*fSumX4-fSumX3*fSumX3) -
316 fSumX* (fSumX*fSumX4-fSumX3*fSumX2)+
317 fSumX2* (fSumX*fSumX3-fSumX2*fSumX2);
319 if (TMath::Abs(det)>0){
321 (fSumY * (fSumX2*fSumX4-fSumX3*fSumX3)-
322 fSumX *(fSumYX*fSumX4-fSumYX2*fSumX3)+
323 fSumX2*(fSumYX*fSumX3-fSumYX2*fSumX2))/det;
325 (n*(fSumYX*fSumX4-fSumX3*fSumYX2)-
326 fSumY*(fSumX*fSumX4-fSumX3*fSumX2)+
327 fSumX2*(fSumX*fSumYX2-fSumYX*fSumX2))/det;
329 (n*(fSumX2*fSumYX2-fSumYX*fSumX3)-
330 fSumX*(fSumX*fSumYX2-fSumYX*fSumX2)+
331 fSumY*(fSumX*fSumX3-fSumX2*fSumX2))/det;
332 cout<<a<<
"\t"<<b<<
"\t"<<c<<
"\n";
336 void TestFit(Float_t a, Float_t
b, Float_t c, Int_t n)
338 Double_t fSumY,fSumYX,fSumYX2,fSumX, fSumX2,fSumX3, fSumX4;
339 fSumY = fSumYX = fSumYX2 = fSumX = fSumX2 = fSumX3 = fSumX4 =0;
341 for (Int_t i=0;i<n; i++){
342 Float_t x = gRandom->Rndm();
343 Float_t y = a+b*x+c*x*x;
352 Fit2(fSumY,fSumYX,fSumYX2, fSumX,fSumX2,fSumX3,fSumX4,n,a2,b2,c2);
printf("Chi2/npoints = %f\n", TMath::Sqrt(chi2/npoints))
void CompareHits(TClonesArray *arr, AliTPCTrackHits *myhits, Bool_t debug, TClonesArray *arrd=0)
void TestFit(Float_t a, Float_t b, Float_t c, Int_t n)
Macro to compare TClonesArray hits with interpolated hits.
void CompareHitsG(const char *benchmark, Bool_t debug)
void Fit2(Double_t fSumY, Double_t fSumYX, Double_t fSumYX2, Double_t fSumX, Double_t fSumX2, Double_t fSumX3, Double_t fSumX4, Int_t n, Double_t &a, Double_t &b, Double_t &c)
void ConvertHits(const char *benchmark, Bool_t debug)
AliTPCTrackHits * MakeTrack(TClonesArray *arr, TClonesArray *arrp, AliTPCTrackHits *myhits)