Correcting a long standing bug in the mapping of short slats
[u/mrichter/AliRoot.git] / MUON / mapping / macros / testGraphicsSlat.C
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15
16 // $Id$
17 // $MpId: $
18
19 //
20 // Test macro for drawing slat motifs with real contours
21 // Christian Finck, Subatech
22 //
23 #if !defined(__CINT__) || defined(__MAKECINT__)
24
25 // MUON includes
26 #include "AliMpSt345Reader.h"
27 #include "AliMpPCB.h"
28 #include "AliMpSlat.h"
29 #include "AliMpVPainter.h"
30 #include "AliMpMotifReader.h"
31 #include "AliMpMotifType.h"
32 #include "AliMpMotifPosition.h"
33 #include "AliMpMotif.h"
34 #include "AliMpSlatMotifMap.h"
35 #include "TVector2.h"
36 #include "TCanvas.h"
37 #include "AliMpDataStreams.h"
38 #endif
39
40 void testGraphicsMotif(Option_t* motifType = "R43", const TVector2& padSizes = TVector2(5,0.5))
41 {
42   // Warning : this function leaks memory. But should be fine as only used 
43   // interactively to check a few motifs at once...
44   //
45   AliMpDataStreams ds;
46   AliMpMotifReader reader(ds,AliMp::kStation345,AliMp::kBendingPlane);
47   AliMpMotifType* type = reader.BuildMotifType(motifType);
48   if (!type)
49   {
50     cerr << "Motif not found" << endl;
51     return;
52   }
53   type->Print("G");
54   AliMpMotif* motif = new AliMpMotif(motifType,type,padSizes);
55   AliMpMotifPosition* pos = new AliMpMotifPosition(0,motif,TVector2(0,0));
56   AliMpVPainter* painter = AliMpVPainter::CreatePainter(pos);
57   if (!painter)
58   {
59     cerr << "Could not get a painter !" << endl;
60     return;
61   }
62   new TCanvas(motifType,motifType);
63   painter->Draw("PT");
64 }
65
66 //112230N
67 //112233NR3
68 //220000N
69 //122000NR1
70 //112200NR2
71 void testGraphicsSlat(AliMp::PlaneType planeType = AliMp::kBendingPlane, 
72                       Option_t* option = "PMCI",
73                       Bool_t saveJPG = false)
74 {
75   // P plane
76   // M motif
77   // P pad
78   // I indices
79
80   // PMPT to get manu channels numbering
81   
82   Char_t *slatName[19] = {"122000SR1", "112200SR2", "122200S", "222000N", "220000N",
83                           "122000NR1", "112200NR2", "122200N",
84                           "122330N", "112233NR3", "112230N", "222330N", "223300N", "333000N", "330000N",
85                           "112233N", "222333N", "223330N", "333300N"};
86                           
87   TCanvas *c1[19];
88   Char_t c1Name[255];
89   Char_t c1NameJpg[255];
90   
91   for (Int_t i = 0; i < 2; i++) {
92     sprintf(c1Name, "%s%d", "c1", i);
93     c1[i]= new TCanvas(c1Name,slatName[i],10,10,1200,800);     
94
95     Char_t* slatType = slatName[i];
96     AliMpDataStreams ds;
97     AliMpSt345Reader* reader = new AliMpSt345Reader(ds);
98     AliMpSlat* slat = reader->ReadSlat(slatType, planeType);
99     AliMpVPainter* painter = AliMpVPainter::CreatePainter(slat);
100     painter->Draw(option);
101   
102     if (planeType == AliMp::kNonBendingPlane)
103       sprintf(c1NameJpg, "%s%s", slatName[i], "_NonBending.jpg");
104     else 
105       sprintf(c1NameJpg, "%s%s", slatName[i], "_Bending.jpg");
106     
107     if (saveJPG) c1[i]->Print(c1NameJpg);
108   }
109  
110 }
111
112 void testGraphicsPCB(const char* pcbName="S2B",
113                       Option_t* option = "MZT",
114                       Bool_t savePNG = false)
115 {
116   
117   TCanvas* c = new TCanvas(pcbName,pcbName,10,10,1200,800);     
118     
119   AliMpDataStreams ds;
120   AliMpSt345Reader* reader = new AliMpSt345Reader(ds);
121   AliMpPCB* pcb = reader->ReadPCB(pcbName);
122   if (!pcb) 
123   {
124     cerr << "PCB " << pcbName << " does not exist" << endl;
125     return;
126   }
127   
128   AliMpVPainter* painter = AliMpVPainter::CreatePainter(pcb);
129   painter->Draw(option);
130     
131   if (savePNG) c->Print(Form("%s-%s.png",pcbName,option));
132   
133 }