ROOT logo
//
// Procedures to create a cluster parametererization
// Currently only pseudo code - once will be stable - to be updated as a "normal" macro
//

void PseudoCode(){
  //
  // That rough sequence to update  a Cluster param calibration using debug streamers
  //

  //
  //0. Load libraries
  gSystem->Load("libANALYSIS");
  gSystem->Load("libSTAT");
  gSystem->Load("libTPCcalib");
  
  
  //1. Load Parameters to be modified:
  //e.g:
  AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  AliCDBManager::Instance()->SetRun(0) ;
  AliTPCClusterParam * param = AliTPCcalibDB::Instance()->GetClusterParam();  
  //
  //2. Load chain from debug streamers
  //
  //e.g
  gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
  gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+");
  AliXRDPROOFtoolkit tool;  
  TChain * chainres = tool.MakeChain("tracks.txt","ResolCl",0,10200);
  chainres->Lookup();  
  TChain * chainGain = tool.MakeChain("gain.txt","dEdx",0,1000000);
  chainGain->Lookup();
  TChain * chainCosmic =  tool.MakeChain("cosmic.txt","Track0",0,1000000);
  chainCosmic->Lookup();
  //
  // 3. Do fits - pos correction
  //
  AliTPCcalibTracks::MakeQPosNormAll(chainres,param,200000,0) ;

  //
  //4. Do fits gain
  // 
  param->fPosQTnorm[0] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,0,kFALSE,200000,kTRUE);
  param->fPosQTnorm[1] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,1,kFALSE,200000,kTRUE);
  param->fPosQTnorm[2] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,2,kFALSE,200000,kTRUE);
  //
  param->fPosQMnorm[0] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,0,kTRUE,200000,kTRUE);
  param->fPosQMnorm[1] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,1,kTRUE,200000,kTRUE);
  param->fPosQMnorm[2] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,2,kTRUE,200000,kTRUE);
  //
  //5. Store results
  //
  TFile f("paramout.root","recreate");
  param->Write("clusterParam");
  f.Close();


  //6. Verification
  TFile f2("paramout.root");
  AliTPCClusterParam *param2 = (AliTPCClusterParam*)f2.Get("clusterParam");
  param2->SetInstance(param2);
  //
  // position correction
  chainres->Draw("AliTPCClusterParam::SPosCorrection(1,0,Cl.fPad,Cl.fTimeBin,Cl.fZ,Cl.fSigmaY2,Cl.fSigmaZ2,Cl.fMax)","Cl.fDetector<36","",10000); // should be line 
  // gain correction
  TCut cutA("dedge>3&&fraction2<0.7");
  chainGain->Draw("(Cl.fMax/gain/dedxM.fElements[2]):AliTPCClusterParam::SQnormPos(0,1,Cl.fPad,Cl.fTimeBin,Cl.fZ,Cl.fSigmaY2,Cl.fSigmaZ2,Cl.fMax,Cl.fQ)","IPad==0"+cutA,"prof",100000);


}


void UpdateParam(){
  //
  // Pseudo code -to update cluster params
  //
  .L $ALICE_ROOT/TPC/Cal/AliTPCCreateDummyCDB.C
  TFile f2("paramout.root");
  AliTPCClusterParam *param2 = (AliTPCClusterParam*)f2.Get("clusterParam");  
  AliCDBManager *man = AliCDBManager::Instance();
  gStorLoc = man->GetStorage(gCDBpath);
  metaData = CreateMetaObject("AliTPCClusterParam");
  StoreObject("TPC/Calib/ClusterParam/", param2, metaData);
  
}


