fPIDResponse(NULL),
fesdTrackCuts(NULL),
fEtaCut(0.9),
- fEtaShift(0.0),
fDoEtaCut(kFALSE),
- fPtCut(0.0),
+ fPtMinCut(0.0),
+ fPtMaxCut(9999),
fRadiusCut(1000.0),
fPsiPairCut(0.45),
fDeltaPhiCutMin(0.),
fPIDMinPProtonRejectionLowP(2.0),
fPIDMinPPionRejectionLowP(0.5),
fUseCorrectedTPCClsInfo(kFALSE),
+ fUseCrossedRows(kFALSE),
fUseTOFpid(kFALSE),
fRequireTOF(kFALSE),
fUseTrackMultiplicityForBG(kFALSE),
fBKGMethod(0),
fnumberOfRotationEventsForBG(0),
fDoMassCut(kFALSE),
+ fDoMassMinCut(kFALSE),
fMassCutLowPt(999.),
fMassCutHighPt(999.),
fMassCutPtMin(-100.0),
+ fMassMinCut(-999.),
fDoWeights(kFALSE),
+ fUseVPhotonMCPSmearing(kFALSE),
+ fUseElectronMCPSmearing(kFALSE),
fCutString(NULL),
hCutIndex(NULL),
hdEdxCuts(NULL),
hTrackDCAzPtbefore(NULL),
hTrackDCAzPtafter(NULL),
hTrackNFindClsPtTPCbefore(NULL),
- hTrackNFindClsPtTPCafter(NULL)
+ hTrackNFindClsPtTPCafter(NULL),
+ hTrackPosEtabeforeDedx(NULL),
+ hTrackNegEtabeforeDedx(NULL),
+ hTrackPosEtaafterDedx(NULL),
+ hTrackNegEtaafterDedx(NULL)
{
InitPIDResponse();
for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
// Initialize Cut Histograms for QA (only initialized and filled if function is called)
+ TH1::AddDirectory(kFALSE);
+
TString cutName = "";
if( cutNumber==""){
if(name=="")fHistograms->SetName(Form("ElectronCuts_%s",cutName.Data()));
else fHistograms->SetName(Form("%s_%s",name.Data(),cutName.Data()));
}
+
+
+ Int_t kDedxSignalbins = 200;
+
+ const Int_t kDCABins=62;
+
+ Double_t binsDCADummy[63]={-3.0,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,-0.25,-0.2,-0.19,-0.18,-0.17,-0.16,-0.15,-0.14,-0.13,-0.12,-0.11,-0.10,-0.09,-0.08,-0.07,-0.06,-0.05,-0.04,-0.03,-0.02,-0.01,0.0,0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1,0.11,0.12,0.13,0.14,0.15,0.16,0.17,0.18,0.19,0.2,0.25,0.3,0.6,0.9,1.2,1.5,1.8,2.1,2.4,2.7,3.0};
+
+ const Int_t kPtBins=110;
+ Double_t binsPtDummy[kPtBins+1];
+ const Int_t kPBins = 109;
+ Double_t binsPDummy[kPBins+1];
+ binsPtDummy[0]=0.0;
+ binsPDummy[0]=0.05;
+
+ for(Int_t i=1;i<kPtBins+1;i++)
+ {
+ if(binsPtDummy[i-1]+0.05<1.01)
+ binsPtDummy[i]=binsPtDummy[i-1]+0.05;
+ else
+ binsPtDummy[i]=binsPtDummy[i-1]+0.1;
+
+ }
+ for(Int_t i=1; i <kPBins+1;i++){
+
+ if( binsPDummy[i-1]+0.05<1.01)
+ binsPDummy[i] = binsPDummy[i-1]+0.05;
+ else
+ binsPDummy[i] = binsPDummy[i-1]+0.1;
+
+ }
+
hCutIndex=new TH1F(Form("IsElectronSelected %s",cutName.Data()),"IsElectronSelected",10,-0.5,9.5);
if(preCut){
- hITSdEdxbefore=new TH2F(Form("Electron_ITS_before %s",cutName.Data()),"ITS dEdx electron before" ,150,0.05,20,400,-10,10);
+ hITSdEdxbefore=new TH2F(Form("Electron_ITS_before %s",cutName.Data()),"ITS dEdx electron before" ,kPBins,binsPDummy,200,-10,10);
fHistograms->Add(hITSdEdxbefore);
AxisBeforeITS = hITSdEdxbefore->GetXaxis();
- hTPCdEdxbefore=new TH2F(Form("Electron_dEdx_before %s",cutName.Data()),"dEdx electron before" ,150,0.05,20,400,-10,10);
+ hTPCdEdxbefore=new TH2F(Form("Electron_dEdx_before %s",cutName.Data()),"dEdx electron before" ,kPBins,binsPDummy,200,-10,10);
fHistograms->Add(hTPCdEdxbefore);
AxisBeforedEdx = hTPCdEdxbefore->GetXaxis();
- hTPCdEdxSignalbefore=new TH2F(Form("Electron_dEdxSignal_before %s",cutName.Data()),"dEdx electron signal before" ,150,0.05,20.0,800,0.0,200);
+ hTPCdEdxSignalbefore=new TH2F(Form("Electron_dEdxSignal_before %s",cutName.Data()),"dEdx electron signal before" ,kPBins,binsPDummy,kDedxSignalbins,0.0,200);
fHistograms->Add(hTPCdEdxSignalbefore);
AxisBeforedEdxSignal = hTPCdEdxSignalbefore->GetXaxis();
- hTOFbefore=new TH2F(Form("Electron_TOF_before %s",cutName.Data()),"TOF electron before" ,150,0.05,20,400,-6,10);
+ hTOFbefore=new TH2F(Form("Electron_TOF_before %s",cutName.Data()),"TOF electron before" ,kPBins,binsPDummy,200,-10,10);
fHistograms->Add(hTOFbefore);
AxisBeforeTOF = hTOFbefore->GetXaxis();
- hTrackDCAxyPtbefore = new TH2F(Form("hTrack_DCAxy_Pt_before %s",cutName.Data()),"DCAxy Vs Pt of tracks before",800,-4.0,4.0,400,0.,10.);
+ hTrackDCAxyPtbefore = new TH2F(Form("hTrack_DCAxy_Pt_before %s",cutName.Data()),"DCAxy Vs Pt of tracks before",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
fHistograms->Add(hTrackDCAxyPtbefore);
- hTrackDCAzPtbefore = new TH2F(Form("hTrack_DCAz_Pt_before %s",cutName.Data()), "DCAz Vs Pt of tracks before",800,-4.0,4.0,400,0.,10.);
+ hTrackDCAzPtbefore = new TH2F(Form("hTrack_DCAz_Pt_before %s",cutName.Data()), "DCAz Vs Pt of tracks before",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
fHistograms->Add(hTrackDCAzPtbefore);
- hTrackNFindClsPtTPCbefore = new TH2F(Form("hTrack_NFindCls_Pt_TPC_before %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt before",100,0,1,400,0.,10.);
+ hTrackNFindClsPtTPCbefore = new TH2F(Form("hTrack_NFindCls_Pt_TPC_before %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt before",60,0,1.5,kPtBins,binsPtDummy);
fHistograms->Add(hTrackNFindClsPtTPCbefore);
}
- hITSdEdxafter=new TH2F(Form("Electron_ITS_after %s",cutName.Data()),"ITS dEdx electron after" ,150,0.05,20,400, -10,10);
+ hITSdEdxafter=new TH2F(Form("Electron_ITS_after %s",cutName.Data()),"ITS dEdx electron after" ,kPBins,binsPDummy,200, -10,10);
fHistograms->Add(hITSdEdxafter);
- hTPCdEdxafter=new TH2F(Form("Electron_dEdx_after %s",cutName.Data()),"dEdx electron after" ,150,0.05,20,400, -10,10);
+ hTPCdEdxafter=new TH2F(Form("Electron_dEdx_after %s",cutName.Data()),"dEdx electron after" ,kPBins,binsPDummy,200, -10,10);
fHistograms->Add(hTPCdEdxafter);
- hTPCdEdxSignalafter=new TH2F(Form("Electron_dEdxSignal_after %s",cutName.Data()),"dEdx electron signal after" ,150,0.05,20.0,800,0.0,200);
+ hTPCdEdxSignalafter=new TH2F(Form("Electron_dEdxSignal_after %s",cutName.Data()),"dEdx electron signal after" ,kPBins,binsPDummy,kDedxSignalbins,0.0,200);
fHistograms->Add(hTPCdEdxSignalafter);
- hTOFafter=new TH2F(Form("Electron_TOF_after %s",cutName.Data()),"TOF electron after" ,150,0.05,20,400,-6,10);
+ hTOFafter=new TH2F(Form("Electron_TOF_after %s",cutName.Data()),"TOF electron after" ,kPBins,binsPDummy,200,-6,10);
fHistograms->Add(hTOFafter);
- hTrackDCAxyPtafter = new TH2F(Form("hTrack_DCAxy_Pt_after %s",cutName.Data()),"DCAxy Vs Pt of tracks after",800,-4.0,4.0,400,0.,10.);
+ hTrackDCAxyPtafter = new TH2F(Form("hTrack_DCAxy_Pt_after %s",cutName.Data()),"DCAxy Vs Pt of tracks after",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
fHistograms->Add(hTrackDCAxyPtafter);
- hTrackDCAzPtafter = new TH2F(Form("hTrack_DCAz_Pt_after %s",cutName.Data()), "DCAz Vs Pt of tracks after",800,-4.0,4.0,400,0.,10.);
+ hTrackDCAzPtafter = new TH2F(Form("hTrack_DCAz_Pt_after %s",cutName.Data()), "DCAz Vs Pt of tracks after",kDCABins,binsDCADummy,kPtBins,binsPtDummy);
fHistograms->Add(hTrackDCAzPtafter);
- hTrackNFindClsPtTPCafter = new TH2F(Form("hTrack_NFindCls_Pt_TPC_after %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt after",100,0,1,400,0.,10.);
+ hTrackNFindClsPtTPCafter = new TH2F(Form("hTrack_NFindCls_Pt_TPC_after %s",cutName.Data()),"Track: N Findable Cls TPC Vs Pt after",60,0,1.5,kPtBins,binsPtDummy);
fHistograms->Add(hTrackNFindClsPtTPCafter);
+ hTrackPosEtabeforeDedx = new TH1F(Form("hTrack_Pos_Eta_before_Dedx %s",cutName.Data()),"hTrack_Pos_Eta_before_Dedx",600,-1.5,1.5);
+ fHistograms->Add(hTrackPosEtabeforeDedx);
+
+ hTrackNegEtabeforeDedx = new TH1F(Form("hTrack_Neg_Eta_before_Dedx %s",cutName.Data()),"hTrack_Neg_Eta_before_Dedx",600,-1.5,1.5);
+ fHistograms->Add(hTrackNegEtabeforeDedx);
+
+ hTrackPosEtaafterDedx = new TH1F(Form("hTrack_Pos_Eta_after_Dedx %s",cutName.Data()),"hTrack_Pos_Eta_after_Dedx",600,-1.5,1.5);
+ fHistograms->Add(hTrackPosEtaafterDedx);
+
+ hTrackNegEtaafterDedx = new TH1F(Form("hTrack_Neg_Eta_afterDedx %s",cutName.Data()),"hTrack_Neg_Eta_after_Dedx",600,-1.5,1.5);
+ fHistograms->Add(hTrackNegEtaafterDedx);
+
TAxis *AxisAfter = hTPCdEdxafter->GetXaxis();
}
delete [] newBins;
-
+ TH1::AddDirectory(kTRUE);
+
// Event Cuts and Info
}
if( TMath::Abs( particle->GetPdgCode() ) != 11 ) return kFALSE;
if( fDoEtaCut ){
- if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )
+ if( particle->Eta() > fEtaCut || particle->Eta() < -fEtaCut )
return kFALSE;
}
return kFALSE;
}
-
+ if( lTrack->GetSign() > 0.0 ){
+
+ if (hTrackPosEtabeforeDedx) hTrackPosEtabeforeDedx->Fill(lTrack->Eta());
+
+ } else{
+
+ if(hTrackNegEtabeforeDedx) hTrackNegEtabeforeDedx->Fill(lTrack->Eta());
+
+ }
+
+
// dEdx Cuts
if( ! dEdxCuts( track ) ) {
if(hCutIndex)hCutIndex->Fill(kdEdxCuts);
return kFALSE;
}
+
+ if( lTrack->GetSign() > 0.0 ){
+
+ if( hTrackPosEtaafterDedx) hTrackPosEtaafterDedx->Fill(lTrack->Eta());
+
+ } else{
+
+ if( hTrackNegEtaafterDedx) hTrackNegEtaafterDedx->Fill(lTrack->Eta());
+
+ }
+
+
//Electron passed the cuts
if(hCutIndex)hCutIndex->Fill(kElectronOut);
}
if( fDoEtaCut ) {
- if( lTrack->Eta() > (fEtaCut + fEtaShift) || lTrack->Eta() < (-fEtaCut + fEtaShift) ) {
+ if( lTrack->Eta() > fEtaCut || lTrack->Eta() < -fEtaCut ) {
return kFALSE;
}
}
- if( lTrack->Pt() < fPtCut ) {
+ if( lTrack->Pt() < fPtMinCut || lTrack->Pt() > fPtMaxCut ) {
return kFALSE;
Double_t clsToF=0;
-
+
+ if( fUseCrossedRows == kFALSE ) {
if ( !fUseCorrectedTPCClsInfo ){
if(lTrack->GetTPCNclsF()!=0){
clsToF = lTrack->GetTPCClusterInfo(2,0); //NOTE ask friederike
}
+ } else {
+
+ Float_t nCrossedRowsTPC = lTrack->GetTPCCrossedRows();
+ clsToF = 1.0;
+ if ( lTrack->GetTPCNclsF()>0 ) {
+ clsToF = nCrossedRowsTPC / lTrack->GetTPCNclsF();
+ }
+ }
return clsToF;
///Update the cut string (if it has been created yet)
if(fCutString && fCutString->GetString().Length() == kNCuts) {
-// cout << "Updating cut id in spot number " << cutID << " to " << value << endl;
+ cout << "Updating cut id in spot number " << cutID << " to " << value << endl;
fCutString->SetString(GetCutNumber());
} else {
-// cout << "fCutString not yet initialized, will not be updated" << endl;
+ cout << "fCutString not yet initialized, will not be updated" << endl;
return kFALSE;
}
// cout << fCutString->GetString().Data() << endl;
return kTRUE;
} else return kFALSE;
-
+ case kuseVPhotonMCPSmearing:
+
+ if( SetUseVPhotonMCPmearing(value)) {
+ fCuts[kuseVPhotonMCPSmearing] = value;
+ UpdateCutString(cutID, value);
+ return kTRUE;
+ } else return kFALSE;
+
case kNCuts:
cout << "Error:: Cut id out of range"<< endl;
return kFALSE;
fesdTrackCuts->SetMinNClustersITS(5);
// 5 hits in total in the ITS. At least 1 hit in any layer of SPD
break;
+ case 7: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kOff);
+ fesdTrackCuts->SetMinNClustersITS(4);
+ break;
+ case 8: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
+ break;
+ case 9: fesdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kBoth);
+ fesdTrackCuts->SetMinNClustersITS(4);
+ break;
+
default:
cout<<"Warning: clsITSCut not defined "<<clsITSCut<<endl;
return kFALSE;
fMinClsTPC= 80.;
fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
break;
- case 3: // 100
- fMinClsTPC= 100.;
- fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
+ case 3: // Changed 2014-02-04 before fMinClsTPC = 50.;
+ fMinClsTPCToF = 0.8;
+ fesdTrackCuts->SetMinNCrossedRowsTPC(70);
+ fesdTrackCuts->SetMinNClustersTPC(0);
+ fUseCrossedRows = kTRUE;
break;
case 4: // 0% of findable clusters
fMinClsTPC= 70.;
fMinClsTPCToF= 0.6;
fUseCorrectedTPCClsInfo=0;
break;
- case 7: // 70% of findable clusters
- fMinClsTPC= 70.;
- fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
- fMinClsTPCToF= 0.7;
- fUseCorrectedTPCClsInfo=0;
+ case 7: // 60% Changed 2014-02-04 before fMinClsTPC = 0.7 fUseCorrectedTPCClsInfo = 0
+ // Changed 2014-02-04 before fMinClsTPC = 50.;
+ fMinClsTPCToF = 0.6;
+ fesdTrackCuts->SetMinNCrossedRowsTPC(70);
+ fesdTrackCuts->SetMinNClustersTPC(0);
+ fUseCrossedRows = kTRUE;
break;
case 8: fMinClsTPC = 0.;
fesdTrackCuts->SetMinNClustersTPC(fMinClsTPC);
case 8: fEtaCut = 0.4;
fDoEtaCut = kTRUE;
break;
+ case 9: fEtaCut = 0.65;
+ fDoEtaCut = kTRUE;
+ break;
default:
cout<<"Warning: EtaCut not defined "<<etaCut<<endl;
return kFALSE;
switch(ptCut){
- case 0: fPtCut = 0.075;
+ case 0: fPtMinCut = 0.075;
+ fPtMaxCut = 9999;
break;
case 1: // 0.1
- fPtCut = 0.1;
+ fPtMinCut = 0.1;
+ fPtMaxCut = 9999;
break;
case 2: // 0.125 GeV
- fPtCut = 0.125;
+ fPtMinCut = 0.125;
+ fPtMaxCut = 9999;
break;
case 3: // 0.15 GeV
- fPtCut = 0.15;
+ fPtMinCut = 0.15;
+ fPtMaxCut = 9999;
+ break;
+ // 0.5 - 0.7
+ case 4: fPtMinCut = 0.5;
+ fPtMaxCut = 0.7;
+ break;
+ case 5: // 0.175 GeV
+ fPtMinCut = 0.175;
+ fPtMaxCut = 9999;
break;
default:
cout<<"Warning: PtCut not defined "<<ptCut<<endl;
fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
break;
+ case 3: fesdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1");
+ fesdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
+ break;
+
default:
cout<<"Warning: dcaCut not defined "<<dcaCut<<endl;
return kFALSE;
fPsiPairCut = 0.52;
fDeltaPhiCutMin = 0.0;
fDeltaPhiCutMax = 0.12;
- break;
+ break;
case 4:
fDoPsiPairCut = kTRUE;
fPsiPairCut = 0.30;
fDeltaPhiCutMin = 0.0;
fDeltaPhiCutMax = 0.12;
break;
-
+ case 5:
+ fDoPsiPairCut = kTRUE;
+ fPsiPairCut = 0.60;
+ fDeltaPhiCutMin = 0.0;
+ fDeltaPhiCutMax = 0.06;
+ break;
+
+
default:
cout<<"Warning: PsiPairCut not defined "<<fPsiPairCut<<endl;
return kFALSE;
fMassCutPtMin = -999.; //GeV
fMassCutLowPt = 999.; //GeV/c^2
fMassCutHighPt = 999.; //GeV/c^2
+ fMassMinCut = -999;
fDoMassCut = kFALSE;
+ fDoMassMinCut = kFALSE;
break;
case 1:
//fMassCut = 0.135; //GeV/c^2
fMassCutPtMin = -999.; //GeV
fMassCutLowPt = 0.135; //GeV/c^2
fMassCutHighPt = 0.135; //GeV/c^2
+ fMassMinCut = -999;
fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;
break;
case 2:
//fMassCut = 0.100; //GeV/c^2
fMassCutPtMin = -999.; //GeV
fMassCutLowPt = 0.100; //GeV/c^2
fMassCutHighPt = 0.100; //GeV/c^2
+ fMassMinCut = -999;
fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;
break;
case 3:
- //fMassCut = 0.075; //GeV/c^2
+ /*fMassCut = 0.075; //GeV/c^2 Changed from Feb 25
fMassCutPtMin = -999.; //GeV
fMassCutLowPt = 0.075; //GeV/c^2
fMassCutHighPt = 0.075; //GeV/c^2
fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;*/
+ fMassCutPtMin = 1.0; //GeV
+ fMassCutLowPt = 0.015; //GeV/c^2
+ fMassCutHighPt = 0.035; //GeV/c^2
+ fMassMinCut = 0.002;
+ fDoMassCut = kTRUE;
+ fDoMassMinCut = kTRUE;
break;
case 4:
//fMassCut = 0.050; //GeV/c^2
fMassCutPtMin = -999.; //GeV
fMassCutLowPt = 0.050; //GeV/c^2
fMassCutHighPt = 0.050; //GeV/c^2
+ fMassMinCut = -999;
fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;
break;
case 5:
fMassCutPtMin = -999.; //GeV
fMassCutLowPt = 0.035; //GeV/c^2
fMassCutHighPt = 0.035; //GeV/c^2
+ fMassMinCut = -999;
fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;
break;
case 6:
fMassCutPtMin = -999.; //GeV
fMassCutLowPt = 0.015; //GeV/c^2
fMassCutHighPt = 0.015; //GeV/c^2
+ fMassMinCut = -999;
fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;
break;
case 7: fMassCutPtMin = 1.0; //GeV
fMassCutLowPt = 0.015; //GeV/c^2
fMassCutHighPt = 0.035; //GeV/c^2
+ fMassMinCut = -999;
fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;
break;
+ case 8: fMassCutPtMin = 1.0; //GeV
+ fMassCutLowPt = 0.015; //GeV/c^2
+ fMassCutHighPt = 0.050; //GeV/c^2
+ fMassMinCut = -999;
+ fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;
+ break;
+ case 9: fMassCutPtMin = 1.0; //GeV
+ fMassCutLowPt = 0.025; //GeV/c^2
+ fMassCutHighPt = 0.035; //GeV/c^2
+ fMassMinCut = -999;
+ fDoMassCut = kTRUE;
+ fDoMassMinCut = kFALSE;
+ break;
default:
cout<<"Warning: MassCut not defined "<<massCut<<endl;
return kFALSE;
}
return kTRUE;
}
-
+Bool_t AliDalitzElectronCuts::SetUseVPhotonMCPmearing(Int_t useMCPSmearing)
+{// Set Cut
+ switch(useMCPSmearing){
+
+ case 0:
+ fUseVPhotonMCPSmearing=kFALSE;
+ fUseElectronMCPSmearing=kFALSE;
+ break;
+ case 1:
+ fUseVPhotonMCPSmearing=kTRUE;
+ fUseElectronMCPSmearing=kFALSE;
+ break;
+ case 2:
+ fUseVPhotonMCPSmearing=kFALSE;
+ fUseElectronMCPSmearing=kTRUE;
+ break;
+
+
+ default: cout<<"Warning: Virtual Photon SMearing not defined "<<useMCPSmearing<<endl;
+ return kFALSE;
+
+ }
+
+ return kTRUE;
+}
///________________________________________________________________________