4 // GetTrackerMapping = AliMUONDigitMaker::GetMapping
5 // GetTriggerMapping = AliMUONDigitMaker::TriggerDigits
6 // GetTriggerChamber = AliMUONDigitMaker::GetTriggerChamber
7 // LoadRawTracker = MUONRawStreamTracker.C
8 // LoadRawTrigger = MUONRawStreamTrigger.C
13 #include <Alieve/MUONChamberData.h>
14 #include <Alieve/EventAlieve.h>
16 #include <AliRawReader.h>
17 #include <AliRawReaderFile.h>
18 #include <AliRawReaderDate.h>
19 #include <AliRawReaderRoot.h>
23 #include <AliMUONDigitMaker.h>
24 #include <AliMUONHit.h>
25 #include <AliMUONVCluster.h>
26 #include "AliMUONVClusterStore.h"
27 #include <AliMUONVDigit.h>
28 #include "AliMUONDigitStoreV1.h"
29 #include "AliMUONVDigitStore.h"
32 #include "TClonesArray.h"
36 using namespace Alieve;
38 //______________________________________________________________________
44 AliRawReader* MUONData::fgRawReader = 0;
46 //______________________________________________________________________
47 MUONData::MUONData() :
55 for (Int_t i = 0; i < 256; i++) {
63 //______________________________________________________________________
74 //______________________________________________________________________
75 void MUONData::Reset()
84 for (Int_t i = 0; i < 256; i++) {
90 //______________________________________________________________________
91 MUONData::MUONData(const MUONData &mdata) :
93 Reve::ReferenceCount(),
103 //______________________________________________________________________
104 MUONData& MUONData::operator=(const MUONData &mdata)
107 // Assignment operator
110 if (this != &mdata) {
118 //______________________________________________________________________
119 void MUONData::CreateChamber(Int_t chamber)
122 // create data for the chamber with id=chamber (0 to 13)
125 if (fChambers[chamber] == 0)
126 fChambers[chamber] = new MUONChamberData(chamber);
130 //______________________________________________________________________
131 void MUONData::CreateAllChambers()
134 // create all 14 chambers data
137 for (Int_t c = 0; c < 14; ++c)
142 //______________________________________________________________________
143 void MUONData::DropAllChambers()
146 // release data from all chambers
149 for (Int_t c = 0; c < 14; ++c) {
151 if (fChambers[c] != 0)
152 fChambers[c]->DropData();
158 //______________________________________________________________________
159 void MUONData::DeleteAllChambers()
162 // delete all chambers data
165 for (Int_t c = 0; c < 14; ++c) {
174 //______________________________________________________________________
175 void MUONData::RegisterTrack(Int_t track)
178 // register (in a list) a track with hits in the chambers
181 if (fNTrackList == (256-1)) {
182 cout << "Maximum of registered tracks reached..." << endl;
186 Bool_t inList = kFALSE;
187 for (Int_t i = 0; i < fNTrackList; i++) {
188 if (track == fTrackList[i]) {
194 fTrackList[fNTrackList] = track;
200 //______________________________________________________________________
201 void MUONData::LoadRecPoints(TTree* tree)
204 // load reconstructed points from the TreeR
205 // load local trigger information
208 AliMUONVClusterStore *clusterStore = AliMUONVClusterStore::Create(*tree);
209 clusterStore->Clear();
210 clusterStore->Connect(*tree,kFALSE);
214 AliMUONVCluster *cluster;
216 Double_t clsX, clsY, clsZ, charge;
218 for (Int_t ch = 0; ch < 10; ++ch) {
220 if (fChambers[ch] == 0) continue;
222 TIter next(clusterStore->CreateChamberIterator(ch,ch));
224 while ( ( cluster = static_cast<AliMUONVCluster*>(next()) ) ) {
226 detElemId = cluster->GetDetElemId();
228 clsX = cluster->GetX();
229 clsY = cluster->GetY();
230 clsZ = cluster->GetZ();
231 charge = cluster->GetCharge();
233 fChambers[ch]->RegisterCluster(detElemId,0,clsX,clsY,clsZ,charge);
234 fChambers[ch]->RegisterCluster(detElemId,1,clsX,clsY,clsZ,charge);
244 //______________________________________________________________________
245 void MUONData::LoadHits(TTree* tree)
248 // load simulation hits from the TreeH
251 TClonesArray *hits = 0;
253 Int_t cha, detElemId, nhits, ntracks;
254 Float_t hitX, hitY, hitZ;
256 ntracks = tree->GetEntries();
257 tree->SetBranchAddress("MUONHits",&hits);
259 for (Int_t it = 0; it < ntracks; it++) {
262 nhits = hits->GetEntriesFast();
264 for (Int_t ih = 0; ih < nhits; ih++) {
266 mhit = (AliMUONHit*)hits->UncheckedAt(ih);
270 detElemId = mhit->DetElemId();
271 cha = mhit->Chamber();
273 RegisterTrack(mhit->GetTrack());
275 fChambers[cha-1]->RegisterHit(detElemId,hitX,hitY,hitZ);
282 //______________________________________________________________________
283 void MUONData::LoadDigits(TTree* tree)
286 // load digits from the TreeD
289 AliMUONVDigitStore *digitStore = AliMUONVDigitStore::Create(*tree);
291 digitStore->Connect(*tree,0);
295 AliMUONVDigit* digit;
296 TIter next(digitStore->CreateIterator());
298 Int_t cathode, detElemId, ix, iy, charge, chamber, adc;
300 while ( ( digit = static_cast<AliMUONVDigit*>(next() ) ) )
302 cathode = digit->Cathode();
305 detElemId = digit->DetElemId();
306 charge = (Int_t)digit->Charge();
308 chamber = detElemId/100 - 1;
310 fChambers[chamber]->RegisterDigit(detElemId,cathode,ix,iy,charge);
312 fChambers[chamber]->RegisterDigit(detElemId,cathode,ix,iy,adc);
320 //______________________________________________________________________
321 void MUONData::LoadRaw(TString fileName)
324 // load raw data from fileName; tracker and trigger data
327 if (fgRawReader == 0) {
328 // check extention to choose the rawdata file format
329 if (fileName.EndsWith("/")) {
330 fgRawReader = new AliRawReaderFile(fileName); // DDL files
331 } else if (fileName.EndsWith(".root")) {
332 fgRawReader = new AliRawReaderRoot(fileName); // ROOT file
333 } else if (!fileName.IsNull()) {
334 fgRawReader = new AliRawReaderDate(fileName); // DATE file
338 fgRawReader->RewindEvents();
339 fgRawReader->Reset();
342 while (fgRawReader->NextEvent())
344 if (iEvent != Alieve::gEvent->GetEventId())
352 AliMUONDigitMaker digitMaker;
354 digitMaker.SetMakeTriggerDigits(kTRUE);
356 AliMUONDigitStoreV1 digitStore;
358 digitMaker.Raw2Digits(fgRawReader,&digitStore);
360 AliMUONVDigit* digit;
361 TIter next(digitStore.CreateIterator());
363 Int_t cathode, detElemId, ix, iy, charge, chamber, adc;
365 while ( ( digit = static_cast<AliMUONVDigit*>(next() ) ) )
367 cathode = digit->Cathode();
370 detElemId = digit->DetElemId();
371 charge = (Int_t)digit->Charge();
373 chamber = detElemId/100 - 1;
375 fChambers[chamber]->RegisterDigit(detElemId,cathode,ix,iy,charge);
377 fChambers[chamber]->RegisterDigit(detElemId,cathode,ix,iy,adc);
383 //______________________________________________________________________
384 Int_t MUONData::GetTrack(Int_t index)
387 // return track stack number for "index"-th track with hits in the chambers
391 return fTrackList[index];
398 //______________________________________________________________________
399 MUONChamberData* MUONData::GetChamberData(Int_t chamber)
402 // return chamber data
405 if (chamber < 0 || chamber > 13) return 0;
407 //if (fChambers[chamber] == 0) CreateChamber(chamber);
409 return fChambers[chamber];