]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HMPID/AliHMPIDDigit.cxx
Getting the trigger descriptors from CDB
[u/mrichter/AliRoot.git] / HMPID / AliHMPIDDigit.cxx
index 3b14f0f7aa0cd5f2771d9c3797231bd23f37e90d..b1d8b26fa80ab0a2480de1dbe18df24983aedea8 100644 (file)
 //  * provided "as is" without express or implied warranty.                  *
 //  **************************************************************************
 
-#include "AliHMPIDDigit.h" //class header
-#include <TClonesArray.h>  //Hit2Sdi() 
-#include <TMarker.h>       //Draw() 
-ClassImp(AliHMPIDDigit)
-
-const Float_t AliHMPIDDigit::fMinPcX[]={0,SizePcX() + SizeDead(),0,SizePcX() + SizeDead(),       0,SizePcX() + SizeDead()};
-const Float_t AliHMPIDDigit::fMinPcY[]={0,                     0,SizePcY()+SizeDead(),SizePcY() + SizeDead(),2*(SizePcY()+SizeDead()),2*(SizePcY()+SizeDead())};
-
-const Float_t AliHMPIDDigit::fMaxPcX[]={SizePcX(),SizeAllX(),SizePcX(),SizeAllX(),SizePcX(),SizeAllX()};
-const Float_t AliHMPIDDigit::fMaxPcY[]={SizePcY(),SizePcY(),SizeAllY() - SizePcY(),SizeAllY() - SizePcY(),SizeAllY(),SizeAllY()};
+#include "AliHMPIDDigit.h"    //class header
+#include <TClonesArray.h>     //WriteRaw() 
+#include <TBox.h>             //Draw() 
+#include <TPolyLine.h>        //Draw() 
+#include <AliRawDataHeader.h> //WriteRaw()
+#include "AliHMPIDParam.h"
+#include <AliDAQ.h>           //WriteRaw()
+#include "Riostream.h"        //WriteRaw()
+#include "AliFstream.h"   
 
