]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliAlignmentTracks.cxx
Record changes.
[u/mrichter/AliRoot.git] / STEER / AliAlignmentTracks.cxx
index 08a7b3d11ab7591a735a9d1c31125d9c8ff3ea82..2763f1b9ee59f5bc951b210b3f688e8e5d5bcc2f 100644 (file)
@@ -46,7 +46,8 @@ AliAlignmentTracks::AliAlignmentTracks():
   fIsIndexBuilt(kFALSE),
   fMisalignObjs(0),
   fTrackFitter(0),
-  fMinimizer(0)
+  fMinimizer(0),
+  fDoUpdate(kTRUE)
 {
   // Default constructor
   InitIndex();
@@ -64,7 +65,8 @@ AliAlignmentTracks::AliAlignmentTracks(TChain *esdchain):
   fIsIndexBuilt(kFALSE),
   fMisalignObjs(0),
   fTrackFitter(0),
-  fMinimizer(0)
+  fMinimizer(0),
+  fDoUpdate(kTRUE)
 {
   // Constructor in the case
   // the user provides an already
@@ -84,7 +86,8 @@ AliAlignmentTracks::AliAlignmentTracks(const char *esdfilename, const char *esdt
   fIsIndexBuilt(kFALSE),
   fMisalignObjs(0),
   fTrackFitter(0),
-  fMinimizer(0)
+  fMinimizer(0),
+  fDoUpdate(kTRUE)
 {
   // Constructor in the case
   // the user provides a single ESD file
@@ -185,7 +188,6 @@ void AliAlignmentTracks::ProcessESD()
   TTree *pointsTree = new TTree("spTree", "Tree with track space point arrays");
   const AliTrackPointArray *array = 0;
   pointsTree->Branch("SP","AliTrackPointArray", &array);
-
   Int_t ievent = 0;
   while (fESDChain->GetEntry(ievent++)) {
     if (!esd) break;
@@ -256,7 +258,11 @@ void AliAlignmentTracks::BuildIndex()
       for (Int_t ipoint = 0; ipoint < array->GetNPoints(); ipoint++) {
        UShort_t volId = array->GetVolumeID()[ipoint];
        // check if the volId is valid
-       if (!AliAlignObj::GetVolPath(volId)) continue;
+       if (!AliAlignObj::GetVolPath(volId)) {
+         AliError(Form("The volume id %d has no default volume path !",
+                       volId));
+         continue;
+       }
        Int_t modId;
        Int_t layerId = AliAlignObj::VolUIDToLayer(volId,modId)
                      - AliAlignObj::kFirstLayer;
@@ -503,11 +509,11 @@ void AliAlignmentTracks::AlignVolumes(const TArrayI *volids, const TArrayI *voli
     minimizer->Minimize();
 
     // Update the alignment object(s)
-    for (Int_t iVolId = 0; iVolId < nVolIds; iVolId++) {
+    if (fDoUpdate) for (Int_t iVolId = 0; iVolId < nVolIds; iVolId++) {
       UShort_t volid = (*volids)[iVolId];
       Int_t iModule;
       AliAlignObj::ELayerID iLayer = AliAlignObj::VolUIDToLayer(volid,iModule);
-      AliAlignObj *alignObj = fAlignObjs[iLayer-AliAlignObj::kFirstLayer][iModule];
+      AliAlignObj *alignObj = fAlignObjs[iLayer-AliAlignObj::kFirstLayer][iModule];      
       *alignObj *= *minimizer->GetAlignObj();
       alignObj->Print("");
     }
@@ -603,7 +609,18 @@ Int_t AliAlignmentTracks::LoadPoints(const TArrayI *volids, AliTrackPointArray**
        Int_t modnum;
        AliAlignObj::ELayerID layer = AliAlignObj::VolUIDToLayer(p.GetVolumeID(),modnum);
        // check if the layer id is valid
-       if (layer == AliAlignObj::kInvalidLayer) continue;
+       if ((layer < AliAlignObj::kFirstLayer) ||
+           (layer >= AliAlignObj::kLastLayer)) {
+         AliError(Form("Layer index is invalid: %d (%d -> %d) !",
+                       layer,AliAlignObj::kFirstLayer,AliAlignObj::kLastLayer-1));
+         continue;
+       }
+       if ((modnum >= AliAlignObj::LayerSize(layer)) ||
+           (modnum < 0)) {
+         AliError(Form("Module number inside layer %d is invalid: %d (0 -> %d)",
+                       layer,modnum,AliAlignObj::LayerSize(layer)));
+         continue;
+       }
 
        // Misalignment is introduced here
        // Switch it off in case of real