Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
RFMacro_InternalDeltaTs.C
Go to the documentation of this file.
1 TObjArray* Get_RFDeltaTHists(string locSystem);
2 void Draw_Array(string locSystem, TObjArray* locTotalArray);
3 
4 double gPreScaleFactor = 128.0;
5 //double gRFPeriod = 1000.0/499.0;
6 //double gRFPeriod = 1000.0/(1497.1/3.0);
7 double gRFPeriod = 2.0039754;
8 
10 {
11  gDirectory->cd("/"); //return to file base directory
12 
13  //Goto RF Path
14  TDirectory *locDirectory = (TDirectory*)gDirectory->FindObjectAny("RF");
15  if(!locDirectory)
16  return 0;
17  locDirectory->cd();
18 
19  //Get RF DeltaT Histograms
20  gDirectory->cd("DeltaT_All");
21  TObjArray* locFDCArray = Get_RFDeltaTHists("FDC");
22  TObjArray* locPSCArray = Get_RFDeltaTHists("PSC");
23  TObjArray* locTAGHArray = Get_RFDeltaTHists("TAGH");
24  TObjArray* locTOFArray = Get_RFDeltaTHists("TOF");
25 
26  //Draw
27  Draw_Array("FDC", locFDCArray);
28  Draw_Array("PSC", locPSCArray);
29  Draw_Array("TAGH", locTAGHArray);
30  Draw_Array("TOF", locTOFArray);
31 
32  return 1;
33 }
34 
35 TObjArray* Get_RFDeltaTHists(string locSystem)
36 {
37  int locFirstHit = 0, locSecondHit = 0;
38  TObjArray* locTotalArray = new TObjArray();
39  TObjArray* locRowArray = NULL;
40  while(true)
41  {
42  ostringstream locHistName;
43  locHistName << locSystem << "RF_DeltaT_" << locFirstHit << "_" << locSecondHit;
44  TObject* locObject = gDirectory->Get(locHistName.str().c_str());
45  if(locObject == NULL)
46  {
47  if(locSecondHit == locFirstHit)
48  break;
49  ++locFirstHit;
50  locSecondHit = locFirstHit;
51  continue;
52  }
53 
54  if(locSecondHit == locFirstHit)
55  {
56  locRowArray = new TObjArray();
57  for(int loc_i = 0; loc_i < locSecondHit; ++loc_i)
58  locRowArray->AddLast(NULL);
59  locTotalArray->AddLast(locRowArray);
60  }
61  locRowArray->AddLast(locObject);
62  ++locSecondHit;
63  }
64  return locTotalArray;
65 }
66 
67 void Draw_Array(string locSystem, TObjArray* locTotalArray)
68 {
69  int locNumHits = locTotalArray->GetEntriesFast();
70 
71  //Means
72  string locHistName = string("DeltaTMeans_") + locSystem + string("RF");
73  string locHistTitle = string("Shifted #Deltat Means (ns), ") + locSystem + string(" RF;First Hit;Second Hit");
74  TH2F* locMeanHist = new TH2F(locHistName.c_str(), locHistTitle.c_str(), locNumHits, 0.5, locNumHits + 0.5, locNumHits, 0.5, locNumHits + 0.5);
75 
76  //Std Dev
77  locHistName = string("DeltaTSigmas_") + locSystem + string("RF");
78  locHistTitle = string("#Deltat #sigma/#sqrt{2} (ns), ") + locSystem + string(" RF;First Hit;Second Hit");
79  TH2F* locStdDevHist = new TH2F(locHistName.c_str(), locHistTitle.c_str(), locNumHits, 0.5, locNumHits + 0.5, locNumHits, 0.5, locNumHits + 0.5);
80 
81  //Skewness
82  locHistName = string("DeltaTSkewness_") + locSystem + string("RF");
83  locHistTitle = string("#Deltat Skewness, ") + locSystem + string(" RF;First Hit;Second Hit");
84  TH2F* locSkewnessHist = new TH2F(locHistName.c_str(), locHistTitle.c_str(), locNumHits, 0.5, locNumHits + 0.5, locNumHits, 0.5, locNumHits + 0.5);
85 
86  //Kurtosis
87  locHistName = string("DeltaTKurtosis_") + locSystem + string("RF");
88  locHistTitle = string("#Deltat Kurtosis, ") + locSystem + string(" RF;First Hit;Second Hit");
89  TH2F* locKurtosisHist = new TH2F(locHistName.c_str(), locHistTitle.c_str(), locNumHits, 0.5, locNumHits + 0.5, locNumHits, 0.5, locNumHits + 0.5);
90 
91  //Get values, build mega-canvas
92  string locCanvasName = string("DeltaTs_") + locSystem + string("RFCanvas");
93  int locPadHeight = 200;
94  gStyle->SetOptStat(0000);
95  gStyle->SetNumberContours(20);
96 
97  TCanvas* locCanvas = new TCanvas(locCanvasName.c_str(), locCanvasName.c_str(), locNumHits*locPadHeight*16.0/9.0, locNumHits*locPadHeight);
98  locCanvas->Divide(locNumHits, locNumHits);
99  for(int loc_i = 0; loc_i < locNumHits; ++loc_i) //first hit: columns
100  {
101  TObjArray* locRowArray = (TObjArray*)locTotalArray->At(loc_i);
102  for(int loc_j = 0; loc_j < locNumHits; ++loc_j) //second hit: rows
103  {
104  TH1* locDeltaTHist = (TH1*)locRowArray->At(loc_j);
105  if((locDeltaTHist == NULL) || (loc_i == loc_j))
106  {
107  locMeanHist->SetBinContent(loc_i + 1, loc_j + 1, -1.0/0.0);
108  locStdDevHist->SetBinContent(loc_i + 1, loc_j + 1, -1.0/0.0);
109  locSkewnessHist->SetBinContent(loc_i + 1, loc_j + 1, -1.0/0.0);
110  locKurtosisHist->SetBinContent(loc_i + 1, loc_j + 1, -1.0/0.0);
111  if(locDeltaTHist == NULL)
112  continue;
113  }
114 
115  double locPeakLocation = locDeltaTHist->GetBinCenter(locDeltaTHist->GetMaximumBin());
116  locDeltaTHist->GetXaxis()->SetRangeUser(locPeakLocation - 10.0, locPeakLocation + 10.0);
117  double locMean = locDeltaTHist->GetMean();
118  double locShiftedMean = locMean - double(loc_j - loc_i)*gPreScaleFactor*gRFPeriod;
119  if(loc_i != loc_j)
120  {
121  locMeanHist->SetBinContent(loc_i + 1, loc_j + 1, locShiftedMean);
122  locStdDevHist->SetBinContent(loc_i + 1, loc_j + 1, locDeltaTHist->GetStdDev()/sqrt(2.0));
123  locSkewnessHist->SetBinContent(loc_i + 1, loc_j + 1, locDeltaTHist->GetSkewness());
124  locKurtosisHist->SetBinContent(loc_i + 1, loc_j + 1, locDeltaTHist->GetKurtosis());
125  }
126 
127  locDeltaTHist->GetXaxis()->SetRangeUser(locMean - 0.5, locMean + 0.5);
128  //i is
129  int locCanvasIndex = (locNumHits - loc_j - 1)*locNumHits + loc_i + 1;
130  locCanvas->cd(locCanvasIndex);
131  locDeltaTHist->Draw();
132  }
133  }
134 
135  locCanvasName = string("DeltaTMeans_") + locSystem + string("RFCanvas");
136  new TCanvas(locCanvasName.c_str(), locCanvasName.c_str(), 1600, 900);
137  locMeanHist->Draw("COLZ");
138 
139  locCanvasName = string("DeltaTSigmas_") + locSystem + string("RFCanvas");
140  new TCanvas(locCanvasName.c_str(), locCanvasName.c_str(), 1600, 900);
141  locStdDevHist->Draw("COLZ");
142 
143  locCanvasName = string("DeltaTSkewness_") + locSystem + string("RFCanvas");
144  new TCanvas(locCanvasName.c_str(), locCanvasName.c_str(), 1600, 900);
145  locSkewnessHist->Draw("COLZ");
146 
147  locCanvasName = string("DeltaTKurtosis_") + locSystem + string("RFCanvas");
148  new TCanvas(locCanvasName.c_str(), locCanvasName.c_str(), 1600, 900);
149  locKurtosisHist->Draw("COLZ");
150 
151  return 1;
152 }
void Draw_Array(string locSystem, TObjArray *locTotalArray)
char string[256]
int RFMacro_InternalDeltaTs(void)
TObjArray * Get_RFDeltaTHists(string locSystem)
TDirectory * locDirectory
double gPreScaleFactor
double sqrt(double)
TCanvas * locCanvas
double gRFPeriod