Moving the FMD offline trigger to its own class, AliFMDOfflineTrigger
[u/mrichter/AliRoot.git] / FMD / AliFMDSDigit.cxx
1 /**************************************************************************
2  * Copyright(c) 2004, 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 /* $Id$ */
16 /** @file    AliFMDSDigit.cxx
17     @author  Christian Holm Christensen <cholm@nbi.dk>
18     @date    Mon Mar 27 12:37:41 2006
19     @brief   Digits for the FMD 
20     @ingroup FMD_base
21 */
22 //////////////////////////////////////////////////////////////////////
23 //
24 //  Digits classes for the FMD                
25 //
26 //  Digits consists of
27 //   - Detector #
28 //   - Ring ID                                             
29 //   - Sector #     
30 //   - Strip #
31 //   - ADC count in this channel                                  
32 //
33 //  Digits consists of
34 //   - Detector #
35 //   - Ring ID                                             
36 //   - Sector #     
37 //   - Strip #
38 //   - Total energy deposited in the strip
39 //   - ADC count in this channel                                  
40 //
41 // As the Digits and SDigits have so much in common, the classes
42 // AliFMDDigit and AliFMDSDigit are implemented via a base
43 // class AliFMDBaseDigit.
44 ///
45 //              +-----------------+
46 //              | AliFMDBaseDigit |
47 //              +-----------------+
48 //                      ^
49 //                      |
50 //                +------------+
51 //                |            |
52 //      +-------------+ +--------------+
53 //      | AliFMDDigit | | AliFMDSDigit |
54 //      +-------------+ +--------------+
55 //
56 // (Note, that I'd really would have liked to implement AliFMDHit as a
57 // derived class from some base class - say AliFMDStrip, and the Digit
58 // classes would (eventually) have derived from that as well.
59 // However, ROOT doesn't do well with multiple inheritance, so I chose
60 // not to anyway).
61 //
62 // Latest changes by Christian Holm Christensen
63 //
64 //////////////////////////////////////////////////////////////////////
65
66 #include "AliFMDSDigit.h"       // ALIFMDDIGIT_H
67 #include "Riostream.h"          // ROOT_Riostream
68 #include <TString.h>
69
70 //====================================================================
71 ClassImp(AliFMDSDigit)
72 #if 0
73 ; // Here to make Emacs happy
74 #endif
75 //____________________________________________________________________
76 AliFMDSDigit::AliFMDSDigit()
77   : fEdep(0), 
78     fCount1(0),
79     fCount2(-1),
80     fCount3(-1), 
81     fCount4(-1), 
82     fNParticles(0),
83     fNPrimaries(0)
84     // ,     fLabels(0)
85 {
86   // cTOR 
87 }
88
89 //____________________________________________________________________
90 AliFMDSDigit::AliFMDSDigit(UShort_t       detector, 
91                            Char_t         ring, 
92                            UShort_t       sector, 
93                            UShort_t       strip, 
94                            Float_t        edep,
95                            UShort_t       count1,
96                            Short_t        count2, 
97                            Short_t        count3, 
98                            Short_t        count4,
99                            UShort_t       npart,
100                            UShort_t       nprim,
101                            Int_t*         refs)
102   : AliFMDBaseDigit(detector, ring, sector, strip), 
103     fEdep(edep),
104     fCount1(count1),
105     fCount2(count2),
106     fCount3(count3),
107     fCount4(count4),
108     fNParticles(npart), 
109     fNPrimaries(nprim)
110     // , fLabels(refs)
111 {
112   //
113   // Creates a real data digit object
114   //
115   // Parameters 
116   //
117   //    detector  Detector # (1, 2, or 3)                      
118   //    ring      Ring ID ('I' or 'O')
119   //    sector    Sector # (For inner/outer rings: 0-19/0-39)
120   //    strip     Strip # (For inner/outer rings: 0-511/0-255)
121   //    edep      Total energy deposited 
122   //    count1    ADC count (a 10-bit word)
123   //    count2    ADC count (a 10-bit word) -1 if not used
124   //    count3    ADC count (a 10-bit word) -1 if not used
125   if (!refs) return;
126   for (Int_t i = 0; i < npart; i++) AddTrack(refs[i]);
127 }
128
129 //____________________________________________________________________
130 void
131 AliFMDSDigit::Print(Option_t* option) const 
132 {
133   // Print digit to standard out 
134   AliFMDBaseDigit::Print();
135   std::cout << "\t" 
136             << std::setw(10) << fEdep << " -> "
137             << std::setw(4) << fCount1 << " (" 
138             << std::setw(4) << fCount2 << "," 
139             << std::setw(4) << fCount3 << "," 
140             << std::setw(4) << fCount4 << ") = " 
141             << std::setw(4) << Counts() << std::flush;
142
143   TString opt(option);
144   if (opt.Contains("p", TString::kIgnoreCase)) 
145     std::cout << " [" 
146               << std::setw(2) << fNPrimaries << "/" 
147               << std::setw(2) << fNParticles << "]"
148               << std::flush;
149   if (opt.Contains("l", TString::kIgnoreCase)) {
150     std::cout << " ";
151     for (Int_t i = 0; i < GetNTrack(); i++) 
152       std::cout << (i == 0 ? "" : ",") << std::setw(5) << fTracks[i];
153 #if 0
154     for (Int_t i = 0; i < fLabels.fN; i++) 
155       std::cout << (i == 0 ? "" : ",") << fLabels.fArray[i];
156 #endif
157   }
158   std::cout << std::endl;
159 }
160
161 //____________________________________________________________________
162 //
163 // EOF
164 //