]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONClusterReconstructor.cxx
Add option to set scaler trigger event on, for raw data (Christian)
[u/mrichter/AliRoot.git] / MUON / AliMUONClusterReconstructor.cxx
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
18 ////////////////////////////////////
19 //
20 // MUON cluster reconstructor for MUON
21 //
22 // Should implement a virtual class ClusterFinder to chose between VS and AZ method
23 ////////////////////////////////////
24
25 #include "AliMUONClusterReconstructor.h"
26 #include "AliRun.h" // for gAlice
27 #include "AliRunLoader.h"
28 #include "AliLoader.h"
29
30 #include "AliMUON.h"
31 #include "AliMUONDigit.h"
32 #include "AliMUONConstants.h"
33 #include "AliMUONData.h"
34 #include "AliMUONClusterFinderVS.h"
35 #include "AliMUONClusterInput.h"
36 #include "AliMUONRawCluster.h"
37 #include "AliLog.h"
38
39 ClassImp(AliMUONClusterReconstructor) // Class implementation in ROOT context
40
41 //__________________________________________________________________________
42   AliMUONClusterReconstructor::AliMUONClusterReconstructor(AliLoader* loader, AliMUONData* data)
43   : TObject()
44 {
45   // Standard Constructor
46
47   // initialize loader's
48   fLoader = loader;
49
50   // initialize container
51   fMUONData = data;
52   
53   // reconstruction model
54   fRecModel = new AliMUONClusterFinderVS();
55   //fRecModel = new AliMUONClusterFinderAZ();
56
57 }
58
59 //__________________________________________________________________________
60 AliMUONClusterReconstructor::AliMUONClusterReconstructor()
61   : TObject(),
62     fMUONData(0),
63     fRecModel(0),
64     fLoader(0)
65 {
66   // Default Constructor
67 }
68
69 //_______________________________________________________________________
70 AliMUONClusterReconstructor::AliMUONClusterReconstructor (const AliMUONClusterReconstructor& rhs)
71   : TObject(rhs)
72 {
73 // Protected copy constructor
74
75   AliFatal("Not implemented.");
76 }
77
78 //_______________________________________________________________________
79 AliMUONClusterReconstructor & 
80 AliMUONClusterReconstructor::operator=(const AliMUONClusterReconstructor& rhs)
81 {
82 // Protected assignement operator
83
84   if (this == &rhs) return *this;
85
86   AliFatal("Not implemented.");
87     
88   return *this;  
89 }
90
91 //__________________________________________________________________________
92 AliMUONClusterReconstructor::~AliMUONClusterReconstructor(void)
93 {
94
95   if (fRecModel)
96     delete fRecModel;
97
98   return;
99 }
100 //____________________________________________________________________
101 void AliMUONClusterReconstructor::Digits2Clusters(Int_t chBeg)
102 {
103
104     TClonesArray *dig1, *dig2, *digAll;
105     Int_t ndig, k, idDE, idDEprev;
106     dig1 = new TClonesArray("AliMUONDigit",1000);
107     dig2 = new TClonesArray("AliMUONDigit",1000);
108     digAll = new TClonesArray("AliMUONDigit",2000);
109
110     AliMUONDigit* digit;
111
112     TArrayI id(200); // contains the different IdDE
113    
114   
115 // Loop on chambers and on cathode planes     
116     TClonesArray* muonDigits;
117     Int_t n2;
118     Int_t n1;
119
120     for (Int_t ich = chBeg; ich < AliMUONConstants::NTrackingCh(); ich++) {
121  
122       id.Reset();
123       n1 = 0;
124       n2 = 0;
125
126       //cathode 0 & 1
127       muonDigits = fMUONData->Digits(ich); 
128       ndig = muonDigits->GetEntriesFast();
129       TClonesArray &lDigit = *digAll;
130
131       idDEprev = 0;
132       muonDigits->Sort();
133       for (k = 0; k < ndig; k++) {
134
135         digit = (AliMUONDigit*) muonDigits->UncheckedAt(k);
136         new(lDigit[n1++]) AliMUONDigit(*digit);
137         idDE = digit->DetElemId();
138         if (idDE != idDEprev) {
139           id.AddAt(idDE,n2++);
140         }
141         idDEprev = idDE;
142       }
143
144       Int_t idSize = n2;
145
146       // loop over id DE
147       for (idDE = 0; idDE < idSize; idDE++) {
148         TClonesArray &lhits1 = *dig1;
149         TClonesArray &lhits2 = *dig2;
150         dig1->Clear();
151         dig2->Clear();
152         n1 = n2 = 0;
153
154         for (k = 0; k < digAll->GetEntriesFast(); k++) {
155           digit = (AliMUONDigit*) digAll->UncheckedAt(k);
156           //      printf("digit idDE %d\n", digit->DetElemId());
157           if (id[idDE] == digit->DetElemId()) {
158             if (digit->Cathode() == 0)
159               new(lhits1[n1++]) AliMUONDigit(*digit);
160             else 
161               new(lhits2[n2++]) AliMUONDigit(*digit);
162           }
163         }
164
165         // cluster finder
166         if (fRecModel) {
167           AliMUONClusterInput::Instance()->SetDigits(ich, id[idDE], dig1, dig2);
168           fRecModel->FindRawClusters();
169         }
170         // copy into the container
171         TClonesArray* tmp = fRecModel->GetRawClusters();
172         for (Int_t id = 0; id < tmp->GetEntriesFast(); id++) {
173           AliMUONRawCluster* pClus = (AliMUONRawCluster*) tmp->At(id);
174           fMUONData->AddRawCluster(ich, *pClus);
175         }
176         dig1->Delete();
177         dig2->Delete();
178       } // idDE
179       digAll->Delete();
180     } // for ich
181     delete dig1;
182     delete dig2;
183     delete digAll;
184 }
185
186 //_______________________________________________________________________
187 void AliMUONClusterReconstructor::Trigger2Trigger() 
188 {
189 // copy trigger from TreeD to TreeR
190
191   fMUONData->SetTreeAddress("GLT");
192   fMUONData->GetTriggerD();
193 }