AliTPCcalibTime *calibTime = new AliTPCcalibTime("cosmicTime","cosmicTime",0, 1213.9e+06, 1213.96e+06, 0.04e+04, 0.04e+04);
-2. How to interpret results
-
-3. Simple example
-
- a) determine the required time range:
-
- AliXRDPROOFtoolkit tool;
- TChain * chain = tool.MakeChain("pass2.txt","esdTree",0,6000);
- chain->Draw("GetTimeStamp()")
-
- b) analyse calibration object on Proof in calibration train
-
- AliTPCcalibTime *calibTime = new AliTPCcalibTime("cosmicTime","cosmicTime", StartTimeStamp, EndTimeStamp, IntegrationTimeVdrift);
-
- c) plot results
- .x ~/NimStyle.C
- gSystem->Load("libANALYSIS");
- gSystem->Load("libTPCcalib");
-
- TFile f("CalibObjectsTrain1.root");
- AliTPCcalibTime *calib = (AliTPCcalibTime *)f->Get("calibTime");
- calib->GetHistoDrift("all")->Projection(2,0)->Draw()
- calib->GetFitDrift("all")->Draw("lp")
-
-4. Analysis using debug streamers.
-
- gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
- gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+")
- AliXRDPROOFtoolkit tool;
- TChain * chainTime = tool.MakeChainRandom("time.txt","trackInfo",0,10000);
-
- AliXRDPROOFtoolkit::FilterList("timetpctpc.txt","* tpctpc",1)
- AliXRDPROOFtoolkit::FilterList("timetoftpc.txt","* toftpc",1)
- AliXRDPROOFtoolkit::FilterList("timeitstpc.txt","* itstpc",1)
- AliXRDPROOFtoolkit::FilterList("timelaser.txt","* laserInfo",1)
- TChain * chainTPCTPC = tool.MakeChainRandom("timetpctpc.txt.Good","tpctpc",0,10000);
- TChain * chainTPCITS = tool.MakeChainRandom("timeitstpc.txt.Good","itstpc",0,10000);
- TChain * chainTPCTOF = tool.MakeChainRandom("timetoftpc.txt.Good","toftpc",0,10000);
- TChain * chainLaser = tool.MakeChainRandom("timelaser.txt.Good","laserInfo",0,10000);
- chainTime->Lookup();
- chainLaser->Lookup();
*/
#include "Riostream.h"
ClassImp(AliTPCcalibTime)
+Double_t AliTPCcalibTime::fgResHistoMergeCut = 20000000.;
AliTPCcalibTime::AliTPCcalibTime()
:AliTPCcalibBase(),
fCutMaxDz(25), // maximal distance in rfi ditection
fCutTheta(0.03), // maximal distan theta
fCutMinDir(-0.99), // direction vector products
- fCutTracks(100),
+ fCutTracks(2500),
fArrayLaserA(0), //laser fit parameters C
fArrayLaserC(0), //laser fit parameters A
fArrayDz(0), //NEW! Tmap of V drifts for different triggers
//
// default constructor
//
- AliInfo("Default Constructor");
+ AliDebug(5,"Default Constructor");
for (Int_t i=0;i<3;i++) {
fHistVdriftLaserA[i]=0;
fHistVdriftLaserC[i]=0;
if (1) {
TTimeStamp s;
Int_t time=s;
- AliInfo(Form("Counter Constructor\t%d\t%d",counter,time));
+ AliDebug(5,Form("Counter Constructor\t%d\t%d",counter,time));
counter++;
}
fCutMaxDz(40), // maximal distance in rfi ditection
fCutTheta(5*0.004644),// maximal distan theta
fCutMinDir(-0.99), // direction vector products
- fCutTracks(100),
+ fCutTracks(2500),
fArrayLaserA(new TObjArray(1000)), //laser fit parameters C
fArrayLaserC(new TObjArray(1000)), //laser fit parameters A
fArrayDz(0), //Tmap of V drifts for different triggers
}
- AliInfo("Non Default Constructor");
+ AliDebug(5,"Non Default Constructor");
fTimeBins =(EndTime-StartTime)/deltaIntegrationTimeVdrift;
fTimeStart =StartTime; //(((TObjString*)(mapGRP->GetValue("fAliceStartTime")))->GetString()).Atoi();
fTimeEnd =EndTime; //(((TObjString*)(mapGRP->GetValue("fAliceStopTime")))->GetString()).Atoi();
if (1) {
TTimeStamp s;
Int_t time=s;
- AliInfo(Form("Counter Destructor\t%s\t%d\t%d",GetName(),counter,time));
+ AliDebug(5,Form("Counter Destructor\t%s\t%d\t%d",GetName(),counter,time));
counter++;
}
for(Int_t i=0;i<3;i++){
delete fArrayDz;
fArrayDz=NULL;
}
- for(Int_t i=0;i<5;i++){
+ for(Int_t i=0;i<10;i++){
if(fCosmiMatchingHisto[i]){
delete fCosmiMatchingHisto[i];
fCosmiMatchingHisto[i]=NULL;
fResHistoTPCvertex[i]=0;
}
- if (fTPCVertex) {
- for (Int_t i=0;i<12;i++) delete fTPCVertex[i];
+ for (Int_t i=0;i<12;i++) if (fTPCVertex[i]) delete fTPCVertex[i];
+ for (Int_t i=0;i<5;i++) if (fTPCVertexCorrelation[i]) delete fTPCVertexCorrelation[i];
+
+ if (fAlignITSTPC){
+ fAlignITSTPC->SetOwner(kTRUE);
+ fAlignTRDTPC->SetOwner(kTRUE);
+ fAlignTOFTPC->SetOwner(kTRUE);
+
+ fAlignITSTPC->Delete();
+ fAlignTRDTPC->Delete();
+ fAlignTOFTPC->Delete();
+ delete fAlignITSTPC;
+ delete fAlignTRDTPC;
+ delete fAlignTOFTPC;
}
- if (fTPCVertexCorrelation) {
- for (Int_t i=0;i<5;i++) delete fTPCVertexCorrelation[i];
+
+ if (fArrayLaserA) {
+ fArrayLaserA->SetOwner();
+ fArrayLaserA->Delete();
+ delete fArrayLaserA;
}
-
- fAlignITSTPC->SetOwner(kTRUE);
- fAlignTRDTPC->SetOwner(kTRUE);
- fAlignTOFTPC->SetOwner(kTRUE);
- fAlignITSTPC->Delete();
- fAlignTRDTPC->Delete();
- fAlignTOFTPC->Delete();
- delete fAlignITSTPC;
- delete fAlignTRDTPC;
- delete fAlignTOFTPC;
-}
+ if (fArrayLaserA) {
+ fArrayLaserC->SetOwner();
+ fArrayLaserC->Delete();
+ delete fArrayLaserC;
+ }
-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(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(const AliESDEvent *const /*event*/){
+// Bool_t AliTPCcalibTime::IsLaser(const AliESDEvent *const /*event*/) const{
+// //
+// // 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(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(const AliESDEvent *const /*event*/) const{
+// //
+// // 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(){
//
- // Indicator is physic event not yet implemented - to be done using trigger info or event specie
+ //ResetCurrent
//
-
- return kTRUE; //More accurate creteria to be added
-}
-void AliTPCcalibTime::ResetCurrent(){
fDz=0; //Reset current dz
}
// main function to make calibration
//
if(!event) return;
- if (event->GetNumberOfTracks()<2) return;
+ if (event->GetNumberOfTracks()<2) return;
+ AliESDfriend *ESDfriend=static_cast<AliESDfriend*>(event->FindListObject("AliESDfriend"));
+ if (!ESDfriend) {
+ return;
+ }
+ if (ESDfriend->TestSkipBit()) return;
+
ResetCurrent();
- if(IsLaser (event)) ProcessLaser (event);
- if(IsCosmics(event)) ProcessCosmic(event);
- if(IsBeam (event)) ProcessBeam (event);
+ //if(IsLaser (event))
+ ProcessLaser (event);
+ //if(IsCosmics(event))
+ ProcessCosmic(event);
+ //if(IsBeam (event))
+ ProcessBeam (event);
}
void AliTPCcalibTime::ProcessLaser(AliESDEvent *event){
//
// fill histos
//
- TVectorD vdriftA(5), vdriftC(5),vdriftAC(5);
+ TVectorD vdriftA(5), vdriftC(5),vdriftAC(6);
vdriftA=*(fLaser->fFitAside);
vdriftC=*(fLaser->fFitCside);
vdriftAC=*(fLaser->fFitACside);
void AliTPCcalibTime::ProcessBeam(const AliESDEvent *const event){
//
- //
+ // Process beam data - calculates vartex
+ // from A side and C side
+ // Histogram the differences
//
const Int_t kMinClusters =80;
const Int_t kMinTracks =2; // minimal number of tracks to define the vertex
Double_t dcaVertex[2]={0,0};
Int_t ntracks=event->GetNumberOfTracks();
if (ntracks==0) return;
+ if (ntracks > fCutTracks) return;
//
AliESDfriend *esdFriend=(AliESDfriend*)(((AliESDEvent*)event)->FindListObject("AliESDfriend"));
//
THnSparse* newHist=new THnSparseF(newName,"HistVdrift;time;p/T ratio;Vdrift;run",4,fBinsVdrift,fXminVdrift,fXmaxVdrift);
THnSparse* addHist=NULL;
while((addHist=(THnSparseF*)iterator->Next())){
- if(!addHist) continue;
+ // if(!addHist) continue;
TString histName=addHist->GetName();
if(!histName.Contains(newName)) continue;
addHist->Print();
}
for (Int_t imeas=0; imeas<3; imeas++){
if (cal->GetHistVdriftLaserA(imeas) && cal->GetHistVdriftLaserA(imeas)){
- fHistVdriftLaserA[imeas]->Add(cal->GetHistVdriftLaserA(imeas));
- fHistVdriftLaserC[imeas]->Add(cal->GetHistVdriftLaserC(imeas));
+ fHistVdriftLaserA[imeas]->Add(cal->GetHistVdriftLaserA(imeas));
+ fHistVdriftLaserC[imeas]->Add(cal->GetHistVdriftLaserC(imeas));
}
}
//
- if (fTPCVertexCorrelation && cal->fTPCVertexCorrelation){
+ if (fTPCVertexCorrelation[0] && cal->fTPCVertexCorrelation[0]){
for (Int_t imeas=0; imeas<5; imeas++){
- if (fTPCVertexCorrelation[imeas] && cal->fTPCVertexCorrelation[imeas]) fTPCVertexCorrelation[imeas]->Add(cal->fTPCVertexCorrelation[imeas]);
+ if (fTPCVertexCorrelation[imeas] && cal->fTPCVertexCorrelation[imeas]) fTPCVertexCorrelation[imeas]->Add(cal->fTPCVertexCorrelation[imeas]);
}
}
-
- if (fTPCVertex && cal->fTPCVertex)
+
+ if (fTPCVertex[0] && cal->fTPCVertex[0])
for (Int_t imeas=0; imeas<12; imeas++){
- if (fTPCVertex[imeas] && cal->fTPCVertex[imeas]) fTPCVertex[imeas]->Add(cal->fTPCVertex[imeas]);
+ if (fTPCVertex[imeas] && cal->fTPCVertex[imeas]) fTPCVertex[imeas]->Add(cal->fTPCVertex[imeas]);
}
-
+
if (fMemoryMode>0) for (Int_t imeas=0; imeas<5; imeas++){
if (fMemoryMode>1){
- if ( cal->GetResHistoTPCCE(imeas) && cal->GetResHistoTPCCE(imeas)){
- fResHistoTPCCE[imeas]->Add(cal->fResHistoTPCCE[imeas]);
- }else{
- fResHistoTPCCE[imeas]=(THnSparse*)cal->fResHistoTPCCE[imeas]->Clone();
- }
+ if ( GetResHistoTPCCE(imeas) && cal->GetResHistoTPCCE(imeas)){
+ if ((cal->GetResHistoTPCCE(imeas)->GetEntries()+GetResHistoTPCCE(imeas)->GetEntries()) < fgResHistoMergeCut)
+ fResHistoTPCCE[imeas]->Add(cal->fResHistoTPCCE[imeas]);
+ }else{
+ fResHistoTPCCE[imeas]=(THnSparse*)cal->fResHistoTPCCE[imeas]->Clone();
+ }
}
//
if ((fMemoryMode>0) &&cal->GetResHistoTPCITS(imeas) && cal->GetResHistoTPCITS(imeas)){
- if (fMemoryMode>1 || (imeas%2)==1) fResHistoTPCITS[imeas]->Add(cal->fResHistoTPCITS[imeas]);
- if (fMemoryMode>1) fResHistoTPCvertex[imeas]->Add(cal->fResHistoTPCvertex[imeas]);
+ if (fMemoryMode>1 || (imeas%2)==1)
+ {
+ if (fResHistoTPCITS[imeas]->GetEntries()+(cal->fResHistoTPCITS[imeas])->GetEntries() < fgResHistoMergeCut)
+ fResHistoTPCITS[imeas]->Add(cal->fResHistoTPCITS[imeas]);
+ else
+ AliInfo(Form("fResHistoTPCITS[%i] full (has %.0f merged tracks, max allowed: %.0f)",imeas,fResHistoTPCCE[imeas]->GetEntries(),fgResHistoMergeCut));
+ }
+ if (fMemoryMode>1)
+ {
+ if (fResHistoTPCvertex[imeas]->GetEntries()+(cal->fResHistoTPCvertex[imeas])->GetEntries() < fgResHistoMergeCut)
+ fResHistoTPCvertex[imeas]->Add(cal->fResHistoTPCvertex[imeas]);
+ }
}
//
if ((fMemoryMode>1) && cal->fResHistoTPCTRD[imeas]){
- if (fResHistoTPCTRD[imeas])
- fResHistoTPCTRD[imeas]->Add(cal->fResHistoTPCTRD[imeas]);
- else
- fResHistoTPCTRD[imeas]=(THnSparse*)cal->fResHistoTPCTRD[imeas]->Clone();
+ if (fResHistoTPCTRD[imeas] && cal->fResHistoTPCTRD[imeas])
+ {
+ if (fResHistoTPCTRD[imeas]->GetEntries()+(cal->fResHistoTPCTRD[imeas])->GetEntries() < fgResHistoMergeCut)
+ fResHistoTPCTRD[imeas]->Add(cal->fResHistoTPCTRD[imeas]);
+ }
+ else
+ fResHistoTPCTRD[imeas]=(THnSparse*)cal->fResHistoTPCTRD[imeas]->Clone();
}
//
if ((fMemoryMode>1) && cal->fResHistoTPCTOF[imeas]){
- if (fResHistoTPCTOF[imeas])
- fResHistoTPCTOF[imeas]->Add(cal->fResHistoTPCTOF[imeas]);
- else
- fResHistoTPCTOF[imeas]=(THnSparse*)cal->fResHistoTPCTOF[imeas]->Clone();
+ if (fResHistoTPCTOF[imeas] && cal->fResHistoTPCTOF[imeas])
+ {
+ if (fResHistoTPCTOF[imeas]->GetEntries()+(cal->fResHistoTPCTOF[imeas])->GetEntries() < fgResHistoMergeCut)
+ fResHistoTPCTOF[imeas]->Add(cal->fResHistoTPCTOF[imeas]);
+ }
+ else
+ fResHistoTPCTOF[imeas]=(THnSparse*)cal->fResHistoTPCTOF[imeas]->Clone();
}
//
if (cal->fArrayLaserA){
- fArrayLaserA->Expand(fArrayLaserA->GetEntriesFast()+cal->fArrayLaserA->GetEntriesFast());
- fArrayLaserC->Expand(fArrayLaserC->GetEntriesFast()+cal->fArrayLaserC->GetEntriesFast());
- for (Int_t ical=0; ical<cal->fArrayLaserA->GetEntriesFast(); ical++){
- if (cal->fArrayLaserA->UncheckedAt(ical)) fArrayLaserA->AddLast(cal->fArrayLaserA->UncheckedAt(ical)->Clone());
- if (cal->fArrayLaserC->UncheckedAt(ical)) fArrayLaserC->AddLast(cal->fArrayLaserC->UncheckedAt(ical)->Clone());
- }
+ fArrayLaserA->Expand(fArrayLaserA->GetEntriesFast()+cal->fArrayLaserA->GetEntriesFast());
+ fArrayLaserC->Expand(fArrayLaserC->GetEntriesFast()+cal->fArrayLaserC->GetEntriesFast());
+ for (Int_t ical=0; ical<cal->fArrayLaserA->GetEntriesFast(); ical++){
+ if (cal->fArrayLaserA->UncheckedAt(ical)) fArrayLaserA->AddLast(cal->fArrayLaserA->UncheckedAt(ical)->Clone());
+ if (cal->fArrayLaserC->UncheckedAt(ical)) fArrayLaserC->AddLast(cal->fArrayLaserC->UncheckedAt(ical)->Clone());
+ }
}
}
- TObjArray* addArray=cal->GetHistoDrift();
- if(!addArray) return 0;
- TIterator* iterator = addArray->MakeIterator();
- iterator->Reset();
- THnSparse* addHist=NULL;
- if ((fMemoryMode>1)) while((addHist=(THnSparseF*)iterator->Next())){
- if(!addHist) continue;
- addHist->Print();
- THnSparse* localHist=(THnSparseF*)fArrayDz->FindObject(addHist->GetName());
- if(!localHist){
- localHist=new THnSparseF(addHist->GetName(),"HistVdrift;time;p/T ratio;Vdrift;run",4,fBinsVdrift,fXminVdrift,fXmaxVdrift);
- fArrayDz->AddLast(localHist);
- }
- localHist->Add(addHist);
- }
-
+ // TObjArray* addArray=cal->GetHistoDrift();
+ // if(!addArray) return 0;
+ // TIterator* iterator = addArray->MakeIterator();
+ // iterator->Reset();
+ // THnSparse* addHist=NULL;
+ // if ((fMemoryMode>1)) while((addHist=(THnSparseF*)iterator->Next())){
+ // // if(!addHist) continue;
+ // addHist->Print();
+ // THnSparse* localHist=(THnSparseF*)fArrayDz->FindObject(addHist->GetName());
+ // if(!localHist){
+ // localHist=new THnSparseF(addHist->GetName(),"HistVdrift;time;p/T ratio;Vdrift;run",4,fBinsVdrift,fXminVdrift,fXmaxVdrift);
+ // fArrayDz->AddLast(localHist);
+ // }
+ // localHist->Add(addHist);
+ // }
+ // delete iterator;
for(Int_t i=0;i<10;i++) if (cal->GetCosmiMatchingHisto(i)) fCosmiMatchingHisto[i]->Add(cal->GetCosmiMatchingHisto(i));
//
// Merge alignment
//
+ const Int_t kMinUpdates=10;
+ const Float_t kMaxOut=0.1;
for (Int_t itype=0; itype<3; itype++){
//
//
if (!arr1) continue;
if (!arr0) arr0=new TObjArray(arr1->GetEntriesFast());
if (arr1->GetEntriesFast()>arr0->GetEntriesFast()){
- arr0->Expand(arr1->GetEntriesFast());
+ arr0->Expand(arr1->GetEntriesFast());
}
for (Int_t i=0;i<arr1->GetEntriesFast(); i++){
- AliRelAlignerKalman *kalman1 = (AliRelAlignerKalman *)arr1->UncheckedAt(i);
- AliRelAlignerKalman *kalman0 = (AliRelAlignerKalman *)arr0->UncheckedAt(i);
- if (!kalman1) continue;
- if (!kalman0) {arr0->AddAt(new AliRelAlignerKalman(*kalman1),i); continue;}
- kalman0->SetRejectOutliers(kFALSE);
- kalman0->Merge(kalman1);
+ AliRelAlignerKalman *kalman1 = (AliRelAlignerKalman *)arr1->UncheckedAt(i);
+ AliRelAlignerKalman *kalman0 = (AliRelAlignerKalman *)arr0->UncheckedAt(i);
+ if (!kalman1) continue;
+ if (kalman1->GetNUpdates()<kMinUpdates) continue;
+ if (kalman1->GetNOutliers()>(kalman1->GetNUpdates()*kMaxOut)) continue;
+ if (!kalman0) {arr0->AddAt(new AliRelAlignerKalman(*kalman1),i); continue;}
+ kalman0->SetRejectOutliers(kFALSE);
+ kalman0->Merge(kalman1);
}
}
}
+ delete iter;
return 0;
}
-Bool_t AliTPCcalibTime::IsPair(AliExternalTrackParam *tr0, AliExternalTrackParam *tr1){
+Bool_t AliTPCcalibTime::IsPair(const AliExternalTrackParam *tr0, const AliExternalTrackParam *tr1){
/*
// 0. Same direction - OPOSITE - cutDir +cutT
TCut cutDir("cutDir","dir<-0.99")
return kTRUE;
}
-Bool_t AliTPCcalibTime::IsCross(AliESDtrack *const tr0, AliESDtrack *const tr1){
+Bool_t AliTPCcalibTime::IsCross(const AliESDtrack *const tr0, const AliESDtrack *const tr1){
//
// check if the cosmic pair of tracks crossed A/C side
//
return result;
}
-Bool_t AliTPCcalibTime::IsSame(AliESDtrack *const tr0, AliESDtrack *const tr1){
+Bool_t AliTPCcalibTime::IsSame(const AliESDtrack *const tr0, const AliESDtrack *const tr1){
//
// track crossing the CE
// 0. minimal number of clusters
}
-void AliTPCcalibTime::ProcessSame(AliESDtrack *const track, AliESDfriendTrack *const friendTrack, const AliESDEvent *const event){
+void AliTPCcalibTime::ProcessSame(const AliESDtrack *const track, AliESDfriendTrack *const friendTrack, const AliESDEvent *const event){
//
// Process TPC tracks crossing CE
//
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);
+ AliTracker::PropagateTrackToBxByBz(&trackIn,r[0],pimass,1.,kFALSE);
if (!trackIn.PropagateTo(r[0],bz)) break;
nclIn++;
trackIn.Update(&r[1],cov);
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);
+ AliTracker::PropagateTrackToBxByBz(&trackOut,r[0],pimass,1.,kFALSE);
if (!trackOut.PropagateTo(r[0],bz)) break;
nclOut++;
trackOut.Update(&r[1],cov);
}
-void AliTPCcalibTime::ProcessAlignITS(AliESDtrack *const track, AliESDfriendTrack *const friendTrack, const AliESDEvent *const event, AliESDfriend *const esdFriend){
+void AliTPCcalibTime::ProcessAlignITS(AliESDtrack *const track, const AliESDfriendTrack *const friendTrack, const AliESDEvent *const event, AliESDfriend *const esdFriend){
//
// Process track - Update TPC-ITS alignment
// Updates:
const Double_t kVdErr = 0.1; // initial uncertainty of the vd correction
const Double_t kT0Err = 3.; // initial uncertainty of the T0 time
const Double_t kVdYErr = 0.05; // initial uncertainty of the vd correction
- const Double_t kOutCut = 1.0; // outlyer cut in AliRelAlgnmentKalman
+ const Double_t kOutCut = 3.0; // outlyer cut in AliRelAlgnmentKalman
const Double_t kMinPt = 0.3; // minimal pt
const Double_t kMax1Pt=0.5; //maximal 1/pt distance
const Int_t kN=50; // deepnes of history
(*align->GetStateCov())(7,7)=kT0Err*kT0Err;
(*align->GetStateCov())(8,8)=kVdYErr*kVdYErr;
align->SetOutRejSigma(kOutCut+kOutCut*kN);
- align->SetRejectOutliers(kFALSE);
+ // align->SetRejectOutliers(kFALSE);
+ align->SetRejectOutliers(kTRUE);
+ align->SetRejectOutliersSigma2Median(kTRUE);
align->SetTPCvd(AliTPCcalibDB::Instance()->GetParameters()->GetDriftV()/1000000.);
align->SetMagField(fMagF);
}
//
Int_t nupdates=align->GetNUpdates();
- align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates));
- align->SetRejectOutliers(kFALSE);
+ align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates+1));
+ // align->SetRejectOutliers(kFALSE);
+ align->SetRejectOutliers(kTRUE);
+ align->SetRejectOutliersSigma2Median(kTRUE);
+
TTreeSRedirector *cstream = GetDebugStreamer();
if (cstream && align->GetState() && align->GetState()->GetNrows()>2 ){
TVectorD gpTPC(3), gdTPC(3);
"vRMS.="<<&vecRMS<< // rms of deltas
"vDelta.="<<&vecDelta<< // delta in respect to median
"vDeltaN.="<<&vecDeltaN<< // normalized delta in respect to median
- "t.="<<track<< // ful track - find proper cuts
"a.="<<align<< // current alignment
"pITS.="<<&pITS<< // track param ITS
"pITS2.="<<&pITS2<< // track param ITS+TPC
-void AliTPCcalibTime::ProcessAlignTRD(AliESDtrack *const track, AliESDfriendTrack *const friendTrack){
+void AliTPCcalibTime::ProcessAlignTRD(AliESDtrack *const track, const AliESDfriendTrack *const friendTrack){
//
// Process track - Update TPC-TRD alignment
// Updates:
// 3. Update kalman filter
//
const Int_t kMinTPC = 80; // minimal number of TPC cluster
- const Int_t kMinTRD = 50; // minimal number of TRD cluster
- const Double_t kMinZ = 20; // maximal dz distance
+ const Int_t kMinTRD = 60; // minimal number of TRD cluster
+ // const Double_t kMinZ = 20; // maximal dz distance
const Double_t kMaxDy = 5.; // maximal dy distance
const Double_t kMaxAngle= 0.1; // maximal angular distance
const Double_t kSigmaCut= 10; // maximal sigma distance to median
const Double_t kVdErr = 0.1; // initial uncertainty of the vd correction
const Double_t kT0Err = 3.; // initial uncertainty of the T0 time
const Double_t kVdYErr = 0.05; // initial uncertainty of the vd correction
- const Double_t kOutCut = 1.0; // outlyer cut in AliRelAlgnmentKalman
- const Double_t kRefX = 275; // reference X
+ const Double_t kOutCut = 3.0; // outlyer cut in AliRelAlgnmentKalman
+ const Double_t kRefX = 330; // reference X
const Int_t kN=50; // deepnes of history
static Int_t kglast=0;
static Double_t* kgdP[4]={new Double_t[kN], new Double_t[kN], new Double_t[kN], new Double_t[kN]};
Int_t dummycl[1000];
if (track->GetTRDclusters(dummycl)<kMinTRD) return; // minimal amount of clusters
if (track->GetTPCNcls()<kMinTPC) return; // minimal amount of clusters cut
- if (!friendTrack->GetTRDIn()) return;
- if (!track->IsOn(AliESDtrack::kTRDrefit)) return;
+ // if (!friendTrack->GetTRDIn()) return;
+ // if (!track->IsOn(AliESDtrack::kTRDrefit)) return;
if (!track->IsOn(AliESDtrack::kTRDout)) return;
if (!track->GetInnerParam()) return;
if (!friendTrack->GetTPCOut()) return;
// exclude crossing track
if (friendTrack->GetTPCOut()->GetZ()*track->GetInnerParam()->GetZ()<0) return;
- if (TMath::Abs(track->GetInnerParam()->GetZ())<kMinZ) return;
//
AliExternalTrackParam &pTPC=(AliExternalTrackParam &)(*(friendTrack->GetTPCOut()));
AliTracker::PropagateTrackToBxByBz(&pTPC,kRefX,0.1,0.1,kFALSE);
- AliExternalTrackParam pTRD(*(friendTrack->GetTRDIn()));
+ AliExternalTrackParam *pTRDtrack = 0;
+ TObject *calibObject=0;
+ for (Int_t l=0;(calibObject=((AliESDfriendTrack*)friendTrack)->GetCalibObject(l));++l) {
+ if ((dynamic_cast< AliTPCseed*>(calibObject))) continue;
+ if ((pTRDtrack=dynamic_cast< AliExternalTrackParam*>(calibObject))) break;
+ }
+ if (!pTRDtrack) return;
+ // AliExternalTrackParam pTRD(*(friendTrack->GetTRDIn()));
+ AliExternalTrackParam pTRD(*(pTRDtrack));
pTRD.Rotate(pTPC.GetAlpha());
// pTRD.PropagateTo(pTPC.GetX(),fMagF);
AliTracker::PropagateTrackToBxByBz(&pTRD,pTPC.GetX(),0.1,0.1,kFALSE);
(*align->GetStateCov())(7,7)=kT0Err*kT0Err;
(*align->GetStateCov())(8,8)=kVdYErr*kVdYErr;
align->SetOutRejSigma(kOutCut+kOutCut*kN);
- align->SetRejectOutliers(kFALSE);
+ // align->SetRejectOutliers(kFALSE);
+ align->SetRejectOutliers(kTRUE);
+ align->SetRejectOutliersSigma2Median(kTRUE);
+
align->SetTPCvd(AliTPCcalibDB::Instance()->GetParameters()->GetDriftV()/1000000.);
align->SetMagField(fMagF);
fAlignTRDTPC->AddAt(align,htime);
}
//
Int_t nupdates=align->GetNUpdates();
- align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates));
- align->SetRejectOutliers(kFALSE);
+ align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates+1));
+ // align->SetRejectOutliers(kFALSE);
+ align->SetRejectOutliers(kTRUE);
+ align->SetRejectOutliersSigma2Median(kTRUE);
+
TTreeSRedirector *cstream = GetDebugStreamer();
if (cstream && align->GetState() && align->GetState()->GetNrows()>2 ){
TVectorD gpTPC(3), gdTPC(3);
}
-void AliTPCcalibTime::ProcessAlignTOF(AliESDtrack *const track, AliESDfriendTrack *const friendTrack){
+void AliTPCcalibTime::ProcessAlignTOF(AliESDtrack *const track, const AliESDfriendTrack *const friendTrack){
//
//
// Process track - Update TPC-TOF alignment
const Double_t kT0Err = 3.; // initial uncertainty of the T0 time
const Double_t kVdYErr = 0.05; // initial uncertainty of the vd correction
- const Double_t kOutCut = 1.0; // outlyer cut in AliRelAlgnmentKalman
+ const Double_t kOutCut = 3.0; // outlyer cut in AliRelAlgnmentKalman
const Int_t kN=50; // deepnes of history
static Int_t kglast=0;
static Double_t* kgdP[4]={new Double_t[kN], new Double_t[kN], new Double_t[kN], new Double_t[kN]};
(*align->GetStateCov())(7,7)=kT0Err*kT0Err;
(*align->GetStateCov())(8,8)=kVdYErr*kVdYErr;
align->SetOutRejSigma(kOutCut+kOutCut*kN);
- align->SetRejectOutliers(kFALSE);
+ // align->SetRejectOutliers(kFALSE);
+ align->SetRejectOutliers(kTRUE);
+ align->SetRejectOutliersSigma2Median(kTRUE);
+
align->SetTPCvd(AliTPCcalibDB::Instance()->GetParameters()->GetDriftV()/1000000.);
align->SetMagField(fMagF);
fAlignTOFTPC->AddAt(align,htime);
align->SetRunNumber(fRun );
//
Int_t nupdates=align->GetNUpdates();
- align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates));
- align->SetRejectOutliers(kFALSE);
+ align->SetOutRejSigma(kOutCut+kOutCut*kN/Double_t(nupdates+1));
+ // align->SetRejectOutliers(kFALSE);
+ align->SetRejectOutliers(kTRUE);
+ align->SetRejectOutliersSigma2Median(kTRUE);
+
TTreeSRedirector *cstream = GetDebugStreamer();
if (cstream && align->GetState() && align->GetState()->GetNrows()>2 ){
TVectorD gpTPC(3), gdTPC(3);
fResHistoTPCTOF[0] = new THnSparseS("TPCTOF#Delta_{Y} (cm)","#Delta_{Y} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
//
// delta z
- xminTrack[0] =-3.; xmaxTrack[0]=3.; //
+ xminTrack[0] =-6.; xmaxTrack[0]=6.; //
fResHistoTPCCE[1] = new THnSparseS("TPCCE#Delta_{Z} (cm)","#Delta_{Z} (cm)", 5, binsTrack,xminTrack, xmaxTrack);
fResHistoTPCITS[1] = new THnSparseS("TPCITS#Delta_{Z} (cm)","#Delta_{Z} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
fResHistoTPCvertex[1] = new THnSparseS("TPCVertex#Delta_{Z} (cm)","#Delta_{Z} (cm)", 4, binsTrack,xminTrack, xmaxTrack);
fResHistoTPCTOF[2] = new THnSparseS("TPCTOF#Delta_{#phi}","#Delta_{#phi}", 4, binsTrack,xminTrack, xmaxTrack);
//
// delta theta-P3
- xminTrack[0] =-0.025; xmaxTrack[0]=0.025; //
+ xminTrack[0] =-0.05; xmaxTrack[0]=0.05; //
fResHistoTPCCE[3] = new THnSparseS("TPCCE#Delta_{#theta}","#Delta_{#theta}", 5, binsTrack,xminTrack, xmaxTrack);
fResHistoTPCITS[3] = new THnSparseS("TPCITS#Delta_{#theta}","#Delta_{#theta}", 4, binsTrack,xminTrack, xmaxTrack);
fResHistoTPCvertex[3] = new THnSparseS("TPCITSv#Delta_{#theta}","#Delta_{#theta}", 4, binsTrack,xminTrack, xmaxTrack);
const AliExternalTrackParam * pTPCIn = pTrack->GetInnerParam();
AliExternalTrackParam pTPCvertex(*(pTrack->GetInnerParam()));
//
- AliExternalTrackParam lits(*pTrack);
+ if (!(pTrack->GetConstrainedParam())) return;
+ AliExternalTrackParam lits(*(pTrack->GetConstrainedParam()));
if (TMath::Abs(pTrack->GetY())>3) return; // beam pipe
pTPCvertex.Rotate(lits.GetAlpha());
//pTPCvertex.PropagateTo(pTPCvertex->GetX(),fMagF);