TPC Slewing

Slewing was first First look at TPC slewing with the new TPX electronics. It was not seen in Run 8 data using the older TPC electronics.

Run 10 will have new pulse shaping in place for the TPX electronics and it remains to be seen whether slewing corrections are needed.

__________________

A simple How-To Guide:

The "StiPulls" chain option for BFC produces a TTree in the tags.root files. That TTree contains residuals of hits on tracks, as well as the hits' charge. So it is a simple matter of examining the residual in the Z direction, converted to time, versus hit charge.

At this time, no documentation on StiPulls exists, but suffice it to say that mHitsG are hits on global tracks, and mHitsP are hits on primary tracks. For primary tracks, mVertex is the index (ordered by highest rank first) of the primary vertex for a primary track, or the primary vertex of the primary partner for a global track (0 indicates no primary partner). This is particularly useful to reduce pile-up contributions. Primary tracks will see residuals which have contributions from any errors in the position of the primary vertex, so global track hits were used in Run 9 analyses.

Included here are some TTreeFormulas useful for doing this analysis. Note that knowing the drift velocity is pertinent in converting Z residuals into time residuals.

StiPulls = new TChain("StiPulls")
StiPulls->Add("*.tags.root")
StiPulls.Draw("mHitsG.lXHit","","",1);
Float DV = 5.51231; // needs to be adjusted for the dataset of interest
//_______________________________________________________
  TString s1,s2; TTreeFormula* f1;
  s1 = "((mHitsG.mHardwarePosition-(mHitsG.mHardwarePosition%16))/16)%32";
  s2 = "sector()";
  f1 = new TTreeFormula(s2.Data(),s1.Data(),StiPulls); gROOT->GetListOfFunctions()->Add(f1);
  s1 = "((mHitsG.mHardwarePosition-(mHitsG.mHardwarePosition%512))/512)%64";
  s2 = "padrow()";
  f1 = new TTreeFormula(s2.Data(),s1.Data(),StiPulls); gROOT->GetListOfFunctions()->Add(f1);
  s1 = "(mHitsG.lYFit-mHitsG.lYHit)";
  s2 = "resid()";
  f1 = new TTreeFormula(s2.Data(),s1.Data(),StiPulls); gROOT->GetListOfFunctions()->Add(f1);
  s1 = "(mHitsG.lZFit-mHitsG.lZHit)";
  s2 = "residZ()";
  f1 = new TTreeFormula(s2.Data(),s1.Data(),StiPulls); gROOT->GetListOfFunctions()->Add(f1);
  s1 = Form("((mHitsG.lZFit-mHitsG.lZHit)*sign(mHitsG.lZHit)/%f)",DV);
  s2 = "residT()";
  f1 = new TTreeFormula(s2.Data(),s1.Data(),StiPulls); gROOT->GetListOfFunctions()->Add(f1);

  TCut cutQA = "mHitsG.mPt>0.5&&mHitsG.mPt<10&&mHitsG.nTpcHits>=35";
  TCut cutBestVtx = "mHitsG.mVertex==1"
  TCut cutEta = "abs(mHitsG.lDip)<0.87"; // |eta| < 1
  TCut cutSectEdge = "abs(atan(mHitsG.lYHit/mHitsG.lXHit))<0.2";
  TCut cutBadZ = "mHitsG.lZHit*(sector()-12.5)<0";

  StiPulls.Draw("residT():1./sqrt(mHitsG.mCharge)","","prof");

Keep in mind that inner TPC hits are different from outer TPC hits (different pads and hit errors, perhaps even different anode voltages) and should be examined separately.