]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - RICH/AliRICHClusterFinder.cxx
Implementation of IsVersion() and Version()
[u/mrichter/AliRoot.git] / RICH / AliRICHClusterFinder.cxx
... / ...
CommitLineData
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#include "AliRICHClusterFinder.h"
18#include "AliRICH.h"
19#include "AliRICHMap.h"
20#include "AliRICHParam.h"
21#include <AliLoader.h>
22#include <AliRun.h>
23
24
25ClassImp(AliRICHClusterFinder)
26//__________________________________________________________________________________________________
27AliRICHClusterFinder::AliRICHClusterFinder(AliRICH *pRICH)
28{//main ctor
29 Info("main ctor","Start.");
30
31 fRICH = pRICH;
32
33 fHitMap = 0;
34
35}//main ctor
36//__________________________________________________________________________________________________
37void AliRICHClusterFinder::FindLocalMaxima(AliRICHcluster &rawCluster)
38{// Split the cluster according to the number of maxima inside
39 Info("SplitbyLocalMaxima","Start.");
40 Int_t Nlocal = 0;
41 Int_t localX[100],localY[100];
42 for(Int_t iDig1=0;iDig1<rawCluster.Size();iDig1++) {
43 Int_t iNotMax = 0;
44 AliRICHdigit *pDig1 = (AliRICHdigit *)rawCluster.Digits()->At(iDig1);
45 Int_t padX1 = pDig1->X();
46 Int_t padY1 = pDig1->Y();
47 Double_t padQ1 = pDig1->Q();
48 for(Int_t iDig2=0;iDig2<rawCluster.Size();iDig2++) {
49 AliRICHdigit *pDig2 = (AliRICHdigit *)rawCluster.Digits()->At(iDig2);
50 Int_t padX2 = pDig2->X();
51 Int_t padY2 = pDig2->Y();
52 Double_t padQ2 = pDig2->Q();
53 if(iDig1==iDig2) continue;
54 Int_t diffx = TMath::Sign(padX1-padX2,1);
55 Int_t diffy = TMath::Sign(padY1-padY2,1);
56 if((diffx+diffy)<=1) {
57 if(padQ2>padQ1) iNotMax++;
58 }
59 }
60 if(iNotMax==0) {
61 localX[Nlocal] = padX1;
62 localY[Nlocal] = padY1;
63 Nlocal++;
64 }
65 }
66}//FindLocalMaxima()
67//__________________________________________________________________________________________________
68void AliRICHClusterFinder::Exec()
69{
70 Info("Exec","Start.");
71
72
73 Rich()->GetLoader()->LoadDigits();
74
75 for(Int_t iEventN=0;iEventN<gAlice->GetEventsPerRun();iEventN++){//events loop
76 gAlice->GetRunLoader()->GetEvent(iEventN);
77
78 Rich()->GetLoader()->MakeTree("R"); Rich()->MakeBranch("R");
79 Rich()->ResetDigits(); Rich()->ResetClusters();
80
81 Rich()->GetLoader()->TreeD()->GetEntry(0);
82 for(Int_t iChamber=1;iChamber<=kNCH;iChamber++){//chambers loop
83 FindRawClusters(iChamber);
84
85 }//chambers loop
86
87 Rich()->GetLoader()->TreeR()->Fill();
88 Rich()->GetLoader()->WriteRecPoints("OVERWRITE");
89 }//events loop
90 Rich()->GetLoader()->UnloadDigits(); Rich()->GetLoader()->UnloadRecPoints();
91 Rich()->ResetDigits(); Rich()->ResetClusters();
92 Info("Exec","Stop.");
93}//Exec()
94//__________________________________________________________________________________________________
95void AliRICHClusterFinder::FindRawClusters(Int_t iChamber)
96{//finds neighbours and fill the tree with raw clusters
97 Int_t nDigits=Rich()->Digits(iChamber)->GetEntriesFast();
98 Info("FindRawClusters","Start for Chamber %i with %i digits.",iChamber,nDigits);
99 if(nDigits==0)return;
100
101 fHitMap=new AliRICHMap(Rich()->Digits(iChamber));//create digit map for the given chamber
102
103 for(Int_t iDig=0;iDig<nDigits;iDig++){
104 AliRICHdigit *dig=(AliRICHdigit*)Rich()->Digits(iChamber)->At(iDig);
105 Int_t i=dig->X(); Int_t j=dig->Y();
106 if(fHitMap->TestHit(i,j)==kUsed) continue;
107
108 AliRICHcluster rawCluster;
109 FormRawCluster(i,j,rawCluster);
110
111 if(AliRICHParam::IsResolveClusters()) {
112 ResolveCluster(rawCluster); // ResolveCluster serialization will happen inside
113 } else {
114 WriteRawCluster(rawCluster); // simply output of the RawCluster found without deconvolution
115 }
116
117 }//digits loop
118
119 delete fHitMap;
120 Info("FindRawClusters","Stop.");
121
122}//FindRawClusters()
123//__________________________________________________________________________________________________
124void AliRICHClusterFinder::FormRawCluster(Int_t i, Int_t j, AliRICHcluster &rawCluster)
125{// Builder of the final Raw Cluster (before deconvolution)
126 Info("FormRawCluster","Start with digit(%i,%i)",i,j);
127
128 rawCluster.AddDigit((AliRICHdigit*) fHitMap->GetHit(i,j));
129 fHitMap->FlagHit(i,j);// Flag hit as taken
130
131 Int_t listX[4], listY[4]; // Now look recursively for all neighbours
132 for (Int_t iNeighbour=0;iNeighbour<Rich()->Param()->PadNeighbours(i,j,listX,listY);iNeighbour++)
133 if(fHitMap->TestHit(listX[iNeighbour],listY[iNeighbour])==kUnused)
134 FormRawCluster(listX[iNeighbour],listY[iNeighbour],rawCluster);
135}//AddDigit2Cluster()
136//__________________________________________________________________________________________________
137void AliRICHClusterFinder::ResolveCluster(AliRICHcluster &rawCluster)
138{// Decluster algorithm
139 Info("ResolveCluster","Start.");
140
141 rawCluster.SetStatus(kRaw);// just dummy to compile...
142
143}//ResolveCluster()
144//__________________________________________________________________________________________________
145void AliRICHClusterFinder::WriteRawCluster(AliRICHcluster &rawCluster)
146{// out the current RawCluster
147 Info("WriteRawCluster","Start.");
148
149 rawCluster.CoG();
150
151 Rich()->AddCluster(rawCluster);
152
153}//WriteRawCluster()
154//__________________________________________________________________________________________________