X-Git-Url: http://git.uio.no/git/?p=u%2Fmrichter%2FAliRoot.git;a=blobdiff_plain;f=HMPID%2FHdisp.C;h=a7ec8e8d9f63af0f577dc27142cb1dfd1997e1bc;hp=66a95067cf04e479e4c9b79e4bd7bb87c667c0c6;hb=b929d7c3d0b348a948d947a93462bbaa0963f6d1;hpb=c56e0a528ea615b2b8f99dc3f25a100403f8f53c diff --git a/HMPID/Hdisp.C b/HMPID/Hdisp.C index 66a95067cf0..a7ec8e8d9f6 100644 --- a/HMPID/Hdisp.C +++ b/HMPID/Hdisp.C @@ -27,13 +27,14 @@ #include "AliHMPIDParam.h" #include "AliHMPIDCluster.h" #include "AliTracker.h" +#include "AliStack.h" #endif AliHMPIDParam *fParam; TDatabasePDG *fPdg; -TCanvas *fCanvas=0; Int_t fType=3; Int_t fEvt=-1; Int_t fNevt=0; +TCanvas *fCanvas=0; Int_t fType=1; Int_t fEvt=-1; Int_t fNevt=0; TCanvasImp *fCanvasImp; TFile *fHitFile; TTree *fHitTree; TClonesArray *fHitLst; TPolyMarker *fRenMip[7]; TPolyMarker *fRenCko[7]; TPolyMarker *fRenFee[7]; TClonesArray *fSdiLst; @@ -59,11 +60,23 @@ Int_t fChamN[9]={6,5,-1,4,3,2,-1,1,0}; Int_t fTotPads[7],fTotClus[7]; +Int_t qSigmaCut=0; + +Int_t trigType=0; + AliRunLoader *gAL=0; +AliLoader *gDL=0; // detector loader (needed to get Digits and Clusters) Int_t nDigs[7]; -enum EObjectType {kHitMip=1,kHitCko,kHitFee,kDigit,kCluster,kTrack,kRing}; +enum EObjectType {kHitMip=kOpenTriangleUp,kHitCko=kOpenCircle,kHitFee=kOpenDiamond,kCluster=kStar,kTrack=kPlus,kRing=kFullDotSmall}; + // kOpenTriangleUp Hit Mip + // kOpenCircle Hit Ckov + // kOpenDiamond Hit Feedback + // kStar Cluster + // kPlus Track + // kFullDotSmall Ring + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void CreateContainers() {//to create all containers @@ -77,13 +90,13 @@ void CreateContainers() void CreateRenders() { for(Int_t ch=0;ch<7;ch++){ - fRenMip[ch]=new TPolyMarker; fRenMip[ch]->SetMarkerStyle(kOpenTriangleUp);fRenMip[ch]->SetMarkerColor(kBlack) ;fRenMip[ch]->SetUniqueID(kHitMip); - fRenCko[ch]=new TPolyMarker; fRenCko[ch]->SetMarkerStyle(kOpenCircle); fRenCko[ch]->SetMarkerColor(kBlack) ;fRenCko[ch]->SetUniqueID(kHitCko); - fRenFee[ch]=new TPolyMarker; fRenFee[ch]->SetMarkerStyle(kOpenDiamond); fRenFee[ch]->SetMarkerColor(kBlack) ;fRenFee[ch]->SetUniqueID(kHitFee); - fRenClu[ch]=new TPolyMarker; fRenClu[ch]->SetMarkerStyle(kStar); fRenClu[ch]->SetMarkerColor(kMagenta);fRenClu[ch]->SetUniqueID(kCluster); - fRenTxC[ch]=new TPolyMarker; fRenTxC[ch]->SetMarkerStyle(kPlus); fRenTxC[ch]->SetMarkerColor(kRed) ;fRenTxC[ch]->SetUniqueID(kTrack); + fRenMip[ch]=new TPolyMarker; fRenMip[ch]->SetMarkerStyle(kOpenTriangleUp);fRenMip[ch]->SetMarkerColor(kBlack) ; + fRenCko[ch]=new TPolyMarker; fRenCko[ch]->SetMarkerStyle(kOpenCircle); fRenCko[ch]->SetMarkerColor(kBlack) ; + fRenFee[ch]=new TPolyMarker; fRenFee[ch]->SetMarkerStyle(kOpenDiamond); fRenFee[ch]->SetMarkerColor(kBlack) ; + fRenClu[ch]=new TPolyMarker; fRenClu[ch]->SetMarkerStyle(kStar); fRenClu[ch]->SetMarkerColor(kMagenta); + fRenTxC[ch]=new TPolyMarker; fRenTxC[ch]->SetMarkerStyle(kPlus); fRenTxC[ch]->SetMarkerColor(kRed) ; fRenTxC[ch]->SetMarkerSize(3); - fRenRin[ch]=new TPolyMarker; fRenRin[ch]->SetMarkerStyle(kFullDotSmall); fRenRin[ch]->SetMarkerColor(kMagenta);fRenRin[ch]->SetUniqueID(kRing); + fRenRin[ch]=new TPolyMarker; fRenRin[ch]->SetMarkerStyle(kFullDotSmall); fRenRin[ch]->SetMarkerColor(kMagenta); for(Int_t iDig=0;iDig<160*144;iDig++) { fRenDig[ch][iDig] = new TBox; @@ -131,8 +144,19 @@ void PrintSdis() void PrintDigs() {//prints a list of HMPID digits Printf("List of HMPID digits for event %i",fEvt); - fDigLst->Print(); - Int_t iTot=0; for(Int_t i=0;i<7;i++) {iTot+=((TClonesArray*)fDigLst->At(i))->GetEntries();} +// fDigLst->Print(); + + Int_t iTot=0; + for(Int_t iCh=0;iCh<7;iCh++) { + iTot+=((TClonesArray*)fDigLst->At(iCh))->GetEntries(); + + TClonesArray *pDigCham=(TClonesArray*)fDigLst->At(iCh); //get digs list for this chamber + for(Int_t iDig=0;iDigGetEntries();iDig++){ //digs loop + AliHMPIDDigit *pDig = (AliHMPIDDigit*)pDigCham->At(iDig); + pDig->Print(); + }//Digit loop + }//chamber loop + Printf("totally %i digits for event %i",iTot,fEvt); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -140,8 +164,16 @@ void PrintClus() {//prints a list of HMPID clusters for a given event Printf("List of HMPID clusters for event %i",fEvt); - fCluLst->Print(); - Int_t iTot=0; for(Int_t iCh=0;iCh<7;iCh++) iTot+=((TClonesArray*)fCluLst->At(iCh))->GetEntries(); +// fCluLst->Print(); + + Int_t iTot=0; for(Int_t iCh=0;iCh<7;iCh++) { + iTot+=((TClonesArray*)fCluLst->At(iCh))->GetEntries(); + TClonesArray *pClusCham=(TClonesArray*)fCluLst->At(iCh); //get clusters list for this chamber + for(Int_t iClu=0;iCluGetEntries();iClu++){ //clusters loop + AliHMPIDCluster *pClu = (AliHMPIDCluster*)pClusCham->At(iClu); //get current cluster + pClu->Print(); + } + } Printf("totally %i clusters for event %i",iTot,fEvt); } @@ -151,15 +183,35 @@ void PrintEsd() Printf("List of HMPID ESD summary for event %i",fEvt); for(Int_t iTrk=0;iTrkGetNumberOfTracks();iTrk++){ AliESDtrack *pTrk = fEsd->GetTrack(iTrk); + + Double_t xout[3],pout[3]; + + pTrk->GetOuterPxPyPz(pout); + Double_t pMomOut = TMath::Sqrt(pout[0]*pout[0]+pout[1]*pout[1]+pout[2]*pout[2]); + Float_t x,y;Int_t q,nacc; pTrk->GetHMPIDmip(x,y,q,nacc); - Printf("Track %02i with p %7.2f with ThetaCer %5.3f with %i photons",iTrk,pTrk->GetP(),pTrk->GetHMPIDsignal(),nacc); + Float_t xra,yra,th,ph; pTrk->GetHMPIDtrk(xra,yra,th,ph); +// Printf("xra %f yra %f th %f phi %f",xra,yra,th,ph); + Int_t ch,idx,size; + Int_t word = pTrk->GetHMPIDcluIdx(); + ch = word/1000000; + word = word%1000000; + size = word/1000; + idx = word%1000; + Double_t rout[3]; pTrk->GetOuterXYZ(rout); + vol = gGeoManager->FindNode(rout[0],rout[1],rout[2]); + Float_t thetaCkov = -999.; + if(pTrk->GetHMPIDsignal()<0) thetaCkov = pTrk->GetHMPIDsignal(); + else thetaCkov = pTrk->GetHMPIDsignal() - (Int_t)pTrk->GetHMPIDsignal(); + Printf("Trk %02i Ch.%2i (%5.2f,%5.2f) pOut %7.2f ThCer %7.3f phots %3i QMip %4i size %2i (idx %3i) in vol. %s",iTrk,ch, + xra,yra,pMomOut,thetaCkov,nacc,q,size,idx,vol->GetName()); } }//PrintEsd() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void DrawChamber(Int_t iCh) {//used by Draw() to Draw() chamber structure gPad->Range(-10,-10,AliHMPIDParam::SizeAllX()+5,AliHMPIDParam::SizeAllY()+5); - if(iCh>=0){TLatex txt; txt.SetTextSize(0.1); txt.DrawLatex(-5,-5,Form("%i",iCh));} + if(iCh>=0){TLatex txt; txt.SetTextSize(0.06); txt.DrawLatex(55,-9,Form("RICH %i",iCh));} for(Int_t iPc=AliHMPIDParam::kMinPc;iPc<=AliHMPIDParam::kMaxPc;iPc++){ TBox *pBox=new TBox(AliHMPIDParam::MinPcX(iPc),AliHMPIDParam::MinPcY(iPc), @@ -179,15 +231,40 @@ void DrawLegend() nClu+=fRenClu[ch]->Size(); nDig+=nDigs[ch]; } - TLegend *pLeg=new TLegend(0.2,0.2,0.8,0.8); + TLegend *pLeg=new TLegend(0.15,0.3,0.85,0.98); pLeg->SetHeader(Form("Event %i Total %i",fEvt,fNevt)); - pLeg->AddEntry(fRenTxC[0], Form("TRKxPC %i" ,nTxC),"p"); - pLeg->AddEntry(fRenMip[0], Form("Mip hits %i" ,nMip),"p"); + pLeg->AddEntry(fRenTxC[0], Form("TRKxPC %i" ,nTxC),"p"); + pLeg->AddEntry(fRenMip[0], Form("Mip hits %i" ,nMip),"p"); pLeg->AddEntry(fRenCko[0], Form("Ckov hits %i" ,nCko),"p"); pLeg->AddEntry(fRenFee[0], Form("Feed hits %i" ,nFee),"p"); - pLeg->AddEntry(fRenDig[0][0],Form("Digs %i" ,nDig),"p"); - pLeg->AddEntry(fRenClu[0], Form("Clus %i" ,nClu),"p"); + pLeg->AddEntry(fRenDig[0][0],Form("Digs %i" ,nDig),"p"); + pLeg->AddEntry(fRenClu[0], Form("Clus %i" ,nClu),"p"); pLeg->Draw(); + +/* TLegend *pLeg2 = new TLegend(0.4,0.087,0.8,0.97); + pLeg2->SetHeader(""); + pLeg2->AddEntry(fRenMip[0],Form("Mip hits %i" ,nMip),"p"); + pLeg2->Draw();*/ + + TBox *pBox = new TBox(0.012,0.01,0.97,0.28); + pBox->Draw("l"); + + TText *pText = new TText(0.35,0.21, "ddl = (0....13)"); + pText->SetTextSize(0.06); + pText->Draw(); + + TText *pText2 = new TText(0.09,0.15,"RICH n ---> ddl 2n (left) & 2n+1 (right)"); + pText2->SetTextSize(0.06); + pText2->Draw(); + + TText *pText3 = new TText(0.1,0.09, "phcat (0,2,4) left, phcat (1,3,5) right"); + pText3->SetTextSize(0.06); + pText3->Draw(); + + TText *pText4 = new TText(0.35,0.03, Form("sigma cut = %i",qSigmaCut)); + pText4->SetTextSize(0.06); + pText4->Draw(); + }//DrawLegend() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void Draw() @@ -239,7 +316,7 @@ void Draw() }//Draw() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void RenderHit(TClonesArray *pHitLst) -{//used by ReadEvent() and SimulateEvent() to render hits to polymarker structures, one per chamber +{//used by ReadEvent() to render hits to polymarker structures, one per chamber for(Int_t iHit=0;iHitGetEntries();iHit++){ //hits loop AliHMPIDHit *pHit = (AliHMPIDHit*)pHitLst->At(iHit); Int_t ch=pHit->Ch(); Float_t x=pHit->LorsX(); Float_t y=pHit->LorsY(); //get current hit switch(pHit->Pid()){ @@ -252,29 +329,33 @@ void RenderHit(TClonesArray *pHitLst) }//RenderHits() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void RenderDig(TObjArray *pDigLst) -{//used by ReadEvent() and SimulateEvent() to render digs to Tbox structures, one per chamber +{//used by ReadEvent() to render digs to Tbox structures, one per chamber + for(Int_t iCh=0;iCh<=6;iCh++){ //chambers loop TClonesArray *pDigCham=(TClonesArray*)pDigLst->At(iCh); //get digs list for this chamber nDigs[iCh] = 0; fTotPads[iCh] = pDigCham->GetEntries(); + Int_t iDigEff=0; for(Int_t iDig=0;iDigGetEntries();iDig++){ //digs loop AliHMPIDDigit *pDig = (AliHMPIDDigit*)pDigCham->At(iDig); Float_t x=pDig->LorsX(); Float_t y=pDig->LorsY(); //get current hit - fRenDig[iCh][iDig]->SetX1(x-0.5*AliHMPIDParam::SizePadX()); - fRenDig[iCh][iDig]->SetX2(x+0.5*AliHMPIDParam::SizePadX()); - fRenDig[iCh][iDig]->SetY1(y-0.5*AliHMPIDParam::SizePadY()); - fRenDig[iCh][iDig]->SetY2(y+0.5*AliHMPIDParam::SizePadY()); - fRenDig[iCh][iDig]->SetUniqueID((Int_t)pDig->Q()); - fBox[iCh][iDig]->SetX1(x-0.5*AliHMPIDParam::SizePadX()); - fBox[iCh][iDig]->SetX2(x+0.5*AliHMPIDParam::SizePadX()); - fBox[iCh][iDig]->SetY1(y-0.5*AliHMPIDParam::SizePadY()); - fBox[iCh][iDig]->SetY2(y+0.5*AliHMPIDParam::SizePadY()); + if((Int_t)pDig->Q()<=qSigmaCut) continue; + fRenDig[iCh][iDigEff]->SetX1(x-0.5*AliHMPIDParam::SizePadX()); + fRenDig[iCh][iDigEff]->SetX2(x+0.5*AliHMPIDParam::SizePadX()); + fRenDig[iCh][iDigEff]->SetY1(y-0.5*AliHMPIDParam::SizePadY()); + fRenDig[iCh][iDigEff]->SetY2(y+0.5*AliHMPIDParam::SizePadY()); + fRenDig[iCh][iDigEff]->SetUniqueID((Int_t)pDig->Q()); + fBox[iCh][iDigEff]->SetX1(x-0.5*AliHMPIDParam::SizePadX()); + fBox[iCh][iDigEff]->SetX2(x+0.5*AliHMPIDParam::SizePadX()); + fBox[iCh][iDigEff]->SetY1(y-0.5*AliHMPIDParam::SizePadY()); + fBox[iCh][iDigEff]->SetY2(y+0.5*AliHMPIDParam::SizePadY()); + iDigEff++; nDigs[iCh]++; }//Digit loop }//hits loop for this entry }//RenderHits() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void RenderClu(TObjArray *pClus) -{//used by ReadEvent() and SimulateEvent() to render clusters to polymarker structures, one per chamber +{//used by ReadEvent() to render clusters to polymarker structures, one per chamber for(Int_t iCh=0;iCh<=6;iCh++){ //chambers loop TClonesArray *pClusCham=(TClonesArray*)pClus->At(iCh); //get clusters list for this chamber fTotClus[iCh] = pClusCham->GetEntries(); @@ -287,73 +368,50 @@ void RenderClu(TObjArray *pClus) }//RenderClus() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void RenderEsd(AliESDEvent *pEsd) -{//used by ReadEvent() or SimulateEvent() to render ESD to polymarker structures for rings and intersections one per chamber +{//used by ReadEvent() to render ESD to polymarker structures for rings and intersections one per chamber AliHMPIDRecon rec; for(Int_t iTrk=0;iTrkGetNumberOfTracks();iTrk++){//tracks loop to collect cerenkov rings and intersection points AliESDtrack *pTrk=pEsd->GetTrack(iTrk); Int_t ch=pTrk->GetHMPIDcluIdx(); //get track and chamber intersected by it - if(ch<0) continue; //this track does not intersect any chamber - Float_t thRa,phRa,xRa,yRa; pTrk->GetHMPIDtrk(xRa,yRa,thRa,phRa); //get info on current track - ch/=1000000; - Float_t xPc=0,yPc=0; AliHMPIDTracker::IntTrkCha(pTrk,xPc,yPc); //find again intersection of track with PC--> it is not stored in ESD! - fRenTxC[ch]->SetNextPoint(xPc,yPc); //add this intersection point + ch/=1000000; + Float_t xPc,yPc,xRa,yRa,thRa,phRa; + pTrk->GetHMPIDtrk(xPc,yPc,thRa,phRa);; + + xRa = xPc - (fParam->RadThick()+fParam->WinThick()+fParam->GapThick())*TMath::Cos(phRa)*TMath::Tan(thRa); //just linear extrapolation back to RAD + yRa = yPc - (fParam->RadThick()+fParam->WinThick()+fParam->GapThick())*TMath::Sin(phRa)*TMath::Tan(thRa); + + if(chAliHMPIDParam::kMaxCh) continue;//this track does not intersect any chamber + Int_t npTrk = fRenTxC[ch]->SetNextPoint(xRa,yRa); //add this intersection point Float_t ckov=pTrk->GetHMPIDsignal(); //get ckov angle stored for this track if(ckov>0){ + Float_t thetaCkov = pTrk->GetHMPIDsignal() - (Int_t)pTrk->GetHMPIDsignal(); rec.SetTrack(xRa,yRa,thRa,phRa); + fRenRin[ch]->SetUniqueID(npTrk); for(Int_t j=0;j<500;j++){ - TVector2 pos; pos=rec.TracePhot(ckov,j*6.28/500.); + TVector2 pos; pos=rec.TracePhot(thetaCkov,j*6.28/500.); if(!AliHMPIDParam::IsInDead(pos.X(),pos.Y())) fRenRin[ch]->SetNextPoint(pos.X(),pos.Y()); } }//if ckov is valid }//tracks loop }//RenEsd() //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void SimulateEsd(AliESDEvent *pEsd) -{ - TParticle part; TLorentzVector mom; - for(Int_t iTrk=0;iTrk<100;iTrk++){//stack loop - Printf("SimulateEsd: kProton %i",kProton); - part.SetPdgCode(kProton); - part.SetProductionVertex(0,0,0,0); - Double_t eta= -0.2+gRandom->Rndm()*0.4; //rapidity is random [-0.2,+0.2] - Double_t phi= gRandom->Rndm()*60.*TMath::DegToRad(); //phi is random [ 0 , 60 ] degrees - mom.SetPtEtaPhiM(5,eta,phi,part.GetMass()); - part.SetMomentum(mom); - AliESDtrack trk(&part); - pEsd->AddTrack(&trk); - }//stack loop -}//EsdFromStack() -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void SimulateHits(AliESDEvent *pEsd, TClonesArray *pHits) -{//used by SimulateEvent to simulate hits out from provided ESD - const Int_t kCerenkov=50000050; - const Int_t kFeedback=50000051; +TString Stack(Int_t evt,Int_t tid) +{ +// Prints some useful info from stack +// Arguments: evt - event number. if not -1 print info only for that event +// tid - track id. if not -1 then print it and all it's mothers if any +// Returns: mother tid of the given tid if any + if(gAL->LoadHeader()) return -1; + if(gAL->LoadKinematics()) return -1; - AliHMPIDRecon rec; - Float_t eMip=200e-9,ePho=7.5e-9; - Int_t hc=0; - for(Int_t iTrk=0;iTrkGetNumberOfTracks();iTrk++){//tracks loop - AliESDtrack *pTrk=pEsd->GetTrack(iTrk); - Float_t xRa,yRa; - Int_t ch=AliHMPIDTracker::IntTrkCha(pTrk,xRa,yRa); - if(ch<0) continue; //this track does not hit HMPID - Float_t beta = pTrk->GetP()/(TMath::Sqrt(pTrk->GetP()*pTrk->GetP()+0.938*0.938)); - Float_t ckov=TMath::ACos(1./(beta*1.292)); - - Float_t theta,phi,xPc,yPc,; pTrk->GetHMPIDtrk(xPc,yPc,theta,phi); rec.SetTrack(xRa,yRa,theta,phi); - - if(!AliHMPIDParam::IsInDead(xPc,yPc)) new((*pHits)[hc++]) AliHMPIDHit(ch,eMip,kProton ,iTrk,xPc,yPc); //mip hit - 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;iRndm()*TMath::TwoPi()); - if(!AliHMPIDParam::IsInDead(pos.X(),pos.Y())) new((*pHits)[hc++]) AliHMPIDHit(ch,ePho,kCerenkov,iTrk,pos.X(),pos.Y()); - } //photon hits - for(int i=0;i<3;i++){//feedback photons - Float_t x=gRandom->Rndm()*160; Float_t y=gRandom->Rndm()*150; - if(!AliHMPIDParam::IsInDead(x,y)) new((*pHits)[hc++]) AliHMPIDHit(ch,ePho,kFeedback,iTrk,x,y); //feedback hits - }//photon hits loop - }//tracks loop -}//SimulateHits() + gAL->GetEvent(evt); + AliStack *pStack=gAL->Stack(); + TParticle *pTrack=pStack->Particle(tid); +// Int_t mtid=pTrack->GetFirstMother(); + TString str; + str.Append(Form("with P = %7.4f (%7.4f,%7.4f,%7.4f) GeV/c ",pTrack->P(),pTrack->Px(),pTrack->Py(),pTrack->Pz())); + gAL->UnloadHeader(); gAL->UnloadKinematics(); + return str; +} //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void DispTB(TString t0,TString t1,TString t2,TString t3) { @@ -363,7 +421,38 @@ void DispTB(TString t0,TString t1,TString t2,TString t3) fCanvasImp->SetStatusText(t3,3); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void DisplayInfo(Int_t px, Int_t py) +Bool_t FindPos(TVector3 xyz,Int_t &cham,Int_t §,Int_t &gap,Int_t &padX,Int_t &padY) +{ +// It finds the chamber parameters for a given point +// Arguments: xyz coordinates of a given point in MARS +// Returns: cham chamber ID ( 0-6 ) +// sect sector ID ( 0-5 ) +// padX X (integer) of the pad in X in the given sector (1-80) +// padY Y (integer) of the pad in Y in the given sector (1-48) + cham = -1; + TGeoNode *node = gGeoManager->FindNode(xyz.X(),xyz.Y(),xyz.Z()); + if(!node) return kFALSE; + TGeoVolume *vol = node->GetVolume(); + if(!vol) return kFALSE; + TGeoManager *geo = vol->GetGeoManager(); + if(!geo) return kFALSE; + Int_t i=0; + while(geo->GetMother(i)) { + TString s = geo->GetMother(i)->GetName(); +// if(s.Contains("Hcel_")) padX=(Int_t)(s.Remove(0,5)).Atof(); +// if(s.Contains("Hrow_")) padY=(Int_t)(s.Remove(0,5)).Atof(); +// if(s.Contains("Hsec_")) sect=(Int_t)(s.Remove(0,5)).Atof(); +// if(s.Contains("Hmp_")) cham=(Int_t)(s.Remove(0,4)).Atof(); + if(s.Contains("Hcel_")) padX=geo->GetMother(i)->GetNumber(); + if(s.Contains("Hrow_")) padY=geo->GetMother(i)->GetNumber(); + if(s.Contains("Hsec_")) sect=geo->GetMother(i)->GetNumber(); + if(s.Contains("Hmp_")) cham=geo->GetMother(i)->GetNumber(); + i++; + } + return (cham==-1) ? kFALSE : kTRUE; +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +void DisplayInfo(Int_t evt,Int_t px, Int_t py) { if(!gPad) return; TVirtualPad *pPad=gPad->GetSelectedPad(); @@ -379,50 +468,60 @@ void DisplayInfo(Int_t px, Int_t py) TVector3 xyz=fParam->Lors2Mars(ch,x,y); if(padX>=0&&padY>=0) { - text0.Append(Form("Pad(%i,%i)-LORS(%6.2f,%6.2f)-MARS(%7.2f,%7.2f,%7.2f)",padX,padY,x,y,xyz.X(),xyz.Y(),xyz.Z())); + text0.Append(Form("Pad(%i,%i)-LORS(%6.2f,%6.2f)-MARS(%7.2f,%7.2f,%7.2f) A(%6.2f,%6.2f)",padX,padY,x,y,xyz.X(),xyz.Y(),xyz.Z(), + xyz.Theta()*TMath::RadToDeg(),xyz.Phi()*TMath::RadToDeg())); text1.Append(Form("Module %i Sector %i",ch,pc)); text2=""; - text3.Append(Form("Pads = %i - Clusters = %i - Multiplicity %5.2f%%",fTotPads[ch],fTotClus[ch],100.*fTotPads[ch]/(144.*160.))); + text3.Append(Form("Pads = %i - Clusters = %i - Occupancy %5.2f%%",fTotPads[ch],fTotClus[ch],100.*fTotPads[ch]/(144.*160.))); } -// Find object DIGIT TObject *obj = fCanvas->GetSelected(); TString name = obj->GetName(); + +// Find object DIGIT - if(name=="") {DispTB(text0,text1,text2,text3);return;} + if(name=="") {DispTB(text0,text1,text2,text3);return;} // TLatex not interesting if(name.Contains("TBox")) { - TBox *box = (TBox*)obj; if(box->GetUniqueID()==0) return; // just black frame hit! text2.Append(Form("charge = %i ADC",box->GetUniqueID())); - - } else { + DispTB(text0,text1,text2,text3); + return; + } // -// Find object HITs CLUSTER TRACK and RING (based on TPolyMarker) +// Find object HITs CLUSTER TRACK and RING (based on TPolyMarker and symbol) // - TPolyMarker *b = (TPolyMarker*)obj; + TPolyMarker *b = (TPolyMarker*)obj; - const Int_t big = 9999; + const Int_t big = 9999; - // check if point is near one of the points - Int_t distance = big; - Int_t index=0; + // check if point is near one of the points + Int_t distance = big; + Int_t index=0; - Double_t *xPol = b->GetX(); - Double_t *yPol = b->GetY(); + Double_t *xPol = b->GetX(); + Double_t *yPol = b->GetY(); - for(Int_t i=0;iSize();i++) { - Int_t pxp = pPad->XtoAbsPixel(pPad->XtoPad(xPol[i])); - Int_t pyp = pPad->YtoAbsPixel(pPad->YtoPad(yPol[i])); - Int_t d = TMath::Abs(pxp-px) + TMath::Abs(pyp-py); - if (d < distance) {distance = d; index=i;} - } + for(Int_t i=0;iSize();i++) { + Int_t pxp = pPad->XtoAbsPixel(pPad->XtoPad(xPol[i])); + Int_t pyp = pPad->YtoAbsPixel(pPad->YtoPad(yPol[i])); + Int_t d = TMath::Abs(pxp-px) + TMath::Abs(pyp-py); + if (d < distance) {distance = d; index=i;} + } - Int_t type = b->GetUniqueID(); - - // Case Hit Mip - + Int_t symbol = b->GetMarkerStyle(); + + // kOpenTriangleUp Hit Mip + // kOpenCircle Hit Ckov + // kOpenDiamond Hit Feedback + // kStar Cluster + // kPlus Track + // kFullDotSmall Ring + + // Case Hit Mip of Hit Ckov or Hit Feedback + if(symbol==kHitMip || symbol==kHitCko || symbol==kHitFee) { + if(evt!=kButton1Down) return; TString nameHit; Int_t iCko[7]={0,0,0,0,0,0,0}; Int_t iFee[7]={0,0,0,0,0,0,0}; @@ -431,64 +530,67 @@ void DisplayInfo(Int_t px, Int_t py) Int_t chHit; Int_t indHit=0; - switch(type) { - - case kHitMip: - case kHitCko: - case kHitFee: - - for(Int_t iEnt=0;iEntGetEntries();iEnt++){ - fHitTree->GetEntry(iEnt); - for(iHit=0;iHitGetEntries();iHit++) { //hits loop - AliHMPIDHit *pHit = (AliHMPIDHit*)fHitLst->At(iHit); - chHit = pHit->Ch(); - Int_t pid = pHit->Pid(); - if(pid==50000050) iCko[chHit]++; - if(pid==50000051) iFee[chHit]++; - if(pid!=50000050 && pid!=50000051) iMip[chHit]++; - - if(type==kHitMip && ch==chHit && index==iMip[chHit]-1) {indHit = iHit;break;} - if(type==kHitCko && ch==chHit && index==iCko[chHit]-1) {indHit = iHit;break;} - if(type==kHitFee && ch==chHit && index==iFee[chHit]-1) {indHit = iHit;break;} - } - } - - fHitTree->GetEntry(6-ch); - AliHMPIDHit *pHit = (AliHMPIDHit*)fHitLst->At(indHit); - - Float_t x=pHit->LorsX(); - Float_t y=pHit->LorsY(); - Float_t charge = pHit->Q(); - if(pHit->Pid()==50000050) {nameHit = " Cherenkov Photon ";} - else if(pHit->Pid()==50000051) {nameHit = " Feedback Photon ";} - else if(fPdg->GetParticle(pHit->Pid())) nameHit = fPdg->GetParticle(pHit->Pid())->GetName(); - text0="";text0.Append(Form("Hit x %6.2f y %6.2f",x,y)); - text2="";text2.Append(Form("Q = %7.2f ADC",charge)); - text3="";text3="Particle: "+ nameHit; - break; - - case kCluster: - TClonesArray *pClusCham=(TClonesArray*)fCluLst->At(ch); //get clusters list for this chamber - AliHMPIDCluster *pClu = (AliHMPIDCluster*)pClusCham->At(index); //get current cluster - text0="";text0.Append(Form("CLUSTER: x %6.2f y %6.2f",pClu->X(),pClu->Y())); - text2="";text2.Append(Form("charge = %i ADC",(Int_t)pClu->Q())); - break; - - case kTrack: - AliESDtrack *pTrk=fEsd->GetTrack(index); - Float_t thRa,phRa,xRa,yRa; pTrk->GetHMPIDtrk(xRa,yRa,thRa,phRa); - Float_t xPc,yPc; AliHMPIDTracker::IntTrkCha(pTrk,xPc,yPc); - text0="";text0.Append(Form("TRACK: x %6.2f y %6.2f at PC plane",xPc,yPc)); - text2="";text2.Append(Form("p = %7.2f GeV/c",pTrk->GetP())); - Float_t ckov=pTrk->GetHMPIDsignal(); - if(ckov>0){ - Float_t x,y;Int_t q,nacc; pTrk->GetHMPIDmip(x,y,q,nacc); - text3="";text3.Append(Form("Theta Cherenkov %5.3f with %i photons",pTrk->GetHMPIDsignal(),nacc)); - } - break; - default: - break; + Int_t indTrk = b->GetUniqueID(); // track index + for(Int_t iEnt=0;iEntGetEntries();iEnt++){//entries loop + fHitTree->GetEntry(iEnt); + for(iHit=0;iHitGetEntries();iHit++) { //hits loop + AliHMPIDHit *pHit = (AliHMPIDHit*)fHitLst->At(iHit); + chHit = pHit->Ch(); + Int_t pid = pHit->Pid(); + if(pid==50000050) iCko[chHit]++; + else if(pid==50000051) iFee[chHit]++; + else iMip[chHit]++; + + if(symbol==kHitMip && ch==chHit && index==iMip[chHit]-1) {indTrk=iEnt;indHit = iHit;break;} + if(symbol==kHitCko && ch==chHit && index==iCko[chHit]-1) {indTrk=iEnt;indHit = iHit;break;} + if(symbol==kHitFee && ch==chHit && index==iFee[chHit]-1) {indTrk=iEnt;indHit = iHit;break;} + } + } + fHitTree->GetEntry(indTrk); + AliHMPIDHit *pHit = (AliHMPIDHit*)fHitLst->At(indHit); + + Int_t tid = pHit->Tid(); + + TString str = Stack(fEvt,tid); + + Float_t x=pHit->LorsX(); + Float_t y=pHit->LorsY(); + Float_t charge = pHit->Q(); + + TVector3 v = fParam->Lors2Mars(pHit->Ch(),pHit->LorsX(),pHit->LorsY()); + Int_t cham,sect,gap,padX,padY; + FindPos(v,cham,sect,gap,padX,padY); + + if(pHit->Pid()==50000050) {nameHit = " Cherenkov Photon ";} + else if(pHit->Pid()==50000051) {nameHit = " Feedback Photon ";} + else if(fPdg->GetParticle(pHit->Pid())) nameHit = fPdg->GetParticle(pHit->Pid())->GetName(); + nameHit.Append(Form(" (tid %i)",tid)); + text0="";text0.Append(Form("Hit(%5.2f,%6.2f) LORS - Pad Volume(%i,%i) - hit %i/%i",x,y,padX,padY,indHit+1,fHitLst->GetEntries())); + text2="";text2.Append(Form("Q = %7.2f ADC",charge)); + text3="";text3="Particle: "+ nameHit +" "+ str; + } // Hit + else if (symbol==kCluster) { + TClonesArray *pClusCham=(TClonesArray*)fCluLst->At(ch); //get clusters list for this chamber + AliHMPIDCluster *pClu = (AliHMPIDCluster*)pClusCham->At(index); //get current cluster + text0="";text0.Append(Form("CLUSTER: x %6.2f y %6.2f",pClu->X(),pClu->Y())); + text2="";text2.Append(Form("charge = %i ADC",(Int_t)pClu->Q())); } + else if (symbol==kTrack || symbol==kRing) { + if(symbol==kRing) index = b->GetUniqueID(); + AliESDtrack *pTrk=fEsd->GetTrack(index); + Float_t xPc,yPc,thRa,phRa,xRa,yRa; + Int_t ch = AliHMPIDTracker::IntTrkCha(pTrk,xPc,yPc,xRa,yRa,thRa,phRa); + text0="";text0.Append(Form("TRACK n.%d: x %6.2f y %6.2f at PC plane in chamber %i",index,xPc,yPc,ch)); + text2="";text2.Append(Form("p = %7.2f GeV/c",pTrk->GetP())); + Float_t ckov=pTrk->GetHMPIDsignal(); + Double_t prob[5]; + pTrk->GetHMPIDpid(prob); + if(ckov>0){ + Float_t thetaCkov = pTrk->GetHMPIDsignal() - (Int_t)pTrk->GetHMPIDsignal(); + Float_t x,y;Int_t q,nacc; pTrk->GetHMPIDmip(x,y,q,nacc); + text3="";text3.Append(Form("Theta Cherenkov %5.3f with %i photons | e %5.1f%% | u %5.1f%% | pi %5.1f%% | K %5.1f%% | p %5.1f%%", + thetaCkov,nacc,prob[0]*100,prob[1]*100,prob[2]*100,prob[3]*100,prob[4]*100)); + } } //Update toolbar status @@ -502,8 +604,12 @@ void CloseInfo() void DoZoom(Int_t evt, Int_t px, Int_t py, TObject *) { // Printf(" px %i py%i event %i",px,py,evt); - if(evt==51) DisplayInfo(px,py); - if(evt==11) CloseInfo(); + + if(evt== 1) evt = 5; //for laptop with touchpad: zoom in with left button + if(evt== 2) evt = 6; //for laptop with touchpad: zoom out with both buttons + + if(evt==kMouseMotion||evt==kButton1Down) DisplayInfo(evt,px,py); +// if(evt==11) CloseInfo(); if(evt!=5 && evt!=6) return; //5- zoom in 6-zoom out const Int_t minZoom=64; const Int_t maxZoom=2; @@ -530,58 +636,6 @@ void DoZoom(Int_t evt, Int_t px, Int_t py, TObject *) pPad->Update(); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void ReadEvent() -{//used by NextEvent() to read curent event and construct all render elements - if(fNevt && fEvt>=fNevt) fEvt=0; //loop over max event - if(fNevt && fEvt<0) fEvt=fNevt-1; //loop over max event - - if(fHitFile){ - if(fHitTree) delete fHitTree; fHitTree=(TTree*)fHitFile->Get(Form("Event%i/TreeH",fEvt)); - - fHitTree->SetBranchAddress("HMPID",&fHitLst); - for(Int_t iEnt=0;iEntGetEntries();iEnt++){ - fHitTree->GetEntry(iEnt); - RenderHit(fHitLst); - }//prim loop - }//if hits file - - if(fDigFile){ - if(fDigTree) delete fDigTree; fDigTree=(TTree*)fDigFile->Get(Form("Event%i/TreeD",fEvt)); - for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++) fDigTree->SetBranchAddress(Form("HMPID%i",iCh),&(*fDigLst)[iCh]); - fDigTree->GetEntry(0); - RenderDig(fDigLst); - }//if digs file - - if(fCluFile){ - if(fCluTree) delete fCluTree; fCluTree=(TTree*)fCluFile->Get(Form("Event%i/TreeR",fEvt)); - for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++) fCluTree->SetBranchAddress(Form("HMPID%i",iCh),&(*fCluLst)[iCh]); - fCluTree->GetEntry(0); - RenderClu(fCluLst); - }//if clus file - - if(fEsdFile){//if ESD file open - fEsdTree->GetEntry(fEvt); - RenderEsd(fEsd); - }//if ESD file -}//ReadEvent() -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -void SimulateEvent() -{// used by NextEvent() to simulate all info - AliCDBManager* pCDB = AliCDBManager::Instance(); pCDB->SetDefaultStorage("local://$HOME"); pCDB->SetRun(0); - AliCDBEntry *pNmeanEnt=pCDB->Get("HMPID/Calib/Nmean"); - - SimulateEsd(fEsd); - SimulateHits(fEsd,fHitLst); - AliHMPIDv2::Hit2Sdi(fHitLst,fSdiLst); - AliHMPIDDigitizer::Sdi2Dig(fSdiLst,fDigLst); - AliHMPIDReconstructor::Dig2Clu(fDigLst,fCluLst); - AliHMPIDTracker::Recon(fEsd,fCluLst,(TObjArray*)pNmeanEnt->GetObject()); - - RenderHit(fHitLst); - RenderClu(fCluLst); - RenderEsd(fEsd); -}//SimulateEvent() -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void CheckStatus() { if(fHitFile){ @@ -597,13 +651,17 @@ void CheckStatus() void GetEvent() { ClearRenders(); + + ReadEvent(); + + while(!Trigger()) { + Printf(" trigger %i for event %i",Trigger(),fEvt); + fEvt+=fTimeArrow; + ClearRenders(); + ReadEvent(); + } + CheckStatus(); - switch(fType){ - case 1: ReadEvent();break; -// case 2: ReadCosmic(); break; - case 3: SimulateEvent(); break; - default: return; - } Draw(); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -636,6 +694,9 @@ void Hdisp() CreateRenders(); TString title="Session with"; + + LoadRunLoader(); + if(gSystem->IsFileInIncludePath("HMPID.Hits.root")){// tries to open hits fHitFile=TFile::Open("HMPID.Hits.root"); fNevt=fHitFile->GetNkeys(); fType=1; title+=Form(" HITS-%i ",fNevt); } @@ -647,30 +708,23 @@ void Hdisp() if(gSystem->IsFileInIncludePath("HMPID.RecPoints.root")){// tries to open clusters fCluFile=TFile::Open("HMPID.RecPoints.root"); fNevt=fCluFile->GetNkeys(); fType=1; title+=Form(" CLUSTERS-%i ",fNevt); } - - if(gSystem->IsFileInIncludePath("AliESDs.root")){ - fEsdFile=TFile::Open("AliESDs.root"); - fEsdTree=(TTree*)fEsdFile->Get("esdTree"); - fEsd->ReadFromTree(fEsdTree); fEsd->GetStdContent(); //clm: new ESD schema: see Task Force meeting 20th June, 2007 - fNevt=fEsdTree->GetEntries(); fType=1; title+=Form(" ESD-%i ",fNevt); - - //clm: we need to set the magnetic field - if(gSystem->IsFileInIncludePath("galice.root")){ - if(gAlice) delete gAlice; - gAL=AliRunLoader::Open(); - gAL->LoadgAlice(); - AliHMPIDTracker::SetFieldMap(gAL->GetAliRun()->Field(),kTRUE); - }else{ - Printf("=============== NO galice file! Magnetic field for ESD tracking is: %f ===============",AliTracker::GetBz()); - } - - } if(gSystem->IsFileInIncludePath("cosmic.root")){ //clm: Check if cosmic file is in the folder fCosFile=TFile::Open("cosmic.root"); fCosTree=(TTree*)fCosFile->Get("cosmic"); fNevt=fCosTree->GetEntries(); fType=2; fCosTree->SetBranchAddress("Digs",&fDigLst); fCosTree->SetBranchAddress("Clus",&fCluLst); } + if(gSystem->IsFileInIncludePath("AliESDs.root")){ + fEsdFile=TFile::Open("AliESDs.root"); + if(fEsdFile) { + fEsdTree=(TTree*)fEsdFile->Get("esdTree"); + fEsd->ReadFromTree(fEsdTree); fEsd->GetStdContent(); //clm: new ESD schema: see Task Force meeting 20th June, 2007 + if(fEsdTree) { + fNevt=fEsdTree->GetEntries(); fType=1; title+=Form(" ESD-%i ",fNevt); + } else {delete fEsdFile;fEsdFile=0x0;} + } else {delete fEsdFile; delete fEsdTree;} + } + fCanvas=new TCanvas("all","",-1024,768);fCanvas->SetWindowSize(1024,768); fCanvasImp = fCanvas->GetCanvasImp(); fCanvasImp->ShowStatusBar(); @@ -842,3 +896,116 @@ void OnlyEsd() GetEvent(); } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +void LoadRunLoader(){ + if(!gSystem->IsFileInIncludePath("galice.root")) { + Printf("\n\n galice.root not in path: please check! \n\n"); + return; + } + if(gAlice) gAlice=0x0; + gAL=AliRunLoader::Open(); + gAL->LoadHeader(); + gAL->LoadHits("HMPID"); + gAL->LoadDigits("HMPID"); + gAL->LoadRecPoints("HMPID"); + gDL = gAL->GetDetectorLoader("HMPID"); + if(!gDL){ + Printf("\n\n no AliLoader present: please check! \n\n"); + return; + } + fNevt= gAL->GetNumberOfEvents(); +} +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +void ReadEvent(){ +//used by NextEvent() to read curent event and construct all render elements + if(fNevt && fEvt>=fNevt) fEvt=0; //loop over max event + if(fNevt && fEvt<0) fEvt=fNevt-1; //loop over max event + +// Printf("getting event %i out of %i",fEvt,fNevt); + + if(gDL) { + + gAL->GetEvent(fEvt); + +//-------- HITS + + fHitTree=gDL->TreeH(); + + if(fHitTree) { + + fHitTree->SetBranchAddress("HMPID",&fHitLst); + + for(Int_t iEnt=0;iEntGetEntries();iEnt++){ + fHitTree->GetEntry(iEnt); + RenderHit(fHitLst); + }//prim loop + }//if hits tree + +//-------- DIGITS + + fDigTree=gDL->TreeD(); + + if(fDigTree){ + for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++) fDigTree->SetBranchAddress(Form("HMPID%i",iCh),&(*fDigLst)[iCh]); +// fDigTree->GetEvent(fEvt); + fDigTree->GetEntry(0); + RenderDig(fDigLst); + //cout << "pointer to the dig list " << fDigLst << endl; + } + +//-------- CLUSTERS + + fCluTree= gDL->TreeR(); + + if(fCluTree) { + for(Int_t iCh=AliHMPIDParam::kMinCh;iCh<=AliHMPIDParam::kMaxCh;iCh++) fCluTree->SetBranchAddress(Form("HMPID%i",iCh),&(*fCluLst)[iCh]); + fCluTree->GetEntry(0); + RenderClu(fCluLst); + } + } + +//-------- ESD + + if(fEsdFile){//if ESD file open + fEsdTree->GetEntry(fEvt); + RenderEsd(fEsd); + }//if ESD file + +} +//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +void SetEvent(Int_t ev) +{ + fEvt=ev; + GetEvent(); +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +void SetSigmaCut(Int_t sig=0) +{ + qSigmaCut = sig; +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +void SetField() +{ + gROOT->LoadMacro("Field.C"); + + AliMagF * b = Field(); + +AliHMPIDTracker::SetFieldMap(b,kTRUE); +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +void SetTrigger(Int_t type=0) +{ + trigType = type; + if(type==1) Printf(" Trigger 1 selected: at least ONE track in HMPID."); +} +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +Bool_t Trigger() +{ + if(trigType==0) return kTRUE; + if(trigType==1) { + if(fEsd->GetNumberOfTracks()>0) { + PrintEsd(); + return kTRUE; + } else return kFALSE; + } + return kTRUE; +}