StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
meanDca.C
1 #include "common/Name.cc"
2 #include "commonmacro/histutil.h"
3 #include "commonmacro/common.h"
4 void meanDca(const char* inName=
5  "links/P01hi.minbias.2000.hist/hianalysis_1000.hist.root",
6  const char* psDir="ps",
7  int cut = 1,
8  const char* outDir="./",
9  const char* more = "",
10  float extraValue = 1)
11 
12 {
13 
14  cout << "--------------------------" << endl;
15  cout << "in name=" << inName << endl
16  << "ps dir=" << psDir << endl
17  << "cut=" << cut << endl;
18  cout << "--------------------------" << endl;
19 
20  inRoot = new TFile(inName);
21 
22  if(!inRoot){
23  cout << "cannot find the infile" << endl;
24  return;
25  }
26  TCanvas c1("c1","c1",400,525);
27  TString sName,sTitle;
28  const int nPtType=1;
29  const int nChargeType=4;
30  const int nZperHalf=4;
31  const int nType=2;
32 
33  bool doPos=1;
34 
35  TH1 *ha,*hb,*hc;
36  char* type[] = { "Mean","Rms","Num"};
37  char* ptType[] = { "PrPt","GlPt" };
38  char* chargeType[] = {"Neg","Pos","PosPlusNeg","PosMinusNeg"};
39  gStyle->SetOptStat(0);
40  //-----------------------------------------------------------------
41  // mean dca vs phi, z bins
42  for(int it=0; it<nType; it++){
43  for(int ipt=0;ipt<nPtType;ipt++){ // pt type
44  for(int iew=0;iew<2;iew++){ // east west
45  int zBin=0;
46  TH1* h1[nChargeType][10];
47 
48  for(int ic=0; ic<nChargeType; ic++){ // get the histos
49  if(iew<1){ zBin=1; } else { zBin=5; }
50  for(int iz=0; iz<nZperHalf; iz++){
51  sprintf(name,"h%s%sDcaXY%sVphiS0zBin%dSdcaXYBin1",
52  type[it],chargeType[ic],ptType[ipt],zBin++);
53  //cout << name << endl;
54  h1[ic][iz]=(TH1D*)inRoot.Get(name); if(!h1[ic][iz]) return;
55  }
56  }
57  // plus and minus
58  sprintf(name,"%sPosNegDcaXY%sVphi%s",
59  type[it],ptType[ipt],sEW[iew].Data());
60  Divide(&c1,2,2,name,inName);
61  //c1.Divide(2,2);
62  zBin=0;
63  for(int i=0;i<4;i++){
64  if(iew<1){ zBin = 3-i;} else { zBin = i; }
65  c1.cd(i+1);
66 
67  ha=h1[0][zBin]; hb=h1[1][zBin]; hc=h1[2][zBin];
68  setMinMax(ha,hb,hc,type[it]);
69  TString s=ha->GetTitle();
70  //cout << ha->GetName() << endl;
71  s.Replace(0,s.First("("),"");
72  s.Replace(s.First(")")+1,s.Length(),"");
73  ha->SetTitle(s.Data());
74  ha->SetMarkerColor(kBlue); ha->SetMarkerStyle(4);
75 
76  ha->Draw("p"); DrawLine(ha);
77  if(doPos){
78  hb->SetMarkerColor(kRed);
79  hc->SetMarkerColor(kGreen);
80  hb->SetMarkerStyle(8);
81  hc->SetMarkerStyle(10);
82  hb->Draw("psame");
83  hc->Draw("psame");
84  }
85 
86  }
87  Print(&c1,psDir,name);
88 
89  // dca*charge
90  if(doPos){
91  sprintf(name,"%sPosMinusNegDcaXY%sVphi%s",
92  type[it],ptType[ipt],sEW[iew].Data());
93  Divide(&c1,2,2,name,inName);
94  for(int i=0;i<4;i++){
95  if(iew<1){ zBin = 3-i;} else { zBin = i; }
96  c1.cd(i+1);
97  setMinMax(h1[3][zBin],0,0,type[it]);
98  h1[3][zBin]->Draw("p");
99  }
100  Print(&c1,psDir,name);
101  }
102  }//iew
103  } //ipt type
104  } // type
105 
106  //---------------------------------------------
107  // dca vs z
108 
109  for(int it=0; it<nType; it++){
110  for(int ipt=0;ipt<nPtType;ipt++){ // pt type
111  TH1* h[nChargeType];
112 
113  for(int ic=0; ic<nChargeType; ic++){ // get the histos
114  sprintf(name,"h%s%sDcaXY%sVzS0phiBin1SdcaXYBin1",
115  type[it],chargeType[ic],ptType[ipt],zBin++);
116  //cout << name << endl;
117  h[ic]=(TH1*)inRoot.Get(name); if(!h[ic]) return;
118  }
119 
120  // plus and minus
121  sprintf(name,"%sPosNegDcaXY%sVz",
122  type[it],ptType[ipt]);
123  Divide(&c1,1,2,name,inName);
124  c1.cd(1);
125  ha=h[0]; hb=h[1]; hc=h[2];
126  setMinMax(ha,hb,hc,type[it]);
127  ha->SetMarkerColor(kBlue);
128  ha->Draw("p"); ha->SetMarkerStyle(4);DrawLine(ha);
129  if(doPos){
130  hb->SetMarkerColor(kRed);
131  hc->SetMarkerColor(kGreen);
132  hb->SetMarkerStyle(8);
133  hc->SetMarkerStyle(10);
134  hb->Draw("psame"); hc->Draw("psame");
135  }
136  // dca*charge
137  if(doPos){
138  c1.cd(2);
139  setMinMax(h[3],0,0,type[it]);
140  h[3]->Draw("p");
141  }
142  Print(&c1,psDir,name);
143 
144  }
145  }
146 
147 
148 
149 }
150 
151 void setMinMax(TH1* ha,TH1* hb,TH1* hc,TString t)
152 {
153  if(t=="Mean"){
154  SetMinMax(ha,-.1,.1);
155  }
156  else if(t=="Num"){
157  if(hc)SetMinMax(ha,ha->GetMinimum()*0.5,hc->GetMaximum()*1.2);
158  else SetMinMax(ha);
159  }
160  else if(t=="Rms"){
161  SetMinMax(ha,0.2,0.8);
162  }
163  else{ cout << "Unknown type " << t << endl; }
164 }
165 
virtual void Draw(Option_t *depth="3")
Draw Referenced node with current parameters.