Hi Rooters, I'm trying to do a simple event display for a pixels array detector using the ROOT geometry package. In each event a parallelepiped is associated to each hit with height proportional to the energy deposit and location corresponding to the hit pixel. At the end of the event I would like to clear all the hits (parallelepipeds). I send you the code in attachment with a dummy generation of events. The program crashes when it enters the loop aimed to clear the hits. Why ? Is there an alternative way to do it? Thanks Cheers Paolo P.S. I'm using the latest version of ROOT. void EventDisplay() { //--- Definition of a simple geometry TCanvas* c1=new TCanvas("c1","",700,700); gSystem->Load("libGeom"); TGeoManager *gGeoManager = new TGeoManager("ROOT", "Simple geometry"); //--- define materials TGeoMaterial *matVacuum = new TGeoMaterial("Vacuum", 0,0,0); TGeoMedium *Vacuum = new TGeoMedium("Vacuum",1, matVacuum); //Experimental hall TGeoVolume *EXPH = gGeoManager->MakeBox("EXPH",Vacuum, 600., 600., 600.); gGeoManager->SetTopVolume(EXPH); const Int_t Nrow=56,Ncol=52; float xside=1.5,yside=1.3; //Matrix of pixels TGeoVolume *SCDP=gGeoManager->MakeBox("SCDP",Vacuum,xside/2,yside/2,0.04/2); SCDP->SetVisibility(1); SCDP->SetLineColor(3); for(int i=0;i<Nrow;i++) { for(int j=0;j<Ncol;j++) { float posX=-Ncol*xside/2+(2*j+1)*xside/2; float posY=-Nrow*yside/2+(2*i+1)*yside/2; float posZ=0; EXPH->AddNode(SCDP,i*Ncol+j,new TGeoTranslation(posX,posY,posZ)); } } gGeoManager->CloseGeometry(); gGeoManager->SetVisLevel(4); EXPH->Draw(); //generation of 10 dummy events with at most 20 associated hits TGeoVolume *hit[20]; gRandom->SetSeed(0); for(int evt=0;evt<10;evt++) { int nhit=int(20*gRandom->Rndm()); cout<<"Nhit "<<nhit<<endl; for(int i=0;i<nhit;i++) { int row=int(Nrow*gRandom->Rndm()); int col=int(Ncol*gRandom->Rndm()); float edep=gRandom->Rndm()*10; hit[i]=gGeoManager->MakeBox("hit",Vacuum,xside/2,yside/2,edep/2); hit[i]->SetVisibility(1); hit[i]->SetLineColor(2); float posX=-Ncol*xside/2+(2*col+1)*xside/2; float posY=-Nrow*yside/2+(2*row+1)*yside/2; EXPH->AddNode(hit[i],i+1,new TGeoTranslation(posX,posY,edep/2)); } for(int i=0;i<nhit;i++) { char buf[10]; sprintf(buf,"hit_%d",i+1); EXPH->GetNode(buf)->Clear(); hit[i]->ClearShape(); } } }
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:17 MET