#include <TBox.h> //Draw()
#include <TPolyLine.h> //Draw()
#include <AliRawDataHeader.h> //WriteRaw()
+#include "AliHMPIDParam.h"
#include <AliDAQ.h> //WriteRaw()
-#include <Riostream.h> //WriteRaw()
-ClassImp(AliHMPIDDigit)
-
-const Float_t AliHMPIDDigit::fMinPcX[]={ 0.00 , 66.60 , 0.00 , 66.60 , 0.00 , 66.60};
-const Float_t AliHMPIDDigit::fMaxPcX[]={64.00 , 130.60 , 64.00 , 130.60 , 64.00 , 130.60};
-
-const Float_t AliHMPIDDigit::fMinPcY[]={ 0.00 , 0.00 , 42.92 , 42.92, 85.84, 85.84};
-const Float_t AliHMPIDDigit::fMaxPcY[]={40.32 , 40.32, 83.24 , 83.24, 126.16, 126.16};
-
-const Float_t AliHMPIDDigit::k1 =0.28278796;
-const Float_t AliHMPIDDigit::k2 =0.96242952;
-const Float_t AliHMPIDDigit::kSqrtK3 =0.77459667;
-const Float_t AliHMPIDDigit::k4 =0.37932926;
-
-Int_t AliHMPIDDigit::fSigmas=4;
+#include "Riostream.h" //WriteRaw()
+#include "AliFstream.h"
+ClassImp(AliHMPIDDigit)
/*
Preface: all geometrical information (like left-right sides) is reported as seen from electronic side.
- d10 d1 d10 d1
+ d10 d1 d10 d1
_______________ _______________
-r24 | | | |126.16 r1
+r1 | | | |126.16 r24
| 4 | | 5 |
| | | |
|_______________| |_______________|85.84
| | | |40.32
| 0 | | 1 |
| | | |
-r1 |_______________| |_______________|0 r24
- 0 64.0 66.6 130.6
+r24 |_______________| |_______________|0 r1 //updated: 15/02/2008
+ 0 64.0 66.6 130.6 //corrected: 05/08/2009 clm
void AliHMPIDDigit::Draw(Option_t*)
{
// TMarker *pMark=new TMarker(LorsX(),LorsY(),25); pMark->SetMarkerColor(kGreen);pMark->Draw();
- TBox *pad = new TBox(LorsX()-0.5*SizePadX(),LorsY()-0.5*SizePadY(),LorsX()+0.5*SizePadX(),LorsY()+0.5*SizePadY());
+ TBox *pad = new
+
+TBox(LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY(),LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
TPolyLine *line=new TPolyLine(5);
- line->SetPoint(0,LorsX()-0.5*SizePadX(),LorsY()-0.5*SizePadY());
- line->SetPoint(1,LorsX()-0.5*SizePadX(),LorsY()+0.5*SizePadY());
- line->SetPoint(2,LorsX()+0.5*SizePadX(),LorsY()+0.5*SizePadY());
- line->SetPoint(3,LorsX()+0.5*SizePadX(),LorsY()-0.5*SizePadY());
- line->SetPoint(4,LorsX()-0.5*SizePadX(),LorsY()-0.5*SizePadY());
+ line->SetPoint(0,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
+ line->SetPoint(1,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
+ line->SetPoint(2,LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()+0.5*AliHMPIDParam::SizePadY());
+ line->SetPoint(3,LorsX()+0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
+ line->SetPoint(4,LorsX()-0.5*AliHMPIDParam::SizePadX(),LorsY()-0.5*AliHMPIDParam::SizePadY());
Int_t slice=(Int_t)fQ/20;
switch(slice){
case 0: pad->SetFillColor(kBlue); break;
UInt_t w32; Int_t ddl,r,d,a;
Raw(w32,ddl,r,d,a);
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",
- opt, A2C(fPad),A2P(fPad),A2X(fPad),A2Y(fPad),LorsX(),LorsY(), Q(), fTracks[0],fTracks[1],fTracks[2],w32,ddl,r,d,a, (IsOverTh(Q()))?"":"below thr");
+ opt, AliHMPIDParam::A2C(fPad),AliHMPIDParam::A2P(fPad),AliHMPIDParam::A2X(fPad),AliHMPIDParam::A2Y(fPad),LorsX(),LorsY(), Q(),
+ fTracks[0],fTracks[1],fTracks[2],w32,ddl,r,d,a, (AliHMPIDParam::IsOverTh(Q()))?"":"below thr");
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-void AliHMPIDDigit::WriteRaw(TObjArray *pDigAll)
-{
-// Write a list of digits for a given chamber in raw data stream
-// Arguments: pDigAll- list of digits
-// Returns: none
- for(Int_t iCh=kMinCh;iCh<=kMaxCh;iCh++){//chambers loop
- ofstream ddlL,ddlR; //output streams, 2 per chamber
- Int_t cntL=0,cntR=0; //data words counters for DDLs
- AliRawDataHeader header; header.SetAttribute(0); //empty DDL header
-
- ddlL.open(AliDAQ::DdlFileName("HMPID",2*iCh));
- ddlR.open(AliDAQ::DdlFileName("HMPID",2*iCh+1)); //open both DDL of this chamber in parallel
- ddlL.write((char*)&header,sizeof(header)); //write dummy header as place holder, actual
- ddlR.write((char*)&header,sizeof(header)); //will be rewritten later when total size of DDL is known
-
- UInt_t w32=0; //32 bits data word
- TClonesArray *pDigCh=(TClonesArray *)pDigAll->At(iCh); //list of digits for current chamber
- for(Int_t iDig=0;iDig<pDigCh->GetEntriesFast();iDig++){//digits loop
- AliHMPIDDigit *pDig=(AliHMPIDDigit*)pDigCh->At(iDig);
- if(pDig->Q() < 1) continue;
- Int_t ddl,r,d,a; //32 bits data word
- pDig->Raw(w32,ddl,r,d,a);
- if(ddl%2){
- ddlL.write((char*)&w32,sizeof(w32)); cntL++;
- }else{
- ddlR.write((char*)&w32,sizeof(w32)); cntR++;
- }
- }//digits loop
-
- header.fSize=sizeof(header)+cntL*sizeof(w32); ddlL.seekp(0); ddlL.write((char*)&header,sizeof(header)); ddlL.close(); //rewrite header with size set to
- header.fSize=sizeof(header)+cntR*sizeof(w32); ddlR.seekp(0); ddlR.write((char*)&header,sizeof(header)); ddlR.close(); //number of bytes and close file
- }//chambers loop
-}//WriteRaw()
-//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++