]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Pseudo code to fill the AliTPCclusterParam
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Aug 2008 23:11:36 +0000 (23:11 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Aug 2008 23:11:36 +0000 (23:11 +0000)
Gain and position correction (Marian)

TPC/CalibMacros/CalibClParam.C [new file with mode: 0644]

diff --git a/TPC/CalibMacros/CalibClParam.C b/TPC/CalibMacros/CalibClParam.C
new file mode 100644 (file)
index 0000000..39c65f8
--- /dev/null
@@ -0,0 +1,164 @@
+//
+// 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");
+  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");
+  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();
+
+}