]>
Commit | Line | Data |
---|---|---|
ed228cbc | 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 | ||
01709453 | 16 | //-----------------------------------------------------// |
17 | // // | |
18 | // Date : August 05 2003 // | |
19 | // This reads the file PMD.digits.root(TreeD), // | |
20 | // calls the Clustering algorithm and stores the // | |
21 | // clustering output in PMD.RecPoints.root(TreeR) // | |
22 | // // | |
23 | //-----------------------------------------------------// | |
24 | ||
25 | #include <Riostream.h> | |
26 | #include <TBRIK.h> | |
27 | #include <TNode.h> | |
28 | #include <TTree.h> | |
29 | #include <TGeometry.h> | |
30 | #include <TObjArray.h> | |
31 | #include <TClonesArray.h> | |
32 | #include <TFile.h> | |
33 | #include <TNtuple.h> | |
34 | #include <TParticle.h> | |
35 | ||
36 | #include "AliRun.h" | |
37 | #include "AliPMD.h" | |
38 | #include "AliDetector.h" | |
39 | #include "AliRunLoader.h" | |
40 | #include "AliLoader.h" | |
41 | #include "AliHeader.h" | |
42 | ||
43 | #include "AliPMDdigit.h" | |
44 | #include "AliPMDClusterFinder.h" | |
45 | #include "AliPMDClustering.h" | |
01709453 | 46 | #include "AliPMDcluster.h" |
96377d57 | 47 | #include "AliPMDrecpoint1.h" |
01709453 | 48 | |
49 | ||
50 | ClassImp(AliPMDClusterFinder) | |
51 | // | |
52 | // Constructor | |
53 | // | |
54 | AliPMDClusterFinder::AliPMDClusterFinder() | |
55 | { | |
ed228cbc | 56 | if (!fRecpoints) fRecpoints = new TClonesArray("AliPMDrecpoint1", 1000); |
01709453 | 57 | fNpoint = 0; |
58 | ||
ed228cbc | 59 | fDebug = 0; |
60 | fEcut = 0.; | |
01709453 | 61 | |
62 | } | |
63 | AliPMDClusterFinder::~AliPMDClusterFinder() | |
64 | { | |
65 | delete fRecpoints; | |
66 | } | |
67 | // | |
68 | // Member functions | |
69 | // | |
70 | void AliPMDClusterFinder::OpengAliceFile(Char_t *file, Option_t *option) | |
71 | { | |
72 | ||
73 | fRunLoader = AliRunLoader::Open(file,AliConfig::fgkDefaultEventFolderName, | |
74 | "UPDATE"); | |
75 | ||
76 | if (!fRunLoader) | |
77 | { | |
78 | Error("Open","Can not open session for file %s.",file); | |
79 | } | |
80 | ||
81 | fRunLoader->LoadgAlice(); | |
82 | fRunLoader->LoadHeader(); | |
83 | fRunLoader->LoadKinematics(); | |
84 | ||
85 | gAlice = fRunLoader->GetAliRun(); | |
86 | ||
87 | if (gAlice) | |
88 | { | |
89 | printf("<AliPMDdigitizer::Open> "); | |
90 | printf("AliRun object found on file.\n"); | |
91 | } | |
92 | else | |
93 | { | |
94 | printf("<AliPMDdigitizer::Open> "); | |
95 | printf("Could not find AliRun object.\n"); | |
96 | } | |
97 | PMD = (AliPMD*)gAlice->GetDetector("PMD"); | |
98 | pmdloader = fRunLoader->GetLoader("PMDLoader"); | |
99 | if (pmdloader == 0x0) | |
100 | { | |
101 | cerr<<"OpengAlice : Can not find PMD or PMDLoader\n"; | |
102 | } | |
103 | ||
104 | const char *cDR = strstr(option,"DR"); | |
105 | ||
106 | if (cDR) | |
107 | { | |
108 | pmdloader->LoadDigits("READ"); | |
109 | pmdloader->LoadRecPoints("recreate"); | |
110 | } | |
111 | } | |
112 | ||
113 | void AliPMDClusterFinder::Digits2RecPoints(Int_t ievt) | |
114 | { | |
ed228cbc | 115 | Int_t det = 0,smn = 0; |
01709453 | 116 | Int_t cellno; |
117 | Int_t xpos,ypos; | |
118 | Float_t adc; | |
ed228cbc | 119 | Int_t isup; |
01709453 | 120 | Int_t idet; |
01709453 | 121 | Float_t clusdata[7]; |
ed228cbc | 122 | |
123 | TObjArray *pmdcont = new TObjArray(); | |
124 | AliPMDcluster *pmdcl = new AliPMDcluster; | |
125 | AliPMDClustering *pmdclust = new AliPMDClustering(); | |
126 | pmdclust->SetDebug(fDebug); | |
127 | pmdclust->SetEdepCut(fEcut); | |
01709453 | 128 | |
129 | fRunLoader->GetEvent(ievt); | |
130 | //cout << " ***** Beginning::Digits2RecPoints *****" << endl; | |
131 | treeD = pmdloader->TreeD(); | |
132 | if (treeD == 0x0) | |
133 | { | |
134 | cout << " Can not get TreeD" << endl; | |
135 | } | |
136 | AliPMDdigit *pmddigit; | |
137 | TBranch *branch = treeD->GetBranch("PMDDigit"); | |
138 | branch->SetAddress(&fDigits); | |
139 | ||
140 | ResetRecpoint(); | |
141 | treeR = pmdloader->TreeR(); | |
142 | if (treeR == 0x0) | |
143 | { | |
144 | pmdloader->MakeTree("R"); | |
145 | treeR = pmdloader->TreeR(); | |
146 | } | |
147 | ||
148 | Int_t bufsize = 16000; | |
149 | treeR->Branch("PMDRecpoint", &fRecpoints, bufsize); | |
150 | ||
151 | Int_t nmodules = (Int_t) treeD->GetEntries(); | |
152 | ||
153 | for (Int_t imodule = 0; imodule < nmodules; imodule++) | |
154 | { | |
ed228cbc | 155 | ResetCellADC(); |
01709453 | 156 | treeD->GetEntry(imodule); |
157 | Int_t nentries = fDigits->GetLast(); | |
158 | for (Int_t ient = 0; ient < nentries+1; ient++) | |
159 | { | |
160 | pmddigit = (AliPMDdigit*)fDigits->UncheckedAt(ient); | |
161 | ||
162 | det = pmddigit->GetDetector(); | |
163 | smn = pmddigit->GetSMNumber(); | |
164 | cellno = pmddigit->GetCellNumber(); | |
165 | adc = pmddigit->GetADC(); | |
ed228cbc | 166 | //Int_t trno = pmddigit->GetTrackNumber(); |
01709453 | 167 | |
ed228cbc | 168 | xpos = cellno/fCol; |
169 | ypos = cellno - xpos*fCol; | |
170 | fCellADC[xpos][ypos] = (Double_t) adc; | |
01709453 | 171 | } |
01709453 | 172 | |
ed228cbc | 173 | idet = det; |
174 | isup = smn; | |
175 | pmdclust->DoClust(fCellADC,pmdcont); | |
176 | ||
177 | Int_t nentries1 = pmdcont->GetEntries(); | |
178 | cout << " nentries1 = " << nentries1 << endl; | |
179 | for (Int_t ient1 = 0; ient1 < nentries1; ient1++) | |
01709453 | 180 | { |
ed228cbc | 181 | clusdata[0] = (Float_t) idet; |
182 | clusdata[1] = (Float_t) isup; | |
01709453 | 183 | |
ed228cbc | 184 | pmdcl = (AliPMDcluster*)pmdcont->UncheckedAt(ient1); |
01709453 | 185 | |
ed228cbc | 186 | clusdata[2] = pmdcl->GetClusX(); |
187 | clusdata[3] = pmdcl->GetClusY(); | |
188 | clusdata[4] = pmdcl->GetClusADC(); | |
189 | clusdata[5] = pmdcl->GetClusCells(); | |
190 | clusdata[6] = pmdcl->GetClusRadius(); | |
01709453 | 191 | |
ed228cbc | 192 | AddRecPoint(clusdata); |
193 | } | |
194 | pmdcont->Clear(); | |
195 | ||
196 | treeR->Fill(); | |
197 | ResetRecpoint(); | |
198 | ||
199 | } // modules | |
200 | ||
01709453 | 201 | ResetCellADC(); |
202 | ||
203 | pmdloader->WriteRecPoints("OVERWRITE"); | |
204 | ||
205 | // delete the pointers | |
206 | delete pmdclust; | |
207 | delete pmdcont; | |
208 | ||
209 | // cout << " ***** End::Digits2RecPoints *****" << endl; | |
210 | } | |
211 | ||
ed228cbc | 212 | void AliPMDClusterFinder::SetCellEdepCut(Float_t ecut) |
213 | { | |
214 | fEcut = ecut; | |
215 | } | |
216 | void AliPMDClusterFinder::SetDebug(Int_t idebug) | |
217 | { | |
218 | fDebug = idebug; | |
219 | } | |
01709453 | 220 | |
221 | void AliPMDClusterFinder::AddRecPoint(Float_t *clusdata) | |
222 | { | |
223 | TClonesArray &lrecpoints = *fRecpoints; | |
ed228cbc | 224 | AliPMDrecpoint1 *newrecpoint; |
225 | newrecpoint = new AliPMDrecpoint1(clusdata); | |
226 | new(lrecpoints[fNpoint++]) AliPMDrecpoint1(newrecpoint); | |
01709453 | 227 | delete newrecpoint; |
228 | } | |
229 | void AliPMDClusterFinder::ResetCellADC() | |
230 | { | |
ed228cbc | 231 | for(Int_t irow = 0; irow < fRow; irow++) |
01709453 | 232 | { |
ed228cbc | 233 | for(Int_t icol = 0; icol < fCol; icol++) |
01709453 | 234 | { |
ed228cbc | 235 | fCellADC[irow][icol] = 0.; |
01709453 | 236 | } |
237 | } | |
238 | } | |
239 | ||
240 | void AliPMDClusterFinder::ResetRecpoint() | |
241 | { | |
242 | fNpoint = 0; | |
243 | if (fRecpoints) fRecpoints->Clear(); | |
244 | } | |
245 | void AliPMDClusterFinder::UnLoad(Option_t *option) | |
246 | { | |
247 | const char *cR = strstr(option,"R"); | |
248 | ||
249 | fRunLoader->UnloadgAlice(); | |
250 | fRunLoader->UnloadHeader(); | |
251 | fRunLoader->UnloadKinematics(); | |
252 | ||
253 | if (cR) | |
254 | { | |
255 | pmdloader->UnloadDigits(); | |
256 | } | |
257 | } |