+ClassImp(AliHMPIDDigit)
 
 /*
-Preface: all geometrical information (like left-right sides) is reported as seen from electronic side.
+ Preface: all geometrical information (like left-right sides) is reported as seen from electronic side.
+     d10          d1    d10          d1 
+      _______________    _______________          
+r24  |               |  |               |126.16   r1
+     |       4       |  |       5       | 
+     |               |  |               | 
+     |_______________|  |_______________|85.84 
+      _______________    _______________
+     |               |  |               |83.24  
+     |       2       |  |       3       |
+     |               |  |               |             
+     |_______________|  |_______________|42.92
+      _______________    _______________
+     |               |  |               |40.32
+     |       0       |  |       1       |
+     |               |  |               |
+r1   |_______________|  |_______________|0        r24
+      0           64.0  66.6        130.6 
+
 
 
 The DDL file starts with common header which size and structure is standartized and mandatory for all detectors. 
@@ -75,62 +94,78 @@ HMPID raw word is 32 bits with the structure:
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 void AliHMPIDDigit::Draw(Option_t*)
 {
-  TMarker *pMark=new TMarker(LorsX(),LorsY(),25); pMark->SetMarkerColor(kGreen); pMark->Draw();
-}
-//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-void AliHMPIDDigit::Hit2Sdi(AliHMPIDHit *pHit,TClonesArray *pSdiLst)
-{
-// Creates a list of sdigits out of provided hit
-// Arguments: pHit- hit
-//   Returns: none
-  
-  Int_t iSdiCnt=pSdiLst->GetEntries(); //list of sdigits contains sdigits from previous ivocations of Hit2Sdi, do not override them
-  AliHMPIDDigit dig;
-  for(Int_t i=0;i<9;i++){                                      //affected pads loop
-    dig.Set(pHit,i); //c,q,tid,x,y   create tmp sdigit for pad i around hit position
-    if(dig.PadPcX()==-1) continue;
-    new((*pSdiLst)[iSdiCnt++]) AliHMPIDDigit(dig);
+//  TMarker *pMark=new TMarker(LorsX(),LorsY(),25); pMark->SetMarkerColor(kGreen);pMark->Draw();
+  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*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;
+    case 1: pad->SetFillColor(kBlue+4); break;
+    case 2: pad->SetFillColor(kCyan); break;
+    case 3: pad->SetFillColor(kCyan+4); break;
+    case 4: pad->SetFillColor(kGreen); break;
+    case 5: pad->SetFillColor(kGreen+4); break;
+    case 6: pad->SetFillColor(kYellow); break;
+    case 7: pad->SetFillColor(kYellow+4); break;
+    default: pad->SetFillColor(kRed);      break;
   }
-}//Hit2Sdi()
+   pad->SetUniqueID((Int_t)fQ);
+  pad->Draw();line->Draw();
+}
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-void AliHMPIDDigit::Print(Option_t*)const
+void AliHMPIDDigit::Print(Option_t *opt)const
 {
 // Print current digit  
 // Arguments: option string not used
 //   Returns: none    
-  UInt_t w32; Raw(w32);
-  Printf("DIG:(%7.3f,%7.3f) Q=%8.3f (ch=%1i,pc=%1i,x=%2i,y=%2i)  TID=(%5i,%5i,%5i) ddl=%i raw=0x%x (r=%2i,d=%2i,a=%2i) %s",
-              LorsX(),LorsY(),Q(), A2C(fPad),A2P(fPad),A2X(fPad),A2Y(fPad),   
-              fTracks[0],fTracks[1],fTracks[2],DdlIdx(),w32,Row(),Dilogic(),Addr(), 
-              (IsOverTh(Q()))?"":"!!!");
-}
-//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-void AliHMPIDDigit::PrintSize()
-{
-// Print all segmentaion related sizes
-// Arguments: none
-//   Returns: none    
-  Printf("-->pad    =(%6.2f,%6.2f) cm dead zone %.2f cm\n"
-         "-->PC     =(%6.2f,%6.2f) cm (%3i,%3i) pads\n"
-         "-->all PCs=(%6.2f,%6.2f) cm (%3i,%3i) pads",
-               SizePadX(),SizePadY(),SizeDead(),
-               SizePcX() ,SizePcY() ,kPadPcX ,kPadPcY,
-               SizeAllX(),SizeAllY(),kPadAllX,kPadAllY);
+  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,  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::Test()
+void AliHMPIDDigit::WriteRaw(TObjArray *pDigAll)
 {
-  AliHMPIDDigit d1,d2; Int_t ddl;UInt_t w32;
-  for(Int_t i=0;i<10000;i++){
-    Int_t ch=Int_t(gRandom->Rndm()*7);
-    Int_t pc=Int_t(gRandom->Rndm()*6);
-    Int_t px=Int_t(gRandom->Rndm()*80);
-    Int_t py=Int_t(gRandom->Rndm()*48);
-    d1.Manual2(ch,pc,px,py);                
-    ddl=d1.Raw(w32);    d2.Raw(ddl,w32);
-    if(d1.Compare(&d2)) Printf("Problem!!!");
-  }
-  Printf("OK");
-}//Test()
+// Write a list of digits for a given chamber in raw data stream
+// Arguments: pDigAll- list of digits 
+//   Returns: none      
+  for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++){//chambers loop
+    AliFstream* ddlL;                                 //output streams, 2 per chamber
+    AliFstream* ddlR;                          
+    Int_t    cntL=0,cntR=0;                           //data words counters for DDLs
+    AliRawDataHeader header; header.SetAttribute(0);  //empty DDL header
+
+//    ddlL = new AliFstream(AliDAQ::DdlFileName("HMPID",2*iCh)); 
+//    ddlR = new AliFstream(AliDAQ::DdlFileName("HMPID",2*iCh+1));      //open both DDL of this chamber in parallel
+    ddlL = new AliFstream(AliDAQ::DdlFileName("HMPID",2*iCh+1)); //left and right looking at the IP
+    ddlR = new AliFstream(AliDAQ::DdlFileName("HMPID",2*iCh));   //open both DDL of this chamber in parallel
+    ddlL->WriteBuffer((char*)&header,sizeof(header));            //write dummy header as place holder, actual 
+    ddlR->WriteBuffer((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->WriteBuffer((char*)&w32,sizeof(w32));  cntL++;
+      }else{
+        ddlR->WriteBuffer((char*)&w32,sizeof(w32));  cntR++;
+      }
+    }//digits  loop
+
+    header.fSize=sizeof(header)+cntL*sizeof(w32); ddlL->Seekp(0); ddlL->WriteBuffer((char*)&header,sizeof(header)); delete ddlL; //rewrite header with size set to
+    header.fSize=sizeof(header)+cntR*sizeof(w32); ddlR->Seekp(0); ddlR->WriteBuffer((char*)&header,sizeof(header)); delete ddlR; //number of bytes and close file
+  }//chambers loop
+}//WriteRaw()
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-