#include "AliMUONContourHandler.h"
#include "AliCodeTimer.h"
#include "AliLog.h"
#include "AliMUONContour.h"
#include "AliMUONContourMaker.h"
#include "AliMUONGeometryDetElement.h"
#include "AliMUONGeometryTransformer.h"
#include "AliMUONManuContourMaker.h"
#include "AliMUONPolygon.h"
#include "AliMUONSegment.h"
#include "AliMpArea.h"
#include "AliMpCDB.h"
#include "AliMpDDLStore.h"
#include "AliMpDEManager.h"
#include "AliMpExMap.h"
#include <float.h>
#include "Riostream.h"
#include "TArrow.h"
#include "TCanvas.h"
#include "TFile.h"
#include "TGeoMatrix.h"
#include "TLine.h"
#include "TObjArray.h"
#include "TPolyLine.h"
#include "TSystem.h"
using std::cout;
using std::endl;
ClassImp(AliMUONContourHandler)
AliMUONContourHandler::AliMUONContourHandler(Bool_t explodedView)
: TObject(),
fTransformations(0x0),
fAllContourMap(0x0),
fAllContourArray(0x0)
{
if ( explodedView )
{
fTransformations = GenerateTransformations(explodedView);
}
AliMUONManuContourMaker manuMaker(fTransformations);
TObjArray* manus = manuMaker.GenerateManuContours(kTRUE);
if (manus)
{
manus->SetOwner(kFALSE);
GenerateAllContours(*manus);
}
delete manus;
}
AliMUONContourHandler::~AliMUONContourHandler()
{
delete fTransformations;
delete fAllContourMap;
delete fAllContourArray;
}
Bool_t
AliMUONContourHandler::Adopt(AliMUONContour* contour)
{
if ( GetContour(contour->GetName()) )
{
return kFALSE;
}
fAllContourMap->Add(new TObjString(contour->GetName()),contour);
return kTRUE;
}
TObjArray*
AliMUONContourHandler::CreateContourList(const TObjArray& manuContours)
{
AliCodeTimerAuto("",0);
Int_t start(0);
if ( !fTransformations )
{
start = 2;
}
TIter next(&manuContours);
AliMUONContour* contour;
TObjArray* mapArray = new TObjArray;
while ( ( contour = static_cast<AliMUONContour*>(next()) ) )
{
TString key(contour->GetName());
TObjArray* s = key.Tokenize("/");
for ( Int_t i = start; i < s->GetLast(); ++i )
{
TMap* m = static_cast<TMap*>(mapArray->At(i));
if (!m)
{
m = new TMap;
if ( i > mapArray->GetSize() ) mapArray->Expand(i);
mapArray->AddAt(m,i);
}
TString parent;
for ( Int_t k = 0; k <= i; ++k )
{
TObjString* str = static_cast<TObjString*>(s->At(k));
parent += str->String();
if ( k < i ) parent += "/";
}
TString child(parent);
child += "/";
child += static_cast<TObjString*>(s->At(i+1))->String();
TObjArray* ma = static_cast<TObjArray*>(m->GetValue(parent.Data()));
if (!ma)
{
ma = new TObjArray;
m->Add(new TObjString(parent.Data()),ma);
}
TPair* p = static_cast<TPair*>(ma->FindObject(child.Data()));
if ( !p )
{
ma->Add(new TObjString(child.Data()));
}
}
delete s;
}
return mapArray;
}
void
AliMUONContourHandler::GenerateAllContours(const TObjArray& manuContours)
{
AliCodeTimerAuto("",0);
TObjArray* mapArray = CreateContourList(manuContours);
fAllContourMap = new TMap(20000,1);
fAllContourMap->SetOwnerKeyValue(kTRUE,kTRUE);
fAllContourArray = new TObjArray;
fAllContourArray->SetOwner(kFALSE);
TIter nextContour(&manuContours);
AliMUONContour* contour(0x0);
while ( ( contour = static_cast<AliMUONContour*>(nextContour()) ) )
{
fAllContourMap->Add(new TObjString(contour->GetName()),contour);
}
AliMUONContourMaker maker;
for ( Int_t i = mapArray->GetLast(); i >= 1; --i )
{
TMap* a = static_cast<TMap*>(mapArray->At(i));
TIter next3(a);
TObjString* str;
while ( ( str = static_cast<TObjString*>(next3()) ) )
{
TObjArray* m = static_cast<TObjArray*>(a->GetValue(str->String().Data()));
TIter next4(m);
TObjString* k;
TObjArray subcontours;
subcontours.SetOwner(kFALSE);
while ( ( k = static_cast<TObjString*>(next4()) ) )
{
contour = static_cast<AliMUONContour*>(fAllContourMap->GetValue(k->String().Data()));
if ( contour )
{
subcontours.Add(contour);
}
else
{
AliError(Form("Did not find contour %s",k->String().Data()));
continue;
}
}
contour = maker.MergeContour(subcontours,str->String().Data());
bool error(kFALSE);
if (!contour)
{
error=kTRUE;
AliError(Form("ERROR : could not merge into %s",str->String().Data()));
}
else
{
if ( contour->Area().IsValid() == kFALSE )
{
error=kTRUE;
AliError(Form("ERROR : area of contour %s is invalid",str->String().Data()));
}
}
if (!error)
{
fAllContourMap->Add(new TObjString(str->String().Data()),contour);
fAllContourArray->Add(contour);
}
}
}
}
AliMpExMap*
AliMUONContourHandler::GenerateTransformations(Bool_t exploded)
{
AliCodeTimerAuto("",0);
AliMUONGeometryTransformer transformer;
Bool_t ok = transformer.LoadGeometryData("transform.dat");
if (!ok)
{
cout << "ERROR : cannot get geometry !" << endl;
return 0x0;
}
AliMpExMap* transformations = new AliMpExMap;
AliMpDEIterator deIt;
deIt.First();
while ( !deIt.IsDone() )
{
Int_t detElemId = deIt.CurrentDEId();
const AliMUONGeometryDetElement* de = transformer.GetDetElement(detElemId);
TGeoHMatrix* matrix = static_cast<TGeoHMatrix*>(de->GetGlobalTransformation()->Clone());
if (exploded)
{
Double_t* translation = matrix->GetTranslation();
Double_t xscale = 1.0;
Double_t yscale = 1.5;
Double_t shift = 5.0;
if ( AliMpDEManager::GetStationType(detElemId) == AliMp::kStation345 )
{
translation[0] *= xscale;
translation[1] *= yscale;
}
else
{
Double_t xshift[] = { shift, -shift, -shift, shift };
Double_t yshift[] = { shift, shift, -shift, -shift };
Int_t ishift = detElemId % 100;
translation[0] += xshift[ishift];
translation[1] += yshift[ishift];
}
matrix->SetTranslation(translation);
}
transformations->Add(detElemId,matrix);
deIt.Next();
}
return transformations;
}
AliMUONContour*
AliMUONContourHandler::GetContour(const char* contourname) const
{
return static_cast<AliMUONContour*>(fAllContourMap->GetValue(contourname));
}
void
AliMUONContourHandler::Print(Option_t* opt) const
{
if ( ! fAllContourMap ) return;
cout << Form("Contour map : collisions = %5.3f size = %d capacity = %d",
fAllContourMap->AverageCollisions(),
fAllContourMap->GetSize(),
fAllContourMap->Capacity()) << endl;
TString sopt(opt);
sopt.ToUpper();
if ( sopt.Contains("ALL") || sopt.Contains("FULL") )
{
fAllContourMap->Print();
}
}
AliMUONContourHandler.cxx:1 AliMUONContourHandler.cxx:2 AliMUONContourHandler.cxx:3 AliMUONContourHandler.cxx:4 AliMUONContourHandler.cxx:5 AliMUONContourHandler.cxx:6 AliMUONContourHandler.cxx:7 AliMUONContourHandler.cxx:8 AliMUONContourHandler.cxx:9 AliMUONContourHandler.cxx:10 AliMUONContourHandler.cxx:11 AliMUONContourHandler.cxx:12 AliMUONContourHandler.cxx:13 AliMUONContourHandler.cxx:14 AliMUONContourHandler.cxx:15 AliMUONContourHandler.cxx:16 AliMUONContourHandler.cxx:17 AliMUONContourHandler.cxx:18 AliMUONContourHandler.cxx:19 AliMUONContourHandler.cxx:20 AliMUONContourHandler.cxx:21 AliMUONContourHandler.cxx:22 AliMUONContourHandler.cxx:23 AliMUONContourHandler.cxx:24 AliMUONContourHandler.cxx:25 AliMUONContourHandler.cxx:26 AliMUONContourHandler.cxx:27 AliMUONContourHandler.cxx:28 AliMUONContourHandler.cxx:29 AliMUONContourHandler.cxx:30 AliMUONContourHandler.cxx:31 AliMUONContourHandler.cxx:32 AliMUONContourHandler.cxx:33 AliMUONContourHandler.cxx:34 AliMUONContourHandler.cxx:35 AliMUONContourHandler.cxx:36 AliMUONContourHandler.cxx:37 AliMUONContourHandler.cxx:38 AliMUONContourHandler.cxx:39 AliMUONContourHandler.cxx:40 AliMUONContourHandler.cxx:41 AliMUONContourHandler.cxx:42 AliMUONContourHandler.cxx:43 AliMUONContourHandler.cxx:44 AliMUONContourHandler.cxx:45 AliMUONContourHandler.cxx:46 AliMUONContourHandler.cxx:47 AliMUONContourHandler.cxx:48 AliMUONContourHandler.cxx:49 AliMUONContourHandler.cxx:50 AliMUONContourHandler.cxx:51 AliMUONContourHandler.cxx:52 AliMUONContourHandler.cxx:53 AliMUONContourHandler.cxx:54 AliMUONContourHandler.cxx:55 AliMUONContourHandler.cxx:56 AliMUONContourHandler.cxx:57 AliMUONContourHandler.cxx:58 AliMUONContourHandler.cxx:59 AliMUONContourHandler.cxx:60 AliMUONContourHandler.cxx:61 AliMUONContourHandler.cxx:62 AliMUONContourHandler.cxx:63 AliMUONContourHandler.cxx:64 AliMUONContourHandler.cxx:65 AliMUONContourHandler.cxx:66 AliMUONContourHandler.cxx:67 AliMUONContourHandler.cxx:68 AliMUONContourHandler.cxx:69 AliMUONContourHandler.cxx:70 AliMUONContourHandler.cxx:71 AliMUONContourHandler.cxx:72 AliMUONContourHandler.cxx:73 AliMUONContourHandler.cxx:74 AliMUONContourHandler.cxx:75 AliMUONContourHandler.cxx:76 AliMUONContourHandler.cxx:77 AliMUONContourHandler.cxx:78 AliMUONContourHandler.cxx:79 AliMUONContourHandler.cxx:80 AliMUONContourHandler.cxx:81 AliMUONContourHandler.cxx:82 AliMUONContourHandler.cxx:83 AliMUONContourHandler.cxx:84 AliMUONContourHandler.cxx:85 AliMUONContourHandler.cxx:86 AliMUONContourHandler.cxx:87 AliMUONContourHandler.cxx:88 AliMUONContourHandler.cxx:89 AliMUONContourHandler.cxx:90 AliMUONContourHandler.cxx:91 AliMUONContourHandler.cxx:92 AliMUONContourHandler.cxx:93 AliMUONContourHandler.cxx:94 AliMUONContourHandler.cxx:95 AliMUONContourHandler.cxx:96 AliMUONContourHandler.cxx:97 AliMUONContourHandler.cxx:98 AliMUONContourHandler.cxx:99 AliMUONContourHandler.cxx:100 AliMUONContourHandler.cxx:101 AliMUONContourHandler.cxx:102 AliMUONContourHandler.cxx:103 AliMUONContourHandler.cxx:104 AliMUONContourHandler.cxx:105 AliMUONContourHandler.cxx:106 AliMUONContourHandler.cxx:107 AliMUONContourHandler.cxx:108 AliMUONContourHandler.cxx:109 AliMUONContourHandler.cxx:110 AliMUONContourHandler.cxx:111 AliMUONContourHandler.cxx:112 AliMUONContourHandler.cxx:113 AliMUONContourHandler.cxx:114 AliMUONContourHandler.cxx:115 AliMUONContourHandler.cxx:116 AliMUONContourHandler.cxx:117 AliMUONContourHandler.cxx:118 AliMUONContourHandler.cxx:119 AliMUONContourHandler.cxx:120 AliMUONContourHandler.cxx:121 AliMUONContourHandler.cxx:122 AliMUONContourHandler.cxx:123 AliMUONContourHandler.cxx:124 AliMUONContourHandler.cxx:125 AliMUONContourHandler.cxx:126 AliMUONContourHandler.cxx:127 AliMUONContourHandler.cxx:128 AliMUONContourHandler.cxx:129 AliMUONContourHandler.cxx:130 AliMUONContourHandler.cxx:131 AliMUONContourHandler.cxx:132 AliMUONContourHandler.cxx:133 AliMUONContourHandler.cxx:134 AliMUONContourHandler.cxx:135 AliMUONContourHandler.cxx:136 AliMUONContourHandler.cxx:137 AliMUONContourHandler.cxx:138 AliMUONContourHandler.cxx:139 AliMUONContourHandler.cxx:140 AliMUONContourHandler.cxx:141 AliMUONContourHandler.cxx:142 AliMUONContourHandler.cxx:143 AliMUONContourHandler.cxx:144 AliMUONContourHandler.cxx:145 AliMUONContourHandler.cxx:146 AliMUONContourHandler.cxx:147 AliMUONContourHandler.cxx:148 AliMUONContourHandler.cxx:149 AliMUONContourHandler.cxx:150 AliMUONContourHandler.cxx:151 AliMUONContourHandler.cxx:152 AliMUONContourHandler.cxx:153 AliMUONContourHandler.cxx:154 AliMUONContourHandler.cxx:155 AliMUONContourHandler.cxx:156 AliMUONContourHandler.cxx:157 AliMUONContourHandler.cxx:158 AliMUONContourHandler.cxx:159 AliMUONContourHandler.cxx:160 AliMUONContourHandler.cxx:161 AliMUONContourHandler.cxx:162 AliMUONContourHandler.cxx:163 AliMUONContourHandler.cxx:164 AliMUONContourHandler.cxx:165 AliMUONContourHandler.cxx:166 AliMUONContourHandler.cxx:167 AliMUONContourHandler.cxx:168 AliMUONContourHandler.cxx:169 AliMUONContourHandler.cxx:170 AliMUONContourHandler.cxx:171 AliMUONContourHandler.cxx:172 AliMUONContourHandler.cxx:173 AliMUONContourHandler.cxx:174 AliMUONContourHandler.cxx:175 AliMUONContourHandler.cxx:176 AliMUONContourHandler.cxx:177 AliMUONContourHandler.cxx:178 AliMUONContourHandler.cxx:179 AliMUONContourHandler.cxx:180 AliMUONContourHandler.cxx:181 AliMUONContourHandler.cxx:182 AliMUONContourHandler.cxx:183 AliMUONContourHandler.cxx:184 AliMUONContourHandler.cxx:185 AliMUONContourHandler.cxx:186 AliMUONContourHandler.cxx:187 AliMUONContourHandler.cxx:188 AliMUONContourHandler.cxx:189 AliMUONContourHandler.cxx:190 AliMUONContourHandler.cxx:191 AliMUONContourHandler.cxx:192 AliMUONContourHandler.cxx:193 AliMUONContourHandler.cxx:194 AliMUONContourHandler.cxx:195 AliMUONContourHandler.cxx:196 AliMUONContourHandler.cxx:197 AliMUONContourHandler.cxx:198 AliMUONContourHandler.cxx:199 AliMUONContourHandler.cxx:200 AliMUONContourHandler.cxx:201 AliMUONContourHandler.cxx:202 AliMUONContourHandler.cxx:203 AliMUONContourHandler.cxx:204 AliMUONContourHandler.cxx:205 AliMUONContourHandler.cxx:206 AliMUONContourHandler.cxx:207 AliMUONContourHandler.cxx:208 AliMUONContourHandler.cxx:209 AliMUONContourHandler.cxx:210 AliMUONContourHandler.cxx:211 AliMUONContourHandler.cxx:212 AliMUONContourHandler.cxx:213 AliMUONContourHandler.cxx:214 AliMUONContourHandler.cxx:215 AliMUONContourHandler.cxx:216 AliMUONContourHandler.cxx:217 AliMUONContourHandler.cxx:218 AliMUONContourHandler.cxx:219 AliMUONContourHandler.cxx:220 AliMUONContourHandler.cxx:221 AliMUONContourHandler.cxx:222 AliMUONContourHandler.cxx:223 AliMUONContourHandler.cxx:224 AliMUONContourHandler.cxx:225 AliMUONContourHandler.cxx:226 AliMUONContourHandler.cxx:227 AliMUONContourHandler.cxx:228 AliMUONContourHandler.cxx:229 AliMUONContourHandler.cxx:230 AliMUONContourHandler.cxx:231 AliMUONContourHandler.cxx:232 AliMUONContourHandler.cxx:233 AliMUONContourHandler.cxx:234 AliMUONContourHandler.cxx:235 AliMUONContourHandler.cxx:236 AliMUONContourHandler.cxx:237 AliMUONContourHandler.cxx:238 AliMUONContourHandler.cxx:239 AliMUONContourHandler.cxx:240 AliMUONContourHandler.cxx:241 AliMUONContourHandler.cxx:242 AliMUONContourHandler.cxx:243 AliMUONContourHandler.cxx:244 AliMUONContourHandler.cxx:245 AliMUONContourHandler.cxx:246 AliMUONContourHandler.cxx:247 AliMUONContourHandler.cxx:248 AliMUONContourHandler.cxx:249 AliMUONContourHandler.cxx:250 AliMUONContourHandler.cxx:251 AliMUONContourHandler.cxx:252 AliMUONContourHandler.cxx:253 AliMUONContourHandler.cxx:254 AliMUONContourHandler.cxx:255 AliMUONContourHandler.cxx:256 AliMUONContourHandler.cxx:257 AliMUONContourHandler.cxx:258 AliMUONContourHandler.cxx:259 AliMUONContourHandler.cxx:260 AliMUONContourHandler.cxx:261 AliMUONContourHandler.cxx:262 AliMUONContourHandler.cxx:263 AliMUONContourHandler.cxx:264 AliMUONContourHandler.cxx:265 AliMUONContourHandler.cxx:266 AliMUONContourHandler.cxx:267 AliMUONContourHandler.cxx:268 AliMUONContourHandler.cxx:269 AliMUONContourHandler.cxx:270 AliMUONContourHandler.cxx:271 AliMUONContourHandler.cxx:272 AliMUONContourHandler.cxx:273 AliMUONContourHandler.cxx:274 AliMUONContourHandler.cxx:275 AliMUONContourHandler.cxx:276 AliMUONContourHandler.cxx:277 AliMUONContourHandler.cxx:278 AliMUONContourHandler.cxx:279 AliMUONContourHandler.cxx:280 AliMUONContourHandler.cxx:281 AliMUONContourHandler.cxx:282 AliMUONContourHandler.cxx:283 AliMUONContourHandler.cxx:284 AliMUONContourHandler.cxx:285 AliMUONContourHandler.cxx:286 AliMUONContourHandler.cxx:287 AliMUONContourHandler.cxx:288 AliMUONContourHandler.cxx:289 AliMUONContourHandler.cxx:290 AliMUONContourHandler.cxx:291 AliMUONContourHandler.cxx:292 AliMUONContourHandler.cxx:293 AliMUONContourHandler.cxx:294 AliMUONContourHandler.cxx:295 AliMUONContourHandler.cxx:296 AliMUONContourHandler.cxx:297 AliMUONContourHandler.cxx:298 AliMUONContourHandler.cxx:299 AliMUONContourHandler.cxx:300 AliMUONContourHandler.cxx:301 AliMUONContourHandler.cxx:302 AliMUONContourHandler.cxx:303 AliMUONContourHandler.cxx:304 AliMUONContourHandler.cxx:305 AliMUONContourHandler.cxx:306 AliMUONContourHandler.cxx:307 AliMUONContourHandler.cxx:308 AliMUONContourHandler.cxx:309 AliMUONContourHandler.cxx:310 AliMUONContourHandler.cxx:311 AliMUONContourHandler.cxx:312 AliMUONContourHandler.cxx:313 AliMUONContourHandler.cxx:314 AliMUONContourHandler.cxx:315 AliMUONContourHandler.cxx:316 AliMUONContourHandler.cxx:317 AliMUONContourHandler.cxx:318 AliMUONContourHandler.cxx:319 AliMUONContourHandler.cxx:320 AliMUONContourHandler.cxx:321 AliMUONContourHandler.cxx:322 AliMUONContourHandler.cxx:323 AliMUONContourHandler.cxx:324 AliMUONContourHandler.cxx:325 AliMUONContourHandler.cxx:326 AliMUONContourHandler.cxx:327 AliMUONContourHandler.cxx:328 AliMUONContourHandler.cxx:329 AliMUONContourHandler.cxx:330 AliMUONContourHandler.cxx:331 AliMUONContourHandler.cxx:332 AliMUONContourHandler.cxx:333 AliMUONContourHandler.cxx:334 AliMUONContourHandler.cxx:335 AliMUONContourHandler.cxx:336 AliMUONContourHandler.cxx:337 AliMUONContourHandler.cxx:338 AliMUONContourHandler.cxx:339 AliMUONContourHandler.cxx:340 AliMUONContourHandler.cxx:341 AliMUONContourHandler.cxx:342 AliMUONContourHandler.cxx:343 AliMUONContourHandler.cxx:344 AliMUONContourHandler.cxx:345 AliMUONContourHandler.cxx:346 AliMUONContourHandler.cxx:347 AliMUONContourHandler.cxx:348 AliMUONContourHandler.cxx:349 AliMUONContourHandler.cxx:350 AliMUONContourHandler.cxx:351 AliMUONContourHandler.cxx:352 AliMUONContourHandler.cxx:353 AliMUONContourHandler.cxx:354 AliMUONContourHandler.cxx:355 AliMUONContourHandler.cxx:356 AliMUONContourHandler.cxx:357 AliMUONContourHandler.cxx:358 AliMUONContourHandler.cxx:359 AliMUONContourHandler.cxx:360