]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Adding position dependendent Q normalization (Marian)
authormarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 28 Jul 2008 17:49:00 +0000 (17:49 +0000)
committermarian <marian@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 28 Jul 2008 17:49:00 +0000 (17:49 +0000)
TPC/AliTPCcalibTracksGain.cxx
TPC/AliTPCcalibTracksGain.h

index cc0d53255f7ca07cfd7fac3415ac98b1bdb6dd7a..6b60e55fc89c7adfa793585c56f7d620b97195af 100644 (file)
 /*
   .x ~/UliStyle.C
   gSystem->Load("libANALYSIS");
+  gSystem->Load("libSTAT");
   gSystem->Load("libTPCcalib");
+
   TFile fcalib("CalibObjects.root");
   TObjArray * array = (TObjArray*)fcalib.Get("TPCCalib");
   AliTPCcalibTracksGain * gain = ( AliTPCcalibTracksGain *)array->FindObject("calibTracksGain");
   chain2->SetAlias("k0","1/0.9928");
   chain2->SetAlias("k2","1/1.152");
   
-
-  Position correction fit:
-  //
-  gSystem->Load("libSTAT.so")
-  TStatToolkit toolkit;
-  Double_t chi2;
-  TVectorD fitParam;
-  TMatrixD covMatrix;
-  Int_t npoints;
-  //
-  TCut cutA("dedge>3&&fraction2<0.5");
-  chain0->SetAlias("dp","(Cl.fPad-int(Cl.fPad)-0.5)");
-  chain0->SetAlias("dt","(Cl.fTimeBin-int(Cl.fTimeBin)-0.5)");
-  chain0->SetAlias("di","(sqrt(1.-abs(Cl.fZ)/250.))");
-
-  TString fstring="";  
-  fstring+="dp++";                               //1
-  fstring+="dt++";                               //2
-  fstring+="dp^2++";                             //3
-  fstring+="dt^2++";                             //4
-  fstring+="dt^3++";                             //4
-  fstring+="dp*dt++";                            //5
-  fstring+="dp*dt^2++";                          //6
-  //
-  fstring+="dp^2*(di)++";                        //7
-  fstring+="dt^2*(di)++";                        //8
-  fstring+="dp^2*(abs(parY.fElements[1]))++";                        //9
-  fstring+="dt^2*(abs(parY.fElements[1]))++";                        //10
-  fstring+="dp^2*(abs(parZ.fElements[1]))++";                        //11
-  fstring+="dt^2*(abs(parZ.fElements[1]))++";                        //12
-
-
- TString *strq0 = toolkit.FitPlane(chain0,"Cl.fMax/gain/dedxM.fElements[0]",fstring->Data(), "IPad==0"+cutA, chi2,npoints,fitParam,covMatrix,-1,0,100000);
-
- chain0->SetAlias("qcorM0",strq0->Data());
- chain0->Draw("(Cl.fMax/gain/dedxM.fElements[0]):qcorM0","IPad==0"+cutA,"prof",100000)
-
-
 */
 
 
 #include "AliTPCclusterMI.h"
 #include "AliTPCcalibTracksCuts.h"
 #include "AliTPCFitPad.h"
+#include "TStatToolkit.h"
+#include "TString.h"
+#include "TCut.h"
 
-// REMOVE ALL OF THIS
+//
 #include <TTree.h>
 #include "AliESDEvent.h"
 
@@ -1609,3 +1576,188 @@ void   AliTPCcalibTracksGain::Analyze(){
 }
 
 
