]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSBeamTestDigSDD.cxx
Method AliITSRawStream::GetJitter is defined const as it should be. Classes AliITSRaw...
[u/mrichter/AliRoot.git] / ITS / AliITSBeamTestDigSDD.cxx
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         if(fITSgeom->GetModuleTypeName(index)=="kSPD") nspd++;
81         if(fITSgeom->GetModuleTypeName(index)=="kSDD") nsdd++;
82         if(fITSgeom->GetModuleTypeName(index)=="kSSD") nssd++;
83       }
84     }
85   }
86   if(GetBtPeriod()==kAug04) maxn=nsdd;
87   if(GetBtPeriod()==kNov04) maxn=nspd+nsdd+nssd;
88   TClonesArray** digits = new TClonesArray*[maxn];
89   Int_t* idig = new Int_t[maxn];
90   for(Int_t idet=0;idet<maxn;idet++){
91     digits[idet]=new TClonesArray("AliITSdigitSDD");
92     idig[idet]=0;
93   }
94
95   switch(fBtPer){
96   case kNov04:
97     fStreamer = new AliITSRawStreamSDDBeamTestNov04(fReader);
98     break;
99   case kAug04:
100     AliVMERawStream vmeStreamer(fReader);
101     fReader->RequireHeader(kFALSE);
102     while(fReader->ReadHeader()){
103       fSubEventAttributes = fReader->GetSubEventAttributes();
104     }
105     
106     fSDDEvType=GetEventType();
107     if(fSDDEvType==1) fITSHeader->SetEventTypeSDD(kReal);
108     if(fSDDEvType==2) fITSHeader->SetEventTypeSDD(kCalibration1);
109     if(fSDDEvType==3) fITSHeader->SetEventTypeSDD(kCalibration2);
110     fReader->Reset();
111     fStreamer = new AliITSRawStreamSDDBeamTest(fReader);
112     break;
113   }
114
115  
116   fStreamer->SetLowCarlosThreshold(fThreshold,0);
117   fStreamer->SetLowCarlosThreshold(fThreshold,1);
118
119   //from raw data the signal is already decompressed..
120   //set compressed fSignal of AliITSdigitSDD to -1000
121   //set expanded fSignalExpanded of AliITSdigitSDD equal to fStreamer.GetSignal() 
122   while(fStreamer->Next()){   
123     Int_t ndet =0;
124     if(GetBtPeriod()==kNov04) ndet=fStreamer->GetChannel()+nspd;
125     if(GetBtPeriod()==kAug04) ndet=fStreamer->GetChannel();
126     Int_t anode = fStreamer->GetCoord1();
127
128     /* if we are reading only one det, two wings
129        if(fStreamer.GetChannel()==1) anode+=256; //wing 1 0-255, wing 2 256-511
130     */
131
132     /* bt august 2004 and november 2004: with only 1 carlos 
133        channel 0 for one wing of one
134        det, channel 1 for the wing of the second det*/
135
136     const Int_t kdgt[3]={anode,fStreamer->GetCoord2(),-1000};
137     const Int_t ktracks[10]={0,0,0,0,0,0,0,0,0,0};
138     const Int_t khits[10]={0,0,0,0,0,0,0,0,0,0};
139     const Float_t kcharges[10]={0,0,0,0,0,0,0,0,0,0};
140  
141
142     new ((*digits[ndet])[idig[ndet]]) AliITSdigitSDD(0,kdgt,ktracks,khits,kcharges,fStreamer->GetSignal());
143     idig[ndet]++;
144   }
145
146   if(GetBtPeriod()==kNov04){
147     Int_t jitter=fStreamer->ReadJitter();
148     fITSHeader->SetJitterSDD(jitter);
149   }
150   for(Int_t n = 0;n<maxn;n++){
151     branch->SetAddress(&digits[n]);
152     branch->Fill();
153   
154   }
155       
156   fTreeD->SetEntries(maxn);
157   fReader->Reset();
158   fTreeD->AutoSave();
159
160   for(Int_t n=0;n<maxn;n++){
161     delete digits[n];
162   }
163
164   
165   delete[] digits;
166   delete[] idig;
167   delete fStreamer;
168 }
169
170   
171 //______________________________________
172 Int_t AliITSBeamTestDigSDD::GetEventType(){
173
174   // defines the SDD event type:
175   // 1: physics event (kReal)
176   // 2: calibration 1 (kCalibration1, injector pulse)
177   // 3: calibration 2 (kCalibration2, test pulse)
178  
179   fSDDEvType=0;
180   if(fSubEventAttributes[0]==0 && fSubEventAttributes[1]==0 && fSubEventAttributes[2]==0) fSDDEvType = 1;
181   if(fSubEventAttributes[0]==1 && fSubEventAttributes[1]==0 && fSubEventAttributes[2]==0) fSDDEvType = 2;
182
183   if(fSubEventAttributes[0]==2 && fSubEventAttributes[1]==0 && fSubEventAttributes[2]==0) fSDDEvType = 3;
184
185   return fSDDEvType;
186 }
187
188 //______________________________________________________________________
189 AliITSBeamTestDigSDD::AliITSBeamTestDigSDD(const AliITSBeamTestDigSDD &bt):AliITSBeamTestDig(bt),
190 fSDDEvType(bt.fSDDEvType),
191 fSubEventAttributes(bt.fSubEventAttributes),
192 fBtPer(bt.fBtPer),
193 fThreshold(bt.fThreshold),
194 fStreamer(bt.fStreamer){
195     // Copy constructor. 
196
197 }
198 //______________________________________________________________________
199 AliITSBeamTestDigSDD& AliITSBeamTestDigSDD::operator=(const AliITSBeamTestDigSDD &source){
200     // Assignment operator. 
201   this->~AliITSBeamTestDigSDD();
202   new(this) AliITSBeamTestDigSDD(source);
203   return *this;
204 }
205
206
207
208