//Default constructor
Int_t i;
for(i=0;i<4;i++) fSPDdetzcentre[i]=0.;
- for(i=0;i<2;i++) {fxOverX0Shield[i]=-1.;fxTimesRhoShield[i]=-1.;}
+ for(i=0;i<2;i++) {
+ fxOverX0Shield[i]=-1.;
+ fxTimesRhoShield[i]=-1.;
+ fConstraint[i]=0;
+ }
for(i=0;i<6;i++) {fxOverX0Layer[i]=-1.;fxTimesRhoLayer[i]=-1.;}
fOriginal.SetOwner();
+ for(i=0;i<AliITSgeomTGeo::kNLayers;i++)fForceSkippingOfLayer[i]=0;
+ for(i=0;i<100000;i++)fBestTrackIndex[i]=0;
+
}
//------------------------------------------------------------------------
AliITStrackerMI::AliITStrackerMI(const Char_t *geom) : AliTracker(),
} // end loop on detectors
} // end loop on ladders
- fForceSkippingOfLayer[i] = 0;
+ fForceSkippingOfLayer[i-1] = 0;
} // end loop on layers
if(AliITSReconstructor::GetRecoParam()->GetHistoPlaneEff()) fPlaneEff->SetCreateHistos(kTRUE);
}
}
+/*
//------------------------------------------------------------------------
AliITStrackerMI::AliITStrackerMI(const AliITStrackerMI &tracker):AliTracker(tracker),
fI(tracker.fI),
fxTimesRhoShield[i]=tracker.fxTimesRhoShield[i];
}
}
+
//------------------------------------------------------------------------
AliITStrackerMI & AliITStrackerMI::operator=(const AliITStrackerMI &tracker){
//Assignment operator
new(this) AliITStrackerMI(tracker);
return *this;
}
+*/
//------------------------------------------------------------------------
AliITStrackerMI::~AliITStrackerMI()
{
if(det.IsBad()) {nBadDetsPerLayer++;}
} // end loop on detectors
} // end loop on ladders
- Info("ReadBadFromDetTypeRec",Form("Layer %d: %d bad out of %d",i-1,nBadDetsPerLayer,ndet*AliITSgeomTGeo::GetNLadders(i)));
+ AliInfo(Form("Layer %d: %d bad out of %d",i-1,nBadDetsPerLayer,ndet*AliITSgeomTGeo::GetNLadders(i)));
} // end loop on layers
return;
TClonesArray *clusters = NULL;
AliITSRecPointContainer* rpcont=AliITSRecPointContainer::Instance();
clusters=rpcont->FetchClusters(0,cTree);
+ if(!clusters) return 1;
+
if(!(rpcont->IsSPDActive() || rpcont->IsSDDActive() || rpcont->IsSSDActive())){
AliError("ITS is not in a known running configuration: SPD, SDD and SSD are not active");
return 1;
Int_t lab[4] = {0,0,0,detector};
Int_t info[3] = {0,0,i};
Float_t q = 0.; // this identifies virtual clusters
- Float_t hit[5] = {xdead,
+ Float_t hit[6] = {xdead,
0.,
AliITSReconstructor::GetRecoParam()->GetSigmaXDeadZoneHit2(),
AliITSReconstructor::GetRecoParam()->GetSigmaZDeadZoneHit2(),
- q};
+ q,
+ 0.};
Bool_t local = kTRUE;
Double_t zwindow = AliITSReconstructor::GetRecoParam()->GetZWindowDeadZone();
hit[1] = fSPDdetzcentre[0]+0.5*AliITSRecoParam::GetSPDdetzlength();
ResetTrackToFollow(*t);
fTrackToFollow.ResetClusters();
- if ((esd->GetStatus()&AliESDtrack::kTPCin)==0)
+ // ITS standalone tracks
+ if ((esd->GetStatus()&AliESDtrack::kTPCin)==0) {
fTrackToFollow.ResetCovariance(10.);
+ // protection for loopers that can have parameters screwed up
+ if(TMath::Abs(fTrackToFollow.GetY())>1000. ||
+ TMath::Abs(fTrackToFollow.GetZ())>1000.) {
+ delete t;
+ continue;
+ }
+ }
//Refitting...
Bool_t pe=(AliITSReconstructor::GetRecoParam()->GetComputePlaneEff() &&
for (Int_t i=0;i<TMath::Min(2,ntracks[2]);i++) {
AliITStrackMI & track= tracks[2][nindexes[2][i]];
if (track.GetNumberOfClusters()<3) continue;
- if (!constrain && track.GetNormChi2(2) >
+ if (track.GetNormChi2(2) >
AliITSReconstructor::GetRecoParam()->GetMaxNormChi2NonCForHypothesis()) continue;
- if (constrain) track.SetNSkipped(track.GetNSkipped()+2);
- if (!constrain){
- track.SetD(0,track.GetD(GetX(),GetY()));
- track.SetNSkipped(track.GetNSkipped()+7./(7.+8.*TMath::Abs(track.GetD(0))));
- if (track.GetNumberOfClusters()+track.GetNDeadZone()+track.GetNSkipped()>6) {
- track.SetNSkipped(6-track.GetNumberOfClusters()+track.GetNDeadZone());
- }
+ track.SetD(0,track.GetD(GetX(),GetY()));
+ track.SetNSkipped(track.GetNSkipped()+7./(7.+8.*TMath::Abs(track.GetD(0))));
+ if (track.GetNumberOfClusters()+track.GetNDeadZone()+track.GetNSkipped()>6) {
+ track.SetNSkipped(6-track.GetNumberOfClusters()+track.GetNDeadZone());
}
AddTrackHypothesys(new AliITStrackMI(track), esdindex);
}
Double_t xrp[3]; vertex->GetXYZ(xrp[0],xrp[1],xrp[2]); //I.B.
Int_t nearestold = GetNearestLayer(xrp); //I.B.
Int_t nearest = nearestold;
- for (Int_t ilayer =nearest;ilayer<8;ilayer++){
+ for (Int_t ilayer =nearest;ilayer<7;ilayer++){
if (ntracks[nearest]==0){
nearest = ilayer;
}
fClusterTracks[0][i]=-1;
fClusterTracks[1][i]=-1;
fClusterTracks[2][i]=-1;
- fClusterTracks[3][i]=-1;
+ fClusterTracks[3][i]=-1;
+ fY[i]=0;
+ fZ[i]=0;
+ }
+ fYB[0]=0;
+ fYB[1]=0;
+
+ for (Int_t j=0; j<AliITSRecoParam::fgkMaxClusterPerLayer5; j++) {
+ for (Int_t j1=0; j1<6; j1++) {
+ fClusters5[j1][j]=0;
+ fClusterIndex5[j1][j]=-1;
+ fY5[j1][j]=0;
+ fZ5[j1][j]=0;
+ fN5[j1]=0;
+ fBy5[j1][0]=0;
+ fBy5[j1][1]=0;
+ }
+ }
+
+ for (Int_t j=0; j<AliITSRecoParam::fgkMaxClusterPerLayer10; j++) {
+ for (Int_t j1=0; j1<11; j1++) {
+ fClusters10[j1][j]=0;
+ fClusterIndex10[j1][j]=-1;
+ fY10[j1][j]=0;
+ fZ10[j1][j]=0;
+ fN10[j1]=0;
+ fBy10[j1][0]=0;
+ fBy10[j1][1]=0;
+ }
+ }
+
+ for (Int_t j=0; j<AliITSRecoParam::fgkMaxClusterPerLayer20; j++) {
+ for (Int_t j1=0; j1<21; j1++) {
+ fClusters20[j1][j]=0;
+ fClusterIndex20[j1][j]=-1;
+ fY20[j1][j]=0;
+ fZ20[j1][j]=0;
+ fN20[j1]=0;
+ fBy20[j1][0]=0;
+ fBy20[j1][1]=0;
+ }
+ }
+ for(Int_t i=0;i<AliITSRecoParam::fgkMaxClusterPerLayer;i++){
+ fClusters[i]=NULL;
+ fClusterIndex[i]=0;
}
}
//------------------------------------------------------------------------
//--------------------------------------------------------------------
fDetectors=new AliITSdetector[fNladders*fNdetectors];
fRoad=2*fR*TMath::Sqrt(TMath::Pi()/1.);//assuming that there's only one cluster
+
+ for (Int_t i=0; i<AliITSRecoParam::GetMaxClusterPerLayer(); i++) {
+ fClusterWeight[i]=0;
+ fClusterTracks[0][i]=-1;
+ fClusterTracks[1][i]=-1;
+ fClusterTracks[2][i]=-1;
+ fClusterTracks[3][i]=-1;
+ fY[i]=0;
+ fZ[i]=0;
+ }
+
+ fYB[0]=0;
+ fYB[1]=0;
+
+ for (Int_t j=0; j<AliITSRecoParam::fgkMaxClusterPerLayer5; j++) {
+ for (Int_t j1=0; j1<6; j1++) {
+ fClusters5[j1][j]=0;
+ fClusterIndex5[j1][j]=-1;
+ fY5[j1][j]=0;
+ fZ5[j1][j]=0;
+ fN5[j1]=0;
+ fBy5[j1][0]=0;
+ fBy5[j1][1]=0;
+ }
+ }
+
+ for (Int_t j=0; j<AliITSRecoParam::fgkMaxClusterPerLayer10; j++) {
+ for (Int_t j1=0; j1<11; j1++) {
+ fClusters10[j1][j]=0;
+ fClusterIndex10[j1][j]=-1;
+ fY10[j1][j]=0;
+ fZ10[j1][j]=0;
+ fN10[j1]=0;
+ fBy10[j1][0]=0;
+ fBy10[j1][1]=0;
+ }
+ }
+
+ for (Int_t j=0; j<AliITSRecoParam::fgkMaxClusterPerLayer20; j++) {
+ for (Int_t j1=0; j1<21; j1++) {
+ fClusters20[j1][j]=0;
+ fClusterIndex20[j1][j]=-1;
+ fY20[j1][j]=0;
+ fZ20[j1][j]=0;
+ fN20[j1]=0;
+ fBy20[j1][0]=0;
+ fBy20[j1][1]=0;
+ }
+ }
+ for(Int_t i=0;i<AliITSRecoParam::fgkMaxClusterPerLayer;i++){
+ fClusters[i]=NULL;
+ fClusterIndex[i]=0;
+ }
}
+/*
//------------------------------------------------------------------------
AliITStrackerMI::AliITSlayer::AliITSlayer(const AliITSlayer& layer):
fR(layer.fR),
{
//Copy constructor
}
+*/
//------------------------------------------------------------------------
AliITStrackerMI::AliITSlayer::~AliITSlayer() {
//--------------------------------------------------------------------
track->SetModuleIndexInfo(ilayer,idet,modstatus,xloc,zloc);
- if (extra) { // search for extra clusters in overlapped modules
+ if (extra && clAcc) { // search for extra clusters in overlapped modules
AliITStrackV2 tmp(*track);
if (!ComputeRoad(track,ilayer,idet,zmin,zmax,ymin,ymax)) return kFALSE;
layer.SelectClusters(zmin,zmax,ymin,ymax);
if (fgLayers[l].GetClusterTracks(itrack,c)>=0 && fgLayers[l].GetClusterTracks(itrack,c)!=id){
list[l]=index;
clist[l] = (AliITSRecPoint*)GetCluster(index);
+ track->SetSharedWeight(l,weight);
shared+=weight;
break;
}
}
delete backtrack;
delete forwardtrack;
+
+ if (!besttrack) return 0;
+
Int_t accepted=0;
for (Int_t i=0;i<entries;i++){
AliITStrackMI * track = (AliITStrackMI*)array->At(i);
if (besttrack&&fAfterV0) {
UpdateESDtrack(besttrack,AliESDtrack::kITSin);
}
- if (besttrack&&fConstraint[fPass])
- UpdateESDtrack(besttrack,AliESDtrack::kITSin);
- if (besttrack->GetChi2MIP(0)+besttrack->GetNUsed()>1.5 && fConstraint[fPass]) {
- if ( TMath::Abs(besttrack->GetD(0))>0.1 ||
- TMath::Abs(besttrack->GetD(1))>0.1 ) track->SetReconstructed(kFALSE);
- }
-
+ if (besttrack) {
+ if (fConstraint[fPass]) UpdateESDtrack(besttrack,AliESDtrack::kITSin);
+ if (besttrack->GetChi2MIP(0)+besttrack->GetNUsed()>1.5 && fConstraint[fPass]) {
+ if ( TMath::Abs(besttrack->GetD(0))>0.1 ||
+ TMath::Abs(besttrack->GetD(1))>0.1 ) track->SetReconstructed(kFALSE);
+ }
+ }
}
}
}
//to be paramterized using external parameters in future
//
//
- sigmarfi = 0.0040+1.4 *TMath::Abs(track->GetC())+332.*track->GetC()*track->GetC();
- sigmaz = 0.0110+4.37*TMath::Abs(track->GetC());
+ Double_t curv=track->GetC();
+ sigmarfi = 0.0040+1.4 *TMath::Abs(curv)+332.*curv*curv;
+ sigmaz = 0.0110+4.37*TMath::Abs(curv);
}
//------------------------------------------------------------------------
void AliITStrackerMI::SignDeltas(const TObjArray *clusterArray, Float_t vz)
// check if the road overlaps with bad chips
Float_t xloc,zloc;
- LocalModuleCoord(ilayer,idet,track,xloc,zloc);
+ if(!(LocalModuleCoord(ilayer,idet,track,xloc,zloc)))return 0;
Float_t zlocmin = zloc-dz;
Float_t zlocmax = zloc+dz;
Float_t xlocmin = xloc-dy;