]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCcalibTime.cxx
Print override: changed fot TObjArray in root v5-22-00. Now adapted.
[u/mrichter/AliRoot.git] / TPC / AliTPCcalibTime.cxx
index 8ad1839ece8912547e458ae925ed35f8b64500e5..016fdca69fa6361342250366c21ff13e67b2accb 100644 (file)
@@ -34,15 +34,22 @@ chain->Draw("GetTimeStamp()")
 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();
+
+
 */
 
 
@@ -81,18 +88,30 @@ cal->GetHistVdrift()->Projection(1,0)->Draw()
 
 #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
 
@@ -108,8 +127,14 @@ AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, ULong6
    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
 {
@@ -126,17 +151,17 @@ AliTPCcalibTime::AliTPCcalibTime(const Text_t *name, const Text_t *title, ULong6
 
   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);
@@ -150,14 +175,87 @@ AliTPCcalibTime::~AliTPCcalibTime(){
   //
   //
 }
+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";
+    }
+  }
 }
 
 
@@ -218,7 +316,10 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event) {
        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);
+       }
      }
    }
   }
@@ -251,12 +352,12 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event) {
        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
@@ -268,7 +369,7 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event) {
        //
        //
        //
-       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);
        //
@@ -279,8 +380,10 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event) {
        //
        // 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);
@@ -300,12 +403,18 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event) {
        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() ;
         }
        }
        
@@ -316,10 +425,11 @@ void AliTPCcalibTime::ProcessCosmic(AliESDEvent *event) {
 
 
 void AliTPCcalibTime::Analyze() {
-
+  //
+  //
+  //
   TH2D * hVdrift = GetHistVdrift()->Projection(1,0);
-  
-
+  hVdrift->Draw();
 }
 
 
@@ -368,6 +478,7 @@ Bool_t  AliTPCcalibTime::IsPair(AliExternalTrackParam *tr0, AliExternalTrackPara
   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);       
@@ -375,3 +486,86 @@ Bool_t  AliTPCcalibTime::IsPair(AliExternalTrackParam *tr0, AliExternalTrackPara
   //
   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());
+
+*/