]>
Commit | Line | Data |
---|---|---|
1 | //////////////////////////////////////////////////// | |
2 | // Class to define // | |
3 | // SDD beam test raw 2 dig conv. // | |
4 | // Origin: E. Crescio crescio@to.infn.it // | |
5 | // // | |
6 | // // | |
7 | //////////////////////////////////////////////////// | |
8 | #include "AliITSdigitSDD.h" | |
9 | #include "AliRawReader.h" | |
10 | #include "AliVMERawStream.h" | |
11 | #include "AliITSRawStreamSDDBeamTest.h" | |
12 | #include "AliITSRawStreamSDDBeamTestNov04.h" | |
13 | #include "AliITSBeamTestDigSDD.h" | |
14 | #include "AliITSEventHeader.h" | |
15 | #include "AliITSgeom.h" | |
16 | #include <TBranch.h> | |
17 | #include <TTree.h> | |
18 | ||
19 | ClassImp(AliITSBeamTestDigSDD) | |
20 | ||
21 | //_____________________________________________________________ | |
22 | AliITSBeamTestDigSDD::AliITSBeamTestDigSDD(): AliITSBeamTestDig(), | |
23 | fSDDEvType(0), | |
24 | fSubEventAttributes(0), | |
25 | fBtPer(), | |
26 | fThreshold(0), | |
27 | fStreamer(0){ | |
28 | // | |
29 | // Constructor | |
30 | // | |
31 | SetBtPeriod(); | |
32 | } | |
33 | ||
34 | //_____________________________________________________________ | |
35 | AliITSBeamTestDigSDD::AliITSBeamTestDigSDD(const Text_t* name, const Text_t* title): AliITSBeamTestDig(name,title), | |
36 | fSDDEvType(0), | |
37 | fSubEventAttributes(0), | |
38 | fBtPer(), | |
39 | fThreshold(0), | |
40 | fStreamer(0) | |
41 | { | |
42 | // | |
43 | // Constructor | |
44 | // | |
45 | SetBtPeriod(); | |
46 | } | |
47 | ||
48 | //__________________________________________________________________ | |
49 | AliITSBeamTestDigSDD::~AliITSBeamTestDigSDD() | |
50 | { | |
51 | // | |
52 | // Destructor | |
53 | // | |
54 | if(fSubEventAttributes) delete fSubEventAttributes; | |
55 | if(fStreamer) delete fStreamer; | |
56 | } | |
57 | ||
58 | ||
59 | //_______________________________________________________________________ | |
60 | void AliITSBeamTestDigSDD::Exec(Option_t* /*opt*/) | |
61 | { | |
62 | ||
63 | // Reads raw data and fills the tree of digits | |
64 | ||
65 | TBranch* branch = fTreeD->GetBranch("ITSDigitsSDD"); | |
66 | Int_t maxn=0; | |
67 | ||
68 | if(!fITSgeom){ | |
69 | Error("Exec","fITSgeom is null!"); | |
70 | return; | |
71 | } | |
72 | ||
73 | Int_t nsdd=0; | |
74 | Int_t nspd=0; | |
75 | Int_t nssd=0; | |
76 | for(Int_t nlay=1;nlay<=fITSgeom->GetNlayers();nlay++){ | |
77 | for(Int_t nlad=1;nlad<=fITSgeom->GetNladders(nlay);nlad++){ | |
78 | for(Int_t ndet=1;ndet<=fITSgeom->GetNdetectors(nlay);ndet++){ | |
79 | Int_t index=fITSgeom->GetModuleIndex(nlay,nlad,ndet); | |
80 | TString dtype(fITSgeom->GetModuleTypeName(index)); | |
81 | if(dtype.Contains("SPD")) nspd++; | |
82 | if(dtype.Contains("SDD")) nsdd++; | |
83 | if(dtype.Contains("SSD")) nssd++; | |
84 | } | |
85 | } | |
86 | } | |
87 | if(GetBtPeriod()==kAug04) maxn=nsdd; | |
88 | if(GetBtPeriod()==kNov04) maxn=nspd+nsdd+nssd; | |
89 | TClonesArray** digits = new TClonesArray*[maxn]; | |
90 | Int_t* idig = new Int_t[maxn]; | |
91 | for(Int_t idet=0;idet<maxn;idet++){ | |
92 | digits[idet]=new TClonesArray("AliITSdigitSDD"); | |
93 | idig[idet]=0; | |
94 | } | |
95 | ||
96 | switch(fBtPer){ | |
97 | case kNov04: | |
98 | fStreamer = new AliITSRawStreamSDDBeamTestNov04(fReader); | |
99 | break; | |
100 | case kAug04: | |
101 | AliVMERawStream vmeStreamer(fReader); | |
102 | fReader->RequireHeader(kFALSE); | |
103 | while(fReader->ReadHeader()){ | |
104 | fSubEventAttributes = fReader->GetSubEventAttributes(); | |
105 | } | |
106 | ||
107 | fSDDEvType=GetEventType(); | |
108 | if(fSDDEvType==1) fITSHeader->SetEventTypeSDD(kReal); | |
109 | if(fSDDEvType==2) fITSHeader->SetEventTypeSDD(kCalibration1); | |
110 | if(fSDDEvType==3) fITSHeader->SetEventTypeSDD(kCalibration2); | |
111 | fReader->Reset(); | |
112 | fStreamer = new AliITSRawStreamSDDBeamTest(fReader); | |
113 | break; | |
114 | } | |
115 | ||
116 | ||
117 | fStreamer->SetLowCarlosThreshold(fThreshold,0); | |
118 | fStreamer->SetLowCarlosThreshold(fThreshold,1); | |
119 | ||
120 | //from raw data the signal is already decompressed.. | |
121 | //set compressed fSignal of AliITSdigitSDD to -1000 | |
122 | //set expanded fSignalExpanded of AliITSdigitSDD equal to fStreamer.GetSignal() | |
123 | while(fStreamer->Next()){ | |
124 | Int_t ndet =0; | |
125 | if(GetBtPeriod()==kNov04) ndet=fStreamer->GetChannel()+nspd; | |
126 | if(GetBtPeriod()==kAug04) ndet=fStreamer->GetChannel(); | |
127 | Int_t anode = fStreamer->GetCoord1(); | |
128 | ||
129 | /* if we are reading only one det, two wings | |
130 | if(fStreamer.GetChannel()==1) anode+=256; //wing 1 0-255, wing 2 256-511 | |
131 | */ | |
132 | ||
133 | /* bt august 2004 and november 2004: with only 1 carlos | |
134 | channel 0 for one wing of one | |
135 | det, channel 1 for the wing of the second det*/ | |
136 | ||
137 | const Int_t kdgt[3]={anode,fStreamer->GetCoord2(),-1000}; | |
138 | const Int_t ktracks[10]={0,0,0,0,0,0,0,0,0,0}; | |
139 | const Int_t khits[10]={0,0,0,0,0,0,0,0,0,0}; | |
140 | const Float_t kcharges[10]={0,0,0,0,0,0,0,0,0,0}; | |
141 | ||
142 | ||
143 | new ((*digits[ndet])[idig[ndet]]) AliITSdigitSDD(0,kdgt,ktracks,khits,kcharges,fStreamer->GetSignal()); | |
144 | idig[ndet]++; | |
145 | } | |
146 | ||
147 | if(GetBtPeriod()==kNov04){ | |
148 | Int_t jitter=fStreamer->ReadJitter(); | |
149 | fITSHeader->SetJitterSDD(jitter); | |
150 | } | |
151 | for(Int_t n = 0;n<maxn;n++){ | |
152 | branch->SetAddress(&digits[n]); | |
153 | branch->Fill(); | |
154 | ||
155 | } | |
156 | ||
157 | fTreeD->SetEntries(maxn); | |
158 | fReader->Reset(); | |
159 | fTreeD->AutoSave(); | |
160 | ||
161 | for(Int_t n=0;n<maxn;n++){ | |
162 | delete digits[n]; | |
163 | } | |
164 | ||
165 | ||
166 | delete[] digits; | |
167 | delete[] idig; | |
168 | delete fStreamer; | |
169 | } | |
170 | ||
171 | ||
172 | //______________________________________ | |
173 | Int_t AliITSBeamTestDigSDD::GetEventType(){ | |
174 | ||
175 | // defines the SDD event type: | |
176 | // 1: physics event (kReal) | |
177 | // 2: calibration 1 (kCalibration1, injector pulse) | |
178 | // 3: calibration 2 (kCalibration2, test pulse) | |
179 | ||
180 | fSDDEvType=0; | |
181 | if(fSubEventAttributes[0]==0 && fSubEventAttributes[1]==0 && fSubEventAttributes[2]==0) fSDDEvType = 1; | |
182 | if(fSubEventAttributes[0]==1 && fSubEventAttributes[1]==0 && fSubEventAttributes[2]==0) fSDDEvType = 2; | |
183 | ||
184 | if(fSubEventAttributes[0]==2 && fSubEventAttributes[1]==0 && fSubEventAttributes[2]==0) fSDDEvType = 3; | |
185 | ||
186 | return fSDDEvType; | |
187 | } | |
188 | ||
189 | //______________________________________________________________________ | |
190 | AliITSBeamTestDigSDD::AliITSBeamTestDigSDD(const AliITSBeamTestDigSDD &bt):AliITSBeamTestDig(bt), | |
191 | fSDDEvType(bt.fSDDEvType), | |
192 | fSubEventAttributes(bt.fSubEventAttributes), | |
193 | fBtPer(bt.fBtPer), | |
194 | fThreshold(bt.fThreshold), | |
195 | fStreamer(bt.fStreamer){ | |
196 | // Copy constructor. | |
197 | ||
198 | } | |
199 | //______________________________________________________________________ | |
200 | AliITSBeamTestDigSDD& AliITSBeamTestDigSDD::operator=(const AliITSBeamTestDigSDD &source){ | |
201 | // Assignment operator. | |
202 | this->~AliITSBeamTestDigSDD(); | |
203 | new(this) AliITSBeamTestDigSDD(source); | |
204 | return *this; | |
205 | } | |
206 | ||
207 | ||
208 | ||
209 |