]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/STEER/AliCTPRawData.cxx
Changes for CDH v3
[u/mrichter/AliRoot.git] / STEER / STEER / AliCTPRawData.cxx
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 ////////////////////////////////////////////////////////////
17 //This class contains the methods to create raw data                //
18 //for CTP (trigger). The CTP data format is taken as                //
19 //described in the Trigger TDR - pages 134  and 135.                //
20 //The updated version of raw data is in:                            //
21 //http://epweb2.ph.bham.ac.uk/user/krivda/alice/ctp/ctp_readout1.pdf//
22 //////////////////////////////////////////////////////////
23
24 #include <TObject.h>
25 #include <TString.h>
26 #include <Riostream.h>
27 #include "AliCTPRawData.h"
28 #include "AliRunLoader.h"
29 #include "AliCentralTrigger.h"
30 #include "AliLog.h"
31 #include "AliDAQ.h"
32 #include "AliFstream.h"
33
34 ClassImp(AliCTPRawData)
35 ////////////////////////////////////////////////////////////////////////////////////////
36
37 //______________________________________________________________________________
38 AliCTPRawData::AliCTPRawData()
39 {
40   // Default constructor
41 }
42
43 //______________________________________________________________________________
44 AliCTPRawData::AliCTPRawData(const AliCTPRawData &source):
45   TObject(source)
46 {
47   // Copy Constructor
48 }
49
50 //______________________________________________________________________________
51 AliCTPRawData& AliCTPRawData::operator=(const AliCTPRawData &source)
52 {
53   // Assigment operator
54   if(this==&source) return *this;
55   ((TObject *)this)->operator=(source);
56  
57  return *this;
58 }
59
60 //______________________________________________________________________________
61 void AliCTPRawData::RawData()
62 {
63   // This method writes the CTP (trigger)
64   // raw data in a DDL file
65   ULong64_t l2class = 0;
66   UChar_t l2cluster = 0;
67   UInt_t l0input = 0;
68   UInt_t l1input = 0;
69   UShort_t l2input=0;
70   AliInfo("Storing the CTP DDL raw data...");
71   AliRunLoader *runloader = AliRunLoader::Instance();
72   if (runloader) {
73     if (!runloader->LoadTrigger()) {
74       AliCentralTrigger *aCTP = runloader->GetTrigger();
75       if (AliDebugLevel() > 0)
76         aCTP->Dump();
77       // First get the trigger mask
78       l2class = aCTP->GetClassMask();
79       // Then get the detector cluster to be read out
80       l2cluster = aCTP->GetClusterMask();
81       // Then get the input cluster mask
82       l0input = aCTP->GetL0TriggerInputs();
83       l1input = aCTP->GetL1TriggerInputs();
84       l2input = aCTP->GetL2TriggerInputs();
85     }
86     else
87       AliWarning("No trigger can be loaded! Putting empty trigger class into the CTP raw data !");
88   }
89   else
90     AliError("No run loader is available! Putting empty trigger class into the CTP raw data !");
91
92   AliDebug(1,Form("CTP trigger mask = 0x%llx",l2class));
93   AliDebug(1,Form("CTP detector cluster = 0x%x",l2cluster));
94
95   TString fileName = AliDAQ::DdlFileName("TRG",0);
96   AliInfo(Form("Storing CTP raw data in %s",fileName.Data()));
97   AliFstream* outfile;         // logical name of the output file 
98   outfile = new AliFstream(fileName.Data());
99
100   // Writing CTP raw data here
101   // The format is taken as in
102   // dhttp://epweb2.ph.bham.ac.uk/user/krivda/alice/ctp/ctp_readout1.pdf
103
104   // If not 0, from where??
105   UInt_t bunchCross = 0;
106   UInt_t orbitId = 0;
107   Bool_t esr = 0; // Enable Segmented Readout flag
108
109   // First 3 words here - Bunch-crossing and orbit numbers
110   UInt_t word = 0;
111   word |= 0 << 15; // BlockID = 0 in case of CTP readout
112   word |= bunchCross & 0xFFF;
113   AliDebug(1,Form("CTP word1 = 0x%x",word));
114   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
115
116   word = 0;
117   word |= 0 << 15; // BlockID = 0 in case of CTP readout
118   word |= (orbitId >> 12) & 0xFFF;
119   AliDebug(1,Form("CTP word2 = 0x%x",word));
120   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
121   word = 0;
122   word |= 0 << 15; // BlockID = 0 in case of CTP readout
123   word |= orbitId & 0xFFF;
124   AliDebug(1,Form("CTP word3 = 0x%x",word));
125   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
126
127   // Now the 4th word
128   word = 0;
129   word |= 0 << 15; // BlockID = 0 in case of CTP readout
130   word |= ((UInt_t)esr) << 10;
131   word |= 0 << 8; // L2SwC - physics trigger
132   word |= (l2cluster & 0x3F) << 2; // L2Cluster
133   word |= (UInt_t)((l2class >> 48) & 0x3);
134   AliDebug(1,Form("CTP word4 = 0x%x",word));
135   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
136
137   // Then the  4 words with the trigger classes
138   word = 0;
139   word |= 0 << 15; // BlockID = 0 in case of CTP readout
140   word |= (UInt_t)((l2class >> 36) & 0xFFF);
141   AliDebug(1,Form("CTP word5 = 0x%x",word));
142   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
143   word = 0;
144   word |= 0 << 15; // BlockID = 0 in case of CTP readout
145   word |= (UInt_t)((l2class >> 24) & 0xFFF);
146   AliDebug(1,Form("CTP word6 = 0x%x",word));
147   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
148   word = 0;
149   word |= 0 << 15; // BlockID = 0 in case of CTP readout
150   word |= (UInt_t)((l2class >> 12) & 0xFFF);
151   AliDebug(1,Form("CTP word7 = 0x%x",word));
152   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
153   word = 0;
154   word |= 0 << 15; // BlockID = 0 in case of CTP readout
155   word |= (UInt_t)(l2class & 0xFFF);
156   AliDebug(1,Form("CTP word8 = 0x%x",word));
157   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
158
159   // The last 5 words with trigger inputs
160   word = 0;
161   word |= 0 << 15; // BlockID = 0 in case of CTP readout
162   word |= (UInt_t)((l0input >> 12) & 0xFFF);
163   AliDebug(1,Form("CTP word9 = 0x%x",word));
164   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
165   word = 0;
166   word |= 0 << 15; // BlockID = 0 in case of CTP readout
167   word |= (UInt_t)((l0input >> 0) & 0xFFF);
168   AliDebug(1,Form("CTP word10 = 0x%x",word));
169   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
170   word = 0;
171   word |= 0 << 15; // BlockID = 0 in case of CTP readout
172   word |= (UInt_t)((l1input >> 12) & 0xFFF);
173   AliDebug(1,Form("CTP word11 = 0x%x",word));
174   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
175   word = 0;
176   word |= 0 << 15; // BlockID = 0 in case of CTP readout
177   word |= (UInt_t)((l1input >> 0) & 0xFFF);
178   AliDebug(1,Form("CTP word12 = 0x%x",word));
179   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
180   word = 0;
181   word |= 0 << 15; // BlockID = 0 in case of CTP readout
182   word |= (UInt_t)((l2input >> 0) & 0xFFF);
183   AliDebug(1,Form("CTP word13 = 0x%x",word));
184   outfile->WriteBuffer((char*)(&word),sizeof(UInt_t));
185   
186   delete outfile;
187
188   return;
189 }