Updated version of the Bari code to work with the HEAD. A new test macros has also...
[u/mrichter/AliRoot.git] / ITS / ITSReadPlotData.C
index 44ac6c73bfec884de58bfce6188a5a3192003569..9a382dbffdd6df3f8b51ea6ba86c1d613c374357 100644 (file)
@@ -117,7 +117,7 @@ Int_t ITSReadPlotData(char *filename = "galice.root", Int_t evNum = 0) {
                                
                                // Detector type: 0 --> SPD, 1 --> SDD, 2 --> SSD.
                                // Layer 1,2 --> 0 / Layer 3,4 --> 1 / Layer 5,6 --> 2
                                
                                // Detector type: 0 --> SPD, 1 --> SDD, 2 --> SSD.
                                // Layer 1,2 --> 0 / Layer 3,4 --> 1 / Layer 5,6 --> 2
-                               dtype = ID[1] / 3;
+                               dtype = (ID[1] - 1) / 2;
                                
                                // Once fixed the layer number, the macro calculates the max number
                                // for ladder and detector from geometry, and accepts only suitable values.
                                
                                // Once fixed the layer number, the macro calculates the max number
                                // for ladder and detector from geometry, and accepts only suitable values.
@@ -159,7 +159,8 @@ Int_t ITSReadPlotData(char *filename = "galice.root", Int_t evNum = 0) {
                                
                // Defines the histograms inside the `for' cycle, so they are destroyed at the end
                // of every read sequqnce, in order to mek another withour segmentation faults
                                
                // Defines the histograms inside the `for' cycle, so they are destroyed at the end
                // of every read sequqnce, in order to mek another withour segmentation faults
-               Text_t msg[250], xm = 0.0, ym = 0.0;
+               Text_t msg[250];
+               Float_t xm = 0.0, ym = 0.0, zm = 0.0;
                switch (dtype) {
                        case 0: xm = 1.5; zm = 7.0; break;
                        case 1: xm = 7.5; zm = 8.0; break;
                switch (dtype) {
                        case 0: xm = 1.5; zm = 7.0; break;
                        case 1: xm = 7.5; zm = 8.0; break;
@@ -178,6 +179,8 @@ Int_t ITSReadPlotData(char *filename = "galice.root", Int_t evNum = 0) {
                        cout << "No hits in module!" << endl;
                        continue;
                }
                        cout << "No hits in module!" << endl;
                        continue;
                }
+               else
+                       cout << "Hits scanned..." << endl;
                for (Int_t i = 0; i < hits; i++) if (!St[i]) hhits->Fill(x[i], z[i]);
                
                // Reads recpoints...
                for (Int_t i = 0; i < hits; i++) if (!St[i]) hhits->Fill(x[i], z[i]);
                
                // Reads recpoints...
@@ -186,6 +189,8 @@ Int_t ITSReadPlotData(char *filename = "galice.root", Int_t evNum = 0) {
                        cout << "No recpoints in module!" << endl;
                        continue;
                }
                        cout << "No recpoints in module!" << endl;
                        continue;
                }
+               else
+                       cout << "Recpoints scanned..." << endl;
                for (Int_t i = 0; i < recs; i++) hrecs->Fill(x[i], z[i]);
                
                // Reads digits...
                for (Int_t i = 0; i < recs; i++) hrecs->Fill(x[i], z[i]);
                
                // Reads digits...
@@ -194,6 +199,8 @@ Int_t ITSReadPlotData(char *filename = "galice.root", Int_t evNum = 0) {
                        cout << "No digits in module!" << endl;
                        //continue;
                }
                        cout << "No digits in module!" << endl;
                        //continue;
                }
+               else
+                       cout << "Digits scanned..." << endl;
                for (Int_t i = 0; i < digits; i++) hdigits->Fill(x[i], z[i]);
 
                // Draws read data...
                for (Int_t i = 0; i < digits; i++) hdigits->Fill(x[i], z[i]);
 
                // Draws read data...
@@ -233,6 +240,22 @@ Int_t ITSReadPlotData(char *filename = "galice.root", Int_t evNum = 0) {
                legend->Draw();
                
                viewer->Update();
                legend->Draw();
                
                viewer->Update();
+               
+               
+               Text_t fname[250],ans;
+               cout << "Do you want to save the current canvas on a file (y/n) ? ";
+               cin >> ans;
+               if(ans == 'y' || ans == 'Y') {
+                  cout << "Enter filename: ";
+                  cin >> fname;
+                  TString *control = new TString(fname);
+                  Bool_t ok=control->Contains(".C") || control->Contains(".root") || control->Contains(".ps") || control->Contains(".eps") || control->Contains(".gif");
+                  if(!ok){ 
+                     cout << "File extension is not recognized. The canvas will be saved as Postscript file";
+                     strcat(fname,".ps");
+                  }  
+                  viewer->SaveAs(fname);
+               }
        }
        
        cout << "Done. Goodbye" << endl;
        }
        
        cout << "Done. Goodbye" << endl;
