]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PHOS/AliPHOSRawStream.cxx
Stand-alone library for ESD. Possibility to use only root and lidESD.so for analysis...
[u/mrichter/AliRoot.git] / PHOS / AliPHOSRawStream.cxx
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 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 ///
20 /// This class provides access to PHOS digits in raw data.
21 ///
22 /// It loops over all PHOS digits in the raw data given by the AliRawReader.
23 /// The Next method goes to the next digit. If there are no digits left
24 /// it returns kFALSE.
25 /// Several getters provide information about the current digit.
26 /// usage: 
27 /// root > AliRawReaderFile rawReader ; 
28 /// root > AliPHOSRawStream input(&rawReader) ; 
29 /// root > while (input.Next()) ..... 
30 ///////////////////////////////////////////////////////////////////////////////
31
32 #include "TClonesArray.h"
33 #include "TClass.h"
34
35
36
37 #include "AliPHOSRawStream.h"
38 #include "AliRawReader.h"
39 #include "AliPHOSConTableDB.h"
40 #include "AliPHOSDigit.h"
41
42 #ifdef ALI_DATE
43 #include "event.h"
44 #else
45 #include "AliPHOSevent.h"
46 #endif
47
48 ClassImp(AliPHOSRawStream)
49
50 //_____________________________________________________________________________
51 AliPHOSRawStream::AliPHOSRawStream(AliRawReader* rawReader) : TObject()
52 {
53   fRawReader = rawReader ;
54   fctdb = 0 ;
55 }
56 //_____________________________________________________________________________
57 Bool_t AliPHOSRawStream::ReadDigits(TClonesArray * digits){
58
59   Bool_t isOK = kFALSE ;
60   if(!fctdb){
61     Error("ReadDigits","Connection table not set") ;
62     return kFALSE ;
63   }
64
65   if(!digits){
66     Error("ReadDigits","Output array not created") ;
67     return kFALSE ;
68   }
69
70   if(!(digits->GetClass()->InheritsFrom("AliPHOSDigit"))){
71     Error("ReadDigits","Digits contanier made for %s, not AliPHOSDigits",digits->GetClass()->GetName()) ;
72     return kFALSE ;
73   }
74
75   digits->Clear() ;
76
77   //Check, if current event - PHYSICS event
78   if(!((fRawReader->GetType() & EVENT_TYPE_MASK)==PHYSICS_EVENT)){
79     return kFALSE ;
80   }
81
82   //Scan subevents until subevent with digits
83   while(fRawReader->ReadNextData(fData)){    
84     switch (fRawReader->GetEquipmentType()){
85     case kPattUnitMarker:
86       if(fRawReader->GetEquipmentId() == kPattUnitEquipId){ //Read PHOS trigger
87         Int_t * patt = (Int_t *)fData;
88         if(fRawReader->GetEquipmentSize() >= (Int_t)sizeof(Int_t))
89           fTrig = patt[0];
90         else
91           fTrig = 0 ;
92       }
93       break;
94     case kPhosAdcMarker:
95       if(fRawReader->GetEquipmentId() == kPhosAdcEquipId){
96         Int_t ndigits = fRawReader->GetEquipmentSize()/sizeof(Int_t);      
97         digits->Expand(ndigits) ;
98         for(Int_t i=0; i<ndigits; i++){
99           Int_t * amps = (Int_t *)fData ;
100           Int_t absID = fctdb->Raw2AbsId(i) ;
101           Int_t time = 0;
102           if(absID>0) //Only real digits are filled, last ADC numbers (if any) are scipped
103             new((*digits)[i]) AliPHOSDigit( -1, absID, amps[i], time) ;
104         }
105         digits->Sort() ;
106         digits->Compress() ;  
107         digits->Expand(digits->GetEntriesFast()) ;
108
109         //Set indexes in list of digits and make true digitization of the energy
110         for (Int_t id = 0 ; id < digits->GetEntriesFast() ; id++) { 
111           AliPHOSDigit * digit = dynamic_cast<AliPHOSDigit*>( digits->At(id) ) ; 
112           digit->SetIndexInList(id) ;     
113         }
114
115         isOK = kTRUE ;
116       }
117       break;
118     case kTdcMarker:
119       if(fRawReader->GetEquipmentId() == kTdcEquipId){
120         // Probably sometime we will need to handle these data 
121       }
122       break;
123     case kChargeAdcMarker:
124       if(fRawReader->GetEquipmentId() == kChargeAdcEquipId){
125         //Probably sometime we will need to handle these data 
126       }
127       break;
128     case kScalerMarker:
129       if(fRawReader->GetEquipmentId() == kScalerEquipId){
130         //Probably sometime we will need to handle these data 
131       }
132       break;
133     default:
134       break;
135     }
136   }
137   return isOK ;
138 }
139