X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=TOF%2FAliTOFT0v1.cxx;h=651d36d9646bd2c26269d9ca2066c25a84fc06fa;hb=2a258f409724cfac72b817d8d148dd72ca406dfe;hp=f4bfeac5d89c8e0736195f9311da77fb7dcd01fb;hpb=6c68754e09fedc597a1fa9e2b99cc27162fd9f8a;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFT0v1.cxx b/TOF/AliTOFT0v1.cxx index f4bfeac5d89..651d36d9646 100644 --- a/TOF/AliTOFT0v1.cxx +++ b/TOF/AliTOFT0v1.cxx @@ -58,69 +58,55 @@ #include "AliESDtrack.h" #include "AliESDEvent.h" #include "AliTOFT0v1.h" +#include "TBenchmark.h" +#include "AliPID.h" +#include "AliESDpid.h" ClassImp(AliTOFT0v1) //____________________________________________________________________________ -AliTOFT0v1::AliTOFT0v1(): +AliTOFT0v1::AliTOFT0v1(AliESDpid *extPID): TObject(), fLowerMomBound(0.5), fUpperMomBound(3), - fTimeResolution(0.80e-10), fTimeCorr(0.), - fEvent(0x0) -// fCalib(0x0) + fEvent(0x0), + fPIDesd(extPID) { // // default constructor // + if(AliPID::ParticleMass(0) == 0) new AliPID(); + + if(!fPIDesd){ + fPIDesd = new AliESDpid(); + } Init(NULL); } - //____________________________________________________________________________ -AliTOFT0v1::AliTOFT0v1(AliESDEvent* event): +AliTOFT0v1::AliTOFT0v1(AliESDEvent* event,AliESDpid *extPID): TObject(), fLowerMomBound(0.5), fUpperMomBound(3.0), - fTimeResolution(0.80e-10), fTimeCorr(0.), - fEvent(event) -// fCalib(0x0) + fEvent(event), + fPIDesd(extPID) { // // real constructor // - - Init(event); - -} + if(AliPID::ParticleMass(0) == 0) new AliPID(); -/* copy-constructor and operator= suppresed + if(!fPIDesd){ + fPIDesd = new AliESDpid(); + } -//____________________________________________________________________________ -AliTOFT0v1::AliTOFT0v1(const AliTOFT0v1 & tzero): - TObject(), - fLowerMomBound(tzero.fLowerMomBound), - fUpperMomBound(tzero.fUpperMomBound), - fTimeResolution(tzero.fTimeResolution), - fTimeCorr(tzero.fTimeCorr), - fEvent(tzero.fEvent) -// fCalib(tzero.fCalib) -{ - // - // copy constructor - // - - fT0SigmaT0def[0]=tzero.fT0SigmaT0def[0]; - fT0SigmaT0def[1]=tzero.fT0SigmaT0def[1]; - fT0SigmaT0def[2]=tzero.fT0SigmaT0def[2]; - fT0SigmaT0def[3]=tzero.fT0SigmaT0def[3]; + Init(event); } - //____________________________________________________________________________ AliTOFT0v1& AliTOFT0v1::operator=(const AliTOFT0v1 &tzero) { @@ -133,10 +119,8 @@ AliTOFT0v1& AliTOFT0v1::operator=(const AliTOFT0v1 &tzero) fLowerMomBound=tzero.fLowerMomBound; fUpperMomBound=tzero.fUpperMomBound; - fTimeResolution=tzero.fTimeResolution; fTimeCorr=tzero.fTimeCorr; fEvent=tzero.fEvent; -// fCalib=tzero.fCalib; fT0SigmaT0def[0]=tzero.fT0SigmaT0def[0]; fT0SigmaT0def[1]=tzero.fT0SigmaT0def[1]; fT0SigmaT0def[2]=tzero.fT0SigmaT0def[2]; @@ -145,12 +129,10 @@ AliTOFT0v1& AliTOFT0v1::operator=(const AliTOFT0v1 &tzero) return *this; } -*/ //____________________________________________________________________________ AliTOFT0v1::~AliTOFT0v1() { // dtor -// fCalib=NULL; fEvent=NULL; } @@ -172,25 +154,21 @@ AliTOFT0v1::Init(AliESDEvent *event) } -//____________________________________________________________________________ -void AliTOFT0v1::SetTimeResolution(Double_t timeresolution){ - // Set the TOF time resolution - fTimeResolution=timeresolution; -} -//____________________________________________________________________________ //____________________________________________________________________________ Double_t * AliTOFT0v1::DefineT0(Option_t *option) { // Caluclate the Event Time using the ESD TOF time + TBenchmark *bench=new TBenchmark(); + bench->Start("t0computation"); + fT0SigmaT0def[0]=0.; fT0SigmaT0def[1]=0.600; fT0SigmaT0def[2]=0.; fT0SigmaT0def[3]=0.; - - Float_t timeresolutioninns=fTimeResolution*(1.e+9); // convert in [ns] - const Int_t nmaxtracksinset=10; + const Int_t nmaxtracksinsetMax=10; + Int_t nmaxtracksinset=10; // if(strstr(option,"all")){ // cout << "Selecting primary tracks with momentum between " << fLowerMomBound << " GeV/c and " << fUpperMomBound << " GeV/c" << endl; // cout << "Memorandum: 0 means PION | 1 means KAON | 2 means PROTON" << endl; @@ -233,16 +211,17 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option) time*=1.E-3; // tof given in nanoseconds if (!(mom<=fUpperMomBound && mom>=fLowerMomBound))continue; - + if (!AcceptTrack(t)) continue; - if(t->GetIntegratedLength() < 350)continue; //skip decays + if(t->GetP() < fLowerMomBound || t->GetIntegratedLength() < 350 || t->GetTOFsignalToT() < 0.000000001)continue; //skip decays if(time <= mintime) mintime=time; tracks[ngoodtrk]=t; ngoodtrk++; } - + if(ngoodtrk>22) nmaxtracksinset = 6; + // cout << " N. of ESD tracks : " << ntrk << endl; // cout << " N. of preselected tracks : " << ngoodtrk << endl; // cout << " Minimum tof time in set (in ns) : " << mintime << endl; @@ -304,27 +283,27 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option) // Analyse it - Int_t assparticle[nmaxtracksinset]; - Float_t exptof[nmaxtracksinset][3]; - Float_t timeofflight[nmaxtracksinset]; - Float_t momentum[nmaxtracksinset]; - Float_t timezero[nmaxtracksinset]; - Float_t weightedtimezero[nmaxtracksinset]; - Float_t beta[nmaxtracksinset]; - Float_t texp[nmaxtracksinset]; - Float_t dtexp[nmaxtracksinset]; - Float_t sqMomError[nmaxtracksinset]; - Float_t sqTrackError[nmaxtracksinset]; + Int_t assparticle[nmaxtracksinsetMax]; + Float_t exptof[nmaxtracksinsetMax][3]; + Float_t timeofflight[nmaxtracksinsetMax]; + Float_t momentum[nmaxtracksinsetMax]; + Float_t timezero[nmaxtracksinsetMax]; + Float_t weightedtimezero[nmaxtracksinsetMax]; + Float_t beta[nmaxtracksinsetMax]; + Float_t texp[nmaxtracksinsetMax]; + Float_t dtexp[nmaxtracksinsetMax]; + Float_t sqMomError[nmaxtracksinsetMax]; + Float_t sqTrackError[nmaxtracksinsetMax]; Float_t massarray[3]={0.13957,0.493677,0.9382723}; - Float_t tracktoflen[nmaxtracksinset]; - Float_t besttimezero[nmaxtracksinset]; - Float_t besttexp[nmaxtracksinset]; - Float_t besttimeofflight[nmaxtracksinset]; - Float_t bestmomentum[nmaxtracksinset]; - Float_t bestchisquare[nmaxtracksinset]; - Float_t bestweightedtimezero[nmaxtracksinset]; - Float_t bestsqTrackError[nmaxtracksinset]; - Int_t imass[nmaxtracksinset]; + Float_t tracktoflen[nmaxtracksinsetMax]; + Float_t besttimezero[nmaxtracksinsetMax]; + Float_t besttexp[nmaxtracksinsetMax]; + Float_t besttimeofflight[nmaxtracksinsetMax]; + Float_t bestmomentum[nmaxtracksinsetMax]; + Float_t bestchisquare[nmaxtracksinsetMax]; + Float_t bestweightedtimezero[nmaxtracksinsetMax]; + Float_t bestsqTrackError[nmaxtracksinsetMax]; + Int_t imass[nmaxtracksinsetMax]; for (Int_t j=0; j chisquarebest*0.5 && ntracksinsetmy > 2) || (bestchisquare[icsq] > chi2singlecut)){ @@ -493,10 +469,7 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option) for (Int_t itz=0; itzStop("t0computation"); + + fT0SigmaT0def[4]=bench->GetRealTime("t0computation"); + fT0SigmaT0def[5]=bench->GetCpuTime("t0computation"); + +// bench->Print("t0computation"); +// printf("%f %f\n",fT0SigmaT0def[4],fT0SigmaT0def[5]); + + bench->Reset(); return fT0SigmaT0def; } //__________________________________________________________________ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut) { + TBenchmark *bench=new TBenchmark(); + bench->Start("t0computation"); + // Caluclate the Event Time using the ESD TOF time fT0SigmaT0def[0]=0.; fT0SigmaT0def[1]=0.600; fT0SigmaT0def[2]=0.; fT0SigmaT0def[3]=0.; - - Float_t timeresolutioninns=fTimeResolution*(1.e+9); // convert in [ns] - const Int_t nmaxtracksinset=10; + const Int_t nmaxtracksinsetMax=10; + Int_t nmaxtracksinset=10; // if(strstr(option,"all")){ // cout << "Selecting primary tracks with momentum between " << fLowerMomBound << " GeV/c and " << fUpperMomBound << " GeV/c" << endl; // cout << "Memorandum: 0 means PION | 1 means KAON | 2 means PROTON" << endl; @@ -690,7 +674,7 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut time*=1.E-3; // tof given in nanoseconds if (!(mom<=fUpperMomBound && mom>=fLowerMomBound))continue; - + if (!AcceptTrack(t)) continue; if(t->GetIntegratedLength() < 350)continue; //skip decays @@ -700,10 +684,12 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut ngoodtrk++; } + if(ngoodtrk>22) nmaxtracksinset = 6; + -// cout << " N. of ESD tracks : " << ntrk << endl; -// cout << " N. of preselected tracks : " << ngoodtrk << endl; -// cout << " Minimum tof time in set (in ns) : " << mintime << endl; +// cout << " N. of ESD tracks : " << ntrk << endl; +// cout << " N. of preselected tracks : " << ngoodtrk << endl; +// cout << " Minimum tof time in set (in ns) : " << mintime << endl; AliESDtrack **gtracks=new AliESDtrack*[ngoodtrk]; @@ -717,11 +703,14 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut } } +// cout << " N. of preselected tracks t0 : " << ngoodtrkt0 << endl; Int_t nseteq = (ngoodtrkt0-1)/nmaxtracksinset + 1; Int_t nmaxtracksinsetCurrent=ngoodtrkt0/nseteq; if(nmaxtracksinsetCurrent*nseteq < ngoodtrkt0) nmaxtracksinsetCurrent++; +// cout << " N. of sets : " << nseteq << endl; + if(ngoodtrkt0<2){ // cout << "less than 2 tracks, skip event " << endl; t0def=-999; @@ -743,7 +732,7 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut if(nset>=1){ for (Int_t i=0; i< nset; i++) { - + // printf("Set %i of %i\n",i+1,nset); Float_t t0best=999.; Float_t eT0best=999.; Float_t chisquarebest=99999.; @@ -762,27 +751,27 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut // Analyse it - Int_t assparticle[nmaxtracksinset]; - Float_t exptof[nmaxtracksinset][3]; - Float_t timeofflight[nmaxtracksinset]; - Float_t momentum[nmaxtracksinset]; - Float_t timezero[nmaxtracksinset]; - Float_t weightedtimezero[nmaxtracksinset]; - Float_t beta[nmaxtracksinset]; - Float_t texp[nmaxtracksinset]; - Float_t dtexp[nmaxtracksinset]; - Float_t sqMomError[nmaxtracksinset]; - Float_t sqTrackError[nmaxtracksinset]; + Int_t assparticle[nmaxtracksinsetMax]; + Float_t exptof[nmaxtracksinsetMax][3]; + Float_t timeofflight[nmaxtracksinsetMax]; + Float_t momentum[nmaxtracksinsetMax]; + Float_t timezero[nmaxtracksinsetMax]; + Float_t weightedtimezero[nmaxtracksinsetMax]; + Float_t beta[nmaxtracksinsetMax]; + Float_t texp[nmaxtracksinsetMax]; + Float_t dtexp[nmaxtracksinsetMax]; + Float_t sqMomError[nmaxtracksinsetMax]; + Float_t sqTrackError[nmaxtracksinsetMax]; Float_t massarray[3]={0.13957,0.493677,0.9382723}; - Float_t tracktoflen[nmaxtracksinset]; - Float_t besttimezero[nmaxtracksinset]; - Float_t besttexp[nmaxtracksinset]; - Float_t besttimeofflight[nmaxtracksinset]; - Float_t bestmomentum[nmaxtracksinset]; - Float_t bestchisquare[nmaxtracksinset]; - Float_t bestweightedtimezero[nmaxtracksinset]; - Float_t bestsqTrackError[nmaxtracksinset]; - Int_t imass[nmaxtracksinset]; + Float_t tracktoflen[nmaxtracksinsetMax]; + Float_t besttimezero[nmaxtracksinsetMax]; + Float_t besttexp[nmaxtracksinsetMax]; + Float_t besttimeofflight[nmaxtracksinsetMax]; + Float_t bestmomentum[nmaxtracksinsetMax]; + Float_t bestchisquare[nmaxtracksinsetMax]; + Float_t bestweightedtimezero[nmaxtracksinsetMax]; + Float_t bestsqTrackError[nmaxtracksinsetMax]; + Int_t imass[nmaxtracksinsetMax]; for (Int_t j=0; j %f (chi2total = %f w.r.t. the limit of %f)\n",chi2singlecut,chisquarebest,chi2cut[ntracksinsetmy-1]); + // printf("tracks removed with a chi2 > %f (chi2total = %f w.r.t. the limit of %f)\n",chi2singlecut,chisquarebest,chi2cut[ntracksinsetmy-1]); Bool_t kRedoT0 = kFALSE; ntracksinsetmyCut = ntracksinsetmy; - Bool_t usetrack[nmaxtracksinset]; + Bool_t usetrack[nmaxtracksinsetMax]; for (Int_t icsq=0; icsq chisquarebest*0.5 && ntracksinsetmy > 2) || (bestchisquare[icsq] > chi2singlecut)){ @@ -934,7 +918,7 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut } // end loop for (Int_t icsq=0; icsq<15;icsq++) // printf("ntrackinsetmy = %i - %i\n",ntracksinsetmy,ntracksinsetmyCut); - + // Loop on mass hypotheses Redo if(kRedoT0 && ntracksinsetmyCut > 1){ // printf("Redo T0\n"); @@ -951,10 +935,7 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut for (Int_t itz=0; itz1% // if(confLevel>0.01 && ngoodsetsSel<200){ if(confLevel>0.01 && ngoodsetsSel<200){ @@ -1044,7 +1028,8 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut t0bestallSel += t0best/eT0best/eT0best; sumWt0bestallSel += 1./eT0best/eT0best; ngoodsetsSel++; - ngoodtrktrulyused+=ntracksinsetmyCut; + ngoodtrktrulyused+=ntracksinsetmyCut; + // printf("T0 set = %f +/- %f\n",t0best,eT0best); } else{ // printf("conflevel = %f -- ngoodsetsSel = %i -- ntrackset = %i\n",confLevel,ngoodsetsSel,ntracksinsetmy); @@ -1062,10 +1047,12 @@ Double_t * AliTOFT0v1::DefineT0(Option_t *option,Float_t pMinCut,Float_t pMaxCut eMeanTzeroPi=sqrt(1./sumAllweightspi); // it is given in [ns] } + // printf("t0bestallSel = %f -- eT0bestallSel = %f\n",t0bestallSel,sumWt0bestallSel); + if(sumWt0bestallSel>0){ t0bestallSel = t0bestallSel/sumWt0bestallSel; eT0bestallSel = sqrt(1./sumWt0bestallSel); - + // printf("Final) t0bestallSel = %f -- eT0bestallSel = %f\n",t0bestallSel,eT0bestallSel); }// end of if(sumWt0bestallSel>0){ // cout << "T0 all " << t0bestallSel << " +/- " << eT0bestallSel << "Number of tracks used: "<Stop("t0computation"); + + fT0SigmaT0def[4]=bench->GetRealTime("t0computation"); + fT0SigmaT0def[5]=bench->GetCpuTime("t0computation"); + +// bench->Print("t0computation"); +// printf("(%4.1f < p < %4.1f GeV/c) T0-TOF =%9.1f +/- %5.1f ps (n_track = %i)\n\n",pMinCut,pMaxCut,-fT0SigmaT0def[0]*1000,fT0SigmaT0def[1]*1000,Int_t(fT0SigmaT0def[3])); + + bench->Reset(); return fT0SigmaT0def; } @@ -1102,11 +1096,8 @@ Float_t AliTOFT0v1::GetMomError(Int_t index, Float_t mom, Float_t texp) const }; Double_t mass=kMasses[index+2]; - Double_t dpp=0.02; //mean relative pt resolution; - // if(mom > 1) dpp = 0.02*mom; - Double_t sigma=dpp*texp*1E3/(1.+ mom*mom/(mass*mass)); - sigma =TMath::Sqrt(sigma*sigma); + Float_t sigma = fPIDesd->GetTOFResponse().GetExpectedSigma(mom,texp,mass); return sigma; }