]>
Commit | Line | Data |
---|---|---|
ca4508a6 | 1 | Int_t AliTOFanalyzeDigits(TString headersFile, Int_t ndump=15, Int_t iEvNum=0) |
2 | { | |
3 | // | |
4 | // Analyzes the TOF digits and fills QA-histograms | |
5 | // report problems to pierella@bo.infn.it | |
6 | // iEvNum=0 means all events in the file | |
7 | // Author: F. Pierella (Bologna University) | |
8 | ||
9 | // Dynamically link some shared libs | |
10 | if (gClassTable->GetID("AliRun") < 0) { | |
11 | gROOT->LoadMacro("loadlibs.C"); | |
12 | loadlibs(); | |
13 | } else { | |
14 | delete gAlice; | |
15 | gAlice = 0; | |
16 | } | |
17 | ||
18 | Int_t rc=0; | |
19 | ||
20 | ||
21 | TFile *file = (TFile*)gROOT->GetListOfFiles()->FindObject(headersFile.Data()); | |
22 | if(file){ | |
23 | cout<<"headerFile already open \n"; | |
24 | } | |
25 | else { | |
26 | if(!file)file=TFile::Open(headersFile.Data()); | |
27 | } | |
28 | ||
29 | // Get AliRun object from file | |
30 | if (!gAlice) { | |
31 | gAlice = (AliRun*)file->Get("gAlice"); | |
32 | if (gAlice) printf("AliRun object found on file\n"); | |
33 | } | |
34 | ||
35 | ||
36 | if (iEvNum == 0) iEvNum = (Int_t) gAlice->TreeE()->GetEntries(); | |
37 | ||
38 | ||
39 | AliTOFdigit *tofdigit; | |
40 | ||
41 | AliTOF * tof = (AliTOF *) gAlice->GetDetector("TOF") ; | |
42 | ||
43 | if (!tof) { | |
44 | cout << "<AliTOFanalyzeDigits> No TOF detector found" << endl; | |
45 | rc = 2; | |
46 | return rc; | |
47 | } | |
48 | ||
49 | // adc and tdc | |
50 | TH1F *htdc = new TH1F("htdc","TDC [bin]",500,0.,15000.); | |
51 | TH1F *hadc = new TH1F("hadc","ADC [bin]",100,0., 3000.); | |
52 | ||
53 | // TOF digit volumes | |
54 | TH1F *hsector = new TH1F("hsector","Sector",20,0.,20.); | |
55 | TH1F *hplate = new TH1F("hplate","Plate ", 6,0., 6.); | |
56 | TH1F *hstrip = new TH1F("hstrip","Strip ",25,0.,25.); | |
57 | TH1F *hpadz = new TH1F("hpadz","Pad along z ",3,0.,3.); | |
58 | TH1F *hpadx = new TH1F("hpadx","Pad along x",50,0.,50.); | |
59 | // ADC-TDC correlation | |
60 | TH2F *h2tdcVSadc = new TH2F("h2tdcVSadc","TDC [bin] VS ADC [bin]",100,0.,3000.,500,0.,15000.); | |
61 | ||
62 | cout << "First " << ndump << " Digits found in TOF TreeD branch have:" << endl; | |
63 | ||
64 | for (Int_t ievent = 0; ievent < iEvNum; ievent++) { | |
65 | ||
66 | gAlice->GetEvent(ievent) ; | |
67 | if(gAlice->TreeD()==0) { | |
68 | cout << "<AliTOFanalyzeDigits> No TreeD found" << endl; | |
69 | rc = 4; | |
70 | return rc; | |
71 | } | |
72 | ||
73 | ||
74 | ||
75 | Int_t ndig, k; | |
76 | gAlice->ResetDigits(); | |
77 | gAlice->TreeD()->GetEvent(ievent); | |
78 | TClonesArray * TOFdigits = tof->Digits(); | |
79 | ||
80 | ndig=TOFdigits->GetEntries(); | |
81 | ||
82 | cout << "<AliTOFanalyzeDigits> found " << ndig | |
83 | << " TOF digits for event " << ievent << endl; | |
84 | ||
85 | for (k=0; k<ndig; k++) { | |
86 | tofdigit= (AliTOFdigit*) TOFdigits->UncheckedAt(k); | |
87 | Float_t tdc=tofdigit->GetTdc(); | |
88 | Float_t adc=tofdigit->GetAdc(); | |
89 | htdc->Fill(tdc); | |
90 | hadc->Fill(adc); | |
91 | // TOF digit volumes | |
92 | Int_t sector = tofdigit->GetSector(); // range [1-18] | |
93 | Int_t plate = tofdigit->GetPlate(); // range [1- 5] | |
94 | Int_t strip = tofdigit->GetStrip(); // range [1-20] | |
95 | Int_t padz = tofdigit->GetPadz(); // range [1- 2] | |
96 | Int_t padx = tofdigit->GetPadx(); // range [1-48] | |
97 | // it is QA, then I perform QA! | |
98 | Bool_t isDigitBad = (sector<1 || sector>18 || plate<1 || plate >5 || padz<1 || padz>2 || padx<1 || padx>48); | |
99 | ||
100 | if (isDigitBad) { | |
101 | cout << "<AliTOFanalyzeDigits> strange digit found" << endl; | |
102 | rc = 3; | |
103 | return rc; | |
104 | } | |
105 | ||
106 | if(k<ndump){ | |
107 | cout << k << "-th | " << "Sector " << sector << " | Plate " << plate << " | Strip " << strip << " | PadZ " << padz << " | PadX " << padx << endl; | |
108 | cout << k << "-th | ADC " << adc << " [bin] | TDC " << tdc << " [bin]" << endl; | |
109 | cout << "----------------------------------------------------"<< endl; | |
110 | } | |
111 | ||
112 | // filling digit volume histos | |
113 | hsector->Fill(sector); | |
114 | hplate->Fill(plate); | |
115 | hstrip->Fill(strip); | |
116 | hpadx->Fill(padx); | |
117 | hpadz->Fill(padz); | |
118 | h2tdcVSadc->Fill(adc,tdc); | |
119 | ||
120 | } | |
121 | ||
122 | } // end loop on events | |
123 | ||
124 | TFile *fout = new TFile("TOF_digitsQA.root","RECREATE"); | |
125 | htdc->Write(); | |
126 | hadc->Write(); | |
127 | h2tdcVSadc->Write(); | |
128 | hsector->Write(); | |
129 | hplate->Write(); | |
130 | hstrip->Write(); | |
131 | hpadz->Write(); | |
132 | hpadx->Write(); | |
133 | fout->Close(); | |
134 | ||
135 | ||
136 | return rc; | |
137 | ||
138 | } | |
139 |