Crombie Tools
oldmaketree.sh
Go to the documentation of this file.
1 #!/bin/bash
2 
3 TreeName=$1
4 
5 if [ "$TreeName" = "" ]
6 then
7  echo ""
8  echo " +------------------------------------------------------------+"
9  echo " | First argument is the file <TreeName>. |"
10  echo " | This can be with or without the extension (it's stripped). |"
11  echo " | This script then looks for <TreeName>.txt to make a class. |"
12  echo " +------------------------------------------------------------+"
13  echo ""
14  exit
15 fi
16 
17 TreeName=${TreeName%%.*}
18 
19 def=`echo $TreeName | tr "[a-z]" "[A-Z]"`
20 
21 inVarsFile=$TreeName.txt
22 h=$TreeName.h
23 s=$TreeName.h
24 
25 if [ ! -f $inVarsFile ]
26 then
27  echo "$inVarsFile does not exist." >&2
28  exit 12
29 fi
30 
31 echo "#ifndef CROMBIE_"$def"_H" > $h
32 echo "#define CROMBIE_"$def"_H" >> $h
33 
34 echo "" >> $h
35 echo "#include \"TFile.h\"" >> $h
36 echo "#include \"TTree.h\"" >> $h
37 
38 declare -a otherTypes=()
39 for branch in `cat $inVarsFile`
40 do
41  after="${branch##*/}"
42  varLetter="${after%=*}"
43  if [ "$varLetter" != "F" -a "$varLetter" != "I" -a "$varLetter" != "i" -a "$varLetter" != "O" -a "$varLetter" != "VF" -a "$varLetter" != "VI" -a "$varLetter" != "VO" -a "$varLetter" != "L" -a "$varLetter" != "l" ]; then
44  if [ "${varLetter:0:1}" != "V" ]; then
45  varType=$varLetter
46  else
47  varType=${varLetter:1}
48  fi
49  otherTypes=("${otherTypes[@]}" "$varType")
50  fi
51 done
52 
53 for objType in `echo "${otherTypes[@]}" | tr ' ' '\n' | sort -u`
54 do
55  echo "#include \""$objType".h\"" >> $h
56 done
57 
58 echo "" >> $h
59 echo "class $TreeName" >> $h
60 echo "{" >> $h
61 echo " public:" >> $h
62 echo " $TreeName( TTree* tree );" >> $h
63 echo " $TreeName( const char* name );" >> $h
64 echo " $TreeName( const char* name, TString outFileName );" >> $h
65 echo " $TreeName( const char* name, TFile* outFile );" >> $h
66 echo " virtual ~$TreeName();" >> $h
67 echo "" >> $h
68 
69 for branch in `cat $inVarsFile`
70 do
71  if [ "${branch:0:1}" = "#" ]
72  then
73  branch=${branch:1}
74  fi
75  varType=""
76  varName="${branch%/*}"
77  after="${branch##*/}"
78  varLetter="${after%=*}"
79  varDefault="${after##*=}"
80  if [ "$varLetter" = "F" ]; then
81  varType="float"
82  elif [ "$varLetter" = "I" ]; then
83  varType="int "
84  elif [ "$varLetter" = "i" ]; then
85  varType="unsigned int "
86  elif [ "$varLetter" = "L" ]; then
87  varType="long "
88  elif [ "$varLetter" = "l" ]; then
89  varType="unsigned long"
90  elif [ "$varLetter" = "O" ]; then
91  varType="bool "
92  elif [ "$varLetter" = "VF" ]; then
93  varType="std::vector<float>*"
94  elif [ "$varLetter" = "VI" ]; then
95  varType="std::vector<int>* "
96  elif [ "$varLetter" = "VO" ]; then
97  varType="std::vector<bool>* "
98  elif [ "${varLetter:0:1}" != "V" ]; then
99  varType=$varLetter"* "
100  else
101  varType="std::vector<"${varLetter:1}"*>*"
102  fi
103  echo " $varType $varName;" >> $h
104 done
105 
106 echo "" >> $h
107 echo " TTree* ReturnTree() { return t; }" >> $h
108 echo " TFile* ReturnFile() { return fFile; }" >> $h
109 echo " void Fill() { t->Fill(); Reset(); }" >> $h
110 echo " void Reset();" >> $h
111 echo " void WriteToFile ( TFile *f ) { f->WriteTObject(t, t->GetName()); }" >> $h
112 echo " void Write() { fFile->WriteTObject(t, t->GetName());" >> $h
113 echo " fFile->Close(); }" >> $h
114 echo " void Set ( const char* name, float val );" >> $h
115 echo "" >> $h
116 echo " private:" >> $h
117 echo " TFile* fFile;" >> $h
118 echo " TTree* t;" >> $h
119 echo " void SetupTree();" >> $h
120 echo "};" >> $h
121 
122 echo "" >> $s
123 echo "//--------------------------------------------------------------------------------------------------" >> $s
124 echo "$TreeName::$TreeName(TTree* tree) :" >> $s
125 echo " fFile(0)" >> $s
126 echo "{" >> $s
127 echo " t = tree;" >> $s
128 echo " SetupTree();" >> $s
129 echo "}" >> $s
130 echo "" >> $s
131 
132 echo "//--------------------------------------------------------------------------------------------------" >> $s
133 echo "$TreeName::$TreeName(const char* name) :" >> $s
134 echo " fFile(0)" >> $s
135 echo "{" >> $s
136 echo " t = new TTree(name,name);" >> $s
137 echo " SetupTree();" >> $s
138 echo "}" >> $s
139 echo "" >> $s
140 
141 echo "//--------------------------------------------------------------------------------------------------" >> $s
142 echo "$TreeName::$TreeName(const char* name, TString outFileName)" >> $s
143 echo "{" >> $s
144 echo " fFile = new TFile(outFileName,\"RECREATE\");" >> $s
145 echo " t = new TTree(name,name);" >> $s
146 echo " SetupTree();" >> $s
147 echo "}" >> $s
148 echo "" >> $s
149 
150 echo "//--------------------------------------------------------------------------------------------------" >> $s
151 echo "$TreeName::$TreeName(const char* name, TFile* outFile)" >> $s
152 echo "{" >> $s
153 echo " fFile = outFile;" >> $s
154 echo " t = new TTree(name,name);" >> $s
155 echo " SetupTree();" >> $s
156 echo "}" >> $s
157 echo "" >> $s
158 
159 echo "//--------------------------------------------------------------------------------------------------" >> $s
160 echo "$TreeName::~$TreeName()" >> $s
161 echo "{ }" >> $s
162 echo "" >> $s
163 
164 echo "//--------------------------------------------------------------------------------------------------" >> $s
165 echo "void" >> $s
166 echo "$TreeName::Reset()" >> $s
167 echo "{" >> $s
168 for branch in `cat $inVarsFile`
169 do
170  if [ "${branch:0:1}" = "#" ]
171  then
172  branch=${branch:1}
173  fi
174  varName="${branch%/*}"
175  after="${branch##*/}"
176  varLetter="${after%=*}"
177  varDefault="${after##*=}"
178  echo " $varName = $varDefault;" >> $s
179 done
180 echo "}" >> $s
181 echo "" >> $s
182 
183 echo "//--------------------------------------------------------------------------------------------------" >> $s
184 echo "void" >> $s
185 echo "$TreeName::SetupTree()" >> $s
186 echo "{" >> $s
187 for branch in `cat $inVarsFile`
188 do
189  if [ "${branch:0:1}" = "#" ]
190  then
191  continue
192  fi
193  varName="${branch%/*}"
194  after="${branch##*/}"
195  varLetter="${after%=*}"
196  varDefault="${after##*=}"
197  if [ "$varLetter" = "I" -o "$varLetter" = "i" -o "$varLetter" = "L" -o "$varLetter" = "l" -o "$varLetter" = "F" -o "$varLetter" = "O" ]; then
198  echo " t->Branch(\"$varName\",&$varName,\"$varName/$varLetter\");" >> $s
199  else
200  echo " t->Branch(\"$varName\",&$varName);" >> $s
201  fi
202 done
203 echo "" >> $s
204 echo " Reset();" >> $s
205 echo "}" >> $s
206 echo "" >> $s
207 
208 echo "//--------------------------------------------------------------------------------------------------" >> $s
209 echo "void" >> $s
210 echo "$TreeName::Set(const char* name, float val)" >> $s
211 echo "{" >> $s
212 for branch in `cat $inVarsFile`
213 do
214  if [ "${branch:0:1}" = "#" ]
215  then
216  continue
217  fi
218  varName="${branch%/*}"
219  after="${branch##*/}"
220  varLetter="${after%=*}"
221  if [ "$varLetter" = "F" ]; then
222  echo " if (strcmp(name, \"$varName\") == 0)" >> $s
223  echo " $varName = val;" >> $s
224  fi
225 done
226 echo "}" >> $s
227 echo "" >> $s
228 echo "#endif" >> $h