2 // Procedures to create a cluster parametererization
3 // Currently only pseudo code - once will be stable - to be updated as a "normal" macro
8 // That rough sequence to update a Cluster param calibration using debug streamers
13 gSystem->Load("libANALYSIS");
14 gSystem->Load("libSTAT");
15 gSystem->Load("libTPCcalib");
18 //1. Load Parameters to be modified:
20 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
21 AliCDBManager::Instance()->SetRun(0) ;
22 AliTPCClusterParam * param = AliTPCcalibDB::Instance()->GetClusterParam();
24 //2. Load chain from debug streamers
27 gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
28 gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+");
29 AliXRDPROOFtoolkit tool;
30 TChain * chainres = tool.MakeChain("tracks.txt","ResolCl",0,10200);
32 TChain * chainGain = tool.MakeChain("gain.txt","dEdx",0,1000000);
34 TChain * chainCosmic = tool.MakeChain("cosmic.txt","Track0",0,1000000);
35 chainCosmic->Lookup();
37 // 3. Do fits - pos correction
39 AliTPCcalibTracks::MakeQPosNormAll(chainres,param,200000,0) ;
44 param->fPosQTnorm[0] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,0,kFALSE,200000,kTRUE);
45 param->fPosQTnorm[1] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,1,kFALSE,200000,kTRUE);
46 param->fPosQTnorm[2] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,2,kFALSE,200000,kTRUE);
48 param->fPosQMnorm[0] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,0,kTRUE,200000,kTRUE);
49 param->fPosQMnorm[1] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,1,kTRUE,200000,kTRUE);
50 param->fPosQMnorm[2] = AliTPCcalibTracksGain::MakeQPosNorm(chainGain,2,kTRUE,200000,kTRUE);
54 TFile f("paramout.root","recreate");
55 param->Write("clusterParam");
60 TFile f2("paramout.root");
61 AliTPCClusterParam *param2 = (AliTPCClusterParam*)f2.Get("clusterParam");
62 param2->SetInstance(param2);
64 // position correction
65 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
67 TCut cutA("dedge>3&&fraction2<0.7");
68 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);
76 // Pseudo code -to update cluster params
78 .L $ALICE_ROOT/TPC/Cal/AliTPCCreateDummyCDB.C
79 TFile f2("paramout.root");
80 AliTPCClusterParam *param2 = (AliTPCClusterParam*)f2.Get("clusterParam");
81 AliCDBManager *man = AliCDBManager::Instance();
82 gStorLoc = man->GetStorage(gCDBpath);
83 metaData = CreateMetaObject("AliTPCClusterParam");
84 StoreObject("TPC/Calib/ClusterParam/", param2, metaData);
89 void TestChainCosmicDedx(){
93 gSystem->Load("libANALYSIS");
94 gSystem->Load("libSTAT");
95 gSystem->Load("libTPCcalib");
96 AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
97 AliCDBManager::Instance()->SetRun(0) ;
98 AliTPCClusterParam * param = AliTPCcalibDB::Instance()->GetClusterParam();
99 param->SetInstance(param);
101 gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros");
102 gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+");
103 AliXRDPROOFtoolkit tool;
104 TChain * chainCosmic = tool.MakeChain("cosmic.txt","Track0",0,1000000);
105 chainCosmic->Lookup();
109 TCut cutT("cutT","abs(Tr1.fP[3]+Tr0.fP[3])<0.01"); // OK
110 TCut cutD("cutD","abs(Tr0.fP[0]+Tr1.fP[0])<2"); // OK
111 TCut cutP1("cutP1","abs(Tr0.fP[1]-Tr1.fP[1])<3"); // OK
112 TCut cutPt("cutPt","abs(Tr1.fP[4]+Tr0.fP[4])<0.1&&abs(Tr0.fP[4])+abs(Tr1.fP[4])<10");
113 TCut cutN("cutN","min(Orig0.fTPCncls,Orig1.fTPCncls)>100");
114 TCut cutA=cutT+cutD+cutPt+cutN+cutP1;
116 TCut cutS("cutS","Orig0.fIp.fP[1]*Orig1.fIp.fP[1]>0");
118 if (gProof) chainCosmic->SetProof(kTRUE);
123 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);
126 // Q normalization - short - medium - long
132 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);
133 TH1 * his = (TH1*)gROOT->FindObject("his");
134 paramT[0]=his->GetMean();
136 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);
137 TH1 * his = (TH1*)gROOT->FindObject("his");
138 paramT[1]=his->GetMean();
140 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);
141 TH1 * his = (TH1*)gROOT->FindObject("his");
142 paramT[2]=his->GetMean();
145 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);
146 TH1 * his = (TH1*)gROOT->FindObject("his");
147 paramM[0]=his->GetMean();
149 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);
150 TH1 * his = (TH1*)gROOT->FindObject("his");
151 paramM[1]=his->GetMean();
153 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);
154 TH1 * his = (TH1*)gROOT->FindObject("his");
155 paramM[2]=his->GetMean();
157 param->fQpadTnorm=(TVectorD*)paramT->Clone();
158 param->fQpadMnorm=(TVectorD*)paramM->Clone();
160 TFile f("paramout.root","recreate");
161 param->Write("clusterParam");
168 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");