]>
Commit | Line | Data |
---|---|---|
e9cae9ed | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /************************************ | |
17 | * AliPMD offline calibration task | |
18 | * | |
19 | * Satyajit Jena, IIT Bombay | |
20 | * sjena@cern.ch | |
21 | * Fri Feb 12 13:30:19 IST 2010 | |
22 | * | |
23 | ************************************/ | |
24 | ||
25 | #include "TChain.h" | |
26 | #include "TList.h" | |
27 | #include "TFile.h" | |
28 | #include "TTree.h" | |
29 | #include "TH1F.h" | |
30 | #include "TCanvas.h" | |
31 | #include "AliAnalysisTask.h" | |
32 | #include "AliAnalysisManager.h" | |
33 | #include "AliVEvent.h" | |
34 | #include "AliESD.h" | |
35 | #include "AliESDEvent.h" | |
36 | #include "AliAODEvent.h" | |
37 | #include "TObjArray.h" | |
38 | ||
39 | #include "AliPMDOfflineCalibTask.h" | |
40 | ||
41 | ClassImp(AliPMDOfflineCalibTask) | |
42 | ||
43 | //________________________________________________________________________ | |
44 | AliPMDOfflineCalibTask::AliPMDOfflineCalibTask(const char *name) | |
45 | : AliAnalysisTaskSE(name), | |
46 | fListOfHistos(0), | |
47 | fPmdCalibAdcP(0), | |
48 | fPmdCalibAdcC(0), | |
49 | fPmdCalibEntP(0), | |
50 | fPmdCalibEntC(0), | |
51 | fNEvents(0), | |
52 | fSelectedTrigger(new TObjArray()), | |
53 | fRejected(kTRUE) | |
54 | { | |
55 | // Constructor | |
56 | ||
57 | DefineOutput(1, TList::Class()); | |
58 | } | |
59 | ||
60 | //________________________________________________________________________ | |
61 | void AliPMDOfflineCalibTask::UserCreateOutputObjects() | |
62 | { | |
63 | fListOfHistos = new TList(); | |
64 | ||
65 | fNEvents = new TH1I("hNEvents","Events Statistic", 3, 0, 5); | |
66 | ||
67 | fPmdCalibAdcP = new TH1F("fPmdCalibAdcP", "PMD Calibration ADC fill for PRE", 234795, 0, 234795); | |
68 | fPmdCalibAdcP->GetYaxis()->SetTitle("ADC"); | |
69 | fPmdCalibAdcP->GetXaxis()->SetTitle("Cells in SMN-ROW-COL"); | |
70 | ||
71 | fPmdCalibAdcC = new TH1F("fPmdCalibAdcC", "PMD Calibration ADC fill for CPV", 234795, 0, 234795); | |
72 | fPmdCalibAdcC->GetYaxis()->SetTitle("ADC"); | |
73 | fPmdCalibAdcC->GetXaxis()->SetTitle("Cells in SMN-ROW-COL"); | |
74 | ||
75 | fPmdCalibEntP = new TH1F("fPmdCalibEntP", "PMD Calibration Entries fill for PRE", 234795, 0, 234795); | |
76 | fPmdCalibEntP->GetYaxis()->SetTitle("Frequescy"); | |
77 | fPmdCalibEntP->GetXaxis()->SetTitle("Cells in SMN-ROW-COL"); | |
78 | ||
79 | fPmdCalibEntC = new TH1F("fPmdCalibEntC", "PMD Calibration Entries fill for CPV", 234795, 0, 234795); | |
80 | fPmdCalibEntC->GetYaxis()->SetTitle("Frequescy "); | |
81 | fPmdCalibEntC->GetXaxis()->SetTitle("Cells in SMN-ROW-COL"); | |
82 | ||
83 | fListOfHistos->Add(fPmdCalibAdcP); | |
84 | fListOfHistos->Add(fPmdCalibAdcC); | |
85 | fListOfHistos->Add(fPmdCalibEntP); | |
86 | fListOfHistos->Add(fPmdCalibEntC); | |
87 | fListOfHistos->Add(fNEvents); | |
88 | } | |
89 | ||
90 | //________________________________________________________________________ | |
91 | void AliPMDOfflineCalibTask::UserExec(Option_t *) | |
92 | { | |
93 | ||
94 | AliVEvent *event = InputEvent(); | |
95 | if (!event) { | |
96 | Printf("ERROR: Could not retrieve event"); | |
97 | return; | |
98 | } | |
99 | ||
100 | fNEvents->Fill(1); | |
101 | ||
102 | AliESDEvent* pmdesd = dynamic_cast<AliESDEvent*>(event); | |
103 | if(!pmdesd) return; | |
104 | fNEvents->Fill(2); | |
105 | ||
106 | Bool_t pass = kTRUE; | |
107 | Int_t numberOfTriggerSelected = fSelectedTrigger->GetEntriesFast(); | |
108 | ||
109 | if(fRejected) | |
110 | { | |
111 | pass = kTRUE; | |
112 | for(Int_t k = 0; k < numberOfTriggerSelected; k++) | |
113 | { | |
114 | const TObjString *const obString = (TObjString*)fSelectedTrigger->At(k); | |
115 | ||
116 | const TString tString = obString->GetString(); | |
117 | if(pmdesd->IsTriggerClassFired((const char*)tString)) | |
118 | { | |
119 | pass = kFALSE; | |
120 | } | |
121 | } | |
122 | } | |
123 | else | |
124 | { | |
125 | pass = kFALSE; | |
126 | for(Int_t k = 0; k < numberOfTriggerSelected; k++) | |
127 | { | |
128 | const TObjString *const obString=(TObjString*)fSelectedTrigger->At(k); | |
129 | ||
130 | const TString tString = obString->GetString(); | |
131 | if(pmdesd->IsTriggerClassFired((const char*)tString)) | |
132 | { | |
133 | pass = kTRUE; | |
134 | } | |
135 | } | |
136 | } | |
137 | ||
138 | if(!pass) | |
139 | { | |
140 | PostData(1, fListOfHistos); | |
141 | return; | |
142 | } | |
143 | ||
144 | fNEvents->Fill(3); | |
145 | ||
146 | Int_t npmdcl = pmdesd->GetNumberOfPmdTracks(); | |
147 | if(npmdcl < 1) fNEvents->Fill(4); | |
148 | ||
149 | while (npmdcl--) | |
150 | { | |
151 | AliESDPmdTrack *pmdtr = pmdesd->GetPmdTrack(npmdcl); | |
152 | ||
153 | Int_t det = pmdtr->GetDetector(); | |
154 | Int_t smn = pmdtr->GetSmn(); | |
155 | Float_t adc = pmdtr->GetClusterADC(); | |
156 | Float_t sTag = pmdtr->GetClusterSigmaX(); | |
157 | Float_t sRowCol = pmdtr->GetClusterSigmaY(); | |
158 | ||
159 | ||
160 | Float_t rc = smn*10000 + sRowCol; | |
161 | if(adc > 1200.) continue; | |
162 | ||
163 | if(sTag > 999. && sTag < 1000.) | |
164 | { | |
165 | if(det == 0) | |
166 | { | |
167 | fPmdCalibAdcP->Fill(rc,adc); | |
168 | fPmdCalibEntP->Fill(rc); | |
169 | } | |
170 | else if(det == 1) | |
171 | { | |
172 | fPmdCalibAdcC->Fill(rc,adc); | |
173 | fPmdCalibEntC->Fill(rc); | |
174 | } | |
175 | } | |
176 | } | |
177 | ||
178 | ||
179 | PostData(1, fListOfHistos); | |
180 | } | |
181 | ||
182 | //________________________________________________________________________ | |
183 | void AliPMDOfflineCalibTask::Terminate(Option_t *) | |
184 | { | |
185 | fListOfHistos = dynamic_cast<TList*>(GetOutputData(1)); | |
186 | ||
187 | fPmdCalibAdcP = dynamic_cast<TH1F*>(fListOfHistos->At(0)); | |
188 | if(!fPmdCalibAdcP) { | |
189 | printf("ERROR: No ADC File Generated for PMD-PRE "); | |
190 | return; | |
191 | } | |
192 | ||
193 | fPmdCalibAdcC = dynamic_cast<TH1F*>(fListOfHistos->At(1)); | |
194 | if(!fPmdCalibAdcC) { | |
195 | printf("ERROR: No ADC File Generated for PMD-CPV "); | |
196 | return; | |
197 | } | |
198 | ||
199 | fPmdCalibEntP = dynamic_cast<TH1F*>(fListOfHistos->At(2)); | |
200 | if(!fPmdCalibEntP) { | |
201 | printf("ERROR: No Entry File Generated for PMD-PRE "); | |
202 | printf(" No fhXyPRE "); | |
203 | return; | |
204 | } | |
205 | ||
206 | fPmdCalibEntC = dynamic_cast<TH1F*>(fListOfHistos->At(3)); | |
207 | if(!fPmdCalibEntC) { | |
208 | printf("ERROR: No Entry File Generated for PMD-CPV "); | |
209 | return; | |
210 | } | |
211 | ||
212 | fNEvents = dynamic_cast<TH1I*>(fListOfHistos->At(4)); | |
213 | if(!fNEvents) { | |
214 | printf("ERROR: No Entry File Generated for Event Counter "); | |
215 | return; | |
216 | } | |
217 | ||
218 | ||
219 | Info("AliPMDOfflineCalibTask","PMD offline Calibration Successfully finished"); | |
220 | ||
221 | ||
222 | } |