TCanvas *pAll=0;
AliRunLoader *gAL=0; AliLoader *gHL=0; AliESD *gEsd=0; TTree *gEsdTr=0; AliHMPID *gH=0;
Int_t gEvt=0; Int_t gMaxEvt=0;
+TObjArray *pNmean;
+
+TChain *pCosCh=new TChain("cosmic"); //clm: Define TChain for cosmic
+TObjArray *pCosDigAll=0; //clm: Define global Digits
+TObjArray *pCosCluAll=0; //clm: Define global Clusters
+Int_t gCosRun=0; //clm: global cosmic event number
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-void Hdisp()
+void Hdisp(Int_t cosRun=44) //clm: Select cosmic file for display
{//display events from files if any in current directory or simulated events
pAll=new TCanvas("all","",1300,900); pAll->Divide(3,3,0,0);
// pAll->ToggleEditor();
pAll->Connect("ProcessedEvent(Int_t,Int_t,Int_t,TObject*)",0,"","DoZoom(Int_t,Int_t,Int_t,TObject*)");
-
- if(gSystem->IsFileInIncludePath("galice.root")){// tries to open session
- if(gAlice) delete gAlice; //in case we execute this in aliroot delete default AliRun object
- gAL=AliRunLoader::Open(); //try to open galice.root from current dir
- gAL->LoadgAlice(); //take new AliRun object from galice.root
- gHL=gAL->GetDetectorLoader("HMPID"); gH=(AliHMPID*)gAL->GetAliRun()->GetDetector("HMPID"); //get HMPID object from galice.root
- gMaxEvt=gAL->GetNumberOfEvents()-1;
- gHL->LoadHits(); gHL->LoadSDigits(); gHL->LoadDigits(); gHL->LoadRecPoints();
- TFile *pEsdFl=TFile::Open("AliESDs.root"); gEsdTr=(TTree*) pEsdFl->Get("esdTree"); gEsdTr->SetBranchAddress("ESD", &gEsd);
- pAll->cd(7); TButton *pBtn=new TButton("Next","ReadEvt()",0,0,0.2,0.1); pBtn->Draw();
- TButton *pHitBtn=new TButton("Print hits","PrintHits()",0,0.2,0.3,0.3); pHitBtn->Draw();
- TButton *pSdiBtn=new TButton("Print sdis","PrintSdis()",0,0.4,0.3,0.5); pSdiBtn->Draw();
- TButton *pDigBtn=new TButton("Print digs","PrintDigs()",0,0.6,0.3,0.7); pDigBtn->Draw();
- TButton *pCluBtn=new TButton("Print clus","PrintClus()",0,0.8,0.3,0.9); pCluBtn->Draw();
- ReadEvt();
- }else{
- pAll->cd(7); TButton *pBtn=new TButton("Next","SimEvt()",0,0,0.2,0.1); pBtn->Draw();
- SimEvt();
- }
+ OpenCalib();
+ if(gSystem->IsFileInIncludePath("galice.root")){// tries to open session
+ if(gAlice) delete gAlice; //in case we execute this in aliroot delete default AliRun object
+ gAL=AliRunLoader::Open(); //try to open galice.root from current dir
+ gAL->LoadgAlice(); //take new AliRun object from galice.root
+ gHL=gAL->GetDetectorLoader("HMPID"); gH=(AliHMPID*)gAL->GetAliRun()->GetDetector("HMPID"); //get HMPID object from galice.root
+ gMaxEvt=gAL->GetNumberOfEvents()-1;
+ gHL->LoadHits(); gHL->LoadSDigits(); gHL->LoadDigits(); gHL->LoadRecPoints();
+
+ TFile *pEsdFl=TFile::Open("AliESDs.root"); gEsdTr=(TTree*) pEsdFl->Get("esdTree"); gEsdTr->SetBranchAddress("ESD", &gEsd);
+ pAll->cd(7); TButton *pBtn=new TButton("Next","ReadEvt()",0,0,0.2,0.1); pBtn->Draw();
+ TButton *pHitBtn=new TButton("Print hits","PrintHits()",0,0.2,0.3,0.3); pHitBtn->Draw();
+ TButton *pSdiBtn=new TButton("Print sdis","PrintSdis()",0,0.4,0.3,0.5); pSdiBtn->Draw();
+ TButton *pDigBtn=new TButton("Print digs","PrintDigs()",0,0.6,0.3,0.7); pDigBtn->Draw();
+ TButton *pCluBtn=new TButton("Print clus","PrintClus()",0,0.8,0.3,0.9); pCluBtn->Draw();
+ ReadEvt();
+ }
+ else if ( gSystem->IsFileInIncludePath(Form("cosmic%d.root",cosRun))){ //clm: Check if cosmic file is in the folder
+ gCosRun=cosRun;
+ pCosCh->Add(Form("cosmic%d.root",gCosRun)); //clm: Add cosmic file to chain
+ pCosCh->SetBranchAddress("Digs",&pCosDigAll); //clm: Set digit branch address
+ pCosCh->SetBranchAddress("Clus",&pCosCluAll); //clm: Set cluster branch address
+ gMaxEvt=pCosCh->GetEntries()-1; //clm: Get number of events from the cosmic chain
+ pAll->cd(7); TButton *pCosBtn=new TButton("Next Cosmic","ReadCosEvt()",0,0,0.3,0.1); pCosBtn->Draw(); //clm: define next button
+ ReadCosEvt(); //clm: Read first cosmic event
+ }
+ else{
+ pAll->cd(7); TButton *pBtn=new TButton("Next","SimEvt()",0,0,0.2,0.1); pBtn->Draw();
+ SimEvt();
+ }
+}
+
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void ReadCosEvt()
+{// Read curent cosmic event and display it assumes that session is alredy opened
+ if(gEvt>gMaxEvt) gEvt=0; if(gEvt<0) gEvt=gMaxEvt; //clm: set event limits
+ pCosCh->GetEntry(gEvt); //clm: read event from chain
+ DrawCosEvt(pCosDigAll,pCosCluAll); //clm: draw cosmic event
+ gEvt++;
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void ReadEvt()
gEsdTr->GetEntry(gEvt); gAL->GetEvent(gEvt);
ReadHits(&hits); gHL->TreeS()->GetEntry(0); gHL->TreeD()->GetEntry(0); gHL->TreeR()->GetEntry(0);
-
-
+
DrawEvt(&hits,gH->DigLst(),gH->CluLst(),gEsd);
gEvt++;
}
AliHMPIDv1::Hit2Sdi(&hits,&sdig);
AliHMPIDDigitizer::Sdi2Dig(&sdig,&digs);
AliHMPIDReconstructor::Dig2Clu(&digs,&clus);
- AliHMPIDTracker::Recon(&esd,&clus,OpenCalib());
+ AliHMPIDTracker::Recon(&esd,&clus,pNmean);
pAll->cd(3); gPad->Clear(); TLatex txt;txt.DrawLatex(0.2,0.2,Form("Simulated event %i",gEvt));
DrawEvt(&hits,&digs,&clus,&esd);
AliHMPIDRecon rec;
- Int_t hc=0; TVector2 pos;
+ Int_t hc=0;
for(Int_t iTrk=0;iTrk<pEsd->GetNumberOfTracks();iTrk++){//tracks loop
AliESDtrack *pTrk=pEsd->GetTrack(iTrk);
Float_t xRa,yRa;
rec.SetTrack(xRa,yRa,theta,phi);
if(!AliHMPIDDigit::IsInDead(xPc,yPc)) new((*pHits)[hc++]) AliHMPIDHit(ch,200e-9,kProton ,iTrk,xPc,yPc); //mip hit
- /*
- for(int i=0;i<4;i++) {
- Float_t x=gRandom->Rndm()*130;Float_t y=gRandom->Rndm()*126;
- if(!AliHMPIDDigit::IsInDead(x,y)) new((*pHits)[hc++]) AliHMPIDHit(ch,7.5e-9,kFeedback,iTrk,x,y); //bkg hits 4 per track
- }
- */
Int_t nPhots = (Int_t)(20.*TMath::Power(TMath::Sin(ckov),2)/TMath::Power(TMath::Sin(TMath::ACos(1./1.292)),2));
for(int i=0;i<nPhots;i++){
- rec.TracePhot(ckov,gRandom->Rndm()*TMath::TwoPi(),pos);
+ TVector2 pos;
+ pos=rec.TracePhot(ckov,gRandom->Rndm()*TMath::TwoPi());
if(!AliHMPIDDigit::IsInDead(pos.X(),pos.Y())) new((*pHits)[hc++]) AliHMPIDHit(ch,7.5e-9,kCerenkov,iTrk,pos.X(),pos.Y());
} //photon hits
}//tracks loop
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void DrawEvt(TClonesArray *pHitLst,TObjArray *pDigLst,TObjArray *pCluLst,AliESD *pEsd)
{//draws all the objects of current event in given canvas
-
AliHMPIDRecon rec;
TPolyMarker *pTxC[7], *pRin[7]; TMarker *pMip,*pCko,*pFee,*pDig,*pClu;
pMip=new TMarker; pMip->SetMarkerColor(kRed); pMip->SetMarkerStyle(kOpenTriangleUp);
Int_t ch=pTrk->GetHMPIDcluIdx();
if(ch<0) continue; //this track does not hit HMPID
ch/=1000000;
- Float_t th,ph,xPc,yPc; pTrk->GetHMPIDtrk(xPc,yPc,th,ph); //get info on current track
- pTxC[ch]->SetNextPoint(xPc,yPc); //add new intersection point
+ Float_t th,ph,xRad,yRad; pTrk->GetHMPIDtrk(xRad,yRad,th,ph);//get info on current track
+// pTxC[ch]->SetNextPoint(xPc,yPc); //add new intersection point TEMPORARLY DISABLED...no more available in ESD!
Float_t ckov=pTrk->GetHMPIDsignal(); Float_t err=TMath::Sqrt(pTrk->GetHMPIDchi2());
if(ckov>0){
- rec.SetTrack(xPc,yPc,th,ph);
- TVector2 pos;
- for(int j=0;j<100;j++){
- rec.TracePhot(ckov,j*0.0628,pos);
+ Printf("theta %f phi %f ckov %f",th*TMath::RadToDeg(),ph*TMath::RadToDeg(),ckov);
+ rec.SetTrack(xRad,yRad,th,ph);
+ for(Int_t j=0;j<100;j++){
+ TVector2 pos;
+ pos=rec.TracePhot(ckov,j*0.0628);
if(!AliHMPIDDigit::IsInDead(pos.X(),pos.Y())) pRin[ch]->SetNextPoint(pos.X(),pos.Y());
}
}
}//tracks loop
- Int_t totHit=pHitLst->GetEntriesFast(),totDig=0,totClu=0,totTxC=0;
+ Int_t totHit=pHitLst->GetEntriesFast(),totDig=0,totClu=0,totTxC=0;
+ Int_t totCkov=0, totFeed=0,totMip=0;
for(Int_t iCh=0;iCh<7;iCh++){//chambers loop
totTxC+=pTxC[iCh]->GetN();
totDig+=((TClonesArray*)pDigLst->At(iCh))->GetEntriesFast();
gPad->SetEditable(kTRUE); gPad->Clear();
DrawCh(iCh);
- for(Int_t iHit=0;iHit<pHitLst->GetEntriesFast();iHit++){
+ ((TClonesArray*)pDigLst->At(iCh))->Draw(); //draw digits
+
+ totCkov=0;totFeed=0;totMip=0;
+ for(Int_t iHit=0;iHit<pHitLst->GetEntriesFast();iHit++){ // Draw hits
AliHMPIDHit *pHit=(AliHMPIDHit*)pHitLst->At(iHit);
if(pHit->Ch()==iCh) pHit->Draw();
+ if(pHit->Pid()==50000050) totCkov++;
+ else if(pHit->Pid()==50000051) totFeed++;
+ else totMip++;
}
- ((TClonesArray*)pDigLst->At(iCh))->Draw(); //draw digits
- ((TClonesArray*)pCluLst->At(iCh))->Draw(); //draw clusters
- pTxC[iCh]->Draw(); //draw intersections
- pRin[iCh]->Draw("CLP"); //draw rings
+ ((TClonesArray*)pCluLst->At(iCh))->Draw(); //draw clusters
+ pTxC[iCh]->Draw(); //draw intersections
+ pRin[iCh]->Draw("CLP"); //draw rings
gPad->SetEditable(kFALSE);
}//chambers loop
pAll->cd(3); gPad->Clear(); TLegend *pLeg=new TLegend(0.2,0.2,0.8,0.8);
pLeg->SetHeader(Form("Event %i Total %i",gEvt,gMaxEvt+1));
pLeg->AddEntry(pTxC[0],Form("TRKxPC %i" ,totTxC),"p");
- pLeg->AddEntry(pMip ,Form("Mip hits %i" ,totHit),"p");
- pLeg->AddEntry(pCko ,Form("Ckov hits %i" ,totHit),"p");
- pLeg->AddEntry(pFee ,Form("Feed hits %i" ,totHit),"p");
+ pLeg->AddEntry(pMip ,Form("Mip hits %i" ,totMip),"p");
+ pLeg->AddEntry(pCko ,Form("Ckov hits %i" ,totCkov),"p");
+ pLeg->AddEntry(pFee ,Form("Feed hits %i" ,totFeed),"p");
pLeg->AddEntry(pDig ,Form("Digs %i" ,totDig),"p");
pLeg->AddEntry(pClu ,Form("Clus %i" ,totClu),"p");
pLeg->Draw();
}//DrawEvt()
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+void DrawCosEvt(TObjArray *pCosDigLst,TObjArray *pCosCluLst) //clm: new method to read and display cosmic events
+{//draws all the objects of current event in given canvas
+ TMarker *pDig,*pClu;
+ pDig=new TMarker; pDig->SetMarkerColor(kGreen);pDig->SetMarkerStyle(kOpenSquare);
+ pClu=new TMarker; pClu->SetMarkerColor(kBlue); pClu->SetMarkerStyle(kStar);
+
+
+ Int_t totDig=0,totClu=0;
+ for(Int_t iCh=0;iCh<7;iCh++){//chambers loop //clm: chambers loop is now not needed since iCh=0 but kept for provision
+ totDig+=((TClonesArray*)pCosDigLst->At(iCh))->GetEntriesFast();
+ totClu+=((TClonesArray*)pCosCluLst->At(iCh))->GetEntriesFast();
+
+ switch(iCh){
+ case 6: pAll->cd(1); break; case 5: pAll->cd(2); break;
+ case 4: pAll->cd(4); break; case 3: pAll->cd(5); break; case 2: pAll->cd(6); break;
+ case 1: pAll->cd(8); break; case 0: pAll->cd(9); break;
+ }
+ gPad->SetEditable(kTRUE); gPad->Clear();
+ DrawCh(iCh);
+ if(gCosRun < 500 && iCh == 6) { //clm: hard coded selection since raw data does not contain ch info which is set to 0
+ ((TClonesArray*)pCosDigLst->At(0))->Draw(); //draw digits
+ ((TClonesArray*)pCosCluLst->At(0))->Draw(); //draw clusters
+ }
+ if (gCosRun >= 500 && iCh == 5) {
+ ((TClonesArray*)pCosDigLst->At(0))->Draw(); //draw digits
+ ((TClonesArray*)pCosCluLst->At(0))->Draw(); //draw clusters
+ }
+
+ gPad->SetEditable(kFALSE);
+ }//chambers loop
+ pAll->cd(3); gPad->Clear(); TLegend *pLeg=new TLegend(0.2,0.2,0.8,0.8);
+ pLeg->SetHeader(Form("Cosmic Run %i Event %i Total %i",gCosRun,gEvt,gMaxEvt+1));
+ pLeg->AddEntry(pDig ,Form("Digs %i" ,totDig),"p");
+ pLeg->AddEntry(pClu ,Form("Clus %i" ,totClu),"p");
+ pLeg->Draw();
+}//DrawCosEvt()
+//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void DoZoom(Int_t evt, Int_t px, Int_t py, TObject *obj)
{
if(evt!=5 && evt!=6) return; //5- zoom in 6-zoom out
Printf("totally %i clusters for event %i",iCluCnt,gEvt);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-TObjArray* OpenCalib()
+void OpenCalib()
{
AliCDBManager* pCDB = AliCDBManager::Instance();
pCDB->SetDefaultStorage("local://$HOME");
if(!pQthreEnt || ! pNmeanEnt) return;
- TObjArray *pNmean=(TObjArray*)pNmeanEnt->GetObject();
- TObjArray *pQthre=(TObjArray*)pQthreEnt->GetObject();
- return pNmean;
+ pNmean=(TObjArray*)pNmeanEnt->GetObject();
}