Moved to head version of HLT, main difference to v1-2 are the DDL classes in misc...
authorloizides <loizides@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Aug 2003 20:44:48 +0000 (20:44 +0000)
committerloizides <loizides@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 4 Aug 2003 20:44:48 +0000 (20:44 +0000)
30 files changed:
HLT/doc/alice-062003.geo [new file with mode: 0644]
HLT/doc/changelog.doc
HLT/doc/changelog.exa
HLT/doc/changelog.misc
HLT/doc/changelog.src
HLT/doc/l3transform-062003.config [new file with mode: 0644]
HLT/doc/l3transform-cosmic-022003.config [new file with mode: 0644]
HLT/doc/taginfo [new file with mode: 0644]
HLT/exa/binary.C
HLT/exa/ddl2binary.C [new file with mode: 0644]
HLT/exa/read.C
HLT/misc/AliL3DDLDataFileHandler.cxx [new file with mode: 0644]
HLT/misc/AliL3DDLDataFileHandler.h [new file with mode: 0644]
HLT/misc/AliL3DDLRawReader.cxx [new file with mode: 0644]
HLT/misc/AliL3DDLRawReader.h [new file with mode: 0644]
HLT/misc/AliL3DDLRawReaderFile.cxx [new file with mode: 0644]
HLT/misc/AliL3DDLRawReaderFile.h [new file with mode: 0644]
HLT/misc/AliL3DDLTPCRawStream.cxx [new file with mode: 0644]
HLT/misc/AliL3DDLTPCRawStream.h [new file with mode: 0644]
HLT/misc/AliL3MiscLinkDef.h
HLT/misc/AliL3TransBit.cxx
HLT/misc/Makefile
HLT/src/AliL3ClustFinderNew.cxx
HLT/src/AliL3GlobalMerger.cxx
HLT/src/AliL3MemHandler.cxx
HLT/src/AliL3MemHandler.h
HLT/src/AliL3RawDataFileHandler.cxx
HLT/src/AliL3RawDataFileHandler.h
HLT/src/AliL3RootTypes.h
HLT/src/AliL3Transform.cxx

diff --git a/HLT/doc/alice-062003.geo b/HLT/doc/alice-062003.geo
new file mode 100644 (file)
index 0000000..2851493
Binary files /dev/null and b/HLT/doc/alice-062003.geo differ
index 38729f5..6c0bc9a 100644 (file)
@@ -1,3 +1,13 @@
+2003-08-04  Constantin Loizides  <loizides@hansa00>
+
+       * /cvs/hltcvs/level3code/doc/alice-062003.geo, /cvs/hltcvs/level3code/doc/l3transform-062003.config, /cvs/hltcvs/level3code/doc/l3transform-cosmic-022003.config:
+       Added helper files.
+
+2003-07-30  Constantin Loizides  <loizides@hansa00>
+
+       * /cvs/hltcvs/level3code/doc/taginfo:
+       Added tag info file to remember why and when tagged.
+
 2003-07-29  Constantin Loizides  <loizides@hansa00>
 
        * /cvs/hltcvs/level3code/doc/README:
index deec83b..123b917 100644 (file)
@@ -1,3 +1,13 @@
+2003-08-04  Constantin Loizides  <loizides@hansa00>
+
+       * /cvs/hltcvs/level3code/exa/binary.C: Moved L3 to HLT in the comment.
+
+       * /cvs/hltcvs/level3code/exa/read.C:
+       Removed logger as it will be started in rootlogin.C
+
+       * /cvs/hltcvs/level3code/exa/ddl2binary.C:
+       Examplte to convert ddl to hlt data format.
+
 2003-07-29  Constantin Loizides  <loizides@hansa00>
 
        * /cvs/hltcvs/level3code/exa/runtracker.C: Added more comments.
index cd713eb..24bea31 100644 (file)
@@ -1,3 +1,11 @@
+2003-08-04  Constantin Loizides  <loizides@hansa00>
+
+       * /cvs/hltcvs/level3code/misc/AliL3DDLDataFileHandler.cxx, /cvs/hltcvs/level3code/misc/AliL3DDLDataFileHandler.h, /cvs/hltcvs/level3code/misc/AliL3DDLRawReader.cxx, /cvs/hltcvs/level3code/misc/AliL3DDLRawReaderFile.cxx, /cvs/hltcvs/level3code/misc/AliL3DDLRawReaderFile.h, /cvs/hltcvs/level3code/misc/AliL3DDLRawReader.h, /cvs/hltcvs/level3code/misc/AliL3DDLTPCRawStream.cxx, /cvs/hltcvs/level3code/misc/AliL3DDLTPCRawStream.h, /cvs/hltcvs/level3code/misc/AliL3MiscLinkDef.h, /cvs/hltcvs/level3code/misc/Makefile:
+       Added classes for tpc ddl to hlt binary conversion.
+
+       * /cvs/hltcvs/level3code/misc/AliL3TransBit.cxx:
+       Added aliroot copyright.
+
 2003-07-26  Constantin Loizides  <loizides@hansa00>
 
        * /cvs/hltcvs/level3code/misc/AliL3DataHandler.cxx, /cvs/hltcvs/level3code/misc/AliL3DataHandler.h, /cvs/hltcvs/level3code/misc/AliL3VHDLClusterFinder.h:
index 0c40a93..1e48618 100644 (file)
@@ -1,3 +1,33 @@
+2003-08-04  Constantin Loizides  <loizides@hansa00>
+
+       * /cvs/hltcvs/level3code/src/AliL3MemHandler.cxx, /cvs/hltcvs/level3code/src/AliL3MemHandler.h:
+       Added virtual functions for the daughter classes AliL3RawDataFileHandler und AliL3DDLDataFileHandler.
+
+       * /cvs/hltcvs/level3code/src/AliL3RawDataFileHandler.cxx, /cvs/hltcvs/level3code/src/AliL3RawDataFileHandler.h:
+       Added RawData2CompBinary function.
+
+       * /cvs/hltcvs/level3code/src/AliL3RootTypes.h:
+       Changed comment from L3 to HLT; although that will be a long way to go...
+
+       * /cvs/hltcvs/level3code/src/AliL3Transform.cxx:
+       Added printout when config file was successfully read.
+
+2003-07-30  Anders Strand Vestbo  <vestbo@hansa00>
+
+       * /cvs/hltcvs/level3code/src/AliL3GlobalMerger.cxx:
+       Bugfix in Merge(). When a track is merged with a track in a
+       neighbouring sector, the current track loop has to finish.
+       If not, a track might get merged with two different tracks.
+       This bug was brought to you by Dr.Frankenfeld, and solved by
+       me 2 years later...
+
+       * /cvs/hltcvs/level3code/src/AliL3ClustFinderNew.cxx:
+       The cluster charge was only written in case of fRawSP. Should of course
+       ALWAYS be written.
+
+       * /cvs/hltcvs/level3code/src/AliL3Transform.cxx:
+       Set bfield in MakeInitFile
+
 2003-07-29  Constantin Loizides  <loizides@hansa00>
 
        * /cvs/hltcvs/level3code/src/AliL3Transform.cxx:
