3 #include "AliITSRecoParam.h"
4 #include "AliITSReconstructor.h"
5 #include "AliITSRecPointContainer.h"
6 #include "AliITSRecPoint.h"
7 #include "AliRunLoader.h"
9 ClassImp(AliITSRecPointContainer)
11 //////////////////////////////////////////////////////////////////////
12 // Class to store ITS RecPoints for the duration of //
13 // one event processing //
14 // The container is cleared at each event and new RP //
15 // are loaded from TTree //
16 // Origin masera@to.infn.it Nov. 12 2009 //
17 //////////////////////////////////////////////////////////////////////
21 AliITSRecPointContainer* AliITSRecPointContainer::fgInstance = 0x0;
23 //______________________________________________________________________
24 AliITSRecPointContainer::AliITSRecPointContainer(const AliITSRecoParam* krp):TObject(),
33 // Default constructor
35 if(fgkNModules != AliITSgeomTGeo::GetNModules())AliError(Form("The total number of modules is not %d, but %d",fgkNModules,AliITSgeomTGeo::GetNModules()));
38 for(Int_t i=0;i<6;i++)modperlay[i]=AliITSgeomTGeo::GetNDetectors(1+i)*AliITSgeomTGeo::GetNLadders(1+i);
39 fSPDNModules=modperlay[0]+modperlay[1];
40 fSDDNModules=modperlay[2]+modperlay[3];
41 fSSDNModules=modperlay[4]+modperlay[5];
42 // AliInfo(Form("Total modules: %d \n SPD modules=%d , SDD modules=%d, SSD modules=%d ",fgkNModules,fSPDNModules,fSDDNModules,fSSDNModules));
44 // kLimits[0:5] --> low fluw; kLimits[6,11] --> High flux
45 const Int_t kLimits[12]={25,25,20,20,10,10,300,300,200,200,100,100};
48 AliWarning("AliITSRecoPoint is missing. Using defaults");
51 if(krp->GetEventSpecie() == AliRecoParam::kHighMult)offset=6;
55 for(Int_t i=0;i<6;i++){
56 maxval[i]=kLimits[i+offset];
59 if(i>0)modperlay[i]+=modperlay[i-1];
61 AliInfo(Form("Container created with sizes/layer: %s",values.Data()));
63 for(Int_t i=0;i<fgkNModules;i++){
64 if(i>=modperlay[layer])++layer;
65 fArray[i]=new TClonesArray("AliITSRecPoint",maxval[layer]);
70 //______________________________________________________________________
71 AliITSRecPointContainer::~AliITSRecPointContainer(){
73 for(Int_t i=0;i<fgkNModules;i++){
81 //______________________________________________________________________
82 void AliITSRecPointContainer::CookEntries(){
83 // From the number of entries in TTree R, the number of ITS subdetectors
84 // active for the present run is inferred
85 if(fActualSize == fgkNModules)fDet="ALL SPD SDD SSD ";
86 if(fActualSize == fSPDNModules) fDet = "SPD ";
87 if(fActualSize == fSDDNModules) fDet = "SDD ";
88 if(fActualSize == fSSDNModules)fDet = "SSD ";
89 if(fActualSize == (fSPDNModules+fSDDNModules)) fDet = "SPD SDD ";
90 if(fActualSize == (fSPDNModules+fSSDNModules))fDet = "SPD SSD ";
91 if(fActualSize == (fSDDNModules+fSSDNModules))fDet = "SDD SSD ";
92 if((!fDet.Contains("SPD")) && (!fDet.Contains("SDD")) &&
93 (!fDet.Contains("SSD"))){
94 AliError(Form("The number of active modules %d does not correspond to any standard configuration of the detector",fActualSize));
98 //______________________________________________________________________
99 TClonesArray* AliITSRecPointContainer::FetchClusters(Int_t mod, TTree* tR){
100 // retrieves Recpoints for module mod
101 Int_t cureve=AliRunLoader::Instance()->GetEventNumber();
102 if(cureve != fCurrentEve){
103 fCurrentEve = cureve;
105 TBranch *branch = NULL;
106 branch = tR->GetBranch("ITSRecPoints");
108 AliError("Branch ITSRecPoints not found on ITS recpoints TTree");
113 fActualSize = branch->GetEntries();
115 if(fDet.IsNull())return NULL;
117 // it is assumed that the filling order of the tree is SPD, SDD, SSD
118 // even if one or two subdetector are missing
120 for(Int_t i=0;i<fSPDNModules;i++){
121 branch->SetAddress(&fArray[i]);
127 if(IsSPDActive())start+=fSPDNModules;
128 Int_t counter = fSPDNModules;
129 for(Int_t i=start;i<start+fSDDNModules;i++){
130 branch->SetAddress(&fArray[counter]);
137 if(IsSPDActive())start+=fSPDNModules;
138 if(IsSDDActive())start+=fSDDNModules;
139 Int_t counter = fSPDNModules+fSDDNModules;
140 for(Int_t i=start;i<start+fSSDNModules;i++){
141 branch->SetAddress(&fArray[counter]);
148 if(CheckBoundaries(mod)){
152 AliError(Form("Module %d is out of boundaries",mod));
158 //______________________________________________________________________
159 AliITSRecPointContainer* AliITSRecPointContainer::Instance(const AliITSRecoParam* kptr){
160 // returns AliITSRecPointContainer instance (singleton)
163 fgInstance = new AliITSRecPointContainer(AliITSReconstructor::GetRecoParam());
166 fgInstance = new AliITSRecPointContainer(kptr);
172 //______________________________________________________________________
173 void AliITSRecPointContainer::Reset(){
174 // Resets the status of the object
175 for(Int_t i=0;i<fgkNModules;i++){
176 (fArray[i])->Clear();