]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONClusterReconstructor.cxx
Removing class AliMUONTrackK
[u/mrichter/AliRoot.git] / MUON / AliMUONClusterReconstructor.cxx
CommitLineData
52c9bc11 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/* $Id$ */
17
3dbff571 18/// \class AliMUONClusterReconstructor
19///
20/// This class is just a steering class to loop over detection elements of tracking chambers,
21/// extract the relevant digits, and pass them to the actual clusterizer class,
22/// which operate on a single detection element at a time.
23///
24/// \author C. Finck and L. Aphecetche, Subatech
25///
52c9bc11 26
52c9bc11 27#include "AliMUONClusterReconstructor.h"
cf464691 28
3dbff571 29#include "AliLog.h"
30#include "AliMUONCluster.h"
31#include "AliMUONGeometryTransformer.h"
52c9bc11 32#include "AliMUONRawCluster.h"
f9247068 33#include "AliMUONVClusterFinder.h"
3dbff571 34#include "AliMUONVClusterStore.h"
35#include "AliMUONVDigit.h"
36#include "AliMUONVDigitStore.h"
37#include "AliMpDEIterator.h"
66f4c572 38#include "AliMpDEManager.h"
f9247068 39#include "AliMpSegmentation.h"
3dbff571 40#include <Riostream.h>
cf464691 41
7945aae7 42/// \cond CLASSIMP
52c9bc11 43ClassImp(AliMUONClusterReconstructor) // Class implementation in ROOT context
7945aae7 44/// \endcond
dd20215d 45
52c9bc11 46//__________________________________________________________________________
3dbff571 47AliMUONClusterReconstructor::AliMUONClusterReconstructor(AliMUONVClusterFinder* clusterFinder,
f9247068 48 const AliMUONGeometryTransformer* transformer)
dd20215d 49: TObject(),
f9247068 50 fClusterFinder(clusterFinder),
3dbff571 51 fTransformer(transformer),
52 fClusterStore(0x0)
52c9bc11 53{
3dbff571 54 /// Standard Constructor
52c9bc11 55
f9247068 56 if (!transformer && clusterFinder)
57 {
58 AliFatal("I require a geometry transformer, otherwise I cannot compute "
59 "global coordinates of the clusters !");
60 }
3dbff571 61
62// fRecModel->SetGhostChi2Cut(10);
52c9bc11 63}
30178c30 64
52c9bc11 65//__________________________________________________________________________
66AliMUONClusterReconstructor::~AliMUONClusterReconstructor(void)
67{
3dbff571 68 /// Destructor
dd20215d 69}
7e4a628d 70
f9247068 71//______________________________________________________________________________
72void
3dbff571 73AliMUONClusterReconstructor::ClusterizeOneDE(Int_t detElemId,
74 const AliMUONVDigitStore& digitStore)
f9247068 75{
3dbff571 76 /// Clusterize one detection element, which digits are in digitStore
77
78 if ( digitStore.IsEmpty() ) return;
79
f9247068 80 const AliMpVSegmentation* seg[2] =
866c3232 81 { AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::kCath0),
82 AliMpSegmentation::Instance()->GetMpSegmentation(detElemId,AliMp::kCath1)
f9247068 83 };
3dbff571 84
85 Bool_t ok = fClusterFinder->Prepare(seg,digitStore);
f9247068 86 if ( !ok )
87 {
88 AliWarning(Form("No hit pad for DE %d ?",detElemId));
89 }
90
91 AliMUONCluster* cluster;
3dbff571 92
f9247068 93 while ( ( cluster = fClusterFinder->NextCluster() ) )
94 {
f9247068 95 // Converts cluster objects into ones suitable for output
96 //
97 AliMUONRawCluster rawCluster;
98
99 rawCluster.SetDetElemId(detElemId);
100
101 for ( Int_t cathode = 0; cathode < 2; ++cathode )
102 {
103 rawCluster.SetMultiplicity(cathode,cluster->Multiplicity(cathode));
104 rawCluster.SetCharge(cathode,cluster->Charge()); // both cathode get the total cluster charge
105 Double_t xg, yg, zg;
106
107 fTransformer->Local2Global(detElemId,
108 cluster->Position().X(), cluster->Position().Y(),
109 0, xg, yg, zg);
110
111 if ( cathode == 0 )
112 {
113 AliDebug(1,Form("Adding RawCluster detElemId %4d mult %2d charge %e (xl,yl,zl)=(%e,%e,%e) (xg,yg,zg)=(%e,%e,%e)",
114 detElemId,cluster->Multiplicity(),cluster->Charge(),
115 cluster->Position().X(),cluster->Position().Y(),0.0,
116 xg,yg,zg));
117 }
118 rawCluster.SetX(cathode,xg);
119 rawCluster.SetY(cathode,yg);
120 rawCluster.SetZ(cathode,zg);
121 }
3dbff571 122 fClusterStore->Add(rawCluster);
dd20215d 123 }
52c9bc11 124}
dd20215d 125
52c9bc11 126//____________________________________________________________________
3dbff571 127void AliMUONClusterReconstructor::Digits2Clusters(const AliMUONVDigitStore& digitStore,
128 AliMUONVClusterStore& clusterStore)
a713db22 129{
3dbff571 130 /// Clusterize the digitStore to produce a clusterStore
a713db22 131
3dbff571 132 fClusterStore = &clusterStore;
133 fClusterStore->Clear();
dd20215d 134
3dbff571 135 AliMpDEIterator deIt;
dd20215d 136
3dbff571 137 deIt.First();
138
139 while (!deIt.IsDone())
dd20215d 140 {
3dbff571 141 AliMUONVDigitStore* deDigits = digitStore.Create();
dd20215d 142
3dbff571 143 Int_t currentDE = deIt.CurrentDEId();
144 AliMp::StationType stationType = AliMpDEManager::GetStationType(currentDE);
145 if (stationType!=AliMp::kStationTrigger)
dd20215d 146 {
3dbff571 147 TIter next(digitStore.CreateIterator(currentDE,currentDE));
148 AliMUONVDigit* digit;
149
150 while ( ( digit = static_cast<AliMUONVDigit*>(next()) ) )
dd20215d 151 {
3dbff571 152 if ( ! digit->Charge() > 0 ) continue; // skip void digits.
dd20215d 153
3dbff571 154 deDigits->Add(*digit,AliMUONVDigitStore::kIgnore);
155 }
156 ClusterizeOneDE(currentDE,*deDigits);
157 }
158 delete deDigits;
159 deIt.Next();
160 }
7e4a628d 161}