diff --git a/HLT/doc/l3transform-062003.config b/HLT/doc/l3transform-062003.config
new file mode 100644 (file)
index 0000000..90ad4b9
--- /dev/null
@@ -0,0 +1,658 @@
+void AliL3Transform::Init(){
+  fVersion = 10;
+  fBFieldFactor = 1.000;
+  fSolenoidBField = 4.000;
+  fNTimeBins = 446;
+  fNRowLow = 63;
+  fNRowUp = 96;
+  fNRowUp1 = 64;
+  fNRowUp2 = 32;
+  fNSectorLow = 36;
+  fNSectorUp = 36;
+  fNSector = 72;
+  fPadPitchWidthLow = 0.400;
+  fPadPitchWidthUp = 0.600;
+  fZWidth = 0.5660;
+  fZSigma = 0.2288;
+  fZLength = 250.0000;
+  fZOffset = 0.6864;
+  fDiffT = 0.0220;
+  fDiffL = 0.0220;
+  fOmegaTau = 0.1450;
+  fInnerPadLength = 0.750;
+  fOuter1PadLength = 1.000;
+  fOuter2PadLength = 1.500;
+  fInnerPRFSigma = 0.203811;
+  fOuter1PRFSigma = 0.299325;
+  fOuter2PRFSigma = 0.299323;
+  fTimeSigma = 0.228809;
+  fADCSat = 1024;
+  fZeroSup = 2;
+  fNSlice = 36;
+  fNRow = 159;
+  fNRotShift = 0.50;
+  fX[0] = 85.19;
+  fX[1] = 85.94;
+  fX[2] = 86.69;
+  fX[3] = 87.44;
+  fX[4] = 88.19;
+  fX[5] = 88.94;
+  fX[6] = 89.69;
+  fX[7] = 90.44;
+  fX[8] = 91.19;
+  fX[9] = 91.94;
+  fX[10] = 92.69;
+  fX[11] = 93.44;
+  fX[12] = 94.19;
+  fX[13] = 94.94;
+  fX[14] = 95.69;
+  fX[15] = 96.44;
+  fX[16] = 97.19;
+  fX[17] = 97.94;
+  fX[18] = 98.69;
+  fX[19] = 99.44;
+  fX[20] = 100.19;
+  fX[21] = 100.94;
+  fX[22] = 101.69;
+  fX[23] = 102.44;
+  fX[24] = 103.19;
+  fX[25] = 103.94;
+  fX[26] = 104.69;
+  fX[27] = 105.44;
+  fX[28] = 106.19;
+  fX[29] = 106.94;
+  fX[30] = 107.69;
+  fX[31] = 108.44;
+  fX[32] = 109.19;
+  fX[33] = 109.94;
+  fX[34] = 110.69;
+  fX[35] = 111.44;
+  fX[36] = 112.19;
+  fX[37] = 112.94;
+  fX[38] = 113.69;
+  fX[39] = 114.44;
+  fX[40] = 115.19;
+  fX[41] = 115.94;
+  fX[42] = 116.69;
+  fX[43] = 117.44;
+  fX[44] = 118.19;
+  fX[45] = 118.94;
+  fX[46] = 119.69;
+  fX[47] = 120.44;
+  fX[48] = 121.19;
+  fX[49] = 121.94;
+  fX[50] = 122.69;
+  fX[51] = 123.44;
+  fX[52] = 124.19;
+  fX[53] = 124.94;
+  fX[54] = 125.69;
+  fX[55] = 126.44;
+  fX[56] = 127.19;
+  fX[57] = 127.94;
+  fX[58] = 128.70;
+  fX[59] = 129.45;
+  fX[60] = 130.20;
+  fX[61] = 130.95;
+  fX[62] = 131.70;
+  fX[63] = 135.18;
+  fX[64] = 136.18;
+  fX[65] = 137.18;
+  fX[66] = 138.18;
+  fX[67] = 139.18;
+  fX[68] = 140.18;
+  fX[69] = 141.18;
+  fX[70] = 142.18;
+  fX[71] = 143.18;
+  fX[72] = 144.18;
+  fX[73] = 145.18;
+  fX[74] = 146.18;
+  fX[75] = 147.18;
+  fX[76] = 148.18;
+  fX[77] = 149.18;
+  fX[78] = 150.18;
+  fX[79] = 151.18;
+  fX[80] = 152.18;
+  fX[81] = 153.18;
+  fX[82] = 154.18;
+  fX[83] = 155.18;
+  fX[84] = 156.18;
+  fX[85] = 157.18;
+  fX[86] = 158.18;
+  fX[87] = 159.18;
+  fX[88] = 160.18;
+  fX[89] = 161.18;
+  fX[90] = 162.18;
+  fX[91] = 163.18;
+  fX[92] = 164.18;
+  fX[93] = 165.18;
+  fX[94] = 166.18;
+  fX[95] = 167.18;
+  fX[96] = 168.18;
+  fX[97] = 169.18;
+  fX[98] = 170.18;
+  fX[99] = 171.18;
+  fX[100] = 172.18;
+  fX[101] = 173.18;
+  fX[102] = 174.18;
+  fX[103] = 175.18;
+  fX[104] = 176.18;
+  fX[105] = 177.18;
+  fX[106] = 178.18;
+  fX[107] = 179.18;
+  fX[108] = 180.18;
+  fX[109] = 181.18;
+  fX[110] = 182.18;
+  fX[111] = 183.18;
+  fX[112] = 184.18;
+  fX[113] = 185.18;
+  fX[114] = 186.18;
+  fX[115] = 187.18;
+  fX[116] = 188.18;
+  fX[117] = 189.18;
+  fX[118] = 190.18;
+  fX[119] = 191.18;
+  fX[120] = 192.18;
+  fX[121] = 193.18;
+  fX[122] = 194.18;
+  fX[123] = 195.18;
+  fX[124] = 196.18;
+  fX[125] = 197.18;
+  fX[126] = 198.18;
+  fX[127] = 199.43;
+  fX[128] = 200.93;
+  fX[129] = 202.43;
+  fX[130] = 203.93;
+  fX[131] = 205.43;
+  fX[132] = 206.93;
+  fX[133] = 208.43;
+  fX[134] = 209.93;
+  fX[135] = 211.43;
+  fX[136] = 212.93;
+  fX[137] = 214.43;
+  fX[138] = 215.93;
+  fX[139] = 217.43;
+  fX[140] = 218.93;
+  fX[141] = 220.43;
+  fX[142] = 221.93;
+  fX[143] = 223.43;
+  fX[144] = 224.93;
+  fX[145] = 226.43;
+  fX[146] = 227.93;
+  fX[147] = 229.43;
+  fX[148] = 230.93;
+  fX[149] = 232.43;
+  fX[150] = 233.93;
+  fX[151] = 235.43;
+  fX[152] = 236.93;
+  fX[153] = 238.43;
+  fX[154] = 239.93;
+  fX[155] = 241.43;
+  fX[156] = 242.93;
+  fX[157] = 244.43;
+  fX[158] = 245.93;
+  fNPads[0] = 67;
+  fNPads[1] = 67;
+  fNPads[2] = 69;
+  fNPads[3] = 69;
+  fNPads[4] = 69;
+  fNPads[5] = 71;
+  fNPads[6] = 71;
+  fNPads[7] = 71;
+  fNPads[8] = 73;
+  fNPads[9] = 73;
+  fNPads[10] = 73;
+  fNPads[11] = 75;
+  fNPads[12] = 75;
+  fNPads[13] = 75;
+  fNPads[14] = 77;
+  fNPads[15] = 77;
+  fNPads[16] = 77;
+  fNPads[17] = 79;
+  fNPads[18] = 79;
+  fNPads[19] = 79;
+  fNPads[20] = 81;
+  fNPads[21] = 81;
+  fNPads[22] = 81;
+  fNPads[23] = 83;
+  fNPads[24] = 83;
+  fNPads[25] = 83;
+  fNPads[26] = 85;
+  fNPads[27] = 85;
+  fNPads[28] = 85;
+  fNPads[29] = 87;
+  fNPads[30] = 87;
+  fNPads[31] = 87;
+  fNPads[32] = 89;
+  fNPads[33] = 89;
+  fNPads[34] = 89;
+  fNPads[35] = 91;
+  fNPads[36] = 91;
+  fNPads[37] = 91;
+  fNPads[38] = 93;
+  fNPads[39] = 93;
+  fNPads[40] = 93;
+  fNPads[41] = 95;
+  fNPads[42] = 95;
+  fNPads[43] = 95;
+  fNPads[44] = 97;
+  fNPads[45] = 97;
+  fNPads[46] = 97;
+  fNPads[47] = 99;
+  fNPads[48] = 99;
+  fNPads[49] = 99;
+  fNPads[50] = 99;
+  fNPads[51] = 101;
+  fNPads[52] = 101;
+  fNPads[53] = 101;
+  fNPads[54] = 103;
+  fNPads[55] = 103;
+  fNPads[56] = 103;
+  fNPads[57] = 105;
+  fNPads[58] = 105;
+  fNPads[59] = 105;
+  fNPads[60] = 107;
+  fNPads[61] = 107;
+  fNPads[62] = 107;
+  fNPads[63] = 73;
+  fNPads[64] = 75;
+  fNPads[65] = 75;
+  fNPads[66] = 75;
+  fNPads[67] = 75;
+  fNPads[68] = 77;
+  fNPads[69] = 77;
+  fNPads[70] = 77;
+  fNPads[71] = 79;
+  fNPads[72] = 79;
+  fNPads[73] = 79;
+  fNPads[74] = 81;
+  fNPads[75] = 81;
+  fNPads[76] = 81;
+  fNPads[77] = 81;
+  fNPads[78] = 83;
+  fNPads[79] = 83;
+  fNPads[80] = 83;
+  fNPads[81] = 85;
+  fNPads[82] = 85;
+  fNPads[83] = 85;
+  fNPads[84] = 85;
+  fNPads[85] = 87;
+  fNPads[86] = 87;
+  fNPads[87] = 87;
+  fNPads[88] = 89;
+  fNPads[89] = 89;
+  fNPads[90] = 89;
+  fNPads[91] = 91;
+  fNPads[92] = 91;
+  fNPads[93] = 91;
+  fNPads[94] = 91;
+  fNPads[95] = 93;
+  fNPads[96] = 93;
+  fNPads[97] = 93;
+  fNPads[98] = 95;
+  fNPads[99] = 95;
+  fNPads[100] = 95;
+  fNPads[101] = 95;
+  fNPads[102] = 97;
+  fNPads[103] = 97;
+  fNPads[104] = 97;
+  fNPads[105] = 99;
+  fNPads[106] = 99;
+  fNPads[107] = 99;
+  fNPads[108] = 101;
+  fNPads[109] = 101;
+  fNPads[110] = 101;
+  fNPads[111] = 101;
+  fNPads[112] = 103;
+  fNPads[113] = 103;
+  fNPads[114] = 103;
+  fNPads[115] = 105;
+  fNPads[116] = 105;
+  fNPads[117] = 105;
+  fNPads[118] = 105;
+  fNPads[119] = 107;
+  fNPads[120] = 107;
+  fNPads[121] = 107;
+  fNPads[122] = 109;
+  fNPads[123] = 109;
+  fNPads[124] = 109;
+  fNPads[125] = 111;
+  fNPads[126] = 111;
+  fNPads[127] = 111;
+  fNPads[128] = 113;
+  fNPads[129] = 113;
+  fNPads[130] = 113;
+  fNPads[131] = 115;
+  fNPads[132] = 115;
+  fNPads[133] = 117;
+  fNPads[134] = 117;
+  fNPads[135] = 119;
+  fNPads[136] = 119;
+  fNPads[137] = 121;
+  fNPads[138] = 121;
+  fNPads[139] = 121;
+  fNPads[140] = 123;
+  fNPads[141] = 123;
+  fNPads[142] = 125;
+  fNPads[143] = 125;
+  fNPads[144] = 127;
+  fNPads[145] = 127;
+  fNPads[146] = 127;
+  fNPads[147] = 129;
+  fNPads[148] = 129;
+  fNPads[149] = 131;
+  fNPads[150] = 131;
+  fNPads[151] = 133;
+  fNPads[152] = 133;
+  fNPads[153] = 135;
+  fNPads[154] = 135;
+  fNPads[155] = 135;
+  fNPads[156] = 137;
+  fNPads[157] = 137;
+  fNPads[158] = 139;
+  fSlice2Sector[0][0] = 0;
+  fSlice2Sector[0][1] = 36;
+  fSlice2Sector[1][0] = 1;
+  fSlice2Sector[1][1] = 37;
+  fSlice2Sector[2][0] = 2;
+  fSlice2Sector[2][1] = 38;
+  fSlice2Sector[3][0] = 3;
+  fSlice2Sector[3][1] = 39;
+  fSlice2Sector[4][0] = 4;
+  fSlice2Sector[4][1] = 40;
+  fSlice2Sector[5][0] = 5;
+  fSlice2Sector[5][1] = 41;
+  fSlice2Sector[6][0] = 6;
+  fSlice2Sector[6][1] = 42;
+  fSlice2Sector[7][0] = 7;
+  fSlice2Sector[7][1] = 43;
+  fSlice2Sector[8][0] = 8;
+  fSlice2Sector[8][1] = 44;
+  fSlice2Sector[9][0] = 9;
+  fSlice2Sector[9][1] = 45;
+  fSlice2Sector[10][0] = 10;
+  fSlice2Sector[10][1] = 46;
+  fSlice2Sector[11][0] = 11;
+  fSlice2Sector[11][1] = 47;
+  fSlice2Sector[12][0] = 12;
+  fSlice2Sector[12][1] = 48;
+  fSlice2Sector[13][0] = 13;
+  fSlice2Sector[13][1] = 49;
+  fSlice2Sector[14][0] = 14;
+  fSlice2Sector[14][1] = 50;
+  fSlice2Sector[15][0] = 15;
+  fSlice2Sector[15][1] = 51;
+  fSlice2Sector[16][0] = 16;
+  fSlice2Sector[16][1] = 52;
+  fSlice2Sector[17][0] = 17;
+  fSlice2Sector[17][1] = 53;
+  fSlice2Sector[18][0] = 18;
+  fSlice2Sector[18][1] = 54;
+  fSlice2Sector[19][0] = 19;
+  fSlice2Sector[19][1] = 55;
+  fSlice2Sector[20][0] = 20;
+  fSlice2Sector[20][1] = 56;
+  fSlice2Sector[21][0] = 21;
+  fSlice2Sector[21][1] = 57;
+  fSlice2Sector[22][0] = 22;
+  fSlice2Sector[22][1] = 58;
+  fSlice2Sector[23][0] = 23;
+  fSlice2Sector[23][1] = 59;
+  fSlice2Sector[24][0] = 24;
+  fSlice2Sector[24][1] = 60;
+  fSlice2Sector[25][0] = 25;
+  fSlice2Sector[25][1] = 61;
+  fSlice2Sector[26][0] = 26;
+  fSlice2Sector[26][1] = 62;
+  fSlice2Sector[27][0] = 27;
+  fSlice2Sector[27][1] = 63;
+  fSlice2Sector[28][0] = 28;
+  fSlice2Sector[28][1] = 64;
+  fSlice2Sector[29][0] = 29;
+  fSlice2Sector[29][1] = 65;
+  fSlice2Sector[30][0] = 30;
+  fSlice2Sector[30][1] = 66;
+  fSlice2Sector[31][0] = 31;
+  fSlice2Sector[31][1] = 67;
+  fSlice2Sector[32][0] = 32;
+  fSlice2Sector[32][1] = 68;
+  fSlice2Sector[33][0] = 33;
+  fSlice2Sector[33][1] = 69;
+  fSlice2Sector[34][0] = 34;
+  fSlice2Sector[34][1] = 70;
+  fSlice2Sector[35][0] = 35;
+  fSlice2Sector[35][1] = 71;
+  fSector2Slice[0] = 0;
+  fSector2Slice[1] = 1;
+  fSector2Slice[2] = 2;
+  fSector2Slice[3] = 3;
+  fSector2Slice[4] = 4;
+  fSector2Slice[5] = 5;
+  fSector2Slice[6] = 6;
+  fSector2Slice[7] = 7;
+  fSector2Slice[8] = 8;
+  fSector2Slice[9] = 9;
+  fSector2Slice[10] = 10;
+  fSector2Slice[11] = 11;
+  fSector2Slice[12] = 12;
+  fSector2Slice[13] = 13;
+  fSector2Slice[14] = 14;
+  fSector2Slice[15] = 15;
+  fSector2Slice[16] = 16;
+  fSector2Slice[17] = 17;
+  fSector2Slice[18] = 18;
+  fSector2Slice[19] = 19;
+  fSector2Slice[20] = 20;
+  fSector2Slice[21] = 21;
+  fSector2Slice[22] = 22;
+  fSector2Slice[23] = 23;
+  fSector2Slice[24] = 24;
+  fSector2Slice[25] = 25;
+  fSector2Slice[26] = 26;
+  fSector2Slice[27] = 27;
+  fSector2Slice[28] = 28;
+  fSector2Slice[29] = 29;
+  fSector2Slice[30] = 30;
+  fSector2Slice[31] = 31;
+  fSector2Slice[32] = 32;
+  fSector2Slice[33] = 33;
+  fSector2Slice[34] = 34;
+  fSector2Slice[35] = 35;
+  fSector2Slice[36] = 0;
+  fSector2Slice[37] = 1;
+  fSector2Slice[38] = 2;
+  fSector2Slice[39] = 3;
+  fSector2Slice[40] = 4;
+  fSector2Slice[41] = 5;
+  fSector2Slice[42] = 6;
+  fSector2Slice[43] = 7;
+  fSector2Slice[44] = 8;
+  fSector2Slice[45] = 9;
+  fSector2Slice[46] = 10;
+  fSector2Slice[47] = 11;
+  fSector2Slice[48] = 12;
+  fSector2Slice[49] = 13;
+  fSector2Slice[50] = 14;
+  fSector2Slice[51] = 15;
+  fSector2Slice[52] = 16;
+  fSector2Slice[53] = 17;
+  fSector2Slice[54] = 18;
+  fSector2Slice[55] = 19;
+  fSector2Slice[56] = 20;
+  fSector2Slice[57] = 21;
+  fSector2Slice[58] = 22;
+  fSector2Slice[59] = 23;
+  fSector2Slice[60] = 24;
+  fSector2Slice[61] = 25;
+  fSector2Slice[62] = 26;
+  fSector2Slice[63] = 27;
+  fSector2Slice[64] = 28;
+  fSector2Slice[65] = 29;
+  fSector2Slice[66] = 30;
+  fSector2Slice[67] = 31;
+  fSector2Slice[68] = 32;
+  fSector2Slice[69] = 33;
+  fSector2Slice[70] = 34;
+  fSector2Slice[71] = 35;
+  fSectorLow[0] = 1;
+  fSectorLow[1] = 1;
+  fSectorLow[2] = 1;
+  fSectorLow[3] = 1;
+  fSectorLow[4] = 1;
+  fSectorLow[5] = 1;
+  fSectorLow[6] = 1;
+  fSectorLow[7] = 1;
+  fSectorLow[8] = 1;
+  fSectorLow[9] = 1;
+  fSectorLow[10] = 1;
+  fSectorLow[11] = 1;
+  fSectorLow[12] = 1;
+  fSectorLow[13] = 1;
+  fSectorLow[14] = 1;
+  fSectorLow[15] = 1;
+  fSectorLow[16] = 1;
+  fSectorLow[17] = 1;
+  fSectorLow[18] = 1;
+  fSectorLow[19] = 1;
+  fSectorLow[20] = 1;
+  fSectorLow[21] = 1;
+  fSectorLow[22] = 1;
+  fSectorLow[23] = 1;
+  fSectorLow[24] = 1;
+  fSectorLow[25] = 1;
+  fSectorLow[26] = 1;
+  fSectorLow[27] = 1;
+  fSectorLow[28] = 1;
+  fSectorLow[29] = 1;
+  fSectorLow[30] = 1;
+  fSectorLow[31] = 1;
+  fSectorLow[32] = 1;
+  fSectorLow[33] = 1;
+  fSectorLow[34] = 1;
+  fSectorLow[35] = 1;
+  fSectorLow[36] = 0;
+  fSectorLow[37] = 0;
+  fSectorLow[38] = 0;
+  fSectorLow[39] = 0;
+  fSectorLow[40] = 0;
+  fSectorLow[41] = 0;
+  fSectorLow[42] = 0;
+  fSectorLow[43] = 0;
+  fSectorLow[44] = 0;
+  fSectorLow[45] = 0;
+  fSectorLow[46] = 0;
+  fSectorLow[47] = 0;
+  fSectorLow[48] = 0;
+  fSectorLow[49] = 0;
+  fSectorLow[50] = 0;
+  fSectorLow[51] = 0;
+  fSectorLow[52] = 0;
+  fSectorLow[53] = 0;
+  fSectorLow[54] = 0;
+  fSectorLow[55] = 0;
+  fSectorLow[56] = 0;
+  fSectorLow[57] = 0;
+  fSectorLow[58] = 0;
+  fSectorLow[59] = 0;
+  fSectorLow[60] = 0;
+  fSectorLow[61] = 0;
+  fSectorLow[62] = 0;
+  fSectorLow[63] = 0;
+  fSectorLow[64] = 0;
+  fSectorLow[65] = 0;
+  fSectorLow[66] = 0;
+  fSectorLow[67] = 0;
+  fSectorLow[68] = 0;
+  fSectorLow[69] = 0;
+  fSectorLow[70] = 0;
+  fSectorLow[71] = 0;
+  fNRows[0] = 30;
+  fNRows[1] = 33;
+  fNRows[2] = 28;
+  fNRows[3] = 26;
+  fNRows[4] = 23;
+  fNRows[5] = 19;
+  fRows[0][0] = 0;
+  fRows[0][1] = 29;
+  fRows[1][0] = 30;
+  fRows[1][1] = 62;
+  fRows[2][0] = 63;
+  fRows[2][1] = 90;
+  fRows[3][0] = 91;
+  fRows[3][1] = 116;
+  fRows[4][0] = 117;
+  fRows[4][1] = 139;
+  fRows[5][0] = 140;
+  fRows[5][1] = 158;
+  fCos[0] = 0.9848077297;
+  fCos[1] = 0.8660253882;
+  fCos[2] = 0.6427876353;
+  fCos[3] = 0.3420201540;
+  fCos[4] = 0.0000000000;
+  fCos[5] = -0.3420201540;
+  fCos[6] = -0.6427876353;
+  fCos[7] = -0.8660253882;
+  fCos[8] = -0.9848077297;
+  fCos[9] = -0.9848077297;
+  fCos[10] = -0.8660253882;
+  fCos[11] = -0.6427876353;
+  fCos[12] = -0.3420201540;
+  fCos[13] = -0.0000000000;
+  fCos[14] = 0.3420201540;
+  fCos[15] = 0.6427876353;
+  fCos[16] = 0.8660253882;
+  fCos[17] = 0.9848077297;
+  fCos[18] = 0.9848077297;
+  fCos[19] = 0.8660253882;
+  fCos[20] = 0.6427876353;
+  fCos[21] = 0.3420201540;
+  fCos[22] = 0.0000000000;
+  fCos[23] = -0.3420201540;
+  fCos[24] = -0.6427876353;
+  fCos[25] = -0.8660253882;
+  fCos[26] = -0.9848077297;
+  fCos[27] = -0.9848077297;
+  fCos[28] = -0.8660253882;
+  fCos[29] = -0.6427876353;
+  fCos[30] = -0.3420201540;
+  fCos[31] = -0.0000000000;
+  fCos[32] = 0.3420201540;
+  fCos[33] = 0.6427876353;
+  fCos[34] = 0.8660253882;
+  fCos[35] = 0.9848077297;
+  fSin[0] = 0.1736481786;
+  fSin[1] = 0.5000000000;
+  fSin[2] = 0.7660444379;
+  fSin[3] = 0.9396926165;
+  fSin[4] = 1.0000000000;
+  fSin[5] = 0.9396926165;
+  fSin[6] = 0.7660444379;
+  fSin[7] = 0.5000000000;
+  fSin[8] = 0.1736481786;
+  fSin[9] = -0.1736481786;
+  fSin[10] = -0.5000000000;
+  fSin[11] = -0.7660444379;
+  fSin[12] = -0.9396926165;
+  fSin[13] = -1.0000000000;
+  fSin[14] = -0.9396926165;
+  fSin[15] = -0.7660444379;
+  fSin[16] = -0.5000000000;
+  fSin[17] = -0.1736481786;
+  fSin[18] = 0.1736481786;
+  fSin[19] = 0.5000000000;
+  fSin[20] = 0.7660444379;
+  fSin[21] = 0.9396926165;
+  fSin[22] = 1.0000000000;
+  fSin[23] = 0.9396926165;
+  fSin[24] = 0.7660444379;
+  fSin[25] = 0.5000000000;
+  fSin[26] = 0.1736481786;
+  fSin[27] = -0.1736481786;
+  fSin[28] = -0.5000000000;
+  fSin[29] = -0.7660444379;
+  fSin[30] = -0.9396926165;
+  fSin[31] = -1.0000000000;
+  fSin[32] = -0.9396926165;
+  fSin[33] = -0.7660444379;
+  fSin[34] = -0.5000000000;
+  fSin[35] = -0.1736481786;
+}
diff --git a/HLT/doc/l3transform-cosmic-022003.config b/HLT/doc/l3transform-cosmic-022003.config
new file mode 100644 (file)
index 0000000..7077a69
--- /dev/null
@@ -0,0 +1,658 @@
+void AliL3Transform::Init(){
+  fVersion = 100;
+  fBFieldFactor = 0.000;
+  fSolenoidBField = 2.000;
+  fNTimeBins = 999;
+  fNRowLow = 63;
+  fNRowUp = 96;
+  fNRowUp1 = 64;
+  fNRowUp2 = 32;
+  fNSectorLow = 36;
+  fNSectorUp = 36;
+  fNSector = 72;
+  fPadPitchWidthLow = 0.400;
+  fPadPitchWidthUp = 0.600;
+  fZWidth = 0.2503;
+  fZSigma = 0.2288;
+  fZLength = 250.0000;
+  fZOffset = 0.6864;
+  fDiffT = 0.0220;
+  fDiffL = 0.0220;
+  fOmegaTau = 0.1450;
+  fInnerPadLength = 0.750;
+  fOuter1PadLength = 1.000;
+  fOuter2PadLength = 1.500;
+  fInnerPRFSigma = 0.203811;
+  fOuter1PRFSigma = 0.299325;
+  fOuter2PRFSigma = 0.299323;
+  fTimeSigma = 0.228809;
+  fADCSat = 1024;
+  fZeroSup = 3;
+  fNSlice = 36;
+  fNRow = 159;
+  fNRotShift = 0.50;
+  fX[0] = 85.22;
+  fX[1] = 85.97;
+  fX[2] = 86.72;
+  fX[3] = 87.47;
+  fX[4] = 88.22;
+  fX[5] = 88.97;
+  fX[6] = 89.72;
+  fX[7] = 90.47;
+  fX[8] = 91.22;
+  fX[9] = 91.97;
+  fX[10] = 92.72;
+  fX[11] = 93.47;
+  fX[12] = 94.22;
+  fX[13] = 94.97;
+  fX[14] = 95.72;
+  fX[15] = 96.47;
+  fX[16] = 97.22;
+  fX[17] = 97.97;
+  fX[18] = 98.72;
+  fX[19] = 99.47;
+  fX[20] = 100.22;
+  fX[21] = 100.97;
+  fX[22] = 101.72;
+  fX[23] = 102.47;
+  fX[24] = 103.22;
+  fX[25] = 103.97;
+  fX[26] = 104.72;
+  fX[27] = 105.47;
+  fX[28] = 106.22;
+  fX[29] = 106.97;
+  fX[30] = 107.72;
+  fX[31] = 108.47;
+  fX[32] = 109.22;
+  fX[33] = 109.97;
+  fX[34] = 110.72;
+  fX[35] = 111.47;
+  fX[36] = 112.22;
+  fX[37] = 112.97;
+  fX[38] = 113.72;
+  fX[39] = 114.47;
+  fX[40] = 115.22;
+  fX[41] = 115.97;
+  fX[42] = 116.72;
+  fX[43] = 117.47;
+  fX[44] = 118.22;
+  fX[45] = 118.97;
+  fX[46] = 119.72;
+  fX[47] = 120.47;
+  fX[48] = 121.22;
+  fX[49] = 121.97;
+  fX[50] = 122.72;
+  fX[51] = 123.47;
+  fX[52] = 124.22;
+  fX[53] = 124.97;
+  fX[54] = 125.72;
+  fX[55] = 126.47;
+  fX[56] = 127.22;
+  fX[57] = 127.97;
+  fX[58] = 128.72;
+  fX[59] = 129.47;
+  fX[60] = 130.22;
+  fX[61] = 130.97;
+  fX[62] = 131.72;
+  fX[63] = 135.10;
+  fX[64] = 136.10;
+  fX[65] = 137.10;
+  fX[66] = 138.10;
+  fX[67] = 139.10;
+  fX[68] = 140.10;
+  fX[69] = 141.10;
+  fX[70] = 142.10;
+  fX[71] = 143.10;
+  fX[72] = 144.10;
+  fX[73] = 145.10;
+  fX[74] = 146.10;
+  fX[75] = 147.10;
+  fX[76] = 148.10;
+  fX[77] = 149.10;
+  fX[78] = 150.10;
+  fX[79] = 151.10;
+  fX[80] = 152.10;
+  fX[81] = 153.10;
+  fX[82] = 154.10;
+  fX[83] = 155.10;
+  fX[84] = 156.10;
+  fX[85] = 157.10;
+  fX[86] = 158.10;
+  fX[87] = 159.10;
+  fX[88] = 160.10;
+  fX[89] = 161.10;
+  fX[90] = 162.10;
+  fX[91] = 163.10;
+  fX[92] = 164.10;
+  fX[93] = 165.10;
+  fX[94] = 166.10;
+  fX[95] = 167.10;
+  fX[96] = 168.10;
+  fX[97] = 169.10;
+  fX[98] = 170.10;
+  fX[99] = 171.10;
+  fX[100] = 172.10;
+  fX[101] = 173.10;
+  fX[102] = 174.10;
+  fX[103] = 175.10;
+  fX[104] = 176.10;
+  fX[105] = 177.10;
+  fX[106] = 178.10;
+  fX[107] = 179.10;
+  fX[108] = 180.10;
+  fX[109] = 181.10;
+  fX[110] = 182.10;
+  fX[111] = 183.10;
+  fX[112] = 184.10;
+  fX[113] = 185.10;
+  fX[114] = 186.10;
+  fX[115] = 187.10;
+  fX[116] = 188.10;
+  fX[117] = 189.10;
+  fX[118] = 190.10;
+  fX[119] = 191.10;
+  fX[120] = 192.10;
+  fX[121] = 193.10;
+  fX[122] = 194.10;
+  fX[123] = 195.10;
+  fX[124] = 196.10;
+  fX[125] = 197.10;
+  fX[126] = 198.10;
+  fX[127] = 199.35;
+  fX[128] = 200.85;
+  fX[129] = 202.35;
+  fX[130] = 203.85;
+  fX[131] = 205.35;
+  fX[132] = 206.85;
+  fX[133] = 208.35;
+  fX[134] = 209.85;
+  fX[135] = 211.35;
+  fX[136] = 212.85;
+  fX[137] = 214.35;
+  fX[138] = 215.85;
+  fX[139] = 217.35;
+  fX[140] = 218.85;
+  fX[141] = 220.35;
+  fX[142] = 221.85;
+  fX[143] = 223.35;
+  fX[144] = 224.85;
+  fX[145] = 226.35;
+  fX[146] = 227.85;
+  fX[147] = 229.35;
+  fX[148] = 230.85;
+  fX[149] = 232.35;
+  fX[150] = 233.85;
+  fX[151] = 235.35;
+  fX[152] = 236.85;
+  fX[153] = 238.35;
+  fX[154] = 239.85;
+  fX[155] = 241.35;
+  fX[156] = 242.85;
+  fX[157] = 244.35;
+  fX[158] = 245.85;
+  fNPads[0] = 68;
+  fNPads[1] = 66;
+  fNPads[2] = 66;
+  fNPads[3] = 68;
+  fNPads[4] = 68;
+  fNPads[5] = 68;
+  fNPads[6] = 70;
+  fNPads[7] = 70;
+  fNPads[8] = 70;
+  fNPads[9] = 72;
+  fNPads[10] = 72;
+  fNPads[11] = 72;
+  fNPads[12] = 74;
+  fNPads[13] = 74;
+  fNPads[14] = 74;
+  fNPads[15] = 76;
+  fNPads[16] = 76;
+  fNPads[17] = 76;
+  fNPads[18] = 78;
+  fNPads[19] = 78;
+  fNPads[20] = 78;
+  fNPads[21] = 80;
+  fNPads[22] = 80;
+  fNPads[23] = 80;
+  fNPads[24] = 82;
+  fNPads[25] = 82;
+  fNPads[26] = 82;
+  fNPads[27] = 84;
+  fNPads[28] = 84;
+  fNPads[29] = 84;
+  fNPads[30] = 86;
+  fNPads[31] = 86;
+  fNPads[32] = 86;
+  fNPads[33] = 88;
+  fNPads[34] = 88;
+  fNPads[35] = 88;
+  fNPads[36] = 90;
+  fNPads[37] = 90;
+  fNPads[38] = 90;
+  fNPads[39] = 92;
+  fNPads[40] = 92;
+  fNPads[41] = 92;
+  fNPads[42] = 94;
+  fNPads[43] = 94;
+  fNPads[44] = 94;
+  fNPads[45] = 96;
+  fNPads[46] = 96;
+  fNPads[47] = 96;
+  fNPads[48] = 98;
+  fNPads[49] = 98;
+  fNPads[50] = 98;
+  fNPads[51] = 100;
+  fNPads[52] = 100;
+  fNPads[53] = 100;
+  fNPads[54] = 102;
+  fNPads[55] = 102;
+  fNPads[56] = 102;
+  fNPads[57] = 104;
+  fNPads[58] = 104;
+  fNPads[59] = 104;
+  fNPads[60] = 106;
+  fNPads[61] = 106;
+  fNPads[62] = 106;
+  fNPads[63] = 74;
+  fNPads[64] = 76;
+  fNPads[65] = 76;
+  fNPads[66] = 76;
+  fNPads[67] = 76;
+  fNPads[68] = 78;
+  fNPads[69] = 78;
+  fNPads[70] = 78;
+  fNPads[71] = 80;
+  fNPads[72] = 80;
+  fNPads[73] = 80;
+  fNPads[74] = 80;
+  fNPads[75] = 82;
+  fNPads[76] = 82;
+  fNPads[77] = 82;
+  fNPads[78] = 84;
+  fNPads[79] = 84;
+  fNPads[80] = 84;
+  fNPads[81] = 86;
+  fNPads[82] = 86;
+  fNPads[83] = 86;
+  fNPads[84] = 86;
+  fNPads[85] = 88;
+  fNPads[86] = 88;
+  fNPads[87] = 88;
+  fNPads[88] = 90;
+  fNPads[89] = 90;
+  fNPads[90] = 90;
+  fNPads[91] = 90;
+  fNPads[92] = 92;
+  fNPads[93] = 92;
+  fNPads[94] = 92;
+  fNPads[95] = 94;
+  fNPads[96] = 94;
+  fNPads[97] = 94;
+  fNPads[98] = 96;
+  fNPads[99] = 96;
+  fNPads[100] = 96;
+  fNPads[101] = 96;
+  fNPads[102] = 98;
+  fNPads[103] = 98;
+  fNPads[104] = 98;
+  fNPads[105] = 100;
+  fNPads[106] = 100;
+  fNPads[107] = 100;
+  fNPads[108] = 100;
+  fNPads[109] = 102;
+  fNPads[110] = 102;
+  fNPads[111] = 102;
+  fNPads[112] = 104;
+  fNPads[113] = 104;
+  fNPads[114] = 104;
+  fNPads[115] = 106;
+  fNPads[116] = 106;
+  fNPads[117] = 106;
+  fNPads[118] = 106;
+  fNPads[119] = 108;
+  fNPads[120] = 108;
+  fNPads[121] = 108;
+  fNPads[122] = 110;
+  fNPads[123] = 110;
+  fNPads[124] = 110;
+  fNPads[125] = 110;
+  fNPads[126] = 112;
+  fNPads[127] = 48;
+  fNPads[128] = 50;
+  fNPads[129] = 50;
+  fNPads[130] = 52;
+  fNPads[131] = 52;
+  fNPads[132] = 54;
+  fNPads[133] = 54;
+  fNPads[134] = 56;
+  fNPads[135] = 56;
+  fNPads[136] = 56;
+  fNPads[137] = 58;
+  fNPads[138] = 58;
+  fNPads[139] = 60;
+  fNPads[140] = 60;
+  fNPads[141] = 62;
+  fNPads[142] = 62;
+  fNPads[143] = 64;
+  fNPads[144] = 64;
+  fNPads[145] = 64;
+  fNPads[146] = 66;
+  fNPads[147] = 66;
+  fNPads[148] = 68;
+  fNPads[149] = 68;
+  fNPads[150] = 70;
+  fNPads[151] = 70;
+  fNPads[152] = 70;
+  fNPads[153] = 72;
+  fNPads[154] = 72;
+  fNPads[155] = 74;
+  fNPads[156] = 74;
+  fNPads[157] = 76;
+  fNPads[158] = 76;
+  fSlice2Sector[0][0] = 0;
+  fSlice2Sector[0][1] = 36;
+  fSlice2Sector[1][0] = 1;
+  fSlice2Sector[1][1] = 37;
+  fSlice2Sector[2][0] = 2;
+  fSlice2Sector[2][1] = 38;
+  fSlice2Sector[3][0] = 3;
+  fSlice2Sector[3][1] = 39;
+  fSlice2Sector[4][0] = 4;
+  fSlice2Sector[4][1] = 40;
+  fSlice2Sector[5][0] = 5;
+  fSlice2Sector[5][1] = 41;
+  fSlice2Sector[6][0] = 6;
+  fSlice2Sector[6][1] = 42;
+  fSlice2Sector[7][0] = 7;
+  fSlice2Sector[7][1] = 43;
+  fSlice2Sector[8][0] = 8;
+  fSlice2Sector[8][1] = 44;
+  fSlice2Sector[9][0] = 9;
+  fSlice2Sector[9][1] = 45;
+  fSlice2Sector[10][0] = 10;
+  fSlice2Sector[10][1] = 46;
+  fSlice2Sector[11][0] = 11;
+  fSlice2Sector[11][1] = 47;
+  fSlice2Sector[12][0] = 12;
+  fSlice2Sector[12][1] = 48;
+  fSlice2Sector[13][0] = 13;
+  fSlice2Sector[13][1] = 49;
+  fSlice2Sector[14][0] = 14;
+  fSlice2Sector[14][1] = 50;
+  fSlice2Sector[15][0] = 15;
+  fSlice2Sector[15][1] = 51;
+  fSlice2Sector[16][0] = 16;
+  fSlice2Sector[16][1] = 52;
+  fSlice2Sector[17][0] = 17;
+  fSlice2Sector[17][1] = 53;
+  fSlice2Sector[18][0] = 18;
+  fSlice2Sector[18][1] = 54;
+  fSlice2Sector[19][0] = 19;
+  fSlice2Sector[19][1] = 55;
+  fSlice2Sector[20][0] = 20;
+  fSlice2Sector[20][1] = 56;
+  fSlice2Sector[21][0] = 21;
+  fSlice2Sector[21][1] = 57;
+  fSlice2Sector[22][0] = 22;
+  fSlice2Sector[22][1] = 58;
+  fSlice2Sector[23][0] = 23;
+  fSlice2Sector[23][1] = 59;
+  fSlice2Sector[24][0] = 24;
+  fSlice2Sector[24][1] = 60;
+  fSlice2Sector[25][0] = 25;
+  fSlice2Sector[25][1] = 61;
+  fSlice2Sector[26][0] = 26;
+  fSlice2Sector[26][1] = 62;
+  fSlice2Sector[27][0] = 27;
+  fSlice2Sector[27][1] = 63;
+  fSlice2Sector[28][0] = 28;
+  fSlice2Sector[28][1] = 64;
+  fSlice2Sector[29][0] = 29;
+  fSlice2Sector[29][1] = 65;
+  fSlice2Sector[30][0] = 30;
+  fSlice2Sector[30][1] = 66;
+  fSlice2Sector[31][0] = 31;
+  fSlice2Sector[31][1] = 67;
+  fSlice2Sector[32][0] = 32;
+  fSlice2Sector[32][1] = 68;
+  fSlice2Sector[33][0] = 33;
+  fSlice2Sector[33][1] = 69;
+  fSlice2Sector[34][0] = 34;
+  fSlice2Sector[34][1] = 70;
+  fSlice2Sector[35][0] = 35;
+  fSlice2Sector[35][1] = 71;
+  fSector2Slice[0] = 0;
+  fSector2Slice[1] = 1;
+  fSector2Slice[2] = 2;
+  fSector2Slice[3] = 3;
+  fSector2Slice[4] = 4;
+  fSector2Slice[5] = 5;
+  fSector2Slice[6] = 6;
+  fSector2Slice[7] = 7;
+  fSector2Slice[8] = 8;
+  fSector2Slice[9] = 9;
+  fSector2Slice[10] = 10;
+  fSector2Slice[11] = 11;
+  fSector2Slice[12] = 12;
+  fSector2Slice[13] = 13;
+  fSector2Slice[14] = 14;
+  fSector2Slice[15] = 15;
+  fSector2Slice[16] = 16;
+  fSector2Slice[17] = 17;
+  fSector2Slice[18] = 18;
+  fSector2Slice[19] = 19;
+  fSector2Slice[20] = 20;
+  fSector2Slice[21] = 21;
+  fSector2Slice[22] = 22;
+  fSector2Slice[23] = 23;
+  fSector2Slice[24] = 24;
+  fSector2Slice[25] = 25;
+  fSector2Slice[26] = 26;
+  fSector2Slice[27] = 27;
+  fSector2Slice[28] = 28;
+  fSector2Slice[29] = 29;
+  fSector2Slice[30] = 30;
+  fSector2Slice[31] = 31;
+  fSector2Slice[32] = 32;
+  fSector2Slice[33] = 33;
+  fSector2Slice[34] = 34;
+  fSector2Slice[35] = 35;
+  fSector2Slice[36] = 0;
+  fSector2Slice[37] = 1;
+  fSector2Slice[38] = 2;
+  fSector2Slice[39] = 3;
+  fSector2Slice[40] = 4;
+  fSector2Slice[41] = 5;
+  fSector2Slice[42] = 6;
+  fSector2Slice[43] = 7;
+  fSector2Slice[44] = 8;
+  fSector2Slice[45] = 9;
+  fSector2Slice[46] = 10;
+  fSector2Slice[47] = 11;
+  fSector2Slice[48] = 12;
+  fSector2Slice[49] = 13;
+  fSector2Slice[50] = 14;
+  fSector2Slice[51] = 15;
+  fSector2Slice[52] = 16;
+  fSector2Slice[53] = 17;
+  fSector2Slice[54] = 18;
+  fSector2Slice[55] = 19;
+  fSector2Slice[56] = 20;
+  fSector2Slice[57] = 21;
+  fSector2Slice[58] = 22;
+  fSector2Slice[59] = 23;
+  fSector2Slice[60] = 24;
+  fSector2Slice[61] = 25;
+  fSector2Slice[62] = 26;
+  fSector2Slice[63] = 27;
+  fSector2Slice[64] = 28;
+  fSector2Slice[65] = 29;
+  fSector2Slice[66] = 30;
+  fSector2Slice[67] = 31;
+  fSector2Slice[68] = 32;
+  fSector2Slice[69] = 33;
+  fSector2Slice[70] = 34;
+  fSector2Slice[71] = 35;
+  fSectorLow[0] = 1;
+  fSectorLow[1] = 1;
+  fSectorLow[2] = 1;
+  fSectorLow[3] = 1;
+  fSectorLow[4] = 1;
+  fSectorLow[5] = 1;
+  fSectorLow[6] = 1;
+  fSectorLow[7] = 1;
+  fSectorLow[8] = 1;
+  fSectorLow[9] = 1;
+  fSectorLow[10] = 1;
+  fSectorLow[11] = 1;
+  fSectorLow[12] = 1;
+  fSectorLow[13] = 1;
+  fSectorLow[14] = 1;
+  fSectorLow[15] = 1;
+  fSectorLow[16] = 1;
+  fSectorLow[17] = 1;
+  fSectorLow[18] = 1;
+  fSectorLow[19] = 1;
+  fSectorLow[20] = 1;
+  fSectorLow[21] = 1;
+  fSectorLow[22] = 1;
+  fSectorLow[23] = 1;
+  fSectorLow[24] = 1;
+  fSectorLow[25] = 1;
+  fSectorLow[26] = 1;
+  fSectorLow[27] = 1;
+  fSectorLow[28] = 1;
+  fSectorLow[29] = 1;
+  fSectorLow[30] = 1;
+  fSectorLow[31] = 1;
+  fSectorLow[32] = 1;
+  fSectorLow[33] = 1;
+  fSectorLow[34] = 1;
+  fSectorLow[35] = 1;
+  fSectorLow[36] = 0;
+  fSectorLow[37] = 0;
+  fSectorLow[38] = 0;
+  fSectorLow[39] = 0;
+  fSectorLow[40] = 0;
+  fSectorLow[41] = 0;
+  fSectorLow[42] = 0;
+  fSectorLow[43] = 0;
+  fSectorLow[44] = 0;
+  fSectorLow[45] = 0;
+  fSectorLow[46] = 0;
+  fSectorLow[47] = 0;
+  fSectorLow[48] = 0;
+  fSectorLow[49] = 0;
+  fSectorLow[50] = 0;
+  fSectorLow[51] = 0;
+  fSectorLow[52] = 0;
+  fSectorLow[53] = 0;
+  fSectorLow[54] = 0;
+  fSectorLow[55] = 0;
+  fSectorLow[56] = 0;
+  fSectorLow[57] = 0;
+  fSectorLow[58] = 0;
+  fSectorLow[59] = 0;
+  fSectorLow[60] = 0;
+  fSectorLow[61] = 0;
+  fSectorLow[62] = 0;
+  fSectorLow[63] = 0;
+  fSectorLow[64] = 0;
+  fSectorLow[65] = 0;
+  fSectorLow[66] = 0;
+  fSectorLow[67] = 0;
+  fSectorLow[68] = 0;
+  fSectorLow[69] = 0;
+  fSectorLow[70] = 0;
+  fSectorLow[71] = 0;
+  fNRows[0] = 30;
+  fNRows[1] = 33;
+  fNRows[2] = 28;
+  fNRows[3] = 26;
+  fNRows[4] = 23;
+  fNRows[5] = 19;
+  fRows[0][0] = 0;
+  fRows[0][1] = 29;
+  fRows[1][0] = 30;
+  fRows[1][1] = 62;
+  fRows[2][0] = 63;
+  fRows[2][1] = 90;
+  fRows[3][0] = 91;
+  fRows[3][1] = 116;
+  fRows[4][0] = 117;
+  fRows[4][1] = 139;
+  fRows[5][0] = 140;
+  fRows[5][1] = 158;
+  fCos[0] = 0.9848077297;
+  fCos[1] = 0.8660253882;
+  fCos[2] = 0.6427876353;
+  fCos[3] = 0.3420201540;
+  fCos[4] = 0.0000000000;
+  fCos[5] = -0.3420201540;
+  fCos[6] = -0.6427876353;
+  fCos[7] = -0.8660253882;
+  fCos[8] = -0.9848077297;
+  fCos[9] = -0.9848077297;
+  fCos[10] = -0.8660253882;
+  fCos[11] = -0.6427876353;
+  fCos[12] = -0.3420201540;
+  fCos[13] = -0.0000000000;
+  fCos[14] = 0.3420201540;
+  fCos[15] = 0.6427876353;
+  fCos[16] = 0.8660253882;
+  fCos[17] = 0.9848077297;
+  fCos[18] = 0.9848077297;
+  fCos[19] = 0.8660253882;
+  fCos[20] = 0.6427876353;
+  fCos[21] = 0.3420201540;
+  fCos[22] = 0.0000000000;
+  fCos[23] = -0.3420201540;
+  fCos[24] = -0.6427876353;
+  fCos[25] = -0.8660253882;
+  fCos[26] = -0.9848077297;
+  fCos[27] = -0.9848077297;
+  fCos[28] = -0.8660253882;
+  fCos[29] = -0.6427876353;
+  fCos[30] = -0.3420201540;
+  fCos[31] = -0.0000000000;
+  fCos[32] = 0.3420201540;
+  fCos[33] = 0.6427876353;
+  fCos[34] = 0.8660253882;
+  fCos[35] = 0.9848077297;
+  fSin[0] = 0.1736481786;
+  fSin[1] = 0.5000000000;
+  fSin[2] = 0.7660444379;
+  fSin[3] = 0.9396926165;
+  fSin[4] = 1.0000000000;
+  fSin[5] = 0.9396926165;
+  fSin[6] = 0.7660444379;
+  fSin[7] = 0.5000000000;
+  fSin[8] = 0.1736481786;
+  fSin[9] = -0.1736481786;
+  fSin[10] = -0.5000000000;
+  fSin[11] = -0.7660444379;
+  fSin[12] = -0.9396926165;
+  fSin[13] = -1.0000000000;
+  fSin[14] = -0.9396926165;
+  fSin[15] = -0.7660444379;
+  fSin[16] = -0.5000000000;
+  fSin[17] = -0.1736481786;
+  fSin[18] = 0.1736481786;
+  fSin[19] = 0.5000000000;
+  fSin[20] = 0.7660444379;
+  fSin[21] = 0.9396926165;
+  fSin[22] = 1.0000000000;
+  fSin[23] = 0.9396926165;
+  fSin[24] = 0.7660444379;
+  fSin[25] = 0.5000000000;
+  fSin[26] = 0.1736481786;
+  fSin[27] = -0.1736481786;
+  fSin[28] = -0.5000000000;
+  fSin[29] = -0.7660444379;
+  fSin[30] = -0.9396926165;
+  fSin[31] = -1.0000000000;
+  fSin[32] = -0.9396926165;
+  fSin[33] = -0.7660444379;
+  fSin[34] = -0.5000000000;
+  fSin[35] = -0.1736481786;
+}
diff --git a/HLT/doc/taginfo b/HLT/doc/taginfo
new file mode 100644 (file)
index 0000000..df9cf15
--- /dev/null
@@ -0,0 +1,6 @@
+$Id$
+---------------------------
+v1-0: AliTransform changes
+v1-1: AliTransform changes because of  Cosmics
+v1-2: First real release to CERN (with AliRoot 3-09-Release)
+
index 287fb95..37a1660 100644 (file)
@@ -1,7 +1,7 @@
 // $Id$
 
 /**
-   Macro for converting AliRoot digits into L3 RawData. 
+   Macro for converting AliRoot digits into HLT RawData. 
    Binary creates for each patch its own file. 
    Singlepatch uses one file per slice (sp=kTRUE). 
    Use altro=kFALSE if you dont want to 
@@ -41,7 +41,6 @@ binary(Char_t* inpath,Char_t *outpath,Int_t first,Int_t last,Int_t event,Bool_t
   fFileHandler->CloseAliInput();
 }
 
 void singlepatch(Char_t* inpath,Char_t *outpath,Int_t first=0, Int_t last=0,Int_t event=0,Bool_t altro=kTRUE)
 {
    
diff --git a/HLT/exa/ddl2binary.C b/HLT/exa/ddl2binary.C
new file mode 100644 (file)
index 0000000..a7ae1b7
--- /dev/null
@@ -0,0 +1,47 @@
+// $Id$
+
+/**
+   Macro for converting DDL (digit) files into HLT RawData. 
+   In "inpath" expected are the ddl files (called Ev0TPCslice 
+   followed by number), the compressed HLT files will be
+   in "outpath", and can be used as the input to the tracker.
+   Singlepatch uses one file per slice (sp=kTRUE) (which 
+   is probably what we want if we run it on the GDCs)
+
+   Note: event is not used yet.
+*/
+
+
+ddl2binary(Char_t* inpath,Char_t *outpath,Int_t first=0,Int_t last=35,Bool_t sp=kTRUE,Int_t event=-1){
+
+  AliL3Transform::Init(inpath); //expect l3transform.config in "inpath"
+
+  Int_t patchfrom = 0;
+  Int_t patchend = 6;
+  if(sp){
+    patchfrom = -1;
+    patchend = 0;
+  }
+
+  Char_t name[256];
+  sprintf(name,"%s/Ev0TPCslice",inpath);
+
+  //create the file handler
+  AliL3DDLDataFileHandler *fFileHandler = new AliL3DDLDataFileHandler(); 
+  fFileHandler->SetReaderInput(name);
+
+  for(Int_t slice=first; slice<=last; slice++){
+    for(Int_t patch=patchfrom;patch<patchend;patch++){
+      cerr<<"reading slice: "<<slice<<" patch: "<<patch<<" and storing to: "<<outpath<<"/ddl_digits_"<<slice<<"_"<<patch<<".raw"<<endl;
+      fFileHandler->Init(slice,patch);      
+      sprintf(name,"%s/digits_%d_%d_%d.raw",outpath,event,slice,patch);
+      fFileHandler->SetBinaryOutput(name);
+      fFileHandler->DDLData2CompBinary(event);
+      fFileHandler->CloseBinaryOutput();
+      cerr<<" done"<<endl;
+    }      
+  }
+  fFileHandler->CloseReaderInput();
+
+  delete fFileHandler;
+}
index 117d416..075c0d7 100644 (file)
 
 void read(Char_t *path="./",Int_t min=0,Int_t max=35)
 {
-  AliL3Logger l;
-  //l.UnSet(AliL3Logger::kDebug);
-  //l.UnSet(AliL3Logger::kAll);
-  //l.Set(AliL3Logger::kInformational);
-  l.UseStderr();
-  //l.UseStream();
+  AliL3Transform::Init(path);
 
   for(Int_t slice=0; slice<35; slice++)
     {
@@ -63,20 +58,11 @@ void read(Char_t *path="./",Int_t min=0,Int_t max=35)
 
 void read_ali(Char_t *fname, Int_t sl=0, Int_t sh=35)
 {
-  AliL3Logger l;
-  //l.UnSet(AliL3Logger::kDebug);
-  //l.UnSet(AliL3Logger::kAll);
-  //l.Set(AliL3Logger::kInformational);
-  l.UseStderr();
-  //l.UseStream();
-
-#if 0
   //need galice file or alirunfile.root link
   if(AliL3Transform::Init(fname,kTRUE))
   {
     cout << "created temp init file!" << endl;
   }
-#endif
 
   AliL3FileHandler *fileHandler = new AliL3FileHandler();
 
@@ -106,13 +92,6 @@ void read_ali(Char_t *fname, Int_t sl=0, Int_t sh=35)
 
 void read_pp(Char_t *path="./",Int_t min=0,Int_t max=35,Int_t ev=0)
 {
-  AliL3Logger l;
-  //l.UnSet(AliL3Logger::kDebug);
-  //l.UnSet(AliL3Logger::kAll);
-  //l.Set(AliL3Logger::kInformational);
-  l.UseStderr();
-  //l.UseStream();
-
   AliL3Transform::Init(path);
 
   for(Int_t slice=min; slice<max; slice++)
@@ -157,13 +136,6 @@ void read_pp(Char_t *path="./",Int_t min=0,Int_t max=35,Int_t ev=0)
 
 void read_event_tree(Char_t *rootfile,Int_t startev=0)
 {
-  AliL3Logger l;
-  //l.UnSet(AliL3Logger::kDebug);
-  //l.UnSet(AliL3Logger::kAll);
-  //l.Set(AliL3Logger::kInformational);
-  //l.UseStderr();
-  l.UseStream();
-
   AliL3FileHandler *handler = new AliL3FileHandler();
   if(!handler->SetAliInput(rootfile)){
     cerr<<" Error opening file: "<<rootfile<<endl;
diff --git a/HLT/misc/AliL3DDLDataFileHandler.cxx b/HLT/misc/AliL3DDLDataFileHandler.cxx
new file mode 100644 (file)
index 0000000..26c224f
--- /dev/null
@@ -0,0 +1,285 @@
+// @(#) $Id$
+
+// Author: C. Loizides <loizides@ikf.uni-frankfurt.de>
+//*-- Copyright &copy ALICE HLT Group
+
+#include "AliL3StandardIncludes.h"
+
+#include "AliL3RootTypes.h"
+#include "AliL3Logging.h"
+#include "AliL3Transform.h"
+#include "AliL3MemHandler.h"
+#include "AliL3DigitData.h"
+#include "AliL3DDLTPCRawStream.h"
+#include "AliL3DDLRawReaderFile.h"
+
+#include "AliL3DDLDataFileHandler.h"
+
+#if GCCVERSION == 3
+using namespace std;
+#endif
+
+/** \class AliL3DDLDataFileHandler 
+<pre>
+//_____________________________________________________________
+// AliL3DDLDataFileHandler
+//
+//  This class does converts from the DDL format of offline
+//  into the memory I/O handling of the HLT binary files.
+//  
+//  Examples: see ddl2binary in exa and the general 
+//            AliL3MemHandler class description
+//
+</pre>
+*/
+
+ClassImp(AliL3DDLDataFileHandler)
+
+AliL3DDLDataFileHandler::AliL3DDLDataFileHandler()
+{
+  fReader=0;
+  fTPCStream=0;
+}
+
+AliL3DDLDataFileHandler::~AliL3DDLDataFileHandler()
+{
+  FreeAll();
+}
+
+void AliL3DDLDataFileHandler::FreeAll()
+{
+  if(fReader) delete fReader;
+  if(fTPCStream) delete fTPCStream;
+  fReader = 0;
+  fTPCStream = 0;
+}
+
+
+Bool_t AliL3DDLDataFileHandler::SetReaderInput(Char_t *name, Bool_t add)
+{
+  if(fReader){
+    LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::SetReaderInput","File Open")
+      <<"Reader ptr is already in use"<<ENDLOG;
+    return kFALSE;
+  }
+
+  fReader=new AliL3DDLRawReaderFile(name,add);
+  fTPCStream=new AliL3DDLTPCRawStream(fReader);
+
+  return kTRUE;
+}
+
+Bool_t AliL3DDLDataFileHandler::SetReaderInput(AliL3DDLRawReaderFile *rf)
+{
+  if(fReader){
+    LOG(AliL3Log::kError,"AliL3RawDataFileHandler::SetReaderInput","File Open")
+      <<"Reader ptr is already in use, delete it first"<<ENDLOG;
+    return kFALSE;
+  }
+
+  //Open the raw data file with given file.
+  fReader = rf;
+  fTPCStream=new AliL3DDLTPCRawStream(fReader);
+
+  return kTRUE;
+}
+
+void AliL3DDLDataFileHandler::CloseReaderInput()
+{
+  if(!fReader){
+    LOG(AliL3Log::kWarning,"AliL3RawDataFileHandler::CloseReaderInput","File Close")
+      <<"Nothing to Close"<<ENDLOG;
+    return;
+  }
+
+  delete fReader;
+  delete fTPCStream;
+  fReader = 0;
+  fTPCStream = 0;
+}
+
+AliL3DigitRowData * AliL3DDLDataFileHandler::DDLData2Memory(UInt_t &nrow,Int_t event)
+{                                           //event is not used
+  AliL3DigitRowData *data = 0;
+  nrow=0;
+
+  if(!fReader){
+    LOG(AliL3Log::kWarning,"AliL3DDLDataFileHandler::DDLData2Memory","File")
+    <<"No Input avalible: no object AliL3DDLRawReaderFile"<<ENDLOG;
+    return 0; 
+  }
+  
+  Int_t nrows=fRowMax-fRowMin+1;
+  Int_t ndigitcount=0;
+  Int_t ndigits[nrows];
+  UShort_t ***charges=new UShort_t**[nrows];
+  for(Int_t r=fRowMin;r<=fRowMax;r++){
+    Int_t lrow=r-fRowMin;
+    charges[lrow]=new UShort_t*[AliL3Transform::GetNPads(r)];
+    for(Int_t k=0;k<AliL3Transform::GetNPads(r);k++){
+      charges[lrow][k]=new UShort_t[AliL3Transform::GetNTimeBins()];
+      for(Int_t j=0;j<AliL3Transform::GetNTimeBins();j++) charges[lrow][k][j]=0;
+    }
+  }
+  
+  Int_t ddls_to_search=0;
+  Int_t ddls[9]={-1,-1,-1,-1,-1,-1,-1,-1,-1};
+  Int_t ddlid=-1,lddlid=-1;
+  for(Int_t r=fRowMin;r<=fRowMax;r++){
+    ndigits[r-fRowMin] = 0; //now digits on row
+
+    Int_t patch=AliL3Transform::GetPatch(r);
+    Int_t sector,row;
+    AliL3Transform::Slice2Sector(fSlice,r,sector,row);
+
+    if(sector<36) //taken from AliTPCBuffer160.cxx
+      ddlid=sector*2+patch;
+    else
+      ddlid=70+(sector-36)*4+patch;
+
+    if((lddlid!=ddlid-1)&&(r==30)){ //dont forget the split row on the last ddl
+      ddls[ddls_to_search++]=ddlid-1;  
+      lddlid=ddlid-1;
+    }
+    if((lddlid==-1)||(ddlid!=lddlid)){
+      ddls[ddls_to_search++]=ddlid;
+      lddlid=ddlid;
+    }
+    if((r==90)||(r==139)){ //dont forget the split row on the next ddl
+      ddls[ddls_to_search++]=ddlid+1;  
+      lddlid=ddlid+1;
+    }
+  }
+  //for(Int_t i=0;i<ddls_to_search;i++) cout << ddls[i] <<endl;
+
+  for(Int_t i=0;i<ddls_to_search;i++){
+    fTPCStream->SetDDLID(ddls[i]); //ddl to read out
+    while (fTPCStream->Next()){
+      UShort_t dig=fTPCStream->GetSignal();
+      if(dig <= AliL3Transform::GetZeroSup()) continue;
+      if(dig >= AliL3Transform::GetADCSat())
+       dig = AliL3Transform::GetADCSat();
+
+      Int_t time=fTPCStream->GetTime();
+      Int_t pad=fTPCStream->GetPad();
+      Int_t sector=fTPCStream->GetSector();
+      Int_t row=fTPCStream->GetRow();
+      Int_t slice,srow;
+
+      //test row criteria (patch boundaries)
+      AliL3Transform::Sector2Slice(slice,srow,sector,row);
+      if((srow<fRowMin)||(srow>fRowMax))continue;
+      if(slice!=fSlice){
+       LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Slice")
+         <<AliL3Log::kDec<<"Found slice "<<slice<<", expected "<<fSlice<<ENDLOG;
+       continue;
+      }
+
+      //cut out the inner cone
+      Float_t xyz[3];
+      AliL3Transform::Raw2Local(xyz,sector,row,pad,time);
+      if(AliL3Transform::Row2X(srow)<230./250.*fabs(xyz[2]))
+       continue; // why 230???
+
+      Int_t lrow=srow-fRowMin;
+      if((lrow<0)||lrow>=nrows){
+       LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Row")
+         <<AliL3Log::kDec<<"Row value out of bounds "<<lrow<<" "<<nrows<<ENDLOG;
+       continue;
+      }
+      if((pad<0)||(pad>=AliL3Transform::GetNPads(srow))){
+       LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Pad")
+         <<AliL3Log::kDec<<"Pad value out of bounds "<<pad<<" "
+         <<AliL3Transform::GetNPads(srow)<<ENDLOG;
+       continue;
+      }
+      if((time<0)||(time>=AliL3Transform::GetNTimeBins())){
+       LOG(AliL3Log::kError,"AliL3DDLDataFileHandler::DDLDigits2Memory","Time")
+         <<AliL3Log::kDec<<"Time out of bounds "<<time<<" "
+         <<AliL3Transform::GetNTimeBins()<<ENDLOG;
+       continue;
+      }
+
+      //store digit
+      ndigits[lrow]++; //for this row only
+      ndigitcount++;   //total number of digits to be published
+
+      charges[lrow][pad][time]=dig;
+    }
+  }
+  
+  Int_t size = sizeof(AliL3DigitData)*ndigitcount
+    + nrows*sizeof(AliL3DigitRowData);
+
+  LOG(AliL3Log::kDebug,"AliL3DDLDataFileHandler::DDLDigits2Memory","Digits")
+    <<AliL3Log::kDec<<"Found "<<ndigitcount<<" Digits"<<ENDLOG;
+  
+  data=(AliL3DigitRowData*) Allocate(size);
+  nrow = (UInt_t)nrows;
+  AliL3DigitRowData *tempPt = data;
+
+  for(Int_t r=fRowMin;r<=fRowMax;r++){
+    Int_t lrow=r-fRowMin;
+    tempPt->fRow = r;
+    tempPt->fNDigit = ndigits[lrow];
+  
+    Int_t localcount=0;
+    for(Int_t pad=0;pad<AliL3Transform::GetNPads(r);pad++){
+      for(Int_t time=0;time<AliL3Transform::GetNTimeBins();time++){
+       UShort_t dig=charges[lrow][pad][time];
+       if(!dig) continue;
+
+       if(localcount >= ndigits[lrow])
+         LOG(AliL3Log::kFatal,"AliL3DDLDataFileHandler::DDLDigits2Binary","Memory")
+           <<AliL3Log::kDec<<"Mismatch: localcount "<<localcount<<" ndigits "
+           <<ndigits[lrow]<<ENDLOG;
+       
+
+       tempPt->fDigitData[localcount].fCharge=dig;
+       tempPt->fDigitData[localcount].fPad=pad;
+       tempPt->fDigitData[localcount].fTime=time;
+#ifdef do_mc
+       tempPt->fDigitData[localcount].fTrackID[0] = 0;
+       tempPt->fDigitData[localcount].fTrackID[1] = 0;
+       tempPt->fDigitData[localcount].fTrackID[2] = 0;
+#endif
+       localcount++;
+      }
+    }
+
+    if(localcount != ndigits[lrow])
+      LOG(AliL3Log::kFatal,"AliL3DDLDataFileHandler::DDLDigits2Binary","Memory")
+       <<AliL3Log::kDec<<"Mismatch: localcount "<<localcount<<" ndigits "
+       <<ndigits[lrow]<<ENDLOG;
+
+
+    Byte_t *tmp = (Byte_t*)tempPt;
+    Int_t size = sizeof(AliL3DigitRowData)
+                                      + ndigits[lrow]*sizeof(AliL3DigitData);
+    tmp += size;
+    tempPt = (AliL3DigitRowData*)tmp;
+  }
+
+  //delete charge array
+  for(Int_t r=fRowMin;r<=fRowMax;r++){
+    Int_t lrow=r-fRowMin;
+    for(Int_t k=0;k<AliL3Transform::GetNPads(r);k++)
+       delete charges[lrow][k];
+    delete charges[lrow];
+  }
+  delete charges;
+
+  return data;
+}
+
+
+Bool_t AliL3DDLDataFileHandler::DDLData2CompBinary(Int_t event)
+{
+  Bool_t out = kTRUE;
+  UInt_t ndigits=0;
+  AliL3DigitRowData *digits=0;
+  digits = DDLData2Memory(ndigits,event);
+  out = Memory2CompBinary(ndigits,digits);
+  Free();
+  return out;
+}
diff --git a/HLT/misc/AliL3DDLDataFileHandler.h b/HLT/misc/AliL3DDLDataFileHandler.h
new file mode 100644 (file)
index 0000000..1744e39
--- /dev/null
@@ -0,0 +1,30 @@
+// @(#) $Id$
+
+#ifndef ALIL3DDLDATAFILEHANDLER_H
+#define ALIL3DDLDATAFILEHANDLER_H
+
+#include "AliL3DDLRawReaderFile.h"
+#include "AliL3DDLTPCRawStream.h"
+#include "AliL3MemHandler.h"
+
+class AliL3DDLDataFileHandler:public AliL3MemHandler{
+ private:
+  
+  AliL3DDLRawReaderFile *fReader;
+  AliL3DDLTPCRawStream *fTPCStream;
+
+ public:
+  Bool_t SetReaderInput(Char_t *name,Bool_t add=kTRUE);
+  Bool_t SetReaderInput(AliL3DDLRawReaderFile *rf);
+  void CloseReaderInput();
+
+  AliL3DDLDataFileHandler();
+  virtual ~AliL3DDLDataFileHandler();
+
+  void FreeAll(); //like AliL3MemHandler::Free() or AliL3FileHandler::FreeDigitsTree
+  AliL3DigitRowData* DDLData2Memory(UInt_t &nrow,Int_t event=-1);
+  Bool_t DDLData2CompBinary(Int_t event=-1);
+
+  ClassDef(AliL3DDLDataFileHandler,1)   //DDL Data Filehandler class
+};
+#endif
diff --git a/HLT/misc/AliL3DDLRawReader.cxx b/HLT/misc/AliL3DDLRawReader.cxx
new file mode 100644 (file)
index 0000000..0495f91
--- /dev/null
@@ -0,0 +1,149 @@
+// @(#) $Id$
+
+// Author: Constantin Loizides <mailto:loizides@ikf.uni-frankfurt.de>
+//*-- Copyright &copy ALICE HLT Group
+
+#include "AliL3RootTypes.h"
+#include "AliL3StandardIncludes.h"
+#include "AliL3Logging.h"
+
+#include "AliL3DDLRawReader.h"
+
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/** \class AliL3DDLRawReader
+<pre>
+//_____________________________________________________________
+// AliL3DDLRawReader (taken from the offline AliROOT code,
+// original authors: D.Favretto and A.K.Mohanty)
+//
+// This is the base class for reading ddl raw data 
+// and providing information about digits
+</pre>
+*/
+
+ClassImp(AliL3DDLRawReader)
+
+AliL3DDLRawReader::AliL3DDLRawReader()
+{
+  fMiniHeader = NULL;
+  fCount = 0;
+  fSelectDetectorID = -1;
+  fSelectMinDDLID = -1;
+  fSelectMaxDDLID = -1;
+}
+
+AliL3DDLRawReader::~AliL3DDLRawReader()
+{
+}
+
+void AliL3DDLRawReader::Select(Int_t detectorID, Int_t minDDLID, Int_t maxDDLID)
+{
+  // read only data of the detector with the given ID and in the given
+  // range of DDLs (minDDLID <= DDLID < maxDDLID).
+  // no selection is applied if a value < 0 is used.
+
+  fSelectDetectorID = detectorID;
+  fSelectMinDDLID = minDDLID;
+  fSelectMaxDDLID = maxDDLID;
+}
+
+Bool_t AliL3DDLRawReader::IsSelected()
+{
+  // apply the selection (if any)
+
+  if (fSelectDetectorID >= 0) {
+    if (fMiniHeader->fDetectorID != fSelectDetectorID) return kFALSE;
+    if ((fSelectMinDDLID >= 0) && (fMiniHeader->fDDLID < fSelectMinDDLID))
+      return kFALSE;
+    if ((fSelectMaxDDLID >= 0) && (fMiniHeader->fDDLID >= fSelectMaxDDLID))
+      return kFALSE;
+  }
+  return kTRUE;
+}
+
+Bool_t AliL3DDLRawReader::CheckMiniHeader()
+{
+  // check the magic number of the mini header
+
+  if ((fMiniHeader->fMagicWord[2] != 0x12) ||
+      (fMiniHeader->fMagicWord[1] != 0x34) ||
+      (fMiniHeader->fMagicWord[0] != 0x56)) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReader::CheckMiniHeader","MH")
+      <<"DDL mini header has wrong magic word!"<<ENDLOG;
+    return kFALSE;
+  }
+  return kTRUE;
+}
+
+Bool_t AliL3DDLRawReader::ReadNextInt(UInt_t& data)
+{
+  // reads the next 4 bytes at the current position
+  // returns kFALSE if the data could not be read
+
+  while (fCount == 0) {
+    if (!ReadMiniHeader()) return kFALSE;
+  }
+  if (fCount < (Int_t) sizeof(data)) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReader::ReadNextInt","Data")
+      <<AliL3Log::kDec<<"Too few data left ("<<fCount<<") to read UInt_t!"<<ENDLOG;
+    return kFALSE;
+  }
+  if (!ReadNext((UChar_t*) &data, sizeof(data))) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReader::ReadNextInt","Data")
+      <<"Could not read data."<<ENDLOG;
+    return kFALSE;
+  }
+  return kTRUE;
+}
+
+Bool_t AliL3DDLRawReader::ReadNextShort(UShort_t& data)
+{
+  // reads the next 2 bytes at the current position
+  // returns kFALSE if the data could not be read
+
+  while (fCount == 0) {
+    if (!ReadMiniHeader()) return kFALSE;
+  }
+  if (fCount < (Int_t) sizeof(data)) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReader::ReadNextShort","Data")
+      <<AliL3Log::kDec<<"Too few data left ("<<fCount<<") to read UShort_t!"<<ENDLOG;
+    return kFALSE;
+  }
+  if (!ReadNext((UChar_t*) &data, sizeof(data))) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReader::ReadNextShort","Data")
+      <<"Could not read data."<<ENDLOG;
+    return kFALSE;
+  }
+  return kTRUE;
+}
+
+Bool_t AliL3DDLRawReader::ReadNextChar(UChar_t& data)
+{
+  // reads the next 1 byte at the current stream position
+  // returns kFALSE if the data could not be read
+
+  while (fCount == 0) {
+    if (!ReadMiniHeader()) return kFALSE;
+  }
+  if (!ReadNext((UChar_t*) &data, sizeof(data))) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReader::ReadNextChar","Data")
+      <<"Could not read data."<<ENDLOG;
+    return kFALSE;
+  }
+  return kTRUE;
+}
+
diff --git a/HLT/misc/AliL3DDLRawReader.h b/HLT/misc/AliL3DDLRawReader.h
new file mode 100644 (file)
index 0000000..efc224d
--- /dev/null
@@ -0,0 +1,56 @@
+// @(#) $Id$
+
+#ifndef ALIL3DDLRAWREADER_H
+#define ALIL3DDLRAWREADER_H
+
+// see description in upcoming ALICE note
+// by D.Favretto and A.K.Mohanty
+struct AliL3DDLMiniHeader 
+{
+  UInt_t    fSize;
+  UChar_t   fDetectorID;
+  UChar_t   fMagicWord[3];
+  UChar_t   fVersion;
+  UChar_t   fCompressionFlag;
+  UShort_t  fDDLID;
+};
+
+class AliL3DDLRawReader 
+{
+  public :
+    AliL3DDLRawReader();
+    virtual ~AliL3DDLRawReader();
+
+    void Select(Int_t detectorID, Int_t minDDLID = -1, Int_t maxDDLID = -1);
+
+    inline Int_t     GetDataSize()   const {return fMiniHeader->fSize;};
+    inline Int_t     GetDetectorID() const {return fMiniHeader->fDetectorID;};
+    inline Int_t     GetDDLID()      const {return fMiniHeader->fDDLID;};
+    inline Int_t     GetVersion()    const {return fMiniHeader->fVersion;};
+    inline Bool_t    IsCompressed()  const {return fMiniHeader->fCompressionFlag != 0;};
+
+    virtual Bool_t   ReadMiniHeader() = 0;
+    virtual Bool_t   ReadNextData(UChar_t*& data) = 0;
+    virtual Bool_t   ReadNextInt(UInt_t& data);
+    virtual Bool_t   ReadNextShort(UShort_t& data);
+    virtual Bool_t   ReadNextChar(UChar_t& data);
+
+    virtual Bool_t   Reset() = 0;
+
+  protected :
+    Bool_t           IsSelected();
+
+    Bool_t           CheckMiniHeader();
+    virtual Bool_t   ReadNext(UChar_t* data, Int_t size) = 0;
+
+    AliL3DDLMiniHeader*  fMiniHeader;  // current mini header
+    Int_t                fCount;       // counter of bytes to be read for current DDL
+
+    Int_t            fSelectDetectorID;  // id of selected detector (<0 = no selection)
+    Int_t            fSelectMinDDLID;    // minimal index of selected DDLs (<0 = no selection)
+    Int_t            fSelectMaxDDLID;    // maximal index of selected DDLs (<0 = no selection)
+
+    ClassDef(AliL3DDLRawReader,1) //AliL3DDLRawReader
+};
+
+#endif
diff --git a/HLT/misc/AliL3DDLRawReaderFile.cxx b/HLT/misc/AliL3DDLRawReaderFile.cxx
new file mode 100644 (file)
index 0000000..50f4167
--- /dev/null
@@ -0,0 +1,180 @@
+// @(#) $Id$
+
+// Author: Constantin Loizides <mailto:loizides@ikf.uni-frankfurt.de>
+//*-- Copyright &copy ALICE HLT Group
+
+#include "AliL3RootTypes.h"
+#include "AliL3StandardIncludes.h"
+#include "AliL3Logging.h"
+
+#include "AliL3DDLRawReaderFile.h"
+
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/** \class AliL3DDLRawReaderFile
+<pre>
+//_____________________________________________________________
+// AliL3DDLRawReaderFile (taken from the offline AliROOT code,
+// original authors: D.Favretto and A.K.Mohanty)
+//
+// This is the base class for reading ddl raw data 
+// and providing information about digits
+</pre>
+*/
+
+
+ClassImp(AliL3DDLRawReaderFile)
+
+
+AliL3DDLRawReaderFile::AliL3DDLRawReaderFile(const Char_t* name, Bool_t addnum)
+{
+  // create an object to read digits from the given input file(s)
+  // if addNumber is true, a number starting at 1 is appended to the file name
+
+  fFileName = new Char_t[1024];
+  strcpy(fFileName,name);
+  if (!addnum) {
+    fFileNumber = -1;
+    fStream = new fstream(fFileName, ios::binary|ios::in);
+  } else {
+    fFileNumber = 0;
+    fStream = NULL;
+    OpenNextFile();
+  }
+  fMiniHeader = new AliL3DDLMiniHeader;
+  fBuffer = NULL;
+  fBufferSize = 0;
+}
+
+AliL3DDLRawReaderFile::~AliL3DDLRawReaderFile()
+{
+  // close the input file
+  if(fFileName) delete fFileName;
+
+  if (fStream) {
+    if (fStream->is_open()) fStream->close();
+    delete fStream;
+  }
+  delete fMiniHeader;
+  if (fBuffer) delete[] fBuffer;
+}
+
+Bool_t AliL3DDLRawReaderFile::OpenNextFile()
+{
+  if (fStream) {
+    if (fStream->is_open()) fStream->close();
+    delete fStream;
+    fStream = NULL;
+  }
+  if (fFileNumber < 0) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReaderFile::OpenNextFile","File")
+      <<"Could not open file, file number is negative."<<ENDLOG;
+    return kFALSE;
+  }
+
+  fFileNumber++;
+  Char_t fileName[1024];
+  sprintf(fileName, "%s%d", fFileName, fFileNumber);
+
+  fStream = new fstream(fileName, ios::binary|ios::in);
+  return (fStream->is_open());
+}
+
+Bool_t AliL3DDLRawReaderFile::ReadMiniHeader()
+{
+  // read a mini header at the current stream position
+  // returns kFALSE if the mini header could not be read
+
+  if (!fStream) return kFALSE;
+  do {
+    if (fCount > 0) fStream->seekg(Int_t(fStream->tellg()) + fCount);
+    while (!fStream->read((Char_t*) fMiniHeader, sizeof(AliL3DDLMiniHeader))) {
+      if (!OpenNextFile()) return kFALSE;
+    }
+    //cout << fMiniHeader->fSize << " " << fMiniHeader->fDetectorID << " " << fMiniHeader->fVersion << " " << fMiniHeader->fCompressionFlag << " " << fMiniHeader->fDDLID << endl;
+    //cout << "loop here " << (Int_t)fMiniHeader->fDDLID<< endl;
+    CheckMiniHeader();
+    fCount = fMiniHeader->fSize;
+  } while (!IsSelected());
+  return kTRUE;
+}
+
+Bool_t AliL3DDLRawReaderFile::ReadNextData(UChar_t*& data)
+{
+  // reads the next payload at the current stream position
+  // returns kFALSE if the data could not be read
+
+  while (fCount == 0) {
+    if (!ReadMiniHeader()) return kFALSE;
+  }
+  if (fBufferSize < fCount) {
+    if (fBuffer) delete[] fBuffer;
+    fBufferSize = Int_t(fCount*1.2);
+    fBuffer = new UChar_t[fBufferSize];
+  }
+  if (!fStream->read((Char_t*) fBuffer, fCount)) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReaderFile::ReadNextData","Data")
+      <<"Could not read next data!"<<ENDLOG;
+    return kFALSE;
+  }
+  fCount = 0;
+
+  data = fBuffer;
+  return kTRUE;
+}
+
+Bool_t AliL3DDLRawReaderFile::ReadNext(UChar_t* data, Int_t size)
+{
+  // reads the next block of data at the current stream position
+  // returns kFALSE if the data could not be read
+
+  if (!fStream->read((Char_t*) data, size)) {
+    LOG(AliL3Log::kError,"AliL3DDLRawReaderFile::ReadNext","Data")
+      <<"Could not read next data!"<<ENDLOG;
+    return kFALSE;
+  }
+  fCount -= size;
+  return kTRUE;
+}
+
+Bool_t AliL3DDLRawReaderFile::Reset()
+{
+  // reset the current stream position to the beginning of the file
+
+  if ((fFileNumber > 0) && fStream) {
+    if (fStream->is_open()) fStream->close();
+    delete fStream;
+    fStream = NULL;
+    fFileNumber = 0;
+  }
+
+  if (!fStream) {
+    if (fFileNumber < 0) {
+      fStream = new fstream(fFileName, ios::binary|ios::in);
+    } else {
+      if (!OpenNextFile()){
+       LOG(AliL3Log::kError,"AliL3DDLRawReaderFile::Reset","Data")
+         <<"Could not reset data stream!"<<ENDLOG;
+       return kFALSE;
+      }
+    }
+  }
+
+  if (!fStream || !fStream->rdbuf()->is_open()) return kFALSE;
+  fStream->seekg(0);
+  fCount = 0;
+  return kTRUE;
+}
diff --git a/HLT/misc/AliL3DDLRawReaderFile.h b/HLT/misc/AliL3DDLRawReaderFile.h
new file mode 100644 (file)
index 0000000..525e270
--- /dev/null
@@ -0,0 +1,33 @@
+// @(#) $Id$
+
+#ifndef ALIL3DDLRAWREADERFILE_H
+#define ALIL3DDLRAWREADERFILE_H
+
+#include "AliL3DDLRawReader.h"
+
+class AliL3DDLRawReaderFile: public AliL3DDLRawReader 
+{
+  public :
+    AliL3DDLRawReaderFile(const Char_t* name, Bool_t addnum = kTRUE);
+    virtual ~AliL3DDLRawReaderFile();
+
+    virtual Bool_t   ReadMiniHeader();
+    virtual Bool_t   ReadNextData(UChar_t*& data);
+
+    virtual Bool_t   Reset();
+
+  protected :
+    Bool_t           OpenNextFile();
+
+    virtual Bool_t   ReadNext(UChar_t* data, Int_t size);
+
+    Char_t*          fFileName;    //! name of input files
+    Int_t            fFileNumber;  //  number of current input file
+    fstream*         fStream;      //! stream of raw digits
+    UChar_t*         fBuffer;      //!  buffer for payload
+    Int_t            fBufferSize;  //  size of fBuffer in bytes
+
+    ClassDef(AliL3DDLRawReaderFile, 1) //AliL3DDLRawReaderFile
+};
+
+#endif
diff --git a/HLT/misc/AliL3DDLTPCRawStream.cxx b/HLT/misc/AliL3DDLTPCRawStream.cxx
new file mode 100644 (file)
index 0000000..6ce0777
--- /dev/null
@@ -0,0 +1,192 @@
+// @(#) $Id$
+
+// Author: Constantin Loizides <mailto:loizides@ikf.uni-frankfurt.de>
+//*-- Copyright &copy ALICE HLT Group
+
+#include "AliL3RootTypes.h"
+#include "AliL3StandardIncludes.h"
+#include "AliL3Logging.h"
+#include "AliL3DDLRawReader.h"
+
+#include "AliL3DDLTPCRawStream.h"
+//#include "AliTPCHuffman.h"
+
+
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+/** \class AliL3DDLTPCRawReaderStream
+<pre>
+//_____________________________________________________________
+// AliL3DDLTPCRawReaderStream (taken from the offline AliROOT code,
+// original authors: D.Favretto and A.K.Mohanty)
+//
+// This is a base class for reading TPC raw data 
+// and providing information about digits
+</pre>
+*/
+
+ClassImp(AliL3DDLTPCRawStream)
+
+AliL3DDLTPCRawStream::AliL3DDLTPCRawStream(AliL3DDLRawReader* rawReader)
+{
+  // create an object to read TPC raw digits
+
+  fRawReader = rawReader;
+  fRawReader->Select(0);
+  fData = new UShort_t[fkDataMax];
+  fDataSize = fPosition = 0;
+  fCount = fBunchLength = 0;
+
+  fSector = fPrevSector = fRow = -1;
+  fPrevRow = fPad = fPrevPad = -1;
+  fTime = fSignal = -1;
+}
+
+AliL3DDLTPCRawStream::~AliL3DDLTPCRawStream()
+{
+  // clean up
+  delete[] fData;
+}
+
+Bool_t AliL3DDLTPCRawStream::SetDDLID(Int_t d)
+{
+  if((d<0)||(d>216)){
+    LOG(AliL3Log::kFatal,"AliL3DDLTPCRawStream::SetDDLID","DDL")
+      <<AliL3Log::kDec<<"DDL number out of range "<<d<<ENDLOG;
+    return kFALSE;
+  }
+
+  //partial clean
+  fDataSize = fPosition = 0;
+  fCount = fBunchLength = 0;
+
+  fSector = fPrevSector = fRow = fPrevRow = fPad = fPrevPad = fTime = fSignal = -1;
+
+  fRawReader->Reset();
+  fRawReader->Select(0,d,d+1);
+       
+  return kTRUE;
+}
+
+Bool_t AliL3DDLTPCRawStream::Next()
+{
+  // read the next raw digit
+  // returns kFALSE if there is no digit left
+
+  fPrevSector = fSector;
+  fPrevRow = fRow;
+  fPrevPad = fPad;
+
+  while (fCount == 0) {  // next trailer
+    if (fPosition >= fDataSize) {  // next payload
+      UChar_t* data;
+      do {
+       if (!fRawReader->ReadNextData(data)) return kFALSE;
+      } while (fRawReader->GetDataSize() == 0);
+
+      if (fRawReader->IsCompressed()) {  // compressed data
+       LOG(AliL3Log::kFatal,"AliL3DDLTPCRawStream::Next","Compression")
+      <<"Compression is not implemented (yet)!"<<ENDLOG;
+       return kFALSE;
+      } else {                           // uncompressed data
+       fDataSize = 0;
+       Int_t pos = (fRawReader->GetDataSize() * 8) / 10;
+       while (Get10BitWord(data, pos-1) == 0x2AA) pos--;
+       while (pos > 0) {
+         for (Int_t i = 0; i < 4; i++) {  // copy trailer
+           fData[fDataSize++] = Get10BitWord(data, pos-4+i);
+         }
+         pos -= 4;
+         Int_t count = fData[fDataSize-4];
+         pos -= (4 - (count % 4)) % 4;  // skip fill words
+
+         while (count > 0) {
+           UShort_t bunchLength = Get10BitWord(data, pos-1);
+           fData[fDataSize++] = bunchLength;
+           fData[fDataSize++] = Get10BitWord(data, pos-2);  // time bin
+
+           // copy signal amplitudes in increasing order on time
+           for (Int_t i = 0; i < bunchLength-2; i++) {
+             fData[fDataSize++] = Get10BitWord(data, pos - bunchLength + i);
+           }
+           pos -= bunchLength;
+           count -= bunchLength;
+         }
+       }
+      }
+
+      fPosition = 0;
+    }
+    if (fPosition + 4 >= fDataSize) {
+      LOG(AliL3Log::kError,"AliL3DDLTPCRawStream::Next","Data")
+      <<"Could not read trailer"<<ENDLOG;
+      return kFALSE;
+    }
+    fCount = fData[fPosition++];
+    fPad = fData[fPosition++];
+    fRow = fData[fPosition++];
+    fSector = fData[fPosition++];
+    fBunchLength = 0;
+  }
+
+  if (fBunchLength == 0) {
+    if (fPosition >= fDataSize) {
+      LOG(AliL3Log::kError,"AliL3DDLTPCRawStream::Next","Data")
+      <<"Could not read bunch length"<<ENDLOG;
+      return kFALSE;
+    }
+    fBunchLength = fData[fPosition++] - 2;
+    fCount--;
+
+    if (fPosition >= fDataSize) {
+      LOG(AliL3Log::kError,"AliL3DDLTPCRawStream::Next","Data")
+      <<"Could not read time bin"<<ENDLOG;
+      return kFALSE;
+    }
+    fTime = fData[fPosition++] - fBunchLength;
+    fCount--;
+  }
+
+  fTime++;
+  if (fPosition >= fDataSize) {
+    LOG(AliL3Log::kError,"AliL3DDLTPCRawStream::Next","Data")
+      <<"Could not read sample amplitude"<<ENDLOG;
+    return kFALSE;
+  }
+
+  fSignal = fData[fPosition++] + fkOffset;
+  fCount--;
+  fBunchLength--;
+
+  return kTRUE;
+}
+
+UShort_t AliL3DDLTPCRawStream::Get10BitWord(UChar_t* buffer, Int_t position)
+{
+  // return a word in a 10 bit array as an UShort_t
+  Int_t iBit = position * 10;
+  Int_t iByte = iBit / 8;
+  Int_t shift = iBit % 8;
+
+  // recalculate the byte numbers and the shift because
+  // the raw data is written as integers where the high bits are filled first
+  // -> little endian is assumed here !
+  Int_t iByteHigh = 4 * (iByte / 4) + 3 - (iByte % 4);
+  iByte++;
+  Int_t iByteLow  = 4 * (iByte / 4) + 3 - (iByte % 4);
+  shift = 6 - shift;
+  return ((buffer[iByteHigh] * 256 + buffer[iByteLow]) >> shift) & 0x03FF;
+}
diff --git a/HLT/misc/AliL3DDLTPCRawStream.h b/HLT/misc/AliL3DDLTPCRawStream.h
new file mode 100644 (file)
index 0000000..5566a43
--- /dev/null
@@ -0,0 +1,55 @@
+// @(#) $Id$
+
+#ifndef ALIL3DDLTPCRAWSTREAM_H
+#define ALIL3DDLTPCRAWSTREAM_H
+
+class AliL3DDLRawReader;
+
+class AliL3DDLTPCRawStream 
+{
+  public :
+    AliL3DDLTPCRawStream(AliL3DDLRawReader* rawReader);
+    virtual ~AliL3DDLTPCRawStream();
+
+    virtual Bool_t   Next();
+    Bool_t SetDDLID(Int_t d); //choose ddlid to readout
+
+    inline Int_t     GetSector() const {return fSector;};
+    inline Int_t     GetPrevSector() const {return fPrevSector;};
+    inline Bool_t    IsNewSector() const {return fSector != fPrevSector;};
+    inline Int_t     GetRow() const {return fRow;};
+    inline Int_t     GetPrevRow() const {return fPrevRow;};
+    inline Bool_t    IsNewRow() const {return (fRow != fPrevRow) || IsNewSector();};
+    inline Int_t     GetPad() const {return fPad;};
+    inline Int_t     GetPrevPad() const {return fPrevPad;};
+    inline Bool_t    IsNewPad() const {return (fPad != fPrevPad) || IsNewRow();};
+    inline Int_t     GetTime() const {return fTime;};
+    inline Int_t     GetSignal() const {return fSignal;};
+
+  protected :
+    UShort_t         Get10BitWord(UChar_t* buffer, Int_t position);
+
+    static const Int_t fkOffset  = 1;         // offset of signal
+    static const Int_t fkDataMax = 10000000;  // size of array for uncompressed raw data
+
+    AliL3DDLRawReader* fRawReader;  // object for reading the raw data
+
+    UShort_t*        fData;         //[fkDataMax] uncompressed raw data
+    Int_t            fDataSize;     // actual size of the uncompressed raw data
+    Int_t            fPosition;     // current position in fData
+    Int_t            fCount;        // counter of words to be read for current trailer
+    Int_t            fBunchLength;  // remaining number of signal bins in the current bunch
+
+    Int_t            fSector;       // index of current sector
+    Int_t            fPrevSector;   // index of previous sector
+    Int_t            fRow;          // index of current row
+    Int_t            fPrevRow;      // index of previous row
+    Int_t            fPad;          // index of current pad
+    Int_t            fPrevPad;      // index of previous pad
+    Int_t            fTime;         // index of current time bin
+    Int_t            fSignal;       // signal in ADC counts
+
+    ClassDef(AliL3DDLTPCRawStream, 1) // AliL3DDLTPCRawStream
+};
+
+#endif
index c972912..998943a 100644 (file)
 #pragma link C++ class AliL3DataHandler;
 #pragma link C++ class AliL3VHDLClusterFinder;
 #pragma link C++ class AliL3TPCMapping;
