#include <TRandom.h>
#include <TTreeStream.h>
-
#include "AliLog.h"
#include "AliITSPlaneEff.h"
#include "AliITSCalibrationSPD.h"
} // end loop on detectors
} // end loop on ladders
+ fForceSkippingOfLayer[i] = 0;
} // end loop on layers
AliITSReconstructor::GetRecoParam()->GetSigmaZVdef()};
SetVertex(xyzVtx,ersVtx);
- for (Int_t i=0; i<AliITSgeomTGeo::GetNLayers(); i++) fLayersNotToSkip[i]=AliITSRecoParam::GetLayersNotToSkip(i);
fLastLayerToTrackTo=AliITSRecoParam::GetLastLayerToTrackTo();
for (Int_t i=0;i<100000;i++){
fBestTrackIndex[i]=0;
if(fPlaneEff) delete fPlaneEff;
}
//------------------------------------------------------------------------
-void AliITStrackerMI::SetLayersNotToSkip(const Int_t *l) {
- //--------------------------------------------------------------------
- //This function set masks of the layers which must be not skipped
- //--------------------------------------------------------------------
- for (Int_t i=0; i<AliITSgeomTGeo::GetNLayers(); i++) fLayersNotToSkip[i]=l[i];
-}
-//------------------------------------------------------------------------
void AliITStrackerMI::ReadBadFromDetTypeRec() {
//--------------------------------------------------------------------
//This function read ITS bad detectors, chips, channels from AliITSDetTypeRec
dummy.Clear();
+ // check whether we have to skip some layers
+ SetForceSkippingOfLayer();
+
return 0;
}
//------------------------------------------------------------------------
// The clusters must be already loaded !
//--------------------------------------------------------------------
+ AliDebug(2,Form("SKIPPING %d %d %d %d %d %d",ForceSkippingOfLayer(0),ForceSkippingOfLayer(1),ForceSkippingOfLayer(2),ForceSkippingOfLayer(3),ForceSkippingOfLayer(4),ForceSkippingOfLayer(5)));
fTrackingPhase="Clusters2Tracks";
t->SetExpQ(TMath::Max(0.8*t->GetESDtrack()->GetTPCsignal(),30.));
ResetTrackToFollow(*t);
+
/*
// propagate to vertex [SR, GSI 17.02.2003]
// Start Time measurement [SR, GSI 17.02.2003], corrected by I.Belikov
for(innermostlayer=0; innermostlayer<AliITSgeomTGeo::GetNLayers(); innermostlayer++) {
if(drphi < fgLayers[innermostlayer].GetR()) break;
}
- //printf(" drphi %f innermost %d\n",drphi,innermostlayer);
+ AliDebug(2,Form(" drphi %f innermost %d",drphi,innermostlayer));
Int_t modstatus=1; // found
Float_t xloc,zloc;
for (Int_t ilayer = from; ilayer != to; ilayer += step) {
AliITSlayer &layer=fgLayers[ilayer];
Double_t r=layer.GetR();
+
if (step<0 && xx>r) break;
// material between SSD and SDD, SDD and SPD
if (idet<0) return kFALSE;
+
const AliITSdetector &det=layer.GetDetector(idet);
if (!track->Propagate(det.GetPhi(),det.GetR())) return kFALSE;
return;
}
//------------------------------------------------------------------------
+void AliITStrackerMI::SetForceSkippingOfLayer() {
+ //-----------------------------------------------------------------
+ // Check if we are forced to skip layers
+ // either we set to skip them in RecoParam
+ // or they were off during data-taking
+ //-----------------------------------------------------------------
+
+ const AliEventInfo *eventInfo = GetEventInfo();
+
+ for(Int_t l=0; l<AliITSgeomTGeo::kNLayers; l++) {
+ fForceSkippingOfLayer[l] = 0;
+ // check reco param
+ if(AliITSReconstructor::GetRecoParam()->GetLayersToSkip(l)) fForceSkippingOfLayer[l] = 1;
+ // check run info
+
+ if(eventInfo) {
+ AliDebug(2,Form("GetEventInfo->GetTriggerCluster: %s",eventInfo->GetTriggerCluster()));
+ if(l==0 || l==1) {
+ if(!strstr(eventInfo->GetTriggerCluster(),"ITSSPD")) fForceSkippingOfLayer[l] = 1;
+ } else if(l==2 || l==3) {
+ if(!strstr(eventInfo->GetTriggerCluster(),"ITSSDD")) fForceSkippingOfLayer[l] = 1;
+ } else {
+ if(!strstr(eventInfo->GetTriggerCluster(),"ITSSSD")) fForceSkippingOfLayer[l] = 1;
+ }
+ }
+ }
+ return;
+}
+//------------------------------------------------------------------------
Int_t AliITStrackerMI::CheckSkipLayer(const AliITStrackMI *track,
Int_t ilayer,Int_t idet) const {
//-----------------------------------------------------------------
// return 2: track outside z acceptance of SSD/SDD and will cross both SPD
//-----------------------------------------------------------------
- if (AliITSReconstructor::GetRecoParam()->GetLayersToSkip(ilayer)) return 1;
+ if (ForceSkippingOfLayer(ilayer)) return 1;
if (idet<0 && ilayer>1 && AliITSReconstructor::GetRecoParam()->GetExtendedEtaAcceptance()) {
// check if track will cross SPD outer layer
}
return;
}
+
void SetupSecondPass(const Int_t *flags,const Double_t *cuts=0);
void SetLastLayerToTrackTo(Int_t l=0) {fLastLayerToTrackTo=l;}
- void SetLayersNotToSkip(const Int_t *l);
void UseClusters(const AliKalmanTrack *t, Int_t from=0) const;
void GetDCASigma(const AliITStrackMI* track, Float_t & sigmarfi, Float_t &sigmaz);
TObjArray* GetOriginal() {return &fOriginal;}
TTreeSRedirector *GetDebugStreamer() {return fDebugStreamer;}
static Int_t CorrectForTPCtoITSDeadZoneMaterial(AliITStrackMI *t);
+ void SetForceSkippingOfLayer();
+ Int_t ForceSkippingOfLayer(Int_t l) const { return fForceSkippingOfLayer[l]; }
class AliITSdetector {
public:
Int_t fPass; // current pass through the data
Int_t fConstraint[2]; // constraint flags
Bool_t fAfterV0; //indicates V0 founded
- Int_t fLayersNotToSkip[AliITSgeomTGeo::kNLayers]; // layer masks
+ Int_t fForceSkippingOfLayer[AliITSgeomTGeo::kNLayers]; // layers to be skipped
Int_t fLastLayerToTrackTo; // the innermost layer to track to
Float_t * fCoefficients; //! working array with errors and mean cluster shape
AliESDEvent * fEsd; //! pointer to the ESD event
private:
AliITStrackerMI(const AliITStrackerMI &tracker);
AliITStrackerMI & operator=(const AliITStrackerMI &tracker);
- ClassDef(AliITStrackerMI,8) //ITS tracker MI
+ ClassDef(AliITStrackerMI,9) //ITS tracker MI
};
xyz[1] = fR*fSinPhi + cl->GetY()*fCosPhi;
}
#endif
+
// Track finder using the ESD object
AliDebug(2,Form(" field is %f",event->GetMagneticField()));
-
+ AliDebug(2,Form("SKIPPING %d %d %d %d %d %d",ForceSkippingOfLayer(0),ForceSkippingOfLayer(1),ForceSkippingOfLayer(2),ForceSkippingOfLayer(3),ForceSkippingOfLayer(4),ForceSkippingOfLayer(5)));
+
if(!fITSclusters){
Fatal("FindTracks","ITS cluster tree is not accessed - Abort!!!\n Please use method SetClusterTree to pass the pointer to the tree\n");
return -1;
}
for(Int_t i=0;i<AliITSgeomTGeo::GetNLayers();i++){
AliITSlayer &layer=fgLayers[i];
- if (!AliITSReconstructor::GetRecoParam()->GetLayersToSkip(i)) {
+ if (!ForceSkippingOfLayer(i)) {
for(Int_t cli=0;cli<layer.GetNumberOfClusters();cli++){
AliITSRecPoint* cls = (AliITSRecPoint*)layer.GetCluster(cli);
if(cls->TestBit(kSAflag)==kTRUE) continue; //clusters used by TPC prol.
TClonesArray &clulay = *fCluLayer[ilay];
TClonesArray &clucoo = *fCluCoord[ilay];
AliITSlayer &layer=fgLayers[ilay];
- if (!AliITSReconstructor::GetRecoParam()->GetLayersToSkip(ilay)) {
+ if (!ForceSkippingOfLayer(ilay)) {
for(Int_t cli=0;cli<layer.GetNumberOfClusters();cli++){
AliITSRecPoint* cls = (AliITSRecPoint*)layer.GetCluster(cli);
if(cls->TestBit(kSAflag)==kTRUE) continue;
if(!fInwardFlag){ // Tracking outwards from the inner layers
// loop on starting layer for track finding
for(Int_t innLay=0; innLay<=fOuterStartLayer; innLay++) {
- if(AliITSReconstructor::GetRecoParam()->GetLayersToSkip(innLay)) continue;
+ if(ForceSkippingOfLayer(innLay)) continue;
Int_t minNPoints=iMinNPoints-innLay;
for(Int_t i=innLay+1;i<AliITSgeomTGeo::GetNLayers();i++)
- if(AliITSReconstructor::GetRecoParam()->GetLayersToSkip(i))
+ if(ForceSkippingOfLayer(i))
minNPoints--;
if(minNPoints<fMinNPoints) continue;
// loop on starting layer for track finding
for(Int_t outLay=AliITSgeomTGeo::GetNLayers()-1; outLay>=fInnerStartLayer; outLay--) {
- if(AliITSReconstructor::GetRecoParam()->GetLayersToSkip(outLay)) continue;
+ if(ForceSkippingOfLayer(outLay)) continue;
Int_t minNPoints=iMinNPoints-(AliITSgeomTGeo::GetNLayers()-1-outLay);
for(Int_t i=0;i<outLay-1;i++)
- if(AliITSReconstructor::GetRecoParam()->GetLayersToSkip(i))
+ if(ForceSkippingOfLayer(i))
minNPoints--;
if(minNPoints<fMinNPoints) continue;
Int_t AliITStrackerSA::SearchClusters(Int_t layer,Double_t phiwindow,Double_t lambdawindow, AliITStrackSA* trs,Double_t /*zvertex*/,Int_t pflag){
//function used to to find the clusters associated to the track
- if(AliITSReconstructor::GetRecoParam()->GetLayersToSkip(layer)) return 0;
+ if(ForceSkippingOfLayer(layer)) return 0;
Int_t nc=0;
AliITSlayer &lay = fgLayers[layer];