void TestChainCosmicDedx(){
  //
  // pseudo cose
  //
  gSystem->Load("libANALYSIS");
  gSystem->Load("libSTAT");
  gSystem->Load("libTPCcalib");
  AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  AliCDBManager::Instance()->SetRun(0) ;
  AliTPCClusterParam * param = AliTPCcalibDB::Instance()->GetClusterParam();  
  param->SetInstance(param);
  //e.g
  gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
  gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+");
  AliXRDPROOFtoolkit tool;  
  TChain * chainCosmic =  tool.MakeChain("cosmic.txt","Track0",0,1000000);
  chainCosmic->Lookup();



  TCut cutT("cutT","abs(Tr1.fP[3]+Tr0.fP[3])<0.01");  // OK
  TCut cutD("cutD","abs(Tr0.fP[0]+Tr1.fP[0])<2");     // OK
  TCut cutP1("cutP1","abs(Tr0.fP[1]-Tr1.fP[1])<3");   // OK
  TCut cutPt("cutPt","abs(Tr1.fP[4]+Tr0.fP[4])<0.1&&abs(Tr0.fP[4])+abs(Tr1.fP[4])<10");
  TCut cutN("cutN","min(Orig0.fTPCncls,Orig1.fTPCncls)>100");
  TCut cutA=cutT+cutD+cutPt+cutN+cutP1;
  
  TCut cutS("cutS","Orig0.fIp.fP[1]*Orig1.fIp.fP[1]>0");

  if (gProof) chainCosmic->SetProof(kTRUE);
  //
  //
  //
  //
  chainCosmic->Draw("Seed0.CookdEdxNorm(0.01,0.65,1,0,159,0)/Seed1.CookdEdxNorm(0.01,0.65,1,0,159,0)","min(Orig0.fTPCncls,Orig1.fTPCncls)>120","",10000);
  
  //
  // Q normalization - short - medium - long
  //

  TVectorD paramT(3);
  TVectorD paramM(3);
  TH1F * his =0;
  chainCosmic->Draw("Seed0.CookdEdxNorm(0.01,0.65,0,0,64,0,kTRUE)/Seed0.CookdEdxNorm(0.01,0.65,0,0,159,0,kTRUE)>>his(100,0.5,1.5)","min(Orig0.fTPCncls,Orig1.fTPCncls)>140","",100000); 
  TH1 * his = (TH1*)gROOT->FindObject("his");
  paramT[0]=his->GetMean();
  //
 chainCosmic->Draw("Seed0.CookdEdxNorm(0.01,0.65,0,64,129,0,kTRUE)/Seed0.CookdEdxNorm(0.01,0.65,0,0,159,0,kTRUE)>>his(100,0.5,1.5)","min(Orig0.fTPCncls,Orig1.fTPCncls)>140","",100000);  
 TH1 * his = (TH1*)gROOT->FindObject("his");
  paramT[1]=his->GetMean();
  //
  chainCosmic->Draw("Seed0.CookdEdxNorm(0.01,0.65,0,129,159,0,kTRUE)/Seed0.CookdEdxNorm(0.01,0.65,0,0,159,0,kTRUE)>>his(100,0.5,2.0)","min(Orig0.fTPCncls,Orig1.fTPCncls)>140","",100000); 
 TH1 * his = (TH1*)gROOT->FindObject("his");
 paramT[2]=his->GetMean();
  //
  //
  chainCosmic->Draw("Seed0.CookdEdxNorm(0.01,0.65,1,0,64,0,kTRUE)/Seed0.CookdEdxNorm(0.01,0.65,1,0,159,0,kTRUE)>>his(100,0.5,1.5)","min(Orig0.fTPCncls,Orig1.fTPCncls)>140","",100000); 
  TH1 * his = (TH1*)gROOT->FindObject("his");
  paramM[0]=his->GetMean();
  //
 chainCosmic->Draw("Seed0.CookdEdxNorm(0.01,0.65,1,64,129,0,kTRUE)/Seed0.CookdEdxNorm(0.01,0.65,1,0,159,0,kTRUE)>>his(100,0.5,1.5)","min(Orig0.fTPCncls,Orig1.fTPCncls)>140","",100000); 
 TH1 * his = (TH1*)gROOT->FindObject("his");
 paramM[1]=his->GetMean();
  //
  chainCosmic->Draw("Seed0.CookdEdxNorm(0.01,0.65,1,129,159,0,kTRUE)/Seed0.CookdEdxNorm(0.01,0.65,1,0,159,0,kTRUE)>>his(100,0.5,2.0)","min(Orig0.fTPCncls,Orig1.fTPCncls)>140","",100000); 
 TH1 * his = (TH1*)gROOT->FindObject("his");
 paramM[2]=his->GetMean();

 param->fQpadTnorm=(TVectorD*)paramT->Clone();
 param->fQpadMnorm=(TVectorD*)paramM->Clone();
 
 TFile f("paramout.root","recreate");
 param->Write("clusterParam");
 f.Close();

}