+
+TVectorD *  AliTPCcalibTracksGain::MakeQPosNorm(TTree * chain0, Int_t ipad, Bool_t isMax, Int_t maxPoints, Int_t verbose){
+  //
+  // Input parameters
+  // chain0 - the tree with information  -Debug stream
+  // ipad   - 0 IROC
+  //        - 1 OROC medium
+  //        - 2 OROC LONG
+  // isMax  - kFALSE - total charge param
+  //          kTRUE  - Max charge param
+  //
+  // maxPoints - number of points for fit
+  //
+  // verbose -
+  //
+  /* e.g 
+    ipad=0
+    isMax=kTRUE;
+    maxPoints=1000000;
+  */
+  // Make Q normalization as function of following parameters
+  // 1 - dp   - relative pad position 
+  // 2 - dt   - relative time position
+  // 3 - di   - drift length (norm to 1);
+  // 4 - dq0  - Tot/Max charge
+  // 5 - dq1  - Max/Tot charge
+  // 6 - sy   - sigma y - shape
+  // 7 - sz   - sigma z - shape
+  //
+  // Coeficient of Taylor expansion fitted
+  // Fit parameters returned as TVectorD
+  // Fit parameters to be used in corresponding correction function
+  // in AliTPCclusterParam 
+  //
+  //
+  TStatToolkit toolkit;
+  Double_t chi2;
+  TVectorD fitParam;
+  TMatrixD covMatrix;
+  Int_t npoints;
+  TCut cutA("dedge>3&&fraction2<0.7");
+  chain0->SetAlias("dp","((Cl.fPad-int(Cl.fPad)-0.5)/0.5)");
+  chain0->SetAlias("dt","((Cl.fTimeBin-int(Cl.fTimeBin)-0.5)/0.5)");
+  chain0->SetAlias("di","(sqrt(1.-abs(Cl.fZ)/250.))");
+  chain0->SetAlias("dq0","(0.2*(Cl.fQ+2)/(Cl.fMax+2))");
+  chain0->SetAlias("dq1","(5*(Cl.fMax+2)/(Cl.fQ+2))");
+  chain0->SetAlias("sy","(0.32/sqrt(0.01^2+Cl.fSigmaY2))");
+  chain0->SetAlias("sz","(0.32/sqrt(0.01^2+Cl.fSigmaZ2))");
+  //
+  TString fstring="";    
+  fstring+="dp++";                               //1
+  fstring+="dt++";                               //2
+  fstring+="dp*dp++";                             //3
+  fstring+="dt*dt++";                             //4
+  fstring+="dt*dt*dt++";                             //5
+  fstring+="dp*dt++";                            //6
+  fstring+="dp*dt*dt++";                          //7
+  fstring+="(dq0)++";                            //8
+  fstring+="(dq1)++";                            //9
+  //
+  //
+  fstring+="dp*dp*(di)++";                        //10
+  fstring+="dt*dt*(di)++";                        //11
+  fstring+="dp*dp*sy++";                          //12
+  fstring+="dt*sz++";                          //13
+  fstring+="dt*dt*sz++";                          //14
+  fstring+="dt*dt*dt*sz++";                          //15
+  //
+  fstring+="dp*dp*1*sy*sz++";                     //16
+  fstring+="dt*sy*sz++";                       //17
+  fstring+="dt*dt*sy*sz++";                       //18
+  fstring+="dt*dt*dt*sy*sz++";                       //19
+  //
+  fstring+="dp*dp*(dq0)++";                       //20
+  fstring+="dt*1*(dq0)++";                       //21
+  fstring+="dt*dt*(dq0)++";                       //22
+  fstring+="dt*dt*dt*(dq0)++";                       //23
+  //
+  fstring+="dp*dp*(dq1)++";                       //24
+  fstring+="dt*(dq1)++";                       //25
+  fstring+="dt*dt*(dq1)++";                       //26
+  fstring+="dt*dt*dt*(dq1)++";                       //27
+  
+  TString var;
+  if (isMax)  var = "Cl.fMax/gain/dedxM.fElements[2]";
+  if (!isMax) var = "Cl.fQ/gain/dedxQ.fElements[2]";
+  TString cutP="IPad==";
+  cutP+=ipad;
+  //
+  TString *strq0 = toolkit.FitPlane(chain0,var.Data(),fstring.Data(), cutP.Data()+cutA, chi2,npoints,fitParam,covMatrix,-1,0,maxPoints);
+  //
+  //
+  if (verbose){
+    printf("Chi2/npoints = %f",TMath::Sqrt(chi2/npoints));
+    printf("\nFit function\n:%s\n",strq0->Data());
+  }
+  TVectorD *vec = new TVectorD(fitParam);
+  return vec;
+}
+
+void  AliTPCcalibTracksGain::MakeQPosNormAll(TTree * chain, AliTPCClusterParam * param, Int_t maxPoints, Int_t verbose){
+  //
+  // Fill the content of the of the AliTPCclusterParam
+  // with fitted values of corrections 
+  //
+  
+}
+
+
+
+/*
+  
+ Position correction fit:
+ //
+TStatToolkit toolkit;
+Double_t chi2;
+TVectorD fitParam;
+TMatrixD covMatrix;
+Int_t npoints;
+//
+TCut cutA("dedge>3&&fraction2<0.7");
+chain0->SetAlias("dp","((Cl.fPad-int(Cl.fPad)-0.5)/0.5)");
+chain0->SetAlias("dt","((Cl.fTimeBin-int(Cl.fTimeBin)-0.5)/0.5)");
+chain0->SetAlias("di","(sqrt(1.-abs(Cl.fZ)/250.))");
+chain0->SetAlias("dq0","(0.2*(Cl.fQ+2)/(Cl.fMax+2))");
+chain0->SetAlias("dq1","(5*(Cl.fMax+2)/(Cl.fQ+2))");
+chain0->SetAlias("sy","(0.2/sqrt(0.01^2+Cl.fSigmaY2))");
+chain0->SetAlias("sz","(0.2/sqrt(0.01^2+Cl.fSigmaZ2))");
+
+TString fstring="";  
+
+fstring+="dp++";                               //1
+fstring+="dt++";                               //2
+fstring+="dp*dp++";                             //3
+fstring+="dt*dt++";                             //4
+fstring+="dt*dt*dt++";                             //5
+fstring+="dp*dt++";                            //6
+fstring+="dp*dt*dt++";                          //7
+fstring+="(dq0)++";                            //8
+fstring+="(dq1)++";                            //9
+//
+//
+fstring+="dp*dp*(di)++";                        //10
+fstring+="dt*dt*(di)++";                        //11
+fstring+="dp*dp*sy++";                          //12
+fstring+="dt*sz++";                          //13
+fstring+="dt*dt*sz++";                          //14
+fstring+="dt*dt*dt*sz++";                          //15
+//
+fstring+="dp*dp*1*sy*sz++";                     //16
+fstring+="dt*sy*sz++";                       //17
+fstring+="dt*dt*sy*sz++";                       //18
+fstring+="dt*dt*dt*sy*sz++";                       //19
+//
+fstring+="dp*dp*(dq0)++";                       //20
+fstring+="dt*1*(dq0)++";                       //21
+fstring+="dt*dt*(dq0)++";                       //22
+fstring+="dt*dt*dt*(dq0)++";                       //23
+
+fstring+="dp*dp*(dq1)++";                       //24
+fstring+="dt*(dq1)++";                       //25
+fstring+="dt*dt*(dq1)++";                       //26
+fstring+="dt*dt*dt*(dq1)++";                       //27
+
+
+ TString *strq0 = toolkit.FitPlane(chain0,"Cl.fMax/gain/dedxM.fElements[2]",fstring->Data(), "IPad==0"+cutA, chi2,npoints,fitParam,covMatrix,-1,0,200000);
+ TString *strqt0 = toolkit.FitPlane(chain0,"Cl.fQ/gain/dedxQ.fElements[2]",fstring->Data(), "IPad==0"+cutA, chi2,npoints,fitParam,covMatrix,-1,0,200000);
+
+ chain0->SetAlias("qcorM0",strq0->Data());
+ chain0->SetAlias("qcorT0",strqt0->Data());
+//chain0->SetAlias("mmqcorM0","min(max(qcorM0,0.75),1.15)");
+ chain0->Draw("(Cl.fMax/gain/dedxM.fElements[2]):min(max(qcorM0,0.75),1.15)","IPad==0"+cutA,"prof",100000)
+
+ fraction05 - 
+     sigma                  0.2419
+     sigma fit              0.2302
+     sigma fit with shape   0.2257
+ fraction 07    
+     qtot sigma                  0.322
+     qmax sigma                  0.292
+     qmax sigma fit              0.2702
+     qmax sigma fit+ratio        0.2638
+
+*/
+
index 15bb9fb200773d0c7c016814a6c4e68835f03e6d..c35e09227dadd634d88842854c17961f0a310e78 100644 (file)
@@ -80,6 +80,14 @@ public:
 
   void            AddCluster(AliTPCclusterMI* cluster);
   void            Add(AliTPCcalibTracksGain* cal);
+
+  //
+  // Debug stream analyze part
+  //
+  static TVectorD * MakeQPosNorm(TTree * chain, Int_t ipad, Bool_t isMax, Int_t maxPoints=1000000, Int_t verbose=0);
+  
+  static void MakeQPosNormAll(TTree * chain, AliTPCClusterParam * param, Int_t maxPoints=1000000, Int_t verbose=0);
+
   //
   // Histogram part
   //