]>
Commit | Line | Data |
---|---|---|
99e11065 | 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 | // Macro for reading tracker raw data | |
18 | // Ch. Finck, Subatech Febuary | |
19 | // | |
20 | ||
21 | #if !defined(__CINT__) || defined(__MAKECINT__) | |
22 | ||
23 | // RAW includes | |
24 | #include "AliRawReaderDate.h" | |
25 | #include "AliRawReaderFile.h" | |
26 | #include "AliRawReaderRoot.h" | |
27 | ||
28 | // MUON includes | |
29 | #include "AliMUONRawStreamTrigger.h" | |
30 | #include "AliMUONDarcHeader.h" | |
31 | #include "AliMUONRegHeader.h" | |
32 | #include "AliMUONLocalStruct.h" | |
33 | #include "AliMUONDDLTrigger.h" | |
9d1949d2 | 34 | #include "AliMpTriggerCrate.h" |
35 | #include "AliMpDDLStore.h" | |
99e11065 | 36 | #endif |
37 | ||
38 | // Macro to read rawdata for trigger | |
39 | // Ch. Finck, Subatech, April. 2006 | |
40 | // | |
41 | // This macro is interface with AliRawReader for RAW | |
42 | // The different stucture of the patload are readout and stored in TClonesArray | |
43 | // with AliMUONRawStreamTrigger classe. | |
44 | // The macro just simpy read again the TClonesArray contents. | |
45 | // The parameter of each structure could be seen in the container classes | |
46 | // AliMUONDarcHeader, AliMUONRegHeader, AliMUONLocalStruct. | |
47 | // The class AliMUONDDLTrigger manages the structure containers. | |
48 | // The number of structures in the rawdata file could be set. | |
49 | ||
63898c67 | 50 | void MUONRawStreamTrigger(Int_t maxEvent = 1, Int_t minDDL = 0, Int_t maxDDL = 1, TString fileName = "./") |
99e11065 | 51 | { |
52 | AliRawReader* rawReader = 0x0; | |
53 | ||
54 | if (fileName.EndsWith("/")) { | |
55 | rawReader = new AliRawReaderFile(fileName);// DDL files | |
56 | } else if (fileName.EndsWith(".root")) { | |
57 | rawReader = new AliRawReaderRoot(fileName); | |
58 | } else if (!fileName.IsNull()) { | |
59 | rawReader = new AliRawReaderDate(fileName);// DATE file | |
60 | } | |
61 | ||
62 | // raw stream | |
63 | AliMUONRawStreamTrigger* rawStream = new AliMUONRawStreamTrigger(rawReader); | |
64 | ||
65 | // set the number of DDL reg & local that are PRESENT in the rawdata file | |
66 | // it's NOT the number to be read. | |
67 | // default wise set to 2, 8, 16 respectively. | |
9d1949d2 | 68 | rawStream->SetMaxReg(2); |
99e11065 | 69 | // rawStream->SetMaxLoc(xx); |
70 | ||
71 | // containers | |
72 | AliMUONDDLTrigger* ddlTrigger = 0x0; | |
73 | AliMUONDarcHeader* darcHeader = 0x0; | |
74 | AliMUONRegHeader* regHeader = 0x0; | |
75 | AliMUONLocalStruct* localStruct = 0x0; | |
76 | ||
63898c67 | 77 | |
99e11065 | 78 | // Loop over events |
79 | Int_t iEvent = 0; | |
80 | ||
81 | while (rawReader->NextEvent()) { | |
82 | ||
83 | if (iEvent == maxEvent) | |
84 | break; | |
85 | ||
86 | printf("Event %d\n",iEvent++); | |
87 | ||
88 | // read DDL while < 2 DDL | |
89 | while(rawStream->NextDDL()) { | |
90 | ||
91 | if (rawStream->GetDDL() < minDDL || rawStream->GetDDL() > maxDDL) | |
92 | continue; | |
93 | ||
94 | printf("\niDDL %d\n", rawStream->GetDDL()); | |
95 | ||
96 | ddlTrigger = rawStream->GetDDLTrigger(); | |
97 | darcHeader = ddlTrigger->GetDarcHeader(); | |
98 | ||
99 | printf("Global output %x\n", (Int_t)darcHeader->GetGlobalOutput()); | |
100 | ||
101 | // loop over regional structures | |
102 | Int_t nReg = darcHeader->GetRegHeaderEntries(); | |
103 | for(Int_t iReg = 0; iReg < nReg ;iReg++){ //REG loop | |
104 | ||
105 | printf("RegionalId %d\n", iReg); | |
106 | ||
107 | regHeader = darcHeader->GetRegHeaderEntry(iReg); | |
108 | // printf("Reg length %d\n",regHeader->GetHeaderLength()); | |
109 | ||
9d1949d2 | 110 | // crate info |
111 | AliMpTriggerCrate* crate = AliMpDDLStore::Instance()-> | |
112 | GetTriggerCrate(rawStream->GetDDL(), iReg); | |
63898c67 | 113 | |
99e11065 | 114 | // loop over local structures |
115 | Int_t nLocal = regHeader->GetLocalEntries(); | |
116 | for(Int_t iLocal = 0; iLocal < nLocal; iLocal++) { | |
117 | ||
118 | localStruct = regHeader->GetLocalEntry(iLocal); | |
119 | ||
9d1949d2 | 120 | Int_t iLocCard = crate->GetLocalBoardId(localStruct->GetId()); |
121 | ||
122 | if ( !iLocCard ) continue; // empty slot | |
123 | ||
99e11065 | 124 | // check if trigger |
8d1deca2 | 125 | if (localStruct->GetTriggerX() |
126 | || localStruct->GetTriggerY()) { // no empty data | |
99e11065 | 127 | |
63898c67 | 128 | |
129 | printf("LocalId %d\n", localStruct->GetId()); | |
99e11065 | 130 | |
63898c67 | 131 | Int_t loStripX = (Int_t)localStruct->GetXPos(); |
132 | Int_t loStripY = (Int_t)localStruct->GetYPos(); | |
133 | Int_t loDev = (Int_t)localStruct->GetXDev(); | |
99e11065 | 134 | |
63898c67 | 135 | printf("iLocCard: %d, XPos: %d, YPos: %d Dev: %d\n", iLocCard, loStripX, loStripY, loDev); |
99e11065 | 136 | } |
137 | } // iLocal | |
138 | } // iReg | |
139 | } // NextDDL | |
140 | }// NextEvent | |
141 | ||
142 | delete rawReader; | |
143 | delete rawStream; | |
144 | } |