LCOV - code coverage report
Current view: top level - HLT/MUON - AliHLTMUONRecHit.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 46 4.3 %
Date: 2016-06-14 17:26:59 Functions: 2 52 3.8 %

          Line data    Source code
       1             : #ifndef ALIHLTMUONRECHIT_H
       2             : #define ALIHLTMUONRECHIT_H
       3             : /* This file is property of and copyright by the ALICE HLT Project        *
       4             :  * ALICE Experiment at CERN, All rights reserved.                         *
       5             :  * See cxx source for full Copyright notice                               */
       6             : 
       7             : // $Id$
       8             : 
       9             : ///
      10             : /// @file   AliHLTMUONRecHit.h
      11             : /// @author Artur Szostak <artursz@iafrica.com>
      12             : /// @date   29 Sep 2007
      13             : /// @brief  Declaration of a reconstructed hit ROOT object to store 3D hit coordinates.
      14             : ///
      15             : 
      16             : #include "TObject.h"
      17             : #include "TClonesArray.h"
      18             : #include "TVector3.h"
      19             : #include <ostream>
      20             : 
      21             : /**
      22             :  * A 3D hit object used to store hits reconstructed on the tracking chambers by
      23             :  * the dHLT. These objects store information translated into ROOT format from
      24             :  * dHLT raw data. Reconstructed hit values of (0, 0, 0) indicate an invalid or
      25             :  * nil hit.
      26             :  * This class is mainly for testing or as a helper object for dHLT specific analysis,
      27             :  * since it is sometimes easier to store and handle ROOT objects.
      28             :  */
      29             : class AliHLTMUONRecHit : public TObject
      30             : {
      31             :         /**
      32             :          * Stream operator for usage with std::ostream classes.
      33             :          * Allows usage such as:
      34             :          *   AliHLTMUONRecHit h; std::cout << h;
      35             :          */
      36             :         friend std::ostream& operator << (std::ostream& stream, const AliHLTMUONRecHit& hit);
      37             : 
      38             : public:
      39             : 
      40             :         /**
      41             :          * The AliChannel class stores extra debugging information about the channels
      42             :          * and raw data words that were considered during reconstruction of a hit
      43             :          * by the dHLT hit reconstructor component.
      44             :          */
      45           0 :         class AliChannel : public TObject
      46             :         {
      47             :                 /**
      48             :                  * Stream operator for usage with std::ostream classes.
      49             :                  */
      50             :                 friend std::ostream& operator << (std::ostream& stream, const AliChannel& c);
      51             :         
      52             :         public:
      53             :                 
      54             :                 /**
      55             :                  * Constructor.
      56             :                  * \param busPatch  The bus patch ID of the channel as found in the DDL raw data.
      57             :                  * \param manu  The MANU ID of the channel as found in the raw data word.
      58             :                  * \param channel  The MANU channel ID as found in the raw data word.
      59             :                  * \param signal  The ADC signal value as found in the raw data word.
      60             :                  * \param rawDataWord  The actual raw data word.
      61             :                  */
      62             :                 AliChannel(
      63             :                                 Short_t busPatch = -1,
      64             :                                 Short_t manu = -1,
      65             :                                 Short_t channel = -1,
      66             :                                 Short_t signal = -1,
      67             :                                 UInt_t rawDataWord = 0
      68             :                         ) :
      69           0 :                         TObject(), fBusPatch(busPatch),
      70           0 :                         fManu(manu), fAddress(channel), fSignal(signal),
      71           0 :                         fRawDataWord(rawDataWord)
      72           0 :                 {}
      73             :                 
      74             :                 /**
      75             :                  * Default destructor.
      76             :                  */
      77           0 :                 virtual ~AliChannel() {}
      78             :                 
      79             :                 /**
      80             :                  * Returns the bus patch ID of the channel.
      81             :                  */
      82           0 :                 Short_t BusPatch() const { return fBusPatch; }
      83             :                 
      84             :                 /**
      85             :                  * Returns the MANU address.
      86             :                  */
      87           0 :                 Short_t Manu() const { return fManu; }
      88             :                 
      89             :                 /**
      90             :                  * Returns the channel address of the MANU.
      91             :                  */
      92           0 :                 Short_t Address() const { return fAddress; }
      93             :                 
      94             :                 /**
      95             :                  * Returns the ADC signal measured on the channel.
      96             :                  */
      97           0 :                 Short_t Signal() const { return fSignal; }
      98             :                 
      99             :                 /**
     100             :                  * Returns the raw data word as found in the tracking DDL payload.
     101             :                  */
     102           0 :                 UInt_t RawDataWord() const { return fRawDataWord; }
     103             :                 
     104             :                 /**
     105             :                  * Returns true if the channel is for the bending plane.
     106             :                  */
     107           0 :                 Bool_t InBendingPlane() const { return (fRawDataWord & (1<<28)) == 0; }
     108             :                 
     109             :                 /**
     110             :                  * Returns true if the channel is for the non-bending plane.
     111             :                  */
     112           0 :                 Bool_t InNonBendingPlane() const { return (fRawDataWord & (1<<28)) != 0; }
     113             :                 
     114             :                 virtual void Print(Option_t* option = NULL) const;
     115             :         
     116             :                 // Methods inherited from TObject
     117           0 :                 virtual Bool_t IsSortable() const { return kTRUE; }
     118             :                 Int_t Compare(const TObject* obj) const;
     119             : 
     120             :                 // Implement comparison operators.
     121             :                 bool operator == (const AliChannel& c) const
     122             :                 {
     123           0 :                         return fManu == c.fManu and fAddress == c.fAddress 
     124           0 :                                 and fSignal == c.fSignal
     125           0 :                                 and fRawDataWord == c.fRawDataWord;
     126             :                 }
     127             : 
     128             :                 bool operator != (const AliChannel& c) const
     129             :                 {
     130           0 :                         return not this->operator == (c);
     131             :                 }
     132             :         
     133             :         private:
     134             :         
     135             :                 Short_t fBusPatch;   ///< The bus patch ID for the channel.
     136             :                 Short_t fManu;       ///< The MANU address on the electronics.
     137             :                 Short_t fAddress;    ///< The channel address on the electronics.
     138             :                 Short_t fSignal;     ///< ADC value of signal.
     139             :                 UInt_t fRawDataWord; ///< The raw data word as found in the DDL stream.
     140             :                 
     141           6 :                 ClassDef(AliHLTMUONRecHit::AliChannel, 5); // A MANU channel forming part of a cluster that was considered during hit reconstruction in dHLT.
     142             :         };
     143             : 
     144             :         /**
     145             :          * Construct a new AliHLTMUONRecHit object with coordinate (x, y, z).
     146             :          * @param x           X coordinate of hit
     147             :          * @param y           Y coordinate of hit
     148             :          * @param z           Z coordinate of hit
     149             :          * @param sourceDDL   The DDL from which this hit originates.
     150             :          * @param detectorId  The ID number for the AliRoot detector element on
     151             :          *                    which this hit resides.
     152             :          * @param clusterId   The cluster ID number assigned to the hit's cluster.
     153             :          * @param nChExpB     The expected number of channels in the bending plane that form the cluster.
     154             :          * @param nChExpNB    The expected number of channels in the non-bending plane that form the cluster.
     155             :          * @param chargeB     The charge of the cluster in the bending plane.
     156             :          * @param chargeNB    The charge of the cluster in the non-bending plane.
     157             :          */
     158             :         AliHLTMUONRecHit(
     159             :                         Float_t x = 0,
     160             :                         Float_t y = 0,
     161             :                         Float_t z = 0,
     162             :                         Int_t sourceDDL = -1,
     163             :                         Int_t detElemId = -1,
     164             :                         Int_t clusterId = -1,
     165             :                         UShort_t nChExpB = 0,
     166             :                         UShort_t nChExpNB = 0,
     167             :                         Float_t chargeB = -1,
     168             :                         Float_t chargeNB = -1
     169             :                 ) :
     170           0 :                 TObject(), fCoordinate(x, y, z), fSourceDDL(sourceDDL),
     171           0 :                 fDetElemId(detElemId), fClusterId(clusterId), fNchExpB(nChExpB),
     172           0 :                 fNchExpNB(nChExpNB), fChannels("AliHLTMUONRecHit::AliChannel", 6),
     173           0 :                 fChargeB(chargeB), fChargeNB(chargeNB)
     174           0 :         {}
     175             :         
     176             :         /**
     177             :          * Default destructor.
     178             :          */
     179           0 :         virtual ~AliHLTMUONRecHit() {}
     180             : 
     181             :         /**
     182             :          * Returns the 3D hit coordinate.
     183             :          */
     184           0 :         const TVector3& Coordinate() const { return fCoordinate; }
     185             : 
     186             :         /**
     187             :          * Returns the X coordinate of the reconstructed hit in centimetres.
     188             :          */
     189           0 :         Double_t X() const { return fCoordinate.X(); }
     190             : 
     191             :         /**
     192             :          * Returns the Y coordinate of the reconstructed hit in centimetres.
     193             :          */
     194           0 :         Double_t Y() const { return fCoordinate.Y(); }
     195             : 
     196             :         /**
     197             :          * Returns the Z coordinate of the reconstructed hit in centimetres.
     198             :          */
     199           0 :         Double_t Z() const { return fCoordinate.Z(); }
     200             :         
     201             :         /**
     202             :          * Returns the source DDL from which this hit originates.
     203             :          * -1 is returned if this was not set.
     204             :          */
     205           0 :         Int_t SourceDDL() const { return fSourceDDL; }
     206             :         
     207             :         /**
     208             :          * Returns the detector element ID on which this reconstructed hit resides.
     209             :          * -1 is returned if this was not set.
     210             :          */
     211           0 :         Int_t DetElemId() const { return fDetElemId; }
     212             :         
     213             :         /**
     214             :          * Returns the chamber number of this hit in the range [1..14].
     215             :          * If -1 is returned then the chamber number is not known because the
     216             :          * detector element ID was not set or is invalid.
     217             :          * @param warn  Indicates if any warning should be printed in case of problems.
     218             :          */
     219             :         Int_t Chamber(bool warn = true) const;
     220             :         
     221             :         /**
     222             :          * Returns the ID number given to the hit's cluster.
     223             :          */
     224           0 :         Int_t ClusterId() const { return fClusterId; }
     225             :         
     226             :         /**
     227             :          * Returns the expected total number of channels that are to be added to this hit.
     228             :          * If the number of calls to AddChannel does not correspond to this value
     229             :          * then we lost some debugging information along the way.
     230             :          */
     231           0 :         UInt_t ExpectedNchannels() const { return ExpectedNchannelsB() + ExpectedNchannelsNB(); }
     232             :         
     233             :         /**
     234             :          * Returns the expected number of channels in the bending plane that are to
     235             :          * be added to this hit.
     236             :          */
     237           0 :         UInt_t ExpectedNchannelsB() const { return fNchExpB; }
     238             :         
     239             :         /**
     240             :          * Returns the expected number of channels in the non-bending plane that
     241             :          * are to be added to this hit.
     242             :          */
     243           0 :         UInt_t ExpectedNchannelsNB() const { return fNchExpNB; }
     244             :         
     245             :         /**
     246             :          * Returns the total charge of the cluster.
     247             :          */
     248           0 :         Float_t TotalCharge() const { return fChargeB + fChargeNB; }
     249             :         
     250             :         /**
     251             :          * Returns the charge of the cluster in the bending plane.
     252             :          */
     253           0 :         Float_t ChargeB() const { return fChargeB; }
     254             :         
     255             :         /**
     256             :          * Returns the charge of the cluster in the non-bending plane.
     257             :          */
     258           0 :         Float_t ChargeNB() const { return fChargeNB; }
     259             :         
     260             :         /**
     261             :          * Sets the extra debugging information for this hit.
     262             :          * @param detElemId  The detector element ID.
     263             :          * @param clusterId  Cluster ID of the hit's cluster.
     264             :          * @param nChExpB    Number of expected channels in the bending plane forming the cluster.
     265             :          * @param nChExpNB   Number of expected channels in the non-bending plane forming the cluster.
     266             :          * @param chargeB    The charge of the cluster in the bending plane.
     267             :          * @param chargeNB   The charge of the cluster in the non-bending plane.
     268             :          * @param sourceDDL  The source DDL of this hit.
     269             :          */
     270             :         void SetDebugInfo(
     271             :                         Int_t detElemId, Int_t clusterId,
     272             :                         UShort_t nChExpB, UShort_t nChExpNB,
     273             :                         Float_t chargeB, Float_t chargeNB,
     274             :                         Int_t sourceDDL = -1
     275             :                 );
     276             :         
     277             :         /**
     278             :          * Sets the hit coordinate.
     279             :          */
     280             :         void SetHit(Float_t x, Float_t y, Float_t z)
     281             :         {
     282           0 :                 fCoordinate.SetXYZ(x, y, z);
     283           0 :         }
     284             :         
     285             :         /**
     286             :          * Returns the total number of channels associated with this hit.
     287             :          */
     288           0 :         Int_t Nchannels() const { return fChannels.GetEntriesFast(); }
     289             :         
     290             :         /**
     291             :          * Returns the i'th channel associated with this hit.
     292             :          * @param i  Should be a number in the range [0..n), where n = Nchannels().
     293             :          */
     294             :         const AliChannel* GetChannel(Int_t i) const
     295             :         {
     296           0 :                 return static_cast<const AliChannel*>(fChannels[i]);
     297             :         }
     298             :         
     299             :         /**
     300             :          * Adds a new channel to this hit if it is on a tracking chamber.
     301             :          * @param buspatch  The bus patch ID of the channel.
     302             :          * @param manu    The MANU number
     303             :          * @param channel The MANU channel address.
     304             :          * @param signal  The ADC signal value measured on the channel.
     305             :          * @param rawDataWord This is the raw data word as read from the DDL.
     306             :          */
     307             :         void AddChannel(
     308             :                         Short_t buspatch, Short_t manu, Short_t channel,
     309             :                         Short_t signal, UInt_t rawDataWord
     310             :                 );
     311             : 
     312             :         /**
     313             :          * Prints the details of the reconstructed hit.
     314             :          * @param option  A case sensitive string that can contain one of the
     315             :          *     following strings:
     316             :          *       "compact" - Prints just the coordinates of the hit in a terse format.
     317             :          *       "detail" - Prints the coordinates and detector element ID.
     318             :          *       "all" - Prints all known information about this hit including
     319             :          *               channel information forming the cluster that was reconstructed.
     320             :          *     If the string contains an empty option or NULL then the default is
     321             :          *     to print compactly.
     322             :          */
     323             :         virtual void Print(Option_t* option = NULL) const;
     324             :         
     325             :         // Methods inherited from TObject
     326           0 :         virtual Bool_t IsSortable() const { return kTRUE; }
     327             :         Int_t Compare(const TObject* obj) const;
     328             : 
     329             :         // Implement comparison operators.
     330             :         bool operator == (const AliHLTMUONRecHit& hit) const
     331             :         {
     332           0 :                 return X() == hit.X() and Y() == hit.Y() and Z() == hit.Z();
     333             :         }
     334             : 
     335             :         bool operator != (const AliHLTMUONRecHit& hit) const
     336             :         {
     337           0 :                 return not this->operator == (hit);
     338             :         }
     339             : 
     340             : private:
     341             : 
     342             :         TVector3 fCoordinate; ///< The 3D coordinate of the hit in AliRoot global coordinates (cm).
     343             :         
     344             :         // The following is debugging information and may not be filled if the
     345             :         // dHLT components were not set to produce this information.
     346             :         Int_t fSourceDDL;  ///< The DDL from which this hit originates.
     347             :         Int_t fDetElemId;  ///< Detector element ID number.
     348             :         Int_t fClusterId;  ///< The cluster ID number used to relate all the channels to each other.
     349             :         UShort_t fNchExpB;  ///< The number of channels in the bending plane that were supposed to be found.
     350             :         UShort_t fNchExpNB; ///< The number of channels in the non-bending plane that were supposed to be found.
     351             :         TClonesArray fChannels; ///< The channels forming part of the cluster from which this hit was reconstructed.
     352             :         Float_t fChargeB;   ///< The charge of the cluster in the bending plane.
     353             :         Float_t fChargeNB;  ///< The charge of the cluster in the non-bending plane.
     354             : 
     355           6 :         ClassDef(AliHLTMUONRecHit, 5); // A reconstructed hit translated from dHLT raw data into ROOT format.
     356             : };
     357             : 
     358             : #endif // ALIHLTMUONRECHIT_H

Generated by: LCOV version 1.11