b) analyse calibration object on Proof in calibration train
AliTPCcalibTime *calibTime = new AliTPCcalibTime("cosmicTime","cosmicTime", StartTimeStamp, EndTimeStamp, IntegrationTimeVdrift, IntegrationTimeDeDx);
-
+s
c) plot results
TFile f("CalibObjects.root");
-AliTPCcalibTime *cal = f->Get("TPCCalib")->FindObject("cosmicTime");
+AliTPCcalibTime *cal = (AliTPCcalibTime *)f->Get("TPCCalib")->FindObject("cosmicTime");
cal->GetHistVdrift()->Projection(1,0)->Draw()
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.MakeChain("time.txt","timeInfo",0,10200);
+ chainTime->Lookup();
+
+
*/
#include "TTreeStream.h"
#include "AliTPCTracklet.h"
+#include "TTimeStamp.h"
+#include "AliTPCcalibDB.h"
+#include "AliTPCcalibLaser.h"
+#include "AliDCSSensorArray.h"
+#include "AliDCSSensor.h"
ClassImp(AliTPCcalibTime)
AliTPCcalibTime::AliTPCcalibTime()
- :AliTPCcalibBase(),
+ :AliTPCcalibBase(),
+ fTriggerMask(0),
fHistDeDxTgl(0),
fHistDeDx(0),
fHistVdrift(0),
fIntegrationTimeDeDx(0),
- fIntegrationTimeVdrift(0),
+ fIntegrationTimeVdrift(0),
+ fLaser(0), // pointer to laser calibration
+ fDz(0), // current delta z
+ fdEdx(0), // current dEdx
+ fdEdxRatio(0), // current dEdx ratio
+ fTl(0), // current tan(lambda)
fCutMaxD(5), // maximal distance in rfi ditection
+ fCutMaxDz(20), // maximal distance in rfi ditection
fCutTheta(0.03), // maximal distan theta
fCutMinDir(-0.99) // direction vector products
fHistDeDx(0),
fHistVdrift(0),
fIntegrationTimeDeDx(0),
- fIntegrationTimeVdrift(0),
+ fIntegrationTimeVdrift(0),
+ fLaser(0), // pointer to laser calibration
+ fDz(0), // current delta z
+ fdEdx(0), // current dEdx
+ fdEdxRatio(0), // current dEdx ratio
+ fTl(0), // current tan(lambda)
fCutMaxD(5), // maximal distance in rfi ditection
+ fCutMaxDz(20), // maximal distance in rfi ditection
fCutTheta(0.03), // maximal distan theta
fCutMinDir(-0.99) // direction vector products
{
Double_t deltaTime = EndTime - StartTime;
- Int_t binsVdrift[2] = {deltaTime/deltaIntegrationTimeVdrift, 100};
+ Int_t binsVdrift[2] = {TMath::Nint(deltaTime/deltaIntegrationTimeVdrift), 100};
Double_t xminVdrift[2] = {StartTime, -20};
Double_t xmaxVdrift[2] = {EndTime, 20};
fHistVdrift = new THnSparseF("HistVdrift","vDrift; time;#Delta z",2,binsVdrift,xminVdrift,xmaxVdrift);
- Int_t binsDeDxTgl[3] = {deltaTime/deltaIntegrationTimeDeDx,30,100};
+ Int_t binsDeDxTgl[3] = {TMath::Nint(deltaTime/deltaIntegrationTimeDeDx),30,100};
Double_t xminDeDxTgl[3] = {StartTime,-1,0.7};
Double_t xmaxDeDxTgl[3] = {EndTime,1,1.3};
fHistDeDxTgl = new THnSparseF("HistDeDxTgl","dEdx vs tgl;time;tgl;dEdxUp/dEdxLow",3,binsDeDxTgl,xminDeDxTgl,xmaxDeDxTgl);
- Int_t binsDeDx[2] = {deltaTime/deltaIntegrationTimeDeDx,100};
+ Int_t binsDeDx[2] = {TMath::Nint(deltaTime/deltaIntegrationTimeDeDx),100};
Double_t xminDeDx[2] = {StartTime,1};
Double_t xmaxDeDx[2] = {EndTime,100};
fHistDeDx = new THnSparseF("HistDeDx","dEdx l;time;dEdx",2,binsDeDx,xminDeDx,xmaxDeDx);
//
//
}
+void AliTPCcalibTime::ResetCurrent(){
+ //
+ // reset current values
+ //
+ fDz=0; // current delta z
+ fdEdx=0; // current dEdx
+ fdEdxRatio=0; // current dEdx ratio
+ fTl=0; // current tan(lambda)
+
+}
+
void AliTPCcalibTime::Process(AliESDEvent *event) {
//
//
//
-
+ Int_t ntracks=event->GetNumberOfTracks();
+ if (ntracks<2) return;
+ ResetCurrent();
+ //
ProcessCosmic(event);
-
+ if (fTrigger==16){
+ if (!fLaser) fLaser = new AliTPCcalibLaser("laserTPC","laserTPC",kFALSE);
+ fLaser->Process(event);
+ }
+ //
+ // fill debug streamer
+ if (fStreamLevel>0 && fDz!=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);
+ TVectorD vecGoofie(20);
+ AliDCSSensorArray* goofieArray = AliTPCcalibDB::Instance()->GetGoofieSensors(fRun);
+ if (goofieArray)
+ for (Int_t isensor=0; isensor<goofieArray->NumSensors();isensor++){
+ AliDCSSensor *gsensor = goofieArray->GetSensor(isensor);
+ if (gsensor) vecGoofie[isensor]=gsensor->GetValue(tstamp);
+ }
+
+ TVectorD vdriftA, vdriftC,vdriftAC;
+ if (fLaser && fTrigger==16) {
+ if (fLaser->fFitAside) vdriftA=*(fLaser->fFitAside);
+ if (fLaser->fFitCside) vdriftC=*(fLaser->fFitCside);
+ if (fLaser->fFitACside) vdriftAC=*(fLaser->fFitACside);
+ }
+ (*cstream)<<"timeInfo"<<
+ "run="<<fRun<< // run number
+ "event="<<fEvent<< // event number
+ "time="<<fTime<< // time stamp of event
+ "trigger="<<fTrigger<< // trigger
+ "mag="<<fMagF<< // magnetic field
+ // Environment values
+ "press0="<<valuePressure0<<
+ "press1="<<valuePressure1<<
+ "pt0="<<ptrelative0<<
+ "pt1="<<ptrelative1<<
+ "temp0="<<temp0<<
+ "temp1="<<temp1<<
+ "vecGoofie.=<<"<<&vecGoofie<<
+ //
+ // accumulated values
+ //
+ "fDz="<<fDz<< //! current delta z
+ "fdEdx="<<fdEdx<< //! current dEdx
+ "fdEdxRatio="<<fdEdxRatio<< //! current dEdx ratio
+ "fTl="<<fTl<< //! current tan(lambda)
+ //
+ //laser
+ //
+ "laserA.="<<&vdriftA<<
+ "laserC.="<<&vdriftC<<
+ "laserAC.="<<&vdriftAC<<
+ "\n";
+ }
+ }
}
Double_t meanP = 0.5*(trackIn->GetP() + trackOut->GetP());
Double_t TPCsignal = seed->CookdEdxNorm(0.0,0.6,1,0,159,0x0,kTRUE,kTRUE);
Double_t vecDeDx[2] = {time, TPCsignal};
- if (meanP > 12) fHistDeDx->Fill(vecDeDx);
+ if (meanP > 12) {
+ fdEdx = TPCsignal;
+ fHistDeDx->Fill(vecDeDx);
+ }
}
}
}
if (! seed0) continue;
if (! seed1) continue;
Float_t dir = (d1[0]*d2[0] + d1[1]*d2[1] + d1[2]*d2[2]);
- Float_t d0 = track0->GetLinearD(0,0);
- Float_t d1 = track1->GetLinearD(0,0);
+ Float_t dist0 = track0->GetLinearD(0,0);
+ Float_t dist1 = track1->GetLinearD(0,0);
//
// conservative cuts - convergence to be guarantied
// applying before track propagation
- if (TMath::Abs(d0+d1)>fCutMaxD) continue; // distance to the 0,0
+ if (TMath::Abs(dist0+dist1)>fCutMaxD) continue; // distance to the 0,0
if (dir>fCutMinDir) continue; // direction vector product
Float_t bz = AliTracker::GetBz();
Float_t dvertex0[2]; //distance to 0,0
//
//
//
- Float_t dmax = TMath::Max(TMath::Abs(d0),TMath::Abs(d1));
+ Float_t dmax = TMath::Max(TMath::Abs(dist0),TMath::Abs(dist1));
AliExternalTrackParam param0(*track0);
AliExternalTrackParam param1(*track1);
//
//
// Propagate rest to the 0,0 DCA - z should be ignored
//
- Bool_t b0 = param0.PropagateToDCA(&vtx,bz,1000);
- Bool_t b1 = param1.PropagateToDCA(&vtx,bz,1000);
+ //Bool_t b0 = ;
+ param0.PropagateToDCA(&vtx,bz,1000);
+ //Bool_t b1 =
+ param1.PropagateToDCA(&vtx,bz,1000);
//
param0.GetDZ(0,0,0,bz,dvertex0);
param1.GetDZ(0,0,0,bz,dvertex1);
if (isPair && z0>0 && z0inner>0 && z1<0 && z1inner<0) {
Double_t vecVdrift[2] = {time, param0.GetZ() - param1.GetZ()};
- if (track0->GetTPCNcls() > 80) fHistVdrift->Fill(vecVdrift);
+ if (track0->GetTPCNcls() > 80) {
+ fHistVdrift->Fill(vecVdrift);
+ fDz = param0.GetZ() - param1.GetZ();
+ }
}
if (isPair && z0 > 0 && z1 > 0) {
if (track1->GetTPCNcls()> 110 && track0->GetTPCNcls()> 110 && seed1->CookdEdxNorm(0,0.6,1,0,159,0,kFALSE,kTRUE) > 0) {
+ Float_t dedxratio = seed0->CookdEdxNorm(0,0.6,1,0,159,0,kFALSE,kTRUE)/seed1->CookdEdxNorm(0,0.6,1,0,159,0,kFALSE,kTRUE);
Double_t vecDeDxTgl[3] = {time, track0->GetTgl(), seed0->CookdEdxNorm(0,0.6,1,0,159,0,kFALSE,kTRUE)/seed1->CookdEdxNorm(0,0.6,1,0,159,0,kFALSE,kTRUE)};
fHistDeDxTgl->Fill(vecDeDxTgl);
+ fdEdxRatio = dedxratio;
+ fTl = track0->GetTgl() ;
}
}
void AliTPCcalibTime::Analyze() {
-
+ //
+ //
+ //
TH2D * hVdrift = GetHistVdrift()->Projection(1,0);
-
-
+ hVdrift->Draw();
}
const Double_t *p1 = tr1->GetParameter();
if (TMath::Abs(p0[3]+p1[3])>fCutTheta) return kFALSE;
if (TMath::Abs(p0[0]+p1[0])>fCutMaxD) return kFALSE;
+ if (TMath::Abs(p0[1]-p1[1])>fCutMaxDz) return kFALSE;
Double_t d0[3], d1[3];
tr0->GetDirection(d0);
tr1->GetDirection(d1);
//
return kTRUE;
}
+
+
+
+/*
+ gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
+ gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+")
+ AliXRDPROOFtoolkit tool;
+ TChain * chainTime = tool.MakeChain("time.txt","timeInfo",0,10200);
+ chainTime->Lookup();
+
+TCut dzc("abs(fDz-500*(1-pt1))<4")
+chainTime->SetMarkerSize(0.2);
+chainTime->SetMarkerStyle(24);
+
+
+chainTime->SetMarkerColor(2);
+chainTime->Draw("fDz:time","trigger==4"+dzc);
+chainTime->SetMarkerColor(1);
+chainTime->Draw("fDz:time","trigger==8"+dzc,"same");
+htemp->SetXTitle("time")
+htemp->SetYTitle("#Delta_{z}(cm)")
+gPad->SaveAs("~/Calibration/driftV/pic/cosmicdzraw_time.gif");
+
+
+chainTime->SetMarkerColor(2);
+chainTime->Draw("fDz:500*(1-pt1)","trigger==4"+dzc);
+chainTime->SetMarkerColor(1);
+chainTime->Draw("fDz:500*(1-pt1)","trigger==8"+dzc,"same");
+htemp->SetXTitle("2L#frac{#Delta_{P/T}}{P/T}")
+htemp->SetYTitle("#Delta_{z}(cm)")
+gPad->SaveAs("~/Calibration/driftV/pic/cosmicdzraw_PT1.gif");
+
+
+
+
+chainTime->SetLineColor(2);
+chainTime->Draw("fDz-500*0.965*(1-pt1)","trigger==4"+dzc);
+chainTime->SetLineColor(1);
+chainTime->Draw("fDz-500*0.965*(1-pt1)","trigger==8"+dzc,"same");
+htemp->SetXTitle("#Delta_{z}(cm)")
+htemp->SetYTitle("")
+gPad->SaveAs("~/Calibration/driftV/pic/cosmicdzcorr_1D.gif");
+
+
+chainTime->SetMarkerColor(2);
+chainTime->Draw("fDz-500*0.965*(1-pt1):time","trigger==4"+dzc);
+chainTime->SetMarkerColor(1);
+chainTime->Draw("fDz-500*0.965*(1-pt1):time","trigger==8"+dzc,"same");
+htemp->SetXTitle("time")
+htemp->SetYTitle("#Delta_{z}(cm)")
+gPad->SaveAs("~/Calibration/driftV/pic/cosmicdzcorr_time.gif");
+
+
+
+gSystem->Load("libSTAT.so");
+TStatToolkit toolkit;
+Double_t chi2=0;
+Int_t npoints=0;
+TVectorD fitParam;
+TMatrixD covMatrix;
+
+
+chainTime->SetAlias("dpr","(1-press0/970)");
+chainTime->SetAlias("dtr","(1-(temp0+273.15)/293.)");
+chainTime->SetAlias("d1pt","(1-(temp0+273.15)/293.)");
+chainTime->SetAlias("dptr","(press0/(273.15+temp0))/(970./293.15)");
+
+
+chainTime->SetAlias("dvr","fDz");
+TString *strvd = toolkit.FitPlane(chainTime,"fDz","dpr*500++dtr*500", "trigger==4"+dzc, chi2,npoints,fitParam,covMatrix,0.99);
+strvd.Tokenize("++")->Print();
+chainTime->SetAlias("vdcorr",strvd->Data());
+
+TString *strvdpt1 = toolkit.FitPlane(chainTime,"fDz","(1-dptr)*500", "trigger==4"+dzc, chi2,npoints,fitParam,covMatrix,0.99);
+strvdpt1.Tokenize("++")->Print();
+chainTime->SetAlias("vdcorrpt1",strvdpt1->Data());
+
+
+TString *strdedx = toolkit.FitPlane(chainTime,"1-fdEdx/27","(1-dptr)", "trigger==4&&run<62000"+dzc, chi2,npoints,fitParam,covMatrix,0.99);
+strdedx.Tokenize("++")->Print();
+chainTime->SetAlias("vdcorrpt1",strvdpt1->Data());
+
+*/