X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=HMPID%2FAliHMPIDDigit.cxx;h=01380fbb6b69bf7717909c30cc3f47a020a0d21d;hb=a97abca8c112f895e1a70b1612803e3fe8cac9ac;hp=18ddfe7bba2fc8e4188c6198a7d60183adf3da5c;hpb=3c6274c1849fbc3ebd7554982d9948ddf9430756;p=u%2Fmrichter%2FAliRoot.git diff --git a/HMPID/AliHMPIDDigit.cxx b/HMPID/AliHMPIDDigit.cxx index 18ddfe7bba2..01380fbb6b6 100644 --- a/HMPID/AliHMPIDDigit.cxx +++ b/HMPID/AliHMPIDDigit.cxx @@ -13,19 +13,39 @@ // * provided "as is" without express or implied warranty. * // ************************************************************************** -#include "AliHMPIDDigit.h" //class header -#include "AliHMPIDHit.h" //Hit2Sdi() -#include //Hit2Sdi() -#include //TestSeg() -#include //TestSeg() -#include //TestSeg() -#include //DrawPc() -#include //Zoom() -#include //Zoom() +#include "AliHMPIDDigit.h" //class header +#include //WriteRaw() +#include //Draw() +#include //Draw() +#include //WriteRaw() +#include "AliHMPIDParam.h" +#include //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. @@ -72,156 +92,43 @@ HMPID raw word is 32 bits with the structure: 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) */ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void AliHMPIDDigit::Hit2Sdi(AliHMPIDHit *pHit,TClonesArray *pSdiLst) +void AliHMPIDDigit::Draw(Option_t*) { -// 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("(ch=%1i,pc=%1i,x=%2i,y=%2i) (%7.3f,%7.3f) Q=%8.3f TID=(%5i,%5i,%5i) ddl=%i raw=0x%x (r=%2i,d=%2i,a=%2i) %s", - A2C(fPad),A2P(fPad),A2X(fPad),A2Y(fPad),LorsX(),LorsY(), Q(), fTracks[0],fTracks[1],fTracks[2],DdlIdx(),w32,Row(),Dilogic(),Addr(), (IsOverTh(Q()))?"":"below thr"); + 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::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); -} -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void AliHMPIDDigit::DrawSeg() -{ -// Draws the picture of segmentation -// Arguments: none -// Returns: none - TCanvas *pC=new TCanvas("pads","View from electronics side, IP is behind the picture.",1000,900);pC->ToggleEventStatus(); - gPad->AddExec("test","AliHMPIDDigit::DrawZoom()"); - DrawPc(); -}//TestSeg() -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void AliHMPIDDigit::DrawZoom() -{ -// Show info about current cursur position in status bar of the canvas -// Arguments: none -// Returns: none - TCanvas *pC=(TCanvas*)gPad; - TRootCanvas *pRC= (TRootCanvas*)pC->GetCanvasImp(); - TGStatusBar *pBar=pRC->GetStatusBar(); - pBar->SetParts(5); - Float_t x=gPad->AbsPixeltoX(gPad->GetEventX()); - Float_t y=gPad->AbsPixeltoY(gPad->GetEventY()); - AliHMPIDDigit dig;dig.Manual1(1,x,y); UInt_t w32=0; - if(IsInDead(x,y)) - pBar->SetText("Out of sensitive area",4); - else{ - Int_t ddl=dig.Raw(w32); - pBar->SetText(Form("(p%i,x%i,y%i) ddl=%i 0x%x (r%i,d%i,a%i) (%.2f,%.2f)", - dig.Pc(),dig.PadPcX(),dig.PadPcY(), - ddl,w32, - dig.Row(),dig.Dilogic(),dig.Addr(), - dig.LorsX(),dig.LorsY() ),4); - } - if(gPad->GetEvent()==1){ - new TCanvas("zoom",Form("Row %i DILOGIC %i",dig.Row(),dig.Dilogic())); - } -}//Zoom() -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void AliHMPIDDigit::DrawPc(Bool_t isFill) -{ -// Utility methode draws HMPID chamber PCs on event display. -// Arguments: none -// Returns: none -// y6 ---------- ---------- -// | | | | -// | 4 | | 5 | -// y5 ---------- ---------- -// -// y4 ---------- ---------- -// | | | | -// | 2 | | 3 | view from electronics side -// y3 ---------- ---------- -// -// y2 ---------- ---------- -// | | | | -// | 0 | | 1 | -// y1 ---------- ---------- -// x1 x2 x3 x4 - gPad->Range(-5,-5,SizeAllX()+5,SizeAllY()+5); - Float_t x1=0,x2=SizePcX(),x3=SizePcX()+SizeDead(), x4=SizeAllX(); - Float_t y1=0,y2=SizePcY(),y3=SizePcY()+SizeDead(),y4=2*SizePcY()+SizeDead(),y5=SizeAllY()-SizePcY(),y6=SizeAllY(); - - Float_t xL[5]={x1,x1,x2,x2,x1}; //clockwise - Float_t xR[5]={x3,x3,x4,x4,x3}; - Float_t yD[5]={y1,y2,y2,y1,y1}; - Float_t yC[5]={y3,y4,y4,y3,y3}; - Float_t yU[5]={y5,y6,y6,y5,y5}; - - TLatex txt; txt.SetTextSize(0.01); - Int_t iColLeft=29,iColRight=41; - TPolyLine *pc=0; TLine *pL; - AliHMPIDDigit dig; - for(Int_t iPc=0;iPcSetFillColor(iColLeft): pc->SetFillColor(iColRight); - if(isFill) pc->Draw("f"); else pc->Draw(); - if(iPc%2) {dig.Manual2(0,iPc,79,25); txt.DrawText(dig.LorsX()+2,dig.LorsY(),Form("PC%i",dig.Pc()));}//print PC# - - txt.SetTextAlign(32); - for(Int_t iRow=0;iRow<8 ;iRow++){//draw row lines (horizontal) - dig.Manual2(0,iPc,0,iRow*6); //set digit to the left-down pad of this row - if(iPc%2) txt.DrawText(dig.LorsX()-1 ,dig.LorsY(),Form("%i",dig.PadPcY())); //print PadY# - txt.DrawText(dig.LorsX()-1+(iPc%2)*67,dig.LorsY()+2,Form("r%i",dig.Row())); //print Row# - pL=new TLine(dig.LorsX()-0.5*SizePadX(),dig.LorsY()-0.5*SizePadY(),dig.LorsX()+SizePcX()-0.5*SizePadX(),dig.LorsY()-0.5*SizePadY()); - if(iRow!=0) pL->Draw(); - }//row loop - - txt.SetTextAlign(13); - for(Int_t iDil=0;iDil<10;iDil++){//draw dilogic lines (vertical) - dig.Manual2(0,iPc,iDil*8,0); //set this digit to the left-down pad of this dilogic - txt.DrawText(dig.LorsX() ,dig.LorsY()-1,Form("%i",dig.PadPcX())); //print PadX# - if(iPc==4 || iPc==5) txt.DrawText(dig.LorsX()+2,dig.LorsY()+42,Form("d%i",dig.Dilogic())); //print Dilogic# - pL=new TLine(dig.LorsX()-0.5*SizePadX(),dig.LorsY()-0.5*SizePadY(),dig.LorsX()-0.5*SizePadX(),dig.LorsY()+SizePcY()-0.5*SizePadY()); - if(iDil!=0)pL->Draw(); - }//dilogic loop - }//PC loop -}//DrawPc() -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void AliHMPIDDigit::Test() -{ - 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() -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -