Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 2007-2010, 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 : //========================================================================
17 : //
18 : // This class generates misalignment for VZERO. In particular it defines
19 : // the misalignment in the three canonical scenarios: "ideal", "residual"
20 : // and "full".
21 : // It is meant to be run standalone or from the steering macro
22 : // $ALICE_ROOT/macros/MakeAlignmentObjs.C
23 : // looping on the detectors.
24 : //
25 : //========================================================================
26 :
27 : #include "AliVZEROMisAligner.h"
28 : #include "AliGeomManager.h"
29 : #include "AliMathBase.h"
30 : #include "TClonesArray.h"
31 : #include "TRandom.h"
32 : #include "AliAlignObjParams.h"
33 : #include "AliLog.h"
34 :
35 44 : ClassImp(AliVZEROMisAligner)
36 :
37 : //_______________________________________________________________________________________
38 0 : AliVZEROMisAligner::AliVZEROMisAligner() : AliMisAligner()
39 0 : {
40 : //
41 : // dummy constructor
42 : //
43 0 : }
44 :
45 : //_______________________________________________________________________________________
46 : TClonesArray* AliVZEROMisAligner::MakeAlObjsArray() {
47 : // builds and returns the array of alignment objects
48 : // according to the spcified misalignment scenario
49 : // ("ideal", "residual" or "full").
50 : //
51 0 : TClonesArray *array = new TClonesArray("AliAlignObjParams",2);
52 : TClonesArray &alobj = *array;
53 :
54 : Double_t dx, dy, dz, dpsi, dtheta, dphi;
55 0 : gRandom->SetSeed(4321);
56 : Double_t sigmatr; // max shift in cm
57 : Double_t sigmarot; // max rot in degrees
58 :
59 0 : TString v0alignable[2]={"VZERO/V0C", "VZERO/V0A"};
60 :
61 : Int_t iIndex=0; // VZERO is not indexed
62 : AliGeomManager::ELayerID iLayer = AliGeomManager::kInvalidLayer;
63 0 : UShort_t volid = AliGeomManager::LayerToVolUID(iLayer,iIndex);
64 :
65 0 : if(TString(GetMisalType())=="ideal")
66 : {
67 :
68 0 : for(Int_t ii=0; ii<2; ii++)
69 0 : new(alobj[ii]) AliAlignObjParams(v0alignable[ii].Data(), volid, 0., 0., 0., 0., 0., 0., kTRUE);
70 :
71 0 : }else if(TString(GetMisalType())=="residual" || TString(GetMisalType())=="full"){
72 :
73 0 : if(!AliGeomManager::GetGeometry())
74 : {
75 0 : AliError("No geometry loaded into AliGeomManager! Returning null pointer!");
76 0 : return 0;
77 : }
78 :
79 : sigmatr = 0.1;
80 : sigmarot = 0.5;
81 :
82 0 : for(Int_t ii=0; ii<2; ii++)
83 : {
84 0 : dx = AliMathBase::TruncatedGaus(0.,sigmatr, 3*sigmatr);
85 0 : dy = AliMathBase::TruncatedGaus(0.,sigmatr, 3*sigmatr);
86 0 : dz = AliMathBase::TruncatedGaus(0.,sigmatr, 3*sigmatr);
87 0 : dpsi = AliMathBase::TruncatedGaus(0.,sigmarot, 3*sigmarot);
88 0 : dtheta = AliMathBase::TruncatedGaus(0.,sigmarot, 3*sigmarot);
89 0 : dphi = AliMathBase::TruncatedGaus(0.,sigmarot, 3*sigmarot);
90 0 : new(alobj[ii]) AliAlignObjParams(v0alignable[ii].Data(), volid, dx, dy, dz, dpsi, dtheta, dphi, kFALSE);
91 : }
92 :
93 : }else{
94 0 : AliError(Form("\"%s\" is not a valid identifier for misalignment types. Exiting ...",GetMisalType()));
95 0 : return 0;
96 : }
97 :
98 0 : return array;
99 0 : }
100 :
101 : //_______________________________________________________________________________________
102 : AliCDBMetaData* AliVZEROMisAligner::GetCDBMetaData() const {
103 : // Returns the comment and responsible for the
104 : // AliCDBMetaData to be associated with the OCDB entry
105 : // containing the VZERO array of misalignment objects
106 : //
107 0 : AliCDBMetaData* md = new AliCDBMetaData();
108 0 : md->SetResponsible("Brigitte Cheynis");
109 :
110 0 : if(TString(GetMisalType())=="ideal")
111 0 : md->SetComment("Alignment objects for VZERO ideal misalignment");
112 0 : if(TString(GetMisalType())=="residual")
113 0 : md->SetComment("Alignment objects for VZERO residual misalignment");
114 0 : if(TString(GetMisalType())=="full")
115 0 : md->SetComment("Alignment objects for VZERO full misalignment");
116 :
117 0 : return md;
118 0 : }
|