+#pragma link C++ class AliL3DDLRawReader;
+#pragma link C++ class AliL3DDLRawReaderFile;
+#pragma link C++ class AliL3DDLTPCRawStream;
+#pragma link C++ class AliL3DDLDataFileHandler;
 
 #ifdef USEFFLOAT
 #pragma link C++ class AliL3FFloat;
index 3721732..80fc352 100644 (file)
 using namespace std;
 #endif
 
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ *                                                                        *
+ * Author: The ALICE Off-line Project.                                    *
+ * Contributors are mentioned in the code where appropriate.              *
+ *                                                                        *
+ * Permission to use, copy, modify and distribute this software and its   *
+ * documentation strictly for non-commercial purposes is hereby granted   *
+ * without fee, provided that the above copyright notice appears in all   *
+ * copies and that both the copyright notice and this permission notice   *
+ * appear in the supporting documentation. The authors make no claims     *
+ * about the suitability of this software for any purpose. It is          *
+ * provided "as is" without express or implied warranty.                  *
+ **************************************************************************/
+
+
 /** \class AliL3Transbit
 <pre>
 //_____________________________________________________________
index 9c4b5c9..68364a4 100644 (file)
@@ -16,6 +16,7 @@ include $(ALIHLT_TOPDIR)/Makefile.conf
 
 SRCS   = AliL3TransBit.cxx AliL3AltroMemHandler.cxx AliL3DataHandler.cxx \
           AliL3VHDLClusterFinder.cxx AliL3TPCMapping.cxx \
-          AliL3FFloat.cxx AliL3Stopwatch.cxx
+          AliL3FFloat.cxx AliL3Stopwatch.cxx AliL3DDLRawReader.cxx \
+          AliL3DDLRawReaderFile.cxx AliL3DDLTPCRawStream.cxx AliL3DDLDataFileHandler.cxx
 
 include $(ALIHLT_TOPDIR)/Makefile.rules
index 5d13a61..682bbec 100644 (file)
@@ -414,7 +414,7 @@ void AliL3ClustFinderNew::WriteClusters(Int_t n_clusters,ClusterData *list)
       if(!fRawSP){
        AliL3Transform::Slice2Sector(fCurrentSlice,fCurrentRow,thissector,thisrow);
        AliL3Transform::Raw2Local(xyz,thissector,thisrow,fpad,ftime);
-
+       
        if(xyz[0]==0) LOG(AliL3Log::kError,"AliL3ClustFinder","Cluster Finder")
          <<AliL3Log::kDec<<"Zero cluster"<<ENDLOG;
        if(fNClusters >= fMaxNClusters)
@@ -423,17 +423,18 @@ void AliL3ClustFinderNew::WriteClusters(Int_t n_clusters,ClusterData *list)
              <<AliL3Log::kDec<<"Too many clusters "<<fNClusters<<ENDLOG;
            return;
          }  
-
+       
        fSpacePointData[counter].fX = xyz[0];
        fSpacePointData[counter].fY = xyz[1];
        fSpacePointData[counter].fZ = xyz[2];
+       
       } else {
-       fSpacePointData[counter].fCharge = list[j].fTotalCharge;
        fSpacePointData[counter].fX = fCurrentRow;
        fSpacePointData[counter].fY = fpad;
        fSpacePointData[counter].fZ = ftime;
       }
-
+      
+      fSpacePointData[counter].fCharge = list[j].fTotalCharge;
       fSpacePointData[counter].fPadRow = fCurrentRow;
       fSpacePointData[counter].fSigmaY2 = fpad2;
       fSpacePointData[counter].fSigmaZ2  = ftime2;
index 38d1c56..4680508 100644 (file)
@@ -227,6 +227,7 @@ void AliL3GlobalMerger::Merge(){
       if(track1->IsPoint()) {n1++;track1->CalculateReferencePoint(angle);}
     }
     for(Int_t s0=0;s0<ttt0->GetNTracks();s0++){
+      if(ismatched0[s0]) continue;
       AliL3Track *track0=ttt0->GetCheckedTrack(s0);
       if(!track0) continue;
       if(!track0->IsPoint()) continue;
@@ -246,15 +247,25 @@ void AliL3GlobalMerger::Merge(){
           if(r0<r1){
             MultiMerge(tout,track,2); 
             ismatched0[s0]=kTRUE;
-            ismatched1[s1]=kTRUE;
+           ismatched1[s1]=kTRUE;
             ttt0->Remove(s0);
             ttt1->Remove(s1);
+           break;
+           /*
+             The track is merged, so we will _not_ look for more matches.
+             Because there could easily be more matches, if a track is being
+             split within the sector.
+             This bug was brought to you by Dr.Frankenfeld, and fixed 2 years
+             later by ASV....
+           */
           }
         }
       }
     }
