+
+void AliTOFGeometryV5::DetToSectorRF(Int_t vol[5], Double_t **coord)
+{
+ //
+ // Returns the local coordinates (x, y, z) in sector reference frame
+ // for the 4 corners of each sector pad (vol[1], vol[2], vol[3], vol[4])
+ //
+
+ if (!gGeoManager) printf("ERROR: no TGeo\n");
+
+ // ALICE -> TOF Sector
+ Char_t path1[100]="";
+ GetVolumePath(vol[0],path1);
+ gGeoManager->cd(path1);
+ TGeoHMatrix aliceToSector;
+ aliceToSector = *gGeoManager->GetCurrentMatrix();
+
+ // TOF Sector -> ALICE
+ //TGeoHMatrix sectorToALICE = aliceToSector.Inverse();
+
+ // ALICE -> TOF Pad
+ Char_t path2[100]="";
+ GetVolumePath(vol,path2);
+ gGeoManager->cd(path2);
+ TGeoHMatrix aliceToPad;
+ aliceToPad = *gGeoManager->GetCurrentMatrix();
+
+ // TOF Pad -> ALICE
+ TGeoHMatrix padToALICE = aliceToPad.Inverse();
+
+ // TOF Pad -> TOF Sector
+ TGeoHMatrix padToSector = padToALICE*aliceToSector;
+
+ // TOF Sector -> TOF Pad
+ //TGeoHMatrix sectorToPad = sectorToALICE*aliceToPad;
+
+ // coordinates of the pad bottom corner
+ Double_t **cornerPad = new Double_t*[4];
+ for (Int_t ii=0; ii<4; ii++) cornerPad[ii] = new Double_t[3];
+
+ cornerPad[0][0] = -fgkXPad/2.;
+ cornerPad[0][1] = 0.;
+ cornerPad[0][2] = -fgkZPad/2.;
+
+ cornerPad[1][0] = fgkXPad/2.;
+ cornerPad[1][1] = 0.;
+ cornerPad[1][2] = -fgkZPad/2.;
+
+ cornerPad[2][0] = fgkXPad/2.;
+ cornerPad[2][1] = 0.;
+ cornerPad[2][2] = fgkZPad/2.;
+
+ cornerPad[3][0] = -fgkXPad/2.;
+ cornerPad[3][1] = 0.;
+ cornerPad[3][2] = fgkZPad/2.;
+
+ for(Int_t aa=0; aa<4; aa++) for(Int_t bb=0; bb<3; bb++) coord[aa][bb]=0.;
+
+ for (Int_t jj=0; jj<4; jj++) padToSector.MasterToLocal(&cornerPad[jj][0], &coord[jj][0]);
+
+ delete cornerPad;
+
+ //sectorToPad.LocalToMaster(cornerPad, coord);
+
+}