Improved QAchecker and plots for DQM
[u/mrichter/AliRoot.git] / TOF / AliTOFanalyzeSDigitsV2.C
... / ...
CommitLineData
1Int_t AliTOFanalyzeSDigitsV2(Int_t ndump=0, Int_t iEvNum=-1, Int_t nEvent=0)
2{
3
4 /////////////////////////////////////////////////////////////////////////
5 //
6 // Analyzes the TOF sdigits and fills QA-histograms
7 // iEvNum=-1 and nEvent=0 means all events in the file
8 //
9 // root[0] .L AliTOFanalyzeSDigitsV2.C
10 // root[1] AliTOFanalyzeSDigitsV2()
11 //
12 // If you want analyze only the sdigits in the 2th event
13 // (existing int the header file), see in the following:
14 //
15 // root[0] .L AliTOFanalyzeSDigitsV2.C
16 // root[1] AliTOFanalyzeSDigitsV2(0,2,1)
17 //
18 // Updated to the new I/O by: A. De Caro, C. Zampolli
19 //
20 // Report problems to: decaro@sa.infn.it
21 //
22 /////////////////////////////////////////////////////////////////////////
23
24 Int_t rc = 0;
25
26 // adc and tdc
27 TH1F *htdc = new TH1F("htdc","TDC [bin]",5000,0.,150000.);
28 TH1F *hadc = new TH1F("hadc","ADC [bin]",100,0., 3000.);
29 // TOF sdigit volumes
30 TH1F *hsector = new TH1F("hsector","Sector",18,0.,18.);
31 TH1F *hplate = new TH1F("hplate","Plate ", 5,0., 5.);
32 TH1F *hstrip = new TH1F("hstrip","Strip ",20,0.,20.);
33 TH1F *hpadz = new TH1F("hpadz","Pad along z ",2,0.,2.);
34 TH1F *hpadx = new TH1F("hpadx","Pad along x",48,0.,48.);
35 // ADC-TDC correlation
36 TH2F *h2tdcVSadc = new TH2F("h2tdcVSadc","TDC [bin] VS ADC [bin]",500,0.,150000.,100,0.,3000.);
37
38 // Dynamically link some shared libs
39 if (gClassTable->GetID("AliRun") < 0) {
40 gROOT->LoadMacro("loadlibs.C");
41 loadlibs();
42 }
43
44 if (gAlice)
45 {
46 delete AliRunLoader::Instance();
47 delete gAlice;
48 gAlice = 0x0;
49 }
50
51 AliRunLoader *rl = AliRunLoader::Open("galice.root",AliConfig::GetDefaultEventFolderName(),"read");
52 if (!rl)
53 {
54 cerr<<"Can't load RunLoader from file"<<"!\n";
55 rc = 1;
56 return rc;
57 }
58
59 rl->LoadgAlice();
60 gAlice = rl->GetAliRun();
61
62 if (!gAlice)
63 {
64 cerr << "<AliTOFanalyzeSDigits> AliRun object not found on file\n ";
65 rc = 2;
66 return rc;
67 }
68
69 rl->LoadHeader();
70
71 AliLoader *tofl = rl->GetLoader("TOFLoader");
72 AliTOF *tof = (AliTOF *) rl->GetAliRun()->GetDetector("TOF");
73
74 if (tof==0x0 || tofl==0x0)
75 {
76 cerr << "<AliTOFanalyzeSDigits> no TOF detector found" << endl;
77 rc = 3;
78 return rc;
79 }
80
81 cout << "First " << ndump << " SDigits found in TOF TreeS branch have: \n";
82
83 Int_t upperLimit;
84 Int_t bottomLimit;
85
86 if (iEvNum<0) bottomLimit=0;
87 else bottomLimit = iEvNum;
88
89 if (nEvent == 0) upperLimit = (Int_t)(rl->GetNumberOfEvents());
90 else upperLimit = nEvent+bottomLimit;
91
92 AliTOFSDigit *tofsdigit;
93
94 for (Int_t ievent = bottomLimit; ievent < upperLimit; ievent++) {
95
96 rl->GetEvent(ievent);
97 printf ("Processing event %d \n", ievent);
98
99 // Get the pointer SDigit tree
100 tofl->LoadSDigits("read");
101 TTree *TS=tofl->TreeS();
102 tof->SetTreeAddress();
103
104 if(!TS)
105 {
106 cout << "<AliTOFanalyzeSDigits> No TreeS found \n";
107 rc = 4;
108 return rc;
109 }
110
111 TClonesArray * TOFsdigits = new TClonesArray("AliTOFSDigit",1000);
112 //TOFsdigits = tof->SDigits();
113 tof->SDigits();
114 TOFsdigits = TS->GetBranch("TOF")->SetAddress(&TOFsdigits);
115
116 Int_t nEntries = TS->GetEntries();
117
118 for (Int_t iEntry = 0; iEntry < nEntries; iEntry ++)
119 {
120 tof->ResetDigits();
121 TS->GetEvent(iEntry);
122 Int_t ndig = TOFsdigits->GetEntriesFast();
123 cout << "<AliTOFanalyzeSDigits> found " << ndig
124 << " TOF sdigits for event " << ievent << endl;
125
126 for (Int_t k=0; k<ndig; k++) {
127 tofsdigit = (AliTOFSDigit*) TOFsdigits->UncheckedAt(k);
128 Float_t firstTDC = tofsdigit->GetTdc(0);
129 Float_t firstADC = tofsdigit->GetAdc(0);
130 htdc->Fill(firstTDC);
131 hadc->Fill(firstADC);
132 // TOF sdigit volumes
133 Int_t sector = tofsdigit->GetSector(); // range [0-17]
134 Int_t plate = tofsdigit->GetPlate(); // range [0- 4]
135 Int_t strip = tofsdigit->GetStrip(); // range [0-19]
136 Int_t padz = tofsdigit->GetPadz(); // range [0- 1]
137 Int_t padx = tofsdigit->GetPadx(); // range [0-47]
138 // it is QA, then I perform QA!
139 Bool_t isSDigitBad = (sector<0 || sector>17 || plate<0 || plate >4 || padz<0 || padz>1 || padx<0 || padx>47);
140
141
142 if (isSDigitBad) {
143 cout << "<AliTOFanalyzeSDigits> strange sdigit found \n";
144 rc = 4;
145 return rc;
146 }
147
148 if(k<ndump){
149 cout << k << "-th | Sector " << sector << " | Plate " << plate << " | Strip " << strip << " | PadZ " << padz << " | PadX " << padx << endl;
150 cout << k << "-th | ADC " << firstADC << " [bin] | TDC " << firstTDC << " [bin] \n";
151 cout << "---------------------------------------------------- \n";
152 }
153
154 // filling sdigit volume histos
155 hsector->Fill(sector);
156 hplate->Fill(plate);
157 hstrip->Fill(strip);
158 hpadx->Fill(padx);
159 hpadz->Fill(padz);
160 h2tdcVSadc->Fill(firstTDC,firstADC);
161
162 }
163 }
164
165 tofl->UnloadSDigits();
166
167 } // end loop on events
168
169 rl->UnloadHeader();
170 rl->UnloadgAlice();
171
172 TFile *fout = new TFile("TOF_sdigitsQA.root","RECREATE");
173 htdc->Write();
174 hadc->Write();
175 h2tdcVSadc->Write();
176 hsector->Write();
177 hplate->Write();
178 hstrip->Write();
179 hpadz->Write();
180 hpadx->Write();
181 fout->Close();
182
183 delete htdc;
184 delete hadc;
185 delete h2tdcVSadc;
186 delete hsector;
187 delete hplate;
188 delete hstrip;
189 delete hpadz;
190 delete hpadx;
191
192 if (gAlice)
193 {
194 delete AliRunLoader::Instance();
195 delete gAlice;
196 gAlice = 0x0;
197 }
198
199 return rc;
200
201}
202