X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TPC%2FAliTPCcalibTime.cxx;h=e06510db53da3a7c6cc7ccdb970ced90345945fd;hb=f5b043b1a91e7b152052bf5122c4a703e0868bf9;hp=54947f826f1dc5abf75a935c5ab1524a2a122db1;hpb=b842d9046a70b55573cc42aca2c70cc028c5bc97;p=u%2Fmrichter%2FAliRoot.git diff --git a/TPC/AliTPCcalibTime.cxx b/TPC/AliTPCcalibTime.cxx index 54947f826f1..e06510db53d 100644 --- a/TPC/AliTPCcalibTime.cxx +++ b/TPC/AliTPCcalibTime.cxx @@ -66,49 +66,36 @@ Comments to be written here: */ #include "Riostream.h" -#include "TChain.h" -#include "TTree.h" +#include "TDatabasePDG.h" +#include "TGraphErrors.h" #include "TH1F.h" -#include "TH2F.h" -#include "TH3F.h" #include "THnSparse.h" #include "TList.h" #include "TMath.h" -#include "TCanvas.h" -#include "TFile.h" -#include "TF1.h" +#include "TTimeStamp.h" +#include "TTree.h" #include "TVectorD.h" -#include "TProfile.h" -#include "TGraphErrors.h" -#include "TCanvas.h" -#include "AliTPCclusterMI.h" -#include "AliTPCseed.h" -#include "AliESDVertex.h" +//#include "TChain.h" +//#include "TFile.h" + +#include "AliDCSSensor.h" +#include "AliDCSSensorArray.h" #include "AliESDEvent.h" -#include "AliESDfriend.h" #include "AliESDInputHandler.h" -#include "AliAnalysisManager.h" - -#include "AliTracker.h" -#include "AliMagF.h" -#include "AliTPCCalROC.h" -#include "AliTPCParam.h" - +#include "AliESDVertex.h" +#include "AliESDfriend.h" #include "AliLog.h" - -#include "AliTPCcalibTime.h" #include "AliRelAlignerKalman.h" - -#include "TTreeStream.h" +#include "AliTPCCalROC.h" +#include "AliTPCParam.h" #include "AliTPCTracklet.h" -#include "TTimeStamp.h" #include "AliTPCcalibDB.h" #include "AliTPCcalibLaser.h" -#include "AliDCSSensorArray.h" -#include "AliDCSSensor.h" - -#include "TDatabasePDG.h" +#include "AliTPCcalibTime.h" +#include "AliTPCclusterMI.h" +#include "AliTPCseed.h" #include "AliTrackPointArray.h" +#include "AliTracker.h" ClassImp(AliTPCcalibTime) @@ -138,10 +125,10 @@ AliTPCcalibTime::AliTPCcalibTime() fRunBins(0), fRunStart(0), fRunEnd(0) -// fBinsVdrift(fTimeBins,fPtBins,fVdriftBins), -// fXminVdrift(fTimeStart,fPtStart,fVdriftStart), -// fXmaxVdrift(fTimeEnd,fPtEnd,fVdriftEnd) { + // + // default constructor + // AliInfo("Default Constructor"); for (Int_t i=0;i<3;i++) { fHistVdriftLaserA[i]=0; @@ -150,6 +137,15 @@ AliTPCcalibTime::AliTPCcalibTime() for (Int_t i=0;i<10;i++) { fCosmiMatchingHisto[i]=0; } + // + for (Int_t i=0;i<5;i++) { + fResHistoTPCCE[i]=0; + fResHistoTPCITS[i]=0; + fResHistoTPCTRD[i]=0; + fResHistoTPCTOF[i]=0; + fResHistoTPCvertex[i]=0; + } + } AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, UInt_t StartTime, UInt_t EndTime, Int_t deltaIntegrationTimeVdrift) @@ -178,6 +174,10 @@ AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, UInt_t fRunStart(0), fRunEnd(0) { + // + // Non deafaul constructor - to be used in the Calibration setups + // + SetName(name); SetTitle(title); for (Int_t i=0;i<3;i++) { @@ -185,6 +185,15 @@ AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, UInt_t fHistVdriftLaserC[i]=0; } + for (Int_t i=0;i<5;i++) { + fResHistoTPCCE[i]=0; + fResHistoTPCITS[i]=0; + fResHistoTPCTRD[i]=0; + fResHistoTPCTOF[i]=0; + fResHistoTPCvertex[i]=0; + } + + AliInfo("Non Default Constructor"); fTimeBins =(EndTime-StartTime)/deltaIntegrationTimeVdrift; fTimeStart =StartTime; //(((TObjString*)(mapGRP->GetValue("fAliceStartTime")))->GetString()).Atoi(); @@ -246,12 +255,6 @@ AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, UInt_t fAlignTRDTPC->SetOwner(kTRUE); fAlignTOFTPC->SetOwner(kTRUE); - // fArrayDz->AddLast(fHistVdriftLaserA[0]); -// fArrayDz->AddLast(fHistVdriftLaserA[1]); -// fArrayDz->AddLast(fHistVdriftLaserA[2]); -// fArrayDz->AddLast(fHistVdriftLaserC[0]); -// fArrayDz->AddLast(fHistVdriftLaserC[1]); -// fArrayDz->AddLast(fHistVdriftLaserC[2]); fCosmiMatchingHisto[0]=new TH1F("Cosmics matching","p0-all" ,100,-10*0.5356 ,10*0.5356 ); fCosmiMatchingHisto[1]=new TH1F("Cosmics matching","p1-all" ,100,-10*4.541 ,10*4.541 ); @@ -263,17 +266,12 @@ AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, UInt_t fCosmiMatchingHisto[7]=new TH1F("Cosmics matching","p2-isPair",100,-10*0.01134 ,10*0.01134 ); fCosmiMatchingHisto[8]=new TH1F("Cosmics matching","p3-isPair",100,-10*0.004644,10*0.004644); fCosmiMatchingHisto[9]=new TH1F("Cosmics matching","p4-isPair",100,-10*0.03773 ,10*0.03773 ); -// Char_t nameHisto[3]={'p','0','\n'}; -// for (Int_t i=0;i<10;i++){ -// fCosmiMatchingHisto[i]=new TH1F("Cosmics matching",nameHisto,8192,0,0); -// nameHisto[1]++; -// if(i==4) nameHisto[1]='0'; -// } + BookDistortionMaps(); } AliTPCcalibTime::~AliTPCcalibTime(){ // - // Destructor + // Virtual Destructor // for(Int_t i=0;i<3;i++){ if(fHistVdriftLaserA[i]){ @@ -297,6 +295,21 @@ AliTPCcalibTime::~AliTPCcalibTime(){ fCosmiMatchingHisto[i]=NULL; } } + + for (Int_t i=0;i<5;i++) { + delete fResHistoTPCCE[i]; + delete fResHistoTPCITS[i]; + delete fResHistoTPCTRD[i]; + delete fResHistoTPCTOF[i]; + delete fResHistoTPCvertex[i]; + fResHistoTPCCE[i]=0; + fResHistoTPCITS[i]=0; + fResHistoTPCTRD[i]=0; + fResHistoTPCTOF[i]=0; + fResHistoTPCvertex[i]=0; + } + + fAlignITSTPC->SetOwner(kTRUE); fAlignTRDTPC->SetOwner(kTRUE); fAlignTOFTPC->SetOwner(kTRUE); @@ -309,19 +322,36 @@ AliTPCcalibTime::~AliTPCcalibTime(){ delete fAlignTOFTPC; } -Bool_t AliTPCcalibTime::IsLaser(AliESDEvent */*event*/){ +Bool_t AliTPCcalibTime::IsLaser(const AliESDEvent *const /*event*/){ + // + // Indicator is laser event not yet implemented - to be done using trigger info or event specie + // return kTRUE; //More accurate creteria to be added } -Bool_t AliTPCcalibTime::IsCosmics(AliESDEvent */*event*/){ +Bool_t AliTPCcalibTime::IsCosmics(const AliESDEvent *const /*event*/){ + // + // Indicator is cosmic event not yet implemented - to be done using trigger info or event specie + // + return kTRUE; //More accurate creteria to be added } -Bool_t AliTPCcalibTime::IsBeam(AliESDEvent */*event*/){ +Bool_t AliTPCcalibTime::IsBeam(const AliESDEvent *const /*event*/){ + // + // Indicator is physic event not yet implemented - to be done using trigger info or event specie + // + return kTRUE; //More accurate creteria to be added } void AliTPCcalibTime::ResetCurrent(){ fDz=0; //Reset current dz } + + + void AliTPCcalibTime::Process(AliESDEvent *event){ + // + // main function to make calibration + // if(!event) return; if (event->GetNumberOfTracks()<2) return; ResetCurrent(); @@ -384,36 +414,12 @@ void AliTPCcalibTime::ProcessLaser(AliESDEvent *event){ TTreeSRedirector *cstream = GetDebugStreamer(); if (cstream){ TTimeStamp tstamp(fTime); - Float_t valuePressure0 = AliTPCcalibDB::GetPressure(tstamp,fRun,0); - Float_t valuePressure1 = AliTPCcalibDB::GetPressure(tstamp,fRun,1); - Double_t ptrelative0 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,0); - Double_t ptrelative1 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,1); - Double_t temp0 = AliTPCcalibDB::GetTemperature(tstamp,fRun,0); - Double_t temp1 = AliTPCcalibDB::GetTemperature(tstamp,fRun,1); - Double_t vdcorr = AliTPCcalibDB::Instance()->GetVDriftCorrectionTime(tstamp,fRun,0,1); - TVectorD vecGoofie(20); - AliDCSSensorArray* goofieArray = AliTPCcalibDB::Instance()->GetGoofieSensors(fRun); - if (goofieArray){ - for (Int_t isensor=0; isensorNumSensors();isensor++){ - AliDCSSensor *gsensor = goofieArray->GetSensor(isensor); - if (gsensor) vecGoofie[isensor]=gsensor->GetValue(tstamp); - } - } (*cstream)<<"laserInfo"<< "run="<Fill(vecDrift); } -void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event){ +void AliTPCcalibTime::ProcessCosmic(const AliESDEvent *const event){ + // + // process Cosmic event - track matching A side C side + // if (!event) { Printf("ERROR: ESD not available"); return; @@ -517,7 +528,7 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event){ if (ntracks > fCutTracks) return; if (GetDebugLevel()>20) printf("Hallo world: Im here\n"); - AliESDfriend *ESDfriend=static_cast(event->FindListObject("AliESDfriend")); + AliESDfriend *esdFriend=(AliESDfriend*)(((AliESDEvent*)event)->FindListObject("AliESDfriend")); TObjArray tpcSeeds(ntracks); Double_t vtxx[3]={0,0,0}; @@ -538,9 +549,10 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event){ if (!trackIn) continue; if (!trackOut) continue; - AliESDfriendTrack *friendTrack = ESDfriend->GetTrack(i); + AliESDfriendTrack *friendTrack = esdFriend->GetTrack(i); + if (!friendTrack) continue; if (friendTrack) ProcessSame(track,friendTrack,event); - if (friendTrack) ProcessAlignITS(track,friendTrack,event,ESDfriend); + if (friendTrack) ProcessAlignITS(track,friendTrack,event,esdFriend); if (friendTrack) ProcessAlignTRD(track,friendTrack); if (friendTrack) ProcessAlignTOF(track,friendTrack); TObject *calibObject; @@ -619,8 +631,8 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event){ // // Propagate using Magnetic field and correct fo material budget // - AliTracker::PropagateTrackTo(¶m0,dmax+1,0.0005,3,kTRUE); - AliTracker::PropagateTrackTo(¶m1,dmax+1,0.0005,3,kTRUE); + AliTracker::PropagateTrackTo(¶m0,dmax+1,TDatabasePDG::Instance()->GetParticle("e-")->Mass(),3,kTRUE); + AliTracker::PropagateTrackTo(¶m1,dmax+1,TDatabasePDG::Instance()->GetParticle("e-")->Mass(),3,kTRUE); // // Propagate rest to the 0,0 DCA - z should be ignored // @@ -715,22 +727,6 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event){ if (fStreamLevel>0){ TTreeSRedirector *cstream = GetDebugStreamer(); if (cstream){ - TTimeStamp tstamp(fTime); - Float_t valuePressure0 = AliTPCcalibDB::GetPressure(tstamp,fRun,0); - Float_t valuePressure1 = AliTPCcalibDB::GetPressure(tstamp,fRun,1); - Double_t ptrelative0 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,0); - Double_t ptrelative1 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,1); - Double_t temp0 = AliTPCcalibDB::GetTemperature(tstamp,fRun,0); - Double_t temp1 = AliTPCcalibDB::GetTemperature(tstamp,fRun,1); - Double_t vdcorr = AliTPCcalibDB::Instance()->GetVDriftCorrectionTime(tstamp,fRun,0,1); - TVectorD vecGoofie(20); - AliDCSSensorArray* goofieArray = AliTPCcalibDB::Instance()->GetGoofieSensors(fRun); - if (goofieArray){ - for (Int_t isensor=0; isensorNumSensors();isensor++){ - AliDCSSensor *gsensor = goofieArray->GetSensor(isensor); - if (gsensor) vecGoofie[isensor]=gsensor->GetValue(tstamp); - } - } (*cstream)<<"timeInfo"<< "run="<GetFiredTriggerClasses().Data()); } -void AliTPCcalibTime::ProcessBeam(AliESDEvent */*event*/){ +void AliTPCcalibTime::ProcessBeam(const AliESDEvent *const /*event*/){ + // + // Not special treatment yet - the same for cosmic and physic event + // } -void AliTPCcalibTime::Analyze(){} +void AliTPCcalibTime::Analyze(){ + // + // Special macro to analyze result of calibration and extract calibration entries + // Not yet ported to the Analyze function yet + // +} -THnSparse* AliTPCcalibTime::GetHistoDrift(const char* name){ +THnSparse* AliTPCcalibTime::GetHistoDrift(const char* name) const +{ + // + // Get histogram for given trigger mask + // TIterator* iterator = fArrayDz->MakeIterator(); iterator->Reset(); TString newName=name; @@ -779,11 +779,18 @@ THnSparse* AliTPCcalibTime::GetHistoDrift(const char* name){ return newHist; } -TObjArray* AliTPCcalibTime::GetHistoDrift(){ +TObjArray* AliTPCcalibTime::GetHistoDrift() const +{ + // + // return array of histograms + // return fArrayDz; } TGraphErrors* AliTPCcalibTime::GetGraphDrift(const char* name){ + // + // Make a drift velocity (delta Z) graph + // THnSparse* histoDrift=GetHistoDrift(name); TGraphErrors* graphDrift=NULL; if(histoDrift){ @@ -800,6 +807,9 @@ TGraphErrors* AliTPCcalibTime::GetGraphDrift(const char* name){ } TObjArray* AliTPCcalibTime::GetGraphDrift(){ + // + // make a array of drift graphs + // TObjArray* arrayGraphDrift=new TObjArray(); TIterator* iterator=fArrayDz->MakeIterator(); iterator->Reset(); @@ -809,6 +819,9 @@ TObjArray* AliTPCcalibTime::GetGraphDrift(){ } AliSplineFit* AliTPCcalibTime::GetFitDrift(const char* name){ + // + // Make a fit AliSplinefit of drift velocity + // TGraph* graphDrift=GetGraphDrift(name); AliSplineFit* fitDrift=NULL; if(graphDrift && graphDrift->GetN()){ @@ -830,16 +843,11 @@ AliSplineFit* AliTPCcalibTime::GetFitDrift(const char* name){ return fitDrift; } -//TObjArray* AliTPCcalibTime::GetFitDrift(){ -// TObjArray* arrayFitDrift=new TObjArray(); -// TIterator* iterator = fArrayDz->MakeIterator(); -// iterator->Reset(); -// THnSparse* addHist=NULL; -// while((addHist=(THnSparseF*)iterator->Next())) arrayFitDrift->AddLast(GetFitDrift(addHist->GetName())); -// return arrayFitDrift; -//} -Long64_t AliTPCcalibTime::Merge(TCollection *li) { +Long64_t AliTPCcalibTime::Merge(TCollection *const li) { + // + // Object specific merging procedure + // TIterator* iter = li->MakeIterator(); AliTPCcalibTime* cal = 0; @@ -854,6 +862,30 @@ Long64_t AliTPCcalibTime::Merge(TCollection *li) { fHistVdriftLaserC[imeas]->Add(cal->GetHistVdriftLaserC(imeas)); } } + // + for (Int_t imeas=0; imeas<5; imeas++){ + if (cal->GetResHistoTPCCE(imeas) && cal->GetResHistoTPCCE(imeas)){ + fResHistoTPCCE[imeas]->Add(cal->fResHistoTPCCE[imeas]); + }else{ + fResHistoTPCCE[imeas]=(THnSparse*)cal->fResHistoTPCCE[imeas]->Clone(); + } + if (cal->GetResHistoTPCITS(imeas) && cal->GetResHistoTPCITS(imeas)){ + fResHistoTPCITS[imeas]->Add(cal->fResHistoTPCITS[imeas]); + fResHistoTPCvertex[imeas]->Add(cal->fResHistoTPCvertex[imeas]); + } + if (cal->fResHistoTPCTRD[imeas]){ + if (fResHistoTPCTRD[imeas]) + fResHistoTPCTRD[imeas]->Add(cal->fResHistoTPCTRD[imeas]); + else + fResHistoTPCTRD[imeas]=(THnSparse*)cal->fResHistoTPCTRD[imeas]->Clone(); + } + if (cal->fResHistoTPCTOF[imeas]){ + if (fResHistoTPCTOF[imeas]) + fResHistoTPCTOF[imeas]->Add(cal->fResHistoTPCTOF[imeas]); + else + fResHistoTPCTOF[imeas]=(THnSparse*)cal->fResHistoTPCTOF[imeas]->Clone(); + } + } TObjArray* addArray=cal->GetHistoDrift(); if(!addArray) return 0; TIterator* iterator = addArray->MakeIterator(); @@ -869,22 +901,7 @@ Long64_t AliTPCcalibTime::Merge(TCollection *li) { } localHist->Add(addHist); } -// TMap * addMap=cal->GetHistoDrift(); -// if(!addMap) return 0; -// TIterator* iterator = addMap->MakeIterator(); -// iterator->Reset(); -// TPair* addPair=0; -// while((addPair=(TPair *)(addMap->FindObject(iterator->Next())))){ -// THnSparse* addHist=dynamic_cast(addPair->Value()); -// if (!addHist) continue; -// addHist->Print(); -// THnSparse* localHist=dynamic_cast(fMapDz->GetValue(addHist->GetName())); -// if(!localHist){ -// localHist=new THnSparseF(addHist->GetName(),"HistVdrift;time;p/T ratio;Vdrift;run",4,fBinsVdrift,fXminVdrift,fXmaxVdrift); -// fMapDz->Add(new TObjString(addHist->GetName()),localHist); -// } -// localHist->Add(addHist); -// } + for(Int_t i=0;i<10;i++) if (cal->GetCosmiMatchingHisto(i)) fCosmiMatchingHisto[i]->Add(cal->GetCosmiMatchingHisto(i)); // // Merge alignment @@ -953,7 +970,7 @@ Bool_t AliTPCcalibTime::IsPair(AliExternalTrackParam *tr0, AliExternalTrackPara return kTRUE; } -Bool_t AliTPCcalibTime::IsCross(AliESDtrack *tr0, AliESDtrack *tr1){ +Bool_t AliTPCcalibTime::IsCross(AliESDtrack *const tr0, AliESDtrack *const tr1){ // // check if the cosmic pair of tracks crossed A/C side // @@ -963,7 +980,7 @@ Bool_t AliTPCcalibTime::IsCross(AliESDtrack *tr0, AliESDtrack *tr1){ return result; } -Bool_t AliTPCcalibTime::IsSame(AliESDtrack *tr0, AliESDtrack *tr1){ +Bool_t AliTPCcalibTime::IsSame(AliESDtrack *const tr0, AliESDtrack *const tr1){ // // track crossing the CE // 0. minimal number of clusters @@ -1016,16 +1033,21 @@ Bool_t AliTPCcalibTime::IsSame(AliESDtrack *tr0, AliESDtrack *tr1){ } -void AliTPCcalibTime::ProcessSame(AliESDtrack* track, AliESDfriendTrack *friendTrack,AliESDEvent *event){ +void AliTPCcalibTime::ProcessSame(AliESDtrack *const track, AliESDfriendTrack *const friendTrack, const AliESDEvent *const event){ // // Process TPC tracks crossing CE // // 0. Select only track crossing the CE // 1. Cut on the track length - // 2. Refit the terack on A and C side separatelly + // 2. Refit the the track on A and C side separatelly // 3. Fill time histograms const Int_t kMinNcl=100; const Int_t kMinNclS=25; // minimul number of clusters on the sides + const Double_t pimass=TDatabasePDG::Instance()->GetParticle("pi+")->Mass(); + const Double_t kMaxDy=1; // maximal distance in y + const Double_t kMaxDsnp=0.05; // maximal distance in snp + const Double_t kMaxDtheta=0.05; // maximal distance in theta + if (!friendTrack->GetTPCOut()) return; // // 0. Select only track crossing the CE @@ -1051,17 +1073,22 @@ void AliTPCcalibTime::ProcessSame(AliESDtrack* track, AliESDfriendTrack *friend Double_t xyz[3]={0,0.,0.0}; Double_t bz =0; Int_t nclIn=0,nclOut=0; - trackIn.ResetCovariance(30.); - trackOut.ResetCovariance(30.); + trackIn.ResetCovariance(10.); + trackOut.ResetCovariance(10.); // //2.a Refit inner // + Int_t sideIn=0; for (Int_t irow=0;irow<159;irow++) { AliTPCclusterMI *cl=seed->GetClusterPointer(irow); if (!cl) continue; if (cl->GetX()<80) continue; - if (track->GetInnerParam()->GetZ()<0 &&(cl->GetDetector()%36)<18) break; - if (track->GetInnerParam()->GetZ()>0 &&(cl->GetDetector()%36)>=18) break; + if (sideIn==0){ + if (cl->GetDetector()%36<18) sideIn=1; + if (cl->GetDetector()%36>=18) sideIn=-1; + } + if (sideIn== -1 && (cl->GetDetector()%36)<18) break; + if (sideIn== 1 &&(cl->GetDetector()%36)>=18) break; Int_t sector = cl->GetDetector(); Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackIn.GetAlpha(); if (TMath::Abs(dalpha)>0.01){ @@ -1070,20 +1097,27 @@ void AliTPCcalibTime::ProcessSame(AliESDtrack* track, AliESDfriendTrack *friend Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()}; trackIn.GetXYZ(xyz); bz = AliTracker::GetBz(xyz); + AliTracker::PropagateTrackToBxByBz(&trackIn,r[0],1.,pimass,kFALSE); if (!trackIn.PropagateTo(r[0],bz)) break; nclIn++; trackIn.Update(&r[1],cov); } // //2.b Refit outer - // + // + Int_t sideOut=0; for (Int_t irow=159;irow>0;irow--) { AliTPCclusterMI *cl=seed->GetClusterPointer(irow); if (!cl) continue; if (cl->GetX()<80) continue; - if (cl->GetZ()*track->GetOuterParam()->GetZ()<0) break; - if (friendTrack->GetTPCOut()->GetZ()<0 &&(cl->GetDetector()%36)<18) break; - if (friendTrack->GetTPCOut()->GetZ()>0 &&(cl->GetDetector()%36)>=18) break; + if (sideOut==0){ + if (cl->GetDetector()%36<18) sideOut=1; + if (cl->GetDetector()%36>=18) sideOut=-1; + if (sideIn==sideOut) break; + } + if (sideOut== -1 && (cl->GetDetector()%36)<18) break; + if (sideOut== 1 &&(cl->GetDetector()%36)>=18) break; + // Int_t sector = cl->GetDetector(); Float_t dalpha = TMath::DegToRad()*(sector%18*20.+10.)-trackOut.GetAlpha(); if (TMath::Abs(dalpha)>0.01){ @@ -1092,6 +1126,7 @@ void AliTPCcalibTime::ProcessSame(AliESDtrack* track, AliESDfriendTrack *friend Double_t r[3]={cl->GetX(),cl->GetY(),cl->GetZ()}; trackOut.GetXYZ(xyz); bz = AliTracker::GetBz(xyz); + AliTracker::PropagateTrackToBxByBz(&trackOut,r[0],1.,pimass,kFALSE); if (!trackOut.PropagateTo(r[0],bz)) break; nclOut++; trackOut.Update(&r[1],cov); @@ -1100,24 +1135,26 @@ void AliTPCcalibTime::ProcessSame(AliESDtrack* track, AliESDfriendTrack *friend Double_t meanX = (trackIn.GetX()+trackOut.GetX())*0.5; trackIn.PropagateTo(meanX,bz); trackOut.PropagateTo(meanX,bz); + if (TMath::Abs(trackIn.GetY()-trackOut.GetY())>kMaxDy) return; + if (TMath::Abs(trackIn.GetSnp()-trackOut.GetSnp())>kMaxDsnp) return; + if (TMath::Abs(trackIn.GetTgl()-trackOut.GetTgl())>kMaxDtheta) return; + if (TMath::Min(nclIn,nclOut)>kMinNclS){ + FillResHistoTPCCE(&trackIn,&trackOut); + } TTreeSRedirector *cstream = GetDebugStreamer(); if (cstream){ TVectorD gxyz(3); trackIn.GetXYZ(gxyz.GetMatrixArray()); TTimeStamp tstamp(fTime); - Double_t ptrelative0 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,0); - Double_t ptrelative1 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,1); - Double_t vdcorr = AliTPCcalibDB::Instance()->GetVDriftCorrectionTime(tstamp,fRun,0,1); (*cstream)<<"tpctpc"<< "run="<Mass(); Int_t npoints = points->GetNPoints(); @@ -1571,7 +1579,7 @@ void AliTPCcalibTime::ProcessAlignTOF(AliESDtrack* track, AliESDfriendTrack *fr // if (track->GetTPCNcls()GetOuterParam()->GetZ()*track->GetInnerParam()->GetZ()<0) return; + if (friendTrack->GetTPCOut()->GetZ()*track->GetInnerParam()->GetZ()<0) return; // if (TMath::Abs(pTOF.GetY()-pTPC.GetY()) >kMaxDy) return; if (TMath::Abs(pTOF.GetSnp()-pTPC.GetSnp())>kMaxAngle) return; @@ -1579,7 +1587,7 @@ void AliTPCcalibTime::ProcessAlignTOF(AliESDtrack* track, AliESDfriendTrack *fr // // 1. Update median and RMS info // - TVectorD vecDelta(4),vecMedian(4), vecRMS(4); + TVectorD vecDelta(5),vecMedian(5), vecRMS(5); TVectorD vecDeltaN(5); Double_t sign=(pTOF.GetParameter()[1]>0)? 1.:-1.; vecDelta[4]=0; @@ -1609,7 +1617,7 @@ void AliTPCcalibTime::ProcessAlignTOF(AliESDtrack* track, AliESDfriendTrack *fr // 3. Update alignment // Int_t htime = fTime/3600; //time in hours - if (fAlignTOFTPC->GetEntries()GetEntriesFast()Expand(htime*2+20); } AliRelAlignerKalman* align = (AliRelAlignerKalman*)fAlignTOFTPC->At(htime); @@ -1626,6 +1634,11 @@ void AliTPCcalibTime::ProcessAlignTOF(AliESDtrack* track, AliESDfriendTrack *fr fAlignTOFTPC->AddAt(align,htime); } align->AddTrackParams(&pTOF,&pTPC); + Float_t dca[2],cov[3]; + track->GetImpactParameters(dca,cov); + if (TMath::Abs(dca[0])SetTimeStamp(fTime); align->SetRunNumber(fRun ); // @@ -1634,43 +1647,18 @@ void AliTPCcalibTime::ProcessAlignTOF(AliESDtrack* track, AliESDfriendTrack *fr align->SetRejectOutliers(kFALSE); TTreeSRedirector *cstream = GetDebugStreamer(); if (cstream && align->GetState() && align->GetState()->GetNrows()>2 ){ - TTimeStamp tstamp(fTime); - Float_t valuePressure0 = AliTPCcalibDB::GetPressure(tstamp,fRun,0); - Float_t valuePressure1 = AliTPCcalibDB::GetPressure(tstamp,fRun,1); - Double_t ptrelative0 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,0); - Double_t ptrelative1 = AliTPCcalibDB::GetPTRelative(tstamp,fRun,1); - Double_t temp0 = AliTPCcalibDB::GetTemperature(tstamp,fRun,0); - Double_t temp1 = AliTPCcalibDB::GetTemperature(tstamp,fRun,1); - TVectorD vecGoofie(20); - AliDCSSensorArray* goofieArray = AliTPCcalibDB::Instance()->GetGoofieSensors(fRun); - if (goofieArray){ - for (Int_t isensor=0; isensorNumSensors();isensor++){ - AliDCSSensor *gsensor = goofieArray->GetSensor(isensor); - if (gsensor) vecGoofie[isensor]=gsensor->GetValue(tstamp); - } - } TVectorD gpTPC(3), gdTPC(3); TVectorD gpTOF(3), gdTOF(3); pTPC.GetXYZ(gpTPC.GetMatrixArray()); pTPC.GetDirection(gdTPC.GetMatrixArray()); pTOF.GetXYZ(gpTOF.GetMatrixArray()); pTOF.GetDirection(gdTOF.GetMatrixArray()); - Double_t vdcorr = AliTPCcalibDB::Instance()->GetVDriftCorrectionTime(tstamp,fRun,0,1); (*cstream)<<"toftpc"<< "run="<GetAxis(ivar2)->SetName(axisName[ivar2].Data()); + fResHistoTPCCE[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data()); + if (ivar2<4){ + fResHistoTPCITS[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data()); + fResHistoTPCITS[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data()); + fResHistoTPCTRD[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data()); + fResHistoTPCTRD[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data()); + fResHistoTPCvertex[ivar]->GetAxis(ivar2)->SetName(axisName[ivar2].Data()); + fResHistoTPCvertex[ivar]->GetAxis(ivar2)->SetTitle(axisTitle[ivar2].Data()); + } + } + } +} + + +void AliTPCcalibTime::FillResHistoTPCCE(const AliExternalTrackParam * pTPCIn, const AliExternalTrackParam * pTPCOut ){ + // + // fill residual histograms pTPCOut-pTPCin - trac crossing CE + // Histogram + // + Double_t histoX[5]; + Double_t xyz[3]; + pTPCIn->GetXYZ(xyz); + Double_t phi= TMath::ATan2(xyz[1],xyz[0]); + histoX[1]= pTPCIn->GetTgl(); + histoX[2]= phi; + histoX[3]= pTPCIn->GetSnp(); + histoX[4]= pTPCIn->GetX(); + AliExternalTrackParam lout(*pTPCOut); + lout.Rotate(pTPCIn->GetAlpha()); + lout.PropagateTo(pTPCIn->GetX(),fMagF); + // + for (Int_t ihisto=0; ihisto<5; ihisto++){ + histoX[0]=lout.GetParameter()[ihisto]-pTPCIn->GetParameter()[ihisto]; + fResHistoTPCCE[ihisto]->Fill(histoX); + } +} +void AliTPCcalibTime::FillResHistoTPCITS(const AliExternalTrackParam * pTPCIn, const AliExternalTrackParam * pITSOut ){ + // + // fill residual histograms pTPCIn-pITSOut + // Histogram is filled only for primary tracks + // + Double_t histoX[4]; + Double_t xyz[3]; + pTPCIn->GetXYZ(xyz); + Double_t phi= TMath::ATan2(xyz[1],xyz[0]); + histoX[1]= pTPCIn->GetTgl(); + histoX[2]= phi; + histoX[3]= pTPCIn->GetSnp(); + AliExternalTrackParam lits(*pITSOut); + lits.Rotate(pTPCIn->GetAlpha()); + lits.PropagateTo(pTPCIn->GetX(),fMagF); + // + for (Int_t ihisto=0; ihisto<5; ihisto++){ + histoX[0]=pTPCIn->GetParameter()[ihisto]-lits.GetParameter()[ihisto]; + fResHistoTPCITS[ihisto]->Fill(histoX); + } +} + + +void AliTPCcalibTime::FillResHistoTPC(const AliESDtrack * pTrack){ + // + // fill residual histograms pTPC - vertex + // Histogram is filled only for primary tracks + // + Double_t histoX[4]; + const AliExternalTrackParam * pTPCIn = pTrack->GetInnerParam(); + AliExternalTrackParam pTPCvertex(*(pTrack->GetInnerParam())); + // + AliExternalTrackParam lits(*pTrack); + if (TMath::Abs(pTrack->GetY())>3) return; // beam pipe + pTPCvertex.Rotate(lits.GetAlpha()); + //pTPCvertex.PropagateTo(pTPCvertex->GetX(),fMagF); + AliTracker::PropagateTrackToBxByBz(&pTPCvertex,lits.GetX(),0.1,2,kFALSE); + AliTracker::PropagateTrackToBxByBz(&pTPCvertex,lits.GetX(),0.1,0.1,kFALSE); + Double_t xyz[3]; + pTPCIn->GetXYZ(xyz); + Double_t phi= TMath::ATan2(xyz[1],xyz[0]); + histoX[1]= pTPCIn->GetTgl(); + histoX[2]= phi; + histoX[3]= pTPCIn->GetSnp(); + // + Float_t dca[2], cov[3]; + pTrack->GetImpactParametersTPC(dca,cov); + for (Int_t ihisto=0; ihisto<5; ihisto++){ + histoX[0]=pTPCvertex.GetParameter()[ihisto]-lits.GetParameter()[ihisto]; + // if (ihisto<2) histoX[0]=dca[ihisto]; + fResHistoTPCvertex[ihisto]->Fill(histoX); + } +} + + +void AliTPCcalibTime::FillResHistoTPCTRD(const AliExternalTrackParam * pTPCOut, const AliExternalTrackParam * pTRDIn ){ + // + // fill resuidual histogram TPCout-TRDin + // + Double_t histoX[4]; + Double_t xyz[3]; + pTPCOut->GetXYZ(xyz); + Double_t phi= TMath::ATan2(xyz[1],xyz[0]); + histoX[1]= pTPCOut->GetTgl(); + histoX[2]= phi; + histoX[3]= pTPCOut->GetSnp(); + // + AliExternalTrackParam ltrd(*pTRDIn); + ltrd.Rotate(pTPCOut->GetAlpha()); + // ltrd.PropagateTo(pTPCOut->GetX(),fMagF); + AliTracker::PropagateTrackToBxByBz(<rd,pTPCOut->GetX(),0.1,0.1,kFALSE); + + for (Int_t ihisto=0; ihisto<5; ihisto++){ + histoX[0]=pTPCOut->GetParameter()[ihisto]-ltrd.GetParameter()[ihisto]; + fResHistoTPCTRD[ihisto]->Fill(histoX); + } + +} + +void AliTPCcalibTime::FillResHistoTPCTOF(const AliExternalTrackParam * pTPCOut, const AliExternalTrackParam * pTOFIn ){ + // + // fill resuidual histogram TPCout-TOFin + // track propagated to the TOF position + Double_t histoX[4]; + Double_t xyz[3]; + + AliExternalTrackParam ltpc(*pTPCOut); + ltpc.Rotate(pTOFIn->GetAlpha()); + AliTracker::PropagateTrackToBxByBz(<pc,pTOFIn->GetX(),0.1,0.1,kFALSE); + // + ltpc.GetXYZ(xyz); + Double_t phi= TMath::ATan2(xyz[1],xyz[0]); + histoX[1]= ltpc.GetTgl(); + histoX[2]= phi; + histoX[3]= ltpc.GetSnp(); + // + for (Int_t ihisto=0; ihisto<2; ihisto++){ + histoX[0]=ltpc.GetParameter()[ihisto]-pTOFIn->GetParameter()[ihisto]; + fResHistoTPCTOF[ihisto]->Fill(histoX); + } + +}