for (Int_t nhist=0;nhist<kNHisto;nhist++){
aux=histnameResX;
aux+=nhist;
- fHisResX[nhist]=new TH1F("histname","histname",1500,-0.30,0.30); // +- 3000 micron; 1 bin=4 micron
+ fHisResX[nhist]=new TH1F("histname","histname",2000,-0.40,0.40); // +- 4000 micron; 1 bin=4 micron
fHisResX[nhist]->SetName(aux.Data());
fHisResX[nhist]->SetTitle(aux.Data());
aux=histnameResZ;
aux+=nhist;
- fHisResZ[nhist]=new TH1F("histname","histname",500,-0.15,0.15); // +-1500 micron; 1 bin=6 micron
+ fHisResZ[nhist]=new TH1F("histname","histname",1000,-0.30,0.30); // +-3000 micron; 1 bin=6 micron
fHisResZ[nhist]->SetName(aux.Data());
fHisResZ[nhist]->SetTitle(aux.Data());
aux=histnameResXZ;
aux+=nhist;
- fHisResXZ[nhist]=new TH2F("histname","histname",50,-0.2,0.2,30,-0.12,0.12); // binning:
+ fHisResXZ[nhist]=new TH2F("histname","histname",100,-0.4,0.4,60,-0.24,0.24); // binning:
// 80 micron in x;
// 80 micron in z;
fHisResXZ[nhist]->SetName(aux.Data());
aux+=nhist;
aux+="_clu_";
aux+=clu+1; // clu=0 --> cluster size 1
- fHisResZclu[nhist][clu]=new TH1F("histname","histname",500,-0.15,0.15); // +-1500 micron; 1 bin=6 micron
+ fHisResZclu[nhist][clu]=new TH1F("histname","histname",1000,-0.30,0.30); // +-3000 micron; 1 bin=6 micron
fHisResZclu[nhist][clu]->SetName(aux.Data());
fHisResZclu[nhist][clu]->SetTitle(aux.Data());
}
aux=histnameTrackErrX;
aux+=nhist;
- fHisTrackErrX[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron
+ fHisTrackErrX[nhist]=new TH1F("histname","histname",500,0.,0.50); // 0-5000 micron; 1 bin=10 micron
fHisTrackErrX[nhist]->SetName(aux.Data());
fHisTrackErrX[nhist]->SetTitle(aux.Data());
aux=histnameClusErrX;
aux+=nhist;
- fHisClusErrX[nhist]=new TH1F("histname","histname",200,0.,0.04); // 0-400 micron; 1 bin=2 micron
+ fHisClusErrX[nhist]=new TH1F("histname","histname",400,0.,0.24); // 0-2400 micron; 1 bin=6 micron
fHisClusErrX[nhist]->SetName(aux.Data());
fHisClusErrX[nhist]->SetTitle(aux.Data());
aux=histnameClusErrZ;
aux+=nhist;
- fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron
+ fHisClusErrZ[nhist]=new TH1F("histname","histname",400,0.,0.32); // 0-3200 micron; 1 bin=8 micron
fHisClusErrZ[nhist]->SetName(aux.Data());
fHisClusErrZ[nhist]->SetTitle(aux.Data());
}
return kTRUE;
}
-
for (Int_t nhist=0;nhist<kNHisto;nhist++){
aux=histnameResX;
aux+=nhist;
- fHisResX[nhist]=new TH1F("histname","histname",800,-0.16,0.16); // +- 1600 micron; 1 bin=4 micron
+ fHisResX[nhist]=new TH1F("histname","histname",1600,-0.32,0.32); // +- 3200 micron; 1 bin=4 micron
fHisResX[nhist]->SetName(aux.Data());
fHisResX[nhist]->SetTitle(aux.Data());
aux=histnameResZ;
aux+=nhist;
- fHisResZ[nhist]=new TH1F("histname","histname",800,-0.32,0.32); // +-3200 micron; 1 bin=8 micron
+ fHisResZ[nhist]=new TH1F("histname","histname",1200,-0.48,0.48); // +-4800 micron; 1 bin=8 micron
fHisResZ[nhist]->SetName(aux.Data());
fHisResZ[nhist]->SetTitle(aux.Data());
aux=histnameResXZ;
aux+=nhist;
- fHisResXZ[nhist]=new TH2F("histname","histname",40,-0.08,0.08,40,-0.16,0.16); // binning:
+ fHisResXZ[nhist]=new TH2F("histname","histname",80,-0.16,0.16,80,-0.32,0.32); // binning:
fHisResXZ[nhist]->SetName(aux.Data()); // 40 micron in x;
fHisResXZ[nhist]->SetTitle(aux.Data()); // 80 micron in z;
aux+=nhist;
aux+="_clu_";
aux+=clu+1; // clu=0 --> cluster size 1
- fHisResXclu[nhist][clu]=new TH1F("histname","histname",800,-0.16,0.16); // +- 1600 micron; 1 bin=4 micron
+ fHisResXclu[nhist][clu]=new TH1F("histname","histname",1600,-0.32,0.32); // +- 3200 micron; 1 bin=4 micron
fHisResXclu[nhist][clu]->SetName(aux.Data());
fHisResXclu[nhist][clu]->SetTitle(aux.Data());
aux+=nhist;
aux+="_clu_";
aux+=clu+1; // clu=0 --> cluster size 1
- fHisResZclu[nhist][clu]=new TH1F("histname","histname",800,-0.32,0.32); // +-3200 micron; 1 bin=8 micron
+ fHisResZclu[nhist][clu]=new TH1F("histname","histname",1200,-0.48,0.48); // +-4800 micron; 1 bin=8 micron
fHisResZclu[nhist][clu]->SetName(aux.Data());
fHisResZclu[nhist][clu]->SetTitle(aux.Data());
}
aux+=nhist;
aux+="_chip_";
aux+=chip;
- fHisResXchip[nhist][chip]=new TH1F("histname","histname",200,-0.08,0.08); // +- 800 micron; 1 bin=8 micron
+ fHisResXchip[nhist][chip]=new TH1F("histname","histname",800,-0.32,0.32); // +- 3200 micron; 1 bin=8 micron
fHisResXchip[nhist][chip]->SetName(aux.Data());
fHisResXchip[nhist][chip]->SetTitle(aux.Data());
aux+=nhist;
aux+="_chip_";
aux+=chip;
- fHisResZchip[nhist][chip]=new TH1F("histname","histname",200,-0.32,0.32); // +-3200 micron; 1 bin=32 micron
+ fHisResZchip[nhist][chip]=new TH1F("histname","histname",300,-0.48,0.48); // +-4800 micron; 1 bin=32 micron
fHisResZchip[nhist][chip]->SetName(aux.Data());
fHisResZchip[nhist][chip]->SetTitle(aux.Data());
}
aux=histnameTrackErrX;
aux+=nhist;
- fHisTrackErrX[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron
+ fHisTrackErrX[nhist]=new TH1F("histname","histname",400,0.,0.32); // 0-3200 micron; 1 bin=8 micron
fHisTrackErrX[nhist]->SetName(aux.Data());
fHisTrackErrX[nhist]->SetTitle(aux.Data());
aux=histnameClusErrX;
aux+=nhist;
- fHisClusErrX[nhist]=new TH1F("histname","histname",200,0.,0.04); // 0-400 micron; 1 bin=2 micron
+ fHisClusErrX[nhist]=new TH1F("histname","histname",400,0.,0.08); // 0-800 micron; 1 bin=2 micron
fHisClusErrX[nhist]->SetName(aux.Data());
fHisClusErrX[nhist]->SetTitle(aux.Data());
aux=histnameClusErrZ;
aux+=nhist;
- fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron
+ fHisClusErrZ[nhist]=new TH1F("histname","histname",400,0.,0.32); // 0-3200 micron; 1 bin=8 micron
fHisClusErrZ[nhist]->SetName(aux.Data());
fHisClusErrZ[nhist]->SetTitle(aux.Data());
}
return kTRUE;
}
+
for (Int_t nhist=0;nhist<kNHisto;nhist++){
aux=histnameResX;
aux+=nhist;
- fHisResX[nhist]=new TH1F("histname","histname",500,-0.05,0.05); // +- 500 micron; 1 bin=2 micron
+ fHisResX[nhist]=new TH1F("histname","histname",500,-0.10,0.10); // +- 1000 micron; 1 bin=4 micron
fHisResX[nhist]->SetName(aux.Data());
fHisResX[nhist]->SetTitle(aux.Data());
aux=histnameResZ;
aux+=nhist;
- fHisResZ[nhist]=new TH1F("histname","histname",500,-0.50,0.50); // +-5000 micron; 1 bin=20 micron
+ fHisResZ[nhist]=new TH1F("histname","histname",750,-0.75,0.75); // +-5000 micron; 1 bin=20 micron
fHisResZ[nhist]->SetName(aux.Data());
fHisResZ[nhist]->SetTitle(aux.Data());
aux=histnameResXZ;
aux+=nhist;
- fHisResXZ[nhist]=new TH2F("histname","histname",40,-0.02,0.02,40,-0.16,0.16); // binning:
- // 10 micron in x;
- // 80 micron in z;
+ fHisResXZ[nhist]=new TH2F("histname","histname",40,-0.04,0.04,40,-0.32,0.32); // binning:
+ // 20 micron in x;
+ // 160 micron in z;
fHisResXZ[nhist]->SetName(aux.Data());
fHisResXZ[nhist]->SetTitle(aux.Data());
aux=histnameTrackErrX;
aux+=nhist;
- fHisTrackErrX[nhist]=new TH1F("histname","histname",200,0.,0.08); // 0-800 micron; 1 bin=4 micron
+ fHisTrackErrX[nhist]=new TH1F("histname","histname",300,0.,0.24); // 0-2400 micron; 1 bin=8 micron
fHisTrackErrX[nhist]->SetName(aux.Data());
fHisTrackErrX[nhist]->SetTitle(aux.Data());
aux=histnameTrackErrZ;
aux+=nhist;
- fHisTrackErrZ[nhist]=new TH1F("histname","histname",200,0.,0.32); // 0-3200 micron; 1 bin=16 micron
+ fHisTrackErrZ[nhist]=new TH1F("histname","histname",300,0.,0.48); // 0-4800 micron; 1 bin=16 micron
fHisTrackErrZ[nhist]->SetName(aux.Data());
fHisTrackErrZ[nhist]->SetTitle(aux.Data());
aux=histnameClusErrX;
aux+=nhist;
- fHisClusErrX[nhist]=new TH1F("histname","histname",200,0.,0.08); // 0-800 micron; 1 bin=4 micron
+ fHisClusErrX[nhist]=new TH1F("histname","histname",300,0.,0.24); // 0-2400 micron; 1 bin=8 micron
fHisClusErrX[nhist]->SetName(aux.Data());
fHisClusErrX[nhist]->SetTitle(aux.Data());
aux=histnameClusErrZ;
aux+=nhist;
- fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.16); // 0-1600 micron; 1 bin=8 micron
+ fHisClusErrZ[nhist]=new TH1F("histname","histname",200,0.,0.32); // 0-1600 micron; 1 bin=16 micron
fHisClusErrZ[nhist]->SetName(aux.Data());
fHisClusErrZ[nhist]->SetTitle(aux.Data());
}
return kTRUE;
}
+
fIPlanePlaneEff(0),
fReadPlaneEffFromOCDB(kFALSE),
fMinPtPlaneEff(0),
-fMaxMissingClustersPlaneEff(0),
+fMaxMissingClustersPlaneEff(5),
+fMaxMissingClustersOutPlaneEff(5),
fRequireClusterInOuterLayerPlaneEff(kFALSE),
fRequireClusterInInnerLayerPlaneEff(kFALSE),
fOnlyConstraintPlaneEff(kFALSE),
+fNSigXFromBoundaryPlaneEff(1.),
+fNSigZFromBoundaryPlaneEff(1.),
fExtendedEtaAcceptance(kFALSE),
fUseBadZonesFromOCDB(kTRUE),
fUseSingleBadChannelsFromOCDB(kFALSE),
}
if(i>=0) { // Method using tracks (remove given plane from tracking)
AliITSRecoParam *param;
- param = GetHighFluxParam();
+ param = GetLowFluxParam();
+ param->SetClusterErrorsParam(2);
+ // find independently ITS SA tracks
+ param->SetSAUseAllClusters();
+ param->SetOuterStartLayerSA(2);
+ param->SetAllowProlongationWithEmptyRoad(kTRUE);
+ // larger seach windows for SA (in case of large misalignments)
+ param->SetFactorSAWindowSizes(2);
+
+ // Misalignment syst errors decided at ITS meeting 25.03.2010
+ // additional error due to misal (B off)
+ param->SetClusterMisalErrorY(0.0010,0.0010,0.0300,0.0300,0.0020,0.0020); // [cm]
+ param->SetClusterMisalErrorZ(0.0100,0.0100,0.0100,0.0100,0.0500,0.0500); // [cm]
+ // additional error due to misal (B on)
+ param->SetClusterMisalErrorYBOn(0.0010,0.0030,0.0500,0.0500,0.0020,0.0020); // [cm]
+ param->SetClusterMisalErrorZBOn(0.0100,0.0100,0.0100,0.0100,0.0500,0.0500); // [cm]
+ //----
+
+ // SDD configuration
+ param->SetUseSDDCorrectionMaps(kTRUE); // changed 30.04.2010
+ param->SetUseSDDClusterSizeSelection(kTRUE);
+ param->SetMinClusterChargeSDD(30.);
+ param->SetUseUnfoldingInClusterFinderSDD(kFALSE);
+ //
param->SetComputePlaneEff();
param->SetLayerToSkip(i);
param->SetIPlanePlaneEff(i);
+ param->fNSigXFromBoundaryPlaneEff= 1.;
+ param->fNSigZFromBoundaryPlaneEff= 1.;
// optimized setting for SPD0 (i==0)
- if (i==0 || i==1) {
+ if (i==0) {
param->fMinPtPlaneEff = 0.200; // high pt particles
- param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
+ param->fMaxMissingClustersPlaneEff = 2; // at most 2 layers out of 5 without cluster
+ param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layers out of 5 external ones without cluster
param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SPD1 must be
//param->fOnlyConstraintPlaneEff = kTRUE;
}
- if (i==2 || i==3) {
+ if (i==1 ) {
+ param->fMinPtPlaneEff = 0.200; // high pt particles
+ param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
+ param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layer out of 4 external ones without cluster
+ //param->fRequireClusterInOuterLayerPlaneEff = kTRUE; // cluster on SSD1 must be
+ }
+ if (i==2) {
param->fMinPtPlaneEff = 0.200; // high pt particles
- param->fMaxMissingClustersPlaneEff = 1; // at most 1 layer out of 5 without cluster
- param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
+ param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
+ param->fMaxMissingClustersOutPlaneEff = 2; // at most 2 layer out of 3 external ones without cluster
+ //param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
//param->fOnlyConstraintPlaneEff = kTRUE;
}
+ if (i==3) {
+ param->fMinPtPlaneEff = 0.200; // high pt particles
+ param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
+ param->fMaxMissingClustersOutPlaneEff = 1; // at most 1 layer out of 2 external ones without cluster
+ }
if (i==4) {
param->fMinPtPlaneEff = 0.200; // high pt particles
- param->fMaxMissingClustersPlaneEff = 0; // at most 1 layer out of 5 without cluster
- param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
+ param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
+ param->fMaxMissingClustersOutPlaneEff = 1; // at most 1 layer out of 1 external ones without cluster
+ // param->fRequireClusterInOuterLayerPlaneEff = kTRUE;
//param->fOnlyConstraintPlaneEff = kTRUE;
}
if (i==5) {
param->fMinPtPlaneEff = 0.200; // high pt particles
+ param->fMaxMissingClustersPlaneEff = 2; // at most 2 layer out of 5 without cluster
}
//
return param;
return 0;
}
}
+
//_____________________________________________________________________________
void AliITSRecoParam::SetLayersParameters()
{
return;
}
-
Double_t GetMinPtPlaneEff() const { return fMinPtPlaneEff; }
void SetMaxMissingClustersPlaneEff(Int_t max=0) { fMaxMissingClustersPlaneEff=max;}
Int_t GetMaxMissingClustersPlaneEff() const {return fMaxMissingClustersPlaneEff;}
+ void SetMaxMissingClustersOutPlaneEff(Int_t max=0) { fMaxMissingClustersOutPlaneEff=max;}
+ Int_t GetMaxMissingClustersOutPlaneEff() const {return fMaxMissingClustersOutPlaneEff;}
void SetRequireClusterInOuterLayerPlaneEff(Bool_t out=kTRUE) { fRequireClusterInOuterLayerPlaneEff=out;}
Bool_t GetRequireClusterInOuterLayerPlaneEff() const {return fRequireClusterInOuterLayerPlaneEff;}
void SetRequireClusterInInnerLayerPlaneEff(Bool_t in=kTRUE) { fRequireClusterInInnerLayerPlaneEff=in;}
Bool_t GetRequireClusterInInnerLayerPlaneEff() const {return fRequireClusterInInnerLayerPlaneEff;}
void SetOnlyConstraintPlaneEff(Bool_t con=kFALSE) { fOnlyConstraintPlaneEff=con; }
Bool_t GetOnlyConstraintPlaneEff() const { return fOnlyConstraintPlaneEff; }
+ void SetNSigXFromBoundaryPlaneEff(Double_t nsigx=1.) {fNSigXFromBoundaryPlaneEff=nsigx;}
+ Double_t GetNSigXFromBoundaryPlaneEff() const {return fNSigXFromBoundaryPlaneEff;}
+ void SetNSigZFromBoundaryPlaneEff(Double_t nsigz=1.) {fNSigZFromBoundaryPlaneEff=nsigz;}
+ Double_t GetNSigZFromBoundaryPlaneEff() const {return fNSigZFromBoundaryPlaneEff;}
//
void SetExtendedEtaAcceptance(Bool_t ext=kTRUE) { fExtendedEtaAcceptance=ext; return; }
Bool_t GetExtendedEtaAcceptance() const { return fExtendedEtaAcceptance; }
// The analized events would be used to increase the statistics
Double_t fMinPtPlaneEff; // minimum p_t of the track to be used for Plane Efficiency evaluation
Int_t fMaxMissingClustersPlaneEff; // max n. of (other) layers without a cluster associated to the track
+ Int_t fMaxMissingClustersOutPlaneEff; // max n. of outermost layers without a cluster associated to the track
Bool_t fRequireClusterInOuterLayerPlaneEff; // if kTRUE, then only tracks with an associated cluster on the closest
Bool_t fRequireClusterInInnerLayerPlaneEff; // outer/inner layer are used. It has no effect for outermost/innermost layer
Bool_t fOnlyConstraintPlaneEff; // if kTRUE, use only constrained tracks at primary vertex for Plane Eff.
+ Double_t fNSigXFromBoundaryPlaneEff; // accept one track for PlaneEff if distance from border (in loc x or z)
+ Double_t fNSigZFromBoundaryPlaneEff; // is greater than fNSigXFromBoundaryPlaneEff * Track_precision
Bool_t fExtendedEtaAcceptance; // enable jumping from TPC to SPD at large eta (MI)
Bool_t fUseBadZonesFromOCDB; // enable using OCDB info on dead modules and chips (MI)
AliITSRecoParam(const AliITSRecoParam & param);
AliITSRecoParam & operator=(const AliITSRecoParam ¶m);
- ClassDef(AliITSRecoParam,27) // ITS reco parameters
+ ClassDef(AliITSRecoParam,28) // ITS reco parameters
};
#endif
+
AliITStrackMI tmp(*track);
// require a minimal number of cluster in other layers and eventually clusters in closest layers
- Int_t ncl=0;
- for(Int_t lay=AliITSgeomTGeo::kNLayers-1;lay>ilayer;lay--) {
+ Int_t ncl_out=0; Int_t ncl_in=0;
+ for(Int_t lay=AliITSgeomTGeo::kNLayers-1;lay>ilayer;lay--) { // count n. of cluster in outermost layers
AliDebug(2,Form("trak=%d lay=%d ; index=%d ESD label= %d",tmp.GetLabel(),lay,
tmp.GetClIndex(lay),((AliESDtrack*)tmp.GetESDtrack())->GetLabel())) ;
- if (tmp.GetClIndex(lay)>=0) ncl++;
+ if (tmp.GetClIndex(lay)>=0) ncl_out++;
}
+ for(Int_t lay=ilayer-1; lay>=0;lay--) { // count n. of cluster in innermost layers
+ AliDebug(2,Form("trak=%d lay=%d ; index=%d ESD label= %d",tmp.GetLabel(),lay,
+ tmp.GetClIndex(lay),((AliESDtrack*)tmp.GetESDtrack())->GetLabel())) ;
+ if (tmp.GetClIndex(lay)>=0) ncl_in++;
+ }
+ Int_t ncl=ncl_out+ncl_out;
Bool_t nextout = kFALSE;
if(ilayer==AliITSgeomTGeo::kNLayers-1) nextout=kTRUE; // you are already on the outermost layer
else nextout = ((tmp.GetClIndex(ilayer+1)>=0)? kTRUE : kFALSE );
Bool_t nextin = kFALSE;
if(ilayer==0) nextin=kTRUE; // you are already on the innermost layer
else nextin = ((index[ilayer-1]>=0)? kTRUE : kFALSE );
- if(ncl<AliITSgeomTGeo::kNLayers-(ilayer+1)-AliITSReconstructor::GetRecoParam()->GetMaxMissingClustersPlaneEff())
+ // maximum number of missing clusters allowed in outermost layers
+ if(ncl_out<AliITSgeomTGeo::kNLayers-(ilayer+1)-AliITSReconstructor::GetRecoParam()->GetMaxMissingClustersOutPlaneEff())
+ return kFALSE;
+ // maximum number of missing clusters allowed (both in innermost and in outermost layers)
+ if(ncl<AliITSgeomTGeo::kNLayers-1-AliITSReconstructor::GetRecoParam()->GetMaxMissingClustersPlaneEff())
return kFALSE;
if(AliITSReconstructor::GetRecoParam()->GetRequireClusterInOuterLayerPlaneEff() && !nextout) return kFALSE;
if(AliITSReconstructor::GetRecoParam()->GetRequireClusterInInnerLayerPlaneEff() && !nextin) return kFALSE;
// DEFINITION OF SEARCH ROAD FOR accepting a track
//
//For the time being they are hard-wired, later on from AliITSRecoParam
- // Double_t nsigx=AliITSRecoParam::GetNSigXFarFromBoundary();
- // Double_t nsigz=AliITSRecoParam::GetNSigZFarFromBoundary();
- Double_t nsigz=4;
- Double_t nsigx=4;
+ Double_t nsigx=AliITSReconstructor::GetRecoParam()->GetNSigXFromBoundaryPlaneEff();
+ Double_t nsigz=AliITSReconstructor::GetRecoParam()->GetNSigZFromBoundaryPlaneEff();
+ // Double_t nsigz=4;
+ // Double_t nsigx=4;
Double_t dx=nsigx*TMath::Sqrt(tmp.GetSigmaY2()); // those are precisions in the tracking reference system
Double_t dz=nsigz*TMath::Sqrt(tmp.GetSigmaZ2()); // Use it also for the module reference system, as it is
// done for RecPoints
}
return;
}
-