X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FMUONCheckDI.C;h=8dfd2681766b597505349695804e6c5c22ce60e5;hb=05fadcad984dd5fe0ebfdbbe1eebe7c80956893f;hp=eef1a2928ab2f4cc243071e9499de68075f7fbe3;hpb=2060b21706c6613c64fa306ff1789fd4bbc8d54b;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/MUONCheckDI.C b/MUON/MUONCheckDI.C index eef1a2928ab..8dfd2681766 100644 --- a/MUON/MUONCheckDI.C +++ b/MUON/MUONCheckDI.C @@ -15,37 +15,41 @@ /* $Id$ */ -// -// Macro for checking AliMUONDataInterface and AliMUONMCDataInterface. -// By Bruce Becker, DAPNIA/SPhN/CEA Saclay -// -// Modified to updated versions of data interfaces. -// Artur Szostak (University of Cape Town) -// +/// \ingroup macros +/// \file MUONCheckDI.C +/// \brief Macro for checking AliMUONDataInterface and AliMUONMCDataInterface. +/// +/// \author Bruce Becker, DAPNIA/SPhN/CEA Saclay +/// +/// Modified to updated versions of data interfaces +/// by Artur Szostak (University of Cape Town) #if !defined(__CINT__) || defined(__MAKECINT__) -#include -#include -#include -#include #include "AliMUONHit.h" #include "AliMUONVDigit.h" #include "AliMUONVCluster.h" -#include "AliMUONTrack.h" #include "AliMUONLocalTrigger.h" #include "AliMUONRegionalTrigger.h" #include "AliMUONGlobalTrigger.h" -#include "AliMUONTriggerTrack.h" #include "AliMUONMCDataInterface.h" #include "AliMUONDataInterface.h" +#include "AliMUONVHitStore.h" #include "AliMUONVDigitStore.h" #include "AliMUONVClusterStore.h" -#include "AliMUONVTrackStore.h" #include "AliMUONVTriggerStore.h" -#include "AliMUONVTriggerTrackStore.h" #include "AliMpConstants.h" #include "AliMpDEManager.h" + +#include "AliCDBManager.h" + +#include +#include +#include +#include +#include + #include + #endif @@ -57,64 +61,30 @@ Int_t Compare(const TObject* a, const TObject* b) { int result = -999; - if (a->IsA() == AliMUONTrack::Class() && b->IsA() == AliMUONTrack::Class()) - { - const AliMUONTrack* ta = static_cast(a); - const AliMUONTrack* tb = static_cast(b); - if (ta->GetNTrackHits() < tb->GetNTrackHits()) return -1; - if (ta->GetNTrackHits() > tb->GetNTrackHits()) return 1; - if (ta->GetMatchTrigger() < tb->GetMatchTrigger()) return -1; - if (ta->GetMatchTrigger() > tb->GetMatchTrigger()) return 1; - if (ta->GetLoTrgNum() < tb->GetLoTrgNum()) return -1; - if (ta->GetLoTrgNum() > tb->GetLoTrgNum()) return 1; - if (ta->GetChi2MatchTrigger() < tb->GetChi2MatchTrigger()) return -1; - if (ta->GetChi2MatchTrigger() > tb->GetChi2MatchTrigger()) return 1; - const AliMUONTrackParam* tpa = static_cast(ta->GetTrackParamAtHit()->First()); - const AliMUONTrackParam* tpb = static_cast(tb->GetTrackParamAtHit()->First()); - if (tpa->GetNonBendingCoor() < tpb->GetNonBendingCoor()) return -1; - if (tpa->GetNonBendingCoor() > tpb->GetNonBendingCoor()) return 1; - if (tpa->GetNonBendingSlope() < tpb->GetNonBendingSlope()) return -1; - if (tpa->GetNonBendingSlope() > tpb->GetNonBendingSlope()) return 1; - if (tpa->GetBendingCoor() < tpb->GetBendingCoor()) return -1; - if (tpa->GetBendingCoor() > tpb->GetBendingCoor()) return 1; - if (tpa->GetBendingSlope() < tpb->GetBendingSlope()) return -1; - if (tpa->GetBendingSlope() > tpb->GetBendingSlope()) return 1; - if (tpa->GetInverseBendingMomentum() < tpb->GetInverseBendingMomentum()) return -1; - if (tpa->GetInverseBendingMomentum() > tpb->GetInverseBendingMomentum()) return 1; - if (tpa->GetCharge() < tpb->GetCharge()) return -1; - if (tpa->GetCharge() > tpb->GetCharge()) return 1; - return 0; - } - else if (a->IsA() == AliMUONLocalTrigger::Class() && b->IsA() == AliMUONLocalTrigger::Class()) + if (a->IsA() == AliMUONLocalTrigger::Class() && b->IsA() == AliMUONLocalTrigger::Class()) { result = memcmp(a, b, sizeof(AliMUONLocalTrigger)); } else if (a->IsA() == AliMUONRegionalTrigger::Class() && b->IsA() == AliMUONRegionalTrigger::Class()) { - result = memcmp(a, b, sizeof(AliMUONRegionalTrigger)); + const AliMUONRegionalTrigger* ra = static_cast(a); + const AliMUONRegionalTrigger* rb = static_cast(b); + if (ra->GetId() < rb->GetId()) return -1; + if (ra->GetId() > rb->GetId()) return 1; + if (ra->GetLocalOutput(0) < rb->GetLocalOutput(0)) return -1; + if (ra->GetLocalOutput(0) > rb->GetLocalOutput(0)) return 1; + if (ra->GetLocalOutput(1) < rb->GetLocalOutput(1)) return -1; + if (ra->GetLocalOutput(1) > rb->GetLocalOutput(1)) return 1; + if (ra->GetLocalMask() < rb->GetLocalMask()) return -1; + if (ra->GetLocalMask() > rb->GetLocalMask()) return 1; + if (ra->GetOutput() < rb->GetOutput()) return -1; + if (ra->GetOutput() > rb->GetOutput()) return 1; + return 0; } else if (a->IsA() == AliMUONGlobalTrigger::Class() && b->IsA() == AliMUONGlobalTrigger::Class()) { result = memcmp(a, b, sizeof(AliMUONGlobalTrigger)); } - else if (a->IsA() == AliMUONTriggerTrack::Class() && b->IsA() == AliMUONTriggerTrack::Class()) - { - const AliMUONTriggerTrack* ta = static_cast(a); - const AliMUONTriggerTrack* tb = static_cast(b); - if (ta->GetX11() < tb->GetX11()) return -1; - if (ta->GetX11() > tb->GetX11()) return 1; - if (ta->GetY11() < tb->GetY11()) return -1; - if (ta->GetY11() > tb->GetY11()) return 1; - if (ta->GetThetax() < tb->GetThetax()) return -1; - if (ta->GetThetax() > tb->GetThetax()) return 1; - if (ta->GetThetay() < tb->GetThetay()) return -1; - if (ta->GetThetay() > tb->GetThetay()) return 1; - if (ta->GetLoTrgNum() < tb->GetLoTrgNum()) return -1; - if (ta->GetLoTrgNum() > tb->GetLoTrgNum()) return 1; - if (ta->GetGTPattern() < tb->GetGTPattern()) return -1; - if (ta->GetGTPattern() > tb->GetGTPattern()) return 1; - return 0; - } else { result = memcmp(a, b, sizeof(TObject)); @@ -134,17 +104,18 @@ Int_t Compare(const TObject* a, const TObject* b) * The arrays and objects are then compared to each other. The arrays and objects * should contain the same information if everything is working correctly with * AliMUONMCDataInterface. If not then the difference is printed together with an - * error message and kFALSE is returned. + * error message and false is returned. */ bool SimTriggersOk() { - AliMUONMCDataInterface data; + AliMUONMCDataInterface data("generated/galice.root"); for (Int_t event = 0; event < data.NumberOfEvents(); event++) { TObjArray localsFromStore, regionalsFromStore; localsFromStore.SetOwner(kTRUE); regionalsFromStore.SetOwner(kTRUE); AliMUONVTriggerStore* store = data.TriggerStore(event); + if (store == NULL) return false; AliMUONGlobalTrigger* globalFromStore = static_cast(store->Global()->Clone()); TIter nextLocal(store->CreateLocalIterator()); AliMUONLocalTrigger* localTrig; @@ -244,6 +215,274 @@ bool SimTriggersOk() regionalsByIndex[i]->Print(); return false; } + regionalsFromStore[i]->Print(); + regionalsByIndex[i]->Print(); + } + } + return true; +} + +/** + * This method fills internal arrays with s-digits returned by the AliMUONMCDataInterface. + * For each set of interface methods available a TObjArray is filled with copies of + * the s-digits. These arrays are sorted and then compared to each other. The arrays + * should contain the same s-digit information if everything is working correctly with + * AliMUONMCDataInterface. If not then the difference is printed together with an + * error message and false is returned. + */ +bool SimSDigitsOk() +{ + AliMUONMCDataInterface data("generated/galice.root"); + for (Int_t event = 0; event < data.NumberOfEvents(); event++) + { + TObjArray digitsFromStore; + digitsFromStore.SetOwner(kTRUE); + AliMUONVDigitStore* store = data.SDigitStore(event); + if (store == NULL) return false; + TIter next(store->CreateIterator()); + AliMUONVDigit* digit; + while ( (digit = static_cast( next() )) != NULL ) + { + digitsFromStore.Add(digit->Clone()); + } + digitsFromStore.Sort(); + + TObjArray digitsByDetElem; + digitsByDetElem.SetOwner(kTRUE); + data.GetEvent(event); + for (Int_t detElem = 0; detElem < 1500; detElem++) + { + if (! AliMpDEManager::IsValidDetElemId(detElem)) continue; + Int_t ndigits = data.NumberOfSDigits(detElem); + for (Int_t i = 0; i < ndigits; i++) + { + AliMUONVDigit* digit = data.SDigit(detElem, i); + digitsByDetElem.Add(digit->Clone()); + } + } + digitsByDetElem.Sort(); + + TObjArray digitsByChamber; + digitsByChamber.SetOwner(kTRUE); + data.GetEvent(event); + for (Int_t chamber = 0; chamber < AliMpConstants::NofChambers(); chamber++) + for (Int_t cathode = 0; cathode < 2; cathode++) + { + Int_t ndigits = data.NumberOfSDigits(chamber, cathode); + for (Int_t i = 0; i < ndigits; i++) + { + AliMUONVDigit* digit = data.SDigit(chamber, cathode, i); + digitsByChamber.Add(digit->Clone()); + } + } + digitsByChamber.Sort(); + + // Now check that all the lists of s-digits contain the same results. + // They must. If they do not then something is wrong with the implementation + // of AliMUONMCDataInterface. + if (digitsFromStore.GetEntriesFast() != digitsByDetElem.GetEntriesFast() + || digitsFromStore.GetEntriesFast() != digitsByChamber.GetEntriesFast()) + { + Error( "SimSDigitsOk", + "The AliMUONMCDataInterface does not return all the s-digits correctly" + " through all its user interface methods. We got the following" + " numbers of s-digits: %d, %d and %d", + digitsFromStore.GetEntriesFast(), + digitsByDetElem.GetEntriesFast(), + digitsByChamber.GetEntriesFast() + ); + return false; + } + for (Int_t i = 0; i < digitsFromStore.GetEntriesFast(); i++) + { + if (digitsFromStore[i]->Compare(digitsByDetElem[i]) != 0 + || digitsFromStore[i]->Compare(digitsByChamber[i]) != 0) + { + Error( "SimSDigitsOk", + "The AliMUONMCDataInterface does not return identical s-digits" + " through all its user interface methods. The incorrect" + " s-digit has index %d after sorting.", + i + ); + digitsFromStore[i]->Print(); + digitsByChamber[i]->Print(); + digitsByDetElem[i]->Print(); + return false; + } + } + } + return true; +} + +/** + * This method fills internal arrays with digits returned by the AliMUONMCDataInterface. + * For each set of interface methods available a TObjArray is filled with copies of + * the digits. These arrays are sorted and then compared to each other. The arrays + * should contain the same digit information if everything is working correctly with + * AliMUONMCDataInterface. If not then the difference is printed together with an + * error message and false is returned. + */ +bool SimDigitsOk() +{ + AliMUONMCDataInterface data("generated/galice.root"); + for (Int_t event = 0; event < data.NumberOfEvents(); event++) + { + TObjArray digitsFromStore; + digitsFromStore.SetOwner(kTRUE); + AliMUONVDigitStore* store = data.DigitStore(event); + if (store == NULL) return false; + TIter next(store->CreateIterator()); + AliMUONVDigit* digit; + while ( (digit = static_cast( next() )) != NULL ) + { + digitsFromStore.Add(digit->Clone()); + } + digitsFromStore.Sort(); + + TObjArray digitsByDetElem; + digitsByDetElem.SetOwner(kTRUE); + data.GetEvent(event); + for (Int_t detElem = 0; detElem < 1500; detElem++) + { + if (! AliMpDEManager::IsValidDetElemId(detElem)) continue; + Int_t ndigits = data.NumberOfDigits(detElem); + for (Int_t i = 0; i < ndigits; i++) + { + AliMUONVDigit* digit = data.Digit(detElem, i); + digitsByDetElem.Add(digit->Clone()); + } + } + digitsByDetElem.Sort(); + + TObjArray digitsByChamber; + digitsByChamber.SetOwner(kTRUE); + data.GetEvent(event); + for (Int_t chamber = 0; chamber < AliMpConstants::NofChambers(); chamber++) + for (Int_t cathode = 0; cathode < 2; cathode++) + { + Int_t ndigits = data.NumberOfDigits(chamber, cathode); + for (Int_t i = 0; i < ndigits; i++) + { + AliMUONVDigit* digit = data.Digit(chamber, cathode, i); + digitsByChamber.Add(digit->Clone()); + } + } + digitsByChamber.Sort(); + + // Now check that all the lists of digits contain the same results. + // They must. If they do not then something is wrong with the implementation + // of AliMUONMCDataInterface. + if (digitsFromStore.GetEntriesFast() != digitsByDetElem.GetEntriesFast() + || digitsFromStore.GetEntriesFast() != digitsByChamber.GetEntriesFast()) + { + Error( "SimDigitsOk", + "The AliMUONMCDataInterface does not return all the digits correctly" + " through all its user interface methods. We got the following" + " numbers of digits: %d, %d and %d", + digitsFromStore.GetEntriesFast(), + digitsByDetElem.GetEntriesFast(), + digitsByChamber.GetEntriesFast() + ); + return false; + } + for (Int_t i = 0; i < digitsFromStore.GetEntriesFast(); i++) + { + if (digitsFromStore[i]->Compare(digitsByDetElem[i]) != 0 + || digitsFromStore[i]->Compare(digitsByChamber[i]) != 0) + { + Error( "SimDigitsOk", + "The AliMUONMCDataInterface does not return identical digits" + " through all its user interface methods. The incorrect" + " digit has index %d after sorting.", + i + ); + digitsFromStore[i]->Print(); + digitsByChamber[i]->Print(); + digitsByDetElem[i]->Print(); + return false; + } + } + } + return true; +} + +/** + * This method fills internal arrays with hits returned by the AliMUONMCDataInterface. + * For each set of interface methods available a TObjArray is filled with copies of + * the hits. These arrays are then compared to each other. The arrays should contain + * the same hit information if everything is working correctly with AliMUONMCDataInterface. + * If not then the difference is printed together with an error message and false is returned. + */ +bool SimHitsOk() +{ + AliMUONMCDataInterface data("generated/galice.root"); + for (Int_t event = 0; event < data.NumberOfEvents(); event++) + { + if (data.NumberOfTracks(event) != data.NumberOfTracks()) + { + Error( "SimHitsOk", + "The AliMUONMCDataInterface does not return the same number of tracks" + " through all its user interface methods. We got the following" + " numbers of tracks: %d and %d", + data.NumberOfTracks(event), + data.NumberOfTracks() + ); + return false; + } + + for (Int_t track = 0; track < data.NumberOfTracks(); track++) + { + TObjArray hitsFromStore; + hitsFromStore.SetOwner(kTRUE); + AliMUONVHitStore* store = data.HitStore(event, track); + if (store == NULL) return false; + TIter next(store->CreateIterator()); + AliMUONHit* hit; + while ( (hit = static_cast( next() )) != NULL ) + { + hitsFromStore.Add(hit->Clone()); + } + //hitsFromStore.Sort(); // Unfortunately hits do not implement the Compare method. + + TObjArray hitsByMethod; + hitsByMethod.SetOwner(kTRUE); + data.GetEvent(event); + for (Int_t i = 0; i < data.NumberOfHits(track); i++) + { + AliMUONHit* hit = data.Hit(track, i); + hitsByMethod.Add(hit->Clone()); + } + //hitsByMethod.Sort(); // Unfortunately hits do not implement the Compare method. + + // Now check that both lists of hits contain the same results. + // They must. If they do not then something is wrong with the implementation + // of AliMUONMCDataInterface. + if (hitsFromStore.GetEntriesFast() != hitsByMethod.GetEntriesFast()) + { + Error( "SimHitsOk", + "The AliMUONMCDataInterface does not return all the hits correctly" + " through all its user interface methods. We got the following" + " numbers of hits: %d and %d", + hitsFromStore.GetEntriesFast(), + hitsByMethod.GetEntriesFast() + ); + return false; + } + for (Int_t i = 0; i < hitsFromStore.GetEntriesFast(); i++) + { + if (Compare(hitsFromStore[i], hitsByMethod[i]) != 0) + { + Error( "SimHitsOk", + "The AliMUONMCDataInterface does not return identical hits" + " through all its user interface methods. The incorrect" + " hit has index %d after sorting, for track %d.", + i, track + ); + hitsFromStore[i]->Print(); + hitsByMethod[i]->Print(); + return false; + } + } } } return true; @@ -255,7 +494,7 @@ bool SimTriggersOk() * the digits. These arrays are sorted and then compared to each other. The arrays * should contain the same digit information if everything is working correctly with * AliMUONDataInterface. If not then the difference is printed together with an - * error message and kFALSE is returned. + * error message and false is returned. */ bool RecDigitsOk() { @@ -265,6 +504,7 @@ bool RecDigitsOk() TObjArray digitsFromStore; digitsFromStore.SetOwner(kTRUE); AliMUONVDigitStore* store = data.DigitStore(event); + if (store == NULL) return false; TIter next(store->CreateIterator()); AliMUONVDigit* digit; while ( (digit = static_cast( next() )) != NULL ) @@ -346,7 +586,7 @@ bool RecDigitsOk() * filled with copies of the raw clusters. These arrays are sorted and then compared * to each other. The arrays should contain the same information if everything is * working correctly with AliMUONDataInterface. If not then the difference is printed - * together with an error message and kFALSE is returned. + * together with an error message and false is returned. */ bool RawClustersOk() { @@ -356,6 +596,7 @@ bool RawClustersOk() TObjArray clustersFromStore; clustersFromStore.SetOwner(kTRUE); AliMUONVClusterStore* store = data.ClusterStore(event); + if (store == NULL) return false; TIter next(store->CreateIterator()); AliMUONVCluster* cluster; while ( (cluster = static_cast( next() )) != NULL ) @@ -367,7 +608,7 @@ bool RawClustersOk() TObjArray clustersByChamber; clustersByChamber.SetOwner(kTRUE); data.GetEvent(event); - for (Int_t chamber = 0; chamber < AliMpConstants::NofChambers(); chamber++) + for (Int_t chamber = 0; chamber < AliMpConstants::NofTrackingChambers(); chamber++) { Int_t nclusters = data.NumberOfRawClusters(chamber); for (Int_t i = 0; i < nclusters; i++) @@ -411,72 +652,6 @@ bool RawClustersOk() return true; } -/** - * This method fills internal arrays with tracks returned by AliMUONDataInterface. - * For each set of interface methods available in AliMUONDataInterface a TObjArray is - * filled with copies of the raw clusters. These arrays are then compared to each - * other. The arrays should contain the same information if everything is working - * correctly with AliMUONDataInterface. If not then the difference is printed - * together with an error message and kFALSE is returned. - */ -bool TracksOk() -{ - AliMUONDataInterface data; - for (Int_t event = 0; event < data.NumberOfEvents(); event++) - { - TObjArray tracksFromStore; - tracksFromStore.SetOwner(kTRUE); - AliMUONVTrackStore* store = data.TrackStore(event); - TIter next(store->CreateIterator()); - AliMUONTrack* track; - while ( (track = static_cast( next() )) != NULL ) - { - tracksFromStore.Add(track->Clone()); - } - - TObjArray tracksByIndex; - tracksByIndex.SetOwner(kTRUE); - data.GetEvent(event); - Int_t ntracks = data.NumberOfTracks(); - for (Int_t i = 0; i < ntracks; i++) - { - AliMUONTrack* track = data.Track(i); - tracksByIndex.Add(track->Clone()); - } - - // Now check that all the lists of tracks contain the same results. - // They must. If they do not then something is wrong with the implementation - // of AliMUONDataInterface. - if (tracksFromStore.GetEntriesFast() != tracksByIndex.GetEntriesFast()) - { - Error( "TracksOk", - "The AliMUONDataInterface does not return all the tracks correctly" - " through all its user interface methods. We got the following" - " numbers of tracks: %d and %d", - tracksFromStore.GetEntriesFast(), - tracksByIndex.GetEntriesFast() - ); - return false; - } - for (Int_t i = 0; i < tracksFromStore.GetEntriesFast(); i++) - { - if (Compare(tracksFromStore[i], tracksByIndex[i]) != 0) - { - Error( "TracksOk", - "The AliMUONDataInterface does not return identical tracks" - " through all its user interface methods. The incorrect" - " track has index %d.", - i - ); - tracksFromStore[i]->Print(); - tracksByIndex[i]->Print(); - return false; - } - } - } - return true; -} - /** * This method fills internal arrays with local and regional triggers returned * by AliMUONDataInterface. For each set of interface methods available in @@ -486,7 +661,7 @@ bool TracksOk() * The arrays and objects are then compared to each other. The arrays and objects * should contain the same information if everything is working correctly with * AliMUONDataInterface. If not then the difference is printed together with an - * error message and kFALSE is returned. + * error message and false is returned. */ bool TriggersOk() { @@ -497,6 +672,7 @@ bool TriggersOk() localsFromStore.SetOwner(kTRUE); regionalsFromStore.SetOwner(kTRUE); AliMUONVTriggerStore* store = data.TriggerStore(event); + if (store == NULL) return false; AliMUONGlobalTrigger* globalFromStore = static_cast(store->Global()->Clone()); TIter nextLocal(store->CreateLocalIterator()); AliMUONLocalTrigger* localTrig; @@ -601,72 +777,6 @@ bool TriggersOk() return true; } -/** - * This method fills internal arrays with trigger tracks returned by AliMUONDataInterface. - * For each set of interface methods available in AliMUONDataInterface a TObjArray is - * filled with copies of the trigger tracks. These arrays are then compared to each - * other. The arrays should contain the same information if everything is working - * correctly with AliMUONDataInterface. If not then the difference is printed - * together with an error message and kFALSE is returned. - */ -bool TriggerTracksOk() -{ - AliMUONDataInterface data; - for (Int_t event = 0; event < data.NumberOfEvents(); event++) - { - TObjArray tracksFromStore; - tracksFromStore.SetOwner(kTRUE); - AliMUONVTriggerTrackStore* store = data.TriggerTrackStore(event); - TIter next(store->CreateIterator()); - AliMUONTriggerTrack* track; - while ( (track = static_cast( next() )) != NULL ) - { - tracksFromStore.Add(track->Clone()); - } - - TObjArray tracksByIndex; - tracksByIndex.SetOwner(kTRUE); - data.GetEvent(event); - Int_t ntracks = data.NumberOfTriggerTracks(); - for (Int_t i = 0; i < ntracks; i++) - { - AliMUONTriggerTrack* track = data.TriggerTrack(i); - tracksByIndex.Add(track->Clone()); - } - - // Now check that all the lists of trigger tracks contain the same results. - // They must. If they do not then something is wrong with the implementation - // of AliMUONDataInterface. - if (tracksFromStore.GetEntriesFast() != tracksByIndex.GetEntriesFast()) - { - Error( "TriggerTracksOk", - "The AliMUONDataInterface does not return all the trigger tracks" - " correctly through all its user interface methods. We got the" - " following numbers of tracks: %d and %d", - tracksFromStore.GetEntriesFast(), - tracksByIndex.GetEntriesFast() - ); - return false; - } - for (Int_t i = 0; i < tracksFromStore.GetEntriesFast(); i++) - { - if (Compare(tracksFromStore[i], tracksByIndex[i]) != 0) - { - Error( "TriggerTracksOk", - "The AliMUONDataInterface does not return identical trigger" - " tracks through all its user interface methods. The" - " incorrect track has index %d.", - i - ); - tracksFromStore[i]->Print(); - tracksByIndex[i]->Print(); - return false; - } - } - } - return true; -} - /** * This method performs a check of the AliMUONDataInterface and AliMUONMCDataInterface * classes. Basically there are at least 2 ways to fetch data using these interfaces: @@ -678,32 +788,48 @@ bool TriggerTracksOk() * confirmation message is printed, if not then kFALSE is returned with the failure * reason printed to screen. */ -bool MUONCheckDI() +bool MUONCheckDI(bool checkSim = true, bool checkRec = true) { - // TODO: complete checking AliMUONMCDataInterface. - //cout << "Checking simulated triggers..." << endl; - //if (! SimTriggersOk()) return false; - //cout << "Simulated triggers look OK." << endl; + AliCDBManager::Instance()->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + + // Note: we do not bother checking the AliMUONMCDataInterface::Particle, + // AliMUONMCDataInterface::Stack and AliMUONMCDataInterface::TrackRefs methods + // because they are trivial enough to validate from a quick inspecition of + // the source code. - cout << "Checking reconstructed digits..." << endl; - if (! RecDigitsOk()) return false; - cout << "Reconstructed digits look OK." << endl; + if (checkSim) + { + cout << "Checking simulated hits..." << endl; + if (! SimHitsOk()) return false; + cout << "Simulated hits look OK." << endl; + + cout << "Checking simulated s-digits..." << endl; + if (! SimSDigitsOk()) return false; + cout << "Simulated s-digits look OK." << endl; + + cout << "Checking simulated digits..." << endl; + if (! SimDigitsOk()) return false; + cout << "Simulated digits look OK." << endl; + + cout << "Checking simulated triggers..." << endl; + if (! SimTriggersOk()) return false; + cout << "Simulated triggers look OK." << endl; + } - cout << "Checking raw clusters..." << endl; - if (! RawClustersOk()) return false; - cout << "Raw clusters look OK." << endl; - - cout << "Checking reconstructed tracks..." << endl; - if (! TracksOk()) return false; - cout << "Reconstructed tracks look OK." << endl; - - cout << "Checking reconstructed triggers..." << endl; - if (! TriggersOk()) return false; - cout << "Reconstructed triggers look OK." << endl; - - cout << "Checking reconstructed trigger tracks..." << endl; - if (! TriggerTracksOk()) return false; - cout << "Reconstructed trigger tracks look OK." << endl; + if (checkRec) + { + cout << "Checking reconstructed digits..." << endl; + if (! RecDigitsOk()) return false; + cout << "Reconstructed digits look OK." << endl; + + cout << "Checking raw clusters..." << endl; + if (! RawClustersOk()) return false; + cout << "Raw clusters look OK." << endl; + cout << "Checking reconstructed triggers..." << endl; + if (! TriggersOk()) return false; + cout << "Reconstructed triggers look OK." << endl; + } + return true; }