delete [] fCluCoord;
}
- if(fSegmentation) delete fSegmentation;
+ if(fSegmentation) delete fSegmentation;
}
//____________________________________________________________________________
}
//_______________________________________________________________________
Int_t AliITStrackerUpgrade::LoadClusters(TTree *clusTree){
-//
-// Load clusters for tracking
-//
+ //
+ // Load clusters for tracking
+ //
TClonesArray statITSCluster("AliITSRecPoint");
TClonesArray *ITSCluster = &statITSCluster;
- TBranch* itsClusterBranch=clusTree->GetBranch("ITSRecPoints");
- if (!itsClusterBranch){
- AliError("can't get the branch with the ITS clusters ! \n");
- return 1;
- }
- itsClusterBranch->SetAddress(&ITSCluster);
- clusTree->GetEvent(0);
- Int_t nCluster = ITSCluster->GetEntriesFast();
- for(Int_t i=0; i<nCluster; i++){
- AliITSRecPoint *recp = (AliITSRecPoint*)ITSCluster->UncheckedAt(i);
- fLayers[recp->GetLayer()]->InsertCluster(new AliITSRecPoint(*recp));
- }//loop clusters
+ TBranch* itsClusterBranch=clusTree->GetBranch("ITSRecPoints");
+ if (!itsClusterBranch){
+ AliError("can't get the branch with the ITS clusters ! \n");
+ return 1;
+ }
+ itsClusterBranch->SetAddress(&ITSCluster);
+ clusTree->GetEvent(0);
+ Int_t nCluster = ITSCluster->GetEntriesFast();
+ for(Int_t i=0; i<nCluster; i++){
+ AliITSRecPoint *recp = (AliITSRecPoint*)ITSCluster->UncheckedAt(i);
+ fLayers[recp->GetLayer()]->InsertCluster(new AliITSRecPoint(*recp));
+ }//loop clusters
SetClusterTree(clusTree);
return 0;
TClonesArray &clulay = *fCluLayer[ilay];
TClonesArray &clucoo = *fCluCoord[ilay];
if (!ForceSkippingOfLayer(ilay)){
- AliDebug(2,Form("number of clusters in layer %i : %i",ilay,fLayers[ilay]->GetNumberOfClusters()));
+ AliDebug(2,Form("number of clusters in layer %i : %i",ilay,fLayers[ilay]->GetNumberOfClusters()));
for(Int_t cli=0;cli<fLayers[ilay]->GetNumberOfClusters();cli++){
AliITSRecPoint* cls = (AliITSRecPoint*)fLayers[ilay]->GetCluster(cli);
if(cls->TestBit(kSAflag)==kTRUE) continue;
Double_t yclu1 = p1->GetY();
Double_t zclu1 = p1->GetZ();
layer=p1->GetLayer();
- fSegmentation->GetRadius(layer);
+ radius = fSegmentation->GetRadius(layer);
Double_t cv=0.,tgl2=0.,phi2=0.;
Int_t cln1=mrk1;
AliITSclusterTable* arr1 = (AliITSclusterTable*)GetClusterCoord(firstLay,cln1);
// Propagate inside the innermost layer with a cluster
if(ot.Propagate(ot.GetX()-0.1*ot.GetX())) {
- Double_t rt=0.;
- rt=fSegmentation->GetRadius(5);
- if(RefitAtBase(rt,&ot,inx)){ //fit from layer 1 to layer 6
+ if(RefitAtBase(AliITSRecoParam::GetrInsideITSscreen(),&ot,inx)){ //fit from layer 1 to layer 6
AliITStrackMI otrack2(ot);
otrack2.ResetCovariance(10.);
otrack2.ResetClusters();
//fit from layer 6 to layer 1
- if(RefitAtBase(/*AliITSRecoParam::GetrInsideSPD1()*/fSegmentation->GetRadius(0),&otrack2,inx)) {//check clind
+ if(RefitAtBase(/*AliITSRecoParam::GetrInsideSPD1()*/fSegmentation->GetRadius(0)-0.3,&otrack2,inx)) {//check clind
new(arrMI[nFoundTracks]) AliITStrackMI(otrack2);
new(arrSA[nFoundTracks]) AliITStrackSA(trac);
++nFoundTracks;
AliDebug(2,"Starting...");
if(ForceSkippingOfLayer(layer)) {
- AliDebug(2,Form("Forcing skipping of layer %i. Exiting",layer));
- return 0;
+ AliDebug(2,Form("Forcing skipping of layer %i. Exiting",layer));
+ return 0;
}
Int_t nc=0;
Int_t lflag=0;
for(Int_t i=0;i<AliITSgeomTGeo::kNLayers;i++)
- if(labl[i][0]==label || labl[i][1]==label || labl[i][2]==label) lflag++;
+ if(labl[i][0]==label || labl[i][1]==label || labl[i][2]==label) lflag++;
if(lflag<track->GetNumberOfClusters()) label = -label;
return label;
}
clAcc=cl;
maxchi2=chi2;
} else {
- return kFALSE;
+ return kFALSE;
}
}
}
if ((esd->GetStatus()&AliESDtrack::kITSin)==0) continue;
if (esd->GetStatus()&AliESDtrack::kITSout) continue;
-/*
- AliITStrackMI *t=0;
- try {
+ /*
+ AliITStrackMI *t=0;
+ try {
t=new AliITStrackMI(*esd);
- } catch (const Char_t *msg) {
+ } catch (const Char_t *msg) {
//Warning("PropagateBack",msg);
delete t;
continue;
- }
-*/
+ }
+ */
AliITStrackMI *t = new AliITStrackMI(*esd);
t->SetExpQ(TMath::Max(0.8*t->GetESDtrack()->GetTPCsignal(),30.));
inx[lay]=index;
}
//
- if (RefitAtBase(43.6,&fTrackToFollow,inx)) {
+ if (RefitAtBase(fSegmentation->GetRadius(5),&fTrackToFollow,inx)) {
//fTrackToFollow.SetLabel(t->GetLabel());//
//fTrackToFollow.CookdEdx();
//CookLabel(&fTrackToFollow,0.); //For comparison only
}
//______________________________________________________________________________
Int_t AliITStrackerUpgrade::CorrectForPipeMaterial(AliITStrackMI *t, TString direction) {
-//-------------------------------------------------------------------
-// Propagate beyond beam pipe and correct for material
-// (material budget in different ways according to fUseTGeo value)
-// Add time if going outward (PropagateTo or PropagateToTGeo)
-//-------------------------------------------------------------------
-
-// Define budget mode:
-// 0: material from AliITSRecoParam (hard coded)
-// 1: material from TGeo in one step (on the fly)
-// 2: material from lut
-// 3: material from TGeo in one step (same for all hypotheses)
-Int_t mode;
-switch(fUseTGeo) {
- case 0:
- mode=0;
- break;
- case 1:
- mode=1;
- break;
- case 2:
- mode=2;
- break;
- case 3:
- if(fTrackingPhase.Contains("Clusters2Tracks"))
- { mode=3; } else { mode=1; }
- break;
- case 4:
- if(fTrackingPhase.Contains("Clusters2Tracks"))
- { mode=3; } else { mode=2; }
- break;
- default:
- mode=0;
- break;
- }
-if(fTrackingPhase.Contains("Default")) mode=0;
-Int_t index=fCurrentEsdTrack;
-
-Float_t dir = (direction.Contains("inward") ? 1. : -1.);
-Double_t rToGo=(dir>0 ? AliITSRecoParam::GetrInsidePipe() : AliITSRecoParam::GetrOutsidePipe());
-Double_t xToGo;
-if (!t->GetLocalXat(rToGo,xToGo)) return 0;
-
-Double_t xOverX0,x0,lengthTimesMeanDensity;
-
-switch(mode) {
- case 0:
- xOverX0 = AliITSRecoParam::GetdPipe();
- x0 = AliITSRecoParam::GetX0Be();
- lengthTimesMeanDensity = xOverX0*x0;
- lengthTimesMeanDensity *= dir;
- if (!t->PropagateTo(xToGo,xOverX0,lengthTimesMeanDensity/xOverX0)) return 0;
- break;
- case 1:
- if (!t->PropagateToTGeo(xToGo,20)) return 0; // "20" removes the d0 mean shift of ~20 um -> To be understood.
- break;
- case 2:
- if(fxOverX0Pipe<0) BuildMaterialLUT("Pipe");
- xOverX0 = fxOverX0Pipe;
- lengthTimesMeanDensity = fxTimesRhoPipe;
- lengthTimesMeanDensity *= dir;
- if (!t->PropagateTo(xToGo,xOverX0,lengthTimesMeanDensity/xOverX0)) return 0;
- break;
- case 3:
- if(!fxOverX0PipeTrks || index<0 || index>=fNtracks) Error("CorrectForPipeMaterial","Incorrect usage of UseTGeo option!\n");
- if(fxOverX0PipeTrks[index]<0) {
- if (!t->PropagateToTGeo(xToGo,1,xOverX0,lengthTimesMeanDensity)) return 0;
- Double_t angle=TMath::Sqrt((1.+t->GetTgl()*t->GetTgl())/
- ((1.-t->GetSnp())*(1.+t->GetSnp())));
- fxOverX0PipeTrks[index] = TMath::Abs(xOverX0)/angle;
- fxTimesRhoPipeTrks[index] = TMath::Abs(lengthTimesMeanDensity)/angle;
- return 1;
- }
- xOverX0 = fxOverX0PipeTrks[index];
- lengthTimesMeanDensity = fxTimesRhoPipeTrks[index];
- lengthTimesMeanDensity *= dir;
- if (!t->PropagateTo(xToGo,xOverX0,lengthTimesMeanDensity/xOverX0)) return 0;
- break;
- }
-
-return 1;
+ //-------------------------------------------------------------------
+ // Propagate beyond beam pipe and correct for material
+ // (material budget in different ways according to fUseTGeo value)
+ // Add time if going outward (PropagateTo or PropagateToTGeo)
+ //-------------------------------------------------------------------
+
+ // Define budget mode:
+ // 0: material from AliITSRecoParam (hard coded)
+ // 1: material from TGeo in one step (on the fly)
+ // 2: material from lut
+ // 3: material from TGeo in one step (same for all hypotheses)
+ Int_t mode;
+ switch(fUseTGeo) {
+ case 0:
+ mode=0;
+ break;
+ case 1:
+ mode=1;
+ break;
+ case 2:
+ mode=2;
+ break;
+ case 3:
+ if(fTrackingPhase.Contains("Clusters2Tracks"))
+ { mode=3; } else { mode=1; }
+ break;
+ case 4:
+ if(fTrackingPhase.Contains("Clusters2Tracks"))
+ { mode=3; } else { mode=2; }
+ break;
+ default:
+ mode=0;
+ break;
+ }
+ if(fTrackingPhase.Contains("Default")) mode=0;
+ Int_t index=fCurrentEsdTrack;
+
+ Float_t dir = (direction.Contains("inward") ? 1. : -1.);
+ Double_t rToGo=(dir>0 ? AliITSRecoParam::GetrInsidePipe() : AliITSRecoParam::GetrOutsidePipe());
+ Double_t xToGo;
+ if (!t->GetLocalXat(rToGo,xToGo)) return 0;
+
+ Double_t xOverX0,x0,lengthTimesMeanDensity;
+
+ switch(mode) {
+ case 0:
+ xOverX0 = AliITSRecoParam::GetdPipe();
+ x0 = AliITSRecoParam::GetX0Be();
+ lengthTimesMeanDensity = xOverX0*x0;
+ lengthTimesMeanDensity *= dir;
+ if (!t->PropagateTo(xToGo,xOverX0,lengthTimesMeanDensity/xOverX0)) return 0;
+ break;
+ case 1:
+ if (!t->PropagateToTGeo(xToGo,1)) return 0;
+ break;
+ case 2:
+ if(fxOverX0Pipe<0) BuildMaterialLUT("Pipe");
+ xOverX0 = fxOverX0Pipe;
+ lengthTimesMeanDensity = fxTimesRhoPipe;
+ lengthTimesMeanDensity *= dir;
+ if (!t->PropagateTo(xToGo,xOverX0,lengthTimesMeanDensity/xOverX0)) return 0;
+ break;
+ case 3:
+ if(!fxOverX0PipeTrks || index<0 || index>=fNtracks) Error("CorrectForPipeMaterial","Incorrect usage of UseTGeo option!\n");
+ if(fxOverX0PipeTrks[index]<0) {
+ if (!t->PropagateToTGeo(xToGo,1,xOverX0,lengthTimesMeanDensity)) return 0;
+ Double_t angle=TMath::Sqrt((1.+t->GetTgl()*t->GetTgl())/
+ ((1.-t->GetSnp())*(1.+t->GetSnp())));
+ fxOverX0PipeTrks[index] = TMath::Abs(xOverX0)/angle;
+ fxTimesRhoPipeTrks[index] = TMath::Abs(lengthTimesMeanDensity)/angle;
+ return 1;
+ }
+ xOverX0 = fxOverX0PipeTrks[index];
+ lengthTimesMeanDensity = fxTimesRhoPipeTrks[index];
+ lengthTimesMeanDensity *= dir;
+ if (!t->PropagateTo(xToGo,xOverX0,lengthTimesMeanDensity/xOverX0)) return 0;
+ break;
+ }
+
+ return 1;
}
//__________________________________________________________________________
Int_t AliITStrackerUpgrade::RefitInward(AliESDEvent *event) {
// fTrackToFollow.ResetCovariance(10.);
//Refitting...
//The beam pipe
- // if (CorrectForPipeMaterial(&fTrackToFollow,"inward")) {
- fTrackToFollow.UpdateESDtrack(AliESDtrack::kITSrefit);
- AliESDtrack *esdTrack =fTrackToFollow.GetESDtrack();
- Double_t r[3]={0.,0.,0.};
- Double_t maxD=3.;
- esdTrack->RelateToVertex(event->GetVertex(),GetBz(r),maxD);
- // }
+ if (CorrectForPipeMaterial(&fTrackToFollow,"inward")) {
+ fTrackToFollow.UpdateESDtrack(AliESDtrack::kITSrefit);
+ AliESDtrack *esdTrack =fTrackToFollow.GetESDtrack();
+ Double_t r[3]={0.,0.,0.};
+ Double_t maxD=3.;
+ esdTrack->RelateToVertex(event->GetVertex(),GetBz(r),maxD);
+ }
delete t;
}