ROOT logo
/*
  .x ~/rootlogon.C
  gSystem->Load("libANALYSIS");
  gSystem->Load("libTPCcalib");
  
  .L $ALICE_ROOT/TPC/CalibMacros/CalibKalman.C+
  
*/

#include "TTreeStream.h"
#include "TFile.h"
#include "TH2D.h"
#include "THnSparse.h"
#include "AliExternalTrackParam.h"
#include "AliTPCcalibTime.h"
#include "AliTPCkalmanTime.h"


void FitKalman(Int_t maxCount=50){
  TFile fcalib("CalibObjects.root");
  TObjArray * array = (TObjArray*)fcalib.Get("TPCCalib");
  AliTPCcalibTime * calibTime = ( AliTPCcalibTime *)array->FindObject("calibTime");
  AliTPCkalmanTime kalman;
  //
  //

  TTreeSRedirector *pcstream = new TTreeSRedirector("debugFit.root");
  TH2D * hdz = calibTime->GetHistVdrift()->Projection(1,0);
  TH2D * hpress = calibTime->GetHistVdrift()->Projection(4,0);
  TH2D * htempA = calibTime->GetHistVdrift()->Projection(5,0);
  TH2D * htempC = calibTime->GetHistVdrift()->Projection(6,0);
  
  TH1 * hentries =  calibTime->GetHistVdrift()->Projection(0);
  Int_t nentries =hentries->GetNbinsX();
  TH1 *htemp=0;
  Int_t counter=0;
  for (Int_t ibin=0; ibin<nentries;ibin++){
    Double_t icon  = hentries->GetBinContent(ibin);
    if (icon<5) continue;
    if (counter>maxCount) break;
    Double_t time = hentries->GetBinCenter(ibin);
    //
    htemp   = hdz->ProjectionY("aaa",ibin,ibin+1);
    Double_t dzmean   = htemp->GetMean();
    Double_t dzrms    =  htemp->GetRMS();
    delete htemp;
    //
    htemp   = hpress->ProjectionY("aaa",ibin,ibin+1);
    Double_t dpress    = htemp->GetMean();
    Double_t rpress    =  htemp->GetRMS();
    delete htemp;
    htemp   = htempA->ProjectionY("aaa",ibin,ibin+1);
    Double_t mtemp    =  htemp->GetMean();
    Double_t rtemp    =  htemp->GetRMS();
    delete htemp;
    
    printf("ibin=%d\ttime=%f\tentries=%f\t%f\t%f\t%f\t%f\t%f\t%f\n",ibin,time,icon,dzmean,dzrms,dpress,rpress, mtemp,rtemp);
    if (counter==0) {
      kalman.Init(time,0,1,0.05,0.02);
    }
    Double_t sigma0t = 0.005/(24*60*60.);
    kalman.Propagate(time,sigma0t,pcstream);
    Float_t dvdriftrel = dzmean/500.;
    Float_t dverror    = (dzrms+0.1)/500.;
    Double_t  temperature = mtemp+273.15;
    Double_t  povertMeas = dpress/temperature;
    if (mtemp<15) continue;
    
    Float_t  nominalTemp = 19.03+273.15;
    Float_t  nominalPress= 973;
    Double_t povertNom = nominalPress/nominalTemp  ;
    Float_t dptratio   = (povertMeas-povertNom)/povertNom;
    kalman.Update(dvdriftrel,dverror,dptratio,pcstream);
    kalman.fState->Print();
    kalman.fCovariance->Print();
    (*pcstream)<<"fit"<<
      "time="<<time<<
      "dvdrift="<<dvdriftrel<<
      "dverror="<<dverror<<
      "dzrms="<<dzrms<<
      "dpt="<<dptratio<<
      "k.="<<&kalman<<
      "\n";
    counter++;
  }
  delete pcstream;
}

 CalibKalman.C:1
 CalibKalman.C:2
 CalibKalman.C:3
 CalibKalman.C:4
 CalibKalman.C:5
 CalibKalman.C:6
 CalibKalman.C:7
 CalibKalman.C:8
 CalibKalman.C:9
 CalibKalman.C:10
 CalibKalman.C:11
 CalibKalman.C:12
 CalibKalman.C:13
 CalibKalman.C:14
 CalibKalman.C:15
 CalibKalman.C:16
 CalibKalman.C:17
 CalibKalman.C:18
 CalibKalman.C:19
 CalibKalman.C:20
 CalibKalman.C:21
 CalibKalman.C:22
 CalibKalman.C:23
 CalibKalman.C:24
 CalibKalman.C:25
 CalibKalman.C:26
 CalibKalman.C:27
 CalibKalman.C:28
 CalibKalman.C:29
 CalibKalman.C:30
 CalibKalman.C:31
 CalibKalman.C:32
 CalibKalman.C:33
 CalibKalman.C:34
 CalibKalman.C:35
 CalibKalman.C:36
 CalibKalman.C:37
 CalibKalman.C:38
 CalibKalman.C:39
 CalibKalman.C:40
 CalibKalman.C:41
 CalibKalman.C:42
 CalibKalman.C:43
 CalibKalman.C:44
 CalibKalman.C:45
 CalibKalman.C:46
 CalibKalman.C:47
 CalibKalman.C:48
 CalibKalman.C:49
 CalibKalman.C:50
 CalibKalman.C:51
 CalibKalman.C:52
 CalibKalman.C:53
 CalibKalman.C:54
 CalibKalman.C:55
 CalibKalman.C:56
 CalibKalman.C:57
 CalibKalman.C:58
 CalibKalman.C:59
 CalibKalman.C:60
 CalibKalman.C:61
 CalibKalman.C:62
 CalibKalman.C:63
 CalibKalman.C:64
 CalibKalman.C:65
 CalibKalman.C:66
 CalibKalman.C:67
 CalibKalman.C:68
 CalibKalman.C:69
 CalibKalman.C:70
 CalibKalman.C:71
 CalibKalman.C:72
 CalibKalman.C:73
 CalibKalman.C:74
 CalibKalman.C:75
 CalibKalman.C:76
 CalibKalman.C:77
 CalibKalman.C:78
 CalibKalman.C:79
 CalibKalman.C:80
 CalibKalman.C:81
 CalibKalman.C:82
 CalibKalman.C:83
 CalibKalman.C:84
 CalibKalman.C:85
 CalibKalman.C:86
 CalibKalman.C:87
 CalibKalman.C:88
 CalibKalman.C:89