1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 laser track clasification;
18 TCut cutT("cutT","abs(Tr.fP[3])<0.06");
19 TCut cutPt("cutPt","abs(Tr.fP[4])<0.1");
20 TCut cutN("cutN","fTPCncls>100");
22 TCut cutA = cutT+cutPt+cutN;
24 TCut cutFi("cutZB","");
25 TCut cutFi("cutFi","abs((180*atan2(x1,x0)/pi-20)%40)<5");
26 TChain * chain = tool.MakeChain("chain.txt","Track",0,1000000)
31 #include "TLinearFitter.h"
32 #include "AliTPCcalibLaser.h"
33 #include "AliExternalTrackParam.h"
34 #include "AliESDEvent.h"
35 #include "AliESDfriend.h"
36 #include "AliESDtrack.h"
37 #include "AliTPCTracklet.h"
40 #include "TTreeStream.h"
43 #include "TGraphErrors.h"
44 #include "AliTPCclusterMI.h"
45 #include "AliTPCseed.h"
46 #include "AliTracker.h"
47 #include "TClonesArray.h"
50 #include "TTreeStream.h"
53 #include "AliTPCLaserTrack.h"
57 ClassImp(AliTPCcalibLaser)
59 AliTPCcalibLaser::AliTPCcalibLaser():
65 fTracksEsdParam(1000),
72 fTracksEsdParam.SetOwner(kTRUE);
75 AliTPCcalibLaser::AliTPCcalibLaser(const Text_t *name, const Text_t *title):
81 fTracksEsdParam(1000),
90 fTracksEsdParam.SetOwner(kTRUE);
93 AliTPCcalibLaser::~AliTPCcalibLaser() {
101 void AliTPCcalibLaser::Process(AliESDEvent * event) {
104 // Loop over tracks and call Process function
110 fESDfriend=static_cast<AliESDfriend*>(fESD->FindListObject("AliESDfriend"));
116 fTracksEsdParam.Delete();
118 Int_t n=fESD->GetNumberOfTracks();
119 Int_t run = fESD->GetRunNumber();
121 for (Int_t i=0;i<n;++i) {
122 AliESDfriendTrack *friendTrack=fESDfriend->GetTrack(i);
123 AliESDtrack *track=fESD->GetTrack(i);
124 TObject *calibObject=0;
126 for (Int_t j=0;(calibObject=friendTrack->GetCalibObject(j));++j)
127 if ((seed=dynamic_cast<AliTPCseed*>(calibObject)))
129 if (track&&seed) FindMirror(track,seed);
136 for (Int_t id=0; id<1000; id++){
139 if (!fTracksEsdParam.At(id)) continue;
145 Int_t AliTPCcalibLaser::FindMirror(AliESDtrack *track, AliTPCseed *seed){
147 // Find corresponding mirror
148 // add the corresponding tracks
150 Float_t kRadius0 = 252;
151 Float_t kRadius = 254.25;
152 if (!track->GetOuterParam()) return -1;
153 AliExternalTrackParam param(*(track->GetOuterParam()));
154 AliTracker::PropagateTrackTo(¶m,kRadius0,0.10566,3,kTRUE);
155 AliTracker::PropagateTrackTo(¶m,kRadius,0.10566,0.1,kTRUE);
156 AliTPCLaserTrack ltr;
157 AliTPCLaserTrack *ltrp=0x0;
159 Int_t id = AliTPCLaserTrack::IdentifyTrack(¶m);
160 if (id!=-1 && (AliTPCLaserTrack::GetTracks()->UncheckedAt(id)))
161 ltrp=(AliTPCLaserTrack*)AliTPCLaserTrack::GetTracks()->UncheckedAt(id);
166 if (!fTracksMirror.At(id)) fTracksMirror.AddAt(ltrp,id);
167 fTracksEsdParam.AddAt(param.Clone(),id);
168 fTracksEsd.AddAt(track,id);
169 fTracksTPC.AddAt(seed,id);
176 void AliTPCcalibLaser::DumpLaser(Int_t id) {
178 // Dump Laser info to the tree
180 AliESDtrack *track = (AliESDtrack*)fTracksEsd.At(id);
181 AliExternalTrackParam *param=(AliExternalTrackParam*)fTracksEsdParam.At(id);
182 AliTPCLaserTrack *ltrp = ( AliTPCLaserTrack*)fTracksMirror.At(id);
189 param->GetPxPyPz(pxyz);
191 TTreeSRedirector *cstream = GetDebugStreamer();
193 (*cstream)<<"Track"<<
212 void AliTPCcalibLaser::RefitLaser(Int_t id){
214 // Refit the track store residuals
217 AliTPCseed *track = (AliTPCseed*)fTracksTPC.At(id);
218 AliExternalTrackParam *param=(AliExternalTrackParam*)fTracksEsdParam.At(id);
219 AliTPCLaserTrack *ltrp = (AliTPCLaserTrack*)fTracksMirror.At(id);
222 static TLinearFitter fy2(3,"hyp2");
223 static TLinearFitter fz2(3,"hyp2");
224 static TLinearFitter fy1(2,"hyp1");
225 static TLinearFitter fz1(2,"hyp1");
226 static TVectorD vecy2,vecz2,vecy1,vecz1;
228 const Int_t kMinClusters=20;
231 for (Int_t i=0;i<72;++i) nclusters[i]=0;
233 for (Int_t i=0;i<160;++i) {
234 AliTPCclusterMI *c=track->GetClusterPointer(i);
235 if (c) nclusters[c->GetDetector()]++;
238 for (Int_t isec=0; isec<72;isec++){
239 if (nclusters[isec]<kMinClusters) continue;
245 for (Int_t irow=0;irow<160;++irow) {
246 AliTPCclusterMI *c=track->GetClusterPointer(irow);
247 //if (c && RejectCluster(c)) continue;
248 if (c&&c->GetDetector()==isec) {
249 Double_t xd = c->GetX()-120;;
250 Double_t x[2]={xd,xd*xd};
251 fy2.AddPoint(x,c->GetY());
252 fz2.AddPoint(x,c->GetZ());
254 fy1.AddPoint(x,c->GetY());
255 fz1.AddPoint(x,c->GetZ());
262 fy1.GetParameters(vecy1);
263 fy2.GetParameters(vecy2);
264 fz1.GetParameters(vecz1);
265 fz2.GetParameters(vecz2);
268 TTreeSRedirector *cstream = GetDebugStreamer();
270 Float_t dedx = track->GetdEdx();
271 (*cstream)<<"Tracklet"<<
275 "ncl="<<nclusters[isec]<<
289 // for (Int_t irow=0;irow<160;++irow) {
290 // AliTPCclusterMI *c=track->GetClusterPointer(irow);
291 // if (c && RejectCluster(c)) continue;
292 // if (c&&c->GetDetector()==isec) {
293 // Double_t x[2]={c->GetX(),c->GetX()*c->GetX()};
294 // fy2.AddPoint(&x,c->GetY());
295 // fz2.AddPoint(&x,c->GetZ());
297 // fy1.AddPoint(&x,c->GetY());
298 // fz1.AddPoint(&x,c->GetZ());
305 void AliTPCcalibLaser::Analyze(){