1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 /// \class AliMUONLegacyClusterServer
20 /// Special implementation of AliMUONVClusterServer, which will only return
21 /// clusters from a pre-defined cluster store.
23 /// Made to recover the old (i.e. before introduction of VClusterServer) behavior
24 /// of the MUON recontruction where rec points were always written to TreeR,
25 /// and then the tracking picked them from that tree, in order to have the
26 /// possibility to save full rec points (for debugging the spectro, mainly, should
27 /// not be an option used during final production).
29 /// \author Laurent Aphecetche, Subatech
32 #include "AliMUONLegacyClusterServer.h"
34 #include "AliCodeTimer.h"
36 #include "AliMUONGeometryTransformer.h"
37 #include "AliMUONTriggerTrackToTrackerClusters.h"
38 #include "AliMUONVCluster.h"
39 #include "AliMUONVClusterStore.h"
40 #include "AliMpArea.h"
41 #include <TCollection.h>
44 ClassImp(AliMUONLegacyClusterServer)
47 //_____________________________________________________________________________
48 AliMUONLegacyClusterServer::AliMUONLegacyClusterServer(const AliMUONGeometryTransformer& transformer,
49 AliMUONVClusterStore* store,
50 Bool_t bypassSt4, Bool_t bypassSt5)
51 : AliMUONVClusterServer(), fTransformer(transformer), fClusterStore(store), fTriggerTrackStore(0x0),
53 fBypassSt4(bypassSt4),
56 /// ctor. Mode Read : we'll only server clusters from existing store
59 //_____________________________________________________________________________
60 AliMUONLegacyClusterServer::~AliMUONLegacyClusterServer()
66 //_____________________________________________________________________________
68 AliMUONLegacyClusterServer::Clusterize(Int_t chamberId,
69 AliMUONVClusterStore& clusterStore,
70 const AliMpArea& /*area*/)
72 /// Fills clusterStore with clusters in given chamber
74 /// Return the number of clusters added to clusterStore
76 AliCodeTimerAuto(Form("Chamber %d",chamberId));
78 if ( fBypassSt4 && ( chamberId == 6 || chamberId == 7 ) )
80 return fBypass->GenerateClusters(chamberId,clusterStore);
83 if ( fBypassSt5 && ( chamberId == 8 || chamberId == 9 ) )
85 return fBypass->GenerateClusters(chamberId,clusterStore);
88 AliDebug(1,Form("chamberId=%d fClusterStore(%p).GetSize()=%d clusterStore(%p).GetSize()=%d",
90 fClusterStore,fClusterStore->GetSize(),
91 &clusterStore,clusterStore.GetSize()));
93 TIter next(fClusterStore->CreateChamberIterator(chamberId,chamberId));
94 AliMUONVCluster* cluster;
98 while ( ( cluster = static_cast<AliMUONVCluster*>(next()) ) )
100 clusterStore.Add(*cluster);
106 while ( ( cluster = static_cast<AliMUONVCluster*>(remove()) ) )
108 fClusterStore->Remove(*cluster);
111 AliDebug(1,Form("n=%d remaining clusters=%d",n,fClusterStore->GetSize()));
116 //_____________________________________________________________________________
118 AliMUONLegacyClusterServer::UseTriggerTrackStore(AliMUONVTriggerTrackStore* trackStore)
120 /// Tells us to use trigger track store, and thus to bypass St4 and/or 5 clusters
121 fTriggerTrackStore = trackStore; // not owner
123 fBypass = new AliMUONTriggerTrackToTrackerClusters(fTransformer,fTriggerTrackStore);
127 //_____________________________________________________________________________
129 AliMUONLegacyClusterServer::UseDigits(TIter&)
131 /// Give the iterator to our delegate if we have one, of issue and error
133 AliError("Not implemented for this class, as we're not writing clusters, but reading them instead !");