AliRun *a; AliRunLoader *al; TGeoManager *g; //globals for easy manual manipulations
AliHMPID *h; AliLoader *hl; AliHMPIDParam *hp;
-Bool_t isGeomType=kFALSE;
Int_t nCurEvt=0;
Int_t nMaxEvt=0;
TControlBar *pMenu=0;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-void GetParam()
-{
- isGeomType=!isGeomType;
- if(g) delete g; if(hp) delete hp; //delete current TGeoManager and AliHMPIDParam
- if(isGeomType) g=TGeoManager::Import("geometry.root");
- else g=TGeoManager::Import("misaligned_geometry.root");
- hp=AliHMPIDParam::Instance();
-}//GetParam()
-//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void Hmenu()
{
TString status="Status: ";
status+="PROBLEM PROBLEM PROBLEM no galice.root";
status+=Form(" curent event %i",nCurEvt);
- GetParam();
+
+ AliHMPIDParam::Instance(); // geometry loaded
+
pMenu = new TControlBar("horizontal",status.Data(),0,0);
pMenu->AddButton(" ","","");
pMenu->AddButton(" General ","General()" ,"general items which do not depend on any files");
Double_t r2d=TMath::RadToDeg();
- Double_t x=AliHMPIDDigit::SizeAllX(),y=AliHMPIDDigit::SizeAllY();
+ Double_t x=AliHMPIDParam::SizeAllX(),y=AliHMPIDParam::SizeAllY();
Printf("\n\n\n");
cl->Print();
}//t1()
-void tst(Int_t nEvts=111,Int_t type=999)
-{
-
- TLegend *lQ=new TLegend(0.5,0.5,0.9,0.9);
-
- TH1F *hQ7 =new TH1F("hQ7" ,"" ,300,-50,2000); hQ7 ->SetLineColor(kRed); lQ->AddEntry(hQ7 ,"Ckov 7 eV"); hQ7->SetStats(0);
- TH1F *hQ200=new TH1F("hQ200","" ,300,-50,2000); hQ200->SetLineColor(kBlack); lQ->AddEntry(hQ200,"mip 200 eV");
- TH1F *hQ500=new TH1F("hQ500","" ,300,-50,2000); hQ500->SetLineColor(kCyan); lQ->AddEntry(hQ500,"mip 500 eV");
- TH1F *hQ900=new TH1F("hQ900","" ,300,-50,2000); hQ900->SetLineColor(kGreen); lQ->AddEntry(hQ900,"mip 900 eV");
-
- TH1F *hCluPerEvt=new TH1F("hCluPerEvt","# clusters per event",11,-0.5,10.5);
- TH1F *hCluChi2 =new TH1F("hChi2","Chi2 ",1000,0,100);
- TH1F *hCluFlg =new TH1F("hCluFlg","Cluster flag",14,-1.5,12.5); hCluFlg->SetFillColor(5);
- TH1F *hCluRawSize= new TH1F("hCluRawSize","Raw cluster size ",100,0,100);
-
- TH2F *pCluMapSi1=new TH2F("cluMapSi1","Size 1 map" ,1700,-10,160,1700,-10,160);
- TH2F *pCluMapLo0=new TH2F("cluMNoLo0","Loc Max 0 map" ,1700,-10,160,1700,-10,160);
- TH2F *pCluMapLo1=new TH2F("cluMapLo1","Loc Max 1 map" ,1700,-10,160,1700,-10,160);
- TH2F *pCluMapUnf=new TH2F("cluMapUnf","Unfolded map" ,1700,-10,160,1700,-10,160);
- TH2F *pCluMapEdg=new TH2F("cluMapEdg","On edge map" ,1700,-10,160,1700,-10,160);
- TH2F *pCluMapCoG=new TH2F("cluMapCoG","CoG map" ,1700,-10,160,1700,-10,160);
- TH2F *pCluMapEmp=new TH2F("cluMapEmp","undefined-empty" ,1700,-10,160,1700,-10,160);
-
- TH1F *hHitCluDifX = new TH1F("hHitCluDifX" ,";entries;x_{Hit}-x_{Clu} [cm]" ,2000,-2,2); hHitCluDifX->Sumw2(); hHitCluDifX->SetFillColor(kYellow);
- TH1F *hHitCluDifY = new TH1F("hHitCluDifY" ,";entries;y_{Hit}-y_{Clu} [cm]" ,2000,-2,2); hHitCluDifY->Sumw2(); hHitCluDifY->SetFillColor(kYellow);
- TH2F *hHitCluDifXY= new TH2F("hHitCluDifXY",";x_{Hit}-x_{Clu};y_{Hit}-y_{Clu}",2000,-2,2,2000,-2,2);hHitCluDifXY->Sumw2();
- TH1F *hHitCluDifQ = new TH1F("hHitCluDifQ" ,";entries;Q_{Hit}-Q_{Clu}" ,200 ,-100,100); hHitCluDifQ->Sumw2(); hHitCluDifQ->SetFillColor(kYellow);
-
- Float_t e200=200e-9,e500=500e-9,e900=900e-9,e7=7e-9;//predefined Eloss
-
-
- AliHMPIDHit hit(0,0,kProton,0,0,0);
- for(int i=0;i<10000;i++){hQ200->Fill(hit.QdcTot(e200)); hQ500->Fill(hit.QdcTot(e500)); hQ900->Fill(hit.QdcTot(e900)); hQ7 ->Fill(hit.QdcTot(e7));}
-
- TClonesArray hits("AliHMPIDHit"); TClonesArray sdigs("AliHMPIDDigit");
- TObjArray digs(7); for(Int_t i=0;i<7;i++) digs.AddAt(new TClonesArray("AliHMPIDDigit"),i);
- TObjArray clus(7); for(Int_t i=0;i<7;i++) clus.AddAt(new TClonesArray("AliHMPIDCluster"),i);
-
-
- for(Int_t iEvt=0;iEvt<nEvts;iEvt++){//events loop
- if(iEvt%500==0)Printf("============> iEvt = %d ",iEvt);
-
- Int_t ch,pid; Float_t e,hitx,hity,hitq;
- Int_t nHits=(type==999)?1:40;
- for(Int_t iHit=0;iHit<nHits;iHit++){//hits loop for the current event
- switch(iHit){
- case 0: ch=0;pid=kProton;e=e200;hitx=16.0+gRandom->Rndm()*0.8;hity= 16.8+gRandom->Rndm()*0.84;break; //mip ramdomly distributed in one pad in the middle
- case 1: ch=0;pid=kProton;e=e200;hitx=0.4;hity=0.42;break; //mip in left-hand bottom coner of chamber 0
- case 2: ch=0;pid=kProton;e=e200;hitx=0.4;hity=30 ;break; //mip on left edge of chamber 0
- case 3: ch=0;pid=kProton;e=e200;hitx=40; hity=0.42;break; //mip on bottom edge of chamber 0
- default: ch=gRandom->Rndm()*6; pid=(gRandom->Rndm()>0.9)? kProton:kCerenkov;
- if(pid==kProton)
- e=gRandom->Rndm()*900e-9;
- else
- e=5.5e-9+3e-9*gRandom->Rndm();
- x=gRandom->Rndm()*AliHMPIDDigit::SizeAllX(); y=gRandom->Rndm()*AliHMPIDDigit::SizeAllY();break; //random hit
- }
- new(hits[iHit]) AliHMPIDHit(ch,e,pid,iHit,hitx,hity);
- hitq=e;
- }//hits loop
-
- AliHMPIDv1::Hit2Sdi(&hits,&sdigs);
- AliHMPIDDigitizer::Sdi2Dig(&sdigs,&digs);
- AliHMPIDReconstructor::Dig2Clu(&digs,&clus);
-
- for(Int_t iCh=AliHMPIDDigit::kMinCh;iCh<=AliHMPIDDigit::kMaxCh;iCh++){//chambers loop
- TClonesArray *pDigs=(TClonesArray *)digs.UncheckedAt(iCh);
- TClonesArray *pClus=(TClonesArray *)clus.UncheckedAt(iCh);
-
- hCluPerEvt->Fill(pClus->GetEntriesFast());
- for(Int_t iClu=0;iClu<pClus->GetEntriesFast();iClu++){//clusters loop
- AliHMPIDCluster *pClu=(AliHMPIDCluster*)pClus->UncheckedAt(iClu);
- Float_t clux=pClu->X(); Float_t cluy=pClu->Y(); Float_t cluq=pClu->Q();
- hCluFlg->Fill(pClu->Status());
- hCluChi2->Fill(pClu->Chi2());
- hCluRawSize->Fill(pClu->Size());
-
- switch(pClu->Status()){
- case AliHMPIDCluster::kSi1: pCluMapSi1->Fill(clux,cluy); break;
- case AliHMPIDCluster::kLo1: pCluMapLo1->Fill(clux,cluy); break;
- case AliHMPIDCluster::kUnf: pCluMapUnf->Fill(clux,cluy); break;
- case AliHMPIDCluster::kMax: pCluMapMax->Fill(clux,cluy); break;
- case AliHMPIDCluster::kEdg: pCluMapEdg->Fill(clux,cluy); break;
- case AliHMPIDCluster::kCoG: pCluMapCoG->Fill(clux,cluy); break;
- case AliHMPIDCluster::kNoLoc: pCluMapNoLoc->Fill(clux,cluy); break;
- default: pCluMapEmp->Fill(clux,cluy); break;
- }
-
- hHitCluDifX->Fill(hitx-clux); hHitCluDifY->Fill(hity-cluy); hHitCluDifXY->Fill(hitx-clux,hity-cluy); hHitCluDifQ->Fill(hitq-cluq);
-
- }//clusters loop
- }//chambers loop
-
- hits.Delete(); sdigs.Delete(); for(int i = 0;i<7;i++){((TClonesArray*)digs.At(i))->Delete();((TClonesArray*)clus.At(i))->Delete();}
- }//events loop
-
- gStyle->SetPalette(1);
- TCanvas *pC2=new TCanvas("Digit canvas","Digit canvas",1280,800); pC2->Divide(3,3);
- pC2->cd(1);gPad->SetLogy(1);hHitCluDifX->Draw("hist");
- pC2->cd(2);gPad->SetLogy(1);hHitCluDifY->Draw("hist");
- pC2->cd(3);gPad->SetLogz(1);hHitCluDifXY->Draw("colz");
- pC2->cd(4);gPad->SetLogy(1);hHitCluDifQ->Draw("hist");
- pC2->cd(5);gPad->SetLogy(1);hCluFlg->Draw();
- pC2->cd(6);gPad->SetLogy(1);hCluChi2->Draw();
- pC2->cd(7); hCluRawSize->Draw();
- pC2->cd(8); hCluPerEvt->Draw("colz");
- pC2->cd(9); hQckov->Draw(); hQm200->Draw("same"); hQm500->Draw("same"); hQm900->Draw("same"); lQ->Draw();
- TCanvas *pC1=new TCanvas("ClusterMaps","Cluster maps",1280,800); pC1->Divide(3,3);
- pC1->cd(1); pCluMapSi1->Draw(); DrawPc(kFALSE);
- pC1->cd(2); pCluMapLo1->Draw(); DrawPc(kFALSE);
- pC1->cd(3); pCluMapUnf->Draw(); DrawPc(kFALSE);
- pC1->cd(5); pCluMapMax->Draw(); DrawPc(kFALSE);
- pC1->cd(6); pCluMapEdg->Draw(); DrawPc(kFALSE);
- pC1->cd(7); pCluMapCoG->Draw(); DrawPc(kFALSE);
- pC1->cd(8); pCluMapNoLoc->Draw();DrawPc(kFALSE);
- pC1->cd(9); pCluMapEmp->Draw(); DrawPc(kFALSE);
-
- pC1->SaveAs("$HOME/HitMaps.png"); //?????
- pC2->SaveAs("$HOME/HitCluDif.gif");
-
- Printf("Digits - raw -digits conversion...");
-
- AliHMPIDDigit d1,d2; Int_t ddl,r,d,a;UInt_t w32;
- for(Int_t iCh=AliHMPIDDigit::kMinCh;iCh<=AliHMPIDDigit::kMaxCh;iCh++)
- for(Int_t iPc=AliHMPIDDigit::kMinPc;iPc<=AliHMPIDDigit::kMaxPc;iPc++)
- for(Int_t iPx=AliHMPIDDigit::kMinPx;iPx<=AliHMPIDDigit::kMaxPx;iPx++)
- for(Int_t iPy=AliHMPIDDigit::kMinPy;iPy<=AliHMPIDDigit::kMaxPy;iPy++){
- d1.Set(iCh,iPc,iPx,iPy,3040); //set digit
- d1.Raw(w32,ddl,r,d,a); //get raw word for this digit
- d2.Raw(w32,ddl); //set another digit from that raw word
- if(d1.Compare(&d2)) {d1.Print(); d2.Print(); Printf("");}//compare them
- }
- Printf("OK");
-}//tst()
-
-
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void hp(Int_t iEvt=0)
{
Printf("totally %i clusters for event %i",iCluCnt,iEvt);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-void ttt()
-{
- TClonesArray hits ("AliHMPIDDigit");
- TClonesArray sdigs("AliHMPIDDigit");
-
- AliHMPIDHit hit(0,45e-9,kProton,33,0,0);
- hit.Hit2Sdi(&sdigs);
- sdigs.Print();
-}
-
-
-#include "Hdisp.C"