1 /***************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //-----------------------------------------------------//
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) //
23 //-----------------------------------------------------//
25 #include <Riostream.h>
30 #include <TGeometry.h>
31 #include <TObjArray.h>
32 #include <TClonesArray.h>
35 #include <TParticle.h>
38 #include "AliPMDcluster.h"
39 #include "AliPMDclupid.h"
40 #include "AliPMDDiscriminator.h"
42 ClassImp(AliPMDDiscriminator)
44 AliPMDDiscriminator::AliPMDDiscriminator() :
48 // Default Constructor
52 // -----------------------------------------------------------------------
53 AliPMDDiscriminator::~AliPMDDiscriminator()
58 // -----------------------------------------------------------------------
60 void AliPMDDiscriminator::Discrimination(TObjArray *pmdcontin, TObjArray *pmdcontout)
62 // Does Photon/Hadron discrimination
66 EmpDiscrimination(pmdcontin, pmdcontout);
68 else if(fDiscrim == 1)
73 // -----------------------------------------------------------------------
75 void AliPMDDiscriminator::EmpDiscrimination(TObjArray *pmdcontin, TObjArray *pmdcontout)
77 // Does Photon/Hadron discrimination
78 // matching the clusters of CPV and PREshower plane
80 const Int_t kumperdet = 24;
81 static Int_t neibx[6]={1,0,-1,-1,0,1}, neiby[6]={0,1,1,0,-1,-1};
83 Int_t iprecount[24], icpvcount[24];
85 Float_t adc, ncell, rad;
88 for(Int_t i = 0; i < kumperdet; i++)
93 AliPMDcluster *pmdcl = 0;
94 AliPMDclupid *pmdclout = 0;
96 Int_t nentries1 = pmdcontin->GetEntries();
98 AliDebug(1,Form("Number of total clusters from CPV PRE = %d",nentries1));
99 for (Int_t ient1 = 0; ient1 < nentries1; ient1++)
101 pmdcl = (AliPMDcluster*)pmdcontin->UncheckedAt(ient1);
103 det = pmdcl->GetDetector();
104 smn = pmdcl->GetSMN();
105 if(det == 0) iprecount[smn]++;
106 if(det == 1) icpvcount[smn]++;
107 } // Entries of TObjArray loop
110 Float_t edepcpv[48][96];
111 Int_t statuscpv[48][96];
113 for(Int_t i = 0; i < kumperdet; i++) // unit module
115 // Initialisation of the ADC of CPV (1UM)
116 for (Int_t ix = 0; ix < 48;ix++)
118 for (Int_t iy = 0; iy < 96;iy++)
120 edepcpv[ix][iy] = 0.;
121 statuscpv[ix][iy] = 0;
124 Int_t precounter = iprecount[i];
125 Int_t cpvcounter = icpvcount[i];
127 Float_t *xpadpre = new Float_t[precounter];
128 Float_t *ypadpre = new Float_t[precounter];
129 Float_t *adcpre = new Float_t[precounter];
130 Float_t *ncellpre = new Float_t[precounter];
131 Float_t *radpre = new Float_t[precounter];
132 Int_t *sortcoord = new Int_t[precounter];
133 Int_t *clupidpre = new Int_t[precounter];
135 Float_t *xpadcpv = new Float_t[cpvcounter];
136 Float_t *ypadcpv = new Float_t[cpvcounter];
137 Float_t *adccpv = new Float_t[cpvcounter];
138 Float_t *ncellcpv = new Float_t[cpvcounter];
139 Float_t *radcpv = new Float_t[cpvcounter];
143 for (Int_t ient1 = 0; ient1 < nentries1; ient1++)
145 pmdcl = (AliPMDcluster*)pmdcontin->UncheckedAt(ient1);
147 det = pmdcl->GetDetector();
148 smn = pmdcl->GetSMN();
149 xpos = pmdcl->GetClusX();
150 ypos = pmdcl->GetClusY();
151 adc = pmdcl->GetClusADC();
152 ncell = pmdcl->GetClusCells();
153 rad = pmdcl->GetClusRadius();
155 if(det == 0 && smn == i)
160 ncellpre[ii] = ncell;
164 if(det == 1 && smn == i)
166 Int_t ix = (Int_t) (xpos+0.5);
167 Int_t iy = (Int_t) (ypos+0.5);
170 edepcpv[ix][iy] = adc;
174 ncellcpv[ij] = ncell;
178 } // Entries of TObjArray loop
179 // sorts from lowest ADC to highest ADC
180 // and returns the coordinates
181 Bool_t jsort = false;
182 TMath::Sort(precounter,adcpre,sortcoord,jsort);
185 for(Int_t jj=0; jj<precounter; jj++)
188 // PIDs for PRE clusters are 0(photon) and 1(hadron)
190 jjsort = sortcoord[jj];
192 Int_t ix = (Int_t) (xpadpre[jjsort]+0.5);
193 Int_t iy = (Int_t) (ypadpre[jjsort]+0.5);
197 for(Int_t jk=0; jk<6; jk++)
199 Int_t jd1 = ix + neibx[jk];
200 Int_t jd2 = iy + neiby[jk];
202 if(jd1 >47) jd1 = 47;
204 if(jd2 >47) jd2 = 47;
205 if(edepcpv[jd1][jd2] > 0.0 && statuscpv[jd1][jd2] == 0)
207 statuscpv[jd1][jd2] = 1;
208 clupidpre[jjsort] = 1;
215 clusdata[0] = xpadpre[jjsort];
216 clusdata[1] = ypadpre[jjsort];
217 clusdata[2] = adcpre[jjsort];
218 clusdata[3] = ncellpre[jjsort];
219 clusdata[4] = radpre[jjsort];
220 //PH clusdata[5] = (Float_t) clupidpre[jjsort];
222 // Temporary the cluster PID is set to 1 if the
223 // adc > 3MIP units which will be changed later on.
225 if (adcpre[jjsort] > 4500.)
233 pmdclout = new AliPMDclupid(idet,ismn,clusdata);
234 pmdcontout->Add(pmdclout);
237 for(Int_t jj=0; jj<cpvcounter; jj++)
240 // PID for CPV clusters is 1
244 clusdata[0] = xpadcpv[jj];
245 clusdata[1] = ypadcpv[jj];
246 clusdata[2] = adccpv[jj];
247 clusdata[3] = ncellcpv[jj];
248 clusdata[4] = radcpv[jj];
251 pmdclout = new AliPMDclupid(idet,ismn,clusdata);
252 pmdcontout->Add(pmdclout);
255 // delete all the pointers
270 // -----------------------------------------------------------------------
271 void AliPMDDiscriminator::NNDiscrimination()
273 // This method does discrimination using Neural Network technique
276 // -----------------------------------------------------------------------
277 void AliPMDDiscriminator::SetDiscrimination(Int_t idiscrim)
281 // -----------------------------------------------------------------------