void dedxDemo(){
  chainCosmic->Draw("(Seed0.CookdEdxNorm(0.01,0.65,1,0,159,0,kTRUE,kTRUE)+Seed1.CookdEdxNorm(0.01,0.65,1,0,159,0,kTRUE,kTRUE))*0.5:log(Tr0.P())>>his2(100,-2,5,500,0,200)","min(Orig0.fTPCncls,Orig1.fTPCncls)>110");   
}
 CalibClParam.C:1
 CalibClParam.C:2
 CalibClParam.C:3
 CalibClParam.C:4
 CalibClParam.C:5
 CalibClParam.C:6
 CalibClParam.C:7
 CalibClParam.C:8
 CalibClParam.C:9
 CalibClParam.C:10
 CalibClParam.C:11
 CalibClParam.C:12
 CalibClParam.C:13
 CalibClParam.C:14
 CalibClParam.C:15
 CalibClParam.C:16
 CalibClParam.C:17
 CalibClParam.C:18
 CalibClParam.C:19
 CalibClParam.C:20
 CalibClParam.C:21
 CalibClParam.C:22
 CalibClParam.C:23
 CalibClParam.C:24
 CalibClParam.C:25
 CalibClParam.C:26
 CalibClParam.C:27
 CalibClParam.C:28
 CalibClParam.C:29
 CalibClParam.C:30
 CalibClParam.C:31
 CalibClParam.C:32
 CalibClParam.C:33
 CalibClParam.C:34
 CalibClParam.C:35
 CalibClParam.C:36
 CalibClParam.C:37
 CalibClParam.C:38
 CalibClParam.C:39
 CalibClParam.C:40
 CalibClParam.C:41
 CalibClParam.C:42
 CalibClParam.C:43
 CalibClParam.C:44
 CalibClParam.C:45
 CalibClParam.C:46
 CalibClParam.C:47
 CalibClParam.C:48
 CalibClParam.C:49
 CalibClParam.C:50
 CalibClParam.C:51
 CalibClParam.C:52
 CalibClParam.C:53
 CalibClParam.C:54
 CalibClParam.C:55
 CalibClParam.C:56
 CalibClParam.C:57
 CalibClParam.C:58
 CalibClParam.C:59
 CalibClParam.C:60
 CalibClParam.C:61
 CalibClParam.C:62
 CalibClParam.C:63
 CalibClParam.C:64
 CalibClParam.C:65
 CalibClParam.C:66
 CalibClParam.C:67
 CalibClParam.C:68
 CalibClParam.C:69
 CalibClParam.C:70
 CalibClParam.C:71
 CalibClParam.C:72
 CalibClParam.C:73
 CalibClParam.C:74
 CalibClParam.C:75
 CalibClParam.C:76
 CalibClParam.C:77
 CalibClParam.C:78
 CalibClParam.C:79
 CalibClParam.C:80
 CalibClParam.C:81
 CalibClParam.C:82
 CalibClParam.C:83
 CalibClParam.C:84
 CalibClParam.C:85
 CalibClParam.C:86
 CalibClParam.C:87
 CalibClParam.C:88
 CalibClParam.C:89
 CalibClParam.C:90
 CalibClParam.C:91
 CalibClParam.C:92
 CalibClParam.C:93
 CalibClParam.C:94
 CalibClParam.C:95
 CalibClParam.C:96
 CalibClParam.C:97
 CalibClParam.C:98
 CalibClParam.C:99
 CalibClParam.C:100
 CalibClParam.C:101
 CalibClParam.C:102
 CalibClParam.C:103
 CalibClParam.C:104
 CalibClParam.C:105
 CalibClParam.C:106
 CalibClParam.C:107
 CalibClParam.C:108
 CalibClParam.C:109
 CalibClParam.C:110
 CalibClParam.C:111
 CalibClParam.C:112
 CalibClParam.C:113
 CalibClParam.C:114
 CalibClParam.C:115
 CalibClParam.C:116
 CalibClParam.C:117
 CalibClParam.C:118
 CalibClParam.C:119
 CalibClParam.C:120
 CalibClParam.C:121
 CalibClParam.C:122
 CalibClParam.C:123
 CalibClParam.C:124
 CalibClParam.C:125
 CalibClParam.C:126
 CalibClParam.C:127
 CalibClParam.C:128
 CalibClParam.C:129
 CalibClParam.C:130
 CalibClParam.C:131
 CalibClParam.C:132
 CalibClParam.C:133
 CalibClParam.C:134
 CalibClParam.C:135
 CalibClParam.C:136
 CalibClParam.C:137
 CalibClParam.C:138
 CalibClParam.C:139
 CalibClParam.C:140
 CalibClParam.C:141
 CalibClParam.C:142
 CalibClParam.C:143
 CalibClParam.C:144
 CalibClParam.C:145
 CalibClParam.C:146
 CalibClParam.C:147
 CalibClParam.C:148
 CalibClParam.C:149
 CalibClParam.C:150
 CalibClParam.C:151
 CalibClParam.C:152
 CalibClParam.C:153
 CalibClParam.C:154
 CalibClParam.C:155
 CalibClParam.C:156
 CalibClParam.C:157
 CalibClParam.C:158
 CalibClParam.C:159
 CalibClParam.C:160
 CalibClParam.C:161
 CalibClParam.C:162
 CalibClParam.C:163
 CalibClParam.C:164
 CalibClParam.C:165
 CalibClParam.C:166
 CalibClParam.C:167
 CalibClParam.C:168
 CalibClParam.C:169
 CalibClParam.C:170