LCOV - code coverage report
Current view: top level - HMPID/HMPIDbase - AliHMPIDDigit.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 29 3.4 %
Date: 2016-06-14 17:26:59 Functions: 1 3 33.3 %

          Line data    Source code
       1             : //  **************************************************************************
       2             : //  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             : //  *                                                                        *
       4             : //  * Author: The ALICE Off-line Project.                                    *
       5             : //  * Contributors are mentioned in the code where appropriate.              *
       6             : //  *                                                                        *
       7             : //  * Permission to use, copy, modify and distribute this software and its   *
       8             : //  * documentation strictly for non-commercial purposes is hereby granted   *
       9             : //  * without fee, provided that the above copyright notice appears in all   *
      10             : //  * copies and that both the copyright notice and this permission notice   *
      11             : //  * appear in the supporting documentation. The authors make no claims     *
      12             : //  * about the suitability of this software for any purpose. It is          *
      13             : //  * provided "as is" without express or implied warranty.                  *
      14             : //  **************************************************************************
      15             : 
      16             : #include "AliHMPIDDigit.h"    //class header
      17             : #include <TClonesArray.h>     //WriteRaw() 
      18             : #include <TBox.h>             //Draw() 
      19             : #include <TPolyLine.h>        //Draw() 
      20             : #include "AliHMPIDParam.h"
      21             : #include <AliDAQ.h>           //WriteRaw()
      22             : #include "Riostream.h"        //WriteRaw()
      23             : #include "AliFstream.h"   
      24             : 
      25          16 : ClassImp(AliHMPIDDigit)
      26             : 
      27             : /*
      28             :  Preface: all geometrical information (like left-right sides) is reported as seen from electronic side.
      29             :  
      30             :       d10          d1    d10           d1 
      31             :       _______________    _______________          
      32             : r1   |               |  |               |126.16   r24
      33             :      |       4       |  |       5       | 
      34             :      |               |  |               | 
      35             :      |_______________|  |_______________|85.84 
      36             :       _______________    _______________
      37             :      |               |  |               |83.24  
      38             :      |       2       |  |       3       |
      39             :      |               |  |               |             
      40             :      |_______________|  |_______________|42.92
      41             :       _______________    _______________
      42             :      |               |  |               |40.32
      43             :      |       0       |  |       1       |
      44             :      |               |  |               |
      45             : r24  |_______________|  |_______________|0        r1        //updated: 15/02/2008
      46             :       0           64.0  66.6        130.6                   //corrected: 05/08/2009 clm
      47             : 
      48             : 
      49             : 
      50             : The DDL file starts with common header which size and structure is standartized and mandatory for all detectors. 
      51             : The header contains among other words, so called Equipment ID word. This unique value for each D-RORC is calculated as detector ID << 8 + DDL index. 
      52             : For HMPID the detector ID is 6 (reffered in the code as kRichRawId) while DDL indexes are from 0 to 13.
      53             : 
      54             : Common header might be followed by the private one although  HMPID has no any private header, just uses the common one.
      55             : 
      56             : Single HMPID D-RORC (with 2 channels) serves a single chamber so that channel 0 serves left half (PCs 0-2-4) 
      57             :                                                                               1 serves right half(PCs 1-3-5) 
      58             : 
      59             : So the LDC -chamber-ddl map is:
      60             : DDL index  0 -> ch 0 left -> DDL ID 0x600          DDL index  1 -> ch 1 right -> DDL ID 0x601 
      61             : DDL index  2 -> ch 1 left -> DDL ID 0x602          DDL index  3 -> ch 2 right -> DDL ID 0x603 
      62             : DDL index  4 -> ch 2 left -> DDL ID 0x604          DDL index  5 -> ch 3 right -> DDL ID 0x605 
      63             : DDL index  6 -> ch 3 left -> DDL ID 0x606          DDL index  7 -> ch 4 right -> DDL ID 0x607 
      64             : DDL index  8 -> ch 4 left -> DDL ID 0x608          DDL index  9 -> ch 5 right -> DDL ID 0x609 
      65             : DDL index 10 -> ch 5 left -> DDL ID 0x60a          DDL index 11 -> ch 6 right -> DDL ID 0x60b 
      66             : DDL index 12 -> ch 6 left -> DDL ID 0x60c          DDL index 13 -> ch 7 right -> DDL ID 0x60d 
      67             : 
      68             : HMPID FEE as seen by single D-RORC is composed from a number of DILOGIC chips organized in vertical stack of rows. 
      69             : Each DILOGIC chip serves 48 channels for the 8x6 pads Channels counted from 0 to 47.
      70             : 
      71             : The mapping inside DILOGIC chip has the following structure (see from electronics side):
      72             : pady
      73             : 
      74             : 5  04 10 16 22 28 34 40 46                   due to repetition in column structure we may introduce per column map:   
      75             : 4  02 08 14 20 26 32 38 44                   pady= 0 1 2 3 4 5          
      76             : 3  00 06 12 18 24 30 36 42                   addr= 5 3 1 0 2 4
      77             : 2  01 07 13 19 25 31 37 43                   or vice versa 
      78             : 1  03 09 15 21 27 33 39 45                   addr= 0 1 2 3 4 5
      79             : 0  05 11 17 23 29 35 41 47                   pady= 3 2 4 1 5 0  
      80             :     
      81             :     0  1  2  3  4  5  6  7  padx
      82             : 
      83             : 10 DILOGIC chips composes so called "row" in horizontal direction (reffered in the code as kNdil), so the row is 80x6 pads structure. 
      84             : DILOGIC chips in the row are counted from right to left as seen from electronics side, from 1 to 10.
      85             : 24 rows are piled up forming the whole FEE served by single D-RORC, so one DDL sees 80x144 pads separated in 3 photocathodes.
      86             : Rows are counted from 1 to 24 from top    to bottom for right  half of the chamber (PCs 1-3-5) as seen from electronics side, meaning even LDC number
      87             :                           and from bottom to top    for left   half of the chamber (PCs 0-2-4) as seen from electronics side, meaning odd LDC number.
      88             : 
      89             : HMPID raw word is 32 bits with the structure:   
      90             :    00000             rrrrr                      dddd                               aaaaaa                          qqqqqqqqqqqq 
      91             :  5 bits zero  5 bits row number (1..24)  4 bits DILOGIC chip number (1..10) 6 bits DILOGIC address (0..47)  12 bits QDC value (0..4095)
      92             : */
      93             : //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      94             : void AliHMPIDDigit::Draw(Option_t*)
      95             : {
      96             : //  TMarker *pMark=new TMarker(LorsX(),LorsY(),25); pMark->SetMarkerColor(kGreen);pMark->Draw();
      97           0 :   TBox *pad = new
      98             :  
      99           0 : TBox(LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY(),LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
     100           0 :   TPolyLine *line=new TPolyLine(5);
     101           0 :   line->SetPoint(0,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
     102           0 :   line->SetPoint(1,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
     103           0 :   line->SetPoint(2,LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
     104           0 :   line->SetPoint(3,LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
     105           0 :   line->SetPoint(4,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
     106           0 :   Int_t slice=(Int_t)fQ/20;
     107           0 :   switch(slice){
     108           0 :     case 0: pad->SetFillColor(kBlue); break;
     109           0 :     case 1: pad->SetFillColor(kBlue+4); break;
     110           0 :     case 2: pad->SetFillColor(kCyan); break;
     111           0 :     case 3: pad->SetFillColor(kCyan+4); break;
     112           0 :     case 4: pad->SetFillColor(kGreen); break;
     113           0 :     case 5: pad->SetFillColor(kGreen+4); break;
     114           0 :     case 6: pad->SetFillColor(kYellow); break;
     115           0 :     case 7: pad->SetFillColor(kYellow+4); break;
     116           0 :     default: pad->SetFillColor(kRed);      break;
     117             :   }
     118           0 :    pad->SetUniqueID((Int_t)fQ);
     119           0 :   pad->Draw();line->Draw();
     120           0 : }
     121             : //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     122             : void AliHMPIDDigit::Print(Option_t *opt)const
     123             : {
     124             : // Print current digit  
     125             : // Arguments: option string not used
     126             : //   Returns: none    
     127           0 :   UInt_t w32; Int_t ddl,r,d,a;
     128           0 :   Raw(w32,ddl,r,d,a);
     129           0 :   Printf("%sDIG:(ch=%1i,pc=%1i,x=%2i,y=%2i) (%7.3f,%7.3f) Q=%8.3f TID=(%5i,%5i,%5i) raw=0x%x (ddl=%2i,r=%2i,d=%2i,a=%2i) %s",
     130           0 :           opt,  AliHMPIDParam::A2C(fPad),AliHMPIDParam::A2P(fPad),AliHMPIDParam::A2X(fPad),AliHMPIDParam::A2Y(fPad),LorsX(),LorsY(), Q(),  
     131           0 :           fTracks[0],fTracks[1],fTracks[2],w32,ddl,r,d,a, (AliHMPIDParam::IsOverTh(Q()))?"":"below thr");
     132           0 : }
     133             : //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Generated by: LCOV version 1.11