-  LOG(AliL3Log::kInformational,"AliL3GlobalMerger::Merge","Result")
-  <<AliL3Log::kDec<<"slice0: "<<n0<<" slice1: "<<n1
-  <<" Merged Tracks: "<<tout->GetNTracks()<<ENDLOG;
+    LOG(AliL3Log::kInformational,"AliL3GlobalMerger::Merge","Result")
+      <<AliL3Log::kDec<<"slice0: "<<n0<<" slice1: "<<n1
+      <<" Merged Tracks: "<<tout->GetNTracks()<<ENDLOG;
+    delete [] ismatched0;
+    delete [] ismatched1;
   }
 }
index ed35ce2..7f67d95 100644 (file)
@@ -31,7 +31,7 @@
 //  file.Init(slice,patch);
 //
 //  UInt_t nrowss;
-//  AliL3DigitRowData *data = file.CompBinary2Memory(nrowss);
+//  AliL3DigitRowData *data = file.CompBinary2Memory(nrows);
 //  
 //  for(int i=0; i<nrows; i++) 
 //    {
@@ -1020,41 +1020,7 @@ Bool_t AliL3MemHandler::Binary2Memory(UInt_t & npoint,AliL3SpacePointData *data)
   }
 
   Int_t size = GetFileSize(); 