@@ -322,9 +345,16 @@ Int_t GetModuleDigits(TObject *its, Int_t ID, Int_t dtype, Float_t*& X, Float_t*
        // while, if it doesn't, the first thing to do is dimensioning
        // the coordinate and energy loss arrays, and then the loop can start.
 
        // while, if it doesn't, the first thing to do is dimensioning
        // the coordinate and energy loss arrays, and then the loop can start.
 
+        if(dtype==2){
+           Int_t layer, ladder, detec;
+           gm->GetModuleId(ID,layer,ladder,detec);
+           seg->SetLayer(layer);
+        }
+
        if (!digits_num)
                return 0;
        else {
        if (!digits_num)
                return 0;
        else {
+               cout << "Digits to scan: " << digits_num << endl;
                if (X) delete [] X;                     
                if (Z) delete [] Z;
                X = new Float_t[digits_num];            
                if (X) delete [] X;                     
                if (Z) delete [] Z;
                X = new Float_t[digits_num];            
@@ -339,13 +369,18 @@ Int_t GetModuleDigits(TObject *its, Int_t ID, Int_t dtype, Float_t*& X, Float_t*
                }
        }
   for (Int_t j = 0; j < digits_num; j++) {
                }
        }
   for (Int_t j = 0; j < digits_num; j++) {
-       cout << j << endl;
                digit = (AliITSdigit*)digits_array->UncheckedAt(j);
                Int_t iz=digit->fCoord1;  // cell number z
                Int_t ix=digit->fCoord2;  // cell number x
     // Get local coordinates of the element (microns)
                digit = (AliITSdigit*)digits_array->UncheckedAt(j);
                Int_t iz=digit->fCoord1;  // cell number z
                Int_t ix=digit->fCoord2;  // cell number x
     // Get local coordinates of the element (microns)
-               if(dtype < 2)
-       seg->GetPadCxz(ix, iz, X[j], Z[j]);
+               // ******************************* PARTE CORRETTA ***************************************
+               if(dtype < 2) {
+                       Float_t xx, zz; // aggiunta
+       seg->DetToLocal(ix, iz, xx, zz);
+                       X[j] = xx; // aggiunta
+                       Z[j] = zz; // aggiunta
+               }
+               // ******************************* FINE PARTE CORRETTA ***************************************
     else {
                        // SSD: if iz==0 ---> N side; if iz==1 P side
       if (ssdone[j] == 0) {
     else {
                        // SSD: if iz==0 ---> N side; if iz==1 P side
       if (ssdone[j] == 0) {
@@ -368,17 +403,10 @@ Int_t GetModuleDigits(TObject *its, Int_t ID, Int_t dtype, Float_t*& X, Float_t*
                                        }
                                }
         if (!impaired) seg->GetPadCxz(pstrip, nstrip, X[j], Z[j]);
                                        }
                                }
         if (!impaired) seg->GetPadCxz(pstrip, nstrip, X[j], Z[j]);
+                               X[j] /= 10000.0;  // convert microns to cm
+                               Z[j] /= 10000.0;  // convert microns to cm
                        }
                }
                        }
                }
-               if (dtype == 0) {
-                       // !!!THIS CONVERSION TO HIT LRS SHOULD BE REMOVED AS SOON AS THE CODE IS FIXED
-                       X[j] = X[j]-seg->Dx() / 2.0;
-                       Z[j] = Z[j]-seg->Dz() / 2.0;
-               }
-               if (dtype != 1) {
-                       X[j] /= 10000.0;
-                       Z[j] /= 10000.0;
-               }
        }
        return digits_num;
 } 
        }
        return digits_num;
 }