prevent running if CDB snapshot setting failed
[u/mrichter/AliRoot.git] / STEER / STEER / AliCTPRawData.cxx
CommitLineData
867ef916 1/**************************************************************************
2 * Copyright(c) 1998-2003, 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////////////////////////////////////////////////////////////
23549dab 17//This class contains the methods to create raw data //
78873261 18//for CTP (trigger). For Run1 the CTP data format is taken as //
23549dab 19//described in the Trigger TDR - pages 134 and 135. //
78873261 20//The Run1 version of raw data is in: //
23549dab 21//http://epweb2.ph.bham.ac.uk/user/krivda/alice/ctp/ctp_readout1.pdf//
78873261 22// The Run2 version of raw data is inL
23//http://alicetrigger.web.cern.ch/alicetrigger/ls1_upgrade/ctp_readout1_run2.pdf
23549dab 24//////////////////////////////////////////////////////////
867ef916 25
26#include <TObject.h>
27#include <TString.h>
28#include <Riostream.h>
29#include "AliCTPRawData.h"
30#include "AliRunLoader.h"
31#include "AliCentralTrigger.h"
867ef916 32#include "AliLog.h"
362c9d61 33#include "AliDAQ.h"
08f92f14 34#include "AliFstream.h"
867ef916 35
36ClassImp(AliCTPRawData)
37////////////////////////////////////////////////////////////////////////////////////////
38
39//______________________________________________________________________________
40AliCTPRawData::AliCTPRawData()
41{
42 // Default constructor
43}
44
45//______________________________________________________________________________
46AliCTPRawData::AliCTPRawData(const AliCTPRawData &source):
47 TObject(source)
48{
49 // Copy Constructor
50}
51
52//______________________________________________________________________________
53AliCTPRawData& AliCTPRawData::operator=(const AliCTPRawData &source)
54{
55 // Assigment operator
56 if(this==&source) return *this;
57 ((TObject *)this)->operator=(source);
58
59 return *this;
60}
61
62//______________________________________________________________________________
63void AliCTPRawData::RawData()
64{
65 // This method writes the CTP (trigger)
66 // raw data in a DDL file
7219d5b5 67 // run1 payload
867ef916 68 ULong64_t l2class = 0;
1fa33d12 69 UChar_t l2cluster = 0;
23549dab 70 UInt_t l0input = 0;
71 UInt_t l1input = 0;
72 UShort_t l2input=0;
867ef916 73 AliInfo("Storing the CTP DDL raw data...");
33c3c91a 74 AliRunLoader *runloader = AliRunLoader::Instance();
867ef916 75 if (runloader) {
76 if (!runloader->LoadTrigger()) {
77 AliCentralTrigger *aCTP = runloader->GetTrigger();
78 if (AliDebugLevel() > 0)
79 aCTP->Dump();
80 // First get the trigger mask
81 l2class = aCTP->GetClassMask();
82 // Then get the detector cluster to be read out
1fa33d12 83 l2cluster = aCTP->GetClusterMask();
23549dab 84 // Then get the input cluster mask
85 l0input = aCTP->GetL0TriggerInputs();
86 l1input = aCTP->GetL1TriggerInputs();
87 l2input = aCTP->GetL2TriggerInputs();
867ef916 88 }
89 else
90 AliWarning("No trigger can be loaded! Putting empty trigger class into the CTP raw data !");
91 }
92 else
93 AliError("No run loader is available! Putting empty trigger class into the CTP raw data !");
94
95 AliDebug(1,Form("CTP trigger mask = 0x%llx",l2class));
96 AliDebug(1,Form("CTP detector cluster = 0x%x",l2cluster));
97
a4124171 98 TString fileName = AliDAQ::DdlFileName("TRG",0);
99 AliInfo(Form("Storing CTP raw data in %s",fileName.Data()));
08f92f14 100 AliFstream* outfile; // logical name of the output file
a4124171 101 outfile = new AliFstream(fileName.Data());
867ef916 102
867ef916 103 // Writing CTP raw data here
104 // The format is taken as in
23549dab 105 // dhttp://epweb2.ph.bham.ac.uk/user/krivda/alice/ctp/ctp_readout1.pdf
867ef916 106
107 // If not 0, from where??
108 UInt_t bunchCross = 0;
109 UInt_t orbitId = 0;
110 Bool_t esr = 0; // Enable Segmented Readout flag
111
112 // First 3 words here - Bunch-crossing and orbit numbers
113 UInt_t word = 0;
23549dab 114 word |= 0 << 15; // BlockID = 0 in case of CTP readout
f95e7d66 115 word |= bunchCross & 0xFFF;
867ef916 116 AliDebug(1,Form("CTP word1 = 0x%x",word));
08f92f14 117 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
867ef916 118
119 word = 0;
23549dab 120 word |= 0 << 15; // BlockID = 0 in case of CTP readout
f95e7d66 121 word |= (orbitId >> 12) & 0xFFF;
867ef916 122 AliDebug(1,Form("CTP word2 = 0x%x",word));
08f92f14 123 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
867ef916 124 word = 0;
23549dab 125 word |= 0 << 15; // BlockID = 0 in case of CTP readout
f95e7d66 126 word |= orbitId & 0xFFF;
867ef916 127 AliDebug(1,Form("CTP word3 = 0x%x",word));
08f92f14 128 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
867ef916 129
130 // Now the 4th word
131 word = 0;
23549dab 132 word |= 0 << 15; // BlockID = 0 in case of CTP readout
867ef916 133 word |= ((UInt_t)esr) << 10;
134 word |= 0 << 8; // L2SwC - physics trigger
f95e7d66 135 word |= (l2cluster & 0x3F) << 2; // L2Cluster
80ebf966 136 word |= (UInt_t)((l2class >> 48) & 0x3);
867ef916 137 AliDebug(1,Form("CTP word4 = 0x%x",word));
08f92f14 138 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
867ef916 139
23549dab 140 // Then the 4 words with the trigger classes
867ef916 141 word = 0;
23549dab 142 word |= 0 << 15; // BlockID = 0 in case of CTP readout
80ebf966 143 word |= (UInt_t)((l2class >> 36) & 0xFFF);
867ef916 144 AliDebug(1,Form("CTP word5 = 0x%x",word));
08f92f14 145 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
867ef916 146 word = 0;
23549dab 147 word |= 0 << 15; // BlockID = 0 in case of CTP readout
80ebf966 148 word |= (UInt_t)((l2class >> 24) & 0xFFF);
867ef916 149 AliDebug(1,Form("CTP word6 = 0x%x",word));
08f92f14 150 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
867ef916 151 word = 0;
23549dab 152 word |= 0 << 15; // BlockID = 0 in case of CTP readout
80ebf966 153 word |= (UInt_t)((l2class >> 12) & 0xFFF);
867ef916 154 AliDebug(1,Form("CTP word7 = 0x%x",word));
08f92f14 155 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
867ef916 156 word = 0;
23549dab 157 word |= 0 << 15; // BlockID = 0 in case of CTP readout
80ebf966 158 word |= (UInt_t)(l2class & 0xFFF);
867ef916 159 AliDebug(1,Form("CTP word8 = 0x%x",word));
08f92f14 160 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
867ef916 161
23549dab 162 // The last 5 words with trigger inputs
163 word = 0;
164 word |= 0 << 15; // BlockID = 0 in case of CTP readout
165 word |= (UInt_t)((l0input >> 12) & 0xFFF);
7219d5b5 166 AliDebug(1,Form("CTP word9 = 0x%x",word));
167 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
168 word = 0;
169 word |= 0 << 15; // BlockID = 0 in case of CTP readout
170 word |= (UInt_t)((l0input >> 0) & 0xFFF);
171 AliDebug(1,Form("CTP word10 = 0x%x",word));
172 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
173 word = 0;
174 word |= 0 << 15; // BlockID = 0 in case of CTP readout
175 word |= (UInt_t)((l1input >> 12) & 0xFFF);
176 AliDebug(1,Form("CTP word11 = 0x%x",word));
177 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
178 word = 0;
179 word |= 0 << 15; // BlockID = 0 in case of CTP readout
180 word |= (UInt_t)((l1input >> 0) & 0xFFF);
181 AliDebug(1,Form("CTP word12 = 0x%x",word));
182 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
183 word = 0;
184 word |= 0 << 15; // BlockID = 0 in case of CTP readout
185 word |= (UInt_t)((l2input >> 0) & 0xFFF);
186 AliDebug(1,Form("CTP word13 = 0x%x",word));
187 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
188
189 delete outfile;
190
191 return;
192}
193//______________________________________________________________________________
194void AliCTPRawData::RawDataRun2()
195{
196 // This method writes the CTP (trigger)
197 // raw data in a DDL file
198 // New payload for run2 50 more classes, 2 more clusters
199 ULong64_t l2class = 0;
200 ULong64_t l2classNext50 = 0;
201 UChar_t l2cluster = 0;
202 UInt_t l0input = 0;
203 UInt_t l1input = 0;
204 UShort_t l2input=0;
205 AliInfo("Storing the CTP DDL raw data...");
206 AliRunLoader *runloader = AliRunLoader::Instance();
207 if (runloader) {
208 if (!runloader->LoadTrigger()) {
209 AliCentralTrigger *aCTP = runloader->GetTrigger();
210 if (AliDebugLevel() > 0)
211 aCTP->Dump();
212 // First get the trigger mask
213 l2class = aCTP->GetClassMask();
214 l2classNext50 = aCTP->GetClassMaskNext50();
215 // Then get the detector cluster to be read out
216 l2cluster = aCTP->GetClusterMask();
217 // Then get the input cluster mask
218 l0input = aCTP->GetL0TriggerInputs();
219 l1input = aCTP->GetL1TriggerInputs();
220 l2input = aCTP->GetL2TriggerInputs();
221 }
222 else
223 AliWarning("No trigger can be loaded! Putting empty trigger class into the CTP raw data !");
224 }
225 else
226 AliError("No run loader is available! Putting empty trigger class into the CTP raw data !");
227
228 AliDebug(1,Form("CTP trigger mask = 0x%llx",l2class));
229 AliDebug(1,Form("CTP detector cluster = 0x%x",l2cluster));
230
231 TString fileName = AliDAQ::DdlFileName("TRG",0);
232 AliInfo(Form("Storing CTP raw data in %s",fileName.Data()));
233 AliFstream* outfile; // logical name of the output file
234 outfile = new AliFstream(fileName.Data());
235
236 // Writing CTP raw data here
237 // The format is taken as in
238 // dhttp://epweb2.ph.bham.ac.uk/user/krivda/alice/ctp/ctp_readout1.pdf
239
240 // If not 0, from where??
241 UInt_t bunchCross = 0;
242 UInt_t orbitId = 0;
243 Bool_t esr = 0; // Enable Segmented Readout flag
244
245 // First 3 words here - Bunch-crossing and orbit numbers
246 UInt_t word = 0;
247 word |= 0 << 15; // BlockID = 0 in case of CTP readout
248 word |= bunchCross & 0xFFF;
249 AliDebug(1,Form("CTP word1 = 0x%x",word));
250 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
251
252 word = 0;
253 word |= 0 << 15; // BlockID = 0 in case of CTP readout
254 word |= (orbitId >> 12) & 0xFFF;
255 AliDebug(1,Form("CTP word2 = 0x%x",word));
256 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
257 word = 0;
258 word |= 0 << 15; // BlockID = 0 in case of CTP readout
259 word |= orbitId & 0xFFF;
260 AliDebug(1,Form("CTP word3 = 0x%x",word));
261 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
262
263 // Now the 4th word
264 word = 0;
265 word |= 0 << 15; // BlockID = 0 in case of CTP readout
e7096234 266 word |= 1<<12; // version 1=run2
7219d5b5 267 word |= ((UInt_t)esr) << 10;
268 word |= 0 << 8; // L2SwC - physics trigger
e7096234 269 word |= l2cluster; // L2cluster 1-8
7219d5b5 270 AliDebug(1,Form("CTP word4 = 0x%x",word));
271 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
272
273 // Then the 9 words with the trigger classes
274 word = 0;
275 word |= 0 << 15; // BlockID = 0 in case of CTP readout
276 word |= (UInt_t)((l2classNext50 >>46) & 0xF); //5 100..97
277 AliDebug(1,Form("CTP word5 = 0x%x",word));
278 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
279 word = 0;
280 word |= 0 << 15; // BlockID = 0 in case of CTP readout
78873261 281 word |= (UInt_t)((l2classNext50 >> 34) & 0xFFF); //6 96..85
7219d5b5 282 AliDebug(1,Form("CTP word6 = 0x%x",word));
283 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
284 word = 0;
285 word |= 0 << 15; // BlockID = 0 in case of CTP readout
286 word |= (UInt_t)((l2classNext50 >> 22) & 0xFFF); //7 84..73
287 AliDebug(1,Form("CTP word7 = 0x%x",word));
288 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
289 word = 0;
290 word |= 0 << 15; // BlockID = 0 in case of CTP readout
291 word |= (UInt_t)((l2classNext50 >> 10) & 0xFFF); //8 72..61
292 AliDebug(1,Form("CTP word8 = 0x%x",word));
293 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
294 word = 0;
295 word |= 0 << 15; // BlockID = 0 in case of CTP readout
78873261 296 word |= (UInt_t)((l2classNext50 & 0x3FF)<<2); //9 60..51
7219d5b5 297 word |= (UInt_t)((l2class >> 48) & 0x3); //9 50..49
298 AliDebug(1,Form("CTP word9 = 0x%x",word));
299 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
300 word = 0;
301 word |= 0 << 15; // BlockID = 0 in case of CTP readout
302 word |= (UInt_t)((l2class >> 36) & 0xFFF); //10 48..37
303 AliDebug(1,Form("CTP word10 = 0x%x",word));
304 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
305 word = 0;
306 word |= 0 << 15; // BlockID = 0 in case of CTP readout
307 word |= (UInt_t)((l2class >> 24) & 0xFFF); //11 36..25
308 AliDebug(1,Form("CTP word11 = 0x%x",word));
309 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
310 word = 0;
311 word |= 0 << 15; // BlockID = 0 in case of CTP readout
312 word |= (UInt_t)((l2class >> 12) & 0xFFF); //12 24-13
313 AliDebug(1,Form("CTP word12 = 0x%x",word));
314 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
315 word = 0;
316 word |= 0 << 15; // BlockID = 0 in case of CTP readout
317 word |= (UInt_t)(l2class & 0xFFF); //13 12..1
318 AliDebug(1,Form("CTP word13 = 0x%x",word));
319 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
320
321 // The last 5 words with trigger inputs
322 word = 0;
323 word |= 0 << 15; // BlockID = 0 in case of CTP readout
324 word |= (UInt_t)((l0input >> 12) & 0xFFF);
e7096234 325 AliDebug(1,Form("CTP word14 = 0x%x",word));
23549dab 326 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
327 word = 0;
328 word |= 0 << 15; // BlockID = 0 in case of CTP readout
329 word |= (UInt_t)((l0input >> 0) & 0xFFF);
e7096234 330 AliDebug(1,Form("CTP word15 = 0x%x",word));
23549dab 331 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
332 word = 0;
333 word |= 0 << 15; // BlockID = 0 in case of CTP readout
334 word |= (UInt_t)((l1input >> 12) & 0xFFF);
e7096234 335 AliDebug(1,Form("CTP word16 = 0x%x",word));
23549dab 336 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
337 word = 0;
338 word |= 0 << 15; // BlockID = 0 in case of CTP readout
339 word |= (UInt_t)((l1input >> 0) & 0xFFF);
e7096234 340 AliDebug(1,Form("CTP word17 = 0x%x",word));
23549dab 341 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
342 word = 0;
343 word |= 0 << 15; // BlockID = 0 in case of CTP readout
344 word |= (UInt_t)((l2input >> 0) & 0xFFF);
e7096234 345 AliDebug(1,Form("CTP word18 = 0x%x",word));
23549dab 346 outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
347
08f92f14 348 delete outfile;
867ef916 349
350 return;
351}