-/*
-  UInt_t  size,slice,patch,row[2];
-  AliL3EventDataTypeRoot datatype;
-  UInt_t node;
-  if(fread(&datatype,sizeof(AliL3EventDataTypeRoot),1,fInBinary)!=1){
-    LOG(AliL3Log::kFatal,"AliL3MemHandler::Binary2Memory","File")
-    <<"File Read Error "<<ENDLOG;
-    return kFALSE;
-  }
-  if(fread(&node,sizeof(UInt_t),1,fInBinary)!=1){
-    LOG(AliL3Log::kFatal,"AliL3MemHandler::Binary2Memory","File")
-    <<"File Read Error "<<ENDLOG;
-    return kFALSE;
-  }
-  if(fread(&size,sizeof(UInt_t),1,fInBinary)!=1){
-    LOG(AliL3Log::kFatal,"AliL3MemHandler::Binary2Memory","File")
-    <<"File Read Error "<<ENDLOG;
-    return kFALSE;
-  }
-  if(fread(&slice,sizeof(UInt_t),1,fInBinary)!=1){
-    LOG(AliL3Log::kFatal,"AliL3MemHandler::Binary2Memory","File")
-    <<"File Read Error "<<ENDLOG;
-    return kFALSE;
-  }
-  if(fread(&patch,sizeof(UInt_t),1,fInBinary)!=1){
-    LOG(AliL3Log::kFatal,"AliL3MemHandler::Binary2Memory","File")
-    <<"File Read Error "<<ENDLOG;
-    return kFALSE;
-  }
-  if(fread(row,2*sizeof(UInt_t),1,fInBinary)!=1){
-    LOG(AliL3Log::kFatal,"AliL3MemHandler::Binary2Memory","File")
-    <<"File Read Error "<<ENDLOG;
-    return kFALSE;
-  }
-*/
+
   npoint = size/sizeof(AliL3SpacePointData);
   if(fread(data,size,1,fInBinary)!=1){
     LOG(AliL3Log::kFatal,"AliL3MemHandler::Binary2Memory","File")
index c6c11b6..8aa117d 100644 (file)
@@ -106,12 +106,9 @@ class AliL3MemHandler{
   Bool_t Binary2Memory(UInt_t & ntrack,AliL3TrackSegmentData *data);
   Bool_t TrackArray2Binary(AliL3TrackArray *array);
   Bool_t Binary2TrackArray(AliL3TrackArray *array);
-  Bool_t TrackArray2Memory(UInt_t & ntrack,AliL3TrackSegmentData *data,
-                                             AliL3TrackArray *array);
-  Bool_t Memory2TrackArray(UInt_t ntrack,AliL3TrackSegmentData *data,
-                                             AliL3TrackArray *array);
-  Bool_t Memory2TrackArray(UInt_t ntrack,AliL3TrackSegmentData *data,
-                          AliL3TrackArray *array,Int_t slice);
+  Bool_t TrackArray2Memory(UInt_t & ntrack,AliL3TrackSegmentData *data,AliL3TrackArray *array);
+  Bool_t Memory2TrackArray(UInt_t ntrack,AliL3TrackSegmentData *data,AliL3TrackArray *array);
+  Bool_t Memory2TrackArray(UInt_t ntrack,AliL3TrackSegmentData *data,AliL3TrackArray *array,Int_t slice);
     
   //Memory Allocation
   UInt_t GetAllocatedSize(){return fSize;}  
@@ -142,9 +139,9 @@ class AliL3MemHandler{
   virtual Bool_t SetMCOutput(FILE *file){return 0;}
   virtual void CloseMCOutput(){return;}
   virtual Bool_t AliDigits2Binary(Int_t event=0,Bool_t altro=kFALSE){return 0;}
+  virtual Bool_t AliDigits2CompBinary(Int_t event=0,Bool_t altro=kFALSE){return 0;}  
   virtual AliL3DigitRowData *AliDigits2Memory(UInt_t & nrow,Int_t event=0){return 0;}
   virtual AliL3DigitRowData *AliAltroDigits2Memory(UInt_t & nrow,Int_t event=0,Bool_t eventmerge=kFALSE){return 0;}
-  virtual Bool_t AliDigits2CompBinary(Int_t event=0,Bool_t altro=kFALSE){return 0;}  
   virtual void AliDigits2RootFile(AliL3DigitRowData *rowPt,Char_t *new_digitsfile){return;}
   virtual Bool_t AliPoints2Binary(Int_t eventn=0){return 0;}
   virtual AliL3SpacePointData *AliPoints2Memory(UInt_t & npoint,Int_t eventn=0){return 0;}
@@ -172,6 +169,14 @@ class AliL3MemHandler{
   virtual Int_t ReadRawPedestalsInput(){return 0;}
 
   virtual AliL3DigitRowData* RawData2Memory(UInt_t &nrow,Int_t event=-1){return 0;}
+  virtual Bool_t RawData2CompMemory(Int_t event=-1){return 0;}
+
+  //AliL3DDLDataFileHandler
+  virtual Bool_t SetReaderInput(Char_t *name,Bool_t add=kTRUE){return 0;}
+  virtual void CloseReaderInput(){};
+
+  virtual AliL3DigitRowData* DDLData2Memory(UInt_t &nrow,Int_t event=-1){return 0;}
+  virtual Bool_t DDLData2CompBinary(Int_t event=-1){return 0;}
 
   ClassDef(AliL3MemHandler,1) // Memory handler class
 };
index 71db861..d477b42 100644 (file)
@@ -694,3 +694,14 @@ AliL3DigitRowData * AliL3RawDataFileHandler::RawData2Memory(UInt_t &nrow,Int_t e
 
   return data;
 }
+
+Bool_t AliL3RawDataFileHandler::RawData2CompBinary(Int_t event)
+{
+  Bool_t out = kTRUE;
+  UInt_t ndigits=0;
+  AliL3DigitRowData *digits=0;
+  digits = RawData2Memory(ndigits,event);
+  out = Memory2CompBinary(ndigits,digits);
+  Free();
+  return out;
+}
index fa19ebd..6c0cc0b 100644 (file)
@@ -69,9 +69,9 @@ class AliL3RawDataFileHandler:public AliL3MemHandler{
   Int_t GetPadMaxUsed(){return fPadMaxUsed;} 
   Short_t GetPedVal(){return fPedVal;}
   Int_t GetNChannels(){return fNChannels;}
-  //Int_t GetNTimeBins(){return fNTimeBins;}
 
   AliL3DigitRowData* RawData2Memory(UInt_t &nrow,Int_t event=-1);
+  Bool_t RawData2CompBinary(Int_t event=-1);
 
   ClassDef(AliL3RawDataFileHandler,1)   //RawData Filehandler class
 };
index 7ea72d4..e53176d 100644 (file)
@@ -6,7 +6,7 @@
 
 //////////////////////////////////////////////////////////////////////////
 //                                                                      //
-// Basic types used by level3                                           //
+// Basic types used by HLT                                              //
 //                                                                      //
 //////////////////////////////////////////////////////////////////////////
 
index 75e5327..2bad2ab 100644 (file)
@@ -860,6 +860,9 @@ Bool_t AliL3Transform::ReadInitFile(Char_t* pathname)
     return kFALSE;
   }
 
+  LOG(AliL3Log::kInformational,"AliL3Transform::Init","Config")
+    <<"Successfully loaded values from config file \""<<pathname<<"\""<<ENDLOG;
+
   return kTRUE;
 }
 
@@ -992,8 +995,8 @@ Bool_t AliL3Transform::MakeInitFile(Char_t *rootfilename,Char_t *filename)
   }
   
   fVersion=fV_aliroot;
-  fBFieldFactor=(Double_t)gAlice->Field()->Factor();
-  fSolenoidBField=(Double_t)gAlice->Field()->SolenoidField();
+  SetBFieldFactor((Double_t)gAlice->Field()->Factor());
+  SetSolenoidBField((Double_t)gAlice->Field()->SolenoidField());
   fPadPitchWidthLow=param->GetInnerPadPitchWidth();
   fPadPitchWidthUp=param->GetOuterPadPitchWidth();
   fZWidth=param->GetZWidth();
@@ -1013,7 +1016,7 @@ Bool_t AliL3Transform::MakeInitFile(Char_t *rootfilename,Char_t *filename)
   fADCSat=param->GetADCSat();
   fZeroSup=param->GetZeroSup();
   fNSlice=fNSectorLow;
-
+    
   //now do the arrays
   for(Int_t i=0;i<fNRow;i++){
     Int